@yun gao,
TC分key的流程你可以参考下Z-Stack Developer's Guide.pdf中关于security的介绍,另外你也可以参考Zigbee Specification中关于ZIgBee网络加密的说明。
http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/81385.aspx
这个等待的过程称为等到认证的过程,在节点加网成功以后ZDApp_ProcessNetworkJoin( void ),如果在使能Security的情况下,会等待Trust Center认证的过程。
并且认证的超时时间是10s MAX_DEVICE_UNAUTH_TIMEOUT,
在这个时间段内,如果收到付设备发来的Transport Key Ind,并且Key正确的话,那么就会调用处理函数
// handle next step in authentication process
ZDSecMgrAuthNwkKey();
_______________
if ( events & ZDO_DEVICE_AUTH )
[
ZDApp_DeviceAuthEvt();
// Return unprocessed events
return (events ^ ZDO_DEVICE_AUTH);
]
________________
认证的状态就从DEV_END_DEVICE_UNAUTH改成了DEV_END_DEVICE,如果是Router就开始启动Router建立过程。
——————————————————
如果MAX_DEVICE_UNAUTH_TIMEOUT还没有收到Transport Key或者Key不正确的话,那么就启动Reset过程
if ( events & ZDO_DEVICE_RESET )
[
#ifdef ZBA_FALLBACK_NWKKEY
if ( devState == DEV_END_DEVICE_UNAUTH )
[
ZDSecMgrFallbackNwkKey();
]
else
#endif
[
// Set the NV startup option to force a "new" join.
zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
// The device has been in the UNAUTH state, so reset
// Note: there will be no return from this call
SystemResetSoft();
]
]
——————————————————
关于zgPreConfigKeys = TRUE和FALSE的区别,
zgPreConfigKeys = TRUE代表,设备中事先存储了Network Key,所以Trust Center并不会分发Key.
zgPreConfigKeys = FALSE代表,设备中没有事先存储Network Key,所以需要Trust Center来分发Key。