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 $("#start-widget input").removeAttr("disabled");
25 $("#experiment-stop").hide();
26 $("#pressure-widget").hide();
30 function setSampleRate(id, val, result) {
32 if (isNaN(n) || n < 0) {
33 result.text("You must give positive numeric values.").addClass("fail");
38 url : mctx.api + 'sensors',
39 data : {id : id, sample_s : n}
40 }).done(function(data) {
41 if (!result.checkStatus(data)) {
45 result.text("Set ok!").removeClass("fail").addClass("pass");
49 $.fn.loadSensorList = function (result, input) {
51 select.empty(); //Reset list
54 url : mctx.api + 'identify',
55 data : {'sensors' : 1}
56 }).done(function(data) {
57 if (!result.checkStatus(data)) {
60 for (var id in data.sensors) {
61 var option = $("<option/>", {value : id, text : data.sensors[id].name});
62 select.append(option);
67 $.fn.setStatusUpdater = function () {
70 var updater = function () {
72 url : mctx.control.api,
73 data : {'action' : 'identify'}
74 }).done(function (data) {
75 if (!result.checkStatus(data)) {
76 $(result).parent().addClass("fail");
77 setTimeout(updater, 4000);
84 switch (data.control_state_id) {
85 case mctx.control.states.start:
86 text = "Experiment started - '" + data.control_experiment_name +
87 "' by " + data.control_user_name;
90 case mctx.control.states.pause:
91 text = "Experiment paused - '" + data.control_experiment_name +
92 "' by " + data.control_user_name;
95 case mctx.control.states.stop:
96 text = "No experiment running.";
98 case mctx.control.states.emergency:
99 text = "Emergency mode - '" + data.control_experiment_name +
100 "' by " + data.control_user_name;
104 text = "Unknown mode: " + data.control_state_id;
108 if (data.control_state_id !== mctx.control.state) {
109 //Set logic for sensor sample rate thing
110 $("#sensor-select").loadSensorList($("#samplerate-result"));
111 toggleControls(running);
112 $(result).text(text);
114 $(result).parent().addClass("fail").removeClass("pass");
116 $(result).parent().addClass("pass").removeClass("fail");
119 mctx.control.state = data.control_state_id;
122 setTimeout(updater, 2000);
125 $(result).text("Connection failed.").parent().addClass("fail");
126 setTimeout(updater, 4000);
134 $.fn.startExperiment = function (group, experiment, force, result) {
135 $(group).attr('disabled', 'disabled');
137 var can_number = ($(this).attr("name") === "start_strain") ? 0 : 1;
139 if (!experiment || !experiment.match(/^[a-zA-Z0-9_-]+$/)) {
140 result.text("Experiment names must be composed of alphanumeric characters" +
141 " or the characters -_-").addClass("fail");
142 $(group).removeAttr('disabled');
146 var data = {action : "start", name : experiment};
151 //Start the experiment
153 url : mctx.control.api,
155 }).done(function (data) {
156 if (!result.checkStatus(data)) {
157 $(group).removeAttr('disabled');
163 url : mctx.api + "actuators",
164 data : {name : "can_select", set : can_number}
165 }).done(function (data) {
166 if (!result.checkStatus(data)) {
167 $(group).removeAttr('disabled');
173 url : mctx.api + 'actuators',
174 data : {name : "can_enable", set : 1}
175 }).done(function (data) {
176 if (!result.checkStatus(data)) {
177 $(group).removeAttr('disabled');
180 result.html(" ");
181 toggleControls(true);
182 }).fail(function () {
183 $(group).removeAttr('disabled');
185 }).fail(function () {
186 $(group).removeAttr('disabled');
188 }).fail(function () {
189 $(group).removeAttr('disabled');
193 $.fn.stopExperiment = function (result) {
195 stop.attr('disabled', 'disabled');
196 result.text("Stopping the experiment...");
199 url : mctx.control.api,
200 data : {action : "stop"}
201 }).done(function (data) {
202 if (!result.checkStatus(data)) {
205 result.html(" ");
206 toggleControls(false);
207 }).always(function () {
208 stop.removeAttr('disabled');
212 $.fn.setPressure = function(pressure, result) {
213 result.html(" ");
215 for (var k in pressure) {
216 var n = Number(pressure[k]);
217 if (isNaN(n) || n < 0) {
218 result.text("You must give positive numeric values.").addClass("fail");
224 var set = pressure['set'] + "_" + pressure['wait'] + "_" +
225 pressure['step'] + "_" + pressure['count'];
227 url : mctx.api + "actuators",
228 data : {name : "pregulator", set : set}
229 }).done(function (data) {
230 if (!result.checkStatus(data)) {
234 result.text("Set ok!").removeClass("fail").addClass("pass");