Hello,
I have an issue with the ACK frame.
Indeed I do not received the ACK frame with the IEEE 802.15.4 Receive Ack Command. I tried to do a chained command "IEEE Tx" (s_RF_cmdIeeeTx) + "IEEE receive ACK command" (s_RF_cmdIeeeTxAck), the message is correctly sent but the ACK frame is never received.
After the execution of the "RF_runCmd", the field "status" of the "s_RF_cmdIeeeTx" command is equal to 0x0806 and the field "status" of the "s_RF_cmdIeeeTxAck" command is equal to 0x00. What does these status value mean ? There is no "define" for these values....
FYI I also tried a chained command "IEEE Tx" (s_RF_cmdIeeeTx) + "IEEE receive command" and I received ACK frames but It seems that some ACK are not received and I would prefer to use "IEEE receive ACK command".
What do you suggest ? Is there a mistake in my configuration ?
Thank you for your help
Code snippet :
/* CMD_IEEE_RX_ACK
IEEE 802.15.4 Receive Ack Command */
rfc_CMD_IEEE_RX_ACK_t s_RF_cmdIeeeTxAck =
{
.commandNo = CMD_IEEE_RX_ACK,
.status = IDLE,
.startTrigger =
{
.bEnaCmd = 0x0,
.triggerNo = 0x0,
.triggerType = TRIG_NOW,
.pastTrig = 0,
},
.endTrigger =
{
.triggerType = TRIG_REL_START,
.pastTrig = 0,
.bEnaCmd = 0x0,
.triggerNo = 0x0,
},
.condition = {
.rule = COND_NEVER,
.nSkip = 0,
},
.pNextOp = NULL,
.seqNo = P_s_buffer_to_send->options_dsn,
/* number of RAT ticks to wait before claiming we haven't received an
* ack
*/
.endTime = RF_convertUsToRatTicks(1500),
};
/* CMD_IEEE_TX
IEEE 802.15.4 Transmit Command */
rfc_CMD_IEEE_TX_t s_RF_cmdIeeeTx =
{
.commandNo = 0x2C01,
.status = 0x0000,
.pNextOp =(RF_Op*)&s_RF_cmdIeeeTxAck,
.startTime = 0x00000000,
.startTrigger.triggerType = TRIG_NOW,
.startTrigger.bEnaCmd = 0x0,
.startTrigger.triggerNo = 0x0,
.startTrigger.pastTrig = 0x0,
.condition.rule = COND_STOP_ON_FALSE,
.condition.nSkip = 0x0,
.txOpt.bIncludePhyHdr = 0x0,
.txOpt.bIncludeCrc = 0x0,
.txOpt.payloadLenMsb = 0x0,
.payloadLen = BUFFER_SIZE,
.pPayload = u8_bufferToSend_A,
.timeStamp = 0x00000000,
};
/* if transmit command failed do not wait ACK */
s_RF_cmdIeeeTx.condition.rule = COND_STOP_ON_FALSE;
s_RF_cmdIeeeTxAck.seqNo = P_s_buffer_to_send->options_dsn;
s_RF_cmdIeeeTxAck.endTime = RF_convertUsToRatTicks(1500);
s_RF_cmdIeeeTxAck.endTrigger.triggerType = TRIG_REL_START;
s_RF_cmdIeeeTxAck.startTime = TRIG_NOW;
s_RF_cmdIeeeTxAck.condition.nSkip = 0;
s_RF_cmdIeeeTx.pNextOp = (RF_Op*)&s_RF_cmdIeeeTxAck;
/* just after tx command, Rx command shall be send in order to receive ACK frame */
// s_RF_cmdIeeeRx.endTrigger.triggerType = TRIG_REL_START;
//s_RF_cmdIeeeRx.endTime = RF_convertUsToRatTicks(MAC_RX_TIME_TICKS*32); /* Timeout to receive ACK frame */
//s_RF_cmdIeeeTx.pNextOp = (RF_Op*)&s_RF_cmdIeeeRx;
/* Run Tx + Rx ACK chained command */
L_s_RFCmdResult = RF_runCmd(s_24GhzRfHandle, (RF_Op*)&s_RF_cmdIeeeTx, RF_PriorityHigh, &RxCallback2_4Ghz, RF_EventRxOk | RF_EventMdmSoft);
Environment
sdk 2.10.00.48
2.4Ghz IEEE 802.15.4