33 #ifndef CONTIKI_SETTINGS_H_
34 #define CONTIKI_SETTINGS_H_
94 SETTINGS_STATUS_OK = 0,
95 SETTINGS_STATUS_FAILURE,
96 SETTINGS_STATUS_INVALID_ARGUMENT,
97 SETTINGS_STATUS_NOT_FOUND,
98 SETTINGS_STATUS_OUT_OF_SPACE,
99 SETTINGS_STATUS_VALUE_TOO_BIG,
100 SETTINGS_STATUS_UNIMPLEMENTED,
103 typedef uint16_t settings_key_t;
105 typedef uint16_t settings_length_t;
111 #define TCC(a,b) ((a)+(b)*256)
114 #define SETTINGS_KEY_EUI64 TCC('E','8')
115 #define SETTINGS_KEY_EUI48 TCC('E','6')
116 #define SETTINGS_KEY_CHANNEL TCC('C','H')
117 #define SETTINGS_KEY_TXPOWER TCC('T','P')
118 #define SETTINGS_KEY_PAN_ID TCC('P','N')
119 #define SETTINGS_KEY_PAN_ADDR TCC('P','A')
120 #define SETTINGS_KEY_AES128KEY TCC('S','K')
121 #define SETTINGS_KEY_AES128ENABLED TCC('S','E')
122 #define SETTINGS_KEY_HOSTNAME TCC('H','N')
123 #define SETTINGS_KEY_DOMAINNAME TCC('D','N')
128 #define SETTINGS_KEY_RDC_INDEX TCC('R','D')
129 #define SETTINGS_KEY_CHANNEL_MASK TCC('C','M')
135 #define SETTINGS_LAST_INDEX 0xFF
137 #define SETTINGS_INVALID_KEY 0xFFFF
139 #define SETTINGS_INVALID_ITER EEPROM_NULL
141 #ifndef SETTINGS_CONF_SUPPORT_LARGE_VALUES
142 #define SETTINGS_CONF_SUPPORT_LARGE_VALUES 0
145 #if SETTINGS_CONF_SUPPORT_LARGE_VALUES
146 #define SETTINGS_MAX_VALUE_SIZE 0x3FFF
148 #define SETTINGS_MAX_VALUE_SIZE 0x7F
155 extern settings_status_t
settings_get(settings_key_t key, uint8_t index,
157 settings_length_t value_size);
160 extern settings_status_t
settings_add(settings_key_t key,
161 const uint8_t *value,
162 settings_length_t value_size);
177 extern settings_status_t
settings_set(settings_key_t key,
178 const uint8_t *value,
179 settings_length_t value_size);
182 extern settings_status_t
settings_delete(settings_key_t key, uint8_t index);
187 typedef eeprom_addr_t settings_iter_t;
195 extern uint8_t settings_iter_is_valid(settings_iter_t iter);
197 extern settings_key_t settings_iter_get_key(settings_iter_t iter);
199 extern settings_length_t settings_iter_get_value_length(settings_iter_t iter);
201 extern eeprom_addr_t settings_iter_get_value_addr(settings_iter_t iter);
203 extern settings_length_t settings_iter_get_value_bytes(settings_iter_t item,
208 extern settings_status_t settings_iter_delete(settings_iter_t item);
217 #if !SETTINGS_CONF_SKIP_CONVENIENCE_FUNCS
219 static CC_INLINE
const char *
220 settings_get_cstr(settings_key_t key, uint8_t index,
char *c_str,
221 settings_length_t c_str_size)
226 if(
settings_get(key, index, (uint8_t *)c_str, c_str_size) == SETTINGS_STATUS_OK) {
228 c_str[c_str_size] = 0;
235 static CC_INLINE settings_status_t
236 settings_set_cstr(settings_key_t key,
const char* c_str)
238 return settings_set(key, (
const uint8_t *)c_str, strlen(c_str));
241 static CC_INLINE settings_status_t
242 settings_add_cstr(settings_key_t key,
const char* c_str)
244 return settings_add(key, (
const uint8_t *)c_str, strlen(c_str));
247 static CC_INLINE uint8_t
248 settings_get_bool_with_default(settings_key_t key, uint8_t index,
249 uint8_t default_value)
251 uint8_t ret = default_value;
253 settings_get(key, index, (uint8_t *)&ret,
sizeof(uint8_t));
257 static CC_INLINE uint8_t
258 settings_get_uint8(settings_key_t key, uint8_t index)
262 settings_get(key, index, (uint8_t *)&ret,
sizeof(uint8_t));
266 static CC_INLINE settings_status_t
267 settings_add_uint8(settings_key_t key, uint8_t value)
269 return settings_add(key, (
const uint8_t *)&value,
sizeof(uint8_t));
272 static CC_INLINE settings_status_t
273 settings_set_uint8(settings_key_t key, uint8_t value)
275 return settings_set(key, (
const uint8_t *)&value,
sizeof(uint8_t));
278 static CC_INLINE uint16_t
279 settings_get_uint16(settings_key_t key, uint8_t index)
283 settings_get(key, index, (uint8_t *)&ret,
sizeof(uint16_t));
287 static CC_INLINE settings_status_t
288 settings_add_uint16(settings_key_t key, uint16_t value)
290 return settings_add(key, (
const uint8_t *)&value,
sizeof(uint16_t));
293 static CC_INLINE settings_status_t
294 settings_set_uint16(settings_key_t key, uint16_t value)
296 return settings_set(key, (
const uint8_t *)&value,
sizeof(uint16_t));
299 static CC_INLINE uint32_t
300 settings_get_uint32(settings_key_t key, uint8_t index)
303 settings_length_t sizeof_uint32 =
sizeof(uint32_t);
305 settings_get(key, index, (uint8_t *)&ret, sizeof_uint32);
309 static CC_INLINE settings_status_t
310 settings_add_uint32(settings_key_t key, uint32_t value)
312 return settings_add(key, (
const uint8_t *)&value,
sizeof(uint32_t));
315 static CC_INLINE settings_status_t
316 settings_set_uint32(settings_key_t key, uint32_t value)
318 return settings_set(key, (
const uint8_t *)&value,
sizeof(uint32_t));
321 #if __int64_t_defined
322 static CC_INLINE uint64_t
323 settings_get_uint64(settings_key_t key, uint8_t index)
326 settings_length_t sizeof_uint64 =
sizeof(uint64_t);
328 settings_get(key, index, (uint8_t *)&ret, sizeof_uint64);
332 static CC_INLINE settings_status_t
333 settings_add_uint64(settings_key_t key, uint64_t value)
335 return settings_add(key, (
const uint8_t *)&value,
sizeof(uint64_t));
338 static CC_INLINE settings_status_t
339 settings_set_uint64(settings_key_t key, uint64_t value)
341 return settings_set(key, (
const uint8_t *)&value,
sizeof(uint64_t));