mirror of
https://github.com/espressif/openthread.git
synced 2026-09-02 07:10:08 +00:00
[diag] handle errors of TransmitPacket() (#11076)
`TransmitPacket()` should return an error from platform Radio implementation, as for example Radio can be in incorrect state. If error occurs, increase `mSentErrorInvalidStatePackets` stat. Add wrong state case to tests and fix `diag repeat stop` called too lata. Signed-off-by: Maciej Baczmanski <[email protected]>
This commit is contained in:
@@ -349,6 +349,7 @@ received packets: 10
|
||||
sent success packets: 10
|
||||
sent error cca packets: 0
|
||||
sent error abort packets: 0
|
||||
sent error invalid state packets: 0
|
||||
sent error others packets: 0
|
||||
first received packet: rssi=-65, lqi=101
|
||||
last received packet: rssi=-64, lqi=98
|
||||
|
||||
@@ -463,7 +463,7 @@ Error Diags::ProcessSend(uint8_t aArgsLength, char *aArgs[])
|
||||
VerifyOrExit(txLength >= OT_RADIO_FRAME_MIN_SIZE, error = kErrorInvalidArgs);
|
||||
mTxLen = txLength;
|
||||
|
||||
TransmitPacket();
|
||||
SuccessOrExit(error = TransmitPacket());
|
||||
|
||||
if (!mIsAsyncSend)
|
||||
{
|
||||
@@ -507,12 +507,14 @@ void Diags::OutputStats(void)
|
||||
"sent success packets: %lu\r\n"
|
||||
"sent error cca packets: %lu\r\n"
|
||||
"sent error abort packets: %lu\r\n"
|
||||
"sent error invalid state packets: %lu\r\n"
|
||||
"sent error others packets: %lu\r\n"
|
||||
"first received packet: rssi=%d, lqi=%u\r\n"
|
||||
"last received packet: rssi=%d, lqi=%u\r\n",
|
||||
ToUlong(mStats.mReceivedPackets), ToUlong(mStats.mSentSuccessPackets), ToUlong(mStats.mSentErrorCcaPackets),
|
||||
ToUlong(mStats.mSentErrorAbortPackets), ToUlong(mStats.mSentErrorOthersPackets), mStats.mFirstRssi,
|
||||
mStats.mFirstLqi, mStats.mLastRssi, mStats.mLastLqi);
|
||||
ToUlong(mStats.mSentErrorAbortPackets), ToUlong(mStats.mSentErrorInvalidStatePackets),
|
||||
ToUlong(mStats.mSentErrorOthersPackets), mStats.mFirstRssi, mStats.mFirstLqi, mStats.mLastRssi,
|
||||
mStats.mLastLqi);
|
||||
}
|
||||
|
||||
Error Diags::ProcessStats(uint8_t aArgsLength, char *aArgs[])
|
||||
@@ -546,8 +548,9 @@ Error Diags::ProcessStop(uint8_t aArgsLength, char *aArgs[])
|
||||
return kErrorNone;
|
||||
}
|
||||
|
||||
void Diags::TransmitPacket(void)
|
||||
Error Diags::TransmitPacket(void)
|
||||
{
|
||||
Error error = kErrorNone;
|
||||
mTxPacket->mChannel = mChannel;
|
||||
|
||||
if (mIsTxPacketSet)
|
||||
@@ -568,7 +571,14 @@ void Diags::TransmitPacket(void)
|
||||
}
|
||||
|
||||
mDiagSendOn = true;
|
||||
IgnoreError(Get<Radio>().Transmit(*static_cast<Mac::TxFrame *>(mTxPacket)));
|
||||
error = Get<Radio>().Transmit(*static_cast<Mac::TxFrame *>(mTxPacket));
|
||||
|
||||
if (error == kErrorInvalidState)
|
||||
{
|
||||
mStats.mSentErrorInvalidStatePackets++;
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
Error Diags::ParseReceiveConfigFormat(const char *aFormat, ReceiveConfig &aConfig)
|
||||
@@ -765,7 +775,7 @@ void Diags::AlarmFired(void)
|
||||
{
|
||||
uint32_t now = otPlatAlarmMilliGetNow();
|
||||
|
||||
TransmitPacket();
|
||||
IgnoreError(TransmitPacket());
|
||||
otPlatAlarmMilliStartAt(&GetInstance(), now, mTxPeriod);
|
||||
}
|
||||
else
|
||||
@@ -875,7 +885,7 @@ void Diags::TransmitDone(Error aError)
|
||||
if (mTxPackets > 1)
|
||||
{
|
||||
mTxPackets--;
|
||||
TransmitPacket();
|
||||
IgnoreError(TransmitPacket());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -138,6 +138,7 @@ private:
|
||||
uint32_t mSentFailedPackets;
|
||||
uint32_t mSentErrorCcaPackets;
|
||||
uint32_t mSentErrorAbortPackets;
|
||||
uint32_t mSentErrorInvalidStatePackets;
|
||||
uint32_t mSentErrorOthersPackets;
|
||||
int8_t mFirstRssi;
|
||||
uint8_t mFirstLqi;
|
||||
@@ -232,10 +233,10 @@ private:
|
||||
Error GetPowerSettings(uint8_t aChannel, PowerSettings &aPowerSettings);
|
||||
Error ParseReceiveConfigFormat(const char *aFormat, ReceiveConfig &aConfig);
|
||||
Error RadioReceive(void);
|
||||
Error TransmitPacket(void);
|
||||
void OutputReceivedFrame(const otRadioFrame *aFrame);
|
||||
bool ShouldHandleReceivedFrame(const otRadioFrame &aFrame) const;
|
||||
|
||||
void TransmitPacket(void);
|
||||
void Output(const char *aFormat, ...);
|
||||
void ResetTxPacket(void);
|
||||
void OutputStats(void);
|
||||
|
||||
@@ -62,6 +62,7 @@ expect "received packets: 0"
|
||||
expect "sent success packets: 10"
|
||||
expect "sent error cca packets: 0"
|
||||
expect "sent error abort packets: 0"
|
||||
expect "sent error invalid state packets: 0"
|
||||
expect "sent error others packets: 0"
|
||||
expect "first received packet: rssi=0, lqi=0"
|
||||
expect "last received packet: rssi=0, lqi=0"
|
||||
@@ -89,6 +90,7 @@ expect "received packets: 20"
|
||||
expect "sent success packets: 0"
|
||||
expect "sent error cca packets: 0"
|
||||
expect "sent error abort packets: 0"
|
||||
expect "sent error invalid state packets: 0"
|
||||
expect "sent error others packets: 0"
|
||||
expect "first received packet: rssi=-20, lqi=0"
|
||||
expect "last received packet: rssi=-20, lqi=0"
|
||||
@@ -112,6 +114,7 @@ expect -r {received packets: \d+}
|
||||
expect "sent success packets: 0"
|
||||
expect "sent error cca packets: 0"
|
||||
expect "sent error abort packets: 0"
|
||||
expect "sent error invalid state packets: 0"
|
||||
expect "sent error others packets: 0"
|
||||
expect "first received packet: rssi=-20, lqi=0"
|
||||
expect "last received packet: rssi=-20, lqi=0"
|
||||
@@ -140,6 +143,21 @@ send_user "input odd length test\n"
|
||||
send "diag frame 123\n"
|
||||
expect "Error"
|
||||
|
||||
send "diag radio sleep\n"
|
||||
expect_line "Done"
|
||||
|
||||
send "diag radio disable\n"
|
||||
expect_line "Done"
|
||||
|
||||
send "diag send 10 10\n"
|
||||
expect "Error 13: InvalidState"
|
||||
|
||||
send "diag radio enable\n"
|
||||
expect_line "Done"
|
||||
|
||||
send "diag radio receive\n"
|
||||
expect_line "Done"
|
||||
|
||||
send_user "shortest frame test\n"
|
||||
send "diag frame 112233\n"
|
||||
expect "Done"
|
||||
@@ -151,6 +169,9 @@ send "diag frame 112233445566778899001122334455667788990011223344556677889900112
|
||||
expect "Done"
|
||||
send "diag repeat 1\n"
|
||||
expect "Done"
|
||||
sleep 3
|
||||
send "diag repeat stop\n"
|
||||
expect "Done"
|
||||
|
||||
send "diag repeat stop\n"
|
||||
expect "Done"
|
||||
@@ -173,9 +194,6 @@ expect "Done"
|
||||
send "diag send 1\n"
|
||||
expect "Done"
|
||||
|
||||
send "diag repeat stop\n"
|
||||
expect "Done"
|
||||
|
||||
send "diag channel 11\n"
|
||||
expect_line "Done"
|
||||
|
||||
|
||||
@@ -58,6 +58,7 @@ class TestDiag(thread_cert.TestCase):
|
||||
'sent success packets: 0\r\n'
|
||||
'sent error cca packets: 0\r\n'
|
||||
'sent error abort packets: 0\r\n'
|
||||
'sent error invalid state packets: 0\r\n'
|
||||
'sent error others packets: 0\r\n'
|
||||
'first received packet: rssi=0, lqi=0\r\n'
|
||||
'last received packet: rssi=0, lqi=0\r\n',
|
||||
|
||||
@@ -2693,13 +2693,14 @@ class OTCI(object):
|
||||
result['sent_success_packets'] = int(output[1].split(":")[1])
|
||||
result['sent_error_cca_packets'] = int(output[2].split(":")[1])
|
||||
result['sent_error_abort_packets'] = int(output[3].split(":")[1])
|
||||
result['sent_error_others_packets'] = int(output[4].split(":")[1])
|
||||
result['sent_error_invalid_state_packets'] = int(output[4].split(":")[1])
|
||||
result['sent_error_others_packets'] = int(output[5].split(":")[1])
|
||||
|
||||
values = re.findall("\-?\d+", output[5])
|
||||
values = re.findall("\-?\d+", output[6])
|
||||
result['first_received_packet_rssi'] = int(values[0])
|
||||
result['first_received_packet_lqi'] = int(values[1])
|
||||
|
||||
values = re.findall("\-?\d+", output[6])
|
||||
values = re.findall("\-?\d+", output[7])
|
||||
result['last_received_packet_rssi'] = int(values[0])
|
||||
result['last_received_packet_lqi'] = int(values[1])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user