您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > zigbee组网过程
intmain(void){//Initializetheoperatingsystemosal_init_system();//初始化操作系统...}OSAL.cuint8osal_init_system(void){//Initializethesystemtasks.osalInitTasks();//初始化任务}OSAL_SampleLight.cvoidosalInitTasks(void){uint8taskID=0;ZDApp_Init(taskID++);zcl_Init(taskID++);zclSampleLight_Init(taskID++);}ZDApp.cvoidZDApp_Init(uint8task_id){ZDAppTaskID=task_id;ZDAppNwkAddr.addrMode=Addr16Bit;//地址模式为16bit短地址ZDAppNwkAddr.addr.shortAddr=INVALID_NODE_ADDR;//短地址=0xFFFE(void)NLME_GetExtAddr();//API函数,用于得到64bitIEEE地址afRegister((endPointDesc_t*)&ZDApp_epDesc);//为设备注册端点0描述符ZDO_Init();//初始化ZDO物件,并且设置设备if(devState!=DEV_HOLD)//无HOLD_AUTO_START此项预编译,所以devState=DEV_INIT{ZDOInitDevice(0);}ZDApp_RegisterCBs();//注册ZDO消息,只有注册了的消息才能以ZDO_CB_MSG消息的形式发送给指定的任务}ZDApp.cuint8ZDOInitDevice(uint16startDelay){uint8networkStateNV=ZDO_INITDEV_NEW_NETWORK_STATE;//0x01,初始化该设备新的网络状态#ifdefined(NV_RESTORE)networkStateNV=ZDApp_ReadNetworkRestoreState();//读出存储的网络状态if(networkStateNV==ZDO_INITDEV_RESTORED_NETWORK_STATE){networkStateNV=ZDApp_RestoreNetworkState();runtimeChannel=(uint32)(1L_NIB.nwkLogicalChannel);}devState=DEV_INIT;//无连接ZDAppDetermineDeviceType();//确定该设备的类型ZDApp_NetworkInit(extendedDelay);//开始形成网络}ZDApp.cvoidZDApp_NetworkInit(uint16delay){if(delay){osal_start_timerEx(ZDAppTaskID,ZDO_NETWORK_INIT,delay);}else{osal_set_event(ZDAppTaskID,ZDO_NETWORK_INIT);}}ZDApp.cUINT16ZDApp_event_loop(uint8task_id,UINT16events){if(events&ZDO_NETWORK_INIT)//网络初始化事件处理{ZDApp_ChangeState(DEV_INIT);ZDO_StartDevice((uint8)ZDO_Config_Node_Descriptor.LogicalType,devStartMode,DEFAULT_BEACON_ORDER,DEFAULT_SUPERFRAME_ORDER);}协调器建网ZDObject.cvoidZDO_StartDevice(bytelogicalType,devStartModes_tstartMode,bytebeaconOrder,bytesuperframeOrder){ZDApp_ChangeState(DEV_COORD_STARTING);ret=NLME_NetworkFormationRequest(zgConfigPANID,zgApsUseExtendedPANID,runtimeChannel,zgDefaultStartingScanDuration,beaconOrder,superframeOrder,false);}当网络层执行NLME_NetworkFormationRequest()建立网络后,将给予ZDO层反馈信息:ZDApp.cvoidZDO_NetworkFormationConfirmCB(ZStatus_tStatus){osal_set_event(ZDAppTaskID,ZDO_NETWORK_START);}ZDApp.cUINT16ZDApp_event_loop(bytetask_id,UINT16events){……if(events&ZDO_NETWORK_START)//网络启动事件处理{ZDApp_NetworkStartEvt();}}ZDApp.cvoidZDApp_NetworkStartEvt(void){if(nwkStatus==ZSuccess){if(devState==DEV_COORD_STARTING){ZDApp_NwkWriteNVRequest();ZDApp_ChangeState(DEV_ZB_COORD);//ZDO状态改变事件if(zgChildAgingEnable==TRUE){ZDApp_SetParentAnnceTimer();}}osal_pwrmgr_device(PWRMGR_ALWAYS_ON);}}ZDApp.cUINT16ZDApp_event_loop(bytetask_id,UINT16events){if(events&ZDO_STATE_CHANGE_EVT)//ZDO状态改变事件{ZDO_UpdateNwkStatus(devState);}}ZDObject.cvoidZDO_UpdateNwkStatus(devStates_tstate){ZDAppNwkAddr.addr.shortAddr=NLME_GetShortAddr();(void)NLME_GetExtAddr();//LoadthesaveExtAddrpointer.}应用层初始化zcl_samplelight.cvoidzclSampleLight_Init(bytetask_id){zclSampleLight_TaskID=task_id;//ThisappispartoftheHomeAutomationProfilezclHA_Init(&zclSampleLight_SimpleDesc);//初始化描述符………..afRegister(&ota_SysAppEp);//注册描述符………..}zcl_samplelight.cuint16zclSampleLight_event_loop(uint8task_id,uint16events){if(events&SYS_EVENT_MSG){while((MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(zclSampleLight_TaskID))){switch(MSGpkt-hdr.event){caseZDO_STATE_CHANGE:zclSampleLight_NwkState=(devStates_t)(MSGpkt-hdr.status);if((zclSampleLight_NwkState==DEV_ZB_COORD)||(zclSampleLight_NwkState==DEV_ROUTER)||(zclSampleLight_NwkState==DEV_END_DEVICE)){#ifdefLEDif(IsOffline){IsOffline=false;osal_stop_timerEx(zclSampleLight_TaskID,SAMPLELIGHT_OFFLINE_EVT);HAL_TURN_ON_LED1();}路由器入网ZDObject.cvoidZDO_StartDevice(bytelogicalType,devStartModes_tstartMode,bytebeaconOrder,bytesuperframeOrder){devState=DEV_NWK_DISC;ret=NLME_NetworkDiscoveryRequest(zgDefaultChannelList,zgDefaultStartingScanDuration);}当网络层执行加入网络后,将给予ZDO层反馈信息:ZDApp.cZStatus_tZDO_NetworkDiscoveryConfirmCB(byteResultCount,networkDesc_t*NetworkList){ZDApp_SendMsg(ZDAppTaskID,ZDO_NWK_DISC_CNF,sizeof(ZDO_NetworkDiscoveryCfm_t),(byte*)&msg);}ZDApp.cvoidZDApp_ProcessOSALMsg(osal_event_hdr_t*msgPtr){switch(msgPtr-event){caseZDO_NWK_DISC_CNF:ZDApp_ChangeState(DEV_NWK_JOINING);NLME_JoinRequest(((ZDO_NetworkDiscoveryCfm_t*)msgPtr)-extendedPANID,BUILD_UINT16(((ZDO_NetworkDiscoveryCfm_t*)msgPtr)-panIdLSB,((ZDO_NetworkDiscoveryCfm_t*)msgPtr)-panIdMSB),((ZDO_NetworkDiscoveryCfm_t*)msgPtr)-logicalChannel,ZDO_Config_Node_Descriptor.CapabilityFlags)}}ZDApp.cvoidZDO_JoinConfirmCB(uint16PanId,ZStatus_tStatus)???????????{ZDApp_SendMsg(ZDAppTaskID,ZDO_NWK_JOIN_IND,sizeof(osal_event_hdr_t),(byte*)NULL);}ZDApp.cvoidZDApp_ProcessOSALMsg(osal_event_hdr_t*msgPtr){switch(msgPtr-event){……caseZDO_NWK_JOIN_IND:ZDApp_ProcessNetworkJoin();break;}}ZDApp.cvoidZDApp_ProcessNetworkJoin(void){if((devState==DEV_NWK_JOINING)||((devState==DEV_NWK_ORPHAN)&&(ZDO_Config_Node_Descriptor.LogicalType==NODETYPE_ROUTER))){if(nwkStatus==ZSuccess){osal_set_event(ZDAppTaskID,ZDO_STATE_CHANGE_EVT);NLME_StartRouterRequest(0,0,false);}}}ZDApp.cUINT16ZDApp_event_loop(bytetask_id,UINT16events){......if(events&ZDO_STATE_CHANGE_EVT)//ZDO状态改变事件{ZDO_UpdateNwkStatus(devState
本文标题:zigbee组网过程
链接地址:https://www.777doc.com/doc-2829859 .html