You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
3.8 KiB
161 lines
3.8 KiB
//
|
|
// Created by MightyPork on 2017/07/29.
|
|
//
|
|
|
|
#include "syscfg.h"
|
|
#include "persist.h"
|
|
#include "uart_driver.h"
|
|
#include "serial.h"
|
|
#include "cgi_logging.h"
|
|
#include "io.h"
|
|
|
|
SystemConfigBundle * const sysconf = &persist.current.sysconf;
|
|
|
|
enum xset_result ICACHE_FLASH_ATTR
|
|
xset_sys_baudrate(const char *name, u32 *field, const char *buff, const void *arg)
|
|
{
|
|
cgi_dbg("Setting %s = %s", name, buff);
|
|
int baud = atoi(buff);
|
|
if (baud == BIT_RATE_300 ||
|
|
baud == BIT_RATE_600 ||
|
|
baud == BIT_RATE_1200 ||
|
|
baud == BIT_RATE_2400 ||
|
|
baud == BIT_RATE_4800 ||
|
|
baud == BIT_RATE_9600 ||
|
|
baud == BIT_RATE_19200 ||
|
|
baud == BIT_RATE_38400 ||
|
|
baud == BIT_RATE_57600 ||
|
|
baud == BIT_RATE_74880 ||
|
|
baud == BIT_RATE_115200 ||
|
|
baud == BIT_RATE_230400 ||
|
|
baud == BIT_RATE_460800 ||
|
|
baud == BIT_RATE_921600 ||
|
|
baud == BIT_RATE_1843200 ||
|
|
baud == BIT_RATE_3686400) {
|
|
if (*field != baud) {
|
|
*field = (u32) baud;
|
|
return XSET_SET;
|
|
}
|
|
return XSET_UNCHANGED;
|
|
} else {
|
|
cgi_warn("Bad baud rate %s", buff);
|
|
return XSET_FAIL;
|
|
}
|
|
}
|
|
|
|
enum xset_result ICACHE_FLASH_ATTR
|
|
xset_sys_parity(const char *name, u8 *field, const char *buff, const void *arg)
|
|
{
|
|
cgi_dbg("Setting %s = %s", name, buff);
|
|
int parity = atoi(buff);
|
|
if (parity >= 0 && parity <= 2) {
|
|
if (*field != parity) {
|
|
*field = (UartParityMode) parity;
|
|
return XSET_SET;
|
|
}
|
|
return XSET_UNCHANGED;
|
|
} else {
|
|
cgi_warn("Bad parity %s", buff);
|
|
return XSET_FAIL;
|
|
}
|
|
}
|
|
|
|
enum xset_result ICACHE_FLASH_ATTR
|
|
xset_sys_stopbits(const char *name, u8 *field, const char *buff, const void *arg)
|
|
{
|
|
cgi_dbg("Setting %s = %s", name, buff);
|
|
int stopbits = atoi(buff);
|
|
if (stopbits >= 1 && stopbits <= 3) {
|
|
if (*field != stopbits) {
|
|
*field = (UartParityMode) stopbits;
|
|
return XSET_SET;
|
|
}
|
|
return XSET_UNCHANGED;
|
|
} else {
|
|
cgi_warn("Bad stopbits %s", buff);
|
|
return XSET_FAIL;
|
|
}
|
|
}
|
|
|
|
enum xset_result ICACHE_FLASH_ATTR
|
|
xset_sys_pwlock(const char *name, u8 *field, const char *buff, const void *arg)
|
|
{
|
|
cgi_dbg("Setting %s = %s", name, buff);
|
|
|
|
int pwlock = atoi(buff);
|
|
if (pwlock >= 0 && pwlock < PWLOCK_MAX) {
|
|
if (*field != pwlock) {
|
|
*field = (enum pwlock) pwlock;
|
|
return XSET_SET;
|
|
}
|
|
return XSET_UNCHANGED;
|
|
} else {
|
|
cgi_warn("Bad pwlock %s", buff);
|
|
return XSET_FAIL;
|
|
}
|
|
}
|
|
|
|
enum xset_result ICACHE_FLASH_ATTR
|
|
xset_sys_accesspw(const char *name, uchar *field, const char *buff, const void *arg)
|
|
{
|
|
// Do not overwrite pw if empty
|
|
if (strlen(buff) == 0) return XSET_UNCHANGED;
|
|
return xset_ustring(name, field, buff, arg);
|
|
}
|
|
|
|
|
|
void ICACHE_FLASH_ATTR
|
|
sysconf_apply_settings(void)
|
|
{
|
|
// char buff[64];
|
|
//#define XSTRUCT sysconf
|
|
//#define X XDUMP_FIELD
|
|
// XTABLE_SYSCONF
|
|
//#undef X
|
|
|
|
bool changed = false;
|
|
if (sysconf->config_version < 1) {
|
|
dbg("Upgrading syscfg to v 1");
|
|
sysconf->overclock = false;
|
|
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;
|
|
|
|
if (changed) {
|
|
persist_store();
|
|
}
|
|
|
|
// uart settings live here, but the CGI handler + form has been moved to the Terminal config page
|
|
serialInit();
|
|
|
|
// initialize user GPIOs
|
|
userGpioInit();
|
|
|
|
system_update_cpu_freq((uint8) (sysconf->overclock ? 160 : 80));
|
|
}
|
|
|
|
void ICACHE_FLASH_ATTR
|
|
sysconf_restore_defaults(void)
|
|
{
|
|
sysconf->uart_parity = PARITY_NONE;
|
|
sysconf->uart_baudrate = BIT_RATE_115200;
|
|
sysconf->uart_stopbits = ONE_STOP_BIT;
|
|
sysconf->config_version = SYSCONF_VERSION;
|
|
sysconf->access_pw[0] = 0;
|
|
sysconf->pwlock = PWLOCK_NONE;
|
|
strcpy((char *)sysconf->access_pw, DEF_ACCESS_PW);
|
|
strcpy((char *)sysconf->access_name, DEF_ACCESS_NAME);
|
|
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;
|
|
}
|
|
|