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,7 +21,6 @@ module Cosmos
21
21
  # appended with any warnings found when parsing the limits
22
22
  def self.parse(parser, packet, cmd_or_tlm, item, warnings)
23
23
  raise parser.error("Items with LIMITS can't define STATE") if item.limits.values
24
- raise parser.error("Items with FORMAT_STRING can't define STATE") if item.format_string
25
24
  raise parser.error("Items with UNITS can't define STATE") if item.units
26
25
  @parser = StateParser.new(parser)
27
26
  @parser.verify_parameters(cmd_or_tlm)
@@ -295,6 +295,8 @@ module Cosmos
295
295
  xml['xtce'].IntegerDataEncoding(:sizeInBits => item.bit_size, :encoding => encoding)
296
296
  xml['xtce'].EnumerationList do
297
297
  item.states.each do |state_name, state_value|
298
+ # Skip the special COSMOS 'ANY' enumerated state
299
+ next if state_value == 'ANY'
298
300
  xml['xtce'].Enumeration(:value => state_value, :label => state_name)
299
301
  end
300
302
  end
@@ -25,8 +25,8 @@ module Cosmos
25
25
  # @param warnings [Array<String>] Array of strings listing all the warnings
26
26
  # that were created while parsing the configuration
27
27
  # @param filename [String] The name of the configuration file
28
- # @param target_name [String] The target name
29
- def self.process(commands, telemetry, warnings, filename, target_name)
28
+ # @param target_name [String] Override the target name found in the XTCE file
29
+ def self.process(commands, telemetry, warnings, filename, target_name = nil)
30
30
  XtceParser.new(commands, telemetry, warnings, filename, target_name)
31
31
  end
32
32
 
@@ -49,7 +49,7 @@ module Cosmos
49
49
 
50
50
  private
51
51
 
52
- def initialize(commands, telemetry, warnings, filename, target_name)
52
+ def initialize(commands, telemetry, warnings, filename, target_name = nil)
53
53
  reset_processing_variables()
54
54
  @commands = commands
55
55
  @telemetry = telemetry
@@ -60,6 +60,7 @@ module Cosmos
60
60
 
61
61
  def parse(filename, target_name)
62
62
  doc = File.open(filename) { |f| Nokogiri::XML(f, nil, nil, Nokogiri::XML::ParseOptions::STRICT | Nokogiri::XML::ParseOptions::NOBLANKS) }
63
+ # Determine the @current_target_name
63
64
  xtce_process_element(doc.root)
64
65
  @current_target_name = target_name if target_name
65
66
  doc.root.children.each do |child|
@@ -195,7 +195,7 @@ module Cosmos
195
195
  last_item = @sorted_items[-1]
196
196
  @sorted_items << item
197
197
  # If the current item or last item have a negative offset then we have
198
- # to re-sort. We also re-sort if the current item is less than the less
198
+ # to re-sort. We also re-sort if the current item is less than the last
199
199
  # item because we are inserting.
200
200
  if last_item.bit_offset <= 0 or item.bit_offset <= 0 or item.bit_offset < last_item.bit_offset
201
201
  @sorted_items = @sorted_items.sort
@@ -370,12 +370,14 @@ module Cosmos
370
370
  # parameter to check whether to perform conversions on the item.
371
371
  # @param indent [Integer] Amount to indent before printing the item name
372
372
  # @param buffer [String] The binary buffer to write the value to
373
+ # @param ignored [Array<String>] List of items to ignore when building the string
373
374
  # @return [String] String formatted with all the item names and values
374
- def formatted(value_type = :RAW, indent = 0, buffer = @buffer)
375
+ def formatted(value_type = :RAW, indent = 0, buffer = @buffer, ignored = nil)
375
376
  indent_string = ' ' * indent
376
377
  string = ''
377
378
  synchronize_allow_reads(true) do
378
379
  @sorted_items.each do |item|
380
+ next if ignored && ignored.include?(item.name)
379
381
  if (item.data_type != :BLOCK) ||
380
382
  (item.data_type == :BLOCK and value_type != :RAW and
381
383
  item.respond_to? :read_conversion and item.read_conversion)
@@ -266,17 +266,33 @@ module Cosmos
266
266
  target_names = target_names() unless target_names
267
267
 
268
268
  target_names.each do |target_name|
269
+ target_name = target_name.to_s.upcase
270
+
269
271
  target_packets = nil
270
272
  begin
271
273
  target_packets = packets(target_name)
274
+ #puts target_packets.length
272
275
  rescue RuntimeError
273
276
  # No telemetry for this target
274
277
  next
275
278
  end
276
279
 
277
- # Iterate through the packets and see if any represent the buffer
278
- target_packets.each do |packet_name, packet|
279
- return packet if packet.identify?(packet_data)
280
+ target = System.targets[target_name]
281
+ if target and target.tlm_unique_id_mode
282
+ # Iterate through the packets and see if any represent the buffer
283
+ target_packets.each do |packet_name, packet|
284
+ return packet if packet.identify?(packet_data)
285
+ end
286
+ else
287
+ # Do a hash lookup to quickly identify the packet
288
+ if target_packets.length > 0
289
+ packet = target_packets.first[1]
290
+ key = packet.read_id_values(packet_data)
291
+ hash = @config.tlm_id_value_hash[target_name]
292
+ identified_packet = hash[key]
293
+ identified_packet = hash['CATCHALL'.freeze] unless identified_packet
294
+ return identified_packet if identified_packet
295
+ end
280
296
  end
281
297
  end
282
298
 
@@ -477,7 +477,7 @@ module Cosmos
477
477
  path
478
478
  end
479
479
 
480
- def check_file_cache_for_instrumented_script(path, md5)
480
+ def check_file_cache_for_instrumented_script(path, hash_string)
481
481
  file_text = nil
482
482
  instrumented_script = nil
483
483
  cached = true
@@ -498,8 +498,8 @@ module Cosmos
498
498
  if use_file_cache
499
499
  # Check file based instrumented cache
500
500
  flat_path = path.tr("/", "_").gsub("\\", "_").tr(":", "_").tr(" ", "_")
501
- flat_path_with_md5 = flat_path + '_' + md5
502
- cache_filename = File.join(cache_path, flat_path_with_md5)
501
+ flat_path_with_hash_string = flat_path + '_' + hash_string
502
+ cache_filename = File.join(cache_path, flat_path_with_hash_string)
503
503
  end
504
504
 
505
505
  begin
@@ -536,24 +536,27 @@ module Cosmos
536
536
  path = _get_procedure_path(procedure_name)
537
537
 
538
538
  if defined? ScriptRunnerFrame and ScriptRunnerFrame.instance
539
- md5 = nil
539
+ hashing_sum = nil
540
540
  begin
541
- md5 = Cosmos.md5_files([path]).hexdigest
541
+ hashing_result = Cosmos.hash_files([path], nil, System.hashing_algorithm)
542
+ hash_string = hashing_result.hexdigest
543
+ # Only use at most, 32 characters of the hex
544
+ hash_string = hash_string[-32..-1] if hash_string.length >= 32
542
545
  rescue Exception => error
543
- raise "Error calculating md5 on procedure file : #{path}"
546
+ raise "Error calculating hash string on procedure file : #{path}"
544
547
  end
545
548
 
546
549
  # Check RAM based instrumented cache
547
550
  instrumented_cache = ScriptRunnerFrame.instrumented_cache[path]
548
551
  instrumented_script = nil
549
- if instrumented_cache and md5 == instrumented_cache[1]
552
+ if instrumented_cache and hash_string == instrumented_cache[1]
550
553
  # Use cached instrumentation
551
554
  instrumented_script = instrumented_cache[0]
552
555
  else
553
- file_text, instrumented_script, cached = check_file_cache_for_instrumented_script(path, md5)
556
+ file_text, instrumented_script, cached = check_file_cache_for_instrumented_script(path, hash_string)
554
557
  # Cache instrumentation into RAM
555
558
  ScriptRunnerFrame.file_cache[path] = file_text
556
- ScriptRunnerFrame.instrumented_cache[path] = [instrumented_script, md5]
559
+ ScriptRunnerFrame.instrumented_cache[path] = [instrumented_script, hash_string]
557
560
  end
558
561
 
559
562
  Object.class_eval(instrumented_script, path, 1)
@@ -56,20 +56,20 @@ module Cosmos
56
56
  return value
57
57
  end
58
58
 
59
- def prompt(string)
60
- prompt_to_continue(string)
59
+ def prompt(string, **options)
60
+ prompt_to_continue(string, options)
61
61
  end
62
62
 
63
- def message_box(string, *buttons)
64
- prompt_message_box(string, buttons)
63
+ def message_box(string, *buttons, **options)
64
+ prompt_message_box(string, buttons, options)
65
65
  end
66
66
 
67
- def vertical_message_box(string, *buttons)
68
- prompt_vertical_message_box(string, buttons)
67
+ def vertical_message_box(string, *buttons, **options)
68
+ prompt_vertical_message_box(string, buttons, options)
69
69
  end
70
70
 
71
- def combo_box(string, *options)
72
- prompt_combo_box(string, options)
71
+ def combo_box(string, *items, **options)
72
+ prompt_combo_box(string, items, options)
73
73
  end
74
74
 
75
75
  def _file_dialog(message, directory, filter, select_files = true)
@@ -123,22 +123,24 @@ module Cosmos
123
123
  end
124
124
  end
125
125
 
126
- def prompt_to_continue(string)
126
+ def prompt_to_continue(string, text_color: nil, background_color: nil, font_size: nil, font_family: nil, details: nil)
127
127
  print "#{string}: "
128
+ print "Details: #{details}\n" if details
128
129
  gets.chomp
129
130
  end
130
131
 
131
- def prompt_message_box(string, buttons)
132
+ def prompt_message_box(string, buttons, text_color: nil, background_color: nil, font_size: nil, font_family: nil, details: nil)
132
133
  print "#{string} (#{buttons.join(", ")}): "
134
+ print "Details: #{details}\n" if details
133
135
  gets.chomp
134
136
  end
135
137
 
136
- def prompt_vertical_message_box(string, options)
137
- prompt_message_box(string, options)
138
+ def prompt_vertical_message_box(string, buttons, options)
139
+ prompt_message_box(string, buttons, options)
138
140
  end
139
141
 
140
- def prompt_combo_box(string, options)
141
- prompt_message_box(string, options)
142
+ def prompt_combo_box(string, items, options)
143
+ prompt_message_box(string, items, options)
142
144
  end
143
145
  end
144
146
  end
@@ -29,7 +29,7 @@ module Cosmos
29
29
  # #targets variable provides access to all the targets defined by the system.
30
30
  # Its primary responsibily is to load the system configuration file and
31
31
  # create all the Target instances. It also saves and restores configurations
32
- # using a MD5 checksum over the entire configuration to detect changes.
32
+ # using a hashing checksum over the entire configuration to detect changes.
33
33
  class System
34
34
  # @return [Hash<String,Fixnum>] Hash of all the known ports and their values
35
35
  instance_attr_reader :ports
@@ -67,12 +67,14 @@ module Cosmos
67
67
  instance_attr_reader :limits_set
68
68
  # @return [Boolean] Whether to use UTC or local times
69
69
  instance_attr_reader :use_utc
70
- # @return [Array<String>] List of files that are to be included in the MD5
70
+ # @return [Array<String>] List of files that are to be included in the hashing
71
71
  # calculation in addition to the cmd/tlm definition files that are
72
72
  # automatically included
73
- instance_attr_reader :additional_md5_files
73
+ instance_attr_reader :additional_hashing_files
74
74
  # @return [Hash<String,String>] Hash of the text/color to use for the classificaiton banner
75
75
  instance_attr_reader :classificiation_banner
76
+ # @return [String] Which hashing algorithm is in use
77
+ instance_attr_reader :hashing_algorithm
76
78
 
77
79
  # Known COSMOS ports
78
80
  KNOWN_PORTS = ['CTS_API', 'TLMVIEWER_API', 'CTS_PREIDENTIFIED', 'CTS_CMD_ROUTER', 'REPLAY_API', 'REPLAY_PREIDENTIFIED', 'REPLAY_CMD_ROUTER', 'DART_STREAM', 'DART_DECOM']
@@ -80,6 +82,8 @@ module Cosmos
80
82
  KNOWN_HOSTS = ['CTS_API', 'TLMVIEWER_API', 'CTS_PREIDENTIFIED', 'CTS_CMD_ROUTER', 'REPLAY_API', 'REPLAY_PREIDENTIFIED', 'REPLAY_CMD_ROUTER', 'DART_STREAM', 'DART_DECOM']
81
83
  # Known COSMOS paths
82
84
  KNOWN_PATHS = ['LOGS', 'TMP', 'SAVED_CONFIG', 'TABLES', 'HANDBOOKS', 'PROCEDURES', 'SEQUENCES', 'DART_DATA', 'DART_LOGS']
85
+ # Supported hashing algorithms
86
+ SUPPORTED_HASHING_ALGORITHMS = ['MD5', 'RMD160', 'SHA1', 'SHA256', 'SHA384', 'SHA512']
83
87
 
84
88
  @@instance = nil
85
89
  @@instance_mutex = Mutex.new
@@ -195,7 +199,7 @@ module Cosmos
195
199
  acl_list = []
196
200
  all_allowed = false
197
201
  first_procedures_path = true
198
- @additional_md5_files = []
202
+ @additional_hashing_files = []
199
203
 
200
204
  Cosmos.set_working_dir do
201
205
  parser = ConfigParser.new("http://cosmosrb.com/docs/system")
@@ -329,16 +333,25 @@ module Cosmos
329
333
  parser.verify_num_parameters(0, 0, "#{keyword}")
330
334
  @use_utc = true
331
335
 
332
- when 'ADD_MD5_FILE'
336
+ when 'ADD_HASH_FILE', 'ADD_MD5_FILE' # MD5 is here for backwards compatibility
333
337
  parser.verify_num_parameters(1, 1, "#{keyword} <Filename>")
334
338
  if File.file?(parameters[0])
335
- @additional_md5_files << File.expand_path(parameters[0])
339
+ @additional_hashing_files << File.expand_path(parameters[0])
336
340
  elsif File.file?(File.join(Cosmos::USERPATH, parameters[0]))
337
- @additional_md5_files << File.expand_path(File.join(Cosmos::USERPATH, parameters[0]))
341
+ @additional_hashing_files << File.expand_path(File.join(Cosmos::USERPATH, parameters[0]))
338
342
  else
339
343
  raise "Missing expected file: #{parameters[0]}"
340
344
  end
341
345
 
346
+ when 'HASHING_ALGORITHM'
347
+ parser.verify_num_parameters(1, 1, "#{keyword} <Hashing Algorithm>")
348
+ if SUPPORTED_HASHING_ALGORITHMS.include? parameters[0]
349
+ @hashing_algorithm = parameters[0]
350
+ else
351
+ Logger.error "Unrecognized hashing algorithm: #{parameters[0]}, using default algorithm MD5"
352
+ @hashing_algorithm = 'MD5'
353
+ end
354
+
342
355
  when 'CLASSIFICATION'
343
356
  parser.verify_num_parameters(2, 4, "#{keyword} <Display_Text> <Color Name|Red> <Green> <Blue>")
344
357
  # Determine if the COSMOS color already exists, otherwise create a new one
@@ -413,13 +426,8 @@ module Cosmos
413
426
  end
414
427
  end
415
428
  end
416
-
417
429
  auto_detect_gem_based_targets()
418
430
 
419
- # Make sure SYSTEM target is always present and added last
420
- target = Target.new('SYSTEM')
421
- @targets[target.name] = target
422
-
423
431
  when 'DECLARE_TARGET'
424
432
  usage = "#{keyword} <TARGET NAME> <SUBSTITUTE TARGET NAME (Optional)> <TARGET FILENAME (Optional - defaults to target.txt)>"
425
433
  parser.verify_num_parameters(1, 3, usage)
@@ -452,13 +460,19 @@ module Cosmos
452
460
 
453
461
  end # case keyword
454
462
  end # parser.parse_file
463
+
464
+ # Make sure SYSTEM target is always present and added last
465
+ unless @targets.key?('SYSTEM')
466
+ target = Target.new('SYSTEM')
467
+ @targets[target.name] = target
468
+ end
455
469
  end
456
470
 
457
471
  # Load the specified configuration by iterating through the SAVED_CONFIG
458
- # directory looking for a matching MD5 sum. Updates the internal state so
472
+ # directory looking for a matching hashing sum. Updates the internal state so
459
473
  # subsequent commands and telemetry methods return the new configuration.
460
474
  #
461
- # @param name [String] MD5 string which identifies the
475
+ # @param name [String] hash string which identifies the
462
476
  # configuration. Pass nil to load the default configuration.
463
477
  # @return [String, Exception/nil] The actual configuration loaded
464
478
  def load_configuration(name = nil)
@@ -531,8 +545,9 @@ module Cosmos
531
545
  @staleness_seconds = 30
532
546
  @limits_set = :DEFAULT
533
547
  @use_utc = false
534
- @additional_md5_files = []
548
+ @additional_hashing_files = []
535
549
  @meta_init_filename = nil
550
+ @hashing_algorithm = 'MD5'
536
551
 
537
552
  @ports = {}
538
553
  @ports['CTS_API'] = 7777
@@ -750,11 +765,12 @@ module Cosmos
750
765
  end
751
766
 
752
767
  def load_packets(configuration_name = nil)
753
- # Determine MD5 over all targets cmd_tlm files
768
+ # Determine hashing over all targets cmd_tlm files
754
769
  cmd_tlm_files = []
755
770
  additional_data = ''
756
771
  @targets.each do |target_name, target|
757
772
  cmd_tlm_files << target.filename if File.exist?(target.filename)
773
+ cmd_tlm_files.concat(target.requires)
758
774
  cmd_tlm_files.concat(target.cmd_tlm_files)
759
775
  if target.substitute
760
776
  additional_data << target.original_name
@@ -764,11 +780,14 @@ module Cosmos
764
780
  end
765
781
  end
766
782
 
767
- md5 = Cosmos.md5_files(cmd_tlm_files + @additional_md5_files, additional_data)
768
- md5_string = md5.hexdigest
783
+ hashing_result = Cosmos.hash_files(cmd_tlm_files + @additional_hashing_files, additional_data, @hashing_algorithm)
784
+ hash_string = hashing_result.hexdigest
785
+ # Only use at most, 32 characters of the hex
786
+ hash_string = hash_string[-32..-1] if hash_string.length >= 32
787
+
769
788
 
770
789
  # Build filename for marshal file
771
- marshal_filename = File.join(@paths['TMP'], 'marshal_' << md5_string << '.bin')
790
+ marshal_filename = File.join(@paths['TMP'], 'marshal_' << hash_string << '.bin')
772
791
 
773
792
  # Attempt to load marshal file
774
793
  config = Cosmos.marshal_load(marshal_filename)
@@ -801,7 +820,7 @@ module Cosmos
801
820
  if configuration_name
802
821
  @config.name = configuration_name
803
822
  else
804
- @config.name = md5_string
823
+ @config.name = hash_string
805
824
  end
806
825
 
807
826
  Cosmos.marshal_dump(marshal_filename, @config)
@@ -9,9 +9,9 @@
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
11
  require 'cosmos/config/config_parser'
12
+ require 'pathname'
12
13
 
13
14
  module Cosmos
14
-
15
15
  # Target encapsulates the information about a COSMOS target. Targets are
16
16
  # accessed through interfaces and have command and telemetry definition files
17
17
  # which define their access.
@@ -66,6 +66,12 @@ module Cosmos
66
66
  # @return [Integer] The number of telemetry packets received from this target
67
67
  attr_accessor :tlm_cnt
68
68
 
69
+ # @return [Boolean] Indicates if all command packets identify using different fields
70
+ attr_accessor :cmd_unique_id_mode
71
+
72
+ # @return [Boolean] Indicates if telemetry packets identify using different fields
73
+ attr_accessor :tlm_unique_id_mode
74
+
69
75
  # Creates a new target by processing the target.txt file in the directory
70
76
  # given by the path joined with the target_name. Records all the command
71
77
  # and telemetry definition files found in the targets cmd_tlm directory.
@@ -90,6 +96,8 @@ module Cosmos
90
96
  @routers = []
91
97
  @cmd_cnt = 0
92
98
  @tlm_cnt = 0
99
+ @cmd_unique_id_mode = false
100
+ @tlm_unique_id_mode = false
93
101
 
94
102
  # Determine the target name using substitution if given
95
103
  @original_name = target_name.clone.upcase.freeze
@@ -123,16 +131,18 @@ module Cosmos
123
131
  when 'REQUIRE'
124
132
  usage = "#{keyword} <FILENAME>"
125
133
  parser.verify_num_parameters(1, 1, usage)
134
+ filename = File.join(@dir, 'lib', parameters[0])
126
135
  begin
127
- # Require absolute path to file in target lib folder. Prevents name
136
+ # Require absolute path to file in target lib folder. Prevents name
128
137
  # conflicts at the require step
129
138
  Cosmos.disable_warnings do
130
- Cosmos.require_file(File.join(@dir, 'lib', parameters[0]), false)
139
+ Cosmos.require_file(filename, false)
131
140
  end
132
141
  rescue LoadError
133
142
  begin
134
143
  # If we couldn't load at the target/lib level check everywhere
135
144
  Cosmos.disable_warnings do
145
+ filename = parameters[0]
136
146
  Cosmos.require_file(parameters[0])
137
147
  end
138
148
  rescue Exception => err
@@ -141,7 +151,19 @@ module Cosmos
141
151
  rescue Exception => err
142
152
  raise parser.error(err.message)
143
153
  end
144
- @requires << parameters[0]
154
+
155
+ # This code resolves any relative paths to absolute before putting into the @requires array
156
+ unless Pathname.new(filename).absolute?
157
+ $:.each do |search_path|
158
+ test_filename = File.join(search_path, filename).gsub("\\", "/")
159
+ if File.exist?(test_filename)
160
+ filename = test_filename
161
+ break
162
+ end
163
+ end
164
+ end
165
+
166
+ @requires << filename
145
167
 
146
168
  when 'IGNORE_PARAMETER', 'IGNORE_ITEM'
147
169
  usage = "#{keyword} <#{keyword.split('_')[1]} NAME>"
@@ -161,6 +183,16 @@ module Cosmos
161
183
  parser.verify_num_parameters(0, 0, usage)
162
184
  @auto_screen_substitute = true
163
185
 
186
+ when 'CMD_UNIQUE_ID_MODE'
187
+ usage = "#{keyword}"
188
+ parser.verify_num_parameters(0, 0, usage)
189
+ @cmd_unique_id_mode = true
190
+
191
+ when 'TLM_UNIQUE_ID_MODE'
192
+ usage = "#{keyword}"
193
+ parser.verify_num_parameters(0, 0, usage)
194
+ @tlm_unique_id_mode = true
195
+
164
196
  else
165
197
  # blank lines will have a nil keyword and should not raise an exception
166
198
  raise parser.error("Unknown keyword '#{keyword}'") if keyword
@@ -213,7 +245,7 @@ module Cosmos
213
245
  cmd_tlm_files.sort!
214
246
  end
215
247
 
216
- # Make sure all partials are included in the cmd_tlm list for the MD5 calculation
248
+ # Make sure all partials are included in the cmd_tlm list for the hashing sum calculation
217
249
  def add_cmd_tlm_partials(dir)
218
250
  partial_files = []
219
251
  if Dir.exist?(File.join(dir, 'cmd_tlm'))
@@ -226,7 +258,5 @@ module Cosmos
226
258
  @cmd_tlm_files.concat(partial_files)
227
259
  @cmd_tlm_files.uniq!
228
260
  end
229
-
230
- end # class Target
231
-
232
- end # module Cosmos
261
+ end
262
+ end