TI中文支持网
TI专业的中文技术问题搜集分享网站

如何获取zll中Initiator的地址

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

VV:

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

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

qian Sun:

回复 VV:

非常感谢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的网络地址读取出来?

VV:

回复 qian Sun:

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;

赞(0)
未经允许不得转载:TI中文支持网 » 如何获取zll中Initiator的地址
分享到: 更多 (0)