2 * MCTX3420 2013 GUI stuff.
6 mctx.api = location.protocol + "//" + location.host + "/api/";
7 mctx.expected_api_version = 0;
9 mctx.has_control = false;
13 "-1" : "General error",
14 "-2" : "Unauthorized",
16 "-4" : "Already exists"
20 0 : {name : "Strain gauge 1"},
21 1 : {name : "Strain gauge 2"},
22 2 : {name : "Strain gauge 3"},
23 3 : {name : "Strain gauge 4"},
24 4 : {name : "Pressure sensor 1"},
25 5 : {name : "Pressure sensor 2"}
29 0 : {name : "Solenoid 1"},
30 1 : {name : "Solenoid 2"},
31 2 : {name : "Solenoid 3"},
32 3 : {name : "Pressure regulator"}
35 mctx.strain_gauges = {};
36 mctx.strain_gauges.ids = [0, 1, 2, 3];
37 mctx.strain_gauges.time_limit = 20;
40 * Writes the current date to wherever it's called.
43 document.write((new Date()).toDateString());
47 * Populates a submenu of the navigation bar
48 * @param {string} header The header
49 * @param {object} items An object representing the submenu items
50 * @param {function} translator A function that translates an object item
51 * into a text and href.
52 * @returns {$.fn} Itself
54 $.fn.populateSubmenu = function(header, items, translator) {
55 var submenuHeader = $("<li/>").append($("<a/>", {text : header, href : "#"}));
56 var submenu = $("<ul/>", {"class" : "submenu"});
58 for (var item in items) {
59 var info = translator(item, items);
60 submenu.append($("<li/>").append(
61 $("<a/>", {text : info.text,
62 href : info.href, target : "_blank"})
66 this.append(submenuHeader.append(submenu));
71 * Populates the navigation bar
73 $.fn.populateNavbar = function () {
74 var menu = $("<ul/>", {"class" : "menu"});
75 var sensorTranslator = function(item, items) {
76 var href = mctx.api + "sensors?start_time=0&format=tsv&id=" + item;
77 return {text : items[item].name, href : href};
79 var actuatorTranslator = function(item, items) {
80 var href = mctx.api + "actuators?start_time=0&format=tsv&id=" + item;
81 return {text : items[item].name, href : href};
84 menu.populateSubmenu("Home", mctx.home, sensorTranslator);
85 menu.populateSubmenu("Setup", mctx.setup, actuatorTranslator);
86 menu.populateSubmenu("Admin", mctx.admin, actuatorTranslator);
87 menu.populateSubmenu("Help", mctx.help, actuatorTranslator);
93 * Sets the camera autoupdater
96 $.fn.setCamera = function () {
97 var url = mctx.api + "image"; //http://beaglebone/api/image
100 //Stop updating if we can't retrieve an image!
101 this.error(function() {
107 var updater = function() {
110 parent.attr("src", "");
114 parent.attr("src", url + "#" + (new Date()).getTime());
116 setTimeout(updater, 1000);
123 $.fn.setStrainGraphs = function () {
124 var sensor_url = mctx.api + "sensors";
127 var updater = function () {
128 var time_limit = mctx.strain_gauges.time_limit;
129 var responses = new Array(mctx.strain_gauges.ids.length);
131 for (var i = 0; i < mctx.strain_gauges.ids.length; i++) {
132 var parameters = {id : i, start_time: -time_limit};
133 responses[i] = $.ajax({url : sensor_url, data : parameters});
136 $.when.apply(this, responses).then(function () {
137 var data = new Array(arguments.length);
138 for (var i = 0; i < arguments.length; i++) {
139 var raw_data = arguments[i][0].data;
140 var pruned_data = [];
141 var step = ~~(raw_data.length/100);
142 for (var j = 0; j < raw_data.length; j += step)
143 pruned_data.push(raw_data[j]);
144 data[i] = pruned_data;
146 $.plot(graphdiv, data);
147 setTimeout(updater, 500);
148 }, function () {alert("It crashed");});
155 $.fn.login = function () {
156 var username = this.find("input[name='username']").val();
157 var password = this.find("input[name='pass']").val();
158 var force = this.find("input[name='force']").is(":checked");
159 var url = mctx.api + "control";
161 var authFunc = function(xhr) {
162 xhr.setRequestHeader("Authorization",
163 "Basic " + base64.encode(username + ":" + password));
168 data : {action : "lock", force : (force ? true : undefined)},
169 beforeSend : authFunc
170 }).done(function (data) {
172 if (data.status < 0) {
173 alert("no - " + data.description);
175 mctx.has_control = true;
176 alert("Login Successful - " + mctx.key);
178 }).fail(function (jqXHR) {
179 mctx.key = undefined;
180 mctx.has_control = false;
181 alert("Login Failed: Please ensure your pheme Username and Password are correct");
185 $.fn.setErrorLog = function () {
186 var url = mctx.api + "errorlog";
189 var updater = function () {
190 $.ajax({url : url}).done(function (data) {
192 setTimeout(updater, 1000);
193 }).fail(function (jqXHR) {
194 outdiv.text("Failed to retrieve the error log.");