请问Zigbee协调器如何获知加入网络的device支持哪些profile?
请问Zigbee协调器如何获知加入网络的device支持哪些profile?
这个问题我也很纳闷。节点应该可以主动把支持的profile发给协调器吧?
我理解应该是获得哪些Endpoint吧,一个设备可以支持多个endpoint.每个endpoint对应一个simpledescripter.
typedef struct
{
uint8 EndPoint;
uint16 AppProfId;
uint16 AppDeviceId;
uint8 AppDevVer:4;
uint8 Reserved:4; // AF_V1_SUPPORT uses for AppFlags:4.
uint8 AppNumInClusters;
cId_t *pAppInClusterList;
uint8 AppNumOutClusters;
cId_t *pAppOutClusterList;
} SimpleDescriptionFormat_t;
可以考虑使用ZDP_SimpleDescReq(),并注册处理函数
谢谢你的答复,
进一步问,如果device不支持simple descripter怎么办?如一个device,用ZDP_SimpleDescReq()查询simple descripter,返回的status是0x83(ZDP_NOT_ACTIVE)。
协调器主动向节点发起ZDP_SimpleDescReq么?之前还要发一条ZDP_ActiveEPReq确定节点的Endpoint吧?而且ZDP_SimpleDescReq要一个节点一个节点的查询?
那你就使用 afRegister( )注册描述符。另外,你可以参考HA profile或其他例子,你可以发现大部分是使用ZDP_MatchDescReq()的方式来发现匹配的描述符。前提是你知道profileID(通常一个应用场景,这个是大家都知道的,可以是自己定义的profileID)
你可以这样做,但一般是使用Match_Desc_req,建议参考HA的例子
谢谢你。
我试一下,协调器发ZDP_ActiveEPReq命令,抓包发现节点响应有0x14和0x0C 共2个endpiont,然后用ZDP_SimpleDescReq命令查询0x14 EP响应为0x83(ZDP_NOT_ACTIVE),而查询0x0C,则能得到EP的profile ID,Cluster ID等,这是什么原因?为什么0x14 EP是 Not active的?
你用的哪个例子?使用afRegister注册了哪些端点描述符?0x14是sampleapp的,0x0c是samplesw的,当然这不是确定的。
用的sample switch。
搞清楚了,0x14端口是test endpiont,没有 Simple description。
谢谢!
使用Match_Desc_req,就是根据profileID查询Endpoint的方法吧?但是clusterID呢?至少要知道对方的clusterID才行啊?在match的时候,不知道对方支持的全部clusterID,只知道部分clusterID,可以match成功么?