Gbox 4.20
Grow box automation and monitoring - <a href='https://sites.google.com/site/growboxguy/'>https://sites.google.com/site/growboxguy/</a>
 
Loading...
Searching...
No Matches
UserPage.ino
Go to the documentation of this file.
1#include <EEPROM.h>
2#include <ELClientWebServer.h>
3
4#define MAGIC 0xABEF
5#define MAX_STR_LEN 32
6
7// EEPROM content
8#define EEPROM_POS_MAGIC 0
9#define EEPROM_POS_FIRST_NAME (EEPROM_POS_MAGIC + 2)
10#define EEPROM_POS_LAST_NAME (EEPROM_POS_FIRST_NAME + MAX_STR_LEN)
11#define EEPROM_POS_AGE (EEPROM_POS_LAST_NAME + MAX_STR_LEN)
12#define EEPROM_POS_GENDER (EEPROM_POS_AGE+1)
13#define EEPROM_POS_NOTIFICATIONS (EEPROM_POS_GENDER+1)
14
15// write a string to EEPROM
16void userWriteStr(char * str, int ndx)
17{
18 for(uint8_t i=0; i < MAX_STR_LEN-1; i++)
19 {
20 EEPROM.update(ndx + i, str[i]);
21 if( str[i] == 0 )
22 break;
23 }
24 EEPROM.update(ndx + MAX_STR_LEN - 1, 0);
25}
26
27
28// read a string from EEPROM
29void userReadStr(char * str, int ndx)
30{
31 for(uint8_t i=0; i < MAX_STR_LEN; i++)
32 {
33 str[i] = EEPROM[ndx + i];
34 }
35}
36
37
38// setting the value of a field
39//
40// handle data as fast as possible
41// - huge HTML forms can arrive in multiple packets
42// - if this method is slow, UART receive buffer may overrun
43void userSetFieldCb(const char * field)
44{
45 String fld = field;
46 if( fld == F("first_name"))
47 userWriteStr(webServer.getArgString(), EEPROM_POS_FIRST_NAME);
48 else if( fld == F("last_name"))
49 userWriteStr(webServer.getArgString(), EEPROM_POS_LAST_NAME);
50 else if( fld == F("age"))
51 EEPROM.update(EEPROM_POS_AGE, (uint8_t)webServer.getArgInt());
52 else if( fld == F("gender"))
53 {
54 String gender = webServer.getArgString();
55 EEPROM.update(EEPROM_POS_GENDER, (gender == F("male")) ? 'm' : 'f');
56 }
57 else if( fld == F("notifications"))
58 EEPROM.update(EEPROM_POS_NOTIFICATIONS, webServer.getArgBoolean());
59}
60
61// called at page loading
62void userLoadCb(const char * url)
63{
64 char buf[MAX_STR_LEN];
66 webServer.setArgString(F("first_name"), buf);
68 webServer.setArgString(F("last_name"), buf);
69 webServer.setArgInt(F("age"), (uint8_t)EEPROM[EEPROM_POS_AGE]);
70 webServer.setArgString(F("gender"), (EEPROM[EEPROM_POS_GENDER] == 'm') ? F("male") : F("female"));
71 webServer.setArgBoolean(F("notifications"), EEPROM[EEPROM_POS_NOTIFICATIONS] != 0);
72}
73
74// initialization
76{
77 uint16_t magic;
78 EEPROM.get(EEPROM_POS_MAGIC, magic);
79
80 if( magic != MAGIC ) // EEPROM is uninitialized?
81 {
82 magic = MAGIC;
83 // set default values
84 EEPROM.put(EEPROM_POS_MAGIC, magic);
85 EEPROM.update(EEPROM_POS_FIRST_NAME, 0);
86 EEPROM.update(EEPROM_POS_LAST_NAME, 0);
87 EEPROM.update(EEPROM_POS_AGE, 0);
88 EEPROM.update(EEPROM_POS_GENDER, 'f');
89 EEPROM.update(EEPROM_POS_NOTIFICATIONS, 0);
90 }
91
92 URLHandler *userPageHandler = webServer.createURLHandler(F("/User.html.json"));
93 userPageHandler->setFieldCb.attach(userSetFieldCb);
94 userPageHandler->loadCb.attach(userLoadCb);
95}
Definitions for ELClientWebServer.
void userInit()
Definition UserPage.ino:75
#define EEPROM_POS_AGE
Definition UserPage.ino:11
#define EEPROM_POS_FIRST_NAME
Definition UserPage.ino:9
void userLoadCb(const char *url)
Definition UserPage.ino:62
#define EEPROM_POS_MAGIC
Definition UserPage.ino:8
#define MAX_STR_LEN
Definition UserPage.ino:5
#define EEPROM_POS_GENDER
Definition UserPage.ino:12
void userWriteStr(char *str, int ndx)
Definition UserPage.ino:16
#define MAGIC
Definition UserPage.ino:4
#define EEPROM_POS_LAST_NAME
Definition UserPage.ino:10
void userSetFieldCb(const char *field)
Definition UserPage.ino:43
#define EEPROM_POS_NOTIFICATIONS
Definition UserPage.ino:13
void userReadStr(char *str, int ndx)
Definition UserPage.ino:29
void attach(T *item, retT(T::*method)(argT))
Definition FP.h:147
FP< void, char * > setFieldCb
callback for setting a field from a HTML form
FP< void, char * > loadCb
Callback for HTML page loading.