parent
fbd4693035
commit
cabd42f2b4
@ -1 +1 @@ |
|||||||
Subproject commit d2fabc40f1874cabd7f7ceca690a5874887c3c5d |
Subproject commit 32c889b714dae859f51e6b46829fd85be59d9ed0 |
@ -0,0 +1,3 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
|
||||||
|
xtensa-lx106-elf-gcc -E -Iuser -Ilibesphttpd/include -Iesp_iot_sdk_v1.5.2/include -Iinclude $@ |
@ -0,0 +1,99 @@ |
|||||||
|
//
|
||||||
|
// Created by MightyPork on 2017/10/22.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "config_xmacros.h" |
||||||
|
#include "cgi_logging.h" |
||||||
|
|
||||||
|
void ICACHE_FLASH_ATTR xget_dec(char *buff, u32 value) |
||||||
|
{ |
||||||
|
sprintf(buff, "%d", value); |
||||||
|
} |
||||||
|
|
||||||
|
void ICACHE_FLASH_ATTR xget_bool(char *buff, bool value) |
||||||
|
{ |
||||||
|
sprintf(buff, "%d", value?1:0); |
||||||
|
} |
||||||
|
|
||||||
|
void ICACHE_FLASH_ATTR xget_ustring(char *buff, const u8 *value) |
||||||
|
{ |
||||||
|
sprintf(buff, "%s", (const char *) value); |
||||||
|
} |
||||||
|
|
||||||
|
void ICACHE_FLASH_ATTR xget_string(char *buff, const char *value) |
||||||
|
{ |
||||||
|
sprintf(buff, "%s", value); |
||||||
|
} |
||||||
|
|
||||||
|
void ICACHE_FLASH_ATTR xget_ip(char *buff, const struct ip_addr *value) |
||||||
|
{ |
||||||
|
sprintf(buff, IPSTR, GOOD_IP2STR(value->addr)); |
||||||
|
} |
||||||
|
|
||||||
|
// ------------- XSET -------------
|
||||||
|
|
||||||
|
enum xset_result ICACHE_FLASH_ATTR |
||||||
|
xset_ip(const char *name, struct ip_addr *field, const char *buff, const void *arg) |
||||||
|
{ |
||||||
|
cgi_dbg("Setting %s = %s", name, buff); |
||||||
|
u32 ip = ipaddr_addr(buff); |
||||||
|
if (ip != 0 && ip != 0xFFFFFFFFUL) { |
||||||
|
if (field->addr != ip) { |
||||||
|
field->addr = ip; |
||||||
|
return XSET_SET; |
||||||
|
} |
||||||
|
return XSET_UNCHANGED; |
||||||
|
} else { |
||||||
|
cgi_warn("Bad IP: %s", buff); |
||||||
|
return XSET_FAIL; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
enum xset_result ICACHE_FLASH_ATTR |
||||||
|
xset_bool(const char *name, bool *field, const char *buff, const void *arg) |
||||||
|
{ |
||||||
|
cgi_dbg("Setting %s = %s", name, buff); |
||||||
|
bool enable = (atoi(buff) != 0); |
||||||
|
|
||||||
|
if (*field != enable) { |
||||||
|
*field = enable; |
||||||
|
return XSET_SET; |
||||||
|
} |
||||||
|
return XSET_UNCHANGED; |
||||||
|
} |
||||||
|
|
||||||
|
enum xset_result ICACHE_FLASH_ATTR |
||||||
|
xset_u8(const char *name, u8 *field, const char *buff, const void *arg) |
||||||
|
{ |
||||||
|
cgi_dbg("Setting %s = %s", name, buff); |
||||||
|
u32 val = (u32) atoi(buff); |
||||||
|
|
||||||
|
if (val <= 255) { |
||||||
|
if (*field != val) { |
||||||
|
*field = (u8) val; |
||||||
|
return XSET_SET; |
||||||
|
} |
||||||
|
return XSET_UNCHANGED; |
||||||
|
} else { |
||||||
|
cgi_warn("Bad value, max 255: %s", buff); |
||||||
|
return XSET_FAIL; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
enum xset_result ICACHE_FLASH_ATTR |
||||||
|
xset_string(const char *name, char *field, const char *buff, const void *arg) |
||||||
|
{ |
||||||
|
cgi_dbg("Setting %s = %s", name, buff); |
||||||
|
u32 maxlen = (u32) arg; |
||||||
|
|
||||||
|
if (arg > 0 && (u32)strlen(buff) > maxlen) { |
||||||
|
cgi_warn("String too long, max %d", maxlen); |
||||||
|
return XSET_FAIL; |
||||||
|
} |
||||||
|
|
||||||
|
if (!streq(field, buff)) { |
||||||
|
strncpy_safe(field, buff, (u32)arg); |
||||||
|
return XSET_SET; |
||||||
|
} |
||||||
|
return XSET_UNCHANGED; |
||||||
|
} |
@ -0,0 +1,85 @@ |
|||||||
|
//
|
||||||
|
// Created by MightyPork on 2017/10/22.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef ESPTERM_CONFIG_XMACROS_H |
||||||
|
#define ESPTERM_CONFIG_XMACROS_H |
||||||
|
|
||||||
|
#include <esp8266.h> |
||||||
|
#include <helpers.h> |
||||||
|
|
||||||
|
#define XJOIN(a, b) a##b |
||||||
|
|
||||||
|
/**Do nothing xnotify */ |
||||||
|
#define xnoop() |
||||||
|
|
||||||
|
/**
|
||||||
|
* XGET interface |
||||||
|
* |
||||||
|
* @param buff - buffer where the value should be printed |
||||||
|
* @param value - value to render to the buffer |
||||||
|
*/ |
||||||
|
|
||||||
|
static inline bool xget_dummy(char *buff, u32 value) |
||||||
|
{ |
||||||
|
sprintf(buff, "unused %d", value); |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
void xget_dec(char *buff, u32 value); |
||||||
|
void xget_bool(char *buff, bool value); |
||||||
|
void xget_ustring(char *buff, const u8 *value); |
||||||
|
void xget_string(char *buff, const char *value); |
||||||
|
void xget_ip(char *buff, const struct ip_addr *value); |
||||||
|
void xget_dhcp(char *buff, const struct dhcps_lease *value); |
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XSET interface |
||||||
|
* |
||||||
|
* @param name - field name (for debug) |
||||||
|
* @param field - pointer to the target field |
||||||
|
* @param buff - field with the value to be set |
||||||
|
* @param arg - arbitrary argument, used to modify behavior |
||||||
|
* |
||||||
|
* @return xset_result |
||||||
|
*/ |
||||||
|
|
||||||
|
enum xset_result { |
||||||
|
XSET_FAIL = 0, |
||||||
|
XSET_SET = 1, |
||||||
|
XSET_UNCHANGED = 2 |
||||||
|
}; |
||||||
|
|
||||||
|
// Dummy for unimplemented setters
|
||||||
|
static inline enum xset_result xset_dummy(const char *name, void *field, const char *buff, const void *arg) |
||||||
|
{ |
||||||
|
return XSET_UNCHANGED; |
||||||
|
} |
||||||
|
|
||||||
|
enum xset_result xset_ip(const char *name, struct ip_addr *field, const char *buff, const void *arg); |
||||||
|
enum xset_result xset_bool(const char *name, bool *field, const char *buff, const void *arg); |
||||||
|
enum xset_result xset_u8(const char *name, u8 *field, const char *buff, const void *arg); |
||||||
|
|
||||||
|
/**
|
||||||
|
* @param arg - max string length |
||||||
|
*/ |
||||||
|
enum xset_result xset_string(const char *name, char *field, const char *buff, const void *arg); |
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper template macro for CGI functions that load GET args to structs using XTABLE |
||||||
|
* |
||||||
|
* If 'name' is found in connData->getArgs, xset() is called. |
||||||
|
* If the result is SET, xnotify() is fired. Else, 'name,' is appended to the redir_url buffer. |
||||||
|
*/ |
||||||
|
#define XSET_CGI_FUNC(type, name, suffix, deref, xget, cast, xset, xsarg, xnotify) \ |
||||||
|
if (GET_ARG(#name)) { \
|
||||||
|
enum xset_result res = xset(#name, cast &wificonf->name, buff, (const void*) (xsarg)); \
|
||||||
|
if (res == XSET_SET) { xnotify(); } \
|
||||||
|
else if (res == XSET_FAIL) { redir_url += sprintf(redir_url, #name","); } \
|
||||||
|
} |
||||||
|
|
||||||
|
#define XGET_CGI_FUNC(type, name, suffix, deref, xget, cast, xset, xsarg, xnotify) \ |
||||||
|
if (streq(token, #name)) xget(buff, deref wificonf->name); |
||||||
|
|
||||||
|
#endif //ESPTERM_CONFIG_XMACROS_H
|
Loading…
Reference in new issue