Skip to content

Commit 74894c3

Browse files
committedJan 7, 2025
[diag] Handle errors of TransmitPacket()
`TransmitPacket()` should return an error from platform Radio implementation, as for example Radio can be in incorrect state. If error occurs, output it onto console. Add wrong state case to tests and fix `diag repeat stop` called too lata. Signed-off-by: Maciej Baczmanski <maciej.baczmanski@nordicsemi.no>
1 parent 3470934 commit 74894c3

File tree

6 files changed

+45
-13
lines changed

6 files changed

+45
-13
lines changed
 

‎src/core/diags/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ received packets: 10
346346
sent success packets: 10
347347
sent error cca packets: 0
348348
sent error abort packets: 0
349+
sent error invalid state packets: 0
349350
sent error others packets: 0
350351
first received packet: rssi=-65, lqi=101
351352
last received packet: rssi=-64, lqi=98

‎src/core/diags/factory_diags.cpp

+16-6
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ Error Diags::ProcessSend(uint8_t aArgsLength, char *aArgs[])
450450
VerifyOrExit(txLength >= OT_RADIO_FRAME_MIN_SIZE, error = kErrorInvalidArgs);
451451
mTxLen = txLength;
452452

453-
TransmitPacket();
453+
SuccessOrExit(error = TransmitPacket());
454454

455455
exit:
456456
return error;
@@ -489,11 +489,13 @@ void Diags::OutputStats(void)
489489
"sent success packets: %lu\r\n"
490490
"sent error cca packets: %lu\r\n"
491491
"sent error abort packets: %lu\r\n"
492+
"sent error invalid state packets: %lu\r\n"
492493
"sent error others packets: %lu\r\n"
493494
"first received packet: rssi=%d, lqi=%u\r\n"
494495
"last received packet: rssi=%d, lqi=%u\r\n",
495496
ToUlong(mStats.mReceivedPackets), ToUlong(mStats.mSentSuccessPackets), ToUlong(mStats.mSentErrorCcaPackets),
496-
ToUlong(mStats.mSentErrorAbortPackets), ToUlong(mStats.mSentErrorOthersPackets), mStats.mFirstRssi,
497+
ToUlong(mStats.mSentErrorAbortPackets), ToUlong(mStats.mSentErrorInvalidStatePackets),
498+
ToUlong(mStats.mSentErrorOthersPackets), mStats.mFirstRssi,
497499
mStats.mFirstLqi, mStats.mLastRssi, mStats.mLastLqi);
498500
}
499501

@@ -528,8 +530,9 @@ Error Diags::ProcessStop(uint8_t aArgsLength, char *aArgs[])
528530
return kErrorNone;
529531
}
530532

531-
void Diags::TransmitPacket(void)
533+
Error Diags::TransmitPacket(void)
532534
{
535+
Error error = kErrorNone;
533536
mTxPacket->mChannel = mChannel;
534537

535538
if (mIsTxPacketSet)
@@ -550,7 +553,14 @@ void Diags::TransmitPacket(void)
550553
}
551554

552555
mDiagSendOn = true;
553-
IgnoreError(Get<Radio>().Transmit(*static_cast<Mac::TxFrame *>(mTxPacket)));
556+
error = Get<Radio>().Transmit(*static_cast<Mac::TxFrame *>(mTxPacket));
557+
558+
if(error == kErrorInvalidState)
559+
{
560+
mStats.mSentErrorInvalidStatePackets++;
561+
}
562+
563+
return error;
554564
}
555565

556566
Error Diags::ParseReceiveConfigFormat(const char *aFormat, ReceiveConfig &aConfig)
@@ -747,7 +757,7 @@ void Diags::AlarmFired(void)
747757
{
748758
uint32_t now = otPlatAlarmMilliGetNow();
749759

750-
TransmitPacket();
760+
IgnoreError(TransmitPacket());
751761
otPlatAlarmMilliStartAt(&GetInstance(), now, mTxPeriod);
752762
}
753763
else
@@ -856,7 +866,7 @@ void Diags::TransmitDone(Error aError)
856866
VerifyOrExit(mTxPackets > 1);
857867
mTxPackets--;
858868

859-
TransmitPacket();
869+
IgnoreError(TransmitPacket());
860870

861871
exit:
862872
return;

‎src/core/diags/factory_diags.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ class Diags : public InstanceLocator, private NonCopyable
138138
uint32_t mSentFailedPackets;
139139
uint32_t mSentErrorCcaPackets;
140140
uint32_t mSentErrorAbortPackets;
141+
uint32_t mSentErrorInvalidStatePackets;
141142
uint32_t mSentErrorOthersPackets;
142143
int8_t mFirstRssi;
143144
uint8_t mFirstLqi;
@@ -232,10 +233,10 @@ class Diags : public InstanceLocator, private NonCopyable
232233
Error GetPowerSettings(uint8_t aChannel, PowerSettings &aPowerSettings);
233234
Error ParseReceiveConfigFormat(const char *aFormat, ReceiveConfig &aConfig);
234235
Error RadioReceive(void);
236+
Error TransmitPacket(void);
235237
void OutputReceivedFrame(const otRadioFrame *aFrame);
236238
bool ShouldHandleReceivedFrame(const otRadioFrame &aFrame) const;
237239

238-
void TransmitPacket(void);
239240
void Output(const char *aFormat, ...);
240241
void ResetTxPacket(void);
241242
void OutputStats(void);

‎tests/scripts/expect/cli-diags.exp

+21-3
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ expect "received packets: 0"
6464
expect "sent success packets: 10"
6565
expect "sent error cca packets: 0"
6666
expect "sent error abort packets: 0"
67+
expect "sent error invalid state packets: 0"
6768
expect "sent error others packets: 0"
6869
expect "first received packet: rssi=0, lqi=0"
6970
expect "last received packet: rssi=0, lqi=0"
@@ -76,6 +77,7 @@ expect "received packets: 10"
7677
expect "sent success packets: 0"
7778
expect "sent error cca packets: 0"
7879
expect "sent error abort packets: 0"
80+
expect "sent error invalid state packets: 0"
7981
expect "sent error others packets: 0"
8082
expect "first received packet: rssi=-20, lqi=0"
8183
expect "last received packet: rssi=-20, lqi=0"
@@ -99,6 +101,7 @@ expect -r {received packets: \d+}
99101
expect "sent success packets: 0"
100102
expect "sent error cca packets: 0"
101103
expect "sent error abort packets: 0"
104+
expect "sent error invalid state packets: 0"
102105
expect "sent error others packets: 0"
103106
expect "first received packet: rssi=-20, lqi=0"
104107
expect "last received packet: rssi=-20, lqi=0"
@@ -127,6 +130,21 @@ send_user "input odd length test\n"
127130
send "diag frame 123\n"
128131
expect "Error"
129132

133+
send "diag radio sleep\n"
134+
expect_line "Done"
135+
136+
send "diag radio disable\n"
137+
expect_line "Done"
138+
139+
send "diag send 10 10\n"
140+
expect "Error 13: InvalidState"
141+
142+
send "diag radio enable\n"
143+
expect_line "Done"
144+
145+
send "diag radio receive\n"
146+
expect_line "Done"
147+
130148
send_user "shortest frame test\n"
131149
send "diag frame 112233\n"
132150
expect "Done"
@@ -138,6 +156,9 @@ send "diag frame 112233445566778899001122334455667788990011223344556677889900112
138156
expect "Done"
139157
send "diag repeat 1\n"
140158
expect "Done"
159+
sleep 3
160+
send "diag repeat stop\n"
161+
expect "Done"
141162

142163
send_user "send frame with security processed\n"
143164
send "diag frame -s 112233\n"
@@ -157,9 +178,6 @@ expect "Done"
157178
send "diag send 1\n"
158179
expect "Done"
159180

160-
send "diag repeat stop\n"
161-
expect "Done"
162-
163181
send "diag channel 11\n"
164182
expect_line "Done"
165183

‎tests/scripts/thread-cert/test_diag.py

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def test(self):
5858
'sent success packets: 0\r\n'
5959
'sent error cca packets: 0\r\n'
6060
'sent error abort packets: 0\r\n'
61+
'sent error invalid state packets: 0\r\n'
6162
'sent error others packets: 0\r\n'
6263
'first received packet: rssi=0, lqi=0\r\n'
6364
'last received packet: rssi=0, lqi=0\r\n',

‎tools/otci/otci/otci.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -2692,13 +2692,14 @@ def diag_get_stats(self) -> Dict[str, int]:
26922692
result['sent_success_packets'] = int(output[1].split(":")[1])
26932693
result['sent_error_cca_packets'] = int(output[2].split(":")[1])
26942694
result['sent_error_abort_packets'] = int(output[3].split(":")[1])
2695-
result['sent_error_others_packets'] = int(output[4].split(":")[1])
2695+
result['sent_error_invalid_state_packets'] = int(output[4].split(":")[1])
2696+
result['sent_error_others_packets'] = int(output[5].split(":")[1])
26962697

2697-
values = re.findall("\-?\d+", output[5])
2698+
values = re.findall("\-?\d+", output[6])
26982699
result['first_received_packet_rssi'] = int(values[0])
26992700
result['first_received_packet_lqi'] = int(values[1])
27002701

2701-
values = re.findall("\-?\d+", output[6])
2702+
values = re.findall("\-?\d+", output[7])
27022703
result['last_received_packet_rssi'] = int(values[0])
27032704
result['last_received_packet_lqi'] = int(values[1])
27042705

0 commit comments

Comments
 (0)