版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、绑定(Binding)绑定是一种控制两个或者多个设备应用层之间信息流传递的机制。在 ZigBee2006 发布版本中,它被称为源绑定,所有的设备都可以执行绑定机制。绑定允许应用程序发送一个数据包而不需要知道目标设备的短地址(此时将目标设备的短地址设置为无效地址 0 xE)。应用支持子层(APS)从它的绑定表中确定目标设备的短地址,然后将数据发送给目标应用或者目标组。如果在绑定表中找到的短地址不止一个,协议栈会向所有找到的短地址发送数据。说明:绑定是基于设备应用层端点的绑定,而且绑定只能在互为补充的设备间被创建。也就是说,当两个设备已经在他们的简单描述符结构中登记为一样输入另一个作为输出时,
2、绑定才能成功。令 ID,并且一个作为图 1:绑定图示上图为两个设备建立的绑定关系,从上图理解绑定是基于端点(endpo)的绑定。在设备 1 中端点号(endpo)为 3 的开关 1 与设备 2 中端点号(endpo)为 5、7、8 的灯建立了绑定。设备 1 中端点号(endpo)为 2 的开关与设备 2 中端点号(endpo)为 17的灯建立了绑定。立绑定表(Building a Binding Table)有三种方法可以建立一个绑定表:Zigbee Device Object Bind Request(ZDO 绑定请求)通过一个命令告诉设备创建一个绑定表Zigbee Device Objec
3、t End Device Bind Request(ZDO 终端绑定请求)两个设备可以告诉协调器它们想要建立一个绑定表。协调器来协调并在两个设备中创建绑定表。Device Application(设备应用)一个设备上的应用程序建立或者管理一个绑定表三、绑定表的建立TI 的 Zstack2006 协议栈中提供两种可用的机制来配置设备绑定: (1)如果目的设备的扩展地址是已知的(2)如果目的设备的扩展地址是未知的3.1、已知扩展地址的绑定如果已经知道要绑定目标设备的扩展地址,那么在源设备端只需通过函数 zb_BindDevice ()函数便可以进行绑定,zb_BindDevice ()中地址要设置
4、为目标设备的扩展地址。绑定函数说明:zb_BindDevice ( u8 create, /创建还是删除绑定,TRUE 创建,FALSE 删除u16dId, /命令 ID,绑定是基于命令 ID 的绑定u8 *pDestination ) /扩展地址,可以为 NULL,决定绑定类型程序代码:1、基于扩展地址的绑定:void zb_BindDevice ( u8 create, u16dId, u8 *pDestination)if( create )/这里为 TRUE 创建绑定条目if ( pDestination )/长地址不为空/地址模式为 64 位地址,即扩展地址destination.a
5、ddrMode = Addr64Bit;/将参数 pDestination 的值到 destination.addr.extAddr 中osal_cpyExtAddr( destination.addr.extAddr, pDestination );/调用函数 APSME_BindRequest 进行基于长地址的绑定ret = APSME_BindRequest( sapi_epDesc.endPo,dId,&destination, sapi_epDesc.endPo);if ( ret = ZSucs )/绑定成功后获取目的设备的短地址ZDP_NwkAddrReq(pDestinatio
6、n, ZDP_ADDR_REQTYPE_SINGLE, 0, 0 );/定时触发事件 ZDO_NWK_UPDATE_NVosal_start_timerEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV, 250 );函数说明:1) 、void *osal_cpyExtAddr( void *dest, void *src )说明:该函数的作用是扩展地址。将*src 指向的扩展地址到指针*dest 指向的内存参数说明:*dest目标地址指针*src源地址指针返回值:指针2) 、ZSus_tAPSME_BindRequest( byte SrcEndp, u16 Cluster
7、Id,zAddrType_t *DstAddr, byte DstEndp)说明:应用支持子层绑定函数,通过该函数可以在两个设备间的应用层创建绑定,以原语APSME_BIND.confirm 返回绑定结果。注意这里传递的地址是 64 位的扩展地址。参数说明:SrcEndp-源设备的端点ClusterId簇 ID*DstAddr目标设备的地址DstEndp-目标设备的端点由上述参数可以看出绑定时基于端点和簇的绑定返回值:ZSus_t 状态值3)、afSus_t ZDP_NwkAddrReq( byte *IEEEAddress, byte ReqType,byte StartIndex, byt
8、e SecurityEnable )说明:调用该函数可以由设备的扩展地址获取设备的网络地址,该消息以广播的形式发送给网络中的所有设备请求设备的短地址。如果一个设备的扩展地址和消息中所携带的扩展地址相同则会将自己的网络地址返回。参数说明:*IEEEAddress目标设备扩展地址指针ReqType相应类型StartIndex开始索引SecurityEnable安全选项返回值:afSus_t 状态值其他说明:ReqType 响应类型说明,它的值可以是以下二者之一ZDP_NWKADDR_REQTYPE_SINGLE返回设备的短地址和扩展地址ZDP_NWKADDR_REQTYPE_EXTENDED返回设
9、备及相关设备的短地址和扩展地址4) 、byte osal_start_timerEx( byte taskID, U16 event_id, U16 timeout_value )说明:通过该函数将定时触发对应任务 id 为 taskID 的事件 event_id。定时时长为timeout_value。在 timeout_value 溢出后将触发事件 event_id。参数说明:taskID任务 idevent_id事件timeout_value溢出时间返回值:ZSUCS 或者 NO_TIMER_AVAIL已知扩展地址绑定总结:在已知扩展地址绑定过程中,通过调用 APSME_BindReque
10、st()完成绑定,在绑定成功后又调用 ZDP_NwkAddrReq()函数获取了绑定目标设备的 16 为网络地址。当上述步骤全部完成后,定时触发了事件 ZDO_NWK_UPDATE_NV 对网络状态进行更新。2、未知扩展地址的绑定这种绑定模式需要使要绑定的目标设备首先处于允许绑定的状态。源设备通过函数zb_BindDevice ()(扩展地址参数为 NULL)进行绑定。这里用到了 ZDO 消息,首先顾一下 ZDO 消息的流程,以请求 IEEE 地址为例,具体流程图如下:回图 2:ZDO 消息流程图A) 、目标设备允许绑定。使要绑定的目标设备处于允许绑定的模式,可以调用函数 zb_AllowBi
11、nd进入允许绑定模式。()使目标设备程序代码:void zb_AllowBind ( u8 timeout )osal_stop_timerEx(sapi_TaskID, ZB_ALLOW_BIND_TIMER);if ( timeout = 0 )afSetMatch(sapi_epDesc.simpleDesc-EndPo, FALSE);elseafSetMatch(sapi_epDesc.simpleDesc-EndPo, TRUE);if ( timeout != 0 xFF )if ( timeout 64 )timeout = 64;osal_start_timerEx(sapi
12、_TaskID, ZB_ALLOW_BIND_TIMER,timeout*1000);return;说明:1)、参数timeout参数 timeout 是目标设备进入绑定模式持续的时间(s)。如果设置为 OxFF,则该设备在任何时是允许绑定模式;如果设置为 0 x00,则取消目标设备进入允许绑定模式。如果设定的时间大于 64s 就默认为 64s。2)、u8 afSetMatch( u8 ep, u8 action )说明:允许或者设备响应 ZDO 的描述符匹配请求。如果 action 参数为 TRUE 允许匹配,反之如果是 FALSE 则匹配。参数说明:ep端点 endpoaction允许或者
13、匹配返回值:TRUE 或者 FALSE3)、事件 ZB_ALLOW_BIND_TIMER如果设定了允许 ZDO 描述符匹配,而设定的时间不是 0 xF,即不是在任何时间都允许,那么就定时时长为 timeout 来触发事件 ZB_ALLOW_BIND_TIMER 关闭 ZDO 描述符匹配。ZB_ALLOW_BIND_TIMER 事件处理函数:U16 SAPI_ProsEvent( byte task_id, U16 events )if ( events & ZB_ALLOW_BIND_TIMER )/这里 action 的参数为 FALSE 即关闭匹配描述符响应afSetMatch(sapi_
14、epDesc.simpleDesc-EndPo, FALSE);return (events ZB_ALLOW_BIND_TIMER);B、源设备发起绑定请求当目标设备已经进入允许绑定模式,则源设备可以使用函数参数设置为 NULL)发送绑定请求。zb_BindDevice()(地址程序代码:void zb_BindDevice ( u8 create, u16dId, u8 *pDestination)if ( create )if ( pDestination )/已知扩展地址的绑定else/未知扩展地址的绑定destination.addrMode = Addr16Bit;/16 位短地址
15、模式/目的地址为广播地址,在全网进行匹配destination.addr.shortAddr = NWK_BROADCAST_SHORTADDR;/以下从两个方向进行 Cluster 匹配if ( ZDO_AnyClusterMatches( 1, &dId,sapi_epDesc.simpleDesc-AppNumOlusters,sapi_epDesc.simpleDesc-pAppOlusterList ) )/匹配一个在允许绑定模式下的设备ret = ZDP_MatchDescReq( &destination, NWK_BROADCAST_SHORTADDR,sapi_epDesc.
16、simpleDesc-AppProfId, 1, &dId, 0, (cId_t *)NULL, 0 );else if ( ZDO_AnyClusterMatches( 1, &dId,sapi_epDesc.simpleDesc-AppNumInClusters,sapi_epDesc.simpleDesc-pAppInClusterList ) )/匹配一个在允许绑定模式下的设备ret = ZDP_MatchDescReq( &destination, NWK_BROADCAST_SHORTADDR,sapi_epDesc.simpleDesc-AppProfId, 0, (cId_t
17、*)NULL, 1, &dId, 0 );if ( ret = ZB_SUCS )osal_start_timerEx(sapi_TaskID, ZB_BIND_TIMER, AIB_MaxBindingTime);return; / dond cback event函数说明:1)、byte ZDO_AnyClusterMatches( byte ACnt, u16 *AList, byte BCnt, u16 *BList )说明:在两个链表或者数组中寻找相同的簇(Cluster),即在*Alist 和*Blist 匹配相同的簇(Cluster),如果找到则返回 TRUE 否则返回 FALS
18、E。通过该函数在输入簇和输出簇中寻找对应的dId 是否存在。如果存在则会调用匹配描述符函数进行匹配。参数说明:ACntA 链表中条目的数量*AList链表 ABCntB 链表中条目的数量*BList链表 B返回值:TRUE 或者 FALSE2)、afSus_t ZDP_MatchDescReq( zAddrType_t *dstAddr, u16 nwkAddr,u16 ProfileID,byte NumInClusters, cId_t *InClusterList,byte NumOlusters, cId_t *OlusterList,byte SecurityEnable )说明:通
19、过该函数将向网络中发送一条 Match_Desc_req 的消息,进行 ZDO 描述符匹配。匹配描述符是基于 ProfileID 和 ClusterID 匹配。参数说明:dstAddr目的地址ProfileIDProfileIDNumInClusters输入簇数量InClusterList输入簇列表NumOlusters输出簇数量OlusterList输出簇列表SecurityEnable安全选项返回值:afSus_t 状态3)、事件ZB_BIND_TIMER说明:当发出描述符匹配请求后,定时触发事件 ZB_BIND_TIMER 告知上层绑定是否建立成功, 定时时长为 AIB_MaxBindi
20、ngTime , 该时长要保证绑定工作在触发事件 ZB_BIND_TIMER 前完成。C、当源设备发出匹配描述符请求 Match_Desc_req,全网进行匹配,并最终触发了匹配描述符应答 Match_Desc_rsp 通告匹配结果。具体代码如下:程序代码:case Match_Desc_rsp:zAddrType_t dstAddr;ZDO_ActiveEndpoRsp_t *pRsp = ZDO_ParseEPListRsp(sg);if ( sapi_bindInProgress != 0 xf )dstAddr.addrMode = Addr16Bit;dstAddr.addr.sho
21、rtAddr = pRsp-nwkAddr;if ( APSME_BindRequest( sapi_epDesc.simpleDesc-EndPo,sapi_bindInProgress, &dstAddr, pRsp-epList0 ) =ZSucs )osal_stop_timerEx(sapi_TaskID, ZB_BIND_TIMER);osal_start_timerEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV,250 );sapi_bindInProgress = 0 xf;ZDP_IEEEAddrReq( pRsp-nwkAddr, ZDP_ADDR_R
22、EQTYPE_SINGLE, 0, 0 );zb_BindConfirm( sapi_bindInProgress, ZB_SUCS );函数说明:1)、ZDO_ActiveEndpoRsp_t *ZDO_ParseEPListRsp(ingMsg_t *sg )说明:通过调用函数,对匹配结果进行处理。参数说明:*sg接收到的信息返回值:ZDO_ActiveEndpoRsp_t2)、ZSus_t APSME_BindRequest( byte SrcEndp, u16 ClusterId,zAddrType_t *DstAddr, byte DstEndp);说明:应用支持子层绑定函数,通过该
23、函数可以在两个设备间的应用层创建绑定,以原语APSME_BIND.confirm 返回绑定结果。注意这里传递的地址是 64 位的扩展地址。参数说明:SrcEndp-源设备的端点ClusterId簇 ID*DstAddr目标设备的地址DstEndp-目标设备的端点由上述参数可以看出绑定时基于端点和簇的绑定返回值:ZSus_t 状态值3)、 afSus_t ZDP_IEEEAddrReq( u16 shortAddr, byte ReqType,byte StartIndex, byte SecurityEnable )说明:调用该函数可以由设备的网络地址获取设备的扩展地址,该消息以单播的形式发送
24、给目的设备。目的设备接收到请求后将自己的扩展地址返回。参数说明:shortAddr目标设备短地址ReqType相应类型StartIndex开始索引SecurityEnable安全选项返回值:afSus_t 状态值绑定总结:以上两种绑定机制,最终都是用函数APSME_BindRequest()创建绑定。不同的是,前者采用的目的地址是64位扩展地址,而后者采用的目的地址是16位网络地址。前者已知扩展地址,调用了 ZDP_NwkAddrReq()函数获得目的设备短地址;后者利用描述匹配得到了短地址,然后调用了ZDP_IEEEAddrReq()函数,获取目的设备的扩展地址。四、删除绑定void zb_BindDevice ( u8 create, u16dId, u8 *pDestination )if ( create )/创建绑定条目else/删除绑定条目 creat 为 FALSE/ 删除本地绑定条目中对应于dId 的绑定条目BindingEntry_t *pBind;/ 在绑定表中查找对应于dId 的绑定条目while (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 给同事的感谢信汇编十篇
- 简单辞职申请书模板汇编九篇
- 2021过中秋节作文【5篇】
- 八年级物理教学计划模板八篇
- 生物类实习报告模板集锦7篇
- 酒店辞职报告书集锦15篇
- 边城读后感汇编15篇
- 法律法规及事故案例讲座
- 甘肃省定西市岷县2024-2025学年九年级上学期期末质量监测历史试卷(无答案)
- 交管12123驾驶证学法减分题库及答案
- T∕ZSQX 008-2020 建设工程全过程质量行为导则
- ISO-IEC17025-2017实验室管理体系全套程序文件
- 业务员手册内容
- pH值的测定方法
- 深圳智能水表项目商业计划书_参考模板
- 输出轴的机械加工工艺规程及夹具设计
- 元旦文艺汇演校长致辞
- 国家开放大学电大本科《管理案例分析》2023-2024期末试题及答案试卷编号:1304
- 离合器接合叉机械工艺说明书
- PWM脉宽直流调速系统设计及 matlab仿真验证
- 蜂窝煤成型机设计方案.doc
评论
0/150
提交评论