问题:GenericApp中ZED不能接收ZDP_MatchDescReq请求
你好,
z-stack版本:ZStack-CC2530-2.5.1a
GenericApp中,有两个请求ZDP_EndDeviceBindReq、ZDP_MatchDescReq;
ZDP_EndDeviceBindReq操作一切正常;
但ZDP_MatchDescReq有不正常的地方;
我的系统:1个ZC;1个ZR;1个ZED;
ZC与ZR互发ZDP_MatchDescReq都有相应;
ZED发ZDP_MatchDescReq给ZC或ZR都有相应,但ZC或ZR发ZDP_MatchDescReq给ZED没有相应;
我在ZED程序中设置了中断,没有中断;
uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )
{
...
case AF_INCOMING_MSG_CMD:
GenericApp_MessageMSGCB( MSGpkt );
break;
...
}
是ZC或ZR的GenericApp_SimpleDesc的OutClusterList与ZED的InClusterList不匹配?还是系统已设置ZED不许匹配?
在哪里可以查找端点匹配描述符?
TI同志,能否帮我分析一下?
此问题困挠我很久了,烦请回复,谢谢!
Jack,
你好!
你可以仔细看下2.5.1a 协议栈下面 ZDP_MatchDescReq这个函数。
afStatus_t ZDP_MatchDescReq( zAddrType_t *dstAddr, uint16 nwkAddr, uint16 ProfileID, byte NumInClusters, cId_t *InClusterList, byte NumOutClusters, cId_t *OutClusterList, byte SecurityEnable ) { uint8 *pBuf = ZDP_TmpBuf; // nwkAddr+ProfileID+NumInClusters+NumOutClusters. byte i, len = 2 + 2 + 1 + 1; // nwkAddr+ProfileID+NumInClusters+NumOutClusters. (void)SecurityEnable; // Intentionally unreferenced parameter len += (NumInClusters + NumOutClusters) * sizeof(uint16); if ( len >= ZDP_BUF_SZ-1 ) { return afStatus_MEM_FAIL; } // The spec changed in Zigbee 2007 (2.4.3.1.7.1) to not allow sending // this command to 0xFFFF. So, here we will filter this and replace // with 0xFFFD to only send to devices with RX ON. This includes the // network address of interest. if ( ((dstAddr->addrMode == AddrBroadcast) || (dstAddr->addrMode == Addr16Bit)) && (dstAddr->addr.shortAddr == NWK_BROADCAST_SHORTADDR_DEVALL) ) { dstAddr->addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVRXON; } if ( nwkAddr == NWK_BROADCAST_SHORTADDR_DEVALL ) { nwkAddr = NWK_BROADCAST_SHORTADDR_DEVRXON; }
如果这个数据发给0xFFFF的,那么地址会被过滤换成 0xFFFD,NWK_BROADCAST_SHORTADDR_DEVRXON
0xFFFD代表 Everyone with RxOnWhenIdle == TRUE
所以说End device无法收到这个数据。
在2.5.1a以后的协议栈里面,已经把这个去掉了
你可以在官网上下载最新的Z-Stack Home 1.2.1看下。
如果你还是要用2.5.1a的,那么你把这段过滤改掉就可以了。
谢谢!
谢谢;
我也发现了这个问题;
再次感谢!