diff --git a/Makefile b/Makefile
index 523f85f..fb58cb1 100644
--- a/Makefile
+++ b/Makefile
@@ -46,7 +46,7 @@
CHANGE_TO_STA ?= yes
# hostname or IP address for wifi flashing
-ESP_HOSTNAME ?= esp-link
+ESP_HOSTNAME ?= esp-link
# --------------- toolchain configuration ---------------
@@ -57,7 +57,7 @@ XTENSA_TOOLS_ROOT ?= $(abspath ../esp-open-sdk/xtensa-lx106-elf/bin)/
# Firmware version
# WARNING: if you change this expect to make code adjustments elsewhere, don't expect
# that esp-link will magically work with a different version of the SDK!!!
-SDK_VERS ?= esp_iot_sdk_v1.5.2
+SDK_VERS ?= esp_iot_sdk_v1.5.4
# Try to find the firmware manually extracted, e.g. after downloading from Espressif's BBS,
# http://bbs.espressif.com/viewforum.php?f=46
@@ -101,7 +101,7 @@ LED_SERIAL_PIN ?= 14
# --------------- esp-link modules config options ---------------
# Optional Modules mqtt
-MODULES ?= mqtt rest syslog
+MODULES ?= mqtt rest #syslog
# --------------- esphttpd config options ---------------
diff --git a/esp-link.vcxproj b/esp-link.vcxproj
index 4a1ef3a..1596844 100644
--- a/esp-link.vcxproj
+++ b/esp-link.vcxproj
@@ -1,4 +1,4 @@
-
+
@@ -72,6 +72,7 @@
+
@@ -110,8 +111,14 @@
+
+
+
+
+
+
@@ -121,6 +128,7 @@
+
{A92F0CAA-F89B-4F78-AD2A-A042429BD87F}
@@ -140,7 +148,7 @@
__ets__;_STDINT_H;ICACHE_FLASH;__MINGW32__;__WIN32__;MQTT;REST;SYSLOG;FIRMWARE_SIZE
- .\syslog;.\rest;.\esp-link;.\mqtt;.\cmd;.\serial;.\user;.\espfs;.\httpd;.\include;..\esp_iot_sdk_v1.5.0\include;..\xtensa-lx106-elf\xtensa-lx106-elf\include;c:\tools\mingw64\x86_64-w64-mingw32\include;c:\tools\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.3\include
+ .\syslog;.\rest;.\esp-link;.\mqtt;.\cmd;.\serial;.\user;.\espfs;.\httpd;.\include;..\esp_iot_sdk_v1.5.2\include;..\xtensa-lx106-elf\xtensa-lx106-elf\include;c:\tools\mingw64\x86_64-w64-mingw32\include;c:\tools\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.3\include
@@ -168,4 +176,4 @@
-
\ No newline at end of file
+
diff --git a/esp-link/cgimqtt.c b/esp-link/cgimqtt.c
index 88aa6ed..9e71b1a 100644
--- a/esp-link/cgimqtt.c
+++ b/esp-link/cgimqtt.c
@@ -95,11 +95,11 @@ int ICACHE_FLASH_ATTR cgiMqttSet(HttpdConnData *connData) {
if (mqtt_server < 0) return HTTPD_CGI_DONE;
mqtt_server |= getBoolArg(connData, "mqtt-clean-session",
- &flashConfig.mqtt_clean_session);
+ (bool *)&flashConfig.mqtt_clean_session);
if (mqtt_server < 0) return HTTPD_CGI_DONE;
int8_t mqtt_en_chg = getBoolArg(connData, "mqtt-enable",
- &flashConfig.mqtt_enable);
+ (bool *)&flashConfig.mqtt_enable);
char buff[16];
@@ -134,7 +134,7 @@ int ICACHE_FLASH_ATTR cgiMqttSet(HttpdConnData *connData) {
mqtt_client_init();
// if just enable changed we just need to bounce the client
- }
+ }
else if (mqtt_en_chg > 0) {
DBG("MQTT server enable=%d changed\n", flashConfig.mqtt_enable);
if (flashConfig.mqtt_enable && strlen(flashConfig.mqtt_host) > 0)
@@ -145,16 +145,16 @@ int ICACHE_FLASH_ATTR cgiMqttSet(HttpdConnData *connData) {
// no action required if mqtt status settings change, they just get picked up at the
// next status tick
- if (getBoolArg(connData, "mqtt-status-enable", &flashConfig.mqtt_status_enable) < 0)
+ if (getBoolArg(connData, "mqtt-status-enable", (bool *)&flashConfig.mqtt_status_enable) < 0)
return HTTPD_CGI_DONE;
if (getStringArg(connData, "mqtt-status-topic",
flashConfig.mqtt_status_topic, sizeof(flashConfig.mqtt_status_topic)) < 0)
return HTTPD_CGI_DONE;
// if SLIP-enable is toggled it gets picked-up immediately by the parser
- int slip_update = getBoolArg(connData, "slip-enable", &flashConfig.slip_enable);
+ int slip_update = getBoolArg(connData, "slip-enable", (bool *)&flashConfig.slip_enable);
if (slip_update < 0) return HTTPD_CGI_DONE;
- if (slip_update > 0)
+ if (slip_update > 0)
DBG("SLIP-enable changed: %d\n", flashConfig.slip_enable);
DBG("Saving config\n");
diff --git a/esp-link/cgiservices.c b/esp-link/cgiservices.c
index cac9313..d46e904 100644
--- a/esp-link/cgiservices.c
+++ b/esp-link/cgiservices.c
@@ -3,9 +3,11 @@
#include "cgiwifi.h"
#include "cgi.h"
#include "config.h"
-#include "syslog.h"
#include "sntp.h"
#include "cgimqtt.h"
+#ifdef SYSLOG
+#include "syslog.h"
+#endif
#ifdef CGISERVICES_DBG
#define DBG(format, ...) do { os_printf(format, ## __VA_ARGS__); } while(0)
@@ -110,21 +112,25 @@ int ICACHE_FLASH_ATTR cgiServicesInfo(HttpdConnData *connData) {
os_sprintf(buff,
"{ "
+#ifdef SYSLOG
"\"syslog_host\": \"%s\", "
"\"syslog_minheap\": %d, "
"\"syslog_filter\": %d, "
"\"syslog_showtick\": \"%s\", "
"\"syslog_showdate\": \"%s\", "
+#endif
"\"timezone_offset\": %d, "
"\"sntp_server\": \"%s\", "
"\"mdns_enable\": \"%s\", "
"\"mdns_servername\": \"%s\""
" }",
+#ifdef SYSLOG
flashConfig.syslog_host,
flashConfig.syslog_minheap,
flashConfig.syslog_filter,
flashConfig.syslog_showtick ? "enabled" : "disabled",
flashConfig.syslog_showdate ? "enabled" : "disabled",
+#endif
flashConfig.timezone_offset,
flashConfig.sntp_server,
flashConfig.mdns_enable ? "enabled" : "disabled",
@@ -147,14 +153,16 @@ int ICACHE_FLASH_ATTR cgiServicesSet(HttpdConnData *connData) {
if (syslog < 0) return HTTPD_CGI_DONE;
syslog |= getUInt8Arg(connData, "syslog_filter", &flashConfig.syslog_filter);
if (syslog < 0) return HTTPD_CGI_DONE;
- syslog |= getBoolArg(connData, "syslog_showtick", &flashConfig.syslog_showtick);
+ syslog |= getBoolArg(connData, "syslog_showtick", (bool *)&flashConfig.syslog_showtick);
if (syslog < 0) return HTTPD_CGI_DONE;
- syslog |= getBoolArg(connData, "syslog_showdate", &flashConfig.syslog_showdate);
+ syslog |= getBoolArg(connData, "syslog_showdate", (bool *)&flashConfig.syslog_showdate);
if (syslog < 0) return HTTPD_CGI_DONE;
+#ifdef SYSLOG
if (syslog > 0) {
syslog_init(flashConfig.syslog_host);
}
+#endif
int8_t sntp = 0;
sntp |= getInt8Arg(connData, "timezone_offset", &flashConfig.timezone_offset);
@@ -167,7 +175,7 @@ int ICACHE_FLASH_ATTR cgiServicesSet(HttpdConnData *connData) {
}
int8_t mdns = 0;
- mdns |= getBoolArg(connData, "mdns_enable", &flashConfig.mdns_enable);
+ mdns |= getBoolArg(connData, "mdns_enable", (bool *)&flashConfig.mdns_enable);
if (mdns < 0) return HTTPD_CGI_DONE;
if (mdns > 0) {
diff --git a/esp-link/cgiwifi.c b/esp-link/cgiwifi.c
index 6ccbaef..8734bd6 100644
--- a/esp-link/cgiwifi.c
+++ b/esp-link/cgiwifi.c
@@ -851,6 +851,8 @@ void ICACHE_FLASH_ATTR wifiInit() {
os_strncpy((char*)stconf.ssid, VERS_STR(STA_SSID), 32);
os_strncpy((char*)stconf.password, VERS_STR(STA_PASS), 64);
+ wifi_set_opmode(3);
+
DBG("Wifi pre-config trying to connect to AP %s pw %s\n",(char*)stconf.ssid, (char*)stconf.password);
// wifi_set_phy_mode(2); // limit to 802.11b/g 'cause n is flaky
diff --git a/esp-link/main.c b/esp-link/main.c
index 5c9197d..8a73b5a 100644
--- a/esp-link/main.c
+++ b/esp-link/main.c
@@ -29,13 +29,19 @@
#include "config.h"
#include "log.h"
#include "gpio.h"
-#include "syslog.h"
#include "cgiservices.h"
-#define NOTICE(format, ...) do { \
- LOG_NOTICE(format, ## __VA_ARGS__ ); \
- os_printf(format "\n", ## __VA_ARGS__); \
+#ifdef SYSLOG
+#include "syslog.h"
+#define NOTICE(format, ...) do { \
+ LOG_NOTICE(format, ## __VA_ARGS__ ); \
+ os_printf(format "\n", ## __VA_ARGS__); \
} while ( 0 )
+#else
+#define NOTICE(format, ...) do { \
+ os_printf(format "\n", ## __VA_ARGS__); \
+} while ( 0 )
+#endif
/*
This is the main url->function dispatching data struct.
diff --git a/html/console.js b/html/console.js
index 58398ad..a1eba8f 100644
--- a/html/console.js
+++ b/html/console.js
@@ -31,7 +31,11 @@ function updateText(resp) {
if (resp.start > el.textEnd) {
el.innerHTML = el.innerHTML.concat("\r\n/g, '>')
+ .replace(/"/g, '"'));
el.textEnd = resp.start + resp.len;
delay = 500;
diff --git a/html/services.js b/html/services.js
index 17075ff..3f16975 100644
--- a/html/services.js
+++ b/html/services.js
@@ -51,7 +51,12 @@ function displayServices(data) {
$("#sntp-spinner").setAttribute("hidden", "");
$("#mdns-spinner").setAttribute("hidden", "");
- $("#Syslog-form").removeAttribute("hidden");
+ if (data.syslog_host !== undefined) {
+ $("#Syslog-form").removeAttribute("hidden");
+ } else {
+ # syslog disabled...
+ $("#Syslog-form").parentNode.setAttribute("hidden", "");
+ }
$("#SNTP-form").removeAttribute("hidden");
$("#mDNS-form").removeAttribute("hidden");
diff --git a/httpd/httpd.c b/httpd/httpd.c
index 5590809..f3c5594 100644
--- a/httpd/httpd.c
+++ b/httpd/httpd.c
@@ -44,6 +44,7 @@ struct HttpdPriv {
char *sendBuff; // output buffer
short headPos; // offset into header
short sendBuffLen; // offset into output buffer
+ short sendBuffMax; // size of output buffer
short code; // http response code (only for logging)
};
@@ -226,6 +227,13 @@ int ICACHE_FLASH_ATTR httpdGetHeader(HttpdConnData *conn, char *header, char *re
return 0;
}
+//Setup an output buffer
+void ICACHE_FLASH_ATTR httpdSetOutputBuffer(HttpdConnData *conn, char *buff, short max) {
+ conn->priv->sendBuff = buff;
+ conn->priv->sendBuffLen = 0;
+ conn->priv->sendBuffMax = max;
+}
+
//Start the response headers.
void ICACHE_FLASH_ATTR httpdStartResponse(HttpdConnData *conn, int code) {
char buff[128];
@@ -277,9 +285,9 @@ int ICACHE_FLASH_ATTR cgiRedirect(HttpdConnData *connData) {
//Returns 1 for success, 0 for out-of-memory.
int ICACHE_FLASH_ATTR httpdSend(HttpdConnData *conn, const char *data, int len) {
if (len<0) len = strlen(data);
- if (conn->priv->sendBuffLen + len>MAX_SENDBUFF_LEN) {
+ if (conn->priv->sendBuffLen + len>conn->priv->sendBuffMax) {
DBG("%sERROR! httpdSend full (%d of %d)\n",
- connStr, conn->priv->sendBuffLen, MAX_SENDBUFF_LEN);
+ connStr, conn->priv->sendBuffLen, conn->priv->sendBuffMax);
return 0;
}
os_memcpy(conn->priv->sendBuff + conn->priv->sendBuffLen, data, len);
@@ -288,7 +296,7 @@ int ICACHE_FLASH_ATTR httpdSend(HttpdConnData *conn, const char *data, int len)
}
//Helper function to send any data in conn->priv->sendBuff
-static void ICACHE_FLASH_ATTR xmitSendBuff(HttpdConnData *conn) {
+void ICACHE_FLASH_ATTR httpdFlush(HttpdConnData *conn) {
if (conn->priv->sendBuffLen != 0) {
sint8 status = espconn_sent(conn->conn, (uint8_t*)conn->priv->sendBuff, conn->priv->sendBuffLen);
if (status != 0) {
@@ -307,13 +315,12 @@ static void ICACHE_FLASH_ATTR httpdSentCb(void *arg) {
if (conn == NULL) return; // aborted connection
char sendBuff[MAX_SENDBUFF_LEN];
- conn->priv->sendBuff = sendBuff;
- conn->priv->sendBuffLen = 0;
+ httpdSetOutputBuffer(conn, sendBuff, sizeof(sendBuff));
if (conn->cgi == NULL) { //Marked for destruction?
//os_printf("Closing 0x%p/0x%p->0x%p\n", arg, conn->conn, conn);
espconn_disconnect(conn->conn); // we will get a disconnect callback
- return; //No need to call xmitSendBuff.
+ return; //No need to call httpdFlush.
}
int r = conn->cgi(conn); //Execute cgi fn.
@@ -324,7 +331,7 @@ static void ICACHE_FLASH_ATTR httpdSentCb(void *arg) {
DBG("%sERROR! Bad CGI code %d\n", connStr, r);
conn->cgi = NULL; //mark for destruction.
}
- xmitSendBuff(conn);
+ httpdFlush(conn);
}
static const char *httpNotFoundHeader = "HTTP/1.0 404 Not Found\r\nConnection: close\r\n"
@@ -366,7 +373,7 @@ static void ICACHE_FLASH_ATTR httpdProcessRequest(HttpdConnData *conn) {
//generate a built-in 404 to handle this.
DBG("%s%s not found. 404!\n", connStr, conn->url);
httpdSend(conn, httpNotFoundHeader, -1);
- xmitSendBuff(conn);
+ httpdFlush(conn);
conn->cgi = NULL; //mark for destruction.
if (conn->post) conn->post->len = 0; // skip any remaining receives
return;
@@ -378,12 +385,12 @@ static void ICACHE_FLASH_ATTR httpdProcessRequest(HttpdConnData *conn) {
r = conn->cgi(conn);
if (r == HTTPD_CGI_MORE) {
//Yep, it's happy to do so and has more data to send.
- xmitSendBuff(conn);
+ httpdFlush(conn);
return;
}
else if (r == HTTPD_CGI_DONE) {
//Yep, it's happy to do so and already is done sending data.
- xmitSendBuff(conn);
+ httpdFlush(conn);
conn->cgi = NULL; //mark for destruction.
if (conn->post) conn->post->len = 0; // skip any remaining receives
return;
@@ -485,8 +492,7 @@ static void ICACHE_FLASH_ATTR httpdRecvCb(void *arg, char *data, unsigned short
if (conn == NULL) return; // aborted connection
char sendBuff[MAX_SENDBUFF_LEN];
- conn->priv->sendBuff = sendBuff;
- conn->priv->sendBuffLen = 0;
+ httpdSetOutputBuffer(conn, sendBuff, sizeof(sendBuff));
//This is slightly evil/dirty: we abuse conn->post->len as a state variable for where in the http communications we are:
//<0 (-1): Post len unknown because we're still receiving headers
diff --git a/httpd/httpd.h b/httpd/httpd.h
index cca6f32..33a0700 100644
--- a/httpd/httpd.h
+++ b/httpd/httpd.h
@@ -59,10 +59,12 @@ int httpdUrlDecode(char *val, int valLen, char *ret, int retLen);
int ICACHE_FLASH_ATTR httpdFindArg(char *line, char *arg, char *buff, int buffLen);
void ICACHE_FLASH_ATTR httpdInit(HttpdBuiltInUrl *fixedUrls, int port);
const char *httpdGetMimetype(char *url);
+void ICACHE_FLASH_ATTR httpdSetOutputBuffer(HttpdConnData *conn, char *buff, short max);
void ICACHE_FLASH_ATTR httpdStartResponse(HttpdConnData *conn, int code);
void ICACHE_FLASH_ATTR httpdHeader(HttpdConnData *conn, const char *field, const char *val);
void ICACHE_FLASH_ATTR httpdEndHeaders(HttpdConnData *conn);
int ICACHE_FLASH_ATTR httpdGetHeader(HttpdConnData *conn, char *header, char *ret, int retLen);
int ICACHE_FLASH_ATTR httpdSend(HttpdConnData *conn, const char *data, int len);
+void ICACHE_FLASH_ATTR httpdFlush(HttpdConnData *conn);
#endif
diff --git a/serial/serbridge.c b/serial/serbridge.c
index 80357f5..59f65c5 100644
--- a/serial/serbridge.c
+++ b/serial/serbridge.c
@@ -10,7 +10,11 @@
#include "console.h"
#include "slip.h"
#include "cmd.h"
+#ifdef SYSLOG
#include "syslog.h"
+#else
+#define syslog(X1...)
+#endif
#define SKIP_AT_RESET