大家好、
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