Developing with ZBOSS
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   0
 
#define ZB_ZDO_EXTENDED_DEVICE_RESP   1
 

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   1

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   0

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:

{
req->nwk_addr = ind->src_addr;
req->dst_addr = req->nwk_addr;
req->request_type = ZB_ZDO_SINGLE_DEV_RESPONSE;
req->start_index = 0;
tsn = zb_zdo_ieee_addr_req(ZB_REF_FROM_BUF(buf), ieee_addr_callback);
if (tsn == ZB_ZDO_INVALID_TSN)
{
TRACE_MSG(TRACE_ZDO2, "request failed", (FMT__0));
}
}
void ieee_addr_callback(zb_uint8_t param)
{
zb_bufid_t buf = ZB_BUF_FROM_REF(param);
zb_ieee_addr_t ieee_addr;
zb_uint16_t nwk_addr;
TRACE_MSG(TRACE_ZDO2, "zb_get_peer_short_addr_cb param %hd", (FMT__H, param));
TRACE_MSG(
TRACE_ZDO2, "resp status %hd, nwk addr %d", (FMT__H_D, resp->status, resp->nwk_addr));
ZB_DUMP_IEEE_ADDR(resp->ieee_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);
}
zb_free_buf(buf);
}

See tp_zdo_bv-31 sample

◆ 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:

{
zb_bufid_t buf = ZB_BUF_FROM_REF(param);
req_param->dst_addr = 0;
zb_address_ieee_by_ref(req_param->ieee_addr, short_addr);
req_param->start_index = 0;
tsn = zb_zdo_nwk_addr_req(param, zb_get_peer_short_addr_cb);
if (tsn == ZB_ZDO_INVALID_TSN)
{
TRACE_MSG(TRACE_ZDO2, "request failed", (FMT__0));
}
}
void zb_get_peer_short_addr_cb(zb_uint8_t param)
{
zb_bufid_t buf = ZB_BUF_FROM_REF(param);
zb_ieee_addr_t ieee_addr;
zb_uint16_t nwk_addr;
TRACE_MSG(TRACE_ZDO2, "zb_get_peer_short_addr_cb param %hd", (FMT__H, param));
TRACE_MSG(TRACE_ZDO2, "resp status %hd, nwk addr %d", (FMT__H_D, resp->status, resp->nwk_addr));
ZB_DUMP_IEEE_ADDR(resp->ieee_addr);
// additionally check tsn if needed
//if (resp->tsn == my_saved_tsn)
{
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);
}
zb_free_buf(buf);
}

See tp_zdo_bv-31 sample