General Utilities.

Modules

AES crypto routines
Device Types
Device Types.

Data Structures

struct EmberEui64
EUI 64-bit ID (an IEEE address).
struct EmberIpv6Prefix
An IPv6 Prefix structure.
struct EmberIpv6Address
An IPv6 Address structure.
struct EmberKeyData
This data structure contains the key data that is passed into various other functions.
struct EmberVersion
For use when declaring data that holds the Ember software version type.
struct Ipv6Header
A structure that holds an IPv6 header. All values are in their local byte order (as opposed to network byte order, which might be different).
struct TlsSessionState
Defines a TLS session state.
struct Bytes8
Defines a data type of size 8 bytes.
struct Bytes16
Defines a data type of size 16 bytes.
struct CertificateAuthority
Defines a certificate authority structure.
struct DeviceCertificate
Defines a device certificate structure.
struct EventActions_s
The static part of an event. Each event can be used with only one event queue.
struct Event_s
struct EventQueue_s
An event queue is currently a list of events ordered by execution time.
struct EmberEventControl
Control structure for events.
struct EmberTaskControl
Control structure for tasks.

Macros

#define EMBER_VERSION_NAME "Thread"
If the application defined a configuration file, include it.
#define EMBER_HEAP_SIZE 6000
The minimum heap size allocated for an application.
#define EMBER_MALLOC_HEAP_SIZE_BYTES 32768
The default amount of heap allocated for the mbedtls malloc library, if in use.
#define EMBER_ASSERT_SERIAL_PORT 1
Settings to control if and where assert information will be printed.
#define EMBER_INDIRECT_TRANSMISSION_TIMEOUT 30
The maximum amount of time (in quarter seconds) that the MAC will hold a message for indirect transmission to a child.
#define EMBER_CHILD_TABLE_SIZE 16
The size of the child table. This include sleepy and powered end device children, as well as router eligible end devices.
#define EMBER_RETRY_QUEUE_SIZE 8
#define EMBER_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 EMBER_SECURITY_TO_HOST false
#define EMBER_TASK_COUNT (3)
The number of event tasks that can be tracked for the purpose of processor idling. The Thread stack requires 1, an application and associated libraries may use additional tasks, though typically no more than 3 are needed for most applications.
#define EMBER_SLEEPY_CHILD_POLL_TIMEOUT 240
The number of seconds after which the parent will time an EMBER_SLEEPY_END_DEVICE out of its table if it has not heard a data poll from it.
#define EMBER_END_DEVICE_POLL_TIMEOUT 240
The maximum amount of time that an EMBER_END_DEVICE can wait between polls.
#define EMBER_MFG_RX_NCP_TO_HOST_INTERVAL 50
The number of packets received by an NCP before it decides to send aggregated packet information to the host when running an mfg send test.
#define EMBER_USE_DIRECT_IP_CALLBACK false
#define RIP_MAX_LURKERS 0
#define INT16U_MAX ((uint16_t)(~(uint16_t)0))
Defines the maximum value of an unsigned short data type.
#define DEFAULT_SCAN_DURATION 5
Default scan duration for an energy or active scan.
#define EMBER_COUNTER_STRINGS
Defines the CLI enumerations for the EmberCounterType enum.

Typedefs

typedef uint8_t EmberTaskId
typedef const struct EventActions_s EventActions
The static part of an event. Each event can be used with only one event queue.
typedef struct Event_s Event
typedef struct EventQueue_s EventQueue
An event queue is currently a list of events ordered by execution time.
struct {
EmberEventControl * control
void(* handler )(void)
} EmberEventData
Complete events with a control and a handler procedure.

Enumerations

enum EmberNetworkStatus {
EMBER_NO_NETWORK ,
EMBER_SAVED_NETWORK ,
EMBER_JOINING_NETWORK ,
EMBER_JOINED_NETWORK_ATTACHED ,
EMBER_JOINED_NETWORK_NO_PARENT ,
EMBER_JOINED_NETWORK_ATTACHING
}
Defines the possible join states for a node.
enum EmberJoinFailureReason {
EMBER_JOIN_FAILURE_REASON_NONE ,
EMBER_JOIN_FAILURE_REASON_FORM_SCAN ,
EMBER_JOIN_FAILURE_REASON_ACTIVE_SCAN ,
EMBER_JOIN_FAILURE_REASON_COMMISSIONING ,
EMBER_JOIN_FAILURE_REASON_SECURITY
}
Defines the reason why a network status change occurred.
enum EmberNetworkScanType {
EMBER_ENERGY_SCAN ,
EMBER_ACTIVE_SCAN
}
Type for a network scan.
enum EmberEventUnits {
EMBER_EVENT_INACTIVE = 0,
EMBER_EVENT_MS_TIME ,
EMBER_EVENT_QS_TIME ,
EMBER_EVENT_MINUTE_TIME ,
EMBER_EVENT_ZERO_DELAY
}
Either marks an event as inactive or specifies the units for the event execution time.
enum EmberCounterType {
EMBER_COUNTER_PHY_IN_PACKETS ,
EMBER_COUNTER_PHY_OUT_PACKETS ,
EMBER_COUNTER_PHY_IN_OCTETS ,
EMBER_COUNTER_PHY_OUT_OCTETS ,
EMBER_COUNTER_MAC_IN_UNICAST ,
EMBER_COUNTER_MAC_IN_BROADCAST ,
EMBER_COUNTER_MAC_OUT_UNICAST_SUCCESS ,
EMBER_COUNTER_MAC_OUT_UNICAST_ACK_FAIL ,
EMBER_COUNTER_MAC_OUT_UNICAST_CCA_FAIL ,
EMBER_COUNTER_MAC_OUT_UNICAST_EXT_FAIL ,
EMBER_COUNTER_MAC_OUT_UNICAST_RETRY ,
EMBER_COUNTER_MAC_OUT_BROADCAST ,
EMBER_COUNTER_MAC_OUT_BROADCAST_CCA_FAIL ,
EMBER_COUNTER_MAC_DROP_IN_MEMORY ,
EMBER_COUNTER_MAC_DROP_IN_NO_EUI ,
EMBER_COUNTER_MAC_DROP_IN_FRAME_COUNTER ,
EMBER_COUNTER_MAC_DROP_IN_DECRYPT ,
EMBER_COUNTER_MAC_DROP_IN_DUPLICATE ,
EMBER_COUNTER_IP_IN_UNICAST ,
EMBER_COUNTER_IP_OUT_UNICAST ,
EMBER_COUNTER_IP_IN_MULTICAST ,
EMBER_COUNTER_IP_OUT_MULTICAST ,
EMBER_COUNTER_UDP_IN ,
EMBER_COUNTER_UDP_OUT ,
EMBER_COUNTER_UART_IN_DATA ,
EMBER_COUNTER_UART_IN_MANAGEMENT ,
EMBER_COUNTER_UART_IN_FAIL ,
EMBER_COUNTER_UART_OUT_DATA ,
EMBER_COUNTER_UART_OUT_MANAGEMENT ,
EMBER_COUNTER_UART_OUT_FAIL ,
EMBER_COUNTER_ROUTE_2_HOP_LOOP ,
EMBER_COUNTER_BUFFER_ALLOCATION_FAIL ,
EMBER_ASH_V3_ACK_SENT ,
EMBER_ASH_V3_ACK_RECEIVED ,
EMBER_ASH_V3_NACK_SENT ,
EMBER_ASH_V3_NACK_RECEIVED ,
EMBER_ASH_V3_RESEND ,
EMBER_ASH_V3_BYTES_SENT ,
EMBER_ASH_V3_TOTAL_BYTES_RECEIVED ,
EMBER_ASH_V3_VALID_BYTES_RECEIVED ,
EMBER_ASH_V3_PAYLOAD_BYTES_SENT ,
EMBER_COUNTER_PTA_LO_PRI_REQUESTED ,
EMBER_COUNTER_PTA_HI_PRI_REQUESTED ,
EMBER_COUNTER_PTA_LO_PRI_DENIED ,
EMBER_COUNTER_PTA_HI_PRI_DENIED ,
EMBER_COUNTER_PTA_LO_PRI_TX_ABORTED ,
EMBER_COUNTER_PTA_HI_PRI_TX_ABORTED ,
EMBER_COUNTER_TYPE_COUNT ,
EMBER_COUNTER_ALL = 0xFF
}
Defines the events reported to the application by the emberCounterHandler() .

Functions

EmberStatus emberSetRadioChannel (uint8_t channel)
This function sets the channel for sending and receiving messages. For a list of available radio channels, see the technical specification for the RF communication module in your Developer Kit.
uint8_t emberGetRadioChannel (void)
This function gets the radio channel to which a node is set. The possible return values depend on the radio in use. For a list of available radio channels, see the technical specification for the RF communication module in your Developer Kit.

Variables

uint8_t EmberEui64::bytes [ EUI64_SIZE ]
uint8_t EmberIpv6Prefix::bytes [8]
uint8_t EmberIpv6Address::bytes [16]
uint8_t EmberKeyData::contents [ EMBER_ENCRYPTION_KEY_SIZE ]
uint8_t EmberVersion::major
uint8_t EmberVersion::minor
uint8_t EmberVersion::patch
EmberVersionType EmberVersion::type
uint16_t EmberVersion::build
uint32_t EmberVersion::change
uint16_t Ipv6Header::ipPayloadLength
uint32_t Ipv6Header::flowLabel
uint8_t Ipv6Header::trafficClass
uint8_t Ipv6Header::nextHeader
uint8_t Ipv6Header::hopLimit
uint8_t Ipv6Header::source [16]
uint8_t Ipv6Header::destination [16]
uint8_t * Ipv6Header::ipPayload
uint8_t Ipv6Header::transportProtocol
uint8_t * Ipv6Header::transportHeader
uint16_t Ipv6Header::transportHeaderLength
uint8_t * Ipv6Header::transportPayload
uint16_t Ipv6Header::transportPayloadLength
uint16_t Ipv6Header::sourcePort
uint16_t Ipv6Header::destinationPort
uint8_t Ipv6Header::icmpType
uint8_t Ipv6Header::icmpCode
uint8_t TlsSessionState::idLength
uint16_t TlsSessionState::id [( TLS_SESSION_ID_SIZE +1)/2]
uint8_t TlsSessionState::master [ TLS_MASTER_SECRET_SIZE ]
uint8_t Bytes8::contents [8]
uint8_t Bytes16::contents [16]
const uint8_t * CertificateAuthority::name
uint16_t CertificateAuthority::nameLength
uint8_t * CertificateAuthority::publicKey
uint8_t CertificateAuthority::maxPathLength
const uint8_t * DeviceCertificate::privateKey
const uint8_t * DeviceCertificate::certificate
const uint16_t DeviceCertificate::certificateSize
struct EventQueue_s * EventActions_s::queue
void(* EventActions_s::handler )(struct Event_s *)
void(* EventActions_s::marker )(struct Event_s *)
const char * EventActions_s::name
EventActions * Event_s::actions
struct Event_s * Event_s::next
uint32_t Event_s::timeToExecute
Event * EventQueue_s::isrEvents
Event * EventQueue_s::events
uint32_t EventQueue_s::runTime
bool EventQueue_s::running
EmberEventUnits EmberEventControl::status
EmberTaskId EmberEventControl::taskid
uint32_t EmberEventControl::timeToExecute
EmberEventControl * control
void(* handler )(void)
uint32_t EmberTaskControl::nextEventTime
EmberEventData * EmberTaskControl::events
bool EmberTaskControl::busy

Miscellaneous Ember Types

enum EmberVersionType {
EMBER_VERSION_TYPE_INTERNAL = 0,
EMBER_VERSION_TYPE_ALPHA = 1,
EMBER_VERSION_TYPE_BETA = 2,
EMBER_VERSION_TYPE_GA = 3,
EMBER_VERSION_TYPE_SPECIAL = 4,
EMBER_VERSION_TYPE_LEGACY = 5
}
Type of Ember software version.
enum EmberIcmpType {
ICMP_DESTINATION_UNREACHABLE = 1,
ICMP_PACKET_TOO_BIG = 2,
ICMP_TIME_EXCEEDED = 3,
ICMP_PARAMETER_PROBLEM = 4,
ICMP_PRIVATE_EXPERIMENTATION_0 = 100,
ICMP_ECHO_REQUEST = 128,
ICMP_ECHO_REPLY = 129,
ICMP_ROUTER_SOLICITATION = 133,
ICMP_ROUTER_ADVERTISEMENT = 134,
ICMP_NEIGHBOR_SOLICITATION = 135,
ICMP_NEIGHBOR_ADVERTISEMENT = 136,
ICMP_RPL = 155,
ICMP_DUPLICATE_ADDRESS_REQUEST = 157,
ICMP_DUPLICATE_ADDRESS_CONFIRM = 158
}
Definitions for ICMP message types.
enum EmberIcmpCode {
ICMP_CODE_NO_ROUTE_TO_DESTINATION = 0,
ICMP_CODE_ERROR_IN_SOURCE_ROUTING_HEADER = 7
}
Definitions for ICMP message codes.
enum EmberIpv6NextHeader {
IPV6_NEXT_HEADER_ICMP = 1,
IPV6_NEXT_HEADER_TCP = 6,
IPV6_NEXT_HEADER_UDP = 17,
IPV6_NEXT_HEADER_IPV6 = 41,
IPV6_NEXT_HEADER_ICMPV6 = 58,
IPV6_NEXT_HEADER_NO_NEXT = 59,
IPV6_NEXT_HEADER_MOBILITY = 137,
IPV6_NEXT_HEADER_HOP_BY_HOP = 0,
IPV6_NEXT_HEADER_DESTINATION = 60,
IPV6_NEXT_HEADER_ROUTING = 43,
IPV6_NEXT_HEADER_FRAGMENT = 44,
IPV6_NEXT_HEADER_UNKNOWN = 0xFF
}
Structure to hold an IPv6 "Next Header" See http://www.iana.org/assignments/protocol-numbers .
typedef uint8_t EmberStatus
Size of EUI64 (an IEEE address) in bytes (8).
typedef uint8_t EmberEUI64 [ EUI64_SIZE ]
Obsolete version of EUI64 structure used by some platform-dependent applications. Use EmberEui64 .
typedef uint16_t EmberNodeId
16-bit 802.15.4 network address.
typedef uint16_t EmberPanId
802.15.4 PAN ID.
typedef uint16_t Buffer
For use when declaring a Buffer.
typedef uint16_t EmberMessageBuffer
For use when declaring a buffer to hold a message.
typedef Buffer PacketHeader
For use when declaring a buffer to hold a packet header.
typedef uint16_t ChildStatusFlags
For use when declaring data that holds child status flags.
#define EUI64_SIZE 8
Size of EUI64 (an IEEE address) in bytes (8).
#define EMBER_ENCRYPTION_KEY_SIZE 16
Size of an encryption key in bytes (16).
#define EXTENDED_PAN_ID_SIZE 8
Size of an extended PAN identifier in bytes (8).
#define LEADER_SIZE EUI64_SIZE
Size of a leader EUI64 in bytes (8).
#define EMBER_NETWORK_ID_SIZE 16
Size of a network ID in bytes (16).
#define EMBER_JOIN_KEY_MAX_SIZE 32
Maximum size of a device join key (PSKd) in bytes (32).
#define __EMBERSTATUS_TYPE__
Return type for Ember functions.
#define EMBER_MAX_802_15_4_CHANNEL_NUMBER 26
The maximum 802.15.4 channel number is 26.
#define EMBER_MIN_802_15_4_CHANNEL_NUMBER 11
The minimum 802.15.4 channel number is 11.
#define EMBER_NUM_802_15_4_CHANNELS ( EMBER_MAX_802_15_4_CHANNEL_NUMBER - EMBER_MIN_802_15_4_CHANNEL_NUMBER + 1)
There are sixteen 802.15.4 channels.
#define EMBER_ALL_802_15_4_CHANNELS_MASK 0x07FFF800UL
Bitmask to scan all 802.15.4 channels.
#define EMBER_ZIGBEE_COORDINATOR_ADDRESS 0x0000
The network ID of the coordinator in a ZigBee network is 0x0000.
#define EMBER_NULL_NODE_ID 0xFFFF
A distinguished network ID that will never be assigned to any node. Used to indicate the absence of a node ID.
#define EMBER_VERSION_TYPE_MAX EMBER_VERSION_TYPE_LEGACY
Size of EUI64 (an IEEE address) in bytes (8).
#define EMBER_VERSION_TYPE_NAMES
Size of EUI64 (an IEEE address) in bytes (8).
#define NULL_BUFFER 0x0000
Denotes a null buffer.
#define TLS_SESSION_ID_SIZE 32
Size of EUI64 (an IEEE address) in bytes (8).
#define TLS_MASTER_SECRET_SIZE 48
Size of EUI64 (an IEEE address) in bytes (8).

Broadcast Addresses

Broadcasts are normally sent only to routers. Broadcasts can also be forwarded to end devices, either all of them or only those that do not sleep. Broadcasting to end devices is both significantly more resource-intensive and significantly less reliable than broadcasting to routers.

#define EMBER_BROADCAST_ADDRESS 0xFFFC
#define EMBER_RX_ON_WHEN_IDLE_BROADCAST_ADDRESS 0xFFFD
#define EMBER_SLEEPY_BROADCAST_ADDRESS 0xFFFF

txPowerModes for emberSetTxPowerMode and mfglibSetPower

#define EMBER_TX_POWER_MODE_DEFAULT 0x0000
The application should call emberSetTxPowerMode() with the txPowerMode parameter set to this value to disable all power mode options resulting in normal power mode and bi-directional RF transmitter output.
#define EMBER_TX_POWER_MODE_BOOST 0x0001
The application should call emberSetTxPowerMode() with the txPowerMode parameter set to this value to enable boost power mode.
#define EMBER_TX_POWER_MODE_ALTERNATE 0x0002
The application should call emberSetTxPowerMode() with the txPowerMode parameter set to this value to enable the alternate transmitter output.
#define EMBER_TX_POWER_MODE_BOOST_AND_ALTERNATE
The application should call emberSetTxPowerMode() with the txPowerMode parameter set to this value to enable both boost mode and the alternate transmitter output.

Generic Messages

These messages are system wide.

#define EMBER_SUCCESS (x00)
The generic "no error" message.
#define EMBER_ERR_FATAL (x01)
The generic "fatal error" message.
#define EMBER_BAD_ARGUMENT (x02)
An invalid value was passed as an argument to a function.
#define EMBER_EEPROM_MFG_STACK_VERSION_MISMATCH (x04)
The manufacturing and stack token format in non-volatile memory is different than what the stack expects (returned at initialization).
#define EMBER_INCOMPATIBLE_STATIC_MEMORY_DEFINITIONS (x05)
The static memory definitions in ember-static-memory.h are incompatible with this stack version.
#define EMBER_EEPROM_MFG_VERSION_MISMATCH (x06)
The manufacturing token format in non-volatile memory is different than what the stack expects (returned at initialization).
#define EMBER_EEPROM_STACK_VERSION_MISMATCH (x07)
The stack token format in non-volatile memory is different than what the stack expects (returned at initialization).

Packet Buffer Module Errors

#define EMBER_NO_BUFFERS (x18)
There are no more buffers.

Serial Manager Errors

#define EMBER_SERIAL_INVALID_BAUD_RATE (x20)
Specified an invalid baud rate.
#define EMBER_SERIAL_INVALID_PORT (x21)
Specified an invalid serial port.
#define EMBER_SERIAL_TX_OVERFLOW (x22)
Tried to send too much data.
#define EMBER_SERIAL_RX_OVERFLOW (x23)
There was not enough space to store a received character and the character was dropped.
#define EMBER_SERIAL_RX_FRAME_ERROR (x24)
Detected a UART framing error.
#define EMBER_SERIAL_RX_PARITY_ERROR (x25)
Detected a UART parity error.
#define EMBER_SERIAL_RX_EMPTY (x26)
There is no received data to process.
#define EMBER_SERIAL_RX_OVERRUN_ERROR (x27)
The receive interrupt was not handled in time, and a character was dropped.

MAC Errors

#define EMBER_MAC_TRANSMIT_QUEUE_FULL (x39)
The MAC transmit queue is full.
#define EMBER_MAC_UNKNOWN_HEADER_TYPE (x3A)
MAC header FCF error on receive.
#define EMBER_MAC_ACK_HEADER_TYPE (x3B)
MAC ACK header received.
#define EMBER_MAC_SCANNING (x3D)
The MAC can't complete this task because it is scanning.
#define EMBER_MAC_NO_DATA (x31)
No pending data exists for device doing a data poll.
#define EMBER_MAC_JOINED_NETWORK (x32)
Attempt to scan when we are joined to a network.
#define EMBER_MAC_BAD_SCAN_DURATION (x33)
Scan duration must be 0 to 14 inclusive. Attempt was made to scan with an incorrect duration value.
#define EMBER_MAC_INCORRECT_SCAN_TYPE (x34)
emberStartScan was called with an incorrect scan type.
#define EMBER_MAC_INVALID_CHANNEL_MASK (x35)
emberStartScan was called with an invalid channel mask.
#define EMBER_MAC_COMMAND_TRANSMIT_FAILURE (x36)
Failed to scan current channel because we were unable to transmit the relevent MAC command.
#define EMBER_MAC_NO_ACK_RECEIVED (x40)
We expected to receive an ACK following the transmission, but the MAC level ACK was never received.
#define EMBER_MAC_INDIRECT_TIMEOUT (x42)
Indirect data message timed out before polled.

Simulated EEPROM Errors

#define EMBER_SIM_EEPROM_ERASE_PAGE_GREEN (x43)
The Simulated EEPROM is telling the application that there is at least one flash page to be erased. The GREEN status means the current page has not filled above the ::ERASE_CRITICAL_THRESHOLD.
#define EMBER_SIM_EEPROM_ERASE_PAGE_RED (x44)
The Simulated EEPROM is telling the application that there is at least one flash page to be erased. The RED status means the current page has filled above the ::ERASE_CRITICAL_THRESHOLD.
#define EMBER_SIM_EEPROM_FULL (x45)
The Simulated EEPROM has run out of room to write any new data and the data trying to be set has been lost. This error code is the result of ignoring the ::SIM_EEPROM_ERASE_PAGE_RED error code.
#define EMBER_SIM_EEPROM_INIT_1_FAILED (x48)
Attempt 1 to initialize the Simulated EEPROM has failed.
#define EMBER_SIM_EEPROM_INIT_2_FAILED (x49)
Attempt 2 to initialize the Simulated EEPROM has failed.
#define EMBER_SIM_EEPROM_INIT_3_FAILED (x4A)
Attempt 3 to initialize the Simulated EEPROM has failed.
#define EMBER_SIM_EEPROM_REPAIRING (x4D)
The Simulated EEPROM is repairing itself.

Flash Errors

#define EMBER_ERR_FLASH_WRITE_INHIBITED (x46)
A fatal error has occurred while trying to write data to the Flash. The target memory attempting to be programmed is already programmed. The flash write routines were asked to flip a bit from a 0 to 1, which is physically impossible and the write was therefore inhibited. The data in the flash cannot be trusted after this error.
#define EMBER_ERR_FLASH_VERIFY_FAILED (x47)
A fatal error has occurred while trying to write data to the Flash and the write verification has failed. The data in the flash cannot be trusted after this error, and it is possible this error is the result of exceeding the life cycles of the flash.
#define EMBER_ERR_FLASH_PROG_FAIL (x4B)
#define EMBER_ERR_FLASH_ERASE_FAIL (x4C)

Bootloader Errors

#define EMBER_ERR_BOOTLOADER_TRAP_TABLE_BAD (x58)
The bootloader received an invalid message (failed attempt to go into bootloader).
#define EMBER_ERR_BOOTLOADER_TRAP_UNKNOWN (x59)
Bootloader received an invalid message (failed attempt to go into bootloader).
#define EMBER_ERR_BOOTLOADER_NO_IMAGE (x05A)
The bootloader cannot complete the bootload operation because either an image was not found or the image exceeded memory bounds.

Transport Errors

#define EMBER_DELIVERY_FAILED (x66)
The APS layer attempted to send or deliver a message, but it failed.
#define EMBER_BINDING_INDEX_OUT_OF_RANGE (x69)
This binding index is out of range for the current binding table.
#define EMBER_ADDRESS_TABLE_INDEX_OUT_OF_RANGE (x6A)
This address table index is out of range for the current address table.
#define EMBER_INVALID_BINDING_INDEX (x6C)
An invalid binding table index was given to a function.
#define EMBER_INVALID_CALL (x70)
The API call is not allowed given the current state of the stack.
#define EMBER_COST_NOT_KNOWN (x71)
The link cost to a node is not known.
#define EMBER_MAX_MESSAGE_LIMIT_REACHED (x72)
The maximum number of in-flight messages (i.e. ::EMBER_APS_UNICAST_MESSAGE_COUNT) has been reached.
#define EMBER_MESSAGE_TOO_LONG (x74)
The message to be transmitted is too big to fit into a single over-the-air packet.
#define EMBER_BINDING_IS_ACTIVE (x75)
The application is trying to delete or overwrite a binding that is in use.
#define EMBER_ADDRESS_TABLE_ENTRY_IS_ACTIVE (x76)
The application is trying to overwrite an address table entry that is in use.

HAL Module Errors

#define EMBER_ADC_CONVERSION_DONE (x80)
Conversion is complete.
#define EMBER_ADC_CONVERSION_BUSY (x81)
Conversion cannot be done because a request is being processed.
#define EMBER_ADC_CONVERSION_DEFERRED (x82)
Conversion is deferred until the current request has been processed.
#define EMBER_ADC_NO_CONVERSION_PENDING (x84)
No results are pending.
#define EMBER_SLEEP_INTERRUPTED (x85)
Sleeping (for a duration) has been abnormally interrupted and exited prematurely.

PHY Errors

#define EMBER_PHY_TX_UNDERFLOW (x88)
The transmit hardware buffer underflowed.
#define EMBER_PHY_TX_INCOMPLETE (x89)
The transmit hardware did not finish transmitting a packet.
#define EMBER_PHY_INVALID_CHANNEL (x8A)
An unsupported channel setting was specified.
#define EMBER_PHY_INVALID_POWER (x8B)
An unsupported power setting was specified.
#define EMBER_PHY_TX_BUSY (x8C)
The requested operation cannot be completed because the radio is currently busy, either transmitting a packet or performing calibration.
#define EMBER_PHY_TX_CCA_FAIL (x8D)
The transmit attempt failed because all CCA attempts indicated that the channel was busy.
#define EMBER_PHY_OSCILLATOR_CHECK_FAILED (x8E)
The software installed on the hardware doesn't recognize the hardware radio type.
#define EMBER_PHY_ACK_RECEIVED (x8F)
The expected ACK was received after the last transmission.

Return Codes Passed to emberStackStatusHandler()

See also ::emberStackStatusHandler().

#define EMBER_NETWORK_UP (x90)
The stack software has completed initialization and is ready to send and receive packets over the air.
#define EMBER_NETWORK_DOWN (x91)
The network is not operating.
#define EMBER_JOIN_FAILED (x94)
An attempt to join a network failed.
#define EMBER_MOVE_FAILED (x96)
After moving, a mobile node's attempt to re-establish contact with the network failed.
#define EMBER_CANNOT_JOIN_AS_ROUTER (x98)
An attempt to join as a router failed due to a ZigBee versus ZigBee Pro incompatibility. ZigBee devices joining ZigBee Pro networks (or vice versa) must join as End Devices, not Routers.
#define EMBER_NODE_ID_CHANGED (x99)
The local node ID has changed. The application can obtain the new node ID by calling ::emberGetNodeId().
#define EMBER_PAN_ID_CHANGED (x9A)
The local PAN ID has changed. The application can obtain the new PAN ID by calling emberGetPanId() .
#define EMBER_CHANNEL_CHANGED (x9B)
The channel has changed.
#define EMBER_NO_BEACONS (xAB)
An attempt to join or rejoin the network failed because no router beacons could be heard by the joining node.
#define EMBER_RECEIVED_KEY_IN_THE_CLEAR (xAC)
An attempt was made to join a Secured Network using a pre-configured key, but the Trust Center sent back a Network Key in-the-clear when an encrypted Network Key was required. (::EMBER_REQUIRE_ENCRYPTED_KEY).
#define EMBER_NO_NETWORK_KEY_RECEIVED (xAD)
An attempt was made to join a Secured Network, but the device did not receive a Network Key.
#define EMBER_NO_LINK_KEY_RECEIVED (xAE)
After a device joined a Secured Network, a Link Key was requested (::EMBER_GET_LINK_KEY_WHEN_JOINING) but no response was ever received.
#define EMBER_PRECONFIGURED_KEY_REQUIRED (xAF)
An attempt was made to join a Secured Network without a pre-configured key, but the Trust Center sent encrypted data using a pre-configured key.

Security Errors

#define EMBER_KEY_INVALID (xB2)
The passed key data is not valid. A key of all zeros or all F's are reserved values and cannot be used.
#define EMBER_INVALID_SECURITY_LEVEL (x95)
The chosen security level (the value of EMBER_SECURITY_LEVEL ) is not supported by the stack.
#define EMBER_APS_ENCRYPTION_ERROR (xA6)
There was an error in trying to encrypt at the APS Level.
#define EMBER_TRUST_CENTER_MASTER_KEY_NOT_SET (xA7)
There was an attempt to form a network using High security without setting the Trust Center master key first.
#define EMBER_SECURITY_STATE_NOT_SET (xA8)
There was an attempt to form or join a network with security without calling ::emberSetInitialSecurityState() first.
#define EMBER_KEY_TABLE_INVALID_ADDRESS (xB3)
There was an attempt to set an entry in the key table using an invalid long address. An entry cannot be set using either the local device's or Trust Center's IEEE address. Or an entry already exists in the table with the same IEEE address. An Address of all zeros or all F's are not valid addresses in 802.15.4.
#define EMBER_SECURITY_CONFIGURATION_INVALID (xB7)
There was an attempt to set a security configuration that is not valid given the other security settings.
#define EMBER_TOO_SOON_FOR_SWITCH_KEY (xB8)
There was an attempt to broadcast a key switch too quickly after broadcasting the next network key. The Trust Center must wait at least a period equal to the broadcast timeout so that all routers have a chance to receive the broadcast of the new network key.
#define EMBER_SIGNATURE_VERIFY_FAILURE (xB9)
The received signature corresponding to the message that was passed to the CBKE Library failed verification, it is not valid.
#define EMBER_KEY_NOT_AUTHORIZED (xBB)
The message could not be sent because the link key corresponding to the destination is not authorized for use in APS data messages. APS Commands (sent by the stack) are allowed. To use it for encryption of APS data messages it must be authorized using a key agreement protocol (such as CBKE).
#define EMBER_MAC_COUNTER_ERROR (xDB)
MAC encryption failed.
#define EMBER_SECURITY_DATA_INVALID (xBD)
The security data provided was not valid, or an integrity check failed.

Miscellaneous Network Errors

#define EMBER_NOT_JOINED (x93)
The node has not joined a network.
#define EMBER_NETWORK_BUSY (xA1)
A message cannot be sent because the network is currently overloaded.
#define EMBER_INVALID_ENDPOINT (xA3)
The application tried to send a message using an endpoint that it has not defined.
#define EMBER_BINDING_HAS_CHANGED (xA4)
The application tried to use a binding that has been remotely modified and the change has not yet been reported to the application.
#define EMBER_INSUFFICIENT_RANDOM_DATA (xA5)
An attempt to generate random bytes failed because of insufficient random data from the radio.
#define EMBER_ROUTE_FAILURE (xA9)
A route could not be found.
#define EMBER_MANY_TO_ONE_ROUTE_FAILURE (xAA)

Miscellaneous Utility Errors

#define EMBER_STACK_AND_HARDWARE_MISMATCH (xB0)
A critical and fatal error indicating that the version of the stack trying to run does not match with the chip it is running on. The software (stack) on the chip must be replaced with software that is compatible with the chip.
#define EMBER_INDEX_OUT_OF_RANGE (xB1)
An index was passed into the function that was larger than the valid range.
#define EMBER_TABLE_FULL (xB4)
There are no empty entries left in the table.
#define EMBER_TABLE_ENTRY_ERASED (xB6)
The requested table entry has been erased and contains no valid data.
#define EMBER_LIBRARY_NOT_PRESENT (xB5)
The requested function cannot be executed because the library that contains the necessary functionality is not present.
#define EMBER_OPERATION_IN_PROGRESS (xBA)
The stack accepted the command and is currently processing the request. The results will be returned via an appropriate handler.
#define EMBER_TRUST_CENTER_EUI_HAS_CHANGED (xBC)
The EUI of the Trust center has changed due to a successful rejoin. The device may need to perform other authentication to verify the new TC is authorized to take over.

Application Errors

These error codes are available for application use.

#define EMBER_APPLICATION_ERROR_0 (xF0)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_1 (xF1)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_2 (xF2)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_3 (xF3)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_4 (xF4)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_5 (xF5)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_6 (xF6)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_7 (xF7)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_8 (xF8)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_9 (xF9)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_10 (xFA)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_11 (xFB)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_12 (xFC)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_13 (xFD)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_14 (xFE)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.
#define EMBER_APPLICATION_ERROR_15 (xFF)
This error is reserved for customer application use. This will never be returned from any portion of the network stack or HAL.

Radio-specific Functions

void emberRadioNeedsCalibratingHandler (void)
This function enables boost power mode and/or the alternate transmit path.
void emberCalibrateCurrentChannel (void)
This function calibrates the current channel. The stack will notify the application of the need for channel calibration via the emberRadioNeedsCalibratingHandler() callback function during emberTick() . This function should only be called from within the context of the emberRadioNeedsCalibratingHandler() callback function. Calibration can take up to 150 ms. Note, if this function is called when the radio is off, it will turn the radio on and leave it on.

Detailed Description

All configurations have defaults, therefore many applications may not need to do anything special. However, you can override these defaults by creating a CONFIGURATION_HEADER and within this header, defining the appropriate macro to a different size. For example, to increase the child table size from 16 (the default) to 32:

1 #define EMBER_CHILD_TABLE_SIZE 32

The convenience stubs provided in hal/ember-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 emberDebugHandler() to process it. Along with the function definition, the application should provide the following line in its CONFIGURATION_HEADER:

1 #define EMBER_APPLICATION_HAS_DEBUG_HANDLER

See ember-configuration-defaults.h for source code.

See ember-types.h for source code.

Many Thread API functions return an EmberStatus value to indicate the success or failure of the call. Return codes are one byte long. This page documents the possible status codes and their meanings.

See error-def.h for source code.

See also error.h for information on how the values for the return codes are built up from these definitions. The file error-def.h is separated from error.h because utilities will use this file to parse the return codes.

Note
Do not include error-def.h directly. It is included by error.h inside an enum typedef, which is in turn included by ember.h.

See stack-info.h for source code.

Macro Definition Documentation

#define __EMBERSTATUS_TYPE__
#define DEFAULT_SCAN_DURATION   5

The value is the exponent of the number of scan periods, where a scan period is 960 symbols and a symbol is 16 microseconds. The scan lasts for ((2^duration) + 1) scan periods. The value of this duration must be less than 15. The time corresponding to the first few values is as follows: 0 = 31 msec, 1 = 46 msec, 2 = 77 msec, 3 = 138 msec, 4 = 261 msec, 5 = 507 msec, 6 = 998 msec.

#define EMBER_ADC_CONVERSION_BUSY ( x81 )
#define EMBER_ADC_CONVERSION_DEFERRED ( x82 )
#define EMBER_ADC_CONVERSION_DONE ( x80 )
#define EMBER_ADC_NO_CONVERSION_PENDING ( x84 )
#define EMBER_ADDRESS_TABLE_ENTRY_IS_ACTIVE ( x76 )
#define EMBER_ADDRESS_TABLE_INDEX_OUT_OF_RANGE ( x6A )
#define EMBER_ALL_802_15_4_CHANNELS_MASK   0x07FFF800UL
#define EMBER_APPLICATION_ERROR_0 ( xF0 )
#define EMBER_APPLICATION_ERROR_1 ( xF1 )
#define EMBER_APPLICATION_ERROR_10 ( xFA )
#define EMBER_APPLICATION_ERROR_11 ( xFB )
#define EMBER_APPLICATION_ERROR_12 ( xFC )
#define EMBER_APPLICATION_ERROR_13 ( xFD )
#define EMBER_APPLICATION_ERROR_14 ( xFE )
#define EMBER_APPLICATION_ERROR_15 ( xFF )
#define EMBER_APPLICATION_ERROR_2 ( xF2 )
#define EMBER_APPLICATION_ERROR_3 ( xF3 )
#define EMBER_APPLICATION_ERROR_4 ( xF4 )
#define EMBER_APPLICATION_ERROR_5 ( xF5 )
#define EMBER_APPLICATION_ERROR_6 ( xF6 )
#define EMBER_APPLICATION_ERROR_7 ( xF7 )
#define EMBER_APPLICATION_ERROR_8 ( xF8 )
#define EMBER_APPLICATION_ERROR_9 ( xF9 )
#define EMBER_APS_ENCRYPTION_ERROR ( xA6 )

This could result from either an inability to determine the long address of the recipient from the short address (no entry in the binding table) or there is no link key entry in the table associated with the destination, or there was a failure to load the correct key into the encryption core.

#define EMBER_ASSERT_SERIAL_PORT   1

The output can be suppressed by defining EMBER_ASSERT_OUTPUT_DISABLED . The serial port to which the output is sent can be changed by defining EMBER_ASSERT_SERIAL_PORT as the desired port.

The default is to have assert output on and sent to serial port 1.

#define EMBER_BAD_ARGUMENT ( x02 )
#define EMBER_BINDING_HAS_CHANGED ( xA4 )
#define EMBER_BINDING_INDEX_OUT_OF_RANGE ( x69 )
#define EMBER_BINDING_IS_ACTIVE ( x75 )
#define EMBER_BROADCAST_ADDRESS   0xFFFC

Broadcast to all routers.

#define EMBER_CANNOT_JOIN_AS_ROUTER ( x98 )
#define EMBER_CHANNEL_CHANGED ( x9B )
#define EMBER_CHILD_TABLE_SIZE   16

Note: We do not support greater than 32 children, so the maximum value for this configuration setting is 32.

#define EMBER_COST_NOT_KNOWN ( x71 )
#define EMBER_COUNTER_STRINGS
#define EMBER_DELIVERY_FAILED ( x66 )
#define EMBER_EEPROM_MFG_STACK_VERSION_MISMATCH ( x04 )
#define EMBER_EEPROM_MFG_VERSION_MISMATCH ( x06 )
#define EMBER_EEPROM_STACK_VERSION_MISMATCH ( x07 )
#define EMBER_ENCRYPTION_KEY_SIZE   16
#define EMBER_END_DEVICE_POLL_TIMEOUT   240

The default is 240 seconds.

If no poll is heard within this time, then the parent removes the EMBER_END_DEVICE from its tables.

#define EMBER_ERR_BOOTLOADER_NO_IMAGE ( x05A )
#define EMBER_ERR_BOOTLOADER_TRAP_TABLE_BAD ( x58 )
#define EMBER_ERR_BOOTLOADER_TRAP_UNKNOWN ( x59 )
#define EMBER_ERR_FATAL ( x01 )
#define EMBER_ERR_FLASH_ERASE_FAIL ( x4C )

A fatal error has occurred while trying to erase flash, possibly due to write protection. The data in the flash cannot be trusted after this error, and it is possible this error is the result of exceeding the life cycles of the flash.

#define EMBER_ERR_FLASH_PROG_FAIL ( x4B )

A fatal error has occurred while trying to write data to the flash, possibly due to write protection or an invalid address. The data in the flash cannot be trusted after this error, and it is possible this error is the result of exceeding the life cycles of the flash.

#define EMBER_ERR_FLASH_VERIFY_FAILED ( x47 )

Referenced by halSimEepromCallback() .

#define EMBER_ERR_FLASH_WRITE_INHIBITED ( x46 )

Referenced by halSimEepromCallback() .

#define EMBER_HEAP_SIZE   6000
#define EMBER_INCOMPATIBLE_STATIC_MEMORY_DEFINITIONS ( x05 )
#define EMBER_INDEX_OUT_OF_RANGE ( xB1 )
#define EMBER_INDIRECT_TRANSMISSION_TIMEOUT   30

The default is 30 quarter seconds (7.5 seconds). The maximum value is 30000 quarter seconds (125 minutes). Larger values will cause rollover confusion.

#define EMBER_INSUFFICIENT_RANDOM_DATA ( xA5 )
#define EMBER_INVALID_BINDING_INDEX ( x6C )
#define EMBER_INVALID_CALL ( x70 )
#define EMBER_INVALID_ENDPOINT ( xA3 )
#define EMBER_INVALID_SECURITY_LEVEL ( x95 )
#define EMBER_JOIN_FAILED ( x94 )
#define EMBER_JOIN_KEY_MAX_SIZE   32
#define EMBER_KEY_INVALID ( xB2 )
#define EMBER_KEY_NOT_AUTHORIZED ( xBB )
#define EMBER_KEY_TABLE_INVALID_ADDRESS ( xB3 )
#define EMBER_LIBRARY_NOT_PRESENT ( xB5 )
#define EMBER_MAC_ACK_HEADER_TYPE ( x3B )
#define EMBER_MAC_BAD_SCAN_DURATION ( x33 )
#define EMBER_MAC_COMMAND_TRANSMIT_FAILURE ( x36 )
#define EMBER_MAC_COUNTER_ERROR ( xDB )
#define EMBER_MAC_INCORRECT_SCAN_TYPE ( x34 )
#define EMBER_MAC_INDIRECT_TIMEOUT ( x42 )
#define EMBER_MAC_INVALID_CHANNEL_MASK ( x35 )
#define EMBER_MAC_JOINED_NETWORK ( x32 )
#define EMBER_MAC_NO_ACK_RECEIVED ( x40 )
#define EMBER_MAC_NO_DATA ( x31 )
#define EMBER_MAC_SCANNING ( x3D )
#define EMBER_MAC_TRANSMIT_QUEUE_FULL ( x39 )
#define EMBER_MAC_UNKNOWN_HEADER_TYPE ( x3A )
#define EMBER_MALLOC_HEAP_SIZE_BYTES   32768
#define EMBER_MANY_TO_ONE_ROUTE_FAILURE ( xAA )

A ZigBee route error command frame was received indicating that a message sent to this node along a many-to-one route failed en route. The route error frame was delivered by an ad-hoc search for a functioning route.

#define EMBER_MAX_802_15_4_CHANNEL_NUMBER   26
#define EMBER_MAX_MESSAGE_LIMIT_REACHED ( x72 )
#define EMBER_MESSAGE_TOO_LONG ( x74 )
#define EMBER_MFG_RX_NCP_TO_HOST_INTERVAL   50

The default value is 50 packets.

#define EMBER_MIN_802_15_4_CHANNEL_NUMBER   11
#define EMBER_MOVE_FAILED ( x96 )
#define EMBER_NETWORK_BUSY ( xA1 )
#define EMBER_NETWORK_DOWN ( x91 )
#define EMBER_NETWORK_ID_SIZE   16
#define EMBER_NETWORK_UP ( x90 )
#define EMBER_NO_BEACONS ( xAB )
#define EMBER_NO_BUFFERS ( x18 )
#define EMBER_NO_LINK_KEY_RECEIVED ( xAE )
#define EMBER_NO_NETWORK_KEY_RECEIVED ( xAD )
#define EMBER_NODE_ID_CHANGED ( x99 )
#define EMBER_NOT_JOINED ( x93 )
#define EMBER_NULL_NODE_ID   0xFFFF
#define EMBER_NUM_802_15_4_CHANNELS   ( EMBER_MAX_802_15_4_CHANNEL_NUMBER - EMBER_MIN_802_15_4_CHANNEL_NUMBER + 1)
#define EMBER_OPERATION_IN_PROGRESS ( xBA )
#define EMBER_PAN_ID_CHANGED ( x9A )
#define EMBER_PHY_ACK_RECEIVED ( x8F )
#define EMBER_PHY_INVALID_CHANNEL ( x8A )
#define EMBER_PHY_INVALID_POWER ( x8B )
#define EMBER_PHY_OSCILLATOR_CHECK_FAILED ( x8E )
#define EMBER_PHY_TX_BUSY ( x8C )
#define EMBER_PHY_TX_CCA_FAIL ( x8D )
#define EMBER_PHY_TX_INCOMPLETE ( x89 )
#define EMBER_PHY_TX_UNDERFLOW ( x88 )
#define EMBER_PRECONFIGURED_KEY_REQUIRED ( xAF )
#define EMBER_RECEIVED_KEY_IN_THE_CLEAR ( xAC )
#define EMBER_RETRY_QUEUE_SIZE   8
#define EMBER_ROUTE_FAILURE ( xA9 )
#define EMBER_RX_ON_WHEN_IDLE_BROADCAST_ADDRESS   0xFFFD

Broadcast to all non-sleepy devices.

#define EMBER_SECURITY_CONFIGURATION_INVALID ( xB7 )
#define EMBER_SECURITY_DATA_INVALID ( xBD )
#define EMBER_SECURITY_LEVEL   5
#define EMBER_SECURITY_STATE_NOT_SET ( xA8 )
#define EMBER_SECURITY_TO_HOST   false
#define EMBER_SERIAL_INVALID_BAUD_RATE ( x20 )
#define EMBER_SERIAL_INVALID_PORT ( x21 )
#define EMBER_SERIAL_RX_EMPTY ( x26 )
#define EMBER_SERIAL_RX_FRAME_ERROR ( x24 )
#define EMBER_SERIAL_RX_OVERFLOW ( x23 )
#define EMBER_SERIAL_RX_OVERRUN_ERROR ( x27 )
#define EMBER_SERIAL_RX_PARITY_ERROR ( x25 )
#define EMBER_SERIAL_TX_OVERFLOW ( x22 )
#define EMBER_SIGNATURE_VERIFY_FAILURE ( xB9 )
#define EMBER_SIM_EEPROM_ERASE_PAGE_GREEN ( x43 )

The application should call the function halSimEepromErasePage() when it can to erase a page.

Referenced by halSimEepromCallback() .

#define EMBER_SIM_EEPROM_ERASE_PAGE_RED ( x44 )

Due to the shrinking availability of write space, there is a danger of data loss. The application must call the function halSimEepromErasePage() as soon as possible to erase a page.

Referenced by halSimEepromCallback() .

#define EMBER_SIM_EEPROM_FULL ( x45 )

The application must call the function halSimEepromErasePage() to make room for any further calls to set a token.

Referenced by halSimEepromCallback() .

#define EMBER_SIM_EEPROM_INIT_1_FAILED ( x48 )

This failure means the information already stored in Flash (or a lack thereof), is fatally incompatible with the token information compiled into the code image being run.

#define EMBER_SIM_EEPROM_INIT_2_FAILED ( x49 )

This failure means Attempt 1 failed, and the token system failed to properly reload default tokens and reset the Simulated EEPROM.

#define EMBER_SIM_EEPROM_INIT_3_FAILED ( x4A )

This failure means one or both of the tokens ::TOKEN_MFG_NVDATA_VERSION or ::TOKEN_STACK_NVDATA_VERSION were incorrect and the token system failed to properly reload default tokens and reset the Simulated EEPROM.

#define EMBER_SIM_EEPROM_REPAIRING ( x4D )

While there's nothing for an app to do when the SimEE is going to repair itself (SimEE has to be fully functional for the rest of the system to work), alert the application to the fact that repairing is occurring. There are debugging scenarios where an app might want to know that repairing is happening; such as monitoring frequency.

Note
Common situations will trigger an expected repair, such as using an erased chip or changing token definitions.

Referenced by halSimEepromCallback() .

#define EMBER_SLEEP_INTERRUPTED ( x85 )
#define EMBER_SLEEPY_BROADCAST_ADDRESS   0xFFFF

Broadcast to all devices, including sleepy end devices.

#define EMBER_SLEEPY_CHILD_POLL_TIMEOUT   240

The default is 240 seconds. The maximum value is 2^32 - 1 (136 years).

This value is determined by the child and communicated to the parent via the MLE protocol.

#define EMBER_STACK_AND_HARDWARE_MISMATCH ( xB0 )
#define EMBER_SUCCESS ( x00 )
#define EMBER_TABLE_ENTRY_ERASED ( xB6 )
#define EMBER_TABLE_FULL ( xB4 )
#define EMBER_TASK_COUNT   (3)
#define EMBER_TOO_SOON_FOR_SWITCH_KEY ( xB8 )
#define EMBER_TRUST_CENTER_EUI_HAS_CHANGED ( xBC )
#define EMBER_TRUST_CENTER_MASTER_KEY_NOT_SET ( xA7 )
#define EMBER_TX_POWER_MODE_ALTERNATE   0x0002
#define EMBER_TX_POWER_MODE_BOOST   0x0001
#define EMBER_TX_POWER_MODE_BOOST_AND_ALTERNATE
Value:
#define EMBER_TX_POWER_MODE_BOOST
The application should call emberSetTxPowerMode() with the txPowerMode parameter set to this value to...
Definition: ember-types.h:815
#define EMBER_TX_POWER_MODE_ALTERNATE
The application should call emberSetTxPowerMode() with the txPowerMode parameter set to this value to...
Definition: ember-types.h:820
#define EMBER_TX_POWER_MODE_DEFAULT   0x0000
#define EMBER_USE_DIRECT_IP_CALLBACK   false
#define EMBER_VERSION_NAME   "Thread"

The default version name for an application.

#define EMBER_VERSION_TYPE_MAX EMBER_VERSION_TYPE_LEGACY
#define EMBER_VERSION_TYPE_NAMES
Value:
"Internal" , \
"Alpha" , \
"Beta" , \
"GA" , \
"Special" , \
"Legacy" , \
#define EMBER_ZIGBEE_COORDINATOR_ADDRESS   0x0000
#define EUI64_SIZE   8
#define EXTENDED_PAN_ID_SIZE   8
#define INT16U_MAX   ((uint16_t)(~(uint16_t)0))
#define LEADER_SIZE EUI64_SIZE
#define NULL_BUFFER   0x0000
#define RIP_MAX_LURKERS   0
#define TLS_MASTER_SECRET_SIZE   48
#define TLS_SESSION_ID_SIZE   32

Typedef Documentation

typedef uint16_t Buffer
typedef uint16_t ChildStatusFlags
typedef uint8_t EmberEUI64[ EUI64_SIZE ]
typedef { ... } EmberEventData

An application typically creates an array of events along with their handlers. The main loop passes the array to ::emberRunEvents() to call the handlers of any events whose time has arrived.

typedef uint16_t EmberMessageBuffer
typedef uint16_t EmberNodeId
typedef uint16_t EmberPanId
typedef uint8_t EmberStatus
typedef uint8_t EmberTaskId

brief An identifier for a task

typedef struct Event_s Event
typedef const struct EventActions_s EventActions

Enumeration Type Documentation

Enumerator
EMBER_COUNTER_PHY_IN_PACKETS

Every packet that comes in over the radio (except MAC acks).

EMBER_COUNTER_PHY_OUT_PACKETS

Every packet that goes out over the radio (except MAC acks).

EMBER_COUNTER_PHY_IN_OCTETS

Every incoming byte, including the 802.15.4 length byte. Note MAC acks are not counted.

EMBER_COUNTER_PHY_OUT_OCTETS

Every outgoing byte, including the 802.15.4 length byte. MAC retries contribute to the count, but not MAC acks.

EMBER_COUNTER_MAC_IN_UNICAST

Incoming MAC unicasts post duplicate detection.

EMBER_COUNTER_MAC_IN_BROADCAST
EMBER_COUNTER_MAC_OUT_UNICAST_SUCCESS

Outgoing MAC unicasts for which an ack was received possibly after retrying.

EMBER_COUNTER_MAC_OUT_UNICAST_ACK_FAIL

Outgoing unicasts for which ack was never received even after retrying.

EMBER_COUNTER_MAC_OUT_UNICAST_CCA_FAIL

Outgoing MAC packets which were never transmitted because clear channel assessment always returned busy.

EMBER_COUNTER_MAC_OUT_UNICAST_EXT_FAIL

Outgoing unicasts that failed even after extended MAC retries.

EMBER_COUNTER_MAC_OUT_UNICAST_RETRY

Outgoing unicast retries. This does not count the initial transmission. Note a single MAC transmission can result in multiple retries.

EMBER_COUNTER_MAC_OUT_BROADCAST
EMBER_COUNTER_MAC_OUT_BROADCAST_CCA_FAIL
EMBER_COUNTER_MAC_DROP_IN_MEMORY

Dropped incoming MAC packets (out of memory).

EMBER_COUNTER_MAC_DROP_IN_NO_EUI

Dropped incoming MAC packets (no EUI).

EMBER_COUNTER_MAC_DROP_IN_FRAME_COUNTER

Dropped incoming MAC packets (invalid frame counter).

EMBER_COUNTER_MAC_DROP_IN_DECRYPT

Dropped incoming MAC packets (can't decrypt).

EMBER_COUNTER_MAC_DROP_IN_DUPLICATE

Dropped incoming MAC packets (duplicate message).

EMBER_COUNTER_IP_IN_UNICAST

IP packets

EMBER_COUNTER_IP_OUT_UNICAST
EMBER_COUNTER_IP_IN_MULTICAST
EMBER_COUNTER_IP_OUT_MULTICAST
EMBER_COUNTER_UDP_IN

Application UDP messages. Excludes DNS, PANA, and MLE.

EMBER_COUNTER_UDP_OUT
EMBER_COUNTER_UART_IN_DATA

UART in and out data

EMBER_COUNTER_UART_IN_MANAGEMENT
EMBER_COUNTER_UART_IN_FAIL
EMBER_COUNTER_UART_OUT_DATA
EMBER_COUNTER_UART_OUT_MANAGEMENT
EMBER_COUNTER_UART_OUT_FAIL
EMBER_COUNTER_ROUTE_2_HOP_LOOP
EMBER_COUNTER_BUFFER_ALLOCATION_FAIL
EMBER_ASH_V3_ACK_SENT

ASHv3

EMBER_ASH_V3_ACK_RECEIVED
EMBER_ASH_V3_NACK_SENT
EMBER_ASH_V3_NACK_RECEIVED
EMBER_ASH_V3_RESEND
EMBER_ASH_V3_BYTES_SENT
EMBER_ASH_V3_TOTAL_BYTES_RECEIVED
EMBER_ASH_V3_VALID_BYTES_RECEIVED
EMBER_ASH_V3_PAYLOAD_BYTES_SENT
EMBER_COUNTER_PTA_LO_PRI_REQUESTED

The number of times a low-priority packet traffic arbitration request has been made.

EMBER_COUNTER_PTA_HI_PRI_REQUESTED

The number of times a high-priority packet traffic arbitration request has been made.

EMBER_COUNTER_PTA_LO_PRI_DENIED

The number of times a low-priority packet traffic arbitration request has been denied.

EMBER_COUNTER_PTA_HI_PRI_DENIED

The number of times a high-priority packet traffic arbitration request has been denied.

EMBER_COUNTER_PTA_LO_PRI_TX_ABORTED

The number of times a low-priority packet traffic arbitration transmission has been aborted.

EMBER_COUNTER_PTA_HI_PRI_TX_ABORTED

The number of times a high-priority packet traffic arbitration transmission has been aborted.

EMBER_COUNTER_TYPE_COUNT

A placeholder giving the number of Ember counter types.

EMBER_COUNTER_ALL
Enumerator
EMBER_EVENT_INACTIVE

The event is not scheduled to run.

EMBER_EVENT_MS_TIME

The execution time is in approximate milliseconds.

EMBER_EVENT_QS_TIME

The execution time is in 'binary' quarter seconds (256 approximate milliseconds each).

EMBER_EVENT_MINUTE_TIME

The execution time is in 'binary' minutes (65536 approximate milliseconds each).

EMBER_EVENT_ZERO_DELAY

The event is scheduled to run at the earliest opportunity.

Enumerator
ICMP_CODE_NO_ROUTE_TO_DESTINATION
ICMP_CODE_ERROR_IN_SOURCE_ROUTING_HEADER
Enumerator
ICMP_DESTINATION_UNREACHABLE
ICMP_PACKET_TOO_BIG
ICMP_TIME_EXCEEDED
ICMP_PARAMETER_PROBLEM
ICMP_PRIVATE_EXPERIMENTATION_0
ICMP_ECHO_REQUEST
ICMP_ECHO_REPLY
ICMP_ROUTER_SOLICITATION
ICMP_ROUTER_ADVERTISEMENT
ICMP_NEIGHBOR_SOLICITATION
ICMP_NEIGHBOR_ADVERTISEMENT
ICMP_RPL
ICMP_DUPLICATE_ADDRESS_REQUEST
ICMP_DUPLICATE_ADDRESS_CONFIRM
Enumerator
IPV6_NEXT_HEADER_ICMP
IPV6_NEXT_HEADER_TCP
IPV6_NEXT_HEADER_UDP
IPV6_NEXT_HEADER_IPV6
IPV6_NEXT_HEADER_ICMPV6
IPV6_NEXT_HEADER_NO_NEXT
IPV6_NEXT_HEADER_MOBILITY
IPV6_NEXT_HEADER_HOP_BY_HOP
IPV6_NEXT_HEADER_DESTINATION
IPV6_NEXT_HEADER_ROUTING
IPV6_NEXT_HEADER_FRAGMENT
IPV6_NEXT_HEADER_UNKNOWN

This information is passed up to the application via the emberNetworkStatusHandler callback.

Enumerator
EMBER_JOIN_FAILURE_REASON_NONE

No failure. This indicates that the network status change occurred as part of regular network operation.

EMBER_JOIN_FAILURE_REASON_FORM_SCAN

The operation emberFormNetwork failed while performing an energy scan on a channel.

EMBER_JOIN_FAILURE_REASON_ACTIVE_SCAN

emberJoinNetwork or emberJoinCommissioned failed while performing an active scan on a channel. This indicates that discovery failed due to no network matching the network parameters being filtered on.

EMBER_JOIN_FAILURE_REASON_COMMISSIONING

emberJoinNetwork failed during commissioning. This usually indicates that either the commissioning step timed out or a mismatch occurred with one of the parameters passed into emberJoinNetwork .

EMBER_JOIN_FAILURE_REASON_SECURITY

emberJoinNetwork failed during the DTLS handshake to establish a shared key. This usually indicates that either the join key (EMBER_JOIN_KEY_OPTION) passed in this call is incorrect or some other fatal error occurred, such as a timeout.

Enumerator
EMBER_ENERGY_SCAN

An energy scan for each channel looks for its RSSI value.

EMBER_ACTIVE_SCAN

An active scan for each channel looks for available networks.

Enumerator
EMBER_NO_NETWORK

The node is not associated with a network in any way.

EMBER_SAVED_NETWORK

The node was part of a network prior to reset.

EMBER_JOINING_NETWORK

The node is currently attempting to join a network.

EMBER_JOINED_NETWORK_ATTACHED

The node is joined and attached to a network.

EMBER_JOINED_NETWORK_NO_PARENT

The node is joined but without a parent.

EMBER_JOINED_NETWORK_ATTACHING

The node is joined but is currently attaching.

Enumerator
EMBER_VERSION_TYPE_INTERNAL
EMBER_VERSION_TYPE_ALPHA
EMBER_VERSION_TYPE_BETA
EMBER_VERSION_TYPE_GA
EMBER_VERSION_TYPE_SPECIAL
EMBER_VERSION_TYPE_LEGACY

Function Documentation

void emberCalibrateCurrentChannel ( void )
uint8_t emberGetRadioChannel ( void )
Returns
A current radio channel.
void emberRadioNeedsCalibratingHandler ( void )

Boost power mode is a high-performance radio mode which offers increased transmit power and receive sensitivity at the cost of an increase in power consumption. The alternate transmit output path allows for simplified connection to an external power amplifier via the RF_TX_ALT_P and RF_TX_ALT_N pins on the em250. emberInit() calls this function using the power mode and transmitter output settings as specified in the MFG_PHY_CONFIG token (with each bit inverted so that the default token value of 0xffff corresponds to normal power mode and bi-directional RF transmitter output). The application only needs to call emberSetTxPowerMode() to use a power mode or transmitter output setting different from that specified in the MFG_PHY_CONFIG token. After this initial call to emberSetTxPowerMode() , the stack will automatically maintain the specified power mode configuration across sleep/wake cycles.

Note
This function does not alter the MFG_PHY_CONFIG token. The MFG_PHY_CONFIG token must be properly configured to ensure optimal radio performance when the standalone bootloader runs in recovery mode. The MFG_PHY_CONFIG can only be set using external tools. IF YOUR PRODUCT USES BOOST MODE OR THE ALTERNATE TRANSMITTER OUTPUT AND THE STANDALONE BOOTLOADER YOU MUST SET THE PHY_CONFIG TOKEN INSTEAD OF USING THIS FUNCTION. Contact suppo .nosp@m. rt@e .nosp@m. mber. .nosp@m. com for instructions to set the MFG_PHY_CONFIG token appropriately.
Parameters
txPowerMode Specifies which of the transmit power mode options are to be activated. This parameter should be set to one of the literal values described in stack/include/ember-types.h . Any power option not specified in the txPowerMode parameter will be deactivated.
Returns
EMBER_SUCCESS if successful; an error code otherwise.This function returns the current configuration of boost power mode and alternate transmitter output.
The current tx power mode.The radio calibration callback function.

The Voltage Controlled Oscillator (VCO) can drift with temperature changes. During every call to emberTick() , the stack will check to see if the VCO has drifted. If the VCO has drifted, the stack will call emberRadioNeedsCalibratingHandler() to inform the application that it should perform calibration of the current channel as soon as possible. Calibration can take up to 150 ms. The default callback function implementation provided here performs the calibration immediately. If the application wishes, it can define its own callback by defining ::EMBER_APPLICATION_HAS_CUSTOM_RADIO_CALIBRATION_CALLBACK in its CONFIGURATION_HEADER. It can then failsafe any critical processes or peripherals before calling emberCalibrateCurrentChannel() . The application must call emberCalibrateCurrentChannel() in response to this callback to maintain an expected radio performance.

This function enables boost power mode and/or the alternate transmit path.

The Voltage Controlled Oscillator (VCO) can drift with temperature changes. During every call to emberTick() , the stack will check to see if the VCO has drifted. If the VCO has drifted, the stack will call emberRadioNeedsCalibratingHandler() to inform the application that it should perform calibration of the current channel as soon as possible. Calibration can take up to 150ms. The default callback function implementation provided here performs calibration immediately. If the application wishes, it can define its own callback by defining ::EMBER_APPLICATION_HAS_CUSTOM_RADIO_CALIBRATION_CALLBACK in its CONFIGURATION_HEADER. It can then failsafe any critical processes or peripherals before calling emberCalibrateCurrentChannel() . The application must call emberCalibrateCurrentChannel() in response to this callback to maintain expected radio performance.

References emberCalibrateCurrentChannel() .

EmberStatus emberSetRadioChannel ( uint8_t channel )

Note: Care should be taken when using this API, as all devices on a network must use the same channel.

Parameters
channel A desired radio channel.
Returns
An EmberStatus value indicating the success or failure of the command.

Variable Documentation

EventActions * Event_s::actions
uint16_t EmberVersion::build
bool EmberTaskControl::busy
uint8_t EmberEui64::bytes[ EUI64_SIZE ]
uint8_t EmberIpv6Prefix::bytes[8]
uint8_t EmberIpv6Address::bytes[16]
const uint8_t* DeviceCertificate::certificate
const uint16_t DeviceCertificate::certificateSize
uint32_t EmberVersion::change
uint8_t EmberKeyData::contents[ EMBER_ENCRYPTION_KEY_SIZE ]

This is the key byte data.

uint8_t Bytes8::contents[8]
uint8_t Bytes16::contents[16]

The control structure for the event.

EmberEventControl* { ... } control

The control structure for the event.

uint8_t Ipv6Header::destination[16]
uint16_t Ipv6Header::destinationPort
Event * EventQueue_s::events
EmberEventData * EmberTaskControl::events
uint32_t Ipv6Header::flowLabel
void(* EventActions_s::handler) (struct Event_s *)
void(* { ... } handler) (void)

The procedure to call when the event fires.

void(* handler) (void)

The procedure to call when the event fires.

uint8_t Ipv6Header::hopLimit
uint8_t Ipv6Header::icmpCode
uint8_t Ipv6Header::icmpType
uint16_t TlsSessionState::id[( TLS_SESSION_ID_SIZE +1)/2]
uint8_t TlsSessionState::idLength
uint8_t* Ipv6Header::ipPayload
uint16_t Ipv6Header::ipPayloadLength
Event * EventQueue_s::isrEvents
uint8_t EmberVersion::major
void(* EventActions_s::marker) (struct Event_s *)
uint8_t TlsSessionState::master[ TLS_MASTER_SECRET_SIZE ]
uint8_t CertificateAuthority::maxPathLength
uint8_t EmberVersion::minor
const uint8_t* CertificateAuthority::name
const char* EventActions_s::name
uint16_t CertificateAuthority::nameLength
struct Event_s * Event_s::next
uint32_t EmberTaskControl::nextEventTime
uint8_t Ipv6Header::nextHeader
uint8_t EmberVersion::patch
const uint8_t* DeviceCertificate::privateKey
uint8_t* CertificateAuthority::publicKey
struct EventQueue_s * EventActions_s::queue
bool EventQueue_s::running
uint32_t EventQueue_s::runTime
uint8_t Ipv6Header::source[16]
uint16_t Ipv6Header::sourcePort
EmberEventUnits EmberEventControl::status

The event's status, either inactive or the units for timeToExecute.

EmberTaskId EmberEventControl::taskid

The ID of the task this event belongs to.

uint32_t Event_s::timeToExecute
uint32_t EmberEventControl::timeToExecute

How long before the event fires. Units are always in milliseconds.

uint8_t Ipv6Header::trafficClass
uint8_t* Ipv6Header::transportHeader
uint16_t Ipv6Header::transportHeaderLength
uint8_t* Ipv6Header::transportPayload
uint16_t Ipv6Header::transportPayloadLength
uint8_t Ipv6Header::transportProtocol
EmberVersionType EmberVersion::type