微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 如何获取zll中Initiator的地址

如何获取zll中Initiator的地址

时间:10-02 整理:3721RD 点击:

target怎样得到Initiator的地址,然后向Initiator反馈信息?~~急用~~

Initiator在入网的时候会有device Announce,可以获得短地址

在Touchlink过程获得了initiator的长地址

非常感谢vv的回答!但我还有些不明白,详尽问题如下:

1、Touchink和入网的不是同一个概念吗?

2、对于Initiator 入网时发送的device Announce,target的回调函数是不是

void zll_RouterProcessZDOMsg( zdoIncomingMsg_t *inMsg )
{
ZDO_DeviceAnnce_t devAnnce;

switch ( inMsg->clusterID )
{
case Device_annce:
{
// all devices should send link status, including the one sending it
ZDO_ParseDeviceAnnce( inMsg, &devAnnce );

linkInfo_t *linkInfo;

// check if entry exists
linkInfo = nwkNeighborGetLinkInfo( devAnnce.nwkAddr, _NIB.nwkPanId );

// if not, look for a vacant entry to add this node...
if ( linkInfo == NULL )
{
nwkNeighborAdd( devAnnce.nwkAddr, _NIB.nwkPanId, 1 );
// if we have end device childs, send link status
if ( AssocCount(CHILD_RFD, CHILD_RFD_RX_IDLE) > 0 )
{
linkInfo = nwkNeighborGetLinkInfo( devAnnce.nwkAddr, _NIB.nwkPanId );
if ( (linkInfo != NULL) && (linkInfo->txCost == 0) )
{
linkInfo->txCost = MAX_LINK_COST;
}
NLME_UpdateLinkStatus();
}
}
else
{
// only update the TxCost, so the Link Status can be sent properly
if (linkInfo->txCost == 0)
{
linkInfo->txCost = MAX_LINK_COST;
}
}
}
break;

......

}

3、如果target的回调函数是void zll_RouterProcessZDOMsg( zdoIncomingMsg_t *inMsg )的话,我怎么把Initiator的网络地址读取出来?

1, 应该Touchlink是入网过程的一部分,在Touchlink 过程的目的,主要是为了一些信息的交互,包括基本的网络信息,设备信息等等。

在获得这些信息以后,再进行加网,这个加网过程和传统ZIgBee的加网是一样的流程。

2,建议你可以在应用层注册那个这个device annce的消息,在应用的ZDO 消息处理做处理。你这个是在ZDO层消息处理里

3,device annce就有地址了

typedef struct
{
uint16 nwkAddr;
uint8 extAddr[Z_EXTADDR_LEN];
uint8 capabilities;
} ZDO_DeviceAnnce_t;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top