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
@@ -21,6 +21,7 @@ require 'cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb'
21
21
  require 'cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb'
22
22
  require 'cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb'
23
23
  require 'cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb'
24
+ require 'cosmos/tools/tlm_viewer/widgets/labelled_widget.rb'
24
25
  require 'cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb'
25
26
  require 'cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb'
26
27
  require 'cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb'
@@ -31,6 +32,7 @@ require 'cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb'
31
32
  require 'cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb'
32
33
  require 'cosmos/tools/tlm_viewer/widgets/label_widget.rb'
33
34
  require 'cosmos/tools/tlm_viewer/widgets/layout_widget.rb'
35
+ require 'cosmos/tools/tlm_viewer/widgets/led_widget.rb'
34
36
  require 'cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb'
35
37
  require 'cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb'
36
38
  require 'cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb'
@@ -11,9 +11,10 @@
11
11
  require 'cosmos'
12
12
 
13
13
  module Cosmos
14
-
14
+ # Implement aging in a telemetry widget. When values change they are
15
+ # displayed whith a white background. If the value doesn't change the
16
+ # text box background slowly fades to grey.
15
17
  module AgingWidget
16
-
17
18
  attr_accessor :coloring
18
19
 
19
20
  def setup_aging
@@ -104,7 +105,5 @@ module Cosmos
104
105
  end
105
106
  end
106
107
  end
107
-
108
108
  end
109
-
110
- end # module Cosmos
109
+ end
@@ -13,7 +13,8 @@ require 'cosmos/tools/tlm_viewer/widgets/widget'
13
13
  require 'cosmos/tools/tlm_viewer/widgets/aging_widget'
14
14
 
15
15
  module Cosmos
16
-
16
+ # Displays an array of values in a text box. The values can be formatted
17
+ # and displayed in multiple rows.
17
18
  class ArrayWidget < Qt::TextEdit
18
19
  include Widget
19
20
  include AgingWidget
@@ -60,7 +61,5 @@ module Cosmos
60
61
  super
61
62
  process_aging_settings
62
63
  end
63
-
64
64
  end
65
-
66
- end # module Cosmos
65
+ end
@@ -15,10 +15,10 @@ require 'cosmos'
15
15
  require 'cosmos/tools/tlm_viewer/widgets/textbox_widget'
16
16
 
17
17
  module Cosmos
18
-
18
+ # Displays binary data in a large scrollable window with the data address
19
+ # (offset into the data) followed by the binary data.
19
20
  class BlockWidget < TextboxWidget
20
-
21
- def initialize (parent_layout, target_name, packet_name, item_name, width = 200, height = 100, format_string = "%02X", bytes_per_word = 4, words_per_row = 4, addr_format = nil, value_type = :RAW)
21
+ def initialize(parent_layout, target_name, packet_name, item_name, width = 200, height = 100, format_string = "%02X", bytes_per_word = 4, words_per_row = 4, addr_format = nil, value_type = :RAW)
22
22
  super(parent_layout, target_name, packet_name, item_name, width, height, value_type)
23
23
  @format_string = format_string.to_s
24
24
  @bytes_per_word = bytes_per_word.to_i
@@ -53,5 +53,4 @@ module Cosmos
53
53
  text
54
54
  end
55
55
  end
56
-
57
- end # module Cosmos
56
+ end
@@ -9,18 +9,32 @@
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
11
  module Cosmos
12
+ # Creates a clickable point on the canvas which opens another screen.
13
+ # Add to canvas by using the SCREEN setting. For example:
14
+ # SETTING SCREEN "INST HS" 100 100
12
15
  module CanvasClickable
13
16
  # Requires @x, @y, @x_end, and @y_end to be defined
14
17
  def on_click(event, x, y)
15
18
  return false unless @screen_settings
16
19
  if (x < @x_end) && (x > @x) && (y < @y_end) && (y > @y)
17
20
  display(@screen_settings[0], @screen_settings[1].to_i, @screen_settings[2].to_i)
18
- true
21
+ true # We handled the click so return true
19
22
  else
20
- false
23
+ false # Allow other widgets to handle the on_click
21
24
  end
22
25
  end
23
26
 
27
+ # Requires @x, @y, @x_end, and @y_end to be defined
28
+ def on_move(event, x, y)
29
+ return false unless @screen_settings
30
+ if (x < @x_end) && (x > @x) && (y < @y_end) && (y > @y)
31
+ Qt::Application.setOverrideCursor(Cosmos.getCursor(Qt::PointingHandCursor))
32
+ else
33
+ Qt::Application.setOverrideCursor(Cosmos.getCursor(Qt::ArrowCursor))
34
+ end
35
+ false # Allow other widgets to handle on_move
36
+ end
37
+
24
38
  def set_setting(setting_name, setting_values)
25
39
  case setting_name.upcase
26
40
  when 'SCREEN'
@@ -8,7 +8,7 @@
8
8
  # as published by the Free Software Foundation; version 3 with
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
- # This file contains the implementation of the CanvasWidget class. This widget
11
+ # This file contains the implementation of the CanvasWidget class. This widget
12
12
  # represents a canvas where draw-able widgets (such as images and lines) can be
13
13
  # added.
14
14
 
@@ -17,20 +17,24 @@ require 'cosmos/tools/tlm_viewer/widgets/widget'
17
17
  require 'cosmos/tools/tlm_viewer/widgets/layout_widget'
18
18
 
19
19
  module Cosmos
20
+ # Create a blank widget which other widgets can draw on using the painter.
21
+ # Each subwidget should implement the paint(painter) method which will be
22
+ # called in the paintEvent of this widget.
20
23
  class CanvasWidget < Qt::Widget
21
24
  include Widget
22
25
  include LayoutWidget
23
26
 
24
27
  def initialize(parent_layout, width, height)
25
28
  super()
29
+ setMouseTracking(true) # for mouse move events
26
30
  @repaint_objects = []
27
31
  self.minimumWidth = width.to_i
28
32
  self.minimumHeight = height.to_i
29
33
  parent_layout.addWidget(self) if parent_layout
30
34
  end
31
35
 
32
- # add_repaint - Child widgets to the canvas must call add_repaint to register
33
- # itself with the canvas so that they are painted when the canvas is. Note,
36
+ # Child widgets to the canvas must call add_repaint to register
37
+ # itself with the canvas so that they are painted when the canvas is. Note,
34
38
  # the order in which child widgets are painted is the order in which they
35
39
  # are created.
36
40
  def add_repaint(obj)
@@ -63,6 +67,16 @@ module Cosmos
63
67
  end
64
68
  end
65
69
 
70
+ def mouseMoveEvent(event)
71
+ cur_x = mapFromGlobal(self.cursor.pos).x
72
+ cur_y = mapFromGlobal(self.cursor.pos).y
73
+ @repaint_objects.each do |obj|
74
+ if obj.respond_to?(:on_move)
75
+ break if obj.on_move(event, cur_x, cur_y)
76
+ end
77
+ end
78
+ end
79
+
66
80
  def update_widget
67
81
  self.update
68
82
  end
@@ -11,6 +11,7 @@
11
11
  require 'cosmos/tools/tlm_viewer/widgets/widget'
12
12
 
13
13
  module Cosmos
14
+ # Display a circle on the canvas of specified color and width
14
15
  class CanvasdotWidget
15
16
  include Widget
16
17
 
@@ -29,8 +30,6 @@ module Cosmos
29
30
  end
30
31
 
31
32
  @point = Qt::Point.new(0, 0)
32
- update_point
33
-
34
33
  @width = width.to_i
35
34
  @color = Cosmos::getColor(color)
36
35
  parent_layout.add_repaint(self)
@@ -11,6 +11,7 @@
11
11
  require 'cosmos/tools/tlm_viewer/widgets/widget'
12
12
 
13
13
  module Cosmos
14
+ # Display an ellipse on the canvas which can be filled or open
14
15
  class CanvasellipseWidget
15
16
  include Widget
16
17
 
@@ -35,6 +36,5 @@ module Cosmos
35
36
  painter.drawEllipse(@center_x, @center_y, @width, @height)
36
37
  painter.restore
37
38
  end
38
-
39
39
  end
40
40
  end
@@ -12,6 +12,8 @@ require 'cosmos/tools/tlm_viewer/widgets/widget'
12
12
  require 'cosmos/tools/tlm_viewer/widgets/canvas_clickable'
13
13
 
14
14
  module Cosmos
15
+ # Displays an image on a canvas. The image is loaded from file first by
16
+ # looking in the target's screens directory and then the COSMOS data path.
15
17
  class CanvasimageWidget
16
18
  include Widget
17
19
  include CanvasClickable
@@ -20,15 +22,9 @@ module Cosmos
20
22
  super()
21
23
  @x = x.to_i
22
24
  @y = y.to_i
25
+ @filename = filename
23
26
  @image = nil
24
- filename = File.join(::Cosmos::USERPATH, 'config', 'data', filename)
25
- unless File.exist?(filename)
26
- raise "Can't find the file #{filename} in #{::Cosmos::USERPATH}/config/data"
27
- end
28
- @image = Qt::Image.new(filename)
29
27
  parent_layout.add_repaint(self)
30
- @x_end = @x + @image.width
31
- @y_end = @y + @image.height
32
28
  end
33
29
 
34
30
  def paint(painter)
@@ -39,5 +35,14 @@ module Cosmos
39
35
  super()
40
36
  @image.dispose
41
37
  end
38
+
39
+ def process_settings
40
+ super
41
+ # We wait until here to find the image because we need @screen to be set
42
+ # to determine the target name to look in the target's screens directory
43
+ @image = get_image(@filename)
44
+ @x_end = @x + @image.width
45
+ @y_end = @y + @image.height
46
+ end
42
47
  end
43
48
  end
@@ -8,52 +8,102 @@
8
8
  # as published by the Free Software Foundation; version 3 with
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
- # This file contains the implementation of the CanvasimagevalueWidget class. This
12
- # widget displays one of two images within a CanvasWidget. The image displayed
13
- # is either '[filename]on.gif' or '[filename]off.gif' depending on the
14
- # telemetry point value of 1 or 0 respectively.
11
+ # This file contains the implementation of the CanvasimagevalueWidget class.
12
+ # The widget displays a default image but users should use the SETTING IMAGE
13
+ # option to set the images to display for a given value.
15
14
 
16
15
  require 'cosmos/tools/tlm_viewer/widgets/canvasvalue_widget'
17
16
  require 'cosmos/tools/tlm_viewer/widgets/canvas_clickable'
18
17
 
19
18
  module Cosmos
19
+ # Displays an image on a canvas based on a telemetry value. Multiple images
20
+ # can be set to display by using the IMAGE setting. For example:
21
+ # CANVASIMAGEVALUE TGT PKT ITEM CONVERTED "ground_error.gif" 400 100
22
+ # SETTING IMAGE CONNECTED "ground_on.gif" 400 100
23
+ # SETTING IMAGE UNAVAILABLE "ground_off.gif" 400 100
24
+ # The default image to display is error.gif. If the converted value from
25
+ # the telemetry point named TGT PKT ITEM has a converted value of
26
+ # 'CONNECTED' the ground_on.gif image is displayed and if the value is
27
+ # 'UNAVAILABLE' the ground_off.git image is displayed.
20
28
  class CanvasimagevalueWidget < CanvasvalueWidget
21
29
  include CanvasClickable
22
-
23
- def initialize(parent_layout, target_name, packet_name, item_name, filename, x, y, value_type = :RAW)
24
- super(parent_layout, target_name, packet_name, item_name, value_type)
25
- @x = x.to_i
26
- @y = y.to_i
27
- @image_on = nil
28
- @image_off = nil
29
-
30
- filenameOn = Dir[File.join(::Cosmos::USERPATH, 'config', 'data', filename + 'on.*')][0]
31
- unless File.exist?(filenameOn)
32
- raise "Can't find the file #{filenameOn} in #{::Cosmos::USERPATH}/config/data"
33
- end
34
- @image_on = Qt::Image.new(filenameOn)
35
30
 
36
- filenameOff = Dir[File.join(::Cosmos::USERPATH, 'config', 'data', filename + 'off.*')][0]
37
- unless File.exist?(filenameOff)
38
- raise "Can't find the file #{filenameOff} in #{::Cosmos::USERPATH}/config/data"
31
+ def initialize(parent_layout, target_name, packet_name, item_name, value_type = :RAW, default_image = nil, x = nil, y = nil)
32
+ super(parent_layout, target_name, packet_name, item_name, value_type)
33
+ @images = []
34
+ if default_image
35
+ @default_image_name = default_image
36
+ @default_x = Integer(x)
37
+ @default_y = Integer(y)
39
38
  end
40
- @image_off = Qt::Image.new(filenameOff)
41
- @x_end = @x + [@image_on.width, @image_off.width].max
42
- @y_end = @y + [@image_on.height, @image_off.height].max
43
39
  end
44
40
 
45
- def draw_widget(painter, on_value)
46
- if on_value
47
- painter.drawImage(@x, @y, @image_on) if @image_on
41
+ def paint(painter)
42
+ if @values.length > 1
43
+ eval_string = "1"
44
+ # This code uses the booleans set by the process_settings function and evaluates it to logically determine
45
+ # if the item should be drawn on the canvas as "on" or "off".
46
+ @item_settings.each_with_index do |item, index|
47
+ next if @values[index].to_f.nan? || @values[index].to_f.infinite?
48
+ eval_string << " " << item[0].to_s << " (" << @values[index].to_s << " " << item[1].to_s << " " << item[2].to_s << ")"
49
+ end
50
+ @value = eval(eval_string)
48
51
  else
49
- painter.drawImage(@x, @y, @image_off) if @image_off
52
+ @value = @values[0]
50
53
  end
54
+ eval(@eval)
51
55
  end
52
56
 
53
57
  def dispose
54
58
  super()
55
- @image_on.dispose
56
- @image_off.dispose
59
+ @images.each {|image| image.dispose }
60
+ @default_image.dispose if @default_image
61
+ end
62
+
63
+ def set_setting(setting_name, setting_values)
64
+ # Allow for multiple IMAGE settings by deconflicting the hash key by appending the value
65
+ if setting_name.upcase == 'IMAGE'
66
+ @settings["#{setting_name.to_s.upcase}_#{setting_values[0]}"] = setting_values
67
+ else
68
+ super(setting_name, setting_values)
69
+ end
70
+ end
71
+
72
+ def process_settings
73
+ super
74
+ @eval = 'case @value;'
75
+ @settings.each do |setting_name, setting_values|
76
+ case setting_name
77
+ when /IMAGE/
78
+ value_string = setting_values[0]
79
+ @images << get_image(setting_values[1])
80
+ x = setting_values[2]
81
+ y = setting_values[3]
82
+
83
+ case value_string.upcase
84
+ when 'TRUE'
85
+ value = true
86
+ when 'FALSE'
87
+ value = false
88
+ when /\d\.\.\d/ # Range
89
+ value = Range.new(*value_string.split("..").map(&:to_i))
90
+ else
91
+ begin
92
+ value = Float(value_string)
93
+ rescue
94
+ value = "'#{value_string}'"
95
+ end
96
+ end
97
+ @eval << "when #{value} then painter.drawImage(#{x}, #{y}, @images[#{@images.length-1}]);"
98
+ @eval << "@x=#{x};@y=#{y};@x_end=@x+@images[#{@images.length-1}].width;@y_end=@y+@images[#{@images.length-1}].height;"
99
+ end
100
+ end
101
+ if @default_image_name
102
+ @default_image = get_image(@default_image_name)
103
+ @eval << "else painter.drawImage(@default_x, @default_y, @default_image);"
104
+ @eval << "@x=@default_x;@y=@default_y;@x_end=@x+@default_image.width;@y_end=@y+@default_image.height;"
105
+ end
106
+ @eval << "end"
57
107
  end
58
108
  end
59
109
  end
@@ -12,6 +12,7 @@ require 'cosmos/tools/tlm_viewer/widgets/widget'
12
12
  require 'cosmos/tools/tlm_viewer/widgets/canvas_clickable'
13
13
 
14
14
  module Cosmos
15
+ # Display text on the canvas of a given size and color
15
16
  class CanvaslabelWidget
16
17
  include Widget
17
18
  include CanvasClickable
@@ -12,7 +12,8 @@ require 'cosmos'
12
12
  require 'cosmos/tools/tlm_viewer/widgets/canvasvalue_widget'
13
13
 
14
14
  module Cosmos
15
-
15
+ # Displays a label and value for the given telemetry point. By default
16
+ # the telemetry value is drawn inside a rectangular box.
16
17
  class CanvaslabelvalueWidget < CanvasvalueWidget
17
18
  def initialize(parent_layout, target_name, packet_name, item_name, x1, y1, font_size = 12, color = 'black', frame = true, frame_width = 3, value_type = :CONVERTED)
18
19
  super(parent_layout, target_name, packet_name, item_name, value_type)
@@ -11,6 +11,8 @@
11
11
  require 'cosmos/tools/tlm_viewer/widgets/widget'
12
12
 
13
13
  module Cosmos
14
+ # Draws a line on the canvas with an optional 'connector' (circle) on
15
+ # the end of the line
14
16
  class CanvaslineWidget
15
17
  include Widget
16
18
 
@@ -15,6 +15,10 @@
15
15
  require 'cosmos/tools/tlm_viewer/widgets/canvasvalue_widget'
16
16
 
17
17
  module Cosmos
18
+ # Draws a line on the canvas that changes color based on the value of the
19
+ # given telemetry point. Typically used to either show to hide the line
20
+ # by drawing it as the same color as the canvas. For example:
21
+ # CANVASLINEVALUE INST HEALTH_STATUS GROUND1STATUS 420 135 240 330 green white 3
18
22
  class CanvaslinevalueWidget < CanvasvalueWidget
19
23
  def initialize(parent_layout, target_name, packet_name, item_name, x1, y1, x2, y2, color_on = 'green', color_off = 'blue', width = 3, connector = 'NO_CONNECTOR', value_type = :RAW)
20
24
  super(parent_layout, target_name, packet_name, item_name, value_type)
@@ -11,6 +11,10 @@
11
11
  require 'cosmos/tools/tlm_viewer/widgets/widget'
12
12
 
13
13
  module Cosmos
14
+ # Abstract class which provides helper methods to draw a telemetry point
15
+ # on a canvas. Has the ability to AND or OR together additional telemetry
16
+ # points to determine whether the value is "on" or not. Subclasses must
17
+ # implement draw_widget(draw_context, on_state).
14
18
  class CanvasvalueWidget
15
19
  include Widget
16
20
 
@@ -68,34 +72,38 @@ module Cosmos
68
72
  raise 'Override draw_widget to make this class work!'
69
73
  end
70
74
 
75
+ def set_setting(setting_name, setting_values)
76
+ if setting_name =~ /^TLM_/
77
+ @settings["#{setting_name.to_s.upcase}_#{setting_values.join('_')}"] = setting_values
78
+ else
79
+ super(setting_name, setting_values)
80
+ end
81
+ end
82
+
71
83
  def process_settings
72
84
  super
73
85
  @settings.each do |setting_name, setting_values|
74
- begin
75
- case setting_name
76
- when 'VALUE_EQ'
77
- @item_settings[0] = ['and', '==', setting_values[0]]
78
- when 'VALUE_GT'
79
- @item_settings[0] = ['and', '>', setting_values[0]]
80
- when 'VALUE_GTEQ'
81
- @item_settings[0] = ['and', '>=', setting_values[0]]
82
- when 'VALUE_LT'
83
- @item_settings[0] = ['and', '<', setting_values[0]]
84
- when 'VALUE_LTEQ'
85
- @item_settings[0] = ['and', '<=', setting_values[0]]
86
- # TLM_AND allows a telemetry item to be dependant on another item for its state
87
- when 'TLM_AND'
88
- @items << [setting_values[0], setting_values[1], setting_values[2]]
89
- @values << 0
90
- set_item_settings('and', setting_values[3], setting_values[4])
91
- # TLM_OR allows a telemetry item to be dependant on another item for its state
92
- when 'TLM_OR'
93
- @items << [setting_values[0], setting_values[1], setting_values[2]]
94
- @values << 0
95
- set_item_settings('or', setting_values[3], setting_values[4])
96
- end
97
- rescue => err
98
- puts "Error Processing Settings!: #{err}"
86
+ case setting_name
87
+ when 'VALUE_EQ'
88
+ @item_settings[0] = ['and', '==', setting_values[0]]
89
+ when 'VALUE_GT'
90
+ @item_settings[0] = ['and', '>', setting_values[0]]
91
+ when 'VALUE_GTEQ'
92
+ @item_settings[0] = ['and', '>=', setting_values[0]]
93
+ when 'VALUE_LT'
94
+ @item_settings[0] = ['and', '<', setting_values[0]]
95
+ when 'VALUE_LTEQ'
96
+ @item_settings[0] = ['and', '<=', setting_values[0]]
97
+ # TLM_AND allows a telemetry item to be dependant on another item for its state
98
+ when /^TLM_AND/
99
+ @items << [setting_values[0], setting_values[1], setting_values[2]]
100
+ @values << 0
101
+ set_item_settings('and', setting_values[3], setting_values[4])
102
+ # TLM_OR allows a telemetry item to be dependant on another item for its state
103
+ when /^TLM_OR/
104
+ @items << [setting_values[0], setting_values[1], setting_values[2]]
105
+ @values << 0
106
+ set_item_settings('or', setting_values[3], setting_values[4])
99
107
  end
100
108
  end
101
109
  end