From 0c8c9ad976879f7c90f9915a60845ccb0cdb337d Mon Sep 17 00:00:00 2001 From: manuel Date: Wed, 25 Dec 2013 13:25:16 +0100 Subject: initial commit --- htdocs/webiopi.js | 1448 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1448 insertions(+) create mode 100644 htdocs/webiopi.js (limited to 'htdocs/webiopi.js') diff --git a/htdocs/webiopi.js b/htdocs/webiopi.js new file mode 100644 index 0000000..c7eae66 --- /dev/null +++ b/htdocs/webiopi.js @@ -0,0 +1,1448 @@ +/* + Copyright 2012-2013 Eric Ptak - trouch.com + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +var _gaq = _gaq || []; +var _webiopi; + +function w() { + if (_webiopi == undefined) { + _webiopi = new WebIOPi(); + } + + return _webiopi; +} + +function webiopi() { + return w(); +} + +function isMobileUserAgent(a) { + if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) + return true +} + +var _isMobile = undefined; +function isMobile() { + if (_isMobile == undefined) { + _isMobile = ((navigator.userAgent != undefined && isMobileUserAgent(navigator.userAgent)) + || (navigator.vendor != undefined && isMobileUserAgent(navigator.vendor)) + || (window.opera != undefined && isMobileUserAgent(window.opera))) + } + return _isMobile +} + +function WebIOPi() { + this.readyCallback = null; + this.context = "/"; + this.GPIO = Array(54); + this.PINS = Array(27); + + this.TYPE = { + DNC: {value: 0, style: "DNC", label: "--"}, + GND: {value: 1, style: "GND", label: "GROUND"}, + V33: {value: 2, style: "V33", label: "3.3V"}, + V50: {value: 3, style: "V50", label: "5.0V"}, + GPIO: {value: 4, style: "GPIO", label: "GPIO"} + }; + + this.ALT = { + I2C: {name: "I2C", enabled: false, gpios: []}, + SPI: {name: "SPI", enabled: false, gpios: []}, + UART: {name: "UART", enabled: false, gpios: []}, + ONEWIRE: {name: "ONEWIRE", enabled: false, gpios: []} + }; + + // init GPIOs + for (var i=0; i 1)) { + script = scripts[i]; + this.context = res[1]; + + } + } + + var head = document.getElementsByTagName('head')[0]; + + var jquery = document.createElement('script'); + jquery.type = 'text/javascript'; + jquery.src = '/jquery.js'; + if (!isMobile()) { + jquery.onload = function() { + w().init(); + }; + } + head.appendChild(jquery); + + if (isMobile()) { + console.log("load jquery mobile"); + var mobile = document.createElement('script'); + mobile.type = 'text/javascript'; + mobile.src = '/jquery-mobile.js'; + mobile.onload = function() { + w().initMobile() + }; + head.appendChild(mobile); + } + + // GA + _gaq.push(['_setAccount', 'UA-33979593-2']); + _gaq.push(['_trackPageview']); + + var ga = document.createElement('script'); + ga.type = 'text/javascript'; + ga.async = false; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + head.appendChild(ga); + + var style = document.createElement('link'); + style.rel = "stylesheet"; + style.type = 'text/css'; + style.href = '/webiopi.css'; + head.appendChild(style); + + if (isMobile()) { + var style = document.createElement('link'); + style.rel = "stylesheet"; + style.type = 'text/css'; + style.href = '/jquery-mobile.css'; + head.appendChild(style); + } + + // init ALTs + this.addALT(this.ALT.I2C, 0, "SDA"); + this.addALT(this.ALT.I2C, 1, "SCL"); + this.addALT(this.ALT.I2C, 2, "SDA"); + this.addALT(this.ALT.I2C, 3, "SCL"); + + this.addALT(this.ALT.SPI, 7, "CE1"); + this.addALT(this.ALT.SPI, 8, "CE0"); + this.addALT(this.ALT.SPI, 9, "MISO"); + this.addALT(this.ALT.SPI, 10, "MOSI"); + this.addALT(this.ALT.SPI, 11, "SCLK"); + + this.addALT(this.ALT.UART, 14, "TX"); + this.addALT(this.ALT.UART, 15, "RX"); + + this.addALT(this.ALT.ONEWIRE, 4, ""); +} + +WebIOPi.prototype.init = function() { + $.getJSON(w().context + "map", function(data) { + var count = w().PINS.length; + for (i = 0; ic[i]) { +// updated = true; +// } +// } +// if (updated || (n.length > c.length)) { +// var div = $(''); +// $("body").append(div); +// } +// }); + }); +} + +WebIOPi.prototype.digitalRead = function (gpio, callback) { + if (callback != undefined) { + $.get(w().context + 'GPIO/' + gpio + "/value", function(data) { + w().updateValue(gpio, data); + callback(gpio, data); + }); + } + return w().GPIO[gpio].value; +} + +WebIOPi.prototype.digitalWrite = function (gpio, value, callback) { + if (w().GPIO[gpio].func.toUpperCase()=="OUT") { + $.post(w().context + 'GPIO/' + gpio + "/value/" + value, function(data) { + w().updateValue(gpio, data); + if (callback != undefined) { + callback(gpio, data); + } + }); + } + else { + //console.log(w().GPIO[gpio].func); + } +} + +WebIOPi.prototype.getFunction = function (gpio, callback) { + if (callback != undefined) { + $.get(w().context + 'GPIO/' + gpio + "/function", function(data) { + w().updateFunction(gpio, data); + callback(gpio, data); + }); + } + return w().GPIO[gpio].func; +} +WebIOPi.prototype.setFunction = function (gpio, func, callback) { + $.post(w().context + 'GPIO/' + gpio + "/function/" + func, function(data) { + w().updateFunction(gpio, data); + if (callback != undefined) { + callback(gpio, data); + } + }); +} + +WebIOPi.prototype.toggleValue = function (gpio) { + var value = (w().GPIO[gpio].value == 1) ? 0 : 1; + w().digitalWrite(gpio, value); +} + +WebIOPi.prototype.toggleFunction = function (gpio) { + var value = (w().GPIO[gpio].func == "IN") ? "OUT" : "IN"; + w().setFunction(gpio, value) +} + +WebIOPi.prototype.outputSequence = function (gpio, period, sequence, callback) { + $.post(w().context + 'GPIO/' + gpio + "/sequence/" + period + "," + sequence, function(data) { + w().updateValue(gpio, data); + if (callback != undefined) { + callback(gpio, data); + } + }); +} + +WebIOPi.prototype.callMacro = function (macro, args, callback) { + if (args == undefined) { + args = ""; + } + $.post(w().context + 'macros/' + macro + "/" + args, function(data) { + if (callback != undefined) { + callback(macro, args, data); + } + }); +} + +WebIOPi.prototype.enablePWM = function(gpio, callback) { + $.post(w().context + 'GPIO/' + gpio + "/pwm/enable", function(data) { + if (callback != undefined) { + callback(gpio, data); + } + }); +} + +WebIOPi.prototype.disablePWM = function(gpio, callback) { + $.post(w().context + 'GPIO/' + gpio + "/pwm/disable", function(data) { + if (callback != undefined) { + callback(gpio, data); + } + }); +} + +WebIOPi.prototype.pulse = function(gpio, callback) { + $.post(w().context + 'GPIO/' + gpio + "/pulse/", function(data) { + if (callback != undefined) { + callback(gpio, data); + } + }); +} + +WebIOPi.prototype.pulseRatio = function(gpio, ratio, callback) { + $.post(w().context + 'GPIO/' + gpio + "/pulseRatio/" + ratio, function(data) { + if (callback != undefined) { + callback(gpio, data); + } + }); +} + +WebIOPi.prototype.pulseAngle = function(gpio, angle, callback) { + $.post(w().context + 'GPIO/' + gpio + "/pulseAngle/" + angle, function(data) { + if (callback != undefined) { + callback(gpio, data); + } + }); +} + +WebIOPi.prototype.setLabel = function (id, label) { + $("#" + id).val(label); + $("#" + id).text(label); +} + +WebIOPi.prototype.setClass = function (id, cssClass) { + $("#" + id).attr("class", cssClass); +} + +WebIOPi.prototype.createButton = function (id, label, callback, callbackUp) { + var button = $('