终端加入网络,学习ZgiBee已经有两个月了;如何读像协议栈这种大量的代码;
NUM_DISC_ATTEMPTS 这个参数觉得了发送beancon的次数,默认值是2,发送3次(扫描三次网络后)加入网络。
1、加入网络的过程得回调函数
ZDO_NetworkDiscoveryConfirmCB()
开始说明
ZDO_NetworkDiscoveryConfirmCB();
这是终端的回调函数
ZStatus_t ZDO_NetworkDiscoveryConfirmCB(uint8 status)
{
osal_event_hdr_t msg;
// If Scan is initiated by ZDO_MGMT_NWK_DISC_REQ
// Send ZDO_MGMT_NWK_DISC_RSP back
#if/**/defined ( ZDO_MGMT_NWKDISC_RESPONSE )
if ( zdappMgmtNwkDiscReqInProgress )
{
zdappMgmtNwkDiscReqInProgress = false;
ZDO_FinishProcessingMgmtNwkDiscReq();
}
else
#endif
{
// Pass the confirm to another task if it registers the callback
// Otherwise, pass the confirm to ZDApp.
if (zdoCBFunc[ZDO_NWK_DISCOVERY_CNF_CBID] != NULL )
{
zdoCBFunc[ZDO_NWK_DISCOVERY_CNF_CBID]( (void*)&status );
}
else
{//前面的不太懂,但是这并没有我需要的内容,单步调试走到这里,接着跳到其函数
// Otherwise, send scan confirm to ZDApp task to proceed
msg.status = ZDO_SUCCESS;
ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_DISC_CNF, sizeof(osal_event_hdr_t), (uint8 *)&msg );
}
}
return (ZSuccess);
} // ZDO_NetworkDiscoveryConfirmCB
2、跳到了ZDA的loop函数,
const pTaskEventHandlerFn tasksArr[] = {
macEventLoop,
nwk_event_loop,
Hal_ProcessEvent,
#if defined( MT_TASK )
MT_ProcessEvent,
#endif
APS_event_loop,
#if defined ( ZIGBEE_FRAGMENTATION )
APSF_ProcessEvent,
#endif
ZDApp_event_loop,//跳到这里了
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
ZDNwkMgr_event_loop,
#endif
SerialApp_ProcessEvent,
NodeMgmtApp_ProcessEvent //131204zcl:节点管理应用 事件处理函数
};
UINT16 ZDApp_event_loop( uint8 task_id, UINT16 events )
{
uint8 *msg_ptr;
if ( events & SYS_EVENT_MSG )
{
while ( (msg_ptr = osal_msg_receive( ZDAppTaskID )) )
{
ZDApp_ProcessOSALMsg( (osal_event_hdr_t *)msg_ptr );