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) {
50 select.empty(); //Reset list
53 url : mctx.api + 'identify',
54 data : {'sensors' : 1}
55 }).done(function(data) {
56 if (!result.checkStatus(data)) {
59 for (var id in data.sensors) {
60 var option = $("<option/>", {value : id, text : data.sensors[id].name});
61 select.append(option);
66 $.fn.setStatusUpdater = function () {
69 var updater = function () {
71 url : mctx.control.api,
72 data : {'action' : 'identify'}
73 }).done(function (data) {
74 if (!result.checkStatus(data)) {
75 $(result).parent().addClass("fail");
76 setTimeout(updater, 4000);
83 switch (data.control_state_id) {
84 case mctx.control.states.start:
85 text = "Experiment started - '" + data.control_experiment_name +
86 "' by " + data.control_user_name;
89 case mctx.control.states.pause:
90 text = "Experiment paused - '" + data.control_experiment_name +
91 "' by " + data.control_user_name;
94 case mctx.control.states.stop:
95 text = "No experiment running.";
97 case mctx.control.states.emergency:
98 text = "Emergency mode - '" + data.control_experiment_name +
99 "' by " + data.control_user_name;
103 text = "Unknown mode: " + data.control_state_id;
107 if (data.control_state_id !== mctx.control.state) {
108 //Set logic for sensor sample rate thing
109 $("#sensor-select").loadSensorList($("#samplerate-result"));
110 toggleControls(running);
111 $(result).text(text);
113 $(result).parent().addClass("fail").removeClass("pass");
115 $(result).parent().addClass("pass").removeClass("fail");
118 mctx.control.state = data.control_state_id;
121 setTimeout(updater, 2000);
124 $(result).text("Connection failed.").parent().addClass("fail");
125 setTimeout(updater, 4000);
133 $.fn.startExperiment = function (group, experiment, force, result) {
134 $(group).attr('disabled', 'disabled');
136 var can_number = ($(this).attr("name") === "start_strain") ? 0 : 1;
138 if (!experiment || !experiment.match(/^[a-zA-Z0-9_-]+$/)) {
139 result.text("Experiment names must be composed of alphanumeric characters" +
140 " or the characters -_-").addClass("fail");
141 $(group).removeAttr('disabled');
145 var data = {action : "start", name : experiment};
150 //Start the experiment
152 url : mctx.control.api,
154 }).done(function (data) {
155 if (!result.checkStatus(data)) {
156 $(group).removeAttr('disabled');
162 url : mctx.api + "actuators",
163 data : {name : "can_select", set : can_number}
164 }).done(function (data) {
165 if (!result.checkStatus(data)) {
166 $(group).removeAttr('disabled');
172 url : mctx.api + 'actuators',
173 data : {name : "can_enable", set : 1}
174 }).done(function (data) {
175 if (!result.checkStatus(data)) {
176 $(group).removeAttr('disabled');
179 result.html(" ");
180 toggleControls(true);
181 }).fail(function () {
182 $(group).removeAttr('disabled');
184 }).fail(function () {
185 $(group).removeAttr('disabled');
187 }).fail(function () {
188 $(group).removeAttr('disabled');
192 $.fn.stopExperiment = function (result) {
194 stop.attr('disabled', 'disabled');
195 result.text("Stopping the experiment...");
198 url : mctx.control.api,
199 data : {action : "stop"}
200 }).done(function (data) {
201 if (!result.checkStatus(data)) {
204 result.html(" ");
205 toggleControls(false);
206 }).always(function () {
207 stop.removeAttr('disabled');
211 $.fn.setPressure = function(pressure, result) {
212 result.html(" ");
214 for (var k in pressure) {
215 var n = Number(pressure[k]);
216 if (isNaN(n) || n < 0) {
217 result.text("You must give positive numeric values.").addClass("fail");
223 var set = pressure['set'] + "_" + pressure['wait'] + "_" +
224 pressure['step'] + "_" + pressure['count'];
226 url : mctx.api + "actuators",
227 data : {name : "pregulator", set : set}
228 }).done(function (data) {
229 if (!result.checkStatus(data)) {
233 result.text("Set ok!").removeClass("fail").addClass("pass");