一、绑定(Binding)
绑定是一种控制两个或者多个设备应用层之间信息流传递的机制。在ZigBee2006发布版本中,它被称为源绑定,所有的设备都可以执行绑定机制。
绑定允许应用程序发送一个数据包而不需要知道目标设备的短地址(此时将目标设备的短地址设置为无效地址0xFFFE)。应用支持子层(APS)从它的绑定表中确定目标设备的短地址,然后将数据发送给目标应用或者目标组。如果在绑定表中找到的短地址不止一个,协议栈会向所有找到的短地址发送数据。
说明:绑定是基于设备应用层端点的绑定,而且绑定只能在互为"补充的"设备间被创建。也就是说,当两个设备已经在他们的简单描述符结构中登记为一样的命令ID,并且一个作为输入另一个作为输出时,绑定才能成功。
图1:绑定图示
上图为两个设备建立的绑定关系,从上图我们理解绑定是基于端点(endpoint)的绑定。在设备1中端点号(endpoint)为3的开关1与设备2中端点号(endpoint)为5、7、8的灯建立了绑定。设备1中端点号(endpoint)为2的开关与设备2中端点号(endpoint)为17的灯建立了绑定。
二、建立绑定表(Building a Binding Table)
有三种方法可以建立一个绑定表:
Zigbee Device Object Bind Request(ZDO绑定请求)——通过一个命令告诉设备创建一个绑定表记录
Zigbee Device Object End Device Bind Request(ZDO终端绑定请求)——两个设备可以告诉协调器它们想要建立一个绑定表记录。协调器来协调并在两个设备中创建绑定表记录。
Device Application(设备应用)—一个设备上的应用程序建立或者管理一个绑定表
三、绑定表的建立
TI的Zstack2006协议栈中提供两种可用的机制来配置设备绑定:
(1)如果目的设备的扩展地址是已知的
(2)如果目的设备的扩展地址是未知的
已知扩展地址的绑定
如果已经知道要绑定目标设备的扩展地址,那么在源设备端只需通过函数zb_BindDevice ()函数便可以进行绑定,zb_BindDevice ()中地址要设置为目标设备的扩展地址。
绑定函数说明:
zb_BindDevice ( uint8 create, //创建还是删除绑定,TRUE创建,FALSE删除
mandId, //命令ID,绑定是基于命令ID的绑定
uint8 *pDestination ) //扩展地址,可以为NULL,决定绑定类型
程序代码:
1、基于扩展地址的绑定:
void zb_BindDevice ( uint8 create, mandId, uint8 *pDestination )
{
if ( create )//这里为TRUE 创建绑定条目
{
if ( pDestination )//长地址不为空
{
//地址模式为64位地址,即扩展地址
= Addr64Bit;
//将参数pDestination 的值复制到
osal_cpyExtAddr( , pDestination );
//调用函数 APSME_BindRequest进行基于长地址的绑定
ret = APSME_BindRequest( , commandId,
&destination, );
if ( ret == ess )
{
//绑定成功后获取目的设备的短地址
ZDP_NwkAddrReq(pDestination, ZDP_ADDR_REQTYPE_SINGLE, 0, 0 );
//定时触发事件 ZDO_NWK_UPDATE_NV
osal_start_timerEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV, 250 );
}
……
}
函数说明:
、void *osal_cpyExtAddr( void *dest, void *src )
说明:该函数的作用是复制扩展地址。将*src指向的扩展地址复制到指针*dest指向的内存
参数说明:*dest----------------------------目标地址指针
*src-----------------------------源地址指针
返回值:指针
、ZStatus_t APSME_BindRequest( byte SrcEndpInt, uint16
ZigBee绑定指南 来自淘豆网m.daumloan.com转载请标明出处.