33 #ifndef CONTIKI_SETTINGS_H_
34 #define CONTIKI_SETTINGS_H_
97 SETTINGS_STATUS_OK = 0,
98 SETTINGS_STATUS_FAILURE,
99 SETTINGS_STATUS_INVALID_ARGUMENT,
100 SETTINGS_STATUS_NOT_FOUND,
101 SETTINGS_STATUS_OUT_OF_SPACE,
102 SETTINGS_STATUS_VALUE_TOO_BIG,
103 SETTINGS_STATUS_UNIMPLEMENTED,
106 typedef uint16_t settings_key_t;
108 typedef uint16_t settings_length_t;
114 #define TCC(a,b) ((a)+(b)*256)
117 #define SETTINGS_KEY_EUI64 TCC('E','8')
118 #define SETTINGS_KEY_EUI48 TCC('E','6')
119 #define SETTINGS_KEY_CHANNEL TCC('C','H')
120 #define SETTINGS_KEY_TXPOWER TCC('T','P')
121 #define SETTINGS_KEY_PAN_ID TCC('P','N')
122 #define SETTINGS_KEY_PAN_ADDR TCC('P','A')
123 #define SETTINGS_KEY_AES128KEY TCC('S','K')
124 #define SETTINGS_KEY_AES128ENABLED TCC('S','E')
125 #define SETTINGS_KEY_HOSTNAME TCC('H','N')
126 #define SETTINGS_KEY_DOMAINNAME TCC('D','N')
131 #define SETTINGS_KEY_RDC_INDEX TCC('R','D')
132 #define SETTINGS_KEY_CHANNEL_MASK TCC('C','M')
138 #define SETTINGS_LAST_INDEX 0xFF
140 #define SETTINGS_INVALID_KEY 0xFFFF
142 #define SETTINGS_INVALID_ITER EEPROM_NULL
144 #ifndef SETTINGS_CONF_SUPPORT_LARGE_VALUES
145 #define SETTINGS_CONF_SUPPORT_LARGE_VALUES 0
148 #if SETTINGS_CONF_SUPPORT_LARGE_VALUES
149 #define SETTINGS_MAX_VALUE_SIZE 0x3FFF
151 #define SETTINGS_MAX_VALUE_SIZE 0x7F
158 extern settings_status_t
settings_get(settings_key_t key, uint8_t index,
160 settings_length_t * value_size);
163 extern settings_status_t
settings_add(settings_key_t key,
164 const uint8_t *value,
165 settings_length_t value_size);
176 extern settings_status_t
settings_set(settings_key_t key,
177 const uint8_t *value,
178 settings_length_t value_size);
181 extern settings_status_t
settings_delete(settings_key_t key, uint8_t index);
186 typedef eeprom_addr_t settings_iter_t;
194 extern uint8_t settings_iter_is_valid(settings_iter_t iter);
196 extern settings_key_t settings_iter_get_key(settings_iter_t iter);
198 extern settings_length_t settings_iter_get_value_length(settings_iter_t iter);
200 extern eeprom_addr_t settings_iter_get_value_addr(settings_iter_t iter);
202 extern settings_length_t settings_iter_get_value_bytes(settings_iter_t item,
207 extern settings_status_t settings_iter_delete(settings_iter_t item);
216 #if !SETTINGS_CONF_SKIP_CONVENIENCE_FUNCS
218 static CC_INLINE
const char *
219 settings_get_cstr(settings_key_t key, uint8_t index,
char *c_str,
220 settings_length_t c_str_size)
225 if(
settings_get(key, index, (uint8_t *)c_str, &c_str_size) == SETTINGS_STATUS_OK) {
227 c_str[c_str_size] = 0;
234 static CC_INLINE settings_status_t
235 settings_set_cstr(settings_key_t key,
const char* c_str)
237 return settings_set(key, (
const uint8_t *)c_str, strlen(c_str));
240 static CC_INLINE settings_status_t
241 settings_add_cstr(settings_key_t key,
const char* c_str)
243 return settings_add(key, (
const uint8_t *)c_str, strlen(c_str));
246 static CC_INLINE uint8_t
247 settings_get_bool_with_default(settings_key_t key, uint8_t index,
248 uint8_t default_value)
250 uint8_t ret = default_value;
251 settings_length_t sizeof_uint8 =
sizeof(uint8_t);
253 settings_get(key, index, (uint8_t *)&ret, &sizeof_uint8);
257 static CC_INLINE uint8_t
258 settings_get_uint8(settings_key_t key, uint8_t index)
261 settings_length_t sizeof_uint8 =
sizeof(uint8_t);
263 settings_get(key, index, (uint8_t *)&ret, &sizeof_uint8);
267 static CC_INLINE settings_status_t
268 settings_add_uint8(settings_key_t key, uint8_t value)
270 return settings_add(key, (
const uint8_t *)&value,
sizeof(uint8_t));
273 static CC_INLINE settings_status_t
274 settings_set_uint8(settings_key_t key, uint8_t value)
276 return settings_set(key, (
const uint8_t *)&value,
sizeof(uint8_t));
279 static CC_INLINE uint16_t
280 settings_get_uint16(settings_key_t key, uint8_t index)
283 settings_length_t sizeof_uint16 =
sizeof(uint16_t);
285 settings_get(key, index, (uint8_t *)&ret, &sizeof_uint16);
289 static CC_INLINE settings_status_t
290 settings_add_uint16(settings_key_t key, uint16_t value)
292 return settings_add(key, (
const uint8_t *)&value,
sizeof(uint16_t));
295 static CC_INLINE settings_status_t
296 settings_set_uint16(settings_key_t key, uint16_t value)
298 return settings_set(key, (
const uint8_t *)&value,
sizeof(uint16_t));
301 static CC_INLINE uint32_t
302 settings_get_uint32(settings_key_t key, uint8_t index)
305 settings_length_t sizeof_uint32 =
sizeof(uint32_t);
307 settings_get(key, index, (uint8_t *)&ret, &sizeof_uint32);
311 static CC_INLINE settings_status_t
312 settings_add_uint32(settings_key_t key, uint32_t value)
314 return settings_add(key, (
const uint8_t *)&value,
sizeof(uint32_t));
317 static CC_INLINE settings_status_t
318 settings_set_uint32(settings_key_t key, uint32_t value)
320 return settings_set(key, (
const uint8_t *)&value,
sizeof(uint32_t));
323 #if __int64_t_defined
324 static CC_INLINE uint64_t
325 settings_get_uint64(settings_key_t key, uint8_t index)
328 settings_length_t sizeof_uint64 =
sizeof(uint64_t);
330 settings_get(key, index, (uint8_t *)&ret, &sizeof_uint64);
334 static CC_INLINE settings_status_t
335 settings_add_uint64(settings_key_t key, uint64_t value)
337 return settings_add(key, (
const uint8_t *)&value,
sizeof(uint64_t));
340 static CC_INLINE settings_status_t
341 settings_set_uint64(settings_key_t key, uint64_t value)
343 return settings_set(key, (
const uint8_t *)&value,
sizeof(uint64_t));
settings_status_t settings_get(settings_key_t key, uint8_t index, uint8_t *value, settings_length_t *value_size)
Fetches the value associated with the given key.
settings_status_t settings_delete(settings_key_t key, uint8_t index)
Removes the given key (at the given index) from the settings store.
settings_status_t settings_set(settings_key_t key, const uint8_t *value, settings_length_t value_size)
Sets the value for the given key.
uint8_t settings_check(settings_key_t key, uint8_t index)
Checks to see if the given key exists.
#define NULL
The null pointer.
Default definitions of C compiler quirk work-arounds.
settings_iter_t settings_iter_next(settings_iter_t iter)
Will return SETTINGS_INVALID_ITER if at the end of settings list.
void settings_wipe(void)
Reinitializes all of the EEPROM used by settings.
settings_status_t settings_add(settings_key_t key, const uint8_t *value, settings_length_t value_size)
Adds the given key-value pair to the end of the settings store.
settings_iter_t settings_iter_begin()
Will return SETTINGS_INVALID_ITER if the settings store is empty.