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
@@ -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