发布网友 发布时间:2022-04-25 20:39
共1个回答
热心网友 时间:2022-06-17 05:47
不知道你想知道的是解绑的原理还是协议栈程序中解绑的具体实现过程,那就都说明一下:
委托绑定的基本过程是:绑定的设备(开关)可以通过ZDP_EndDeviceBindReq()函数提供绑定记录所需要的应用服务入口参数(地址和端点)以及簇标识号(cluster ID),即可向协调器提出启动委托绑定的申请。如果此时另一个设备(灯)也启动该函数,那么就在协调器的绑定表中加入了目标设备的短地址。下次开关灯时,目标设备地址替换为灯节点的短地址了,这样开关灯的指令就发送到灯节点了。
解绑的实现方式和绑定是一样的,如果之前灯和开关是绑定的,开关设备调用ZDP_EndDeviceBindReq()函数,如果此时灯节点也调用ZDP_EndDeviceBindReq()函数,这时协调器就将绑定表中两者的绑定关系取消,这样就解除绑定了。
我上面说的这个ZDP_EndDeviceBindReq()函数是针对TI的Z-Stack协议栈的,绑定和解绑用到的都是这个函数。如果是其他厂家的协议栈的话原理上应该是一样的。
zAddrType_t dstAddr;
dstAddr.addrMode = Addr16Bit;
dstAddr.addr.shortAddr = 0x0000; // Coordinator
ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),
GENERICAPPSW_ENDPOINT,
GENERICAPP_PROFID,
0, NULL,
GENERICAPPSW_BINDINGLIST, (cId_t *)bindingOutClusters,
FALSE );