Somewhat done control page
authorJeremy Tan <[email protected]>
Sat, 19 Oct 2013 14:50:26 +0000 (22:50 +0800)
committerJeremy Tan <[email protected]>
Sat, 19 Oct 2013 14:50:26 +0000 (22:50 +0800)
Todo: Add in values for sensors

One problem is that we don't distinguish between the
whole 'strain' vs 'explode' experiment, and you can
pretty much set the pressure to whatever you like.

That should probably be changed??

Blegh javascript.

testing/MCTXWeb/public_html/control.html
testing/MCTXWeb/public_html/static/mctx.control.js
testing/MCTXWeb/public_html/static/mctx.graph.js
testing/MCTXWeb/public_html/static/mctx.gui.js

index fdd2649..60817cf 100644 (file)
     <script type="text/javascript">
       runBeforeLoad().done(function () {
         $(document).ready(function () {
-          $("#state-exp").initialiseControls();
+          $("form").submit(function () { //Prevent form submit globally
+            return false;
+          })
+          
+          //Set the status updated
+          $("#state-exp").setStatusUpdater();
+          
+          //Set the logic for the start controls
+          $("#start-controls").submit(function () {
+            var start = $("#start-controls input[type='button']");
+            var force = $("#start-controls input[name='start_force']");
+            
+            $(this).startExperiment(start, $("#experiment_name").val(), 
+                      force.is(":checked"), $("#start-result"));
+            force.prop("checked", false);
+          });
+          
+          //Set the logic for the stop button
+          $("#experiment-stop").click(function () {
+            $(this).stopExperiment($("#stop-status"));
+          });
+          
+          //Set the logic for the pressure controls
+          $("#pressure-controls").submit(function () {
+            var pressure = {
+              set : $("#pressure-set").val(),
+              step : $("#pressure-stepsize").val(),
+              wait : $("#pressure-stepwait").val(),
+              count : $("#pressure-stepcount").val()
+            };   
+            $(this).setPressure(pressure, $("#pressure-result"));
+          });
        });       
       }).fail(function () {
         $(document).ready(function () {
                 </td>
               </tr>
             </table>
+            <div id="stop-status">
+              &nbsp;
+            </div>
             
             <div class="sub-title">Error and warning messages</div>
             <textarea id="errorlog" wrap="off" rows="4" cols="30" readonly>
               <p>
                 <label for="experiment_name">Experiment name</label>
                 <input id="experiment_name" type="text">
+                
+                <label for="start_force">Overwrite existing</label>
+                <input type="checkbox" name="start_force" id="start_force">
               </p>
               <p id="start-result">
                 &nbsp;
               </p>
               <p class="centre">
-                <input type="button" name="start_strain" value="Strain test">
-                <input type="button" name="start_strain" value="Explode test">
+                <input type="submit" name="start_strain" value="Strain test">
+                <input type="submit" name="start_explode" value="Explode test">                
               </p>
             </form>
           </div>
index 63932b7..24b0448 100644 (file)
@@ -12,58 +12,155 @@ mctx.control.states = {
   stop : 3,
   emergency : 4
 };
+mctx.control.state = null;
 
-$.fn.initialiseControls = function () {
+function toggleControls(running) {
+  if (running) {
+    $("#experiment-stop").show();
+    $("#pressure-widget").show();
+    $("#start-widget").hide();
+  } else {
+    $("#start-widget").show();
+    $("#experiment-stop").hide();
+    $("#pressure-widget").hide();
+  }
+}
+
+$.fn.setStatusUpdater = function () {
   var result = this;
   
+  var updater = function () {
+    $.ajax({
+      url : mctx.control.api,
+      data : {'action' : 'identify'}
+    }).done(function (data) {
+      if (!result.checkStatus(data)) {
+        $(result).parent().addClass("fail");
+        setTimeout(updater, 4000);
+        return;
+      }
+
+      var text;
+      var running = false;
+      var fail = false;
+      switch (data.control_state_id) {
+        case mctx.control.states.start:
+          text = "Experiment started - '" + data.control_experiment_name +
+                 "' by " + data.control_user_name;
+          running = true;
+        break;
+        case mctx.control.states.pause:
+          text = "Experiment paused - '" + data.control_experiment_name +
+                 "' by " + data.control_user_name;
+          running = true;
+        break;
+        case mctx.control.states.stop:
+          text = "No experiment running.";
+        break;
+        case mctx.control.states.emergency:
+          text = "Emergency mode - '" + data.control_experiment_name +
+                 "' by " + data.control_user_name;
+          running = true;
+          fail = true;
+        default:
+          text = "Unknown mode: " + data.control_state_id;
+          fail = true;
+      }
+      
+      if (data.control_state_id !== mctx.control.state) {      
+        toggleControls(running);
+        $(result).text(text);
+        if (fail) {
+          $(result).parent().addClass("fail");
+        } else {
+          $(result).parent().addClass("pass");
+        }
+        
+        mctx.control.state = data.control_state_id;
+      }
+      
+      setTimeout(updater, 2000);
+    })
+   .fail(function () {
+     $(result).text("Connection failed.").parent().addClass("fail");
+     setTimeout(updater, 4000);
+   });
+  };
+  
+  updater();
+};
+
+
+$.fn.startExperiment = function (group, experiment, force, result) {
+ $(group).attr('disabled', 'disabled');
+ if (!experiment || !experiment.match(/^[a-zA-Z0-9_-]+$/)) {
+   result.text("Experiment names must be composed of alphanumeric characters" + 
+               " or the characters -_-").addClass("fail");
+   $(group).removeAttr('disabled');
+   return;
+ } 
+ var data = {action : "start", name : experiment};
+ if (force) {
+   data.force = 1;
+ }
+ $.ajax({
+   url : mctx.control.api,
+   data : data
+ }).done(function (data) {
+   if (!result.checkStatus(data)) {
+     return;
+   }
+   result.html("&nbsp;");
+   toggleControls(true);
+ }).always(function () {
+   $(group).removeAttr('disabled');
+ });
+};
+
+$.fn.stopExperiment = function (result) {
+  var stop = this;
+  stop.attr('disabled', 'disabled');
+  result.text("Stopping the experiment...");
+  
   $.ajax({
     url : mctx.control.api,
-    data : {'action' : 'identify'}
+    data : {action : "stop"}
   }).done(function (data) {
     if (!result.checkStatus(data)) {
-      $(result).parent().addClass("fail");
       return;
     }
-    
-    var text;
-    var running = false;
-    var fail = false;
-    switch (data.control_state_id) {
-      case mctx.control.states.start:
-        text = "Experiment started - '" + data.control_experiment_name +
-               "' by " + data.control_user_name;
-        running = true;
-      break;
-      case mctx.control.states.pause:
-        text = "Experiment paused - '" + data.control_experiment_name +
-               "' by " + data.control_user_name;
-        running = true;
-      break;
-      case mctx.control.states.stop:
-        text = "No experiment running.";
-      break;
-      case mctx.control.states.emergency:
-        text = "Emergency mode - '" + data.control_experiment_name +
-               "' by " + data.control_user_name;
-        running = true;
-        fail = true;
-      default:
-        text = "Unknown mode: " + data.control_state_id;
-        fail = true;
+    result.html("&nbsp;");
+    toggleControls(false);
+  }).always(function () {
+    stop.removeAttr('disabled');
+  });
+};
+
+$.fn.setPressure = function(pressure, result) {
+  result.html("&nbsp;");
+  
+  for (var k in pressure) {
+    var n = Number(pressure[k]);
+    if (isNaN(n) || n < 0) {
+      result.text("You must give positive numeric values.").addClass("fail");
+      return;
     }
-    
-    if (running) {
-      $("#experiment-stop").show();
-      $("#pressure-widget").show();
-    } else {
-      $("#start-widget").show();
+    pressure[k] = n;
+  }
+  
+  var set = pressure['set'] + "," + pressure['wait'] + ","
+            pressure['size'] + "," + pressure['count'];
+  $.ajax({
+    url : mctx.api + "actuators",
+    data : {id : mctx.actuator.pressure_regulator, set : set}
+  }).done(function (data) {
+    if (!result.checkStatus(data)) {
+      return;
     }
     
-    $(result).text(text);
-    if (fail) {
-      $(result).parent().addClass("fail");
-    } else {
-      $(result).parent().addClass("pass");
-    }
+    result.text("Set ok!").removeClass("fail").addClass("pass");
   });
-};
+};
\ No newline at end of file
index 57c8841..22d14d7 100644 (file)
@@ -156,7 +156,7 @@ function graphUpdater() {
         .done(function(json) {
           //alert("Hi from " + json.name);
           if (!$("#status-text").checkStatus(json)) {
-            setGraphStatus(false, null, true);
+            setGraphStatus(false, null, true); //Don't reset text, checkstatus just set it.
             return;
           }
           
index 3130a18..3df2bac 100644 (file)
@@ -58,6 +58,9 @@ mctx.actuators = {
     3 : {name : "Pressure regulator"}
 };
 
+mctx.actuator = {};
+mctx.actuator.pressure_regulator = 0;
+
 mctx.strain_gauges = {};
 mctx.strain_gauges.ids = [0, 1, 2, 3];
 mctx.strain_gauges.time_limit = 20;
@@ -302,7 +305,7 @@ $.fn.setErrorLog = function () {
 
 $.fn.checkStatus = function(data) {
   if (data.status !== mctx.status.OK) {
-    $(this).text(data.description).addClass("fail");
+    $(this).text(data.description).removeClass("pass").addClass("fail");
     return false;
   }
   return true;

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