关于CC2530的zigbee发送选择广播模式的ACK问题
各位好,最近发现CC2530在进行广播发送数据时,发送选项选择需要ACK,在多个设备接收时,用sniffer抓包,发现虽然有多个设备接收,但是只有一个ACK,我能理解有ACK,可是这个ACK是谁发送的呢,两个接收设备为什么只有一个ACK,难道是两个接收设备之间有辨别?这个不应该吧,求人来解惑一下。
你是用AF_DataRequest();这个函数发送数据么?
函数里对广播进行了限制了,不能够使能ACK,如下:
...
req.txOptions = 0;
if ( ( options & AF_ACK_REQUEST ) &&
( req.dstAddr.addrMode != AddrBroadcast ) &&
( req.dstAddr.addrMode != AddrGroup ) )
{
req.txOptions |= APS_TX_OPTIONS_ACK;
}
...
我是用的是TIMIC的进行测试的,用的是MSA_McpsDataReq()函数进行发送的
贴上函数的代码
void MSA_McpsDataReq(uint8* data, uint8 dataLength, bool directMsg, uint16 dstShortAddr)
{
macMcpsDataReq_t *pData;
static uint8 handle = 0;
if ((pData = MAC_McpsDataAlloc(dataLength, msa_securityLevel, msa_keyIdMode)) != NULL)
{
pData->mac.srcAddrMode = SADDR_MODE_SHORT;
pData->mac.dstAddr.addrMode = SADDR_MODE_SHORT;
pData->mac.dstAddr.addr.shortAddr = dstShortAddr;
pData->mac.dstPanId = msa_PanId;
pData->mac.msduHandle = handle++;
pData->mac.txOptions = MAC_TXOPTION_ACK;
// pData->mac.txOptions = MAC_TXOPTION_NO_RETRANS;
/* MAC security parametcers */
osal_memcpy( pData->sec.keySource, msa_keySource, MAC_KEY_SOURCE_MAX_LEN );
pData->sec.securityLevel = msa_securityLevel;
pData->sec.keyIdMode = msa_keyIdMode;
pData->sec.keyIndex = msa_keyIndex;
/* If it's the coordinator and the device is in-direct message */
if (msa_IsCoordinator)
{
if (!directMsg)
{
pData->mac.txOptions |= MAC_TXOPTION_INDIRECT;
}
}
/* Copy data */
osal_memcpy (pData->msdu.p, data, dataLength);
/* Send out data request */
MAC_McpsDataReq(pData);
}
}