mirror of
https://github.com/jeelabs/esp-link.git
synced 2026-03-25 02:16:53 +01:00
Merge pull request #69 from katyo/master
Sending text to console from web interface
This commit is contained in:
@@ -57,6 +57,7 @@ HttpdBuiltInUrl builtInUrls[] = {
|
||||
{ "/console/reset", ajaxConsoleReset, NULL },
|
||||
{ "/console/baud", ajaxConsoleBaud, NULL },
|
||||
{ "/console/text", ajaxConsole, NULL },
|
||||
{ "/console/send", ajaxConsoleSend, NULL },
|
||||
//Enable the line below to protect the WiFi configuration with an username/password combo.
|
||||
// {"/wifi/*", authBasic, myPassFn},
|
||||
{ "/wifi", cgiRedirect, "/wifi/wifi.html" },
|
||||
|
||||
@@ -13,6 +13,23 @@
|
||||
<span id="baud-btns"></span>
|
||||
</p>
|
||||
<pre class="console" id="console"></pre>
|
||||
<legend>Console entry</legend>
|
||||
<input type="text" id="input-text" value="">
|
||||
<label>History buffer</label>
|
||||
<select id="send-history" size="5" style="width:100%"></select>
|
||||
<p>Type the command and press <b>ENTER</b>.
|
||||
Press <b>ESC</b> to clear the entry.
|
||||
The <b>UP</b>/<b>DOWN</b> arrow keys can be used to get previously sent commands from history.
|
||||
<div class="pure-g">
|
||||
<div class="form-horizontal pure-u-1-2">
|
||||
<input type="checkbox" id="input-add-cr" checked>
|
||||
<label>Append CR (\r)</label>
|
||||
</div>
|
||||
<div class="form-horizontal pure-u-1-2">
|
||||
<input type="checkbox" id="input-add-lf" checked>
|
||||
<label>Append LF (\n)</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -41,6 +58,8 @@
|
||||
function(data) { showRate(data.rate); },
|
||||
function(s, st) { showNotification(st); }
|
||||
);
|
||||
|
||||
consoleSendInit();
|
||||
});
|
||||
</script>
|
||||
</body></html>
|
||||
|
||||
@@ -59,6 +59,92 @@ function baudButton(baud) {
|
||||
});
|
||||
}
|
||||
|
||||
function consoleSendInit() {
|
||||
var sendHistory = $("#send-history");
|
||||
var inputText = $("#input-text");
|
||||
var inputAddCr = $("#input-add-cr");
|
||||
var inputAddLf = $("#input-add-lf");
|
||||
|
||||
function findHistory(text) {
|
||||
for (var i = 0; i < sendHistory.children.length; i++) {
|
||||
if (text == sendHistory.children[i].value) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function loadHistory(idx) {
|
||||
sendHistory.value = sendHistory.children[idx].value;
|
||||
inputText.value = sendHistory.children[idx].value;
|
||||
}
|
||||
|
||||
function navHistory(rel) {
|
||||
var idx = findHistory(sendHistory.value) + rel;
|
||||
if (idx < 0) {
|
||||
idx = sendHistory.children.length - 1;
|
||||
}
|
||||
if (idx >= sendHistory.children.length) {
|
||||
idx = 0;
|
||||
}
|
||||
loadHistory(idx);
|
||||
}
|
||||
|
||||
sendHistory.addEventListener("change", function(e) {
|
||||
inputText.value = sendHistory.value;
|
||||
});
|
||||
|
||||
function pushHistory(text) {
|
||||
var idx = findHistory(text);
|
||||
if (idx !== null) {
|
||||
loadHistory(idx);
|
||||
return false;
|
||||
}
|
||||
var newOption = m('<option>'+
|
||||
(text
|
||||
.replace(/&/g, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"'))
|
||||
+'</option>');
|
||||
newOption.value = text;
|
||||
sendHistory.appendChild(newOption);
|
||||
sendHistory.value = text;
|
||||
for (; sendHistory.children.length > 15; ) {
|
||||
sendHistory.removeChild(sendHistory.children[0]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
inputText.addEventListener("keydown", function(e) {
|
||||
switch (e.keyCode) {
|
||||
case 38: /* the up arrow key pressed */
|
||||
e.preventDefault();
|
||||
navHistory(-1);
|
||||
break;
|
||||
case 40: /* the down arrow key pressed */
|
||||
e.preventDefault();
|
||||
navHistory(+1);
|
||||
break;
|
||||
case 27: /* the escape key pressed */
|
||||
e.preventDefault();
|
||||
inputText.value = "";
|
||||
sendHistory.value = "";
|
||||
break;
|
||||
case 13: /* the enter key pressed */
|
||||
e.preventDefault();
|
||||
var text = inputText.value;
|
||||
if (inputAddCr.checked) text += '\r';
|
||||
if (inputAddLf.checked) text += '\n';
|
||||
ajaxSpin('POST', "/console/send?text=" + encodeURIComponent(text),
|
||||
function(resp) { showNotification("uC sent"); pushHistory(inputText.value); },
|
||||
function(s, st) { showWarning("Error sending text to uC"); }
|
||||
);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//===== Log page
|
||||
|
||||
function showDbgMode(mode) {
|
||||
|
||||
@@ -81,6 +81,23 @@ ajaxConsoleBaud(HttpdConnData *connData) {
|
||||
return HTTPD_CGI_DONE;
|
||||
}
|
||||
|
||||
int ICACHE_FLASH_ATTR
|
||||
ajaxConsoleSend(HttpdConnData *connData) {
|
||||
if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up.
|
||||
char buff[2048];
|
||||
int len, status = 400;
|
||||
|
||||
// figure out where to start in buffer based on URI param
|
||||
len = httpdFindArg(connData->getArgs, "text", buff, sizeof(buff));
|
||||
if (len > 0) {
|
||||
uart0_tx_buffer(buff, len);
|
||||
status = 200;
|
||||
}
|
||||
|
||||
jsonHeader(connData, status);
|
||||
return HTTPD_CGI_DONE;
|
||||
}
|
||||
|
||||
int ICACHE_FLASH_ATTR
|
||||
ajaxConsole(HttpdConnData *connData) {
|
||||
if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up.
|
||||
|
||||
@@ -8,6 +8,7 @@ void ICACHE_FLASH_ATTR console_write_char(char c);
|
||||
int ajaxConsole(HttpdConnData *connData);
|
||||
int ajaxConsoleReset(HttpdConnData *connData);
|
||||
int ajaxConsoleBaud(HttpdConnData *connData);
|
||||
int ajaxConsoleSend(HttpdConnData *connData);
|
||||
int tplConsole(HttpdConnData *connData, char *token, void **arg);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user