added UI to change pin assignments

pull/25/head
Thorsten von Eicken 10 years ago
parent 8b3161a3f4
commit 279da6dcef
  1. 73
      html/home.tpl
  2. 18
      html/style.css
  3. 64
      user/cgipins.c
  4. 8
      user/cgipins.h
  5. 2
      user/user_main.c

@ -5,12 +5,85 @@
</div> </div>
<div class="content"> <div class="content">
<div class="pure-g">
<div class="pure-u-24-24"><div class="card">
<p>The ESP Link bridges the ESP8266 serial port to Wifi and it can <p>The ESP Link bridges the ESP8266 serial port to Wifi and it can
program microcontrollers over the serial port, in particular Arduinos, AVRs, and program microcontrollers over the serial port, in particular Arduinos, AVRs, and
NXP's LPC800-series ARM processors.</p> NXP's LPC800-series ARM processors.</p>
</div></div>
</div>
<div class="pure-g">
<div class="pure-u-12-24"><div class="card">
<h1>Wifi summary</h2>
<div id="wifi-spinner" class="spinner spinner-small"></div>
<table id="wifi-table" class="pure-table pure-table-horizontal" hidden><tbody>
<tr><td>WiFi mode</td><td id="wifi-mode"></td></tr>
<tr><td>Configured network</td><td id="wifi-ssid"></td></tr>
<tr><td>Wifi status</td><td id="wifi-status"></td></tr>
<tr><td>Wifi address</td><td id="wifi-ip"></td></tr>
</tbody> </table>
</div></div>
<div class="pure-u-12-24"><div class="card">
<h1>Pin assignment</h2>
<legend>Select one of the following signal/pin assignments to match your hardware</legend>
<fieldset class='radios' id='pin-mux'>
<div class="spinner spinner-small"></div>
</fieldset>
</div></div>
</div>
</div> </div>
</div> </div>
</div> </div>
<script src="ui.js"></script> <script src="ui.js"></script>
<script type="text/javascript">
var currPin;
// pin={reset:12, isp:13, LED_conn:0, LED_ser:2}
function createInputForPin(pin) {
var input = document.createElement("input");
input.type = "radio";
input.name = "pins";
input.value= pin.value;
input.id = "opt-" + pin.value;
input.onclick = "setPins("+pin.value+", '"+pin.name+"')";
if (currPin == pin.value) input.checked = "1";
var descr = m('<label for="opt-'+pin.value+'"><b>'+pin.name+":</b>"+pin.descr+"</label>");
descr.for = "opt-" + pin.value;
var div = document.createElement("div");
div.appendChild(input);
div.appendChild(descr);
return div;
}
function displayPins(resp) {
var po = $("#pin-mux");
po.innerHTML = "";
currPin = resp.curr;
resp.map.forEach(function(v) {
po.appendChild(createInputForPin(v));
});
}
function fetchPins() {
ajaxJson("GET", "/pins", displayPins, function() {
window.setTimeout(fetchPins, 1000);
});
}
function setPins(v, name) {
ajaxJson("POST", "/pins?value="+v, function() {
showNotification("Pin assignment changed to " + name);
}, function() {
showNotification("Pin assignment change failed");
window.setTimeout(fetchPins, 100);
});
}
window.onload=function(e) {
fetchPins();
//$("#pinform").onsubmit = setPins;
};
</script>
</body></html> </body></html>

@ -21,6 +21,24 @@ body {
#aps label div { #aps label div {
display: inline-block; display: inline-block;
margin: 0em 0.2em; margin: 0em 0.2em;
vertical-align: top;
}
fieldset.radios {
border: none;
padding-left: 0px;
}
fieldset fields {
clear: both;
}
#pin-mux input {
display: block;
margin-top: 0.4em;
float: left;
}
#pin-mux label {
display: block;
margin: 0em 0.2em 0em 2em;
width: 90%;
} }
.pure-table td, .pure-table th { .pure-table td, .pure-table th {

@ -0,0 +1,64 @@
#include <esp8266.h>
#include "cgi.h"
#include "espfs.h"
static char *map_names[] = {
"esp-bridge", "jn-esp-v2", "esp-01"
};
static char* map_func[] = { "reset", "isp", "conn_led", "ser_led" };
static uint8_t map_asn[][4] = {
{ 12, 13, 0, 14 }, // esp-bridge
{ 12, 13, 0, 2 }, // jn-esp-v2
{ 0, 2, 12, 13 }, // esp-01
};
// Cgi to return choice of pin assignments
int ICACHE_FLASH_ATTR cgiPinsGet(HttpdConnData *connData) {
char buff[1024];
int len;
if (connData->conn==NULL) {
return HTTPD_CGI_DONE; // Connection aborted
}
len = os_sprintf(buff, "{ \"curr\":\"esp-bridge\", \"map\": [ ");
for (int i=0; i<sizeof(map_names)/sizeof(char*); i++) {
if (i != 0) buff[len++] = ',';
len += os_sprintf(buff+len, "\n{ \"value\":%d, \"name\":\"%s\"", i, map_names[i]);
for (int f=0; f<sizeof(map_func)/sizeof(char*); f++) {
len += os_sprintf(buff+len, ", \"%s\":%d", map_func[f], map_asn[i][f]);
}
len += os_sprintf(buff+len, ", \"descr\":\"");
for (int f=0; f<sizeof(map_func)/sizeof(char*); f++) {
len += os_sprintf(buff+len, " %s:gpio%d", map_func[f], map_asn[i][f]);
}
len += os_sprintf(buff+len, "\" }");
}
len += os_sprintf(buff+len, "\n] }");
jsonHeader(connData, 200);
httpdSend(connData, buff, len);
return HTTPD_CGI_DONE;
}
// Cgi to change choice of pin assignments
int ICACHE_FLASH_ATTR cgiPinsSet(HttpdConnData *connData) {
if (connData->conn==NULL) {
return HTTPD_CGI_DONE; // Connection aborted
}
jsonHeader(connData, 200);
return HTTPD_CGI_DONE;
}
int ICACHE_FLASH_ATTR cgiPins(HttpdConnData *connData) {
if (connData->requestType == HTTPD_METHOD_GET) {
return cgiPinsGet(connData);
} else if (connData->requestType == HTTPD_METHOD_POST) {
return cgiPinsSet(connData);
} else {
jsonHeader(connData, 404);
return HTTPD_CGI_DONE;
}
}

@ -0,0 +1,8 @@
#ifndef CGIPINS_H
#define CGIPINS_H
#include "httpd.h"
int cgiPins(HttpdConnData *connData);
#endif

@ -15,6 +15,7 @@
#include "httpdespfs.h" #include "httpdespfs.h"
#include "cgi.h" #include "cgi.h"
#include "cgiwifi.h" #include "cgiwifi.h"
#include "cgipins.h"
#include "cgiflash.h" #include "cgiflash.h"
#include "auth.h" #include "auth.h"
#include "espfs.h" #include "espfs.h"
@ -86,6 +87,7 @@ HttpdBuiltInUrl builtInUrls[]={
{"/wifi/connect", cgiWiFiConnect, NULL}, {"/wifi/connect", cgiWiFiConnect, NULL},
{"/wifi/connstatus", cgiWiFiConnStatus, NULL}, {"/wifi/connstatus", cgiWiFiConnStatus, NULL},
{"/wifi/setmode", cgiWiFiSetMode, NULL}, {"/wifi/setmode", cgiWiFiSetMode, NULL},
{"/pins", cgiPins, NULL},
{"*", cgiEspFsHook, NULL}, //Catch-all cgi function for the filesystem {"*", cgiEspFsHook, NULL}, //Catch-all cgi function for the filesystem
{NULL, NULL, NULL} {NULL, NULL, NULL}

Loading…
Cancel
Save