微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 节点发送 ZCL 广播命令 无效

节点发送 ZCL 广播命令 无效

时间:10-02 整理:3721RD 点击:

请问

想实现一个节点设备(路由或终端)对网络所有设备发送 ZCL 命令广播,比如 zclGeneral_SendOnOff_CmdOn, 调用此命令时配置地址如下

afAddrType_t zclSampleSw_BDstAddr;
zclSampleSw_BDstAddr.addrMode = (afAddrMode_t)Addr16Bit;
zclSampleSw_BDstAddr.endPoint = SAMPLESW_ENDPOINT;
zclSampleSw_BDstAddr.addr.shortAddr = 0xFFFC;  (或者 0XFFFF)

但是命令总是发送不出去

发现  zcl_SendCommand -> AF_DataRequest()

if ( (req.dstAddr.addrMode == Addr16Bit) &&
(req.dstAddr.addr.shortAddr == NLME_GetShortAddr()) )
{
afDataConfirm( srcEP->endPoint, *transID, stat );
}

条件不满足, 后来修改 zclSampleSw_BDstAddr.addrMode = Addr16Bit 还是不行,应该是NLME_GetShortAddr() 错误,

希望不要修改底层函数,有什么其他方式可以 发送 ZCL 广播命令吗?

谢谢!

最开始配置是

zclSampleSw_BDstAddr.addrMode = (afAddrMode_t)AddrBroadcast;

后来修改为

zclSampleSw_BDstAddr.addrMode = (afAddrMode_t)Addr16Bit;

又做了分组测试,

协调器可以对网络内各个组 发命令控制,

但是节点向自己组内其他节点发 组控制命令,还是没有反应。

if ( (req.dstAddr.addrMode == Addr16Bit) &&
(req.dstAddr.addr.shortAddr == NLME_GetShortAddr()) )
{
afDataConfirm( srcEP->endPoint, *transID, stat );
}

上面这个条件不应该进去的,因为这个进去的话,只是适用于同一个设备两个endpoint之间的通信,相当于自己发送数据给自己。

你是看抓包数据没有发到空中吗? ZCL命令的参数都对吗?cluster注册都对吧?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top