在论坛里找到VV大神 给 http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/p/85924/236687.aspx#236687 回复的 home1.22的 但是里面有些东西 在 home1.21 里并没有, @VV 求大神讲解下 在home1.21 如何实用child aging!
VV:
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 valuesCONST 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 holdAPSME_HoldDataRequests( 0 );#endif
ZDP_DeviceAnnce( NLME_GetShortAddr(), NLME_GetExtAddr(),ZDO_Config_Node_Descriptor.CapabilityFlags, 0 );
#if defined ( ZIGBEEPRO )// Setup the timeoutAPSME_HoldDataRequests( ZDAPP_HOLD_DATA_REQUESTS_TIMEOUT );#endif
if ( ZSTACK_END_DEVICE_BUILD ){if ( zgChildAgingEnable == TRUE ){uint8 coordExtAddr[Z_EXTADDR_LEN];
// Send the message to parentNLME_GetCoordExtAddr( coordExtAddr );NLME_SendEndDevTimeoutReq( NLME_GetCoordShortAddr(), coordExtAddr,zgEndDeviceTimeoutValue,zgEndDeviceConfiguration );}}}
父设备在收到这个消息以后,就会处理,把对该节点的timeout时间修改过来了。
void NLME_ProcessEndDevTimeoutReq( NLDE_FrameFormat_t *ff )
heng ma1:
回复 VV:
关于这个timeout的时间, 1.21 默认是60 也就是61分钟, 最小设置1, 是两分钟, 那能不是设置更小的值?