请问
想实现一个节点设备(路由或终端)对网络所有设备发送 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 广播命令吗?
谢谢!
MT:
最开始配置是
zclSampleSw_BDstAddr.addrMode = (afAddrMode_t)AddrBroadcast;
后来修改为
zclSampleSw_BDstAddr.addrMode = (afAddrMode_t)Addr16Bit;
MT:
回复 MT:
又做了分组测试,
协调器可以对网络内各个组 发命令控制,
但是节点向自己组内其他节点发 组控制命令,还是没有反应。
VV:
if ( (req.dstAddr.addrMode == Addr16Bit) &&(req.dstAddr.addr.shortAddr == NLME_GetShortAddr()) ){afDataConfirm( srcEP->endPoint, *transID, stat );}
上面这个条件不应该进去的,因为这个进去的话,只是适用于同一个设备两个endpoint之间的通信,相当于自己发送数据给自己。
你是看抓包数据没有发到空中吗? ZCL命令的参数都对吗?cluster注册都对吧?