zigbee组网程序解读Word格式文档下载.docx

上传人:b****2 文档编号:1140233 上传时间:2023-04-30 格式:DOCX 页数:44 大小:30.80KB
下载 相关 举报
zigbee组网程序解读Word格式文档下载.docx_第1页
第1页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第2页
第2页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第3页
第3页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第4页
第4页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第5页
第5页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第6页
第6页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第7页
第7页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第8页
第8页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第9页
第9页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第10页
第10页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第11页
第11页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第12页
第12页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第13页
第13页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第14页
第14页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第15页
第15页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第16页
第16页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第17页
第17页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第18页
第18页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第19页
第19页 / 共44页
zigbee组网程序解读Word格式文档下载.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

zigbee组网程序解读Word格式文档下载.docx

《zigbee组网程序解读Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《zigbee组网程序解读Word格式文档下载.docx(44页珍藏版)》请在冰点文库上搜索。

zigbee组网程序解读Word格式文档下载.docx

osal_mem_init();

//Initializethemessagequeue

osal_qHead=NULL;

//Initializethetimers

osalTimerInit();

//InitializethePowerManagementSystem

osal_pwrmgr_init();

//Initializethesystemtasks.

osalInitTasks();

//第三步,执行操作系统任务初始化函数

//Setupefficientsearchforthefirstfreeblockofheap.

osal_mem_kick();

return(SUCCESS);

}

//第三步,进入osalInitTasks()函数,执行操作系统任务初始化

voidosalInitTasks(void) 

//第三步,初始化操作系统任务

uint8taskID=0;

tasksEvents=(uint16*)osal_mem_alloc(sizeof(uint16)*tasksCnt);

osal_memset(tasksEvents,0,(sizeof(uint16)*tasksCnt));

//任务优先级由高向低依次排列,高优先级对应taskID的值反而小

macTaskInit(taskID++);

//不需要用户考虑

nwk_init(taskID++);

Hal_Init(taskID++);

//硬件抽象层初始化,需要我们考虑

#ifdefined(MT_TASK) 

MT_TaskInit(taskID++);

#endif

APS_Init(taskID++);

#ifdefined(ZIGBEE_FRAGMENTATION) 

APSF_Init(taskID++);

ZDApp_Init(taskID++);

//第四步,ZDApp层,初始化,执行ZDApp_init函数后,如果是协调器将建立网络,如果是终端设备将加入网络。

#ifdefined(ZIGBEE_FREQ_AGILITY)||defined(ZIGBEE_PANID_CONFLICT) 

ZDNwkMgr_Init(taskID++);

SerialApp_Init(taskID);

//应用层SerialApp层初始化,需要用户考虑 

在此处设置了一个按键触发事件,

//当有按键按下的时候,产生一个系统消息

//第四步,进入ZDApp_init()函数,执行ZDApp层初始化

//Thefirststep

voidZDApp_Init(uint8task_id) 

//Thefirststep,ZDApp层初始化。

//SavethetaskID

ZDAppTaskID=task_id;

//InitializetheZDOglobaldeviceshortaddressstorage

ZDAppNwkAddr.addrMode=Addr16Bit;

ZDAppNwkAddr.addr.shortAddr=INVALID_NODE_ADDR;

(void)NLME_GetExtAddr();

//LoadthesaveExtAddrpointer.

//Checkformanual"

HoldAutoStart"

ZDAppCheckForHoldKey();

//InitializeZDOitemsandsetupthedevice-typeofdevicetocreate.

ZDO_Init();

//RegistertheendpointdescriptionwiththeAF

//Thistaskdoesn'

thaveaSimpledescription,butwestillneed

//toregistertheendpoint.

afRegister((endPointDesc_t*)&

ZDApp_epDesc);

#ifdefined(ZDO_USERDESC_RESPONSE)

ZDApp_InitUserDesc();

#endif//ZDO_USERDESC_RESPONSE

//Startthedevice?

if(devState!

=DEV_HOLD) 

//devState初值为DEV_INIT,所以在初始化ZDA层时,就执行该条件语句

{

ZDOInitDevice(0);

//Thesecondstep,接着转到ZDOInitDevice()函数,执行Thethirdstep;

}

else

//BlinkLEDtoindicateHOLD_START

HalLedBlink(HAL_LED_4,0,50,500);

ZDApp_RegisterCBs();

//Thethirdstep,执行ZDOInitDevice()函数,执行设备初始化

uint8ZDOInitDevice(uint16startDelay) 

//Thethirdstep,ZDO层初始化设备,

//Triggerthenetworkstart

ZDApp_NetworkInit(extendedDelay);

//网络初始化,跳到相应的函数里头,执行Thefourthstep

//Thefouthstep,执行ZDApp_NetWorkInit()函数

voidZDApp_NetworkInit(uint16delay) 

//Thefourthstep,网络初始化

if(delay)

//Waitawhilebeforestartingthedevice

osal_start_timerEx(ZDAppTaskID,ZDO_NETWORK_INIT,delay);

//发送ZDO_NETWORK_INIT(网络初始化)消息到ZDApp层,转到 

//ZDApp层,执行Thefifthstep 

,ZDApp_event_loop()函数

osal_set_event(ZDAppTaskID,ZDO_NETWORK_INIT);

//Thefifthstep,转到ZDApp_event_loop()函数

UINT16ZDApp_event_loop(uint8task_id,UINT16events)

if(events&

ZDO_NETWORK_INIT) 

//Thefivthstep,网络初始化事件处理

//Initializeappsandstartthenetwork

devState=DEV_INIT;

//设备逻辑类型,启动模式,信标时间,超帧长度,接着转到Thesixthstep,去启动设备,接着执行Thesixthstep,转到ZDO_StartDevice()

ZDO_StartDevice((uint8)ZDO_Config_Node_Descriptor.LogicalType,devStartMode, 

DEFAULT_BEACON_ORDER,DEFAULT_SUPERFRAME_ORDER);

//Returnunprocessedevents

return(events^ZDO_NETWORK_INIT);

//Thesixthstep,执行ZDO_StartDevice()函数,启动设备

voidZDO_StartDevice(bytelogicalType,devStartModes_tstartMode,bytebeaconOrder,bytesuperframeOrder)//Thesixthstep

if(ZG_BUILD_COORDINATOR_TYPE&

&

logicalType==NODETYPE_COORDINATOR) 

//当设备作为协调器时,执行这个条件语句。

if(startMode==MODE_HARD)

devState=DEV_COORD_STARTING;

//向网络层发送网络形成请求。

当网络层执行NLME_NetworkFormationRequest()建立网络后,将给予ZDO层反馈信息。

//接着转到Theseventhstep,去执行ZDApp层的 

ZDO_NetworkFormationConfirmCB()函数

ret=NLME_NetworkFormationRequest(zgConfigPANID,zgApsUseExtendedPANID,zgDefaultChannelList,

zgDefaultStartingScanDuration,beaconOrder,

superframeOrder,false);

if(ZG_BUILD_JOINING_TYPE&

(logicalType==NODETYPE_ROUTER||logicalType==NODETYPE_DEVICE))//当为终端设备或路由时

if((startMode==MODE_JOIN)||(startMode==MODE_REJOIN))

devState=DEV_NWK_DISC;

//zgDefaultChannelList与协调器形成网络的通道号匹配。

网络发现请求。

//继而转到ZDO_NetworkDiscoveryConfirmCB()函数

ret=NLME_NetworkDiscoveryRequest(zgDefaultChannelList,zgDefaultStartingScanDuration);

//Theseventhstep,分两种情况,1.协调器 

2.路由器或终端设备

1)协调器

voidZDO_NetworkFormationConfirmCB(ZStatus_tStatus)//Theseventhstep,给予ZDO层网络形成反馈信息(协调器)

osal_set_event(ZDAppTaskID,ZDO_NETWORK_START);

//发送网络启动事件到ZDApp层,接着转到ZDApp_event_loop()函数 

ZDO_NETWORK_START) 

//网络启动事件

ZDApp_NetworkStartEvt();

//网络启动事件,接着跳转到Theninthstep,执行ZDApp_NetworkStartEvt()函数

voidZDApp_NetworkStartEvt(void) 

//处理网络启动事件

osal_pwrmgr_device(PWRMGR_ALWAYS_ON);

//电源总是上电

osal_set_event(ZDAppTaskID,ZDO_STATE_CHANGE_EVT);

//设置网络状态改变事件,发送到ZDApp层,转到Thetenthstep,去

...... 

//ZDApp_event_loop()函数,找到相对应的网络改变事件。

2)路由器或终端设备

//Theseventhstep(终端设备),当发现有网络存在时,网络层将给予ZDO层发现网络反馈信息

ZStatus_tZDO_NetworkDiscoveryConfirmCB(uint8ResultCount,networkDesc_t*NetworkList) 

//把网络发现这个反馈消息,发送到ZDA层,转到ZDApp_ProcessOSALMsg(),执行

ZDApp_SendMsg(ZDAppTaskID,ZDO_NWK_DISC_CNF,sizeof(ZDO_NetworkDiscoveryCfm_t),(uint8*)&

msg);

voidZDApp_ProcessOSALMsg(osal_event_hdr_t*msgPtr)

caseZDO_NWK_DISC_CNF:

//(终端设备),网络发现响应。

//当发现有网络存在时,网络层将给予ZDO层发现网络反馈信息。

然后由网络层发起加入网络请求,

//如加入网络成功,则网络层将给予ZDO层加入网络反馈,执行NLME_JoinRequest()函数。

然后转到 

//Theninthstep,执行ZDO_JoinConfirmCB()函数

if(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)!

=ZSuccess)

ZDApp_NetworkInit((uint16)(NWK_START_DELAY

+((uint16)(osal_rand()&

EXTENDED_JOINING_RANDOM_MASK))));

voidZDO_JoinConfirmCB(uint16PanId,ZStatus_tStatus) 

//Theninthstep(终端设备),终端设备加入网络响应。

//将ZDO_NWK_JOIN_IND事件发送到ZDA层,执行ZDApp_ProcessOSALMsg()函数。

ZDApp_SendMsg(ZDAppTaskID,ZDO_NWK_JOIN_IND,sizeof(osal_event_hdr_t),(byte*)NULL);

caseZDO_NWK_JOIN_IND:

//终端设备,加入网络反馈信息事件。

if(ZG_BUILD_JOINING_TYPE&

ZG_DEVICE_JOINING_TYPE)

ZDApp_ProcessNetworkJoin();

//转到ZDApp_ProcessNetworkJoin(),执行ZDApp_ProcessNetworkJoin()函数。

break;

在执行ZDApp_ProcessNetworkJoin()函数的时候,要分两种情况,一种是终端设备,一种是路由器:

3)终端设备:

voidZDApp_ProcessNetworkJoin(void) 

//处理网络加入事件。

if(nwkStatus==ZSuccess)

//设置ZDO_STATE_CHANGE_EVT,发送到ZDA层,执行ZDApp_event_loop()函数。

osal_set_event(ZDAppTaskID,ZDO_STATE_CHANGE_EVT);

4)路由器:

if(ZSTACK_ROUTER_BUILD)

//NOTE:

firsttwoparametersarenotused,seeNLMEDE.hfordetails

if(ZDO_Config_Node_Descriptor.LogicalType!

=NODETYPE_DEVICE)

NLME_StartRouterRequest(0,0,false);

//路由启动请求

voidZDO_StartRouterConfirmCB(ZStatus_tStatus)

nwkStatus=(byte)Status;

osal_set_event(ZDAppTaskID,ZDO_ROUTER_START);

if(events&

ZDO_ROUTER_START)

if(nwkStatus==ZSuccess)

if(devState==DEV_END_DEVICE)

devState=DEV_ROUTER;

//设备状态变成路由器

osal_pwrmgr_device(PWRMGR_ALWAYS_ON);

//remainasenddevice!

!

//设置ZDO状态改变事件

//Returnunprocessedevents

return(events^ZDO_ROUTER_START);

//Theeighthstep,执行ZDO状态改变事件

.......

ZDO_STATE_CHANGE_EVT) 

//Theeighthstep,网络改变事件,这个事件就是在设备加入网络成功后,

//并在网络中的身份确定后产生的一个事件

ZDO_UpdateNwkStatus(devState);

//更新网络状态,转到Theeleventhstep,执行ZDO_UpdateNwkStatus()函数。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2