main()->osal_init_system()->osalInitTasks()->ZDApp_Init()
①在ZDApp_Init中调用ZDOInitDevice( 0 )这个函数;
②在ZDOInitDevice中调用ZDApp_NetworkInit( extendedDelay )这个函数;③在ZDApp_NetworkInit( extendedDelay )中调用
osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, delay )这个函数来开启一个定时器;
④定时时间到后在ZDApp_event_loop中的调用ZDO_StartDevice这个函数;
⑤在ZDO_StartDevice这个函数中调用NLME_NetworkFormationRequest这个函数来建立网络;
---->ZDOInitDevice();
---->ZDApp_NetworkInit();
---->osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );
---->events & ZDO_NETWORK_INIT;
---->ZDO_StartDevice();
如果是协调器启动 ---->NLME_NetworkFormationRequest();
如果是路由器或者终端设备第一次启动 ---->NLME_NetworkDiscoveryRequest();
如果是路由器重新加入: ---->nwk_ScanJoiningOrphan();
如果是终端设备重新加入: ---->NLME_OrphanJoinRequest();
如果启动失败:
osal_start_timerEx(ZDAppTaskID, ZDO_NETWORK_INIT, NWK_RETRY_DELAY ); * * * *
---->ZDO_NetworkFormationConfirmCB();
---->osal_set_event( ZDAppTaskID, ZDO_NETWORK_START );
---->events & ZDO_NETWORK_START---->ZDApp_NetworkStartEvt();
---->
osal_set_event(ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
---->events & ZDO_STATE_CHANGE_EVT ---->ZDO_UpdateNwkStatus( devState );
---->osal_msg_send( *(epDesc->epDesc->task_id), (byte *)msgPtr );
//上面事件的作用是:向每个应用层任务注册一个ZDO_STATE_CHANGE事件
协调器(自启动模式)—以SampleApp的协调器为例,并假设初始化成功,网络建立成功. 程序大致流程:
main()->osal_init_system()->osalInitTasks()->ZDApp_Init()->ZDOInitDevice()->ZDApp_NetworkInit->触发ZDAppTaskID的ZDO_NETWORK_INIT->ZDO_StartDevice()->NLME_NetworkFormationRequest()->网络建立成功ZDO_NetworkFormationConfirmCB->触发ZDAppTaskID的ZDO_NETWORK_START->ZDApp_NetworkStartEvt()->触发ZDAppTaskID的ZDO_STATE_CHANGE_EVT->ZDO_UpdateNwkStatus()->触发SampleApp_TaskID的ZDO_STATE_CHANGE->开户周期信息发送的定时器.