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;