Overclock, fix buffer overflow causing total lock-up, small tweaks
removed the main make config file from VCS so it can be easier edited added overclocking option to enable 160 MHz mode
This commit is contained in:
@@ -12,6 +12,7 @@ html_compressed/
|
||||
ldscript_memspecific.ld
|
||||
eagle.app.sym
|
||||
node_modules
|
||||
esphttpdconfig.mk
|
||||
|
||||
# Garbage added by CLion
|
||||
.idea/
|
||||
|
||||
+1
-1
Submodule front-end updated: c846cffedb...f5dd70a6f3
@@ -181,6 +181,8 @@ httpd_cgi_state ICACHE_FLASH_ATTR cgiNetworkSetParams(HttpdConnData *connData)
|
||||
}
|
||||
}
|
||||
|
||||
(void) redir_url;
|
||||
|
||||
if (redir_url_buf[strlen(SET_REDIR_ERR)] == 0) {
|
||||
// All was OK
|
||||
cgi_info("Set network params - success, applying in 1000 ms");
|
||||
|
||||
+12
-4
@@ -6,7 +6,6 @@
|
||||
#include "cgi_system.h"
|
||||
#include "persist.h"
|
||||
#include "syscfg.h"
|
||||
#include "uart_driver.h"
|
||||
#include "ansi_parser.h"
|
||||
#include "cgi_logging.h"
|
||||
|
||||
@@ -98,9 +97,7 @@ cgiSystemCfgSetParams(HttpdConnData *connData)
|
||||
|
||||
do {
|
||||
if (!GET_ARG("pw")) {
|
||||
warn("Missing admin pw!");
|
||||
redir_url += sprintf(redir_url, "pw,");
|
||||
break;
|
||||
break; // if no PW in GET, not trying to configure anything protected
|
||||
}
|
||||
|
||||
if (!streq(buff, persist.admin.pw)) {
|
||||
@@ -191,6 +188,14 @@ cgiSystemCfgSetParams(HttpdConnData *connData)
|
||||
}
|
||||
} while (0);
|
||||
|
||||
if (GET_ARG("overclock")) {
|
||||
cgi_dbg("overclock = %s", buff);
|
||||
int enable = atoi(buff);
|
||||
if (sysconf->overclock != enable) {
|
||||
sysconf->overclock = (bool)enable;
|
||||
}
|
||||
}
|
||||
|
||||
(void)redir_url;
|
||||
|
||||
if (redir_url_buf[strlen(SET_REDIR_ERR)] == 0) {
|
||||
@@ -246,6 +251,9 @@ tplSystemCfg(HttpdConnData *connData, char *token, void **arg)
|
||||
else if (streq(token, "def_admin_pw")) {
|
||||
sprintf(buff, "%s", DEFAULT_ADMIN_PW);
|
||||
}
|
||||
else if (streq(token, "overclock")) {
|
||||
sprintf(buff, "%d", sysconf->overclock);
|
||||
}
|
||||
|
||||
tplSend(connData, buff, -1);
|
||||
return HTTPD_CGI_DONE;
|
||||
|
||||
@@ -10,6 +10,7 @@ Cgi/template routines for configuring non-wifi settings
|
||||
#include "helpers.h"
|
||||
#include "cgi_logging.h"
|
||||
#include "uart_driver.h"
|
||||
#include "serial.h"
|
||||
|
||||
#define SET_REDIR_SUC "/cfg/term"
|
||||
#define SET_REDIR_ERR SET_REDIR_SUC"?err="
|
||||
@@ -42,6 +43,7 @@ cgiTermCfgSetParams(HttpdConnData *connData)
|
||||
bool notify_screen_content = 0, notify_screen_labels = 0;
|
||||
|
||||
bool shall_clear_screen = false;
|
||||
bool shall_init_uart = false;
|
||||
|
||||
char *redir_url = redir_url_buf;
|
||||
redir_url += sprintf(redir_url, SET_REDIR_ERR);
|
||||
@@ -317,6 +319,7 @@ cgiTermCfgSetParams(HttpdConnData *connData)
|
||||
baud == BIT_RATE_1843200 ||
|
||||
baud == BIT_RATE_3686400) {
|
||||
sysconf->uart_baudrate = (u32) baud;
|
||||
shall_init_uart = true;
|
||||
} else {
|
||||
cgi_warn("Bad baud rate %s", buff);
|
||||
redir_url += sprintf(redir_url, "uart_baud,");
|
||||
@@ -328,6 +331,7 @@ cgiTermCfgSetParams(HttpdConnData *connData)
|
||||
int parity = atoi(buff);
|
||||
if (parity >= 0 && parity <= 2) {
|
||||
sysconf->uart_parity = (UartParityMode) parity;
|
||||
shall_init_uart = true;
|
||||
} else {
|
||||
cgi_warn("Bad parity %s", buff);
|
||||
redir_url += sprintf(redir_url, "uart_parity,");
|
||||
@@ -339,6 +343,7 @@ cgiTermCfgSetParams(HttpdConnData *connData)
|
||||
int stopbits = atoi(buff);
|
||||
if (stopbits >= 1 && stopbits <= 3) {
|
||||
sysconf->uart_stopbits = (UartStopBitsNum) stopbits;
|
||||
shall_init_uart = true;
|
||||
} else {
|
||||
cgi_warn("Bad stopbits %s", buff);
|
||||
redir_url += sprintf(redir_url, "uart_stopbits,");
|
||||
@@ -359,6 +364,10 @@ cgiTermCfgSetParams(HttpdConnData *connData)
|
||||
terminal_apply_settings_noclear();
|
||||
}
|
||||
|
||||
if (shall_init_uart) {
|
||||
serialInit();
|
||||
}
|
||||
|
||||
if (notify_screen_content) {
|
||||
screen_notifyChange(CHANGE_CONTENT);
|
||||
}
|
||||
|
||||
+9
-4
@@ -13,10 +13,11 @@ void ICACHE_FLASH_ATTR
|
||||
sysconf_apply_settings(void)
|
||||
{
|
||||
bool changed = false;
|
||||
// if (sysconf->config_version < 1) {
|
||||
// dbg("Upgrading syscfg to v 1");
|
||||
// changed = true;
|
||||
// }
|
||||
if (sysconf->config_version < 1) {
|
||||
dbg("Upgrading syscfg to v 1");
|
||||
sysconf->overclock = false;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
sysconf->config_version = SYSCONF_VERSION;
|
||||
|
||||
@@ -24,7 +25,10 @@ sysconf_apply_settings(void)
|
||||
persist_store();
|
||||
}
|
||||
|
||||
// uart settings live here, but the CGI handler + form has been moved to the Terminal config page
|
||||
serialInit();
|
||||
|
||||
system_update_cpu_freq((uint8) (sysconf->overclock ? 160 : 80));
|
||||
}
|
||||
|
||||
void ICACHE_FLASH_ATTR
|
||||
@@ -38,4 +42,5 @@ sysconf_restore_defaults(void)
|
||||
sysconf->pwlock = PWLOCK_NONE;
|
||||
strcpy(sysconf->access_pw, DEF_ACCESS_PW);
|
||||
strcpy(sysconf->access_name, DEF_ACCESS_NAME);
|
||||
sysconf->overclock = false;
|
||||
}
|
||||
|
||||
+2
-1
@@ -10,7 +10,7 @@
|
||||
// Size designed for the wifi config structure
|
||||
// Must be constant to avoid corrupting user config after upgrade
|
||||
#define SYSCONF_SIZE 300
|
||||
#define SYSCONF_VERSION 0
|
||||
#define SYSCONF_VERSION 1
|
||||
|
||||
#define DEF_ACCESS_PW "1234"
|
||||
#define DEF_ACCESS_NAME "espterm"
|
||||
@@ -32,6 +32,7 @@ typedef struct {
|
||||
enum pwlock pwlock : 8; // page access lock
|
||||
char access_pw[64]; // access password
|
||||
char access_name[32]; // access name
|
||||
bool overclock;
|
||||
} SystemConfigBundle;
|
||||
|
||||
extern SystemConfigBundle * const sysconf;
|
||||
|
||||
+22
-12
@@ -9,7 +9,7 @@
|
||||
#include <uart_register.h>
|
||||
|
||||
#define UART_TX_BUFFER_SIZE 512 //Ring buffer length of tx buffer
|
||||
#define UART_RX_BUFFER_SIZE 512 //Ring buffer length of rx buffer
|
||||
#define UART_RX_BUFFER_SIZE 600 //Ring buffer length of rx buffer
|
||||
|
||||
struct UartBuffer {
|
||||
uint32 UartBuffSize;
|
||||
@@ -158,24 +158,34 @@ void UART_RxFifoCollect(void)
|
||||
uint8 fifo_data;
|
||||
fifo_len = (uint8) ((READ_PERI_REG(UART_STATUS(UART0)) >> UART_RXFIFO_CNT_S) & UART_RXFIFO_CNT);
|
||||
if (fifo_len >= pRxBuffer->Space) {
|
||||
UART_WriteChar(UART1, '%', 100);
|
||||
}
|
||||
else {
|
||||
// try to read at least the bit we can
|
||||
fifo_len = (uint8) (pRxBuffer->Space - 1);
|
||||
UART_WriteChar(UART1, '%', 1);
|
||||
// discard contents of the FIFO - would loop forever
|
||||
buf_idx = 0;
|
||||
while (buf_idx < fifo_len) {
|
||||
buf_idx++;
|
||||
fifo_data = (uint8) (READ_PERI_REG(UART_FIFO(UART0)) & 0xFF);
|
||||
*(pRxBuffer->pInPos++) = fifo_data;
|
||||
if (pRxBuffer->pInPos == (pRxBuffer->pUartBuff + pRxBuffer->UartBuffSize)) {
|
||||
pRxBuffer->pInPos = pRxBuffer->pUartBuff;
|
||||
}
|
||||
(void)fifo_data; // pretend we use it
|
||||
}
|
||||
pRxBuffer->Space -= fifo_len;
|
||||
return;
|
||||
}
|
||||
|
||||
if (pRxBuffer->Space >= UART_FIFO_LEN) {
|
||||
uart_rx_intr_enable(UART0);
|
||||
buf_idx = 0;
|
||||
while (buf_idx < fifo_len) {
|
||||
buf_idx++;
|
||||
fifo_data = (uint8) (READ_PERI_REG(UART_FIFO(UART0)) & 0xFF);
|
||||
*(pRxBuffer->pInPos++) = fifo_data;
|
||||
if (pRxBuffer->pInPos == (pRxBuffer->pUartBuff + pRxBuffer->UartBuffSize)) {
|
||||
pRxBuffer->pInPos = pRxBuffer->pUartBuff;
|
||||
}
|
||||
}
|
||||
pRxBuffer->Space -= fifo_len;
|
||||
//
|
||||
// this is called by the processing routine, no need here
|
||||
// if (pRxBuffer->Space >= UART_FIFO_LEN) {
|
||||
// uart_rx_intr_enable(UART0);
|
||||
// }
|
||||
}
|
||||
|
||||
u16 ICACHE_FLASH_ATTR UART_AsyncTxGetEmptySpace(void)
|
||||
@@ -209,7 +219,7 @@ UART_SendAsync(const char *pdata, int16_t data_len)
|
||||
UART_WriteToAsyncBuffer(pTxBuffer, pdata, real_len);
|
||||
}
|
||||
else {
|
||||
UART_WriteChar(UART1, '^', 100);
|
||||
UART_WriteChar(UART1, '^', 1);
|
||||
}
|
||||
// }
|
||||
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ static void uart_processTask(os_event_t *events);
|
||||
|
||||
// Those heavily affect the byte loss ratio
|
||||
#define PROCESS_CHUNK_LEN 1
|
||||
#define FIFO_FULL_THRES 4
|
||||
#define FIFO_FULL_THRES 32
|
||||
|
||||
#define uart_recvTaskPrio 1
|
||||
#define uart_recvTaskQueueLen 25
|
||||
|
||||
Reference in New Issue
Block a user