Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e125aec459 | ||
|
|
ee61b38026 | ||
|
|
7e4d25272a
|
||
|
|
d3130c43da
|
||
|
|
70020581fd
|
||
|
|
8cc9ae8df4
|
||
|
|
6971fe2036
|
||
|
|
9f97d5c9d1
|
+1
-1
@@ -16,7 +16,7 @@ esphttpdconfig.mk
|
|||||||
|
|
||||||
# Garbage added by CLion
|
# Garbage added by CLion
|
||||||
.idea/
|
.idea/
|
||||||
cmake-build-debug/
|
cmake-build-debug*/
|
||||||
.sass-cache
|
.sass-cache
|
||||||
|
|
||||||
*.map
|
*.map
|
||||||
|
|||||||
+1
-1
Submodule front-end updated: e25523de11...9aae724df2
+2
-2
@@ -18,8 +18,8 @@ if [ -z ${ESPTOOL} ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -z ESPPORT ] && ESPPORT=/dev/ttyUSB0
|
[ -z ${ESPPORT} ] && ESPPORT=/dev/ttyUSB0
|
||||||
[ -z ESPBAUD ] && ESPBAUD=460800
|
[ -z ${ESPBAUD} ] && ESPBAUD=460800
|
||||||
|
|
||||||
set -x
|
set -x
|
||||||
${ESPTOOL} --port ${ESPPORT} --baud ${ESPBAUD} \
|
${ESPTOOL} --port ${ESPPORT} --baud ${ESPBAUD} \
|
||||||
|
|||||||
@@ -11,5 +11,6 @@
|
|||||||
#define API_REBOOT "/api/v1/reboot"
|
#define API_REBOOT "/api/v1/reboot"
|
||||||
#define API_PING "/api/v1/ping"
|
#define API_PING "/api/v1/ping"
|
||||||
#define API_CLEAR "/api/v1/clear"
|
#define API_CLEAR "/api/v1/clear"
|
||||||
|
#define API_GPIO "/api/v1/gpio"
|
||||||
|
|
||||||
#endif //ESPTERM_API_H
|
#endif //ESPTERM_API_H
|
||||||
|
|||||||
+1
-1
@@ -178,7 +178,7 @@ d2d_parse_command(char *msg)
|
|||||||
else if (strstarts(msg, "H;")) {
|
else if (strstarts(msg, "H;")) {
|
||||||
if (request_pending) return false;
|
if (request_pending) return false;
|
||||||
|
|
||||||
// Send a esp-esp message
|
// Send a HTTP request
|
||||||
msg += 2;
|
msg += 2;
|
||||||
const char *method = NULL;
|
const char *method = NULL;
|
||||||
const char *params = NULL;
|
const char *params = NULL;
|
||||||
|
|||||||
+177
-24
@@ -10,7 +10,8 @@
|
|||||||
#include "cgi_logging.h"
|
#include "cgi_logging.h"
|
||||||
|
|
||||||
#define SET_REDIR_SUC "/cfg/system"
|
#define SET_REDIR_SUC "/cfg/system"
|
||||||
#define SET_REDIR_ERR SET_REDIR_SUC"?err="
|
|
||||||
|
void buildInputsJson(char *buff);
|
||||||
|
|
||||||
static ETSTimer tmr;
|
static ETSTimer tmr;
|
||||||
|
|
||||||
@@ -82,7 +83,18 @@ cgiSystemCfgSetParams(HttpdConnData *connData)
|
|||||||
char redir_url_buf[100];
|
char redir_url_buf[100];
|
||||||
|
|
||||||
char *redir_url = redir_url_buf;
|
char *redir_url = redir_url_buf;
|
||||||
redir_url += sprintf(redir_url, SET_REDIR_ERR);
|
|
||||||
|
if (GET_ARG("redir")) {
|
||||||
|
strncpy(redir_url, buff, 40);
|
||||||
|
u32 len = strlen(buff);
|
||||||
|
if (len > 40) len = 40;
|
||||||
|
redir_url += len;
|
||||||
|
} else {
|
||||||
|
redir_url += sprintf(redir_url, SET_REDIR_SUC);
|
||||||
|
}
|
||||||
|
char *end_of_redir_url = redir_url;
|
||||||
|
redir_url += sprintf(redir_url, "?err=");
|
||||||
|
char *end_of_failed_redir_url = redir_url;
|
||||||
// we'll test if anything was printed by looking for \0 in failed_keys_buf
|
// we'll test if anything was printed by looking for \0 in failed_keys_buf
|
||||||
|
|
||||||
if (connData->conn == NULL) {
|
if (connData->conn == NULL) {
|
||||||
@@ -174,14 +186,16 @@ cgiSystemCfgSetParams(HttpdConnData *connData)
|
|||||||
(void)redir_url;
|
(void)redir_url;
|
||||||
(void)uart_changed; // unused
|
(void)uart_changed; // unused
|
||||||
|
|
||||||
if (redir_url_buf[strlen(SET_REDIR_ERR)] == 0) {
|
if (*end_of_failed_redir_url == '\0') {
|
||||||
// All was OK
|
// All was OK
|
||||||
cgi_info("Set system params - success, saving...");
|
cgi_info("Set system params - success, saving...");
|
||||||
|
|
||||||
sysconf_apply_settings();
|
sysconf_apply_settings();
|
||||||
persist_store();
|
persist_store();
|
||||||
|
|
||||||
httpdRedirect(connData, SET_REDIR_SUC "?msg=Settings%20saved%20and%20applied.");
|
strcpy(end_of_redir_url, "?msg=Settings%20saved%20and%20applied.");
|
||||||
|
|
||||||
|
httpdRedirect(connData, redir_url_buf);
|
||||||
} else {
|
} else {
|
||||||
cgi_warn("Some settings did not validate, asking for correction");
|
cgi_warn("Some settings did not validate, asking for correction");
|
||||||
|
|
||||||
@@ -198,6 +212,40 @@ cgiSystemCfgSetParams(HttpdConnData *connData)
|
|||||||
return HTTPD_CGI_DONE;
|
return HTTPD_CGI_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void tplSystemCfgFill(char *token, char *buff)
|
||||||
|
{
|
||||||
|
buff[0] = '\0';
|
||||||
|
|
||||||
|
const bool admin = false;
|
||||||
|
const bool tpl=true;
|
||||||
|
|
||||||
|
#define XSTRUCT sysconf
|
||||||
|
#define X XGET_CGI_FUNC_RETURN
|
||||||
|
XTABLE_SYSCONF
|
||||||
|
#undef X
|
||||||
|
#undef XSTRUCT
|
||||||
|
|
||||||
|
if (streq(token, "def_access_name")) {
|
||||||
|
sprintf(buff, "%s", DEF_ACCESS_NAME);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (streq(token, "def_access_pw")) {
|
||||||
|
sprintf(buff, "%s", DEF_ACCESS_PW);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (streq(token, "def_admin_pw")) {
|
||||||
|
sprintf(buff, "%s", DEFAULT_ADMIN_PW);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (streq(token, "gpio_initial")) {
|
||||||
|
buildInputsJson(buff);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
httpd_cgi_state ICACHE_FLASH_ATTR
|
httpd_cgi_state ICACHE_FLASH_ATTR
|
||||||
tplSystemCfg(HttpdConnData *connData, char *token, void **arg)
|
tplSystemCfg(HttpdConnData *connData, char *token, void **arg)
|
||||||
@@ -210,27 +258,132 @@ tplSystemCfg(HttpdConnData *connData, char *token, void **arg)
|
|||||||
return HTTPD_CGI_DONE;
|
return HTTPD_CGI_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(buff, ""); // fallback
|
tplSystemCfgFill(token, buff);
|
||||||
|
|
||||||
const bool admin = false;
|
|
||||||
const bool tpl=true;
|
|
||||||
|
|
||||||
#define XSTRUCT sysconf
|
|
||||||
#define X XGET_CGI_FUNC
|
|
||||||
XTABLE_SYSCONF
|
|
||||||
#undef X
|
|
||||||
#undef XSTRUCT
|
|
||||||
|
|
||||||
if (streq(token, "def_access_name")) {
|
|
||||||
sprintf(buff, "%s", DEF_ACCESS_NAME);
|
|
||||||
}
|
|
||||||
else if (streq(token, "def_access_pw")) {
|
|
||||||
sprintf(buff, "%s", DEF_ACCESS_PW);
|
|
||||||
}
|
|
||||||
else if (streq(token, "def_admin_pw")) {
|
|
||||||
sprintf(buff, "%s", DEFAULT_ADMIN_PW);
|
|
||||||
}
|
|
||||||
|
|
||||||
tplSend(connData, buff, -1);
|
tplSend(connData, buff, -1);
|
||||||
return HTTPD_CGI_DONE;
|
return HTTPD_CGI_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static ETSTimer tmrPulse;
|
||||||
|
|
||||||
|
static void ICACHE_FLASH_ATTR tmrPulseCb(void *arg)
|
||||||
|
{
|
||||||
|
u32 mask = sysconf->gpio2_conf==GPIOCONF_OFF ? 0x30 : 0x34;
|
||||||
|
u32 argu = (u32) arg;
|
||||||
|
u32 set_on = argu & mask;
|
||||||
|
u32 set_off = (argu >> 16) & mask;
|
||||||
|
gpio_output_set(set_off, set_on, 0, 0); // the args are swapped here to achieve the opposite
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ICACHE_FLASH_ATTR
|
||||||
|
buildInputsJson(char *buff)
|
||||||
|
{
|
||||||
|
u32 inputs = gpio_input_get();
|
||||||
|
|
||||||
|
sprintf(buff, "{\"io2\":%d,\"io4\":%d,\"io5\":%d}",
|
||||||
|
((inputs&(1<<2)) != 0),
|
||||||
|
((inputs&(1<<4)) != 0),
|
||||||
|
((inputs&(1<<5)) != 0)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API to set GPIOs
|
||||||
|
*
|
||||||
|
* @param connData
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
httpd_cgi_state ICACHE_FLASH_ATTR cgiGPIO(HttpdConnData *connData)
|
||||||
|
{
|
||||||
|
char buff[32];
|
||||||
|
|
||||||
|
if (connData->conn==NULL) {
|
||||||
|
//Connection aborted. Clean up.
|
||||||
|
return HTTPD_CGI_DONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool set = 0;
|
||||||
|
u32 inputs = gpio_input_get();
|
||||||
|
|
||||||
|
// args are do2, do4, do5, pulse. Values: 0 - off, 1 - on, t - toggle. pulse is in ms
|
||||||
|
|
||||||
|
s8 set_d2 = -1, set_d4 = -1, set_d5 = -1;
|
||||||
|
|
||||||
|
if (sysconf->gpio2_conf == GPIOCONF_OUT_START_0 || sysconf->gpio2_conf == GPIOCONF_OUT_START_1) {
|
||||||
|
if (GET_ARG("do2")) {
|
||||||
|
if (buff[0] == 't') {
|
||||||
|
set = ((inputs & (1<<2)) == 0);
|
||||||
|
} else {
|
||||||
|
set = buff[0] == '1';
|
||||||
|
}
|
||||||
|
set_d2 = set;
|
||||||
|
gpio_output_set((uint32) (set << 2), (uint32) ((!set) << 2), 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sysconf->gpio4_conf == GPIOCONF_OUT_START_0 || sysconf->gpio4_conf == GPIOCONF_OUT_START_1) {
|
||||||
|
if (GET_ARG("do4")) {
|
||||||
|
if (buff[0] == 't') {
|
||||||
|
set = ((inputs & (1<<4)) == 0);
|
||||||
|
} else {
|
||||||
|
set = buff[0] == '1';
|
||||||
|
}
|
||||||
|
set_d4 = set;
|
||||||
|
gpio_output_set((uint32) (set << 4), (uint32) ((!set) << 4), 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sysconf->gpio5_conf == GPIOCONF_OUT_START_0 || sysconf->gpio5_conf == GPIOCONF_OUT_START_1) {
|
||||||
|
if (GET_ARG("do5")) {
|
||||||
|
if (buff[0] == 't') {
|
||||||
|
set = ((inputs & (1<<5)) == 0);
|
||||||
|
} else {
|
||||||
|
set = buff[0] == '1';
|
||||||
|
}
|
||||||
|
set_d5 = set;
|
||||||
|
gpio_output_set((uint32) (set << 5), (uint32) ((!set) << 5), 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GET_ARG("pulse")) {
|
||||||
|
int duration = atoi(buff);
|
||||||
|
|
||||||
|
if (duration > 0) {
|
||||||
|
u32 cmd = 0;
|
||||||
|
if (set_d2 != -1) {
|
||||||
|
if (set_d2) { cmd |= 1<<2; } else { cmd |= 1<<(16+2); }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (set_d4 != -1) {
|
||||||
|
if (set_d4) { cmd |= 1<<4; } else { cmd |= 1<<(16+4); }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (set_d5 != -1) {
|
||||||
|
if (set_d5) { cmd |= 1<<5; } else { cmd |= 1<<(16+5); }
|
||||||
|
}
|
||||||
|
|
||||||
|
os_timer_disarm(&tmrPulse);
|
||||||
|
os_timer_setfn(&tmrPulse, tmrPulseCb, (void*) cmd);
|
||||||
|
os_timer_arm(&tmrPulse, duration, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
httpdStartResponse(connData, 200);
|
||||||
|
httpdHeader(connData, "Content-Type", "application/json");
|
||||||
|
httpdEndHeaders(connData);
|
||||||
|
|
||||||
|
// refresh inputs
|
||||||
|
buildInputsJson(buff);
|
||||||
|
httpdSend(connData, buff, -1);
|
||||||
|
|
||||||
|
return HTTPD_CGI_DONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** "GPIO" page */
|
||||||
|
httpd_cgi_state ICACHE_FLASH_ATTR
|
||||||
|
tplGpio(HttpdConnData *connData, char *token, void **arg)
|
||||||
|
{
|
||||||
|
return tplSystemCfg(connData, token, arg);
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,5 +9,7 @@ httpd_cgi_state cgiResetDevice(HttpdConnData *connData);
|
|||||||
httpd_cgi_state cgiSystemCfgSetParams(HttpdConnData *connData);
|
httpd_cgi_state cgiSystemCfgSetParams(HttpdConnData *connData);
|
||||||
httpd_cgi_state tplSystemCfg(HttpdConnData *connData, char *token, void **arg);
|
httpd_cgi_state tplSystemCfg(HttpdConnData *connData, char *token, void **arg);
|
||||||
httpd_cgi_state cgiResetScreen(HttpdConnData *connData);
|
httpd_cgi_state cgiResetScreen(HttpdConnData *connData);
|
||||||
|
httpd_cgi_state cgiGPIO(HttpdConnData *connData);
|
||||||
|
httpd_cgi_state tplGpio(HttpdConnData *connData, char *token, void **arg);
|
||||||
|
|
||||||
#endif // CGI_PING_H
|
#endif // CGI_PING_H
|
||||||
|
|||||||
@@ -88,6 +88,9 @@ enum xset_result xset_ustring(const char *name, u8 *field, const char *buff, con
|
|||||||
#define XGET_CGI_FUNC(type, name, suffix, deref, xget, xset, xsarg, xnotify, allow) \
|
#define XGET_CGI_FUNC(type, name, suffix, deref, xget, xset, xsarg, xnotify, allow) \
|
||||||
if ((allow) && streq(token, #name)) xget(buff, deref XSTRUCT->name);
|
if ((allow) && streq(token, #name)) xget(buff, deref XSTRUCT->name);
|
||||||
|
|
||||||
|
#define XGET_CGI_FUNC_RETURN(type, name, suffix, deref, xget, xset, xsarg, xnotify, allow) \
|
||||||
|
if ((allow) && streq(token, #name)) { xget(buff, deref XSTRUCT->name); return; }
|
||||||
|
|
||||||
#define XSTRUCT_FIELD(type, name, suffix, deref, xget, xset, xsarg, xnotify, allow) \
|
#define XSTRUCT_FIELD(type, name, suffix, deref, xget, xset, xsarg, xnotify, allow) \
|
||||||
type name suffix;
|
type name suffix;
|
||||||
|
|
||||||
|
|||||||
@@ -98,7 +98,10 @@ static void ICACHE_FLASH_ATTR resetBtnTimerCb(void *arg) {
|
|||||||
} else {
|
} else {
|
||||||
// Switch LED pins back to UART mode
|
// Switch LED pins back to UART mode
|
||||||
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);
|
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);
|
||||||
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);
|
if (sysconf->gpio2_conf == GPIOCONF_OFF) {
|
||||||
|
// only if uart is enabled
|
||||||
|
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);
|
||||||
|
}
|
||||||
|
|
||||||
if (resetCnt>=12) { //6 secs pressed - FR (timer is at 500 ms)
|
if (resetCnt>=12) { //6 secs pressed - FR (timer is at 500 ms)
|
||||||
info("Restoring to default settings via BOOT button!");
|
info("Restoring to default settings via BOOT button!");
|
||||||
@@ -140,3 +143,61 @@ void ICACHE_FLASH_ATTR ioInit() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct pinmapping {
|
||||||
|
bool set;
|
||||||
|
bool reset;
|
||||||
|
bool enable;
|
||||||
|
bool disable;
|
||||||
|
bool input;
|
||||||
|
bool pullup;
|
||||||
|
};
|
||||||
|
|
||||||
|
void ICACHE_FLASH_ATTR userGpioInit(void)
|
||||||
|
{
|
||||||
|
const struct pinmapping pin_mappings[5] = {
|
||||||
|
// S R E D I P
|
||||||
|
{0, 1, 0, 1, 0, 0}, // OFF
|
||||||
|
{0, 1, 1, 0, 0, 0}, // OUT 0
|
||||||
|
{1, 0, 1, 0, 0, 0}, // OUT 1
|
||||||
|
{0, 0, 0, 1, 1, 1}, // IN PULL
|
||||||
|
{0, 0, 0, 1, 1, 0}, // IN NOPULL
|
||||||
|
};
|
||||||
|
|
||||||
|
u8 num;
|
||||||
|
const struct pinmapping *pm;
|
||||||
|
|
||||||
|
// GPIO2
|
||||||
|
num = 2;
|
||||||
|
pm = &pin_mappings[sysconf->gpio2_conf];
|
||||||
|
gpio_output_set((uint32) (pm->set << num), (uint32) (pm->reset << num), (uint32) (pm->enable << num), (uint32) (pm->disable << num));
|
||||||
|
if (pm->pullup) {
|
||||||
|
PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO2_U);
|
||||||
|
} else {
|
||||||
|
PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO2_U);
|
||||||
|
}
|
||||||
|
if (sysconf->gpio2_conf == GPIOCONF_OFF) {
|
||||||
|
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);
|
||||||
|
} else {
|
||||||
|
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GPIO4
|
||||||
|
num = 4;
|
||||||
|
pm = &pin_mappings[sysconf->gpio4_conf];
|
||||||
|
gpio_output_set((uint32) (pm->set << num), (uint32) (pm->reset << num), (uint32) (pm->enable << num), (uint32) (pm->disable << num));
|
||||||
|
if (pm->pullup) {
|
||||||
|
PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO4_U);
|
||||||
|
} else {
|
||||||
|
PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO4_U);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GPIO5
|
||||||
|
num = 5;
|
||||||
|
pm = &pin_mappings[sysconf->gpio5_conf];
|
||||||
|
gpio_output_set((uint32) (pm->set << num), (uint32) (pm->reset << num), (uint32) (pm->enable << num), (uint32) (pm->disable << num));
|
||||||
|
if (pm->pullup) {
|
||||||
|
PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO5_U);
|
||||||
|
} else {
|
||||||
|
PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO5_U);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,5 +2,6 @@
|
|||||||
#define IO_H
|
#define IO_H
|
||||||
|
|
||||||
void ioInit(void);
|
void ioInit(void);
|
||||||
|
void userGpioInit(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ const HttpdBuiltInUrl routes[] ESP_CONST_DATA = {
|
|||||||
ROUTE_TPL_FILE("/", tplScreen, "/term.tpl"),
|
ROUTE_TPL_FILE("/", tplScreen, "/term.tpl"),
|
||||||
ROUTE_TPL_FILE("/about/?", tplAbout, "/about.tpl"),
|
ROUTE_TPL_FILE("/about/?", tplAbout, "/about.tpl"),
|
||||||
ROUTE_FILE("/help/?", "/help.html"),
|
ROUTE_FILE("/help/?", "/help.html"),
|
||||||
|
ROUTE_TPL_FILE("/cfg/gpio/?", tplGpio, "/cfg_gpio.tpl"),
|
||||||
|
|
||||||
// --- Sockets ---
|
// --- Sockets ---
|
||||||
ROUTE_WS(URL_WS_UPDATE, updateSockConnect),
|
ROUTE_WS(URL_WS_UPDATE, updateSockConnect),
|
||||||
@@ -114,6 +115,7 @@ const HttpdBuiltInUrl routes[] ESP_CONST_DATA = {
|
|||||||
ROUTE_CGI(API_PING"/?", cgiPing),
|
ROUTE_CGI(API_PING"/?", cgiPing),
|
||||||
ROUTE_CGI(API_CLEAR"/?", cgiResetScreen),
|
ROUTE_CGI(API_CLEAR"/?", cgiResetScreen),
|
||||||
ROUTE_CGI(API_D2D_MSG"/?", cgiD2DMessage),
|
ROUTE_CGI(API_D2D_MSG"/?", cgiD2DMessage),
|
||||||
|
ROUTE_CGI(API_GPIO"/?", cgiGPIO),
|
||||||
|
|
||||||
ROUTE_REDIRECT("/cfg/?", "/cfg/wifi"),
|
ROUTE_REDIRECT("/cfg/?", "/cfg/wifi"),
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -124,8 +124,10 @@ enum CursorShape {
|
|||||||
X(char, font_stack, [TERM_FONTSTACK_LEN], /**/, xget_string, xset_string, TERM_FONTSTACK_LEN, /**/, 1) \
|
X(char, font_stack, [TERM_FONTSTACK_LEN], /**/, xget_string, xset_string, TERM_FONTSTACK_LEN, /**/, 1) \
|
||||||
X(u8, font_size, /**/, /**/, xget_dec, xset_u8, NULL, /**/, 1)
|
X(u8, font_size, /**/, /**/, xget_dec, xset_u8, NULL, /**/, 1)
|
||||||
|
|
||||||
#define TERM_BM_N(tc, n) ((tc)->bm1+(TERM_BTN_MSG_LEN*n))
|
/** Get button N message from the passed config structure pointer */
|
||||||
#define TERM_BTN_N(tc, n) ((tc)->btn1+(TERM_BTN_LEN*n))
|
#define TERM_BM_N(tc, n) ((tc)->bm1+(TERM_BTN_MSG_LEN*(n)))
|
||||||
|
/** Get button N text from the passed config structure pointer */
|
||||||
|
#define TERM_BTN_N(tc, n) ((tc)->btn1+(TERM_BTN_LEN*(n)))
|
||||||
|
|
||||||
/** Export color for config */
|
/** Export color for config */
|
||||||
void xget_term_color(char *buff, u32 value);
|
void xget_term_color(char *buff, u32 value);
|
||||||
|
|||||||
+17
-5
@@ -11,10 +11,12 @@ static ETSTimer flushLogTimer;
|
|||||||
|
|
||||||
static void buf_putc(char c)
|
static void buf_putc(char c)
|
||||||
{
|
{
|
||||||
if (lb_ls != lb_nw) {
|
if (sysconf->gpio2_conf == GPIOCONF_OFF) {
|
||||||
logbuf[lb_nw++] = c;
|
if (lb_ls != lb_nw) {
|
||||||
if (lb_nw >= DEBUG_LOGBUF_SIZE) lb_nw = 0;
|
logbuf[lb_nw++] = c;
|
||||||
}
|
if (lb_nw >= DEBUG_LOGBUF_SIZE) lb_nw = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ICACHE_FLASH_ATTR
|
static void ICACHE_FLASH_ATTR
|
||||||
@@ -42,7 +44,9 @@ buf_pop(void *unused)
|
|||||||
|
|
||||||
LOCAL void my_putc(char c)
|
LOCAL void my_putc(char c)
|
||||||
{
|
{
|
||||||
UART_WriteCharCRLF(UART1, (u8) c, 200);
|
if (sysconf->gpio2_conf == GPIOCONF_OFF) {
|
||||||
|
UART_WriteCharCRLF(UART1, (u8) c, 200);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -79,6 +83,14 @@ void ICACHE_FLASH_ATTR serialInit(void)
|
|||||||
UART_SetStopBits(UART0, (UartStopBitsNum) sysconf->uart_stopbits);
|
UART_SetStopBits(UART0, (UartStopBitsNum) sysconf->uart_stopbits);
|
||||||
UART_SetBaudrate(UART0, sysconf->uart_baudrate);
|
UART_SetBaudrate(UART0, sysconf->uart_baudrate);
|
||||||
|
|
||||||
|
// GPIO2 may be used as a remotely controlled GPIO
|
||||||
|
if (sysconf->gpio2_conf == GPIOCONF_OFF) {
|
||||||
|
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);
|
||||||
|
} else {
|
||||||
|
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
|
||||||
|
// further config of the GPIO will be done in persist.c after calling this func
|
||||||
|
}
|
||||||
|
|
||||||
info("COM SERIAL: %d baud, %s parity, %s stopbit(s)",
|
info("COM SERIAL: %d baud, %s parity, %s stopbit(s)",
|
||||||
sysconf->uart_baudrate,
|
sysconf->uart_baudrate,
|
||||||
(sysconf->uart_parity == PARITY_NONE ? "NONE" : (sysconf->uart_parity == PARITY_ODD ? "ODD" : "EVEN")),
|
(sysconf->uart_parity == PARITY_NONE ? "NONE" : (sysconf->uart_parity == PARITY_ODD ? "ODD" : "EVEN")),
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "uart_driver.h"
|
#include "uart_driver.h"
|
||||||
#include "serial.h"
|
#include "serial.h"
|
||||||
#include "cgi_logging.h"
|
#include "cgi_logging.h"
|
||||||
|
#include "io.h"
|
||||||
|
|
||||||
SystemConfigBundle * const sysconf = &persist.current.sysconf;
|
SystemConfigBundle * const sysconf = &persist.current.sysconf;
|
||||||
|
|
||||||
@@ -119,6 +120,14 @@ sysconf_apply_settings(void)
|
|||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sysconf->config_version < 2) {
|
||||||
|
dbg("Upgrading syscfg to v 2");
|
||||||
|
sysconf->gpio2_conf = GPIOCONF_OFF;
|
||||||
|
sysconf->gpio4_conf = GPIOCONF_OUT_START_0;
|
||||||
|
sysconf->gpio5_conf = GPIOCONF_OUT_START_0;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
sysconf->config_version = SYSCONF_VERSION;
|
sysconf->config_version = SYSCONF_VERSION;
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
@@ -128,6 +137,9 @@ sysconf_apply_settings(void)
|
|||||||
// uart settings live here, but the CGI handler + form has been moved to the Terminal config page
|
// uart settings live here, but the CGI handler + form has been moved to the Terminal config page
|
||||||
serialInit();
|
serialInit();
|
||||||
|
|
||||||
|
// initialize user GPIOs
|
||||||
|
userGpioInit();
|
||||||
|
|
||||||
system_update_cpu_freq((uint8) (sysconf->overclock ? 160 : 80));
|
system_update_cpu_freq((uint8) (sysconf->overclock ? 160 : 80));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,4 +155,7 @@ sysconf_restore_defaults(void)
|
|||||||
strcpy((char *)sysconf->access_pw, DEF_ACCESS_PW);
|
strcpy((char *)sysconf->access_pw, DEF_ACCESS_PW);
|
||||||
strcpy((char *)sysconf->access_name, DEF_ACCESS_NAME);
|
strcpy((char *)sysconf->access_name, DEF_ACCESS_NAME);
|
||||||
sysconf->overclock = false;
|
sysconf->overclock = false;
|
||||||
|
sysconf->gpio2_conf = GPIOCONF_OFF; // means 'use debug uart'
|
||||||
|
sysconf->gpio4_conf = GPIOCONF_OUT_START_0;
|
||||||
|
sysconf->gpio5_conf = GPIOCONF_OUT_START_0;
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-2
@@ -11,7 +11,7 @@
|
|||||||
// Size designed for the wifi config structure
|
// Size designed for the wifi config structure
|
||||||
// Must be constant to avoid corrupting user config after upgrade
|
// Must be constant to avoid corrupting user config after upgrade
|
||||||
#define SYSCONF_SIZE 300
|
#define SYSCONF_SIZE 300
|
||||||
#define SYSCONF_VERSION 1
|
#define SYSCONF_VERSION 2
|
||||||
|
|
||||||
#define DEF_ACCESS_PW "1234"
|
#define DEF_ACCESS_PW "1234"
|
||||||
#define DEF_ACCESS_NAME "espterm"
|
#define DEF_ACCESS_NAME "espterm"
|
||||||
@@ -25,6 +25,14 @@ enum pwlock {
|
|||||||
PWLOCK_MAX = 5,
|
PWLOCK_MAX = 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum gpioconf {
|
||||||
|
GPIOCONF_OFF = 0,
|
||||||
|
GPIOCONF_OUT_START_0 = 1,
|
||||||
|
GPIOCONF_OUT_START_1 = 2,
|
||||||
|
GPIOCONF_IN_PULL = 3,
|
||||||
|
GPIOCONF_IN_NOPULL = 4,
|
||||||
|
};
|
||||||
|
|
||||||
//....Type................Name..Suffix...............Deref..XGET............XSET.........................NOTIFY....Allow
|
//....Type................Name..Suffix...............Deref..XGET............XSET.........................NOTIFY....Allow
|
||||||
// Deref is used to pass the field to xget. Cast is used to convert the &'d field to what xset wants (needed for static arrays)
|
// Deref is used to pass the field to xget. Cast is used to convert the &'d field to what xset wants (needed for static arrays)
|
||||||
#define XTABLE_SYSCONF \
|
#define XTABLE_SYSCONF \
|
||||||
@@ -39,7 +47,9 @@ enum pwlock {
|
|||||||
X(uchar, access_name, [32], /**/, xget_ustring, xset_ustring, NULL, /**/, admin|tpl) \
|
X(uchar, access_name, [32], /**/, xget_ustring, xset_ustring, NULL, /**/, admin|tpl) \
|
||||||
\
|
\
|
||||||
X(bool, overclock, /**/, /**/, xget_bool, xset_bool, NULL, /**/, 1) \
|
X(bool, overclock, /**/, /**/, xget_bool, xset_bool, NULL, /**/, 1) \
|
||||||
|
X(u8, gpio2_conf, /**/, /**/, xget_dec, xset_u8, NULL, /**/, 1) \
|
||||||
|
X(u8, gpio4_conf, /**/, /**/, xget_dec, xset_u8, NULL, /**/, 1) \
|
||||||
|
X(u8, gpio5_conf, /**/, /**/, xget_dec, xset_u8, NULL, /**/, 1)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
#define X XSTRUCT_FIELD
|
#define X XSTRUCT_FIELD
|
||||||
@@ -54,6 +64,7 @@ typedef struct {
|
|||||||
// char access_pw[64]; // access password
|
// char access_pw[64]; // access password
|
||||||
// char access_name[32]; // access name
|
// char access_name[32]; // access name
|
||||||
// bool overclock;
|
// bool overclock;
|
||||||
|
// bool debug_uart;
|
||||||
} SystemConfigBundle;
|
} SystemConfigBundle;
|
||||||
|
|
||||||
extern SystemConfigBundle * const sysconf;
|
extern SystemConfigBundle * const sysconf;
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ void ICACHE_FLASH_ATTR UART_Init(void)
|
|||||||
|
|
||||||
// U1TXD (GPIO2)
|
// U1TXD (GPIO2)
|
||||||
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);
|
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);
|
||||||
|
PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO2_U);
|
||||||
|
|
||||||
// Configure the UART peripherals
|
// Configure the UART peripherals
|
||||||
UART_SetWordLength(UART0, EIGHT_BITS); // main
|
UART_SetWordLength(UART0, EIGHT_BITS); // main
|
||||||
|
|||||||
+3
-1
@@ -96,6 +96,8 @@ static ETSTimer prHeapTimer;
|
|||||||
//Main routine. Initialize stdout, the I/O, filesystem and the webserver and we're done.
|
//Main routine. Initialize stdout, the I/O, filesystem and the webserver and we're done.
|
||||||
void ICACHE_FLASH_ATTR user_init(void)
|
void ICACHE_FLASH_ATTR user_init(void)
|
||||||
{
|
{
|
||||||
|
sysconf->gpio2_conf = GPIOCONF_OFF; // enable debug UART for the start-up (sysconf is not loaded yet)
|
||||||
|
|
||||||
ansi_parser_inhibit = true;
|
ansi_parser_inhibit = true;
|
||||||
serialInitBase();
|
serialInitBase();
|
||||||
|
|
||||||
@@ -110,7 +112,7 @@ void ICACHE_FLASH_ATTR user_init(void)
|
|||||||
banner_gap();
|
banner_gap();
|
||||||
banner("================ ESPTerm ================");
|
banner("================ ESPTerm ================");
|
||||||
banner_info();
|
banner_info();
|
||||||
banner_info("Project by Ondrej Hruska, 2017");
|
banner_info("Project by Ondrej Hruska, 2017-2018");
|
||||||
banner_info();
|
banner_info();
|
||||||
banner_info(TERMINAL_GITHUB_REPO_NOPROTO);
|
banner_info(TERMINAL_GITHUB_REPO_NOPROTO);
|
||||||
banner_info();
|
banner_info();
|
||||||
|
|||||||
+3
-3
@@ -9,10 +9,10 @@
|
|||||||
#define STR(x) STR_HELPER(x)
|
#define STR(x) STR_HELPER(x)
|
||||||
|
|
||||||
#define FW_V_MAJOR 2
|
#define FW_V_MAJOR 2
|
||||||
#define FW_V_MINOR 3
|
#define FW_V_MINOR 4
|
||||||
#define FW_V_PATCH 0
|
#define FW_V_PATCH 0
|
||||||
#define FW_V_SUFFIX ""
|
#define FW_V_SUFFIX "-pre2"
|
||||||
#define FW_CODENAME "Cricket" // 2.3
|
#define FW_CODENAME "Damselfly"
|
||||||
#define FW_CODENAME_QUOTED "\""FW_CODENAME"\""
|
#define FW_CODENAME_QUOTED "\""FW_CODENAME"\""
|
||||||
|
|
||||||
#define FW_VERSION STR(FW_V_MAJOR) "." STR(FW_V_MINOR) "." STR(FW_V_PATCH) FW_V_SUFFIX
|
#define FW_VERSION STR(FW_V_MAJOR) "." STR(FW_V_MINOR) "." STR(FW_V_PATCH) FW_V_SUFFIX
|
||||||
|
|||||||
Reference in New Issue
Block a user