See End Devices for documentation.
License#
Copyright 2018 Silicon Laboratories Inc. www.silabs.com
The licensor of this software is Silicon Laboratories Inc. Your use of this software is governed by the terms of Silicon Labs Master Software License Agreement (MSLA) available at www.silabs.com/about-us/legal/master-software-license-agreement. This software is distributed to you in Source Code format and is governed by the sections of the MSLA applicable to Source Code.
/***************************************************************************/
#ifndef SILABS_CHILD_H
#define SILABS_CHILD_H
#include "mac-child.h"
EmberNodeId emberChildId(uint8_t childIndex);
int8_t emberChildPower(uint8_t childIndex);
void emberSetChildPower(uint8_t childIndex, int8_t newPower);
uint8_t emberChildIndex(EmberNodeId childId);
EmberStatus emberGetChildData(uint8_t index,
EmberChildData *childData);
void emberChildJoinHandler(uint8_t index, bool joining);
EmberStatus emberSetKeepAliveMode(EmberKeepAliveMode mode);
EmberKeepAliveMode emberGetKeepAliveMode(void);
EmberStatus emberPollForData(void);
void emberSetMacPollFailureWaitTime(uint32_t waitBeforeRetryIntervalMs);
void emberPollCompleteHandler(EmberStatus status);
EmberStatus emberSetMessageFlag(EmberNodeId childId);
EmberStatus emberClearMessageFlag(EmberNodeId childId);
void emberPollHandler(EmberNodeId childId, bool transmitExpected);
#ifdef DOXYGEN_SHOULD_SKIP_THIS
uint8_t emberChildCount(void);
uint8_t emberRouterChildCount(void);
uint8_t emberMaxChildCount(void);
uint8_t emberMaxRouterChildCount(void);
EmberNodeId emberGetParentNodeId(void);
EmberEUI64 emberGetParentEui64(void);
#else // Doxygen ignores the following
extern uint8_t emMaxEndDeviceChildren; // A maximum for this node.
// The '+ 0' prevents anyone from accidentally assigning to these.
#define emberRouterChildCount() 0
#define emberMaxChildCount() (emMaxEndDeviceChildren + 0)
#define emberMaxRouterChildCount() 0
// Implemented in ember-stack-common.c.
uint32_t emberGetParentIncomingNwkFrameCounter(void);
EmberStatus emberSetParentIncomingNwkFrameCounter(uint32_t value);
EmberNodeId emberGetParentNodeId(void);
uint8_t* emberGetParentEui64(void);
uint8_t emberChildCount(void);
#endif
enum {
EMBER_OUTGOING_MESSAGES = 0x0001,
EMBER_INCOMING_MESSAGES = 0x0002,
EMBER_RADIO_IS_ON = 0x0004,
EMBER_TRANSPORT_ACTIVE = 0x0008,
EMBER_APS_LAYER_ACTIVE = 0x0010,
EMBER_ASSOCIATING = 0x0020,
EMBER_ZLL_TOUCH_LINKING = 0x0040,
EMBER_NETWORK_TIMEOUT_REQUEST = 0x0200,
EMBER_SEND_ORPHAN_NOTIFICATION = 0x0400,
EMBER_MAC_DATA_POLL_SUPER_RETRY = 0x0800,
};
#define EMBER_HIGH_PRIORITY_TASKS \
(EMBER_OUTGOING_MESSAGES | EMBER_INCOMING_MESSAGES | EMBER_RADIO_IS_ON)
uint16_t emberCurrentStackTasks(void);
#ifdef DOXYGEN_SHOULD_SKIP_THIS
bool emberOkToNap(void);
#else
#define emberOkToNap() \
(!(emberCurrentStackTasks() & EMBER_HIGH_PRIORITY_TASKS))
#endif
bool emberParentTokenSet(void);
#ifdef DOXYGEN_SHOULD_SKIP_THIS
bool emberOkToHibernate(void);
#else
#define emberOkToHibernate() (!emberCurrentStackTasks())
#endif
#ifdef DOXYGEN_SHOULD_SKIP_THIS
bool emberOkToLongPoll(void);
#else
#define emberOkToLongPoll() (!emberPendingAckedMessages())
#endif
void emberStackPowerDown(void);
void emberStackPowerUp(void);
// @} END Power Management
// @} END addtogroup
EmberStatus emberSendLinkPowerDeltaRequest (void);
int8_t emberGetAvgParentRssi(void);
EmberNodeId emberGetParentId(void);
EmberStatus emberSetChildTimeoutOptionMask(uint16_t mask);
#endif // SILABS_CHILD_H
Power Management#
A mask of the tasks that prevent a device from sleeping.
Defines tasks that are taken into account when dealing with sleep related behavior.
Returns a bitmask indicating the stack's current tasks.
Indicates whether the stack is currently in a state where there are no high-priority tasks, allowing the device to sleep.
Indicates whether the parent token has been set by association.
Indicates whether the stack currently has any tasks pending.
Indicates whether the stack is currently in a state that does not require the application to periodically poll.
Immediately turns the radio power completely off.
Initializes the radio. Typically called coming out of deep sleep.
Sends a link power delta request to the parent.
Accessor function for recent average rssi value between this device and the parent. (SoC only)
Accessor function for the parent's node ID if applicable. (SoC only)
: the bit mask that decides which timeout values are acceptable for a child. this defaults to 0xFFFF which covers all the following 15 options:
Functions#
Converts a child index to a node ID.
This function returns radio power value of the child from the given childIndex.
This function sets the radio power value for a given child index.
Converts a node ID to a child index.
Gets the EUI64 and node type of the child at the provided index. If there is no child at 'index', it returns EMBER_NOT_JOINED. Possible child indexes run from zero to emberMaxChildCount() - 1.
Called by the stack when a child joins or leaves. 'Joining' is true if the child is joining and false if leaving.
Requests any pending data from the parent node. This function allows an end device to query its parent for any pending data.
Sets a flag to indicate that there is a message pending for a child. The next time that the child polls, it will be informed that it has a pending message. The message is sent from emberPollHandler, which is called when the child requests data.
Clears a flag to indicate that there are no more messages for a child. The next time the child polls, it will be informed that it does not have any pending messages.
Called to allow the application to send a message in response to a poll from a child.
Returns the number of children the node currently has.
Returns the number of router children that the node currently has.
Returns the maximum number of children for this node. The return value is undefined for nodes that are not joined to a network.
Returns the maximum number of router children for this node. The return value is undefined for nodes that are not joined to a network.
Returns the parent's node ID. The return value is undefined for nodes without parents (coordinators and nodes that are not joined to a network).
Returns the parent's EUI64. The return value is undefined for nodes without parents (coordinators and nodes that are not joined to a network).
Power Management Documentation#
EMBER_HIGH_PRIORITY_TASKS#
#define EMBER_HIGH_PRIORITY_TASKSValue:
(EMBER_OUTGOING_MESSAGES | EMBER_INCOMING_MESSAGES | EMBER_RADIO_IS_ON)
A mask of the tasks that prevent a device from sleeping.
317
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
@0#
@0
Defines tasks that are taken into account when dealing with sleep related behavior.
As opposed to its subset of EMBER_HIGH_PRIORITY_TASKS, these tasks does not necessarily prevent us to go to sleep. However, they are taken into account when calculating how long we can sleep until the next event.
Enumerator | |
---|---|
PRIORITIZE_BEACONS_BASED_ON_PARENT_CLASSIFICATION | |
PRIORITIZE_BEACONS_BASED_ON_TC_CONNECTVITY | |
TC_CONNECTIVITY | |
LONG_UPTIME | |
BAD_PARENT_CONNECTIVITY | |
EMBER_OUTGOING_MESSAGES | There are messages waiting for transmission. |
EMBER_INCOMING_MESSAGES | One or more incoming messages being processed. |
EMBER_RADIO_IS_ON | The radio is currently powered on. On sleepy devices, the radio is turned off when not in use. On non-sleepy devices (EMBER_COORDINATOR, EMBER_ROUTER, or EMBER_END_DEVICE), the radio is always on. |
EMBER_TRANSPORT_ACTIVE | The transport layer has messages awaiting an ACK. |
EMBER_APS_LAYER_ACTIVE | The ZigBee APS layer has messages awaiting an ACK. |
EMBER_ASSOCIATING | The node is currently trying to associate with a ZigBee PRO network. |
EMBER_ZLL_TOUCH_LINKING | The node is currently touch linking. |
EMBER_NETWORK_TIMEOUT_REQUEST | Network Timeout Request Event. |
EMBER_SEND_ORPHAN_NOTIFICATION | Sending Orphan Notification Event. |
EMBER_MAC_DATA_POLL_SUPER_RETRY | MAC Data Poll Super Retry Event . |
INITIAL | |
SCAN_FOR_TOUCH_LINK | |
SCAN_FOR_DEVICE_INFORMATION | |
SCAN_FOR_IDENTIFY | |
SCAN_FOR_RESET | |
TARGET_NETWORK_FOUND | |
ABORTING_TOUCH_LINK | |
SCAN_COMPLETE | |
TOUCH_LINK_TARGET | |
FORMING_NETWORK | |
RESETTING_TO_FACTORY_NEW | |
ADC_REF_INT | Internal reference. |
TOKEN_COUNT | |
COMM_SERIAL | |
COMM_RADIO |
289
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberCurrentStackTasks#
uint16_t emberCurrentStackTasks (void )
Returns a bitmask indicating the stack's current tasks.
N/A |
The mask EMBER_HIGH_PRIORITY_TASKS defines which tasks are high priority. Devices should not sleep if any high priority tasks are active. Active tasks that are not high priority are waiting for messages to arrive from other devices. If there are active tasks, but no high priority ones, the device may sleep but should periodically wake up and call emberPollForData() in order to receive messages. Parents will hold messages for EMBER_INDIRECT_TRANSMISSION_TIMEOUT milliseconds before discarding them.
Returns
A bitmask of the stack's active tasks.
333
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberOkToNap#
bool emberOkToNap (void )
Indicates whether the stack is currently in a state where there are no high-priority tasks, allowing the device to sleep.
N/A |
There may be tasks expecting incoming messages, in which case the device should periodically wake up and call emberPollForData() in order to receive messages. This function can only be called when the node type is EMBER_SLEEPY_END_DEVICE
Returns
True if the application may sleep but the stack may be expecting incoming messages.
347
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberParentTokenSet#
bool emberParentTokenSet (void )
Indicates whether the parent token has been set by association.
N/A |
Returns
True if the parent token has been set.
357
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberOkToHibernate#
bool emberOkToHibernate (void )
Indicates whether the stack currently has any tasks pending.
N/A |
If there are no pending tasks, emberTick() does not need to be called until the next time a stack API function is called. This function can only be called when the node type is EMBER_SLEEPY_END_DEVICE or
Returns
True if the application may sleep for as long as it wishes.
368
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberOkToLongPoll#
bool emberOkToLongPoll (void )
Indicates whether the stack is currently in a state that does not require the application to periodically poll.
N/A |
Returns
True if the application may stop polling periodically.
379
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberStackPowerDown#
void emberStackPowerDown (void )
Immediately turns the radio power completely off.
N/A |
Calling this function will render all other stack functions except emberStackPowerUp() non-functional until the radio is powered back on.
389
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberStackPowerUp#
void emberStackPowerUp (void )
Initializes the radio. Typically called coming out of deep sleep.
N/A |
For non-sleepy devices, also turns the radio on and leaves it in RX mode.
395
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberSendLinkPowerDeltaRequest#
EmberStatus emberSendLinkPowerDeltaRequest (void )
Sends a link power delta request to the parent.
N/A |
403
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberGetAvgParentRssi#
int8_t emberGetAvgParentRssi (void )
Accessor function for recent average rssi value between this device and the parent. (SoC only)
N/A |
407
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberGetParentId#
EmberNodeId emberGetParentId (void )
Accessor function for the parent's node ID if applicable. (SoC only)
N/A |
411
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberSetChildTimeoutOptionMask#
EmberStatus emberSetChildTimeoutOptionMask (uint16_t mask)
: the bit mask that decides which timeout values are acceptable for a child. this defaults to 0xFFFF which covers all the following 15 options:
N/A | mask |
#define SECONDS_10 0 #define MINUTES_2 1 #define MINUTES_4 2 #define MINUTES_8 3 #define MINUTES_16 4 #define MINUTES_32 5 #define MINUTES_64 6 #define MINUTES_128 7 #define MINUTES_256 8 #define MINUTES_512 9 #define MINUTES_1024 10 #define MINUTES_2048 11 #define MINUTES_4096 12 #define MINUTES_8192 13 #define MINUTES_16384 14 // ~11 days
433
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
Function Documentation#
emberChildId#
EmberNodeId emberChildId (uint8_t childIndex)
Converts a child index to a node ID.
N/A | childIndex | The index. |
Returns
The node ID of the child or EMBER_NULL_NODE_ID if there isn't a child at the childIndex specified.
37
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberChildPower#
int8_t emberChildPower (uint8_t childIndex)
This function returns radio power value of the child from the given childIndex.
N/A | childIndex | The index. |
Returns
The power of the child or maximum radio power, which is the power value provided by the user while forming/joining a network if there isn't a child at the childIndex specified.
47
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberSetChildPower#
void emberSetChildPower (uint8_t childIndex, int8_t newPower)
This function sets the radio power value for a given child index.
N/A | childIndex | The index. |
N/A | newPower | The new power value. |
54
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberChildIndex#
uint8_t emberChildIndex (EmberNodeId childId)
Converts a node ID to a child index.
N/A | childId | The node ID of the child. |
Returns
The child index or 0xFF if the node ID does not belong to a child.
62
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberGetChildData#
EmberStatus emberGetChildData (uint8_t index, EmberChildData * childData)
Gets the EUI64 and node type of the child at the provided index. If there is no child at 'index', it returns EMBER_NOT_JOINED. Possible child indexes run from zero to emberMaxChildCount() - 1.
N/A | index | The index of the child of interest. |
N/A | childData | The child's data is copied here. |
Returns
Returns EMBER_SUCCESS if a child is found at that index, EMBER_NOT_JOINED if not.
75
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberChildJoinHandler#
void emberChildJoinHandler (uint8_t index, bool joining)
Called by the stack when a child joins or leaves. 'Joining' is true if the child is joining and false if leaving.
N/A | index | The index of the child of interest. |
N/A | joining | True if the child is joining, false if the child is leaving. |
The index is the same as the value that should be passed to emberGetChildData() to get this child's data. Note that if the child is leaving, emberGetChildData() will return EMBER_NOT_JOINED if called with this index. If the application includes emberChildJoinHandler(), it must define EMBER_APPLICATION_HAS_CHILD_JOIN_HANDLER in its CONFIGURATION_HEADER
93
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberSetKeepAliveMode#
EmberStatus emberSetKeepAliveMode (EmberKeepAliveMode mode)
N/A | mode | could be one of the 4 configuration in EmberKeepAliveMode |
@ brief This function is useful to set the keep alive mode
101
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberGetKeepAliveMode#
EmberKeepAliveMode emberGetKeepAliveMode (void )
N/A |
@ brief This function is useful to get the keep alive mode
Returns
mode could be one of the 4 configuration in EmberKeepAliveMode
109
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberPollForData#
EmberStatus emberPollForData (void )
Requests any pending data from the parent node. This function allows an end device to query its parent for any pending data.
N/A |
End devices must call this function periodically to maintain contact with their parent. The parent will remove a child if it has not received a poll from it within the configured timeout.
If the end device has lost contact with its parent, emberPollForData() calls ::emberRejoinNetwork(true) and returns EMBER_ERR_FATAL.
The default values for the timeouts are set in config/ember-configuration-defaults.h and can be overridden in the application's configuration header.
Returns
An EmberStatus value:
EMBER_SUCCESS - The poll message has been submitted for transmission.
EMBER_INVALID_CALL - The node is not an end device.
EMBER_NOT_JOINED - The node is not part of a network.
EMBER_MAC_TRANSMIT_QUEUE_FULL - The MAC layer transmit queue is full.
EMBER_NO_BUFFERS - No buffers available to create the data poll message.
EMBER_ERR_FATAL - Too much time has elapsed since the last successful poll. A rejoin attempt has been initiated. This error is not "fatal". The command can be retried until successful.
136
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberSetMacPollFailureWaitTime#
void emberSetMacPollFailureWaitTime (uint32_t waitBeforeRetryIntervalMs)
N/A | waitBeforeRetryIntervalMs | Time in milliseconds the device waits before retrying a data poll when a MAC level data poll fails for any reason. The retry feature can be disabled by setting this value to zero. |
@ brief This function is useful to sleepy end devices. This function will set the retry interval (in milliseconds) for mac data poll. This interval is the time in milliseconds the device waits before retrying a data poll when a MAC level data poll fails for any reason. The retry feature can be disabled by setting the retry interval to zero.
151
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberPollCompleteHandler#
void emberPollCompleteHandler (EmberStatus status)
N/A | status | An
|
@ brief This is called by the stack when a data poll to the parent is complete.
If the application includes emberPollCompleteHandler(), it must define EMBER_APPLICATION_HAS_POLL_COMPLETE_HANDLER within its CONFIGURATION_HEADER
168
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberSetMessageFlag#
EmberStatus emberSetMessageFlag (EmberNodeId childId)
Sets a flag to indicate that there is a message pending for a child. The next time that the child polls, it will be informed that it has a pending message. The message is sent from emberPollHandler, which is called when the child requests data.
N/A | childId | The ID of the child that just polled for data. |
Returns
An EmberStatus value.
EMBER_SUCCESS - The next time that the child polls, it will be informed that it has pending data.
EMBER_NOT_JOINED - The child identified by childId is not our child.
182
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberClearMessageFlag#
EmberStatus emberClearMessageFlag (EmberNodeId childId)
Clears a flag to indicate that there are no more messages for a child. The next time the child polls, it will be informed that it does not have any pending messages.
N/A | childId | The ID of the child that no longer has pending messages. |
Returns
An EmberStatus value.
EMBER_SUCCESS - The next time that the child polls, it will be informed that it does not have any pending messages.
EMBER_NOT_JOINED - The child identified by childId is not our child.
195
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberPollHandler#
void emberPollHandler (EmberNodeId childId, bool transmitExpected)
Called to allow the application to send a message in response to a poll from a child.
N/A | childId | The ID of the child that is requesting data. |
N/A | transmitExpected | True if the child is expecting an application- supplied data message. False otherwise. |
This function is called when a child polls, provided that the pending message flag is set for that child (see emberSetMessageFlag(). The message should be sent to the child using emberSendUnicast() with the EMBER_APS_OPTION_POLL_RESPONSE option.
If the application includes ::emberPollHanlder(), it must define EMBER_APPLICATION_HAS_POLL_HANDLER in its CONFIGURATION_HEADER.
214
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberChildCount#
uint8_t emberChildCount (void )
Returns the number of children the node currently has.
N/A |
Returns
The number of children.
221
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberRouterChildCount#
uint8_t emberRouterChildCount (void )
Returns the number of router children that the node currently has.
N/A |
Returns
The number of router children.
228
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberMaxChildCount#
uint8_t emberMaxChildCount (void )
Returns the maximum number of children for this node. The return value is undefined for nodes that are not joined to a network.
N/A |
Returns
The maximum number of children.
235
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberMaxRouterChildCount#
uint8_t emberMaxRouterChildCount (void )
Returns the maximum number of router children for this node. The return value is undefined for nodes that are not joined to a network.
N/A |
Returns
The maximum number of router children.
242
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberGetParentNodeId#
EmberNodeId emberGetParentNodeId (void )
Returns the parent's node ID. The return value is undefined for nodes without parents (coordinators and nodes that are not joined to a network).
N/A |
Returns
The parent's node ID.
250
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h
emberGetParentEui64#
EmberEUI64 emberGetParentEui64 (void )
Returns the parent's EUI64. The return value is undefined for nodes without parents (coordinators and nodes that are not joined to a network).
N/A |
Returns
The parent's EUI64.
258
of file /Users/vihuszar/Git/EmbeddedSoftware/super/protocol/zigbee/stack/include/child.h