nRF5 SDK for Thread and Zigbee v3.2.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.

Pan ID reference

Should be used inside protocol tables instead of 64-bit Pan ID

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 does not exist
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 does not exist
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- Pan ID
ref- (output) reference to Pan ID
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 Pan ID 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 Pan ID
pan_id_p- (output) Pan ID.
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. Long and short addresses are present. Must syncronize the address translation table with this inforormation

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