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 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_sEventActions_s::queue
 
void(* EventActions_s::handler )(struct Event_s *)
 
void(* EventActions_s::marker )(struct Event_s *)
 
const char * EventActions_s::name
 
EventActionsEvent_s::actions
 
struct Event_sEvent_s::next
 
uint32_t Event_s::timeToExecute
 
EventEventQueue_s::isrEvents
 
EventEventQueue_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
 
EmberEventDataEmberTaskControl::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_NULL_SESSION_ID   0
 A distinguished session ID that will never be assigned. Used to indicate the absence of a session 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_NULL_SESSION_ID   0
#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:821
#define EMBER_TX_POWER_MODE_ALTERNATE
The application should call emberSetTxPowerMode() with the txPowerMode parameter set to this value to...
Definition: ember-types.h:826
#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 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
typedef struct EventQueue_s EventQueue

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
txPowerModeSpecifies 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
channelA 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