Configuration#

All configurations have defaults. Therefore, many applications may not need to do anything custom. However, these defaults can be overridden by creating a CONFIGURATION_HEADER or within this header, defining the appropriate macro to a different size. For example, to reduce the amount of memory allocated for child management (from default 6) to 3:

#define SL_ZIGBEE_MAX_END_DEVICE_CHILDREN 3

The convenience stubs provided in config/sl_zigbee_configuration.c can be overridden by defining the appropriate macro and providing the corresponding callback function. For example, an application with custom debug channel input must implement sl_zigbee_debug_handler() to process it. Along with the function definition, the application should provide the following line in its CONFIGURATION_HEADER:

#define SL_ZIGBEE_APPLICATION_HAS_DEBUG_HANDLER

See sl_zigbee_configuration_defaults.h for source code.

Macros#

#define
SL_ZIGBEE_API_MAJOR_VERSION 2

The major version number of the Ember stack release that the application is built against.

#define
SL_ZIGBEE_API_MINOR_VERSION 0

The minor version number of the Ember stack release that the application is built against.

#define
SL_ZIGBEE_STACK_PROFILE 0

Specify the stack profile. The default is Profile 0.

#define
SL_ZIGBEE_STACK_COMPLIANCE_REVISION 22
#define
SL_ZIGBEE_MAX_END_DEVICE_CHILDREN 6

The maximum number of end device children that a router will support.

#define
SL_ZIGBEE_SECURITY_LEVEL 5

The security level used for security at the MAC and network layers. The supported values are 0 (no security) and 5 (payload is encrypted and a four-byte MIC is used for authentication).

#define
SL_ZIGBEE_CHILD_TABLE_SIZE SL_ZIGBEE_MAX_END_DEVICE_CHILDREN

The maximum number of children that a node may have.

#define
SL_ZIGBEE_KEY_TABLE_SIZE 0

The maximum number of link and master keys that a node can store, not including the Trust Center Link Key. The stack maintains special storage for the Trust Center Link Key.

#define
SL_ZIGBEE_CERTIFICATE_TABLE_SIZE 0

The number of entries for the field upgradeable certificate table. Normally, certificates, such as SE certs, are stored in the runtime-unmodifiable MFG area. However, those devices wishing to add new certificates after manufacturing will have to use the normal token space. This defines the size of that table. For most devices 0 is appropriate since there is no need to change certificates in the field. For those wishing to field upgrade devices with new certificates, 1 is the correct size. Anything more is wasting storage.

#define
SL_ZIGBEE_MAX_DEPTH 15

The maximum depth of the tree in ZigBee 2006. This implicitly determines the maximum diameter of the network (SL_ZIGBEE_MAX_HOPS) if that value is not overridden.

#define
SL_ZIGBEE_MAX_HOPS (2 * SL_ZIGBEE_MAX_DEPTH)

The maximum number of hops for a message.

#define
SL_ZIGBEE_PACKET_BUFFER_HEAP_SIZE 4096

The amount of memory to allocate for Packet Buffers available to the stack the default is 4096.

#define
SL_ZIGBEE_MAX_BEACONS_TO_STORE ( (SL_ZIGBEE_PACKET_BUFFER_HEAP_SIZE <= 2048) ? 18 : 37)

The maximum number of beacons to record when performing an active scan to find networks. Legacy APIs such as sli_zigbee_stack_join_network and the several sli_zigbee_stack_find_and_rejoin_network APIs set the number of beacons to record to 1, while the Network Steering plugin will attempt to record the maximum number of beacons.

#define
BEACON_STORAGE_TIMEOUT_MS (3 * 60 * 1000)

The amount of time after which any caches beacons are purged from the cache in RAM. Each beacon stored consumes one packet buffer. The timeout for beacons begins once the first beacon is added to the cache.

#define
SL_ZIGBEE_MAX_NEIGHBOR_TABLE_SIZE 26

The maximum number of router neighbors the stack can keep track of.

#define
SL_ZIGBEE_NEIGHBOR_TABLE_SIZE 16
#define
SL_ZIGBEE_INDIRECT_TRANSMISSION_TIMEOUT 3000

The maximum amount of time (in milliseconds) that the MAC will hold a message for indirect transmission to a child.

#define
SL_ZIGBEE_MAX_INDIRECT_TRANSMISSION_TIMEOUT 30000
#define
SL_ZIGBEE_SEND_MULTICASTS_TO_SLEEPY_ADDRESS false

Define the behavior for the address that the multicasts are sent to. The normal address is RxOnWhenIdle=true (0xFFFD). However, setting this to true can change locally generated multicasts to be sent to the sleepy broadcast address (0xFFFF). Changing the default is NOT Zigbee Pro compliant and may not be inter-operable.

#define
SL_ZIGBEE_END_DEVICE_KEEP_ALIVE_SUPPORT_MODE SL_ZIGBEE_KEEP_ALIVE_SUPPORT_ALL
#define
SECONDS_10 0

The default index into the R21 Child Aging timeout The default value is a timeout of 256 minutes.

#define
MINUTES_2 1
#define
MINUTES_4 2
#define
MINUTES_8 3
#define
MINUTES_16 4
#define
MINUTES_32 5
#define
MINUTES_64 6
#define
MINUTES_128 7
#define
MINUTES_256 8
#define
MINUTES_512 9
#define
MINUTES_1024 10
#define
MINUTES_2048 11
#define
MINUTES_4096 12
#define
MINUTES_8192 13
#define
MINUTES_16384 14
#define
SL_ZIGBEE_END_DEVICE_POLL_TIMEOUT MINUTES_256
#define
SL_ZIGBEE_SHORT_CHILD_TIMEOUT MINUTES_2

The temporary, short timeout that is given to a joining or insecurely rejoining child. The child is expected to send a network encrypted packet to set its timeout to the default value.

#define
SL_ZIGBEE_LINK_POWER_DELTA_INTERVAL 300
#define
SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT 10

The maximum number of APS retried messages that the stack can transmit at any time. Here, transmitting describes the time between the call to ::sli_zigbee_stack_send_unicast() and the subsequent callback to ::sli_zigbee_stack_message_sent_handler().

#define
SL_ZIGBEE_APS_DUPLICATE_REJECTION_MAX_ENTRIES 5

Size of 1 is basically the same thing as no duplicate rejection.

#define
SL_ZIGBEE_BINDING_TABLE_SIZE 0

The maximum number of bindings supported by the stack. The default is 0 bindings. Each binding consumes 2 bytes of RAM.

#define
SL_ZIGBEE_ADDRESS_TABLE_SIZE 8

The maximum number of EUI64<->network address associations that the stack can maintain. The default value is 8.

#define
SL_ZIGBEE_ROUTE_TABLE_SIZE 16

The maximum number of destinations to which a node can route messages. This include both messages originating at this node and those relayed for others. The default value is 16.

#define
SL_ZIGBEE_DISCOVERY_TABLE_SIZE 8

The number of simultaneous route discoveries that a node will support.

#define
SL_ZIGBEE_MULTICAST_TABLE_SIZE 8

The maximum number of multicast groups that the device may be a member of. The default value is 8.

#define
SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE 0

The number of source route table entries if the source route library is not included. The maximum source route table size is 255 entries, since a one-byte index is used, and the index 0xFF is reserved. The default value is 0.

#define
SL_ZIGBEE_MAX_SOURCE_ROUTE_RELAY_COUNT 11
#define
SL_ZIGBEE_DEFAULT_BROADCAST_TABLE_SIZE 15

The maximum number of broadcasts during a single broadcast timeout period. The minimum and default value is 15 and can only be changed on compatible Ember stacks. Be very careful when changing the broadcast table size as it affects timing of the broadcasts and the number of possible broadcasts. Additionally, this value must be universal for all devices in the network. Otherwise, a single router can overwhelm all its neighbors with more broadcasts than they can support. In general, this value should be left alone.

#define
SL_ZIGBEE_BROADCAST_TABLE_SIZE SL_ZIGBEE_DEFAULT_BROADCAST_TABLE_SIZE
#define
SL_ZIGBEE_RETRY_QUEUE_SIZE 16
#define
SL_ZIGBEE_STORE_AND_FORWARD_QUEUE_SIZE 5
#define
SL_ZIGBEE_ASSERT_SERIAL_PORT 1

Settings to control if and where assert information will be printed.

#define
SL_ZIGBEE_FRAGMENT_DELAY_MS 0

The time the stack will wait (in milliseconds) between sending blocks of a fragmented message. The default value is 0.

#define
SL_ZIGBEE_FRAGMENT_MAX_WINDOW_SIZE 8

The maximum number of blocks of a fragmented message that can be sent in a single window is defined to be 8.

#define
SL_ZIGBEE_FRAGMENT_WINDOW_SIZE 1

The number of blocks of a fragmented message that can be sent in a single window. The maximum is SL_ZIGBEE_FRAGMENT_MAX_WINDOW_SIZE. The default value is 1.

#define
SL_ZIGBEE_REQUEST_KEY_TIMEOUT 0

The length of time that the device will wait for an answer to its Application Key Request. For the Trust Center, this is the time it will hold the first request and wait for a second matching request. If both arrive within this time period, the Trust Center will reply to both with the new key. If both requests are not received, the Trust Center will discard the request. The time is in minutes, with the maximum time being 10 minutes. A value of 0 minutes indicates that the Trust Center will not buffer the request but instead respond immediately. Only 1 outstanding request is supported at a time.

#define
SL_ZIGBEE_TRANSIENT_KEY_TIMEOUT_S (300)

The length of time, in seconds, that a trust center will store a transient link key that a device can use to join its network. A transient key is added with a call to sli_zigbee_stack_sec_man_import_transient_key. After the transient key is added, it will be removed once this amount of time has passed. A joining device will not be able to use that key to join until it is added again on the trust center. The default value is 300 seconds, i.e., 5 minutes.

#define
SL_ZIGBEE_TRANSIENT_KEY_SESSION_TIMEOUT_VAL 0xFFFF

A reserved transient key timeout value that, when stored with a "transient" key, prevents its removal from the transient key table when the session is active. Note that some standard security procedures (e.g. Zigbee Direct) require session keys to remain active indefinitely for the duration of the of the exchange.

#define
SL_ZIGBEE_PAN_ID_CONFLICT_REPORT_THRESHOLD 2

The number of PAN ID conflict reports that must be received by the network manager within one minute to trigger a PAN ID change. Very rarely, a corrupt beacon can pass the CRC check and trigger a false PAN id conflict. This is more likely to happen in very large dense networks. Setting this value to 2 or 3 dramatically reduces the chances of a spurious PAN ID change. The maximum value is 63. The default value is 2.

#define
SL_ZIGBEE_MAX_NETWORK_RETRIES 15

The number of network level retries before network layer gives up sending a message, and return with an error. This could be seen as an extension to mac retries, and can take a range between 0..15. Setting the value to 0 disables network retries.

#define
SL_ZIGBEE_ZIGBEE_NUM_NETWORK_RETRIES_DEFAULT 15
#define
SL_ZIGBEE_TASK_COUNT (5)

The number of event tasks that can be tracked for the purpose of processor idling. The Ember Zigbee Pro Stack requires two tasks, an application and associated libraries may use additional tasks, though typically no more than 5 are needed for most applications.

#define
SL_ZIGBEE_MAX_SUPPORTED_NETWORKS 2

The number of networks supported by the stack.

#define
SL_ZIGBEE_SUPPORTED_NETWORKS 1
#define
SL_ZIGBEE_ZLL_GROUP_ADDRESSES 1

The number of unique group identifiers that this device requires.

#define
SL_ZIGBEE_ZLL_RSSI_THRESHOLD -128

The RSSI threshold applied to incoming scan requests.

#define
SL_ZIGBEE_GP_PROXY_TABLE_SIZE 5

The number of proxy table entries supported. Only on SoC images.

#define
SL_ZIGBEE_GP_SINK_TABLE_SIZE 0

The number of sink table entries supported. Only on SoC images.

#define
SL_ZIGBEE_GP_INCOMING_FC_TOKEN_TIMEOUT 7

The timeout (seconds) to restore the GPD incoming security frame counter in the Flash (0 being never).

#define
SL_ZIGBEE_GP_INCOMING_FC_TOKEN_TABLE_SIZE 0

The maximum table size to restore the GPD incoming security frame counter in the Flash (being either 0 or SL_ZIGBEE_GP_PROXY_TABLE_SIZE).

#define
SL_ZIGBEE_GP_INCOMING_FC_IN_SINK_TOKEN_TIMEOUT 7

The timeout (seconds) to restore the GPD incoming security frame counter in the Flash (0 being never).

#define
SL_ZIGBEE_GP_INCOMING_FC_IN_SINK_TOKEN_TABLE_SIZE 0

The maximum table size to restore the GPD incoming security frame counter in the Flash (being either 0 or SL_ZIGBEE_GP_SINK_TABLE_SIZE).

#define
SL_ZIGBEE_MULTI_NETWORK_MAX_ZC_AND_ZR_DEVICES_SUPPORTED 2

The maximum number of ZC and ZR devices can be supported in a multi network mode. All the ZC and ZR devices are expected to be on the same channel with different PAN IDs. Multi network with multiple ZC and ZR devices are supported only on EFR platform.

#define
SL_ZIGBEE_MULTI_NETWORK_MAX_ZC_AND_ZR_DEVICES_SUPPORTED SL_ZIGBEE_SUPPORTED_NETWORKS

The maximum number of ZC and ZR devices can be supported in a multi network mode. All the ZC and ZR devices are expected to be on the same channel with different PAN IDs. Multi network with multiple ZC and ZR devices are supported only on EFR platform.

#define
NETWORK_0_ZC_AND_ZR_COUNT (1)

The number of ZC and ZR device types are present in the application. This configuration is used to expand the various stack tables and events required to support the multi PAN application. Note that for SoC, this define is generated by app builder based on the device type(s) present in the application.

#define
NETWORK_1_ZC_AND_ZR_COUNT (0)
#define
SL_ZIGBEE_ZC_AND_ZR_DEVICE_COUNT (NETWORK_0_ZC_AND_ZR_COUNT + NETWORK_1_ZC_AND_ZR_COUNT)
#define
SL_ZIGBEE_TRANSIENT_DEVICE_MGMT_MAX_CAPACITY 64
#define
SL_ZIGBEE_TRANSIENT_DEVICE_DEFAULT_TIMEOUT_MS (10000u)
#define
SL_ZIGBEE_ENABLE_APS_ACKS_FOR_COMMANDS (false)
#define
SL_ZIGBEE_CUSTOM_MAC_FILTER_TABLE_SIZE 2
#define
SL_ZIGBEE_ZDO_BEACON_SURVEY_MAX_UNIQUE_NETWORKS 8

The 802.15.4 CCA mode that should be used at startup. The default value is RAIL_IEEE802154_CCA_MODE_RSSI. This value is configured in the radio during initialization. The user may override this value at runtime using ::sli_zigbee_stack_set_radio_ieee802154_cca_mode.