nRF5 SDK for Thread and Zigbee v3.0.0
Typedefs | Functions
NWK Address translation table access

Typedefs

typedef zb_uint8_t zb_address_pan_id_ref_t
 
typedef zb_uint8_t zb_address_ieee_ref_t
 

Functions

zb_ret_t zb_address_get_pan_id_ref (zb_ext_pan_id_t pan_id, zb_address_pan_id_ref_t *ref)
 
void zb_address_get_short_pan_id (zb_address_pan_id_ref_t pan_id_ref, zb_uint16_t *pan_id_p)
 
zb_bool_t zb_address_cmp_pan_id_by_ref (zb_address_pan_id_ref_t pan_id_ref, zb_ext_pan_id_t pan_id)
 
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)
 
void zb_address_by_ref (zb_ieee_addr_t ieee_address, zb_uint16_t *short_address_p, zb_address_ieee_ref_t ref)
 
void zb_address_ieee_by_ref (zb_ieee_addr_t ieee_address, zb_address_ieee_ref_t ref)
 
void zb_address_short_by_ref (zb_uint16_t *short_address_p, zb_address_ieee_ref_t ref)
 
zb_ret_t zb_address_by_ieee (zb_ieee_addr_t ieee, zb_bool_t create, zb_bool_t lock, zb_address_ieee_ref_t *ref_p)
 
zb_uint16_t zb_address_short_by_ieee (zb_ieee_addr_t ieee_address)
 
zb_ret_t zb_address_ieee_by_short (zb_uint16_t short_addr, zb_ieee_addr_t ieee_address)
 
zb_ret_t zb_address_by_short (zb_uint16_t short_address, zb_bool_t create, zb_bool_t lock, zb_address_ieee_ref_t *ref_p)
 
zb_ret_t zb_address_lock (zb_address_ieee_ref_t ref)
 
zb_ret_t zb_address_unlock (zb_address_ieee_ref_t ref)
 
zb_ret_t zb_address_delete (zb_address_ieee_ref_t ref)
 

Detailed Description

Typedef Documentation

IEEE address reference

Should be used inside protocol tables instead of 64/16 bit ieee.

PANID reference

Should be used inside protocol tables instead of 64 bit PANID

Function Documentation

zb_ret_t zb_address_by_ieee ( zb_ieee_addr_t  ieee,
zb_bool_t  create,
zb_bool_t  lock,
zb_address_ieee_ref_t ref_p 
)

Get address ref by long address, optionaly create if not exist, optionally lock. Update address alive time if not locked.

Parameters
ieee- ieee device address
create- if TRUE, create address entry if it's not exists
lock- if TRUE, lock address entry
ref_p- (out) address reference

Note: never call zb_address_by_ieee() with empty (zero) ieee_address

Returns
RET_OK or error code

Example

void test_get_short_addr(zb_uint8_t param)
{
zb_buf_t *buf = ZB_BUF_FROM_REF(param);
if (zb_address_by_ieee(g_ieee_addr_r2, ZB_TRUE, ZB_FALSE, &ref_p) == RET_OK)
{
...
}
}

See nwk_addr sample

void zb_address_by_ref ( zb_ieee_addr_t  ieee_address,
zb_uint16_t short_address_p,
zb_address_ieee_ref_t  ref 
)

Get address by address ref Get existing ieee and short addresses by address ref. Update address alive time if it not locked.

Parameters
ieee_address- (out) long address
short_address_p- (out) short address
ref- address reference

Example

zb_nlme_join_indication_t *resp = ZB_GET_BUF_PARAM((zb_buf_t *)ZB_BUF_FROM_REF(param), zb_nlme_join_indication_t);
zb_address_by_ref(resp->extended_address, &resp->network_address, addr_ref);

See nwk_addr sample

zb_ret_t zb_address_by_short ( zb_uint16_t  short_address,
zb_bool_t  create,
zb_bool_t  lock,
zb_address_ieee_ref_t ref_p 
)

Get address ref by long address, create if not exist, optionally lock. Update address alive time if not locked.

Parameters
short_address- 16bit device address
create- if TRUE, create address entry if it's not exists
lock- if TRUE, lock address entry
ref_p- (out) address reference

Note: never call zb_address_by_short() with empty (-1) short_address

Returns
RET_OK or error code

Example

zb_neighbor_tbl_ent_t *get_neigghbor(zb_uint16_t addr)
{
zb_neighbor_tbl_ent_t *ret = NULL;
if ( zb_address_by_short(address, ZB_FALSE, ZB_FALSE, &ieee_ref) == RET_OK
&& ZG->nwk.neighbor.addr_to_neighbor[ieee_ref] != (zb_uint8_t)-1 )
{
ret = &ZG->nwk.neighbor.base_neighbor[ ZG->nwk.neighbor.addr_to_neighbor[ieee_ref] ];
}
return ret;
}
See nwk_addr sample
zb_bool_t zb_address_cmp_pan_id_by_ref ( zb_address_pan_id_ref_t  pan_id_ref,
zb_ext_pan_id_t  pan_id 
)

Compare pan id in the source form with pan id ref

Parameters
pan_id_ref- pan id ref
pan_id- pan id (64-bit)
Returns
ZB_TRUE if addresses are equal, ZB_FALSE otherwhise

Example

for (i = 0 ; i < ZG->nwk.neighbor.ext_neighbor_used ; ++i)
{
for (j = 0 ; j < n_nwk_dsc &&
!zb_address_cmp_pan_id_by_ref(ZG->nwk.neighbor.ext_neighbor[i].panid_ref, network_descriptor[j].extended_pan_id) ;
++j)
{
...
}
}
zb_ret_t zb_address_delete ( zb_address_ieee_ref_t  ref)

Delete address.

Returns
RET_OK or RET_ERROR
Parameters
ref- ieee/network address pair reference
zb_ret_t zb_address_get_pan_id_ref ( zb_ext_pan_id_t  pan_id,
zb_address_pan_id_ref_t ref 
)

Get pan id reference by extended pan id.

Parameters
pan_id- PANID
ref- (output) reference to panid
Returns
RET_OK - when success, error code otherwise.

Example

if ( zb_address_get_pan_id_ref(ZB_NIB_EXT_PAN_ID(), &my_panid_ref) != RET_OK )
{
TRACE_MSG(TRACE_NWK1, "PAN id " TRACE_FORMAT_64 " not in panids arr - ?", (FMT__A,
TRACE_ARG_64(ZB_NIB_EXT_PAN_ID())));
}
void zb_address_get_short_pan_id ( zb_address_pan_id_ref_t  pan_id_ref,
zb_uint16_t pan_id_p 
)

Get short pan id by reference.

Parameters
pan_id_ref- reference to panid
pan_id_p- (output) PANID.
Returns
nothing

Example

zb_uint16_t nt_panid;
zb_address_get_short_pan_id(ZG->nwk.neighbor.ext_neighbor[i].panid_ref, &nt_panid);
if (nt_panid == pan_id)
{
TRACE_MSG(TRACE_NWK1, "pan_id %d is on ch %hd", (FMT__D_H, pan_id, channel));
unique_pan_id = 0;
}
void zb_address_ieee_by_ref ( zb_ieee_addr_t  ieee_address,
zb_address_ieee_ref_t  ref 
)

Get ieee address by address ref Get existing ieee by address ref. Update address alive time if it not locked.

Parameters
ieee_address- (out) long address
ref- address reference

Example

void func(zb_neighbor_tbl_ent_t *nbt)
{
zb_ieee_addr_t ieee_addr;
zb_address_ieee_by_ref(ieee_addr, nbt->addr_ref);
...
}

See tp_pro_bv-32 sample

zb_ret_t zb_address_ieee_by_short ( zb_uint16_t  short_addr,
zb_ieee_addr_t  ieee_address 
)

Get long (ieee) address by short address

Parameters
short_addr- short address
ieee_address- (out)long address
Returns
RET_OK or RET_NOT_FOUND

Example

void func(zb_uint8_t param)
{
zb_uint16_t dest_addr;
zb_ieee_addr_t ieee_addr;
zb_mac_mhr_t mac_hdr;
zb_buf_t *buf = ZB_BUF_FROM_REF(param);
zb_parse_mhr(&mac_hdr, ZB_BUF_BEGIN(buf));
ZB_LETOH16(&dest_addr, &mac_hdr.dst_addr.addr_short);
if ( RET_OK == zb_address_ieee_by_short(dest_addr, ieee_addr) )
{
zb_address_update(ieee_addr, ZG->nwk.handle.rejoin_req_table[ZG->nwk.handle.rejoin_req_table_cnt - 1].addr,
ZB_FALSE, &addr_ref);
}
}
zb_ret_t zb_address_lock ( zb_address_ieee_ref_t  ref)

Increase address lock counter, when it used in some table. Address must be already locked.

Parameters
ref- ieee/network address pair reference
Returns
RET_OK or RET_ERROR

See nwk_addr sample

zb_uint16_t zb_address_short_by_ieee ( zb_ieee_addr_t  ieee_address)

Get short address by long (ieee) address

Parameters
ieee_address- long address
Returns
short address if ok, -1 otherwhise.
Example
params = ZB_GET_BUF_PARAM(asdu, zb_tp_transmit_counted_packets_param_t);
BUFFER_COUNTED_TEST_REQ_SET_DEFAULT(params);
params->len = TEST_PACKET_LENGTH;
params->packets_number = TEST_PACKET_COUNT;
params->idle_time = TEST_PACKET_DELAY;
params->dst_addr = zb_address_short_by_ieee(d_ieee_addr);
params->addr_mode = ZB_APS_ADDR_MODE_16_ENDP_PRESENT;
TRACE_MSG(TRACE_APS3, "dst addr %d", (FMT__D, params->dst_addr));
zb_tp_transmit_counted_packets_req(ZB_REF_FROM_BUF(asdu), packets_sent_cb);

See tp_aps_bv_09 sample

void zb_address_short_by_ref ( zb_uint16_t short_address_p,
zb_address_ieee_ref_t  ref 
)

Get short address by address ref Get existing short address by address ref. Update address alive time if it not locked.

Parameters
short_address_p- (out) short address
ref- address reference

Example

zb_neighbor_tbl_ent_t *nbt;
if(zb_nwk_neighbor_with_address_conflict(&nbt)==RET_OK)
{
zb_address_short_by_ref(&addr, nbt->addr_ref);
func(addr);
}

See tp_pro_bv-32 sample

zb_ret_t zb_address_unlock ( zb_address_ieee_ref_t  ref)

UnLock address counter. Decrease lock counter. Move address to lru head if lock counter is zero.

Parameters
ref- ieee/network address pair reference
Returns
RET_OK or RET_ERROR

See nwk_addr sample

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 
)

Update long/short address pair, create if not exist, optionally lock. Reaction on device annonce etc. We have both long and short address. Must syncronize with this information address translation table.

Note: never call zb_address_update() with empty (zero) ieee_address or empty (-1) short_address.

Parameters
ieee_address- long address
short_address- short address
lock- if TRUE, lock address entry
ref_p- (out) address reference
Returns
RET_OK or error code

Example

zb_uint16_t 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);
}

See nwk_addr sample


Documentation feedback | Developer Zone | Subscribe | Updated