1d5c744d6066f433e094c472d93e7a138f8edc07
[matches/MCTX3420.git] / testing / MCTXWeb / public_html / static / mctx.control.js
1 /**
2  * Code for the controls page.
3  * @date 19-10-2013
4  */
5
6 mctx.control = {};
7 mctx.control.api = mctx.api + 'control'
8 mctx.control.states = {
9   start : 0,
10   pause : 1,
11   resume : 2,
12   stop : 3,
13   emergency : 4
14 };
15 mctx.control.state = null;
16
17 function toggleControls(running) {
18   if (running) {
19     $("#experiment-stop").show();
20     $("#pressure-widget").show();
21     $("#start-widget").hide();
22   } else {
23     $("#start-widget").show();
24     $("#experiment-stop").hide();
25     $("#pressure-widget").hide();
26   }
27 }
28
29 function setSampleRate(id, val, result) {
30   var n = Number(val);
31   if (isNaN(n) || n < 0) {
32     result.text("You must give positive numeric values.").addClass("fail");
33     return;
34   }
35   
36   $.ajax({
37     url : mctx.api + 'sensors',
38     data : {id : id, sample_s : n}
39   }).done(function(data) {
40     if (!result.checkStatus(data)) {
41       return;
42     }
43     
44     result.text("Set ok!").removeClass("fail").addClass("pass");
45   });
46 };
47
48 $.fn.loadSensorList = function (result, input) {
49   var select = this;
50   
51   $.ajax({
52     url : mctx.api + 'identify',
53     data : {'sensors' : 1}
54   }).done(function(data) {
55     if (!result.checkStatus(data)) {
56       return;
57     }
58     for (var id in data.sensors) {
59       var option = $("<option/>", {value : id, text : data.sensors[id]});
60       select.append(option);
61     }
62   });
63 }
64
65 $.fn.setStatusUpdater = function () {
66   var result = this;
67   
68   var updater = function () {
69     $.ajax({
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);
76         return;
77       }
78
79       var text;
80       var running = false;
81       var fail = false;
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;
86           running = true;
87         break;
88         case mctx.control.states.pause:
89           text = "Experiment paused - '" + data.control_experiment_name +
90                  "' by " + data.control_user_name;
91           running = true;
92         break;
93         case mctx.control.states.stop:
94           text = "No experiment running.";
95         break;
96         case mctx.control.states.emergency:
97           text = "Emergency mode - '" + data.control_experiment_name +
98                  "' by " + data.control_user_name;
99           running = true;
100           fail = true;
101         default:
102           text = "Unknown mode: " + data.control_state_id;
103           fail = true;
104       }
105       
106       if (data.control_state_id !== mctx.control.state) {      
107         toggleControls(running);
108         $(result).text(text);
109         if (fail) {
110           $(result).parent().addClass("fail");
111         } else {
112           $(result).parent().addClass("pass");
113         }
114         
115         mctx.control.state = data.control_state_id;
116       }
117       
118       setTimeout(updater, 2000);
119     })
120    .fail(function () {
121      $(result).text("Connection failed.").parent().addClass("fail");
122      setTimeout(updater, 4000);
123    });
124   };
125   
126   updater();
127 };
128
129
130 $.fn.startExperiment = function (group, experiment, force, result) {
131  $(group).attr('disabled', 'disabled');
132  
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');
137    return;
138  } 
139  
140  var data = {action : "start", name : experiment};
141  if (force) {
142    data.force = 1;
143  }
144  
145  $.ajax({
146    url : mctx.control.api,
147    data : data
148  }).done(function (data) {
149    if (!result.checkStatus(data)) {
150      return;
151    }
152    result.html("&nbsp;");
153    toggleControls(true);
154  }).always(function () {
155    $(group).removeAttr('disabled');
156  });
157 };
158
159 $.fn.stopExperiment = function (result) {
160   var stop = this;
161   stop.attr('disabled', 'disabled');
162   result.text("Stopping the experiment...");
163   
164   $.ajax({
165     url : mctx.control.api,
166     data : {action : "stop"}
167   }).done(function (data) {
168     if (!result.checkStatus(data)) {
169       return;
170     }
171     result.html("&nbsp;");
172     toggleControls(false);
173   }).always(function () {
174     stop.removeAttr('disabled');
175   });
176 };
177
178 $.fn.setPressure = function(pressure, result) {
179   result.html("&nbsp;");
180   
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");
185       return;
186     }
187     pressure[k] = n;
188   }
189   
190   var set = pressure['set'] + "," + pressure['wait'] + ","
191             pressure['size'] + "," + pressure['count'];
192   $.ajax({
193     url : mctx.api + "actuators",
194     data : {id : mctx.actuator.pressure_regulator, set : set}
195   }).done(function (data) {
196     if (!result.checkStatus(data)) {
197       return;
198     }
199     
200     result.text("Set ok!").removeClass("fail").addClass("pass");
201   });
202 };

UCC git Repository :: git.ucc.asn.au