我只有两个设备,想让协调器和终端设备进行绑定,绑定表存储在协调器中。
1、用ZDP_BindUnbindReq是否可以实现?
2、如果可以实现,能否讲解一下使用流程,我写了一个代码,发现无法绑定。
我代码的流程如下,请问有什么问题么?
1、定义、注册了绑定端口的描述符
2、定义ZDO_BIND_UNBIND_REQUEST、ZDO_BIND_UNBIND_RESPONSE
3、注册请求和响应
ZDO_RegisterForZDOMsg(ZDAppTaskID, Bind_rsp );//注册绑定响应
ZDO_RegisterForZDOMsg(ZDAppTaskID, Bind_req );//注册绑定请求
4、调用函数发起绑定
ZDP_BindUnbindReq(Bind_req,
MyApp_BindMSGAddr, //我赋值为协调器的地址0x0000
NLME_GetExtAddr(), //协调器的64位地址
MYAPP_BIND_ENDPOINT, //协调器的绑定端口
(cId_t)MYAPP_BIND_OUTCLUSTERS, //输出簇
(zAddrType_t*)MyApp_BindDstAddr, //终端64位地址
MYAPP_BIND_ENDPOINT, //终端的绑定端口
FALSE );
YiKai Chen:
應該是透過ZDP_BindReq做綁定,可以參考Z-Stack API.pdf
Alvin Chen:
你可以用ZDP_BindReq
在 mesh1.0中提供了两种常见的绑定方式match 和bind req:
if ( keys & HAL_KEY_SW_2 ){HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );
// Initiate an End Device Bind Request for the mandatory endpointdstAddr.addrMode = Addr16Bit;dstAddr.addr.shortAddr = 0x0000; // CoordinatorZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),GenericApp_epDesc.endPoint,GENERICAPP_PROFID,GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,FALSE );}
if ( keys & HAL_KEY_SW_3 ){}
if ( keys & HAL_KEY_SW_4 ){HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );// Initiate a Match Description Request (Service Discovery)dstAddr.addrMode = AddrBroadcast;dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR;ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR,GENERICAPP_PROFID,GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,FALSE );
user4711142:
回复 YiKai Chen:
ZDP_BindReq就是ZDP_BindUnbindReq,
#define ZDP_BindReq( dstAddr, SourceAddr, SrcEP, \ClusterID, DestinationAddr, DstEP, SecurityEnable ) \ZDP_BindUnbindReq( Bind_req, dstAddr, \SourceAddr, SrcEP, ClusterID, \DestinationAddr, DstEP, SecurityEnable )
在Z-Stack API.pdf中没有找到具体的讲解。
比如我协调器发起绑定,要和终端1进行绑定,调用ZDP_BindReq,每个参数应该怎么赋值呢?
下面赋值对么?
ZDP_BindReq( 协调器16位地址, 协调器64位地址, 协调器绑定端口, 输出ID, 终端164位地址, 终端1绑定端口, 不是能) 。
user4711142:
回复 Alvin Chen:
1、ZDP_EndDeviceBindReq是否至少需要三个设备。
2、ZDP_MatchDescReq需要几个设备?
user4711142:
回复 Alvin Chen:
用ZDP_BindReq怎么实现?能否讲解一下?
YiKai Chen:
回复 user4711142:
你的赋值是对的
YiKai Chen:
回复 user4711142:
1、ZDP_EndDeviceBindReq是否至少需要三个设备。只要有兩个就行,其中一個要是協調器
2、ZDP_MatchDescReq需要几个设备?兩个
user4711142:
回复 YiKai Chen:
1、手册上说,ZDP_EndDeviceBindReq,终端A和终端B要实现绑定,需要经过协调器,也就是需要三个设备。
我如果让协调器和终端进行绑定,协调器直接调用ZDP_EndDeviceBindReq,只需要两个设备。是这样么?
Alvin Chen:
回复 user4711142:
ZDP_EndDeviceBindReq最少2个即绑定双方必须包含ZC
ZDP_MatchDescReq 绑定双方即可。
user4711142:
回复 YiKai Chen:
我确实是这么赋值的,可是发现无法使用绑定通信。