2 * Code for the controls page.
7 mctx.control.api = mctx.api + 'control'
8 mctx.control.states = {
15 mctx.control.state = null;
17 function toggleControls(running) {
19 $("#experiment-stop").show();
20 $("#pressure-widget").show();
21 $("#start-widget").hide();
23 $("#start-widget").show();
24 $("#experiment-stop").hide();
25 $("#pressure-widget").hide();
29 function setSampleRate(id, val, result) {
31 if (isNaN(n) || n < 0) {
32 result.text("You must give positive numeric values.").addClass("fail");
37 url : mctx.api + 'sensors',
38 data : {id : id, sample_s : n}
39 }).done(function(data) {
40 if (!result.checkStatus(data)) {
44 result.text("Set ok!").removeClass("fail").addClass("pass");
48 $.fn.loadSensorList = function (result, input) {
52 url : mctx.api + 'identify',
53 data : {'sensors' : 1}
54 }).done(function(data) {
55 if (!result.checkStatus(data)) {
58 for (var id in data.sensors) {
59 var option = $("<option/>", {value : id, text : data.sensors[id]});
60 select.append(option);
65 $.fn.setStatusUpdater = function () {
68 var updater = function () {
70 url : mctx.control.api,
71 data : {'action' : 'identify'}
72 }).done(function (data) {
73 if (!result.checkStatus(data)) {
74 $(result).parent().addClass("fail");
75 setTimeout(updater, 4000);
82 switch (data.control_state_id) {
83 case mctx.control.states.start:
84 text = "Experiment started - '" + data.control_experiment_name +
85 "' by " + data.control_user_name;
88 case mctx.control.states.pause:
89 text = "Experiment paused - '" + data.control_experiment_name +
90 "' by " + data.control_user_name;
93 case mctx.control.states.stop:
94 text = "No experiment running.";
96 case mctx.control.states.emergency:
97 text = "Emergency mode - '" + data.control_experiment_name +
98 "' by " + data.control_user_name;
102 text = "Unknown mode: " + data.control_state_id;
106 if (data.control_state_id !== mctx.control.state) {
107 toggleControls(running);
108 $(result).text(text);
110 $(result).parent().addClass("fail");
112 $(result).parent().addClass("pass");
115 mctx.control.state = data.control_state_id;
118 setTimeout(updater, 2000);
121 $(result).text("Connection failed.").parent().addClass("fail");
122 setTimeout(updater, 4000);
130 $.fn.startExperiment = function (group, experiment, force, result) {
131 $(group).attr('disabled', 'disabled');
133 if (!experiment || !experiment.match(/^[a-zA-Z0-9_-]+$/)) {
134 result.text("Experiment names must be composed of alphanumeric characters" +
135 " or the characters -_-").addClass("fail");
136 $(group).removeAttr('disabled');
140 var data = {action : "start", name : experiment};
146 url : mctx.control.api,
148 }).done(function (data) {
149 if (!result.checkStatus(data)) {
152 result.html(" ");
153 toggleControls(true);
154 }).always(function () {
155 $(group).removeAttr('disabled');
159 $.fn.stopExperiment = function (result) {
161 stop.attr('disabled', 'disabled');
162 result.text("Stopping the experiment...");
165 url : mctx.control.api,
166 data : {action : "stop"}
167 }).done(function (data) {
168 if (!result.checkStatus(data)) {
171 result.html(" ");
172 toggleControls(false);
173 }).always(function () {
174 stop.removeAttr('disabled');
178 $.fn.setPressure = function(pressure, result) {
179 result.html(" ");
181 for (var k in pressure) {
182 var n = Number(pressure[k]);
183 if (isNaN(n) || n < 0) {
184 result.text("You must give positive numeric values.").addClass("fail");
190 var set = pressure['set'] + "," + pressure['wait'] + ","
191 pressure['size'] + "," + pressure['count'];
193 url : mctx.api + "actuators",
194 data : {id : mctx.actuator.pressure_regulator, set : set}
195 }).done(function (data) {
196 if (!result.checkStatus(data)) {
200 result.text("Set ok!").removeClass("fail").addClass("pass");