TI中文支持网
TI专业的中文技术问题搜集分享网站

CC1310: EasyLink_transmit包的数据要求

Part Number:CC1310

EasyLink_transmit函数实现如下:

EasyLink_Status EasyLink_transmit(EasyLink_TxPacket *txPacket)
{
RF_CmdHandle cmdHdl;
uint8_t *pu8Data;

EasyLink_Status status = EasyLink_Status_Tx_Error;

if ( (!configured) || suspended)
{
return EasyLink_Status_Config_Error;
}
if (txPacket->len > EASYLINK_MAX_DATA_LENGTH)
{
return EasyLink_Status_Param_Error;
}
//Check and take the busyMutex
if (Semaphore_pend(busyMutex, 0) == false)
{
return EasyLink_Status_Busy_Error;
}

/* Transmit */
pTransmitDataEntry = (rfc_dataEntryGeneral_t*)txBuffer;
pTransmitDataEntry->length = txPacket->len + NUM_APPENDED_BYTES_TX;
pTransmitDataEntry->status = DATA_ENTRY_PENDING;
pTransmitDataEntry->pNextEntry = (uint8_t*)pTransmitDataEntry; // Circle buffer.

dataTxQueue.pCurrEntry = (uint8_t*)pTransmitDataEntry;
dataTxQueue.pLastEntry = NULL;
/* txPaket copy and send. */
pu8Data = &pTransmitDataEntry->data;
memcpy(pu8Data, &txPacket->payload, txPacket->len);

memcpy(&EasyLink_cmdTx, &RF_cmdTxHS, sizeof(RF_cmdTxHS));
EasyLink_cmdTx.pQueue = &dataTxQueue;
EasyLink_cmdTx.startTrigger.triggerType = TRIG_NOW;
EasyLink_cmdTx.startTrigger.pastTrig = 1;
EasyLink_cmdTx.startTime = 0;
// RF_cmdTxHS.startTime = time;

RF_EventMask result = RF_runCmd(rfHandle, (RF_Op*)&EasyLink_cmdTx, RF_PriorityHigh, 0, 0);

// cmdHdl = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdTxHS, RF_PriorityNormal, &tx_callback, 0);
/* Wait for Command to complete */
// RF_EventMask result = RF_pendCmd(rfHandle, cmdHdl, EASYLINK_RF_EVENT_MASK);

if (result & RF_EventLastCmdDone)
{
status = EasyLink_Status_Success;
}

//Release the busyMutex
Semaphore_post(busyMutex);

return status;
}

其中,EASYLINK_MAX_DATA_LENGTH为256。

txPacket[0] = 0xCC

txPacket[1] = 0x77,

txPacket[2] = 16的倍数,小于等于250

测试的时候发现,如果txPacket[3-5]同时为0,即txPacket[3] = 0x0, txPacket[4] = 0x0, txPacket[5]   = 0x0, EasyLink_transmit会执行失败。

请问,EasyLink_transmit对txPacket数据包有什么样的要求?

Katherine Wang:

已将您的问题升级到E2E英文论坛,一旦得到回复会立刻回复给您

,

Katherine Wang:

txPacket 的结构在 EasyLink.h 中定义,如下所示:

//! \brief Structure for the TX Packet
typedef struct
{
uint8_t dstAddr[8]; //!< Destination address
uint32_t absTime; //!< Absolute time to Tx packet (0 for immediate)
//!< Layer will use last SeqNum used + 1uint8_t len; //!< Payload Length
uint8_t payload[EASYLINK_MAX_DATA_LENGTH]; //!< Payload
} EasyLink_TxPacket;

您不应手动覆盖数据包中的任何字段,而只能通过定义更改长度,并通过 txPacket.payload 更改有效负载

如果您在使用 EasyLink_transmit 函数时遇到问题,请提供一个在我们的 LP 上运行的示例,以说明您遇到的故障。

,

ye lucy:

为了提高带宽使用率,我们修改了EasyLink_TxPacket的结构,如下:

typedef __RFC_STRUCT struct{ uint16_t len;uint8_t payload[EASYLINK_MAX_DATA_LENGTH];} __RFC_STRUCT_ATTR EasyLink_TxPacket;

参考代码中EasyLink_TxPacket结构中,对dstAddr的值有什么要求吗?

,

Katherine Wang:

已为您在E2E论坛询问工程师,您可以访问https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1205280/cc1310-easylink_transmit-s-requirements-for-data-packets关注最新进展

,

Katherine Wang:

如果您打乱了完整 API 所基于的数据包结构,那么我们将无法提供任何关于您需要在 EasyLink 中进行何种更改的指南。

建议您不要更改 EasyLink 实施中的内容。

如果做出了更改,您将需要自己弄清楚潜在的后果,以及还需要更改哪些内容才能不“破坏”任何东西。

如果 EasyLink 的数据包格式不适合您的应用程序需求,您应直接将应用程序基于 prop API(CMD_PROP_RX 和 CMD_PROP_TX,或高级命令),这比尝试更改 EasyLink API 要更容易。

赞(0)
未经允许不得转载:TI中文支持网 » CC1310: EasyLink_transmit包的数据要求
分享到: 更多 (0)