cosmos 4.3.0-java → 4.4.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -11,7 +11,7 @@
11
11
  # This file contains top level functions in the Cosmos namespace
12
12
 
13
13
  require 'thread'
14
- require 'digest/md5'
14
+ require 'digest'
15
15
  require 'open3'
16
16
  require 'cosmos/core_ext'
17
17
  require 'cosmos/version'
@@ -170,8 +170,12 @@ module Cosmos
170
170
  return filename if File.exist? filename
171
171
 
172
172
  # Check relative to executing file
173
- filename = Cosmos.path($0, ['config', 'data', name])
174
- return filename if File.exist? filename
173
+ begin # path raises so begin rescue it
174
+ filename = Cosmos.path($0, ['config', 'data', name])
175
+ return filename if File.exist? filename
176
+ rescue
177
+ # Couldn't find the file so return nil below
178
+ end
175
179
  nil
176
180
  end
177
181
 
@@ -240,6 +244,11 @@ module Cosmos
240
244
  rescue Exception
241
245
  # Oh well - we tried
242
246
  end
247
+ if exception.class == TypeError and exception.message =~ /Thread::Mutex/
248
+ original_backtrace = exception.backtrace
249
+ exception = exception.exception("Mutex exists in a packet. Note: Packets must not be read during class initializers for Conversions, Limits Responses, etc.: #{exception}")
250
+ exception.set_backtrace(original_backtrace)
251
+ end
243
252
  self.handle_fatal_exception(exception)
244
253
  end
245
254
  end
@@ -373,24 +382,26 @@ module Cosmos
373
382
  end
374
383
  end
375
384
 
376
- # Runs an md5 sum over one or more files and returns the Digest::MD5 object.
385
+ # Runs a hash algorithm over one or more files and returns the Digest object.
377
386
  # Handles windows/unix new line differences but changes in whitespace will
378
- # change the md5 sum.
387
+ # change the hash sum.
379
388
  #
380
389
  # Usage:
381
- # digest = Cosmos.md5_files(files)
390
+ # digest = Cosmos.hash_files(files, additional_data, hashing_algorithm)
382
391
  # digest.digest # => the 16 bytes of digest
383
392
  # digest.hexdigest # => the formatted string in hex
384
393
  #
385
- # @param filenames [Array<String>] List of files to read and calculate a md5
394
+ # @param filenames [Array<String>] List of files to read and calculate a hashing
386
395
  # sum on
387
- # @param additional_data [String] Additional data to add to the md5 sum
388
- # @return [Digest::MD5] The md5 sum
389
- def self.md5_files(filenames, additional_data = nil)
390
- digest = Digest::MD5.new
396
+ # @param additional_data [String] Additional data to add to the hashing sum
397
+ # @param hashing_algorithm [String] Hashing algorithm to use
398
+ # @return [Digest::<algorithm>] The hashing sum object
399
+ def self.hash_files(filenames, additional_data = nil, hashing_algorithm = 'MD5')
400
+ digest = Digest.const_get(hashing_algorithm).send('new')
401
+
391
402
  Cosmos.set_working_dir do
392
403
  filenames.each do |filename|
393
- # Read the file's data and add to the running MD5 sum
404
+ # Read the file's data and add to the running hashing sum
394
405
  digest << File.read(filename).gsub(/\r/,'')
395
406
  end
396
407
  end
@@ -1,12 +1,12 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- COSMOS_VERSION = '4.3.0'
3
+ COSMOS_VERSION = '4.4.0'
4
4
  module Cosmos
5
5
  module Version
6
6
  MAJOR = '4'
7
- MINOR = '3'
7
+ MINOR = '4'
8
8
  PATCH = '0'
9
- BUILD = '3588276d89cb9d934e0e51ad8c6e2426fc5dafb5'
9
+ BUILD = '30bd354efce074e6684f2fb4f4df8dc12d2f3df5'
10
10
  end
11
- VERSION = '4.3.0'
11
+ VERSION = '4.4.0'
12
12
  end
@@ -12,89 +12,70 @@ if RUBY_ENGINE == 'ruby'
12
12
  require 'spec_helper'
13
13
  require 'cosmos/gui/qt'
14
14
  require 'cosmos/script'
15
- require 'cosmos/gui/utilities/script_module_gui'
15
+ require 'cosmos/script/scripting'
16
16
 
17
17
  module Cosmos
18
18
  describe Script do
19
- after(:all) do
20
- # Load the original scripting file over the script_module_gui
21
- load 'cosmos/script/scripting.rb'
22
- end
23
-
24
- def stub_null_object(constant)
25
- class_double(constant).tap do |double|
26
- stub_const(constant, double)
27
- allow(double).to receive(:new).and_return(double(constant).as_null_object)
28
- yield double if block_given?
29
- end
30
- end
31
-
32
- let!(:qt_module) do
33
- class_double('Qt').as_stubbed_const(:transfer_nested_constants => true).tap do |double|
34
- stub_const('Qt', double)
35
- stub_const('Qt::WindowTitleHint', double)
36
- stub_const('Qt::WindowSystemMenuHint', double)
37
- allow(double).to receive(:execute_in_main_thread).and_yield
38
- allow(double).to receive(:debug_level)
39
- end
40
- stub_null_object('Qt::Widget')
41
- stub_null_object('Qt::Dialog') do |double|
42
- instance = double("Qt::Dialog").as_null_object
43
- allow(instance).to receive(:exec).and_return 1 # break the loop by returning 1
44
- allow(double).to receive(:new).and_return(instance)
45
- end
46
- # Stub Accepted to be 1 to match the instance exec returning 1
47
- stub_const('Qt::Dialog::Accepted', 1)
48
- stub_null_object('Qt::VBoxLayout')
49
- stub_null_object('Qt::HBoxLayout')
50
- stub_null_object('Qt::Label')
51
- stub_null_object('Qt::PushButton')
52
- end
53
-
54
19
  describe "combo_box" do
55
- it "should not modify the inputs" do
56
- class_double('Cosmos::ComboboxChooser').as_stubbed_const.tap do |double|
57
- chooser = double("ComboboxChooser").as_null_object
58
- allow(chooser).to receive(:sel_command_callback=) do |args|
59
- # Simulate the user clicking the TEST option in the combobox
60
- args.call("TEST")
61
- end
62
- allow(double).to receive(:new).and_return(chooser)
20
+ it "should not modify the button inputs" do
21
+ expect(self).to receive(:gets) { ' ' }
22
+ capture_io do |stdout|
23
+ buttons = %w(THIS IS A TEST)
24
+ combo_box("Combo box test", *buttons)
25
+ expect(buttons).to eq %w(THIS IS A TEST)
26
+ expect(stdout.string).to match(/Combo box test/)
63
27
  end
28
+ end
64
29
 
65
- buttons = %w(THIS IS A TEST)
66
- combo_box("HI", *buttons)
67
- expect(buttons).to eq %w(THIS IS A TEST)
30
+ it "should display details" do
31
+ expect(self).to receive(:gets) { ' ' }
32
+ capture_io do |stdout|
33
+ buttons = %w(THIS IS A TEST)
34
+ combo_box("HI", *buttons, details: 'These are the details')
35
+ expect(stdout.string).to match(/These are the details/)
36
+ end
68
37
  end
69
38
  end
70
39
 
71
40
  describe "message_box" do
72
41
  it "should not modify the inputs" do
73
- class_double('Qt::MessageBox').as_stubbed_const.tap do |double|
74
- msg_box = double("MessageBox").as_null_object
75
- allow(msg_box).to receive_message_chain(:clickedButton, :text).and_return("TEST")
76
- allow(double).to receive(:new).and_return(msg_box)
77
- stub_const('Qt::MessageBox::AcceptRole', 1)
78
- stub_const('Qt::MessageBox::RejectRole', 0)
42
+ expect(self).to receive(:gets) { ' ' }
43
+ capture_io do |stdout|
44
+ buttons = %w(THIS IS A TEST)
45
+ message_box("Message box test", *buttons)
46
+ expect(buttons).to eq %w(THIS IS A TEST)
47
+ expect(stdout.string).to match(/Message box test/)
79
48
  end
49
+ end
80
50
 
81
- buttons = %w(THIS IS A TEST)
82
- message_box("HI", *buttons)
83
- expect(buttons).to eq %w(THIS IS A TEST)
51
+ it "should display details" do
52
+ expect(self).to receive(:gets) { ' ' }
53
+ capture_io do |stdout|
54
+ buttons = %w(THIS IS A TEST)
55
+ message_box("HI", *buttons, details: 'These are the details')
56
+ expect(stdout.string).to match(/These are the details/)
57
+ end
84
58
  end
85
59
  end
86
60
 
87
61
  describe "vertical_message_box" do
88
62
  it "should not modify the inputs" do
89
- stub_null_object('Qt::PushButton') do |double|
90
- instance = double("Qt::PushButton").as_null_object
91
- allow(instance).to receive(:connect).and_yield
92
- allow(double).to receive(:new).and_return(instance)
63
+ expect(self).to receive(:gets) { ' ' }
64
+ capture_io do |stdout|
65
+ buttons = %w(THIS IS A TEST)
66
+ vertical_message_box("Vertical message box test", *buttons)
67
+ expect(buttons).to eq %w(THIS IS A TEST)
68
+ expect(stdout.string).to match(/Vertical message box test/)
93
69
  end
70
+ end
94
71
 
95
- buttons = %w(THIS IS A TEST)
96
- vertical_message_box("HI", *buttons)
97
- expect(buttons).to eq %w(THIS IS A TEST)
72
+ it "should display details" do
73
+ expect(self).to receive(:gets) { ' ' }
74
+ capture_io do |stdout|
75
+ buttons = %w(THIS IS A TEST)
76
+ vertical_message_box("HI", *buttons, details: 'These are the details')
77
+ expect(stdout.string).to match(/These are the details/)
78
+ end
98
79
  end
99
80
  end
100
81
  end
@@ -15,7 +15,7 @@ COMMAND INST COLLECT BIG_ENDIAN "Starts a collect on the instrument"
15
15
  PARAMETER OPCODE 112 8 UINT 0x0 0xFF 0xAB "Collect opcode"
16
16
  FORMAT_STRING "0x%0X"
17
17
  PARAMETER TEMP 120 32 FLOAT 0.0 25.0 0.0 "Collect temperature"
18
- UNITS Celcius C
18
+ UNITS Celsius C
19
19
 
20
20
  COMMAND INST ABORT BIG_ENDIAN "Aborts a collect on the instrument"
21
21
  PARAMETER CCSDSVER 0 3 UINT 0 0 0 "CCSDS primary header version number"
@@ -21,28 +21,28 @@ TELEMETRY INST HEALTH_STATUS BIG_ENDIAN "Health and status from the instrument"
21
21
  ITEM TEMP1 144 16 UINT "Temperature #1"
22
22
  POLY_READ_CONVERSION -100.0 0.00305
23
23
  POLY_WRITE_CONVERSION 32768.885246 327.86885
24
- UNITS CELCIUS C
24
+ UNITS CELSIUS C
25
25
  FORMAT_STRING "%0.3f"
26
26
  LIMITS DEFAULT 1 ENABLED -80.0 -70.0 60.0 80.0 -20.0 20.0
27
27
  LIMITS TVAC 1 ENABLED -80.0 -30.0 30.0 80.0
28
28
  ITEM TEMP2 160 16 UINT "Temperature #2"
29
29
  POLY_READ_CONVERSION -100.0 0.00305
30
30
  POLY_WRITE_CONVERSION 32768.885246 327.86885
31
- UNITS CELCIUS C
31
+ UNITS CELSIUS C
32
32
  FORMAT_STRING "%0.3f"
33
33
  LIMITS DEFAULT 1 ENABLED -60.0 -55.0 30.0 35.0
34
34
  LIMITS TVAC 1 ENABLED -60.0 20.0 30.0 35.0
35
35
  ITEM TEMP3 176 16 UINT "Temperature #3"
36
36
  POLY_READ_CONVERSION -100.0 0.00305
37
37
  POLY_WRITE_CONVERSION 32768.885246 327.86885
38
- UNITS CELCIUS C
38
+ UNITS CELSIUS C
39
39
  FORMAT_STRING "%0.3f"
40
40
  LIMITS DEFAULT 1 ENABLED -25.0 -10.0 50.0 55.0
41
41
  LIMITS TVAC 1 ENABLED -15.0 -10.0 20.0 30.0
42
42
  ITEM TEMP4 192 16 UINT "Temperature #4"
43
43
  POLY_READ_CONVERSION -100.0 0.00305
44
44
  POLY_WRITE_CONVERSION 32768.885246 327.86885
45
- UNITS CELCIUS C
45
+ UNITS CELSIUS C
46
46
  FORMAT_STRING "%0.3f"
47
47
  LIMITS DEFAULT 1 ENABLED -80.0 -70.0 60.0 80.0
48
48
  ARRAY_ITEM ARY 208 8 UINT 80 "Array data"
@@ -52,7 +52,7 @@ TELEMETRY INST HEALTH_STATUS BIG_ENDIAN "Health and status from the instrument"
52
52
  STATE NORMAL 0
53
53
  STATE SPECIAL 1
54
54
  APPEND_ARRAY_ITEM ARY2 64 FLOAT 640 "Double array"
55
- UNITS CELCIUS C
55
+ UNITS CELSIUS C
56
56
  APPEND_ITEM ASCIICMD 2048 STRING "Most recent ASCIICMD string"
57
57
  STATE "NOOP" "NOOP"
58
58
  STATE "FIRE LASER" "FIRE LASER"
@@ -0,0 +1,112 @@
1
+
2
+ require 'spec_helper'
3
+ require 'find'
4
+ require 'cosmos/system'
5
+ require 'cosmos/config/meta_config_parser'
6
+
7
+ module Cosmos
8
+ describe Cosmos do
9
+ # These are not expected to be documented as they are deprecated
10
+ DEPRECATED = %w(MACRO_APPEND_START MACRO_APPEND_END ROUTER_LOG_RAW IGNORE REQUIRE_UTILITY)
11
+ # These source keywords are ignored in the YAML
12
+ EXCEPTIONS = %w(LAUNCH LAUNCH_TERMINAL LAUNCH_GEM CONVERTED RAW FORMATTED WITH_UNITS NONE)
13
+ EXCEPTIONS.concat(%w(MINUTE HOUR DAY AVG MIN MAX STDDEV AGING CRC OVERRIDE))
14
+ # These are not documented because OpenGL is not officially a tool
15
+ OPENGL = %w(STL_FILE TEXTURE_MAPPED_SPHERE TIP_TEXT POSITION ROTATION_X ROTATION_Y ROTATION_Z)
16
+ OPENGL.concat(%w(ZOOM ORIENTATION CENTER BOUNDS))
17
+
18
+ def get_src_keywords
19
+ @src_keywords = []
20
+ path = File.expand_path(File.join(File.dirname(__FILE__), "../../lib/**/*.rb"))
21
+ Dir[path].each do |filename|
22
+ data = File.read(filename)
23
+ part = nil
24
+ if data.include?('parser.parse_file')
25
+ part = data.split('parser.parse_file')[1..-1].join
26
+ elsif data.include?('handle_keyword(parser, keyword, parameters)')
27
+ part = data.split('handle_keyword(parser, keyword, parameters)')[1..-1].join
28
+ end
29
+ if part
30
+ part.split("\n").each do |line|
31
+ if match = line.match(/when (.*)/)
32
+ line = match.captures[0]
33
+ line.split(',').each do |item|
34
+ item.strip!
35
+ if (item[0] == "'" || item[0] == '"') && (item[-1] == "'" || item[-1] == '"')
36
+ @src_keywords << item[1..-2]
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ # All the widgets are referenced in screen definitions
45
+ path = File.expand_path(File.join(File.dirname(__FILE__), "../../lib/cosmos/tools/tlm_viewer/widgets/*_widget.rb"))
46
+ Dir[path].each do |filename|
47
+ @src_keywords << filename.split('/')[-1].split('_widget.rb')[0].upcase
48
+ end
49
+ # Remove the base classes
50
+ @src_keywords -= %w(CANVASVALUE LAYOUT MULTI)
51
+ # Add specific keyword(s) that we want to document
52
+ @src_keywords.concat(%w(NAMED_WIDGET))
53
+
54
+ # All the protocols are referenced as keywords in INTERFACES
55
+ path = File.expand_path(File.join(File.dirname(__FILE__), "../../lib/cosmos/interfaces/protocols/*_protocol.rb"))
56
+ Dir[path].each do |filename|
57
+ @src_keywords << filename.split('/')[-1].split('_protocol.rb')[0].upcase
58
+ end
59
+
60
+ # Remove things we don't document
61
+ @src_keywords.uniq!
62
+ @src_keywords -= (DEPRECATED + EXCEPTIONS + OPENGL)
63
+
64
+ #puts "Total source keywords: #{@src_keywords.length}"
65
+ expect(@src_keywords.length > 100) # Sanity check
66
+ end
67
+
68
+ def process_meta(yaml_keywords, meta)
69
+ meta.each do |keyword, data|
70
+ next unless keyword.is_a?(String) && keyword.upcase == keyword
71
+ next if keyword == 'UNKNOWN' # Ignore the UNKNOWN placeholder
72
+
73
+ if data['modifiers']
74
+ process_meta(yaml_keywords, data['modifiers'])
75
+ end
76
+ yaml_keywords << keyword
77
+ end
78
+ end
79
+
80
+ def get_yaml_keywords
81
+ @yaml_keywords = []
82
+ path = File.expand_path(File.join(File.dirname(__FILE__), "../../data/config/*.yaml"))
83
+ Dir[path].each do |filename|
84
+ meta = Cosmos::MetaConfigParser.load(filename)
85
+ process_meta(@yaml_keywords, meta)
86
+ end
87
+ #puts "Total yaml keywords: #{@yaml_keywords.length}"
88
+ expect(@yaml_keywords.length > 100) # Sanity check
89
+ end
90
+
91
+ before(:all) do
92
+ get_src_keywords()
93
+ get_yaml_keywords()
94
+ end
95
+
96
+ it "should document all source keywords" do
97
+ undocumented = []
98
+ @src_keywords.each do |keyword|
99
+ undocumented << keyword unless @yaml_keywords.include?(keyword)
100
+ end
101
+ expect(undocumented).to be_empty, "Following source keywords not in YAML: #{undocumented}"
102
+ end
103
+
104
+ it "should not have extra keywords" do
105
+ extra = []
106
+ @yaml_keywords.each do |keyword|
107
+ extra << keyword unless @src_keywords.include?(keyword)
108
+ end
109
+ expect(extra).to be_empty, "Following YAML keywords not in source: #{extra}"
110
+ end
111
+ end
112
+ end
@@ -90,6 +90,7 @@ module Cosmos
90
90
  end
91
91
 
92
92
  it "reads telemetry data from the stream" do
93
+ target = System.targets['SYSTEM']
93
94
  @interface.add_protocol(FixedProtocol, [1], :READ_WRITE)
94
95
  @interface.instance_variable_set(:@stream, FixedStream.new)
95
96
  @interface.target_names = ['SYSTEM']
@@ -103,6 +104,7 @@ module Cosmos
103
104
  expect(packet.received_time.to_f).to be_within(0.1).of(Time.now.to_f)
104
105
  expect(packet.target_name).to eql 'SYSTEM'
105
106
  expect(packet.packet_name).to eql 'LIMITS_CHANGE'
107
+ target.tlm_unique_id_mode = true
106
108
  $index = 1
107
109
  packet = @interface.read
108
110
  expect(packet.received_time.to_f).to be_within(0.1).of(Time.now.to_f)
@@ -113,30 +115,39 @@ module Cosmos
113
115
  expect(packet.received_time.to_f).to be_within(0.1).of(Time.now.to_f)
114
116
  expect(packet.target_name).to eql 'SYSTEM'
115
117
  expect(packet.packet_name).to eql 'LIMITS_CHANGE'
118
+ target.tlm_unique_id_mode = false
116
119
  end
117
120
 
118
121
  it "reads command data from the stream" do
119
- $index = 0
122
+ target = System.targets['SYSTEM']
123
+ packet = System.commands.packet("SYSTEM", "STARTLOGGING")
124
+ packet.restore_defaults
125
+ $buffer = packet.buffer.clone
120
126
  class FixedStream2 < Stream
121
127
  def connect; end
122
128
  def connected?; true; end
123
129
  def read
124
- case $index
125
- when 0
126
- $index += 1
127
- "\x1A\xCF\xFC\x1D\x00\x00\x00\x02"
128
- else
129
- "\x00\x00\x00\x00\x00\x00\x00\x00"
130
- end
130
+ # Prepend a matching sync pattern to test the discard
131
+ "\x1A\xCF\xFC\x1D\x55\x55" << $buffer
131
132
  end
132
133
  end
133
- @interface.add_protocol(FixedProtocol, [8, 0, '0x1ACFFC1D', false], :READ_WRITE)
134
+ # Require 8 bytes, discard 6 leading bytes, use 0x1ACFFC1D sync, telemetry = false (command)
135
+ @interface.add_protocol(FixedProtocol, [8, 6, '0x1ACFFC1D', false], :READ_WRITE)
134
136
  @interface.instance_variable_set(:@stream, FixedStream2.new)
135
137
  @interface.target_names = ['SYSTEM']
138
+ target.cmd_unique_id_mode = false
136
139
  packet = @interface.read
137
140
  expect(packet.received_time.to_f).to be_within(0.01).of(Time.now.to_f)
138
141
  expect(packet.target_name).to eql 'SYSTEM'
139
142
  expect(packet.packet_name).to eql 'STARTLOGGING'
143
+ expect(packet.buffer).to eql $buffer
144
+ target.cmd_unique_id_mode = true
145
+ packet = @interface.read
146
+ expect(packet.received_time.to_f).to be_within(0.01).of(Time.now.to_f)
147
+ expect(packet.target_name).to eql 'SYSTEM'
148
+ expect(packet.packet_name).to eql 'STARTLOGGING'
149
+ expect(packet.buffer).to eql $buffer
150
+ target.cmd_unique_id_mode = false
140
151
  end
141
152
  end
142
153
  end