This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
bug 1.
函数bdb_joinProcess中,NLME_JoinRequest返回SUCCESS时的处理代码
if(status == ZSuccess) { // The receiver is on, turn network layer polling off. if ( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE ) { // for an End Device with NO Child Table Management process or for a Router if ( ( ZG_DEVICE_RTR_TYPE ) || ( (ZG_DEVICE_ENDDEVICE_TYPE) && ( zgChildAgingEnable == FALSE ) ) ) { NLME_SetPollRate( 0 ); NLME_SetQueuedPollRate( 0 ); NLME_SetResponseRate( 0 ); } } else { if ( (ZG_SECURE_ENABLED) && (devStartMode == MODE_JOIN) ) { ZDApp_SavedPollRate = zgPollRate; NLME_SetPollRate( zgRejoinPollRate ); } } }
挪动至ZDApp.c下的函数ZDO_JoinConfirmCB中,即在该函数的(status==ZSUCCESS)的处理中加入下列处理代码
if( devState == DEV_NWK_JOINING ) { if ( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE ) { // for an End Device with NO Child Table Management process or for a Router if ( ( ZG_DEVICE_RTR_TYPE ) || ( (ZG_DEVICE_ENDDEVICE_TYPE) && ( zgChildAgingEnable == FALSE ) ) ) { NLME_SetPollRate( 0 ); NLME_SetQueuedPollRate( 0 ); NLME_SetResponseRate( 0 ); } } else { if ( (ZG_SECURE_ENABLED) && (devStartMode == MODE_JOIN) ) { ZDApp_SavedPollRate = zgPollRate; NLME_SetPollRate( zgRejoinPollRate ); } } }
修改原理:EndDevice在Associate的时候,会自带一条Data Request命令来接收Associate Response。EndDevice在调用NLME_JoinRequest函数时会发起Associate Request请求,并在macPib.responseWaitTime(默认值32,时间=32*15.36ms = 491.52ms)后自动产生一个Data Request。如果此时再调用NLME_SetPollRate来设置Data Request,会产生冲突。如果协调器支持白名单验证,在Associate Response时回复拒绝加入命令,End Device会误触发ZDO_SyncIndicationCB函数。
bug2:函数bdb_rejoinNwk不必打开RX。对于EndDevice来说,rejoin命令发出后会自动发出Data Request。以下代码可以屏蔽
uint8 tmp = true; ZMacSetReq( ZMacRxOnIdle, &tmp );
想问一下你上面说的 “如果协调器支持白名单验证,在Associate Response时回复拒绝加入命令” 这个具体怎么理解,我现在用3.0协议栈(2538硬件),更改ZDSECMGR_TC_DEVICE_MAX宏由默认值40调整到100后,入网时ZC回复Associate Response就是拒绝关联,正在查找原因,但是ZC中无法找到处理Associate Response的报文,貌似被封库了,想问下你这个白名单怎么回事,是否和我这个参数有影响
您好 附件是抓包报文 用Wireshark抓的,报文的前105条都是ZC设置ZDSECMGR_TC_DEVICE_MAX=80时,一个终端节点申请入网的报文(入网失败),从123条开始是ZC设置ZDSECMGR_TC_DEVICE_MAX=40重新编译下载后,终端节点成功入网的报文。 用的是同一个终端。论坛抓包.rar