Implemented user pages

pull/193/head
Karai Csaba 9 years ago committed by Thorsten von Eicken
parent 159f075e06
commit 5dc9c4f934
  1. 17
      examples/arduino/EspLinkSample/UserPage.ino
  2. 28
      examples/arduino/EspLinkSample/WebServer.cpp
  3. 2
      examples/arduino/EspLinkSample/WebServer.h
  4. 9
      html/userpage.js
  5. 2
      web-server/web-server.c

@ -8,6 +8,9 @@
#define POS_MAGIC 0 #define POS_MAGIC 0
#define POS_FIRST_NAME (POS_MAGIC + 2) #define POS_FIRST_NAME (POS_MAGIC + 2)
#define POS_LAST_NAME (POS_FIRST_NAME + MAX_STR_LEN) #define POS_LAST_NAME (POS_FIRST_NAME + MAX_STR_LEN)
#define POS_AGE (POS_LAST_NAME + MAX_STR_LEN)
#define POS_GENDER (POS_AGE+1)
#define POS_NOTIFICATIONS (POS_GENDER+1)
void userInit() void userInit()
{ {
@ -20,6 +23,9 @@ void userInit()
EEPROM.put(POS_MAGIC, magic); EEPROM.put(POS_MAGIC, magic);
EEPROM.update(POS_FIRST_NAME, 0); EEPROM.update(POS_FIRST_NAME, 0);
EEPROM.update(POS_LAST_NAME, 0); EEPROM.update(POS_LAST_NAME, 0);
EEPROM.update(POS_AGE, 0);
EEPROM.update(POS_GENDER, 'f');
EEPROM.update(POS_NOTIFICATIONS, 0);
} }
} }
@ -51,15 +57,24 @@ void userHtmlCallback(WebServerCommand command, char * data, int dataLen)
userWriteStr(webServer.getArgString(), POS_FIRST_NAME); userWriteStr(webServer.getArgString(), POS_FIRST_NAME);
if( strcmp_P(data, PSTR("last_name")) == 0 ) if( strcmp_P(data, PSTR("last_name")) == 0 )
userWriteStr(webServer.getArgString(), POS_LAST_NAME); userWriteStr(webServer.getArgString(), POS_LAST_NAME);
if( strcmp_P(data, PSTR("age")) == 0 )
EEPROM.update(POS_AGE, (uint8_t)webServer.getArgInt());
if( strcmp_P(data, PSTR("gender")) == 0 )
EEPROM.update(POS_GENDER, (strcmp_P(webServer.getArgString(), PSTR("male")) == 0 ? 'm' : 'f'));
if( strcmp_P(data, PSTR("notifications")) == 0 )
EEPROM.update(POS_NOTIFICATIONS, (uint8_t)webServer.getArgBoolean());
break; break;
case LOAD: case LOAD:
{ {
char buf[MAX_STR_LEN]; char buf[MAX_STR_LEN];
webServer.setArgNum(2); webServer.setArgNum(5);
userReadStr( buf, POS_FIRST_NAME ); userReadStr( buf, POS_FIRST_NAME );
webServer.setArgString("first_name", buf); webServer.setArgString("first_name", buf);
userReadStr( buf, POS_LAST_NAME ); userReadStr( buf, POS_LAST_NAME );
webServer.setArgString("last_name", buf); webServer.setArgString("last_name", buf);
webServer.setArgInt("age", (uint8_t)EEPROM[POS_AGE]);
webServer.setArgStringP("gender", (EEPROM[POS_GENDER] == 'm') ? PSTR("male") : PSTR("female"));
webServer.setArgBoolean("notifications", EEPROM[POS_NOTIFICATIONS] != 0);
} }
break; break;
case REFRESH: case REFRESH:

@ -162,6 +162,21 @@ void WebServer::setArgStringP(const char * name, const char * value)
args_to_send--; args_to_send--;
} }
void WebServer::setArgBoolean(const char * name, uint8_t value)
{
if( args_to_send <= 0 )
return;
uint8_t nlen = strlen(name);
char buf[nlen + 4];
buf[0] = WEB_BOOLEAN;
strcpy(buf+1, name);
buf[2 + nlen] = value;
espLink.sendPacketArg(nlen+3, (uint8_t *)buf);
args_to_send--;
}
void WebServer::setArgJson(const char * name, const char * value) void WebServer::setArgJson(const char * name, const char * value)
{ {
if( args_to_send <= 0 ) if( args_to_send <= 0 )
@ -203,3 +218,16 @@ char * WebServer::getArgString()
return value_ptr; return value_ptr;
} }
uint8_t WebServer::getArgBoolean()
{
if( strcmp_P(value_ptr, PSTR("on")) == 0 )
return 1;
if( strcmp_P(value_ptr, PSTR("true")) == 0 )
return 1;
if( strcmp_P(value_ptr, PSTR("yes")) == 0 )
return 1;
if( strcmp_P(value_ptr, PSTR("1")) == 0 )
return 1;
return 0;
}

@ -76,9 +76,11 @@ class WebServer
void setArgJson(const char * name, const char * value); void setArgJson(const char * name, const char * value);
void setArgString(const char * name, const char * value); void setArgString(const char * name, const char * value);
void setArgStringP(const char * name, const char * value); void setArgStringP(const char * name, const char * value);
void setArgBoolean(const char * name, uint8_t value);
int32_t getArgInt(); int32_t getArgInt();
char * getArgString(); char * getArgString();
uint8_t getArgBoolean();
}; };
#endif /* WEB_SERVER_H */ #endif /* WEB_SERVER_H */

@ -21,7 +21,14 @@ function notifyResponse( data )
} }
else if( el.type == "checkbox" ) else if( el.type == "checkbox" )
{ {
el.checked = data[v] == "on"; if( data[v] == "on" )
el.checked = true;
else if( data[v] == "off" )
el.checked = false;
else if( data[v] == true )
el.checked = true;
else
el.checked = false;
} }
else else
{ {

@ -310,7 +310,7 @@ int ICACHE_FLASH_ATTR WEB_CgiJsonHook(HttpdConnData *connData)
} }
break; break;
case WEB_BOOLEAN: case WEB_BOOLEAN:
if( value ) { if( *value ) {
os_memcpy(jsonBuf + jsonPtr, "true", 4); os_memcpy(jsonBuf + jsonPtr, "true", 4);
jsonPtr += 4; jsonPtr += 4;
} else { } else {

Loading…
Cancel
Save