Wirepas SDK
|
The Settings library provides access to node settings, which are stored in nonvolatile memory. When a node starts up it automatically uses these stored settings.
Settings such as node role, unique node address, network address and channel, encryption and authentication keys as well performance-related settings such as access cycle limits can be stored and recalled. Also see the State library state.h for starting and stopping the stack.
Library services are accessed via lib_settings handle.
Definition in file wms_settings.h.
Go to the source code of this file.
Typedefs | |
typedef uint32_t | app_lib_settings_net_addr_t |
Network address type definition. More... | |
typedef uint8_t | app_lib_settings_net_channel_t |
Network channel type definition. More... | |
typedef uint8_t | app_lib_settings_role_t |
Node role type. More... | |
typedef bool(* | app_lib_settings_is_group_cb_f) (app_addr_t group_addr) |
Callback used for determining on which multicast groups the device belongs. More... | |
typedef app_res_e(* | app_lib_settings_reset_all_f) (void) |
Reset all settings to default values. More... | |
typedef app_res_e(* | app_lib_settings_get_feature_lock_bits_f) (uint32_t *bits_p) |
Get feature lock bits. More... | |
typedef app_res_e(* | app_lib_settings_set_feature_lock_bits_f) (uint32_t bits) |
Set feature lock bits. More... | |
typedef app_res_e(* | app_lib_settings_get_feature_lock_key_f) (uint8_t *key_p) |
Check if feature lock key is set. More... | |
typedef app_res_e(* | app_lib_settings_set_feature_lock_key_f) (const uint8_t *key_p) |
Set feature lock key. More... | |
typedef app_res_e(* | app_lib_settings_get_node_address_f) (app_addr_t *addr_p) |
Get node address. More... | |
typedef app_res_e(* | app_lib_settings_set_node_address_f) (app_addr_t addr) |
Set node address. More... | |
typedef app_res_e(* | app_lib_settings_get_network_address_f) (app_lib_settings_net_addr_t *addr_p) |
Get network address. More... | |
typedef app_res_e(* | app_lib_settings_set_network_address_f) (app_lib_settings_net_addr_t addr) |
Set network address. More... | |
typedef app_res_e(* | app_lib_settings_get_network_channel_f) (app_lib_settings_net_channel_t *channel_p) |
Get network channel. More... | |
typedef app_res_e(* | app_lib_settings_set_network_channel_f) (app_lib_settings_net_channel_t channel) |
Set network channel. More... | |
typedef app_res_e(* | app_lib_settings_get_node_role_f) (app_lib_settings_role_t *role_p) |
typedef app_res_e(* | app_lib_settings_set_node_role_f) (app_lib_settings_role_t role) |
Set node role. More... | |
typedef app_res_e(* | app_lib_settings_get_authentication_key_f) (uint8_t *key_p) |
Check if authentication key is set. More... | |
typedef app_res_e(* | app_lib_settings_set_authentication_key_f) (const uint8_t *key_p) |
Set authentication key. More... | |
typedef app_res_e(* | app_lib_settings_get_encryption_key_f) (uint8_t *key_p) |
Check if encryption key is set. More... | |
typedef app_res_e(* | app_lib_settings_set_encryption_key_f) (const uint8_t *key_p) |
Set encryption key. More... | |
typedef app_res_e(* | app_lib_settings_get_ac_range_f) (uint16_t *ac_min_value_p, uint16_t *ac_max_value_p) |
Get the access cycle range. More... | |
typedef app_res_e(* | app_lib_settings_set_ac_range_f) (uint16_t ac_min_value, uint16_t ac_max_value) |
Set range for access cycle. More... | |
typedef app_res_e(* | app_lib_settings_get_offline_scan_f) (uint16_t *max_scan_p) |
Get the maximum offline scan interval in seconds. More... | |
typedef app_res_e(* | app_lib_settings_set_offline_scan_f) (uint16_t max_scan) |
Set the maximum offline scan interval in seconds. More... | |
typedef app_res_e(* | app_lib_settings_get_network_channel_limits_f) (uint16_t *min_value_p, uint16_t *max_value_p) |
Get network channel range. More... | |
typedef app_res_e(* | app_lib_settings_get_ac_range_limits_f) (uint16_t *min_value_p, uint16_t *max_value_p) |
Get access cycle range. More... | |
typedef app_res_e(* | app_lib_settings_set_group_query_cb_f) (app_lib_settings_is_group_cb_f cb) |
Set the callback function for multicat groups. More... | |
typedef app_res_e(* | app_lib_settings_get_reserved_channels_f) (uint8_t *channels_p, size_t num_bytes) |
Get reserved channels. More... | |
typedef app_res_e(* | app_lib_settings_set_reserved_channels_f) (const uint8_t *channels_p, size_t num_bytes) |
Set reserved channels. More... | |
typedef bool(* | app_lib_settings_is_valid_network_address_f) (app_lib_settings_net_addr_t addr) |
Check that the network address is valid. More... | |
typedef bool(* | app_lib_settings_is_valid_network_channel_f) (uint8_t channel) |
Check that the network channel is valid. More... | |
typedef bool(* | app_lib_settings_is_valid_node_address_f) (app_addr_t addr) |
Check that the node address is valid. More... | |
typedef bool(* | app_lib_settings_is_valid_node_role_f) (app_lib_settings_role_t role) |
Check that the node role is valid. More... | |
Data Structures | |
struct | app_lib_settings_t |
Enumerations | |
enum | app_lib_settings_role_e { APP_LIB_SETTINGS_ROLE_SINK_LE = 0x00, APP_LIB_SETTINGS_ROLE_SINK_LL = 0x10, APP_LIB_SETTINGS_ROLE_HEADNODE_LE = 0x01, APP_LIB_SETTINGS_ROLE_HEADNODE_LL = 0x11, APP_LIB_SETTINGS_ROLE_SUBNODE_LE = 0x02, APP_LIB_SETTINGS_ROLE_SUBNODE_LL = 0x12, APP_LIB_SETTINGS_ROLE_AUTOROLE_LE = 0x42, APP_LIB_SETTINGS_ROLE_AUTOROLE_LL = 0x52, APP_LIB_SETTINGS_ROLE_ADVERTISER = 0x04 } |
Macros | |
#define | APP_LIB_SETTINGS_NAME 0x74ced676 |
Library symbolic name. More... | |
#define | APP_LIB_SETTINGS_VERSION 0x208 |
Maximum supported library version. More... | |
#define | APP_LIB_SETTINGS_AES_KEY_NUM_BYTES 16 |
AES key size in bytes. More... | |
typedef app_res_e(* app_lib_settings_get_ac_range_f) (uint16_t *ac_min_value_p, uint16_t *ac_max_value_p) |
Get the access cycle range.
The values are in milliseconds. This setting is only meaningful for nodes that route data for others, i.e. sinks and headnodes.
ac_min_value_p | Pointer to store the minimum current access cycle value |
ac_max_value_p | Pointer to store the maximum current access cycle value |
ac_min_value_p
or ac_max_value_p
is NULLExample:
Definition at line 428 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_ac_range_limits_f) (uint16_t *min_value_p, uint16_t *max_value_p) |
Get access cycle range.
Return the minimum and maximum access cycle value, in milliseconds, that can be used when setting the access cycle range with the lib_settings->setAcRange() function.
min_value_p | Pointer to store the minimum access cycle value allowed |
max_value_p | Pointer to store the maximum access cycle value allowed |
Definition at line 558 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_authentication_key_f) (uint8_t *key_p) |
Check if authentication key is set.
It is not possible to actually read the key from the stack. The key_p
parameter is ignored.
key_p | If NULL, key is not return but return code will inform if keys are set or not. Otherwise, pointer to a ram area of 16 bytes where the key can be copied. It is updated only if return value is APP_RES_OK. |
Definition at line 344 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_encryption_key_f) (uint8_t *key_p) |
Check if encryption key is set.
It is not possible to actually read the key from the stack. The key_p
parameter is ignored.
key_p | If NULL, key is not return but return code will inform if keys are set or not. Otherwise, pointer to a ram area of 16 bytes where the key can be copied. It is updated only if return value is APP_RES_OK. |
Definition at line 382 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_feature_lock_bits_f) (uint32_t *bits_p) |
Get feature lock bits.
Feature lock bits determine which features are permitted at runtime. A cleared bit marks that a feature is locked. Some features are governed by the stack, some checks are implemented on the application side, where applicable. Feature lock bits are active only when feature lock key is set. Feature lock bits are documented in WP-RM-100 Wirepas Mesh Dual-MCU API Reference Manual.
bits_p | Pointer to store the result |
Definition at line 148 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_feature_lock_key_f) (uint8_t *key_p) |
Check if feature lock key is set.
If set the feature lock is locked. It is not possible to actually read the key from the stack. The key_p
parameter is ignored.
key_p | A dummy parameter, reserved for future, set to NULL |
Definition at line 178 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_network_address_f) (app_lib_settings_net_addr_t *addr_p) |
Get network address.
addr_p | Pointer to store the result |
Definition at line 240 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_network_channel_f) (app_lib_settings_net_channel_t *channel_p) |
Get network channel.
channel_p | Pointer to store the result |
channel_p
is NULL Definition at line 266 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_network_channel_limits_f) (uint16_t *min_value_p, uint16_t *max_value_p) |
Get network channel range.
Return the minimum and maximum network channel value that can be used when setting the network channel with the lib_settings->setNetworkChannel() function
min_value_p | Pointer to store the minimum network channel value allowed |
max_value_p | Pointer to store the maximum network channel value allowed |
Definition at line 540 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_node_address_f) (app_addr_t *addr_p) |
Get node address.
addr_p | Pointer to store the result |
addr_p
is NULL Definition at line 212 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_node_role_f) (app_lib_settings_role_t *role_p) |
Get node role. Utility functions app_lib_settings_get_base_role() and app_lib_settings_get_flags_role() can be used to split the node value to a base role and role flag bits, respectively.
role_p | Pointer to store the result |
role_p
is NULL Definition at line 301 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_offline_scan_f) (uint16_t *max_scan_p) |
Get the maximum offline scan interval in seconds.
The maximum offline scan interval determines the maximum interval between two scans for neighbors when device has no route to a sink.
max_scan_p | Pointer to store the scanning interval value |
max_scan_p
is NULL Definition at line 495 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_get_reserved_channels_f) (uint8_t *channels_p, size_t num_bytes) |
Get reserved channels.
Get a bit array of reserved channels, or channels that are marked to be avoided by the Wirepas Mesh protocol. Each set bit marks a channel that is to be avoided. The LSB of the first byte is channel 1, the LSB of the next byte is channel 8 and so forth.
channels_p | Pointer to store the reserved channels bit array Each set bit marks the channel as reserved LSB of first byte is channel 1, MSB of first byte is channel 7, LSB of second byte is channel 8, an so on etc |
num_bytes | Number of bytes pointed by channels_p |
channels_p
is NULL, APP_RES_INVALID_VALUE if last reserved channel does not fit in num_bytes
channels_p
bit array can be longer than the maximum reserved channel. Remaining channels are marked as not reserved Definition at line 617 of file wms_settings.h.
typedef bool(* app_lib_settings_is_group_cb_f) (app_addr_t group_addr) |
Callback used for determining on which multicast groups the device belongs.
As an argument, the stack sets the address of the multicast group. If device belongs to that group, callback function returns true. If not, callback returns false.
This callback is called when device receives multicast packet. The return value is then determined whether data shall be received by standard means (i.e. data reception callback, see lib_data->setDataReceivedCb)
group_addr | Group address (with APP_ADDR_MULTICAST bitmask set) |
Usage: see documentation of lib_settings->registerGroupQuery.
Definition at line 112 of file wms_settings.h.
typedef bool(* app_lib_settings_is_valid_network_address_f) (app_lib_settings_net_addr_t addr) |
Check that the network address is valid.
addr | The network address to check. |
Definition at line 669 of file wms_settings.h.
typedef bool(* app_lib_settings_is_valid_network_channel_f) (uint8_t channel) |
Check that the network channel is valid.
channel | The network channel to check. |
Definition at line 677 of file wms_settings.h.
typedef bool(* app_lib_settings_is_valid_node_address_f) (app_addr_t addr) |
Check that the node address is valid.
addr | The node address to check. |
Definition at line 685 of file wms_settings.h.
typedef bool(* app_lib_settings_is_valid_node_role_f) (app_lib_settings_role_t role) |
Check that the node role is valid.
role | The node role to check. |
Definition at line 693 of file wms_settings.h.
typedef uint32_t app_lib_settings_net_addr_t |
Network address type definition.
All nodes on the network must have the same network address.
Definition at line 53 of file wms_settings.h.
typedef uint8_t app_lib_settings_net_channel_t |
Network channel type definition.
All nodes on the network must have the same network channel.
Definition at line 60 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_reset_all_f) (void) |
Reset all settings to default values.
Definition at line 130 of file wms_settings.h.
typedef uint8_t app_lib_settings_role_t |
Node role type.
List of possible roles are defined in app_lib_settings_role_e
Definition at line 88 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_ac_range_f) (uint16_t ac_min_value, uint16_t ac_max_value) |
Set range for access cycle.
Set the access cycle range that this node uses to serve its neighbors. This setting is only meaningful for nodes that route data for others, i.e. sinks and headnodes.
Normally the stack chooses a suitable access cycle automatically, between 2, 4 or 8 seconds, depending on the amount of network traffic. Some applications may need to further limit the access cycle durations in use.
The values are in milliseconds. Function lib_settings->getAcRangeLimits() can also be used to query the limits. Default range is min. 2000 ms, max. 8000 ms.
Valid values are:
Value | Description |
---|---|
2000 | 2 seconds |
4000 | 4 seconds |
8000 | 8 seconds |
If value is not set, or maximum > minimum, the stack chooses an appropriate access cycle based on the amount of network traffic. If maximum = minimum, the user can force the access cycle to a specific duration. Range is not set by default. Only a factory reset can restore range back to the unset state.
Example:
ac_min_value | Minimum access cycle value to set |
ac_max_value | Maximum access cycle value to set |
ac_min_value
or ac_max_value
is invalidDefinition at line 479 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_authentication_key_f) (const uint8_t *key_p) |
Set authentication key.
key_p
must point to APP_LIB_SETTINGS_AES_KEY_NUM_BYTES bytes. By default, no authentication key is set.
A key of all 0xff
(hex) bytes is considered an unset key. Setting such a key disables encryption and authentication.
key_p | Pointer to AES-128 key, APP_LIB_SETTINGS_AES_KEY_NUM_BYTES bytes |
key_p
is NULL Definition at line 366 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_encryption_key_f) (const uint8_t *key_p) |
Set encryption key.
key_p
must point to APP_LIB_SETTINGS_AES_KEY_NUM_BYTES bytes. By default, no encryption key is set.
A key of all 0xff
(hex) bytes is considered an unset key. Setting such a key disables encryption and authentication.
key_p | Pointer to AES-128 key, APP_LIB_SETTINGS_AES_KEY_NUM_BYTES bytes |
key_p
is NULL Definition at line 404 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_feature_lock_bits_f) (uint32_t bits) |
Set feature lock bits.
See lib_settings->getFeatureLockBits() for a description of feature lock bits. A cleared bit marks a feature locked. Reserved bits must remain set.
bits | Feature lock bits |
Definition at line 163 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_feature_lock_key_f) (const uint8_t *key_p) |
Set feature lock key.
Lock or unlock the feature lock. key_p
must point to APP_LIB_SETTINGS_AES_KEY_NUM_BYTES bytes. The feature lock key is not an AES-128 key, but it is guaranteed to be the same size as an AES-128 key.
Feature lock key can only be set when the feature lock is unlocked. Unlocking is done by setting the key using the same key as when locking it. A key of all 0xff
(hex) bytes is considered an unset key. Setting such a key does not lock the feature lock.
key_p | Pointer to key, APP_LIB_SETTINGS_AES_KEY_NUM_BYTES bytes |
key_p
is NULL Definition at line 200 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_group_query_cb_f) (app_lib_settings_is_group_cb_f cb) |
Set the callback function for multicat groups.
The callback is called when stack needs to determine on which multicast groups the device belongs to. If callback is not defined, device does not belong to any multicast groups.
cb | The function to be executed, or NULL to unset |
Example on use:
Definition at line 591 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_network_address_f) (app_lib_settings_net_addr_t addr) |
Set network address.
There is no default network address.
addr | Network address to set |
Definition at line 255 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_network_channel_f) (app_lib_settings_net_channel_t channel) |
Set network channel.
Different radio architectures have different number of channels available. Function lib_settings->getNetworkChannelLimits() can be used to determine the minimum and maximum channel number available. There is no default network channel.
channel | Network channel to set |
channel
is invalid, APP_RES_INVALID_STACK_STATE if stack is running Definition at line 286 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_node_address_f) (app_addr_t addr) |
Set node address.
There is no default node address.
addr | Own node address to set |
addr
is invalid, APP_RES_INVALID_STACK_STATE if stack is running Definition at line 228 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_node_role_f) (app_lib_settings_role_t role) |
Set node role.
Default node role is headnode with the autorole flag set.
Code example:
role | New role |
role
is invalid, APP_RES_INVALID_STACK_STATE if stack is running Definition at line 328 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_offline_scan_f) (uint16_t max_scan) |
Set the maximum offline scan interval in seconds.
The maximum offline scan interval determines how often a node scans for neighbors when it has no route to a sink. Value is automatically limited to a valid range. The default value, before calling lib_settings->setOfflineScan() is 600 seconds (10 minutes) for Low Energy Mode and 30 seconds for Low Latency Mode.
Valid offline scan values:
Value | Description |
---|---|
20 | Minimum: 20 seconds |
600 | Maximum: 3600 seconds (1 hour) |
To manually start a neighbor scan, function startScanNbors() in the State library (state.h) can be used.
max_scan | Minimum maximum scanning interval value |
max_scan
is invalid Definition at line 523 of file wms_settings.h.
typedef app_res_e(* app_lib_settings_set_reserved_channels_f) (const uint8_t *channels_p, size_t num_bytes) |
Set reserved channels.
Mark channels as reserved, or to be avoided by the Wirepas Mesh protocol. Each set bit marks a channel that is to be avoided. The LSB of the first byte is channel 1, the LSB of the next byte is channel 8 and so forth. The channels_p
bit array may be shorter than the number of channels. In that case, the remaining channels are marked as not reserved. The bit array may be longer too, provided that the highest bit set in it corresponds to a valid channel number (see section 3.6.4.27), i.e. extra zeros are ignored.
A node may still transmit on a reserved channel if it has a neighbor that has not been configured to avoid the channel. For best results, all nodes in a network should be configured to have the same reserved channels. Reserving the network channel will result in undefined behavior.
The reserved channels array is not stored in permanent memory. To reserve channels, function lib_settings->setReservedChannels() has to be called in App_init() before the stack is started.
channels | Pointer to bit array to load the reserved channels Each set bit marks the channel as reserved LSB of first byte is channel 1, MSB of first byte is channel 7, LSB of second byte is channel 8, an so on |
num_bytes | Number of bytes pointed by channels_p |
channels_p
is NULL, APP_RES_INVALID_STACK_STATE if stack is running, APP_RES_INVALID_VALUE if a bit in channels_p
is set for a channel larger than the maximum channel number channels_p
bit array can be shorter than the maximum number of channels. Remaining channels are marked as not reserved Definition at line 659 of file wms_settings.h.
struct app_lib_settings_t |
The function table returned from app_open_library_f
Definition at line 698 of file wms_settings.h.
Definition at line 62 of file wms_settings.h.
#define APP_LIB_SETTINGS_AES_KEY_NUM_BYTES 16 |
AES key size in bytes.
This macro can be used as a buffer size for storing or copying a 128-bit AES key, or the 16-byte feature lock key. The feature lock key is not an AES-128 key, but it is guaranteed to be the same size as an AES-128 key.
Definition at line 44 of file wms_settings.h.
#define APP_LIB_SETTINGS_NAME 0x74ced676 |
#define APP_LIB_SETTINGS_VERSION 0x208 |
Maximum supported library version.
Definition at line 35 of file wms_settings.h.