Skip to content

Commit 71ceede

Browse files
added Preferences interface
1 parent 8027775 commit 71ceede

File tree

2 files changed

+380
-0
lines changed

2 files changed

+380
-0
lines changed

src/Preferences.cpp

Lines changed: 306 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,306 @@
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+
72+
size_t Preferences::putUShort(const char* key, uint16_t value) {
73+
return WiFiDrv::prefPut(key, PT_U16, (uint8_t*) &value, sizeof(value));
74+
75+
}
76+
77+
size_t Preferences::putInt(const char* key, int32_t value) {
78+
return WiFiDrv::prefPut(key, PT_I32, (uint8_t*) &value, sizeof(value));
79+
80+
}
81+
82+
size_t Preferences::putUInt(const char* key, uint32_t value) {
83+
return WiFiDrv::prefPut(key, PT_U32, (uint8_t*) &value, sizeof(value));
84+
}
85+
86+
size_t Preferences::putLong(const char* key, int32_t value) {
87+
return WiFiDrv::prefPut(key, PT_I32, (uint8_t*) &value, sizeof(value));
88+
}
89+
90+
size_t Preferences::putULong(const char* key, uint32_t value) {
91+
return WiFiDrv::prefPut(key, PT_U32, (uint8_t*) &value, sizeof(value));
92+
}
93+
94+
size_t Preferences::putLong64(const char* key, int64_t value) {
95+
return WiFiDrv::prefPut(key, PT_I64, (uint8_t*) &value, sizeof(value));
96+
}
97+
98+
size_t Preferences::putULong64(const char* key, uint64_t value) {
99+
return WiFiDrv::prefPut(key, PT_U64, (uint8_t*) &value, sizeof(value));
100+
}
101+
102+
size_t Preferences::putFloat(const char* key, const float_t value) {
103+
return WiFiDrv::prefPut(key, PT_BLOB, (uint8_t*) &value, sizeof(value));
104+
}
105+
106+
size_t Preferences::putDouble(const char* key, const double_t value) {
107+
return WiFiDrv::prefPut(key, PT_BLOB, (uint8_t*) &value, sizeof(value));
108+
}
109+
110+
size_t Preferences::putBool(const char* key, const bool value) {
111+
return putUChar(key, (uint8_t) (value ? 1 : 0));
112+
}
113+
114+
size_t Preferences::putString(const char* key, const char* value) {
115+
return WiFiDrv::prefPut(key, PT_STR, (uint8_t*) value, strlen(value)+1); // we also send the \0
116+
}
117+
118+
size_t Preferences::putString(const char* key, const String value) {
119+
return putString(key, value.c_str());
120+
}
121+
122+
size_t Preferences::putBytes(const char* key, const void* value, size_t len) {
123+
return WiFiDrv::prefPut(key, PT_BLOB, (uint8_t*) value, len);
124+
}
125+
126+
PreferenceType Preferences::getType(const char* key) {
127+
return WiFiDrv::prefGetType(key);
128+
}
129+
130+
bool Preferences::isKey(const char* key) {
131+
return getType(key) != PT_INVALID;
132+
}
133+
134+
/*
135+
* Get a key value
136+
* */
137+
138+
int8_t Preferences::getChar(const char* key, const int8_t defaultValue) {
139+
int8_t res=0;
140+
141+
if(!isKey(key)) {
142+
return defaultValue;
143+
}
144+
145+
WiFiDrv::prefGet(key, PT_I8, (uint8_t*)&res, sizeof(res));
146+
147+
return res;
148+
}
149+
150+
uint8_t Preferences::getUChar(const char* key, const uint8_t defaultValue) {
151+
uint8_t res=0;
152+
153+
if(!isKey(key)) {
154+
return defaultValue;
155+
}
156+
157+
WiFiDrv::prefGet(key, PT_U8, (uint8_t*)&res, sizeof(res));
158+
159+
return res;
160+
}
161+
162+
int16_t Preferences::getShort(const char* key, const int16_t defaultValue) {
163+
int16_t res=0;
164+
165+
if(!isKey(key)) {
166+
return defaultValue;
167+
}
168+
169+
WiFiDrv::prefGet(key, PT_I16, (uint8_t*)&res, sizeof(res));
170+
171+
return res;
172+
}
173+
174+
uint16_t Preferences::getUShort(const char* key, const uint16_t defaultValue) {
175+
uint16_t res=0;
176+
177+
if(!isKey(key)) {
178+
return defaultValue;
179+
}
180+
181+
WiFiDrv::prefGet(key, PT_U16, (uint8_t*)&res, sizeof(res));
182+
183+
return res;
184+
}
185+
186+
int32_t Preferences::getInt(const char* key, const int32_t defaultValue) {
187+
int32_t res=0;
188+
189+
if(!isKey(key)) {
190+
return defaultValue;
191+
}
192+
193+
WiFiDrv::prefGet(key, PT_I32, (uint8_t*)&res, sizeof(res));
194+
195+
return res;
196+
}
197+
198+
uint32_t Preferences::getUInt(const char* key, const uint32_t defaultValue) {
199+
uint32_t res=0;
200+
201+
if(!isKey(key)) {
202+
return defaultValue;
203+
}
204+
205+
WiFiDrv::prefGet(key, PT_U32, (uint8_t*)&res, sizeof(res));
206+
207+
return res;
208+
}
209+
210+
int32_t Preferences::getLong(const char* key, const int32_t defaultValue) {
211+
212+
if(!isKey(key)) {
213+
return defaultValue;
214+
}
215+
216+
return getInt(key, defaultValue);
217+
}
218+
219+
uint32_t Preferences::getULong(const char* key, const uint32_t defaultValue) {
220+
221+
if(!isKey(key)) {
222+
return defaultValue;
223+
}
224+
225+
return getUInt(key, defaultValue);
226+
}
227+
228+
int64_t Preferences::getLong64(const char* key, const int64_t defaultValue) {
229+
int64_t res=0;
230+
231+
if(!isKey(key)) {
232+
return defaultValue;
233+
}
234+
235+
WiFiDrv::prefGet(key, PT_I64, (uint8_t*)&res, sizeof(res));
236+
237+
return res;
238+
}
239+
240+
uint64_t Preferences::getULong64(const char* key, const uint64_t defaultValue) {
241+
uint64_t res=0;
242+
243+
if(!isKey(key)) {
244+
return defaultValue;
245+
}
246+
247+
WiFiDrv::prefGet(key, PT_U64, (uint8_t*)&res, sizeof(res));
248+
249+
return res;
250+
}
251+
252+
float_t Preferences::getFloat(const char* key, const float_t defaultValue) {
253+
float_t value = defaultValue;
254+
255+
if(!isKey(key)) {
256+
return defaultValue;
257+
}
258+
259+
getBytes(key, (void*) &value, sizeof(float_t));
260+
return value;
261+
}
262+
263+
double_t Preferences::getDouble(const char* key, const double_t defaultValue) {
264+
double_t value = defaultValue;
265+
266+
if(!isKey(key)) {
267+
return defaultValue;
268+
}
269+
270+
getBytes(key, (void*) &value, sizeof(double_t));
271+
return value;
272+
}
273+
274+
bool Preferences::getBool(const char* key, const bool defaultValue) {
275+
276+
if(!isKey(key)) {
277+
return defaultValue;
278+
}
279+
280+
return getUChar(key, defaultValue ? 1 : 0) == 1;
281+
}
282+
283+
size_t Preferences::getString(const char* key, char* value, const size_t maxLen) {
284+
return WiFiDrv::prefGet(key, PT_STR, (uint8_t*)value, maxLen);
285+
}
286+
287+
String Preferences::getString(const char* key, const String defaultValue) { // TODO
288+
Serial.println("This function is not implemented yet");
289+
if(!isKey(key)) {
290+
return defaultValue;
291+
}
292+
293+
return defaultValue;
294+
}
295+
296+
size_t Preferences::getBytesLength(const char* key) {
297+
return WiFiDrv::prefLen(key);
298+
}
299+
300+
size_t Preferences::getBytes(const char* key, void * buf, size_t maxLen) {
301+
return WiFiDrv::prefGet(key, PT_BLOB, (uint8_t*)buf, maxLen);
302+
}
303+
304+
size_t Preferences::freeEntries() {
305+
return WiFiDrv::prefStat();
306+
}

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)