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.
在论坛里找到VV大神 给 www.deyisupport.com/.../236687.aspx 回复的 home1.22的 但是里面有些东西 在 home1.21 里并没有, @VV 求大神讲解下 在home1.21 如何实用child aging!
Z-Stack Home 1.2.1 和 Z-Stack Home 1.2.2
对Child Aging功能的实现原理是一样的。
只不过Z-Stack Home 1.2.1里面,父设备对于end device来说,他的timeout时间是在父设备上实现固定的。
// Child table Management timeout values
CONST uint16 gKEEPALIVE_TIMEOUT_MAX = KEEPALIVE_TIMEOUT_MAX;
CONST uint16 gTIMEOUT_COUNTER_MAX = TIMEOUT_COUNTER_MAX;
以上两个变量主要用来判断,end device连续多久没有poll 了,然后就删除它。
其实这种做法是不合适的,因为用户在开发产品的时候,不是所有的产品poll rate都是一样的。比方说对于门磁 poll rate可能是0,对于door lock可能是10000.
那么poll rate不同,父设备对于子设备的统计方式也不一样了。
这也是为什么Z-Stack Home 1.2.2里面,需要子设备在入网以后告诉父设备自己的poll rate是多少。
void ZDApp_AnnounceNewAddress( void )
{
#if defined ( ZIGBEEPRO )
// Turn off data request hold
APSME_HoldDataRequests( 0 );
#endif
ZDP_DeviceAnnce( NLME_GetShortAddr(), NLME_GetExtAddr(),
ZDO_Config_Node_Descriptor.CapabilityFlags, 0 );
#if defined ( ZIGBEEPRO )
// Setup the timeout
APSME_HoldDataRequests( ZDAPP_HOLD_DATA_REQUESTS_TIMEOUT );
#endif
if ( ZSTACK_END_DEVICE_BUILD )
{
if ( zgChildAgingEnable == TRUE )
{
uint8 coordExtAddr[Z_EXTADDR_LEN];
// Send the message to parent
NLME_GetCoordExtAddr( coordExtAddr );
NLME_SendEndDevTimeoutReq( NLME_GetCoordShortAddr(), coordExtAddr,
zgEndDeviceTimeoutValue,
zgEndDeviceConfiguration );
}
}
}
父设备在收到这个消息以后,就会处理,把对该节点的timeout时间修改过来了。
void NLME_ProcessEndDevTimeoutReq( NLDE_FrameFormat_t *ff )