Developing with ZBOSS for Zigbee
ZDO address discovery

Data Structures

struct  zb_zdo_nwk_addr_req_s
 NWK_addr_req command primitive.
More...
 
struct  zb_zdo_nwk_addr_req_param_s
 Parameters for nwk_addr_req command. More...
 
struct  zb_zdo_nwk_addr_resp_head_s
 NWK_addr_req response frame. More...
 
struct  zb_zdo_nwk_addr_resp_ext_s
 NWK_addr_req response frame tail. More...
 
struct  zb_zdo_nwk_addr_resp_ext2_s
 NWK_addr_req response frame tail. More...
 
struct  zb_zdo_ieee_addr_req_s
 Parameters of IEEE_addr_req primitive. More...
 
struct  zb_zdo_ieee_addr_req_param_s
 Parameters for ieee_addr_req command. More...
 
struct  zb_zdo_ieee_addr_resp_s
 
struct  zb_zdo_ieee_addr_resp_ext_s
 ZDO IEEE address response frame tail. More...
 
struct  zb_zdo_ieee_addr_resp_ext2_s
 ZDO IEEE address response frame tail. More...
 

Macros

#define ZB_ZDO_SINGLE_DEVICE_RESP   0U
 
#define ZB_ZDO_EXTENDED_DEVICE_RESP   1U
 

Typedefs

typedef struct zb_zdo_nwk_addr_req_s zb_zdo_nwk_addr_req_t
 NWK_addr_req command primitive.

 
typedef struct zb_zdo_nwk_addr_req_param_s zb_zdo_nwk_addr_req_param_t
 Parameters for nwk_addr_req command.
 
typedef struct zb_zdo_nwk_addr_resp_head_s zb_zdo_nwk_addr_resp_head_t
 NWK_addr_req response frame.
 
typedef struct zb_zdo_nwk_addr_resp_ext_s zb_zdo_nwk_addr_resp_ext_t
 NWK_addr_req response frame tail.
 
typedef struct zb_zdo_nwk_addr_resp_ext2_s zb_zdo_nwk_addr_resp_ext2_t
 NWK_addr_req response frame tail.
 
typedef struct zb_zdo_ieee_addr_req_s zb_zdo_ieee_addr_req_t
 Parameters of IEEE_addr_req primitive. More...
 
typedef struct zb_zdo_ieee_addr_req_param_s zb_zdo_ieee_addr_req_param_t
 Parameters for ieee_addr_req command.
 
typedef struct zb_zdo_ieee_addr_resp_s zb_zdo_ieee_addr_resp_t
 
typedef struct zb_zdo_ieee_addr_resp_ext_s zb_zdo_ieee_addr_resp_ext_t
 ZDO IEEE address response frame tail.
 
typedef struct zb_zdo_ieee_addr_resp_ext2_s zb_zdo_ieee_addr_resp_ext2_t
 ZDO IEEE address response frame tail.
 

Functions

zb_uint8_t zb_zdo_nwk_addr_req (zb_uint8_t param, zb_callback_t cb)
 Sends NWK_addr_req primitive. More...
 
zb_uint8_t zb_zdo_ieee_addr_req (zb_uint8_t param, zb_callback_t cb)
 IEEE_addr_req primitive. More...
 

Detailed Description

Macro Definition Documentation

◆ ZB_ZDO_EXTENDED_DEVICE_RESP

#define ZB_ZDO_EXTENDED_DEVICE_RESP   1U

Request Type parameter value of zb_zdo_nwk_addr_req_t and zb_zdo_ieee_addr_req_t for receiving an Extended device response used in the following commands accordingly:

◆ ZB_ZDO_SINGLE_DEVICE_RESP

#define ZB_ZDO_SINGLE_DEVICE_RESP   0U

Request Type parameter value of zb_zdo_nwk_addr_req_t and zb_zdo_ieee_addr_req_t for receiving a Single device response used in the following commands accordingly:

Typedef Documentation

◆ zb_zdo_ieee_addr_req_t

Parameters of IEEE_addr_req primitive.

To be put into buffer as data (means - after space alloc).

◆ zb_zdo_ieee_addr_resp_t

brief ZDO IEEE address response frame

Function Documentation

◆ zb_zdo_ieee_addr_req()

zb_uint8_t zb_zdo_ieee_addr_req ( zb_uint8_t  param,
zb_callback_t  cb 
)

IEEE_addr_req primitive.

Parameters
param- index of buffer with primitive parameters zb_zdo_ieee_addr_req_s. Parameters must be put into the buffer as data (allocated).
cb- user's function to call when got response from the remote.
Returns
- ZDP transaction sequence number or 0xFF if operation cannot be performed now (nor enough memory, resources, etc.)

Example:

void device_ieee_addr_req(zb_uint8_t param, zb_uint16_t dev_idx)
{
zb_bufid_t buf = param;
\
if (dev_idx != SIMPLE_GW_INVALID_DEV_INDEX)
{
req_param->nwk_addr = g_device_ctx.devices[dev_idx].short_addr;
req_param->dst_addr = req_param->nwk_addr;
req_param->start_index = 0;
req_param->request_type = 0;
zb_zdo_ieee_addr_req(buf, device_ieee_addr_req_cb);
}
else
{
TRACE_MSG(TRACE_APP2, "No devices in discovery state were found!", (FMT__0));
}
}
void device_ieee_addr_req_cb(zb_uint8_t param)
{
zb_bufid_t buf = param;
zb_ieee_addr_t ieee_addr;
zb_uint16_t nwk_addr;
zb_uint8_t dev_idx;
TRACE_MSG(TRACE_APP2, ">> device_ieee_addr_req_cb param %hd", (FMT__H, param));
TRACE_MSG(TRACE_APP2, "resp status %hd, nwk addr %d", (FMT__H_D, resp->status, resp->nwk_addr));
{
ZB_LETOH64(ieee_addr, resp->ieee_addr);
ZB_LETOH16(&nwk_addr, &resp->nwk_addr);
dev_idx = simple_gw_get_dev_index_by_short_addr(nwk_addr);
if (dev_idx != SIMPLE_GW_INVALID_DEV_INDEX)
{
ZB_MEMCPY(g_device_ctx.devices[dev_idx].ieee_addr, ieee_addr, sizeof(zb_ieee_addr_t));
g_device_ctx.devices[dev_idx].dev_state = CONFIGURE_BINDING;
/* The next step is to bind the Light control to the bulb */
ZB_SCHEDULE_APP_CALLBACK2(bind_device, param, dev_idx);
param = 0;
}
else
{
TRACE_MSG(TRACE_APP2, "This resp is not for our device", (FMT__0));
}
}
if (param)
{
}
TRACE_MSG(TRACE_APP2, "<< device_ieee_addr_req_cb", (FMT__0));
}

◆ zb_zdo_nwk_addr_req()

zb_uint8_t zb_zdo_nwk_addr_req ( zb_uint8_t  param,
zb_callback_t  cb 
)

Sends NWK_addr_req primitive.

Parameters
param- index of buffer with primitive parameters - zb_zdo_nwk_addr_req_param_s
cb- user's function to call when got response from the remote. zb_zdo_nwk_addr_resp_head_s passed to cb as parameter.
Returns
- ZDP transaction sequence number or 0xFF if operation cannot be performed now (nor enough memory, resources, etc.)

Example:

void bulb_nwk_addr_req(zb_uint8_t param, zb_ieee_addr_t ieee_addr)
{
zb_bufid_t buf = param;
TRACE_MSG(TRACE_APP2, "bulb_nwk_addr_req: param %hd ieee "TRACE_FORMAT_64, (FMT__H_A, param, TRACE_ARG_64(ieee_addr)));
ZB_IEEE_ADDR_COPY(req->ieee_addr, ieee_addr);
req->start_index = 0;
req->request_type = 0;
zb_zdo_nwk_addr_req(buf, bulb_nwk_addr_req_cb);
}
void bulb_nwk_addr_req_cb(zb_uint8_t param)
{
zb_bufid_t buf = param;
zb_ieee_addr_t ieee_addr;
zb_uint16_t nwk_addr;
TRACE_MSG(TRACE_APP2, ">> bulb_nwk_addr_req_cb param %hd", (FMT__H, param));
TRACE_MSG(TRACE_APP2, "resp status %hd, nwk addr %d", (FMT__H_D, resp->status, resp->nwk_addr));
{
ZB_LETOH64(ieee_addr, resp->ieee_addr);
ZB_LETOH16(&nwk_addr, &resp->nwk_addr);
zb_address_update(ieee_addr, nwk_addr, ZB_TRUE, &addr_ref);
/* The next step is to bind the Light control to the bulb */
find_light_bulb(param, nwk_addr, g_device_ctx.pending_dev_ep);
}
zb_buf_free(param);
TRACE_MSG(TRACE_APP2, "<< bulb_ieee_addr_req_cb", (FMT__0));
}
zb_zdo_nwk_addr_resp_head_s
NWK_addr_req response frame.
Definition: zboss_api_zdo.h:1338
zb_zdo_nwk_addr_req_param_s::request_type
zb_uint8_t request_type
Definition: zboss_api_zdo.h:1326
zb_uint8_t
unsigned char zb_uint8_t
Project-local 1-byte unsigned int type.
Definition: zb_types.h:153
ZB_SCHEDULE_APP_CALLBACK2
#define ZB_SCHEDULE_APP_CALLBACK2(func, param, user_param)
Definition: zboss_api_core.h:348
TRACE_MSG
#define TRACE_MSG(lm, fmts, args)
Put trace output.
Definition: zb_trace.h:359
zb_zdo_ieee_addr_req_param_s::dst_addr
zb_uint16_t dst_addr
Definition: zboss_api_zdo.h:1414
zb_zdo_nwk_addr_resp_head_s::nwk_addr
zb_uint16_t nwk_addr
Definition: zboss_api_zdo.h:1343
ZB_NWK_BROADCAST_ALL_DEVICES
#define ZB_NWK_BROADCAST_ALL_DEVICES
Definition: zboss_api_nwk.h:41
zb_zdo_nwk_addr_req_param_s::start_index
zb_uint8_t start_index
Definition: zboss_api_zdo.h:1329
zb_zdo_ieee_addr_req_param_s::start_index
zb_uint8_t start_index
Definition: zboss_api_zdo.h:1420
zb_zdo_ieee_addr_req_param_s::request_type
zb_uint8_t request_type
Definition: zboss_api_zdo.h:1417
zb_zdo_ieee_addr_req
zb_uint8_t zb_zdo_ieee_addr_req(zb_uint8_t param, zb_callback_t cb)
IEEE_addr_req primitive.
ZB_LETOH16
#define ZB_LETOH16
Definition: zb_types.h:796
ZB_BUF_GET_PARAM
#define ZB_BUF_GET_PARAM(buf, type)
Definition: zboss_api_buf.h:447
ZB_TRUE
#define ZB_TRUE
Definition: zb_types.h:375
zb_zdo_nwk_addr_req_param_s
Parameters for nwk_addr_req command.
Definition: zboss_api_zdo.h:1321
zb_buf_alloc_tail
#define zb_buf_alloc_tail(buf, size)
Definition: zboss_api_buf.h:416
zb_zdo_ieee_addr_req_param_s
Parameters for ieee_addr_req command.
Definition: zboss_api_zdo.h:1412
ZB_ZDP_STATUS_SUCCESS
#define ZB_ZDP_STATUS_SUCCESS
Definition: zboss_api_zdo.h:41
zb_zdo_nwk_addr_req_param_s::ieee_addr
zb_ieee_addr_t ieee_addr
Definition: zboss_api_zdo.h:1324
zb_buf_begin
#define zb_buf_begin(buf)
Definition: zboss_api_buf.h:343
zb_ieee_addr_t
zb_64bit_addr_t zb_ieee_addr_t
Long (64-bit) device address.
Definition: zb_types.h:554
zb_zdo_nwk_addr_req
zb_uint8_t zb_zdo_nwk_addr_req(zb_uint8_t param, zb_callback_t cb)
Sends NWK_addr_req primitive.
zb_address_ieee_ref_t
zb_uint8_t zb_address_ieee_ref_t
Definition: zb_address.h:80
zb_zdo_nwk_addr_resp_head_s::ieee_addr
zb_ieee_addr_t ieee_addr
Definition: zboss_api_zdo.h:1342
zb_uint16_t
unsigned short zb_uint16_t
Project-local 2-byte unsigned int type.
Definition: zb_types.h:157
zb_buf_free
#define zb_buf_free(buf)
Free packet buffer and put it into free list.
Definition: zboss_api_buf.h:333
zb_address_update
zb_ret_t zb_address_update(zb_ieee_addr_t ieee_address, zb_uint16_t short_address, zb_bool_t lock, zb_address_ieee_ref_t *ref_p)
zb_zdo_nwk_addr_resp_head_s::status
zb_uint8_t status
Definition: zboss_api_zdo.h:1341
zb_bufid_t
zb_uint8_t zb_bufid_t
Definition: zboss_api_buf.h:172
zb_zdo_nwk_addr_req_param_s::dst_addr
zb_uint16_t dst_addr
Definition: zboss_api_zdo.h:1323
zb_zdo_ieee_addr_req_param_s::nwk_addr
zb_uint16_t nwk_addr
Definition: zboss_api_zdo.h:1415