《国家标准》zigbee两种绑定机制Word下载.docx

上传人:b****5 文档编号:21512157 上传时间:2023-01-30 格式:DOCX 页数:15 大小:25.35KB
下载 相关 举报
《国家标准》zigbee两种绑定机制Word下载.docx_第1页
第1页 / 共15页
《国家标准》zigbee两种绑定机制Word下载.docx_第2页
第2页 / 共15页
《国家标准》zigbee两种绑定机制Word下载.docx_第3页
第3页 / 共15页
《国家标准》zigbee两种绑定机制Word下载.docx_第4页
第4页 / 共15页
《国家标准》zigbee两种绑定机制Word下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

《国家标准》zigbee两种绑定机制Word下载.docx

《《国家标准》zigbee两种绑定机制Word下载.docx》由会员分享,可在线阅读,更多相关《《国家标准》zigbee两种绑定机制Word下载.docx(15页珍藏版)》请在冰豆网上搜索。

《国家标准》zigbee两种绑定机制Word下载.docx

不同的是,前者采用的目的地址是64位扩展地址,而后者采用的目的地址是16位网络地址。

前者已知扩展地址,调用了ZDP_NwkAddrReq()函数获得目的设备短地址;

后者利用描述匹配得到了短地址,然后调用了ZDP_IEEEAddrReq()函数,获取目的设备的扩展地址.

**************************************************************************************************************************

1、已知扩展地址的绑定

这里可以直接调用函数zb_BindDevice()发起绑定请求:

zb_BindDevice(uint8create, 

//是否创建绑定,TRUE则创建,FALSE则解除

uint16commandId, 

//命令ID,基于某命令的绑定,相当于簇

uint8*pDestination) 

//指向扩展地址的指针

函数程序如下(已知扩展地址的绑定部分)

******************************************

voidzb_BindDevice(uint8create,uint16commandId,uint8*pDestination)

{

zAddrType_tdestination;

uint8ret=ZB_ALREADY_IN_PROGRESS;

if(create) 

//create=true建立绑定

{

if(sapi_bindInProgress==0xffff) 

//不允许绑定过程?

?

//---------------------------------

if(pDestination) 

//已知扩展地址的绑定,即*pDestination为非NULL

destination.addrMode=Addr64Bit;

osal_cpyExtAddr(destination.addr.extAddr,pDestination);

//直接调用APS绑定请求函数

ret=APSME_BindRequest(sapi_epDesc.endPoint, 

//源EP

commandId, 

 

//簇ID

&

destination, 

//目的地址模式

sapi_epDesc.endPoint);

//目的EP

if(ret==ZSuccess) 

//绑定成功

//Findnwkaddr发现网络地址,得到被绑定设备的短地址

ZDP_NwkAddrReq(pDestination,ZDP_ADDR_REQTYPE_SINGLE,0,0);

osal_start_timerEx(ZDAppTaskID,ZDO_NWK_UPDATE_NV,250);

}

else 

//未知目的扩展地址,即*pDestination=NULL

ret=ZB_INVALID_PARAMETER;

destination.addrMode=Addr16Bit;

destination.addr.shortAddr=NWK_BROADCAST_SHORTADDR;

//0xffff描述符匹配请求:

广播

/*检测输出簇;

如果是输出簇,则去匹配一个处于允许绑定模式的设备*/

if(ZDO_AnyClusterMatches(1,&

commandId,sapi_epDesc.simpleDesc->

AppNumOutClusters,

sapi_epDesc.simpleDesc->

pAppOutClusterList))

//Trytomatchwithadeviceintheallowbindmode

ret=ZDP_MatchDescReq(&

destination,NWK_BROADCAST_SHORTADDR,

AppProfId,1,&

commandId,0,(cId_t*)NULL,0);

/*检测输入簇;

如果是输入簇,则去匹配一个处于允许绑定模式的设备*/

elseif(ZDO_AnyClusterMatches(1,&

AppNumInClusters,

pAppInClusterList))

AppProfId,0,(cId_t*)NULL,1,&

commandId,0);

if(ret==ZB_SUCCESS)

//Setatimertomakesurebindcompletes

osal_start_timerEx(sapi_TaskID,ZB_BIND_TIMER,AIB_MaxBindingTime);

sapi_bindInProgress=commandId;

return;

//dontsendcbackevent

SAPI_SendCback(SAPICB_BIND_CNF,ret,commandId);

//create=false删除绑定

//RemovelocalbindingsforthecommandId

BindingEntry_t*pBind;

//Loopthroughbindingsanremoveanythatmatchthecluster

while(pBind=bindFind(sapi_epDesc.simpleDesc->

EndPoint,commandId,0))

bindRemoveEntry(pBind);

}

在上面已知扩展地址的绑定程序中调用了APS绑定函数APSME_BindRequest(),这个函数在两个设备间建立绑定,通过APSME_BIND.confirm原语返回,而且这两者是不可分割的。

如果绑定成功,则调用函数ZDP_NwkAddrReq()得到目的设备的短地址。

ZDP_NwkAddrReq()这个函数可以产生一个根据已知遥远设备的IEEE地址,请求得到16位短地址的信息.该信息以广播的方式发送给网络中的所有设备.

2、未知扩展地址的绑定(simpApp例子中默认的绑定机制)

该绑定方式下,在发送绑定请求前,先要让被绑定的目的设备处于允许绑定模式。

可以调用函数zb_AllowBind()进入该模式,函数如下:

//函数设置设备处于允许绑定模式

//timerout=0x00:

不允许绑定

//timerout=0xff:

一直处于绑定模式

//0<

timeout<

65:

允许绑定的时间(单位/秒)

voidzb_AllowBind(uint8timeout)

osal_stop_timerEx(sapi_TaskID,ZB_ALLOW_BIND_TIMER);

if(timeout==0)

afSetMatch(sapi_epDesc.simpleDesc->

EndPoint,FALSE);

else

EndPoint,TRUE);

//设置允许响应匹配描述符请求

if(timeout!

=0xFF)

if(timeout>

64)

timeout=64;

//设置了允许匹配后,开启一个定时器,时间为timeout*1000,

//时间一到触发sapi任务ZB_ALLOW_BIND_TIMER事件,SAPI_ProcessEvent()对其的处理是

//afSetMatch(sapi_epDesc.simpleDesc->

EndPoint,FALSE)而取消允许绑定

osal_start_timerEx(sapi_TaskID,ZB_ALLOW_BIND_TIMER,timeout*1000);

参数timeout是进入绑定模式持续的时间(s)。

如果设置为OxFF,则设备在任何时候都在允许绑定模式;

如果设置为OxOO,则设备将通过该命令取消允许绑定模式.

调用该函数使设备在给定时间内进入允许绑定模式.一个在允许绑定模式下同等的设备调用函数zb_BindDevice()能与之建立绑定,此时目的扩展地址为空(参见上面zb_BindDevice()未知目的扩展地址部分).zb_AllowBind()调用afSetMatch(),使之允许响应ZDO的匹配描述符请求.

以上设置目的设备允许绑定模式(比如simpleApp的灯设备),那在目的设备处于允许绑定模式的时间内,源设备(比如simpleApp的开关设备)可以调用zb_BindDevice()来发起绑定请求.此时执行的程序如下:

…………

else//未知目的扩展地址,即*pDestination=NULL

//0xffff

/*检测输出簇,如果是输出簇,则去匹配一个处于允许绑定模式的设备*/

//匹配一个在允许绑定模式下的设备

/*检测输入簇,如果是输入簇,则去匹配一个处于允许绑定模式的设备*/

//Setatimertomakesurebindcompletes设置一个时间,确保绑定完成

//允许基于commandId命令的绑定过程

…………

在之中调用了函数ZDP_MatchDescReq(),将建立和发送一个匹配描述符请求。

用这个函数在一个应用中的输入/输出簇列表中搜索匹配某条件的设备/应用。

该绑定响应处理在SAPI_ProcessEvent事件处理函数中

caseZDO_CB_MSG:

/*ZDO信息数据*/

SAPI_ProcessZDOMsgs((zdoIncomingMsg_t*)pMsg);

看下SAPI_ProcessZDOMsgs()函数

// 

SAPI_Init()函数中注册了以下两个ZDO信息

ZDO_RegisterForZDOMsg(sapi_TaskID,NWK_addr_rsp);

ZDO_RegisterForZDOMsg(sapi_TaskID,Match_Desc_rsp);

voidSAPI_ProcessZDOMsgs(zdoIncomingMsg_t*inMsg)

switch(inMsg->

clusterID)

//--------------------

caseNWK_addr_rsp:

caseMatch_Desc_rsp:

zAddrType_tdstAddr;

ZDO_ActiveEndpointRsp_t*pRsp=ZDO_ParseEPListRsp(inMsg);

if(sapi_bindInProgress!

=0xffff)//commandId

//Createabindingtableentry创建一个绑定条目

dstAddr.addrMode=Addr16Bit;

dstAddr.addr.shortAddr=pRsp->

nwkAddr;

/*调用这个函数来实现两个设备的绑定*/

if(APSME_BindRequest(sapi_epDesc.simpleDesc->

EndPoint, 

sapi_bindInProgress, 

//簇ID

dstAddr, 

//目的地址模式

pRsp->

epList[0])==ZSuccess) 

//成功实现绑定后

//zb_BindDevice()中开启了一个定时器,用于接收Match_Desc_rsp计时

//如果接收到,则停止这个定时器,如下;

如果溢出,则触发相应任务事件

osal_stop_timerEx(sapi_TaskID, 

ZB_BIND_TIMER);

sapi_bindInProgress=0xffff;

//FindIEEEaddr

ZDP_IEEEAddrReq(pRsp->

nwkAddr,ZDP_ADDR_REQTYPE_SINGLE,0,0);

//Sendbindconfirmcallbacktoapplication

zb_BindConfirm(sapi_bindInProgress,ZB_SUCCESS);

break;

以上内容摘自《zigbee2006无线网络与无线定位实战》这本书,根据协议版本的不同作了一些修改。

实例中的两种绑定机制,第一种(已知扩展地址的绑定)流程,就是zb_BindDevice()根据扩展地址直接调用APSME_BindRequest()创建绑定条目实现绑定,再得到其16位网络地址;

第二种(未知扩展地址的绑定),因地址未知,须先经过一个描述符匹配过程得到相匹配设备的16位短地址,然后通过APSME_BindRequest()创建绑定条目实现绑定,再得到其扩展地址.

下面引用《zigbee2006无线网络与无线定位实战》对未知扩展地址的绑定流程的描述(以simpApp灯开关实验为例),根据协议版本不同作了相应修改:

(1)首先调用zb_AllowBind(myAllowBindTimeout)函数,使管理设备(灯)处于允许绑定(匹配)响应模式

(2)在myAllowBindTimeout规定的时间内,终端设备需要调用zb_BindD

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

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1