Skip to content

Commit bdb8a92

Browse files
added Preferences interface
1 parent 386b898 commit bdb8a92

File tree

2 files changed

+382
-0
lines changed

2 files changed

+382
-0
lines changed

src/Preferences.cpp

Lines changed: 308 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,308 @@
1+
// Copyright 2015-2021 Espressif Systems (Shanghai) PTE LTD
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
#include "Preferences.h"
16+
#include "utility/wifi_drv.h"
17+
18+
using namespace std;
19+
20+
Preferences::Preferences() {
21+
22+
}
23+
24+
Preferences::~Preferences() {
25+
end();
26+
}
27+
28+
bool Preferences::begin(const char * name, bool readOnly, const char* partition_label){
29+
WiFiDrv::wifiDriverInit();
30+
return WiFiDrv::prefBegin(name, readOnly, partition_label);
31+
}
32+
33+
void Preferences::end() {
34+
WiFiDrv::prefEnd();
35+
}
36+
37+
/*
38+
* Clear all keys in opened preferences
39+
* */
40+
41+
bool Preferences::clear() {
42+
43+
return WiFiDrv::prefClear();
44+
}
45+
46+
/*
47+
* Remove a key
48+
* */
49+
50+
bool Preferences::remove(const char * key) {
51+
52+
return WiFiDrv::prefRemove(key);
53+
}
54+
55+
/*
56+
* Put a key value
57+
* */
58+
59+
size_t Preferences::putChar(const char* key, int8_t value) {
60+
return WiFiDrv::prefPut(key, PT_I8, (uint8_t*) &value, sizeof(value));
61+
}
62+
63+
size_t Preferences::putUChar(const char* key, uint8_t value) {
64+
return WiFiDrv::prefPut(key, PT_U8, (uint8_t*) &value, sizeof(value));
65+
}
66+
67+
size_t Preferences::putShort(const char* key, int16_t value) {
68+
return WiFiDrv::prefPut(key, PT_I16, (uint8_t*) &value, sizeof(value));
69+
}
70+
71+
size_t Preferences::putUShort(const char* key, uint16_t value) {
72+
return WiFiDrv::prefPut(key, PT_U16, (uint8_t*) &value, sizeof(value));
73+
}
74+
75+
size_t Preferences::putInt(const char* key, int32_t value) {
76+
return WiFiDrv::prefPut(key, PT_I32, (uint8_t*) &value, sizeof(value));
77+
}
78+
79+
size_t Preferences::putUInt(const char* key, uint32_t value) {
80+
return WiFiDrv::prefPut(key, PT_U32, (uint8_t*) &value, sizeof(value));
81+
}
82+
83+
size_t Preferences::putLong(const char* key, int32_t value) {
84+
return WiFiDrv::prefPut(key, PT_I32, (uint8_t*) &value, sizeof(value));
85+
}
86+
87+
size_t Preferences::putULong(const char* key, uint32_t value) {
88+
return WiFiDrv::prefPut(key, PT_U32, (uint8_t*) &value, sizeof(value));
89+
}
90+
91+
size_t Preferences::putLong64(const char* key, int64_t value) {
92+
return WiFiDrv::prefPut(key, PT_I64, (uint8_t*) &value, sizeof(value));
93+
}
94+
95+
size_t Preferences::putULong64(const char* key, uint64_t value) {
96+
return WiFiDrv::prefPut(key, PT_U64, (uint8_t*) &value, sizeof(value));
97+
}
98+
99+
size_t Preferences::putFloat(const char* key, const float_t value) {
100+
return WiFiDrv::prefPut(key, PT_BLOB, (uint8_t*) &value, sizeof(value));
101+
}
102+
103+
size_t Preferences::putDouble(const char* key, const double_t value) {
104+
return WiFiDrv::prefPut(key, PT_BLOB, (uint8_t*) &value, sizeof(value));
105+
}
106+
107+
size_t Preferences::putBool(const char* key, const bool value) {
108+
return putUChar(key, (uint8_t) (value ? 1 : 0));
109+
}
110+
111+
size_t Preferences::putString(const char* key, const char* value) {
112+
return WiFiDrv::prefPut(key, PT_STR, (uint8_t*) value, strlen(value)+1); // we also send the \0
113+
}
114+
115+
size_t Preferences::putString(const char* key, const String value) {
116+
return putString(key, value.c_str());
117+
}
118+
119+
size_t Preferences::putBytes(const char* key, const void* value, size_t len) {
120+
return WiFiDrv::prefPut(key, PT_BLOB, (uint8_t*) value, len);
121+
}
122+
123+
PreferenceType Preferences::getType(const char* key) {
124+
return WiFiDrv::prefGetType(key);
125+
}
126+
127+
bool Preferences::isKey(const char* key) {
128+
return getType(key) != PT_INVALID;
129+
}
130+
131+
/*
132+
* Get a key value
133+
* */
134+
135+
int8_t Preferences::getChar(const char* key, const int8_t defaultValue) {
136+
int8_t res=0;
137+
138+
if(!isKey(key)) {
139+
return defaultValue;
140+
}
141+
142+
WiFiDrv::prefGet(key, PT_I8, (uint8_t*)&res, sizeof(res));
143+
144+
return res;
145+
}
146+
147+
uint8_t Preferences::getUChar(const char* key, const uint8_t defaultValue) {
148+
uint8_t res=0;
149+
150+
if(!isKey(key)) {
151+
return defaultValue;
152+
}
153+
154+
WiFiDrv::prefGet(key, PT_U8, (uint8_t*)&res, sizeof(res));
155+
156+
return res;
157+
}
158+
159+
int16_t Preferences::getShort(const char* key, const int16_t defaultValue) {
160+
int16_t res=0;
161+
162+
if(!isKey(key)) {
163+
return defaultValue;
164+
}
165+
166+
WiFiDrv::prefGet(key, PT_I16, (uint8_t*)&res, sizeof(res));
167+
168+
return res;
169+
}
170+
171+
uint16_t Preferences::getUShort(const char* key, const uint16_t defaultValue) {
172+
uint16_t res=0;
173+
174+
if(!isKey(key)) {
175+
return defaultValue;
176+
}
177+
178+
WiFiDrv::prefGet(key, PT_U16, (uint8_t*)&res, sizeof(res));
179+
180+
return res;
181+
}
182+
183+
int32_t Preferences::getInt(const char* key, const int32_t defaultValue) {
184+
int32_t res=0;
185+
186+
if(!isKey(key)) {
187+
return defaultValue;
188+
}
189+
190+
WiFiDrv::prefGet(key, PT_I32, (uint8_t*)&res, sizeof(res));
191+
192+
return res;
193+
}
194+
195+
uint32_t Preferences::getUInt(const char* key, const uint32_t defaultValue) {
196+
uint32_t res=0;
197+
198+
if(!isKey(key)) {
199+
return defaultValue;
200+
}
201+
202+
WiFiDrv::prefGet(key, PT_U32, (uint8_t*)&res, sizeof(res));
203+
204+
return res;
205+
}
206+
207+
int32_t Preferences::getLong(const char* key, const int32_t defaultValue) {
208+
209+
if(!isKey(key)) {
210+
return defaultValue;
211+
}
212+
213+
return getInt(key, defaultValue);
214+
}
215+
216+
uint32_t Preferences::getULong(const char* key, const uint32_t defaultValue) {
217+
218+
if(!isKey(key)) {
219+
return defaultValue;
220+
}
221+
222+
return getUInt(key, defaultValue);
223+
}
224+
225+
int64_t Preferences::getLong64(const char* key, const int64_t defaultValue) {
226+
int64_t res=0;
227+
228+
if(!isKey(key)) {
229+
return defaultValue;
230+
}
231+
232+
WiFiDrv::prefGet(key, PT_I64, (uint8_t*)&res, sizeof(res));
233+
234+
return res;
235+
}
236+
237+
uint64_t Preferences::getULong64(const char* key, const uint64_t defaultValue) {
238+
uint64_t res=0;
239+
240+
if(!isKey(key)) {
241+
return defaultValue;
242+
}
243+
244+
WiFiDrv::prefGet(key, PT_U64, (uint8_t*)&res, sizeof(res));
245+
246+
return res;
247+
}
248+
249+
float_t Preferences::getFloat(const char* key, const float_t defaultValue) {
250+
float_t value = defaultValue;
251+
252+
if(!isKey(key)) {
253+
return defaultValue;
254+
}
255+
256+
getBytes(key, (void*) &value, sizeof(float_t));
257+
return value;
258+
}
259+
260+
double_t Preferences::getDouble(const char* key, const double_t defaultValue) {
261+
double_t value = defaultValue;
262+
263+
if(!isKey(key)) {
264+
return defaultValue;
265+
}
266+
267+
getBytes(key, (void*) &value, sizeof(double_t));
268+
return value;
269+
}
270+
271+
bool Preferences::getBool(const char* key, const bool defaultValue) {
272+
273+
if(!isKey(key)) {
274+
return defaultValue;
275+
}
276+
277+
return getUChar(key, defaultValue ? 1 : 0) == 1;
278+
}
279+
280+
size_t Preferences::getString(const char* key, char* value, const size_t maxLen) {
281+
return WiFiDrv::prefGet(key, PT_STR, (uint8_t*)value, maxLen);
282+
}
283+
284+
String Preferences::getString(const char* key, const String defaultValue) {
285+
size_t len = getBytesLength(key);
286+
char *str = new char[len+1];
287+
288+
getString(key, str, len+1);
289+
str[len] = '\0';
290+
291+
String res(str);
292+
delete str;
293+
str = nullptr;
294+
295+
return res;
296+
}
297+
298+
size_t Preferences::getBytesLength(const char* key) {
299+
return WiFiDrv::prefLen(key);
300+
}
301+
302+
size_t Preferences::getBytes(const char* key, void * buf, size_t maxLen) {
303+
return WiFiDrv::prefGet(key, PT_BLOB, (uint8_t*)buf, maxLen);
304+
}
305+
306+
size_t Preferences::freeEntries() {
307+
return WiFiDrv::prefStat();
308+
}

src/Preferences.h

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
// http://www.apache.org/licenses/LICENSE-2.0
7+
//
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
14+
#ifndef _PREFERENCES_H_
15+
#define _PREFERENCES_H_
16+
17+
#include "Arduino.h"
18+
19+
typedef enum {
20+
PT_I8, PT_U8, PT_I16, PT_U16, PT_I32, PT_U32, PT_I64, PT_U64, PT_STR, PT_BLOB, PT_INVALID
21+
} PreferenceType;
22+
23+
#ifdef ARDUINO_ARCH_MEGAAVR
24+
typedef float float_t;
25+
typedef double double_t;
26+
#endif
27+
28+
class Preferences {
29+
public:
30+
Preferences();
31+
~Preferences();
32+
bool begin(const char * name, bool readOnly=false, const char* partition_label=NULL);
33+
void end();
34+
bool clear();
35+
bool remove(const char * key);
36+
size_t putChar(const char* key, int8_t value);
37+
size_t putUChar(const char* key, uint8_t value);
38+
size_t putShort(const char* key, int16_t value);
39+
size_t putUShort(const char* key, uint16_t value);
40+
size_t putInt(const char* key, int32_t value);
41+
size_t putUInt(const char* key, uint32_t value);
42+
size_t putLong(const char* key, int32_t value);
43+
size_t putULong(const char* key, uint32_t value);
44+
size_t putLong64(const char* key, int64_t value);
45+
size_t putULong64(const char* key, uint64_t value);
46+
size_t putFloat(const char* key, float_t value);
47+
size_t putDouble(const char* key, double_t value);
48+
size_t putBool(const char* key, bool value);
49+
size_t putString(const char* key, const char* value);
50+
size_t putString(const char* key, String value);
51+
size_t putBytes(const char* key, const void* value, size_t len);
52+
bool isKey(const char* key);
53+
PreferenceType getType(const char* key);
54+
int8_t getChar(const char* key, int8_t defaultValue = 0);
55+
uint8_t getUChar(const char* key, uint8_t defaultValue = 0);
56+
int16_t getShort(const char* key, int16_t defaultValue = 0);
57+
uint16_t getUShort(const char* key, uint16_t defaultValue = 0);
58+
int32_t getInt(const char* key, int32_t defaultValue = 0);
59+
uint32_t getUInt(const char* key, uint32_t defaultValue = 0);
60+
int32_t getLong(const char* key, int32_t defaultValue = 0);
61+
uint32_t getULong(const char* key, uint32_t defaultValue = 0);
62+
int64_t getLong64(const char* key, int64_t defaultValue = 0);
63+
uint64_t getULong64(const char* key, uint64_t defaultValue = 0);
64+
float_t getFloat(const char* key, float_t defaultValue = NAN);
65+
double_t getDouble(const char* key, double_t defaultValue = NAN);
66+
bool getBool(const char* key, bool defaultValue = false);
67+
size_t getString(const char* key, char* value, size_t maxLen);
68+
String getString(const char* key, String defaultValue = String());
69+
size_t getBytesLength(const char* key);
70+
size_t getBytes(const char* key, void * buf, size_t maxLen);
71+
size_t freeEntries();
72+
};
73+
74+
#endif

0 commit comments

Comments
 (0)