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.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- data/.github/ISSUE_TEMPLATE/help---usage---general-question.md +12 -0
- data/.gitignore +1 -0
- data/.travis.yml +5 -5
- data/Manifest.txt +81 -44
- data/Rakefile +9 -0
- data/appveyor.yml +2 -1
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +3 -1
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +2 -4
- data/autohotkey/config/tools/table_manager/SubTables/OneDimensionalSubTable_def.txt +31 -0
- data/autohotkey/config/tools/table_manager/SubTables/TwoDimensionalSubTable_def.txt +28 -0
- data/autohotkey/config/tools/test_runner/test_runner.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner3.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
- data/autohotkey/tools/limits_monitor.ahk +1 -1
- data/autohotkey/tools/packet_viewer.ahk +1 -1
- data/autohotkey/tools/script_runner.ahk +16 -4
- data/bin/cosmos +1 -1
- data/bin/xtce_converter +1 -1
- data/cosmos.gemspec +5 -7
- data/data/config/_interfaces.yaml +4 -0
- data/data/config/cmd_sequence.yaml +14 -0
- data/data/config/housekeeping_params.yaml +14 -0
- data/data/config/interface_modifiers.yaml +11 -0
- data/data/config/item_modifiers.yaml +2 -1
- data/data/config/launcher.yaml +12 -2
- data/data/config/param_item_modifiers.yaml +2 -2
- data/data/config/parameter_modifiers.yaml +20 -0
- data/data/config/screen.yaml +2 -0
- data/data/config/script_runner.yaml +9 -0
- data/data/config/system.yaml +47 -10
- data/data/config/table_manager.yaml +7 -0
- data/data/config/target.yaml +12 -0
- data/data/config/telemetry_modifiers.yaml +3 -1
- data/data/config/test_runner.yaml +10 -9
- data/data/config/widgets.yaml +174 -11
- data/data/crc.txt +128 -125
- data/demo/Gemfile +1 -1
- data/demo/Launcher.bat +1 -9
- data/demo/Launcher2.bat +1 -0
- data/demo/LauncherMini.bat +1 -0
- data/demo/config/data/crc.txt +40 -20
- data/demo/config/system/system.txt +1 -1
- data/demo/config/system/system_alt_ports.txt +1 -1
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +1 -0
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +2 -1
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +7 -7
- data/demo/config/targets/INST/cmd_tlm_server.txt +2 -0
- data/demo/config/targets/INST/lib/sim_inst.rb +15 -3
- data/demo/config/targets/INST/screens/adcs.txt +2 -2
- data/demo/config/targets/INST/screens/block.txt +1 -1
- data/demo/config/targets/INST/screens/commanding.txt +1 -1
- data/demo/config/targets/INST/screens/ground.txt +27 -5
- data/demo/config/targets/INST/screens/ground_error.gif +0 -0
- data/demo/config/{data/groundoff.gif → targets/INST/screens/ground_off.gif} +0 -0
- data/demo/config/{data/groundon.gif → targets/INST/screens/ground_on.gif} +0 -0
- data/demo/config/targets/INST/screens/limits.txt +69 -31
- data/demo/config/targets/INST/screens/other.txt +13 -3
- data/demo/config/targets/INST/screens/params.txt +54 -0
- data/demo/config/targets/INST/screens/satellite.gif +0 -0
- data/demo/config/tools/data_viewer/data_viewer.txt +3 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/demo/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/demo/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/demo/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/demo/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/demo/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/demo/config/tools/script_runner/script_runner.txt +1 -2
- data/demo/config/tools/test_runner/test_runner.txt +3 -1
- data/demo/lib/example_background_task.rb +1 -0
- data/demo/procedures/cosmos_api_test.rb +1 -1
- data/demo/procedures/interactive.rb +22 -0
- data/ext/cosmos/ext/packet/packet.c +0 -77
- data/install/Gemfile +1 -1
- data/install/Launcher.bat +1 -9
- data/install/config/data/crc.txt +17 -1
- data/install/config/system/system.txt +1 -1
- data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/install/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/install/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/install/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/install/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/install/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/lib/cosmos/config/config_parser.rb +4 -5
- data/lib/cosmos/dart/lib/dart_common.rb +1 -1
- data/lib/cosmos/gui/dialogs/details_dialog.rb +16 -1
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -0
- data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +4 -2
- data/lib/cosmos/gui/opengl/earth_model.rb +1 -1
- data/lib/cosmos/gui/qt.rb +3 -1
- data/lib/cosmos/gui/qt_tool.rb +46 -23
- data/lib/cosmos/gui/text/ruby_editor.rb +44 -41
- data/lib/cosmos/gui/utilities/screenshot.rb +1 -1
- data/lib/cosmos/gui/utilities/script_module_gui.rb +92 -92
- data/lib/cosmos/interfaces.rb +1 -0
- data/lib/cosmos/interfaces/interface.rb +5 -1
- data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +40 -18
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +6 -1
- data/lib/cosmos/interfaces/simulated_target_interface.rb +14 -5
- data/lib/cosmos/io/json_drb.rb +11 -7
- data/lib/cosmos/packets/commands.rb +28 -11
- data/lib/cosmos/packets/packet.rb +69 -32
- data/lib/cosmos/packets/packet_config.rb +34 -1
- data/lib/cosmos/packets/parsers/state_parser.rb +0 -1
- data/lib/cosmos/packets/parsers/xtce_converter.rb +2 -0
- data/lib/cosmos/packets/parsers/xtce_parser.rb +4 -3
- data/lib/cosmos/packets/structure.rb +4 -2
- data/lib/cosmos/packets/telemetry.rb +19 -3
- data/lib/cosmos/script/api_shared.rb +12 -9
- data/lib/cosmos/script/scripting.rb +16 -14
- data/lib/cosmos/system/system.rb +39 -20
- data/lib/cosmos/system/target.rb +39 -9
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +94 -35
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +3 -0
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +1 -1
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +2 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +30 -4
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +1 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +9 -12
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +5 -2
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +2 -0
- data/lib/cosmos/tools/config_editor/config_editor.rb +80 -24
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +2 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +15 -9
- data/lib/cosmos/tools/data_viewer/dump_component.rb +2 -9
- data/lib/cosmos/tools/data_viewer/text_component.rb +77 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +64 -38
- data/lib/cosmos/tools/launcher/launcher.rb +1 -0
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -17
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +8 -6
- data/lib/cosmos/tools/script_runner/script_runner.rb +87 -29
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +14 -0
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +41 -7
- data/lib/cosmos/tools/table_manager/table_config.rb +5 -3
- data/lib/cosmos/tools/table_manager/table_manager.rb +6 -3
- data/lib/cosmos/tools/test_runner/test_runner.rb +14 -9
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +21 -9
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +3 -3
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +5 -8
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +11 -8
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +9 -15
- data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -1
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +19 -13
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +2 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +4 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +4 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +16 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +17 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +1 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +12 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +79 -29
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +2 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +2 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +4 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +33 -25
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +4 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +5 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +6 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +2 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +10 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelled_widget.rb +58 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +2 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +2 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/led_widget.rb +108 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +60 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +22 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +19 -13
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +22 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +4 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +1 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +10 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +7 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +4 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +4 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +4 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +13 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +2 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +6 -12
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +5 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +4 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +8 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +9 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +54 -46
- data/lib/cosmos/top_level.rb +23 -12
- data/lib/cosmos/version.rb +4 -4
- data/spec/gui/utilities/script_module_gui_spec.rb +44 -63
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
- data/spec/install/yaml_docs_spec.rb +112 -0
- data/spec/interfaces/protocols/fixed_protocol_spec.rb +20 -9
- data/spec/interfaces/protocols/template_protocol_spec.rb +78 -25
- data/spec/packets/commands_spec.rb +22 -0
- data/spec/packets/packet_config_spec.rb +24 -0
- data/spec/packets/packet_item_spec.rb +2 -2
- data/spec/packets/packet_spec.rb +39 -6
- data/spec/packets/parsers/state_parser_spec.rb +33 -11
- data/spec/packets/structure_spec.rb +41 -0
- data/spec/packets/telemetry_spec.rb +23 -0
- data/spec/streams/tcpip_socket_stream_spec.rb +32 -27
- data/spec/system/system_spec.rb +77 -2
- data/spec/system/target_spec.rb +62 -1
- data/spec/tools/cmd_tlm_server/api_spec.rb +1 -1
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -7
- data/spec/top_level/top_level_spec.rb +29 -5
- data/tasks/gemfile_stats.rake +28 -14
- data/test/performance/config/system/system.txt +0 -0
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +5 -5
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/test/performance/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/test/performance/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/test/performance/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/test/performance/config/tools/test_runner/test_runner.txt +1 -1
- data/test/performance/procedures/cosmos_api_test.rb +1 -1
- data/test/performance/tools/identify_performance.rb +82 -0
- metadata +92 -55
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Bootstrap v3.0.3 (http://getbootstrap.com)
|
|
3
|
+
* Copyright 2013 Twitter, Inc.
|
|
4
|
+
* Licensed under http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]'),b=!0;if(a.length){var c=this.$element.find("input");"radio"===c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?b=!1:a.find(".active").removeClass("active")),b&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}b&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown"),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu]",f.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show(),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focus",i="hover"==g?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show),void 0):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide),void 0):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this.tip();this.setContent(),this.options.animation&&c.addClass("fade");var d="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement,e=/\s?auto?\s?/i,f=e.test(d);f&&(d=d.replace(e,"")||"top"),c.detach().css({top:0,left:0,display:"block"}).addClass(d),this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);var g=this.getPosition(),h=c[0].offsetWidth,i=c[0].offsetHeight;if(f){var j=this.$element.parent(),k=d,l=document.documentElement.scrollTop||document.body.scrollTop,m="body"==this.options.container?window.innerWidth:j.outerWidth(),n="body"==this.options.container?window.innerHeight:j.outerHeight(),o="body"==this.options.container?0:j.offset().left;d="bottom"==d&&g.top+g.height+i-l>n?"top":"top"==d&&g.top-l-i<0?"bottom":"right"==d&&g.right+h>m?"left":"left"==d&&g.left-h<o?"right":d,c.removeClass(k).addClass(d)}var p=this.getCalculatedOffset(d,g,h,i);this.applyPlacement(p,d),this.$element.trigger("shown.bs."+this.type)}},b.prototype.applyPlacement=function(a,b){var c,d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),a.top=a.top+g,a.left=a.left+h,d.offset(a).addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;if("top"==b&&j!=f&&(c=!0,a.top=a.top+f-j),/bottom|top/.test(b)){var k=0;a.left<0&&(k=-2*a.left,a.left=0,d.offset(a),i=d[0].offsetWidth,j=d[0].offsetHeight),this.replaceArrow(k-e+i,i,"left")}else this.replaceArrow(j-f,j,"top");c&&d.offset(a)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach()}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.$element.trigger("hidden.bs."+this.type),this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
TABLE "One Dimensional" BIG_ENDIAN ONE_DIMENSIONAL "One Dimensional"
|
|
2
|
+
APPEND_PARAMETER "Negative Dec" 32 INT -1000 1000 -10 "Negative Dec"
|
|
3
|
+
APPEND_PARAMETER "Editable Dec" 32 UINT 0 65535 10 "Editable Dec"
|
|
4
|
+
APPEND_PARAMETER "Uneditable Dec" 32 UINT 0 65535 100 "Uneditable Dec"
|
|
5
|
+
UNEDITABLE
|
|
6
|
+
APPEND_PARAMETER "8 Editable Hex" 8 UINT 0 0xFF 0xAB "8 Editable Hex"
|
|
7
|
+
FORMAT_STRING "0x%0X"
|
|
8
|
+
APPEND_PARAMETER "16 Editable Hex" 16 UINT 0 0x1234 0x1234 "16 Editable Hex"
|
|
9
|
+
FORMAT_STRING "0x%0X"
|
|
10
|
+
APPEND_PARAMETER "32 Editable Hex" 32 UINT 0 0x03FFFFB 0x0300000 "32 Editable Hex"
|
|
11
|
+
FORMAT_STRING "0x%0X"
|
|
12
|
+
APPEND_PARAMETER "Uneditable Hex" 32 UINT 0 0x03FFFFF 0x03FFFFF "Uneditable Hex"
|
|
13
|
+
FORMAT_STRING "0x%0X"
|
|
14
|
+
UNEDITABLE
|
|
15
|
+
APPEND_PARAMETER "Editable Float" 32 FLOAT 0 1000.0 50.0 "Editable Float"
|
|
16
|
+
APPEND_PARAMETER "Uneditable FLoat" 32 FLOAT 0 1000.0 50.0 "Uneditable Float"
|
|
17
|
+
UNEDITABLE
|
|
18
|
+
APPEND_PARAMETER "Editable Combobox" 8 UINT 0 1 1 "Editable Combobox"
|
|
19
|
+
STATE DISABLE 0
|
|
20
|
+
STATE ENABLE 1
|
|
21
|
+
APPEND_PARAMETER "Uneditable Combobox" 8 UINT 0 1 1 "Uneditable Combobox"
|
|
22
|
+
UNEDITABLE
|
|
23
|
+
STATE DISABLE 0
|
|
24
|
+
STATE ENABLE 1
|
|
25
|
+
APPEND_PARAMETER "Editable Checkbox" 8 UINT 0 1 1 "Editable Checkbox"
|
|
26
|
+
STATE UNCHECKED 0
|
|
27
|
+
STATE CHECKED 1
|
|
28
|
+
APPEND_PARAMETER "Uneditable Checkbox" 8 UINT 0 1 1 "Uneditable Checkbox"
|
|
29
|
+
STATE UNCHECKED 0
|
|
30
|
+
STATE CHECKED 1
|
|
31
|
+
UNEDITABLE
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
TABLE "Two Dimensional" BIG_ENDIAN TWO_DIMENSIONAL 200 "Two Dimensional"
|
|
2
|
+
APPEND_PARAMETER "Threshold" 32 UINT 0 4294967295 1 "Telemetry item threshold at which point persistance is incremented"
|
|
3
|
+
FORMAT_STRING "0x%0X"
|
|
4
|
+
APPEND_PARAMETER "Offset" 32 UINT 0 4294967295 0 "Offset into the telemetry packet to monitor"
|
|
5
|
+
APPEND_PARAMETER "Data Size" 32 UINT 0 3 0 "Amount of data to monitor (bytes)"
|
|
6
|
+
STATE BITS 0
|
|
7
|
+
STATE BYTE 1
|
|
8
|
+
STATE WORD 2
|
|
9
|
+
STATE LONGWORD 3
|
|
10
|
+
APPEND_PARAMETER "Bit Mask" 32 UINT 0 4294967295 0 "Bit Mask to apply to the Data Size before the value is compared ot the Threshold"
|
|
11
|
+
FORMAT_STRING "0x%0X"
|
|
12
|
+
APPEND_PARAMETER "Persistence" 32 UINT 0 4294967295 0 "Number of times the Threshold must be exceeded before Action is triggered"
|
|
13
|
+
APPEND_PARAMETER "Type" 32 UINT 0 3 0 "How the Threshold is compared against"
|
|
14
|
+
STATE LESS_THAN 0
|
|
15
|
+
STATE GREATER_THAN 1
|
|
16
|
+
STATE EQUAL_TO 2
|
|
17
|
+
STATE NOT_EQUAL_TO 3
|
|
18
|
+
APPEND_PARAMETER "Action" 32 UINT 0 4 0 "Action to take when Persistance is met"
|
|
19
|
+
STATE NO_ACTION_REQUIRED 0
|
|
20
|
+
STATE INITIATE_RESET 1
|
|
21
|
+
STATE CHANGE_MODE_SAFE 2
|
|
22
|
+
APPEND_PARAMETER "Group" 32 UINT 1 4 1 "Telemetry group this monitor item belongs to. Groups are automatically enabled due to payload events."
|
|
23
|
+
STATE ALL_MODES 1
|
|
24
|
+
STATE SAFE_MODE 2
|
|
25
|
+
APPEND_PARAMETER "Signed" 8 UINT 0 2 0 "Whether to treat the Data Size data as signed or unsigned when comparing to the Threshold"
|
|
26
|
+
STATE NOT_APPLICABLE 0
|
|
27
|
+
STATE UNSIGNED 1
|
|
28
|
+
STATE SIGNED 2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
LOAD_UTILITY blah
|
|
@@ -15,7 +15,7 @@ Send {Enter}
|
|
|
15
15
|
Run ruby.exe %A_ScriptDir%/ScriptRunner -w 800 -t 200
|
|
16
16
|
Sleep 2000
|
|
17
17
|
WinActivate, Script Runner
|
|
18
|
-
Sleep
|
|
18
|
+
Sleep 2000
|
|
19
19
|
Send set_limits("INST", "HEALTH_STATUS", "TEMP1", -100, -80, 80, 100, -60, 60, :DEFAULT){Enter}
|
|
20
20
|
Send set_limits("INST", "HEALTH_STATUS", "TEMP3", -100, -80, 80, 100, -60, 60, :DEFAULT)
|
|
21
21
|
Sleep 1000
|
|
@@ -192,7 +192,7 @@ Sleep 2000
|
|
|
192
192
|
Run ruby.exe %A_ScriptDir%/ScriptRunner -w 600 -t 600
|
|
193
193
|
Sleep 2000
|
|
194
194
|
WinActivate Script Runner
|
|
195
|
-
Sleep
|
|
195
|
+
Sleep 2000
|
|
196
196
|
Send set_limits("INST","HEALTH_STATUS","TEMP1",-110,-105,105,110,-100,100){ENTER}
|
|
197
197
|
Send set_limits_set("CUSTOM"){ENTER}
|
|
198
198
|
Sleep 1000
|
|
@@ -101,6 +101,18 @@ Sleep 500
|
|
|
101
101
|
Send ^+{Tab}
|
|
102
102
|
Sleep 500
|
|
103
103
|
|
|
104
|
+
Send !f ; File
|
|
105
|
+
Sleep 500
|
|
106
|
+
Send r ; Open Recent
|
|
107
|
+
Sleep 500
|
|
108
|
+
Send {ENTER}
|
|
109
|
+
Sleep 1000
|
|
110
|
+
Send !f ; File
|
|
111
|
+
Sleep 500
|
|
112
|
+
Send r ; Open Recent
|
|
113
|
+
Sleep 500
|
|
114
|
+
Send {Down}{ENTER}
|
|
115
|
+
|
|
104
116
|
Click right 220 60
|
|
105
117
|
Sleep 500
|
|
106
118
|
Click 240 75 ; Close
|
|
@@ -143,9 +155,9 @@ WinWaitActive Script Runner
|
|
|
143
155
|
|
|
144
156
|
Send ^s ; File Save SR-1
|
|
145
157
|
Sleep 500
|
|
146
|
-
|
|
158
|
+
Send !f ; File
|
|
147
159
|
Sleep 500
|
|
148
|
-
|
|
160
|
+
Send a ; Save as
|
|
149
161
|
WinWaitActive Save As
|
|
150
162
|
Send autohotkey.rb{Enter}
|
|
151
163
|
WinWaitActive Script Runner
|
|
@@ -391,11 +403,11 @@ WinWaitActive Message
|
|
|
391
403
|
Sleep 500
|
|
392
404
|
Send {Enter}
|
|
393
405
|
WinWaitActive Script Runner
|
|
394
|
-
WinWaitActive
|
|
406
|
+
WinWaitActive Prompt
|
|
395
407
|
Sleep 500
|
|
396
408
|
Send {Enter}
|
|
397
409
|
WinWaitActive Script Runner
|
|
398
|
-
WinWaitActive
|
|
410
|
+
WinWaitActive Prompt
|
|
399
411
|
Sleep 500
|
|
400
412
|
Send {Enter}
|
|
401
413
|
WinWaitActive Script Runner
|
data/bin/cosmos
CHANGED
|
@@ -133,7 +133,7 @@ end
|
|
|
133
133
|
def gen_test(target)
|
|
134
134
|
%Q(# To add this test to Test Runner edit config/tools/test_runner/test_runner.txt
|
|
135
135
|
# Add this line:
|
|
136
|
-
#
|
|
136
|
+
# LOAD_UTILITY '#{target.downcase}_test'
|
|
137
137
|
#
|
|
138
138
|
# Test Runner test script
|
|
139
139
|
class #{target.capitalize}Test < Cosmos::Test
|
data/bin/xtce_converter
CHANGED
|
@@ -68,7 +68,7 @@ end
|
|
|
68
68
|
if input_filename
|
|
69
69
|
packet_config = Cosmos::PacketConfig.new
|
|
70
70
|
puts "Processing #{input_filename}..."
|
|
71
|
-
packet_config.
|
|
71
|
+
packet_config.process_file(input_filename, nil)
|
|
72
72
|
puts "Converting to COSMOS config files in #{output_dir}"
|
|
73
73
|
packet_config.to_config(output_dir)
|
|
74
74
|
puts "Success"
|
data/cosmos.gemspec
CHANGED
|
@@ -73,12 +73,10 @@ spec = Gem::Specification.new do |s|
|
|
|
73
73
|
files
|
|
74
74
|
else [] end
|
|
75
75
|
|
|
76
|
-
s.
|
|
77
|
-
|
|
78
|
-
s.required_ruby_version = '~> 2.2'
|
|
76
|
+
s.required_ruby_version = '~> 2.3'
|
|
79
77
|
|
|
80
78
|
# Runtime Dependencies
|
|
81
|
-
s.add_runtime_dependency 'bundler', '
|
|
79
|
+
s.add_runtime_dependency 'bundler', '>= 1.3'
|
|
82
80
|
s.add_runtime_dependency 'rdoc', '>= 4' # qtbindings doesn't parse in 6.0.0, fixed in 6.0.1
|
|
83
81
|
s.add_runtime_dependency 'rake', '>= 10.0' # 10.0 released Nov 12, 2012
|
|
84
82
|
s.add_runtime_dependency 'json', '>= 1.5', '< 3' # 2.0+ works with COSMOS
|
|
@@ -88,7 +86,7 @@ spec = Gem::Specification.new do |s|
|
|
|
88
86
|
s.add_runtime_dependency 'uuidtools', '~> 2.1'
|
|
89
87
|
s.add_runtime_dependency 'snmp', '~> 1.0'
|
|
90
88
|
s.add_runtime_dependency 'rubyzip', '~> 1.2'
|
|
91
|
-
s.add_runtime_dependency 'nokogiri', '~> 1.
|
|
89
|
+
s.add_runtime_dependency 'nokogiri', '~> 1.10'
|
|
92
90
|
s.add_runtime_dependency 'opengl-bindings', '~> 1.6' if RUBY_ENGINE == 'ruby' # MRI Only
|
|
93
91
|
s.add_runtime_dependency 'qtbindings', '~> 4.8.6', '>= 4.8.6.2' if RUBY_ENGINE == 'ruby' # MRI Only
|
|
94
92
|
s.add_runtime_dependency 'puma', '~> 3.10'
|
|
@@ -107,8 +105,8 @@ spec = Gem::Specification.new do |s|
|
|
|
107
105
|
s.add_development_dependency 'rspec', '~> 3.5'
|
|
108
106
|
s.add_development_dependency 'flog', '~> 4.0'
|
|
109
107
|
s.add_development_dependency 'flay', '~> 2.0'
|
|
110
|
-
s.add_development_dependency 'reek', '~>
|
|
111
|
-
s.add_development_dependency 'roodi', '~>
|
|
108
|
+
s.add_development_dependency 'reek', '~> 5.0'
|
|
109
|
+
s.add_development_dependency 'roodi', '~> 5.0'
|
|
112
110
|
s.add_development_dependency 'guard', '~> 2.0'
|
|
113
111
|
s.add_development_dependency 'listen', '~> 3.0'
|
|
114
112
|
s.add_development_dependency 'guard-bundler', '~> 2.0'
|
|
@@ -95,6 +95,10 @@ udp_interface.rb:
|
|
|
95
95
|
description: Number of seconds to wait before aborting the read. Default is
|
|
96
96
|
'nil' (block on read).
|
|
97
97
|
values: .+
|
|
98
|
+
- name: Bind Address
|
|
99
|
+
required: false
|
|
100
|
+
description: Address to bind UDP ports to
|
|
101
|
+
values: .+
|
|
98
102
|
serial_interface.rb:
|
|
99
103
|
description: Connects to a target over a serial port. COSMOS provides drivers
|
|
100
104
|
for both Windows and POSIX drivers for UNIX based systems.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
EXPORTER:
|
|
3
|
+
summary: Configure a Ruby class to export the command sequence definition into a custom format
|
|
4
|
+
parameters:
|
|
5
|
+
- name: Exporter Class Filename
|
|
6
|
+
required: true
|
|
7
|
+
description: The name of the Ruby class which implements the exporter.
|
|
8
|
+
Follow the convention of lower case filename with words separated by underscores.
|
|
9
|
+
For example if your class is "MyExporter" your filename would be "my_exporter.rb".
|
|
10
|
+
values: .+
|
|
11
|
+
- name: Exporter Class Arguments
|
|
12
|
+
required: false
|
|
13
|
+
description: Arguments to pass to the class constructor. There can be more than one.
|
|
14
|
+
values: .+
|
|
@@ -69,3 +69,17 @@ SHOW_LIMITS_LINES:
|
|
|
69
69
|
description: Whether to display the limits lines
|
|
70
70
|
required: true
|
|
71
71
|
values: ['TRUE','FALSE']
|
|
72
|
+
DART_REDUCTION:
|
|
73
|
+
summary: What kind of DART reduction to use for the data item
|
|
74
|
+
parameters:
|
|
75
|
+
- name: Reduction Time Period
|
|
76
|
+
description: DART reduces data over minute, hour, and day
|
|
77
|
+
required: true
|
|
78
|
+
values: ['NONE','MINUTE','HOUR','DAY']
|
|
79
|
+
DART_REDUCED_TYPE:
|
|
80
|
+
summary: What kind of DART reduction type to use for the data item
|
|
81
|
+
parameters:
|
|
82
|
+
- name: Reduction Type
|
|
83
|
+
description: DART calculates an average, minimum, maximum and standard deviation over the time period
|
|
84
|
+
required: true
|
|
85
|
+
values: ['AVG','MIN','MAX','STDDEV']
|
|
@@ -35,6 +35,17 @@ LOG:
|
|
|
35
35
|
required: true
|
|
36
36
|
description: Log writer name as defined by PACKET_LOG_WRITER
|
|
37
37
|
values: \D\S*
|
|
38
|
+
LOG_STORED:
|
|
39
|
+
summary: Enable logging of stored telemetry on the interface by the specified log writer
|
|
40
|
+
description: LOG_STORED allows you to specify a different log writer for stored telemetry
|
|
41
|
+
(telemetry which has the 'stored' flag set in the packet). By default the stored telemetry
|
|
42
|
+
is intermingled in the normal log file.
|
|
43
|
+
warning: Choosing a custom log writer can prevent COSMOS from reading back your log files
|
|
44
|
+
parameters:
|
|
45
|
+
- name: Name
|
|
46
|
+
required: true
|
|
47
|
+
description: Log writer name as defined by PACKET_LOG_WRITER
|
|
48
|
+
values: \D\S*
|
|
38
49
|
DONT_LOG:
|
|
39
50
|
summary: Disable logging commands and telemetry on this interface
|
|
40
51
|
LOG_RAW:
|
|
@@ -166,7 +166,8 @@ LIMITS:
|
|
|
166
166
|
values: \d+
|
|
167
167
|
- name: Initial State
|
|
168
168
|
required: true
|
|
169
|
-
description: Whether limits monitoring for this telemetry item is initially enabled or disabled
|
|
169
|
+
description: Whether limits monitoring for this telemetry item is initially enabled or disabled.
|
|
170
|
+
Note if you have multiple LIMITS items they should all have the same initial state.
|
|
170
171
|
values: ['ENABLED', 'DISABLED']
|
|
171
172
|
- name: Red Low Limit
|
|
172
173
|
required: true
|
data/data/config/launcher.yaml
CHANGED
|
@@ -60,7 +60,10 @@ TOOL:
|
|
|
60
60
|
required: true
|
|
61
61
|
description: Command that is executed to launch the tool. (The same thing you
|
|
62
62
|
would type at a command terminal). Note that you can include tool parameters
|
|
63
|
-
here which will be applied when the tool starts.
|
|
63
|
+
here which will be applied when the tool starts. COSMOS defines three helper
|
|
64
|
+
keywords to execute tools - LAUNCH, LAUNCH_TERMINAL, and LAUNCH_GEM. LAUNCH
|
|
65
|
+
starts a GUI Ruby tool without a terminal. LAUNCH_TERMINAL starts a Ruby tool
|
|
66
|
+
with a terminal window. LAUNCH_GEM launches a Ruby tool distributed with a gem.
|
|
64
67
|
values: .+
|
|
65
68
|
- name: Icon Filename
|
|
66
69
|
required: false
|
|
@@ -101,7 +104,10 @@ MULTITOOL_START:
|
|
|
101
104
|
required: true
|
|
102
105
|
description: Command that is executed to launch the tool. (The same thing you
|
|
103
106
|
would type at a command terminal). Note that you can include tool parameters
|
|
104
|
-
here which will be applied when the tool starts.
|
|
107
|
+
here which will be applied when the tool starts. COSMOS defines three helper
|
|
108
|
+
keywords to execute tools - LAUNCH, LAUNCH_TERMINAL, and LAUNCH_GEM. LAUNCH
|
|
109
|
+
starts a GUI Ruby tool without a terminal. LAUNCH_TERMINAL starts a Ruby tool
|
|
110
|
+
with a terminal window. LAUNCH_GEM launches a Ruby tool distributed with a gem.
|
|
105
111
|
values: .+
|
|
106
112
|
modifiers:
|
|
107
113
|
DONT_CAPTURE_IO:
|
|
@@ -115,3 +121,7 @@ MULTITOOL_START:
|
|
|
115
121
|
values: \d+
|
|
116
122
|
MULTITOOL_END:
|
|
117
123
|
summary: Ends the creation of a multi-tool button
|
|
124
|
+
AUTO_GEM_TOOLS:
|
|
125
|
+
summary: Automatically installs COSMOS tool gems
|
|
126
|
+
description: Traverses the installed rubygems looking for COSMOS gems named cosmos-xxxx.gem.
|
|
127
|
+
If the gem has a tools directory, the tool launcher will be added as a TOOL in the Launcher.
|
|
@@ -11,12 +11,12 @@ FORMAT_STRING:
|
|
|
11
11
|
UNITS:
|
|
12
12
|
summary: Add displayed units
|
|
13
13
|
example: |
|
|
14
|
-
UNITS
|
|
14
|
+
UNITS Celsius C
|
|
15
15
|
UNITS Kilometers KM
|
|
16
16
|
parameters:
|
|
17
17
|
- name: Full Name
|
|
18
18
|
required: true
|
|
19
|
-
description: Full name of the units type, e.g.
|
|
19
|
+
description: Full name of the units type, e.g. Celsius
|
|
20
20
|
values: .*
|
|
21
21
|
- name: Abbreviated
|
|
22
22
|
required: true
|
|
@@ -68,6 +68,16 @@ WRITE_CONVERSION:
|
|
|
68
68
|
takes extra parameters and must always implement the call method. The conversion
|
|
69
69
|
factor is applied to the value entered by the user before it is written into
|
|
70
70
|
the binary command packet and sent.
|
|
71
|
+
|
|
72
|
+
<div class="note info">
|
|
73
|
+
<h5>Multiple write conversions on command parameters</h5>
|
|
74
|
+
<p>When a command is built, each item gets written (and write conversions are run)
|
|
75
|
+
to set the default value. Then items are written (again write conversions are run)
|
|
76
|
+
with user provided values. Thus write conversions can be run twice. Also there are
|
|
77
|
+
no guarantees which parameters have already been written. The packet itself has a
|
|
78
|
+
given_values() method which can be used to retrieve a hash of the user provided
|
|
79
|
+
values to the command. That can be used to check parameter values passed in.</p>
|
|
80
|
+
</div>
|
|
71
81
|
example: |
|
|
72
82
|
WRITE_CONVERSION the_great_conversion.rb 1000
|
|
73
83
|
|
|
@@ -151,6 +161,16 @@ GENERIC_WRITE_CONVERSION_START:
|
|
|
151
161
|
compatibility). The last line of ruby code given should return the converted
|
|
152
162
|
value. The GENERIC_WRITE_CONVERSION_END keyword specifies that all lines of
|
|
153
163
|
ruby code for the conversion have been given.
|
|
164
|
+
|
|
165
|
+
<div class="note info">
|
|
166
|
+
<h5>Multiple write conversions on command parameters</h5>
|
|
167
|
+
<p>When a command is built, each item gets written (and write conversions are run)
|
|
168
|
+
to set the default value. Then items are written (again write conversions are run)
|
|
169
|
+
with user provided values. Thus write conversions can be run twice. Also there are
|
|
170
|
+
no guarantees which parameters have already been written. The packet itself has a
|
|
171
|
+
given_values() method which can be used to retrieve a hash of the user provided
|
|
172
|
+
values to the command. That can be used to check parameter values passed in.</p>
|
|
173
|
+
</div>
|
|
154
174
|
warning: Generic conversions are not a good long term solution. Consider creating
|
|
155
175
|
a conversion class and using WRITE_CONVERSION instead. WRITE_CONVERSION is easier
|
|
156
176
|
to debug and higher performance.
|
data/data/config/screen.yaml
CHANGED
|
@@ -146,6 +146,8 @@ NAMED_WIDGET:
|
|
|
146
146
|
required: true
|
|
147
147
|
description: The unique parameters for the given widget type
|
|
148
148
|
values: .+
|
|
149
|
+
STAY_ON_TOP:
|
|
150
|
+
summary: Force a screen to stay on top of all other windows
|
|
149
151
|
# Even though these are technically SCREEN modifiers we load them at the top_frame
|
|
150
152
|
# level so they appear as available keywords
|
|
151
153
|
<%= MetaConfigParser.load('widgets.yaml').to_meta_config_yaml(0) %>
|
|
@@ -7,6 +7,15 @@ LINE_DELAY:
|
|
|
7
7
|
description: Delay in seconds before the next line is executed. A value of
|
|
8
8
|
0 means to execute the scripts as fast as possible.
|
|
9
9
|
values: '[0-9]*\.?[0-9]+'
|
|
10
|
+
PAUSE_ON_ERROR:
|
|
11
|
+
summary: Set or clear the pause on error checkbox
|
|
12
|
+
description: If this is checked, Script Runner will pause if the test encounters
|
|
13
|
+
an error. Otherwise the error will be logged but the script will continue.
|
|
14
|
+
parameters:
|
|
15
|
+
- name: Enable
|
|
16
|
+
required: true
|
|
17
|
+
description: Whether to pause when the script encounters an error
|
|
18
|
+
values: ['TRUE', 'FALSE']
|
|
10
19
|
MONITOR_LIMITS:
|
|
11
20
|
summary: Log limits events to the Script Runner log file while a script is running
|
|
12
21
|
description: Limits events are always logged by the Command and Telemetry Server
|
data/data/config/system.yaml
CHANGED
|
@@ -227,21 +227,58 @@ TIME_ZONE_UTC:
|
|
|
227
227
|
affects packet receive times, timestamped log filenames, message logs,
|
|
228
228
|
Cmd/Tlm extractor time ranges, etc.
|
|
229
229
|
since: 3.10.0
|
|
230
|
-
|
|
231
|
-
summary: Add a file to the
|
|
232
|
-
description: Adds a file to the set of files used in marshal file
|
|
233
|
-
Upon startup, COSMOS calculates
|
|
230
|
+
ADD_HASH_FILE:
|
|
231
|
+
summary: Add a file to the hashing sum calculation
|
|
232
|
+
description: Adds a file to the set of files used in marshal file hashing sum calculation.
|
|
233
|
+
Upon startup, COSMOS calculates a hashing sum over the command/telemetry definition files
|
|
234
234
|
for all targets. After the definitions have been processed, COSMOS saves the resulting
|
|
235
|
-
objects as marshal files in a folder with the
|
|
236
|
-
The next time COSMOS runs, if the
|
|
235
|
+
objects as marshal files in a folder with the hashing sum as part of the name.
|
|
236
|
+
The next time COSMOS runs, if the hashing sum of the cmd/tlm definition files
|
|
237
237
|
has not changed, COSMOS can load the marshal files instead of re-processing the definitions.
|
|
238
|
-
If a file is specified with the
|
|
239
|
-
|
|
238
|
+
If a file is specified with the ADD_HASH_FILE keyword, COSMOS will include it in the
|
|
239
|
+
hashing sum calculation. This means that a change in the file will cause COSMOS to
|
|
240
240
|
re-process the cmd/tlm defintions and create a new set of marshal files.
|
|
241
|
-
|
|
242
|
-
|
|
241
|
+
The default hashing algorithm is MD5, but other Ruby Digest algorithms are also supported,
|
|
242
|
+
like SHA1 and SHA256
|
|
243
|
+
since: 4.4.0
|
|
244
|
+
example: ADD_HASH_FILE lib/user_version.rb
|
|
243
245
|
parameters:
|
|
244
246
|
- name: Filename
|
|
245
247
|
required: true
|
|
246
248
|
description: Filename, either fully qualified, or relative to Cosmos::USERPATH
|
|
247
249
|
values: '.+\.rb'
|
|
250
|
+
CLASSIFICATION:
|
|
251
|
+
summary: Add a classification banner to the top of all the COSMOS tools
|
|
252
|
+
since: 4.3.0
|
|
253
|
+
example: |
|
|
254
|
+
CLASSIFICATION Unclassified green
|
|
255
|
+
CLASSIFICATION Secret 255 114 0
|
|
256
|
+
parameters:
|
|
257
|
+
- name: Display Text
|
|
258
|
+
required: true
|
|
259
|
+
description: The text to display in the classification banner
|
|
260
|
+
values: '.*'
|
|
261
|
+
- name: Color Name | Red Hex
|
|
262
|
+
required: true
|
|
263
|
+
description: The color name or the red value of a RGB triplet
|
|
264
|
+
values: '.*'
|
|
265
|
+
- name: Green Hex
|
|
266
|
+
required: false
|
|
267
|
+
description: The green value of a RGB triplet
|
|
268
|
+
values: '\d+'
|
|
269
|
+
- name: Blue Hex
|
|
270
|
+
required: false
|
|
271
|
+
description: The blue value of a RGB triplet
|
|
272
|
+
values: '\d+'
|
|
273
|
+
HASHING_ALGORITHM:
|
|
274
|
+
summary: Specify which Ruby Digest hashing algorithm to use
|
|
275
|
+
description: Set the hashing algorithm used for config hashing, tlm_viewer hashing, and
|
|
276
|
+
script hashing. COSMOS will truncate the resulting hash string down to 32 characters
|
|
277
|
+
since: 4.4.0
|
|
278
|
+
example: HASHING_ALGORITHM SHA256
|
|
279
|
+
parameters:
|
|
280
|
+
- name: Algorithm
|
|
281
|
+
required: true
|
|
282
|
+
description: Digest algorithm, one of MD5, RMD160, SHA1, SHA256, SHA384, SHA512
|
|
283
|
+
values: .+
|
|
284
|
+
|