Contiki-Inga 3.x
Macros | Functions
settings.h File Reference

Settings Manager. More...

#include <stdint.h>
#include <string.h>
#include "dev/eeprom.h"
#include "sys/cc.h"

Go to the source code of this file.

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.
 

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 extern SETTINGS_INVALID_ITER if the settings store is empty. More...
 
settings_iter_t settings_iter_next (settings_iter_t iter)
 Will return extern SETTINGS_INVALID_ITER if at the end of settings list. More...
 

Detailed Description

Settings Manager.

Author
Robert Quattlebaum darco.nosp@m.@dee.nosp@m.pdarc.nosp@m..com

Overview

The settings manager is a 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:

Definition in file settings.h.

Macro Definition Documentation

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

AES128 enabled, bool

Definition at line 121 of file settings.h.

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

AES128 key, 16 bytes

Definition at line 120 of file settings.h.

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

Channel number, uint8_t

Definition at line 116 of file settings.h.

Referenced by menu_process().

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

Channel mask, uint16_t

Definition at line 129 of file settings.h.

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

Domainname, C-String

Definition at line 123 of file settings.h.

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

MAC Address, 6 bytes

Definition at line 115 of file settings.h.

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

Hostname, C-String

Definition at line 122 of file settings.h.

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

PAN address, uint16_t

Definition at line 119 of file settings.h.

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

PAN ID, uint16_t

Definition at line 118 of file settings.h.

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

RDC index, uint8_t

Definition at line 128 of file settings.h.

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

Transmit power, uint8_t

Definition at line 117 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.

Return values
0not found
1found
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 extern SETTINGS_INVALID_ITER if the settings store is empty.

settings_iter_t settings_iter_next ( settings_iter_t  iter)

Will return extern 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.