Contiki 3.x
Macros | Functions
Settings Manager

The settings manager is an EEPROM-based key-value store. More...

Macros

#define TCC(a, b)   ((a)+(b)*256)
 Two-character constant macro.
 
#define SETTINGS_KEY_EUI64   TCC('E','8')
 EUI64 Address, 8 bytes.
 
#define SETTINGS_KEY_EUI48   TCC('E','6')
 
#define SETTINGS_KEY_CHANNEL   TCC('C','H')
 
#define SETTINGS_KEY_TXPOWER   TCC('T','P')
 
#define SETTINGS_KEY_PAN_ID   TCC('P','N')
 
#define SETTINGS_KEY_PAN_ADDR   TCC('P','A')
 
#define SETTINGS_KEY_AES128KEY   TCC('S','K')
 
#define SETTINGS_KEY_AES128ENABLED   TCC('S','E')
 
#define SETTINGS_KEY_HOSTNAME   TCC('H','N')
 
#define SETTINGS_KEY_DOMAINNAME   TCC('D','N')
 
#define SETTINGS_KEY_RDC_INDEX   TCC('R','D')
 
#define SETTINGS_KEY_CHANNEL_MASK   TCC('C','M')
 
#define SETTINGS_LAST_INDEX   0xFF
 Use this when you want to retrieve the last item.
 
#define SETTINGS_INVALID_KEY   0xFFFF
 Returned when key is invalid. More...
 
#define SETTINGS_INVALID_ITER   EEPROM_NULL
 Returned if no (further) element was found. More...
 

Functions

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. More...
 
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. More...
 
uint8_t settings_check (settings_key_t key, uint8_t index)
 Checks to see if the given key exists. More...
 
void settings_wipe (void)
 Reinitializes all of the EEPROM used by settings. More...
 
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. More...
 
settings_status_t settings_delete (settings_key_t key, uint8_t index)
 Removes the given key (at the given index) from the settings store. More...
 
settings_iter_t settings_iter_begin ()
 Will return SETTINGS_INVALID_ITER if the settings store is empty. More...
 
settings_iter_t settings_iter_next (settings_iter_t iter)
 Will return SETTINGS_INVALID_ITER if at the end of settings list. More...
 

Detailed Description

The settings manager is an EEPROM-based key-value store.

Keys are 16-bit integers and values may be up to 16,383 bytes long. It is intended to be used to store configuration-related information, like network settings, radio channels, etc.

Features

Data Format

The format was inspired by OLPC manufacturing data, as described here: http://wiki.laptop.org/go/Manufacturing_data

Since the beginning of EEPROM often contains application-specific information, the best place to store settings is at the end of EEPROM. Because we are starting at the end of EEPROM, it makes sense to grow the list of key-value pairs downward, toward the start of EEPROM.

Each key-value pair is stored in memory in the following format:

Order Size Name Description
0 2 key
-2 1 size_check One's-complement of next byte
-3 1 or 2 size The size of the value, in bytes
-4 or -5 variable value

The end of the key-value pairs is denoted by the first invalid entry. An invalid entry has any of the following attributes:

Macro Definition Documentation

#define SETTINGS_INVALID_ITER   EEPROM_NULL

Returned if no (further) element was found.

Definition at line 142 of file settings.h.

#define SETTINGS_INVALID_KEY   0xFFFF

Returned when key is invalid.

Definition at line 140 of file settings.h.

#define SETTINGS_KEY_AES128ENABLED   TCC('S','E')

AES128 enabled, bool

Definition at line 124 of file settings.h.

#define SETTINGS_KEY_AES128KEY   TCC('S','K')

AES128 key, 16 bytes

Definition at line 123 of file settings.h.

#define SETTINGS_KEY_CHANNEL   TCC('C','H')

Channel number, uint8_t

Definition at line 119 of file settings.h.

Referenced by menu_process().

#define SETTINGS_KEY_CHANNEL_MASK   TCC('C','M')

Channel mask, uint16_t

Definition at line 132 of file settings.h.

#define SETTINGS_KEY_DOMAINNAME   TCC('D','N')

Domainname, C-String

Definition at line 126 of file settings.h.

#define SETTINGS_KEY_EUI48   TCC('E','6')

MAC Address, 6 bytes

Definition at line 118 of file settings.h.

#define SETTINGS_KEY_HOSTNAME   TCC('H','N')

Hostname, C-String

Definition at line 125 of file settings.h.

#define SETTINGS_KEY_PAN_ADDR   TCC('P','A')

PAN address, uint16_t

Definition at line 122 of file settings.h.

#define SETTINGS_KEY_PAN_ID   TCC('P','N')

PAN ID, uint16_t

Definition at line 121 of file settings.h.

#define SETTINGS_KEY_RDC_INDEX   TCC('R','D')

RDC index, uint8_t

Definition at line 131 of file settings.h.

#define SETTINGS_KEY_TXPOWER   TCC('T','P')

Transmit power, uint8_t

Definition at line 120 of file settings.h.

Referenced by menu_process().

Function Documentation

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.

uint8_t settings_check ( settings_key_t  key,
uint8_t  index 
)

Checks to see if the given key exists.

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_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_iter_t settings_iter_begin ( )

Will return SETTINGS_INVALID_ITER if the settings store is empty.

settings_iter_t settings_iter_next ( settings_iter_t  iter)

Will return SETTINGS_INVALID_ITER if at the end of settings list.

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.

If the key already exists in the settings store, then its value will be replaced.

void settings_wipe ( void  )

Reinitializes all of the EEPROM used by settings.