4
4
*/
5
5
6
6
#include < Arduino.h> ;
7
- #include < list > ;
7
+ #include < map > ;
8
8
#include " ArduinoJson.h"
9
9
#include " ESP8266WebServer.h" ;
10
+ #include < string> ;
10
11
11
12
#ifndef _ConfigTool_h
12
13
#define _ConfigTool_h
@@ -16,21 +17,39 @@ struct BaseVar {
16
17
virtual void serialize (JsonObject*) = 0;
17
18
virtual void deserialize (JsonObject*) = 0;
18
19
virtual void reset () = 0;
20
+ virtual String toString () = 0;
21
+ virtual void fromString (String) = 0;
19
22
};
20
23
21
24
template <typename T>
22
25
struct ConfigVar : BaseVar {
23
- T* pointer;
24
- T defaultValue;
25
- ConfigVar (String n, T* p) {
26
+ ConfigVar (String n, T* p) {};
27
+
28
+ void deserialize (JsonObject *json) {};
29
+
30
+ void serialize (JsonObject* json) {};
31
+
32
+ void reset () {};
33
+
34
+ String toString () { return " " ; };
35
+
36
+ void fromString (String) {};
37
+ };
38
+
39
+ template <>
40
+ struct ConfigVar <String> : BaseVar {
41
+ String* pointer;
42
+ String defaultValue;
43
+ ConfigVar (String n, String* p) {
26
44
name = n;
27
45
pointer = p;
28
46
defaultValue = *p;
29
47
};
30
48
31
49
void deserialize (JsonObject *json) {
32
- if (json->containsKey (name) && json->is <T>(name)) {
33
- *pointer = json->get <T>(name);
50
+ if (json->containsKey (name) && json->is <char *>(name)) {
51
+
52
+ *pointer = String{ json->get <char *>(name) };
34
53
json->remove (name);
35
54
}
36
55
}
@@ -42,22 +61,30 @@ struct ConfigVar : BaseVar {
42
61
void reset () {
43
62
*pointer = defaultValue;
44
63
}
64
+
65
+ String toString () {
66
+ return *pointer;
67
+ }
68
+
69
+ void fromString (String value) {
70
+ *pointer = value;
71
+ }
45
72
};
46
73
47
74
template <>
48
- struct ConfigVar <String > : BaseVar {
49
- String * pointer;
50
- String defaultValue;
51
- ConfigVar (String n, String * p) {
75
+ struct ConfigVar <bool > : BaseVar {
76
+ bool * pointer;
77
+ bool defaultValue;
78
+ ConfigVar (String n, bool * p) {
52
79
name = n;
53
80
pointer = p;
54
81
defaultValue = *p;
55
82
};
56
83
57
84
void deserialize (JsonObject *json) {
58
- if (json->containsKey (name) && json->is <char * >(name)) {
85
+ if (json->containsKey (name) && json->is <bool >(name)) {
59
86
60
- *pointer = String{ json->get <char * >(name) } ;
87
+ *pointer = json->get <bool >(name);
61
88
json->remove (name);
62
89
}
63
90
}
@@ -69,20 +96,63 @@ struct ConfigVar<String> : BaseVar {
69
96
void reset () {
70
97
*pointer = defaultValue;
71
98
}
99
+
100
+ String toString () {
101
+ return *pointer ? " true" : " false" ;
102
+ }
103
+
104
+ void fromString (String value) {
105
+ *pointer = value == " true" ;
106
+ }
107
+ };
108
+
109
+ template <>
110
+ struct ConfigVar <int > : BaseVar {
111
+ int * pointer;
112
+ int defaultValue;
113
+ ConfigVar (String n, int * p) {
114
+ name = n;
115
+ pointer = p;
116
+ defaultValue = *p;
117
+ };
118
+
119
+ void deserialize (JsonObject *json) {
120
+ if (json->containsKey (name) && json->is <int >(name)) {
121
+ *pointer = json->get <int >(name);
122
+ json->remove (name);
123
+ }
124
+ }
125
+
126
+ void serialize (JsonObject* json) {
127
+ json->set (name, *pointer);
128
+ }
129
+
130
+ void reset () {
131
+ *pointer = defaultValue;
132
+ }
133
+
134
+ String toString () {
135
+ return String (*pointer);
136
+ }
137
+
138
+ void fromString (String value) {
139
+ *pointer = value.toInt ();
140
+ }
72
141
};
73
142
74
143
struct ConfigTool {
75
144
public:
76
145
template <typename T>
77
146
void addVariable (String name, T* pointer) {
78
- variables_. push_back (new ConfigVar<T>(name, pointer));
147
+ variables_[name] = (new ConfigVar<T>(name, pointer));
79
148
};
80
149
void load ();
81
150
void save ();
82
151
std::function<void ()> getWebHandler (ESP8266WebServer*);
83
152
void reset ();
84
153
private:
85
- std::list<BaseVar*> variables_;
154
+ std::map<String, BaseVar*> variables_;
155
+ String createWebPage (bool );
86
156
};
87
157
88
158
#endif
0 commit comments