Skip to content

Commit 2910524

Browse files
[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. Signed-off-by: Maciej Baczmanski <maciej.baczmanski@nordicsemi.no>
1 parent 143ebbf commit 2910524

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

src/core/diags/factory_diags.cpp

+16-6
Original file line numberDiff line numberDiff line change
@@ -457,9 +457,9 @@ Error Diags::ProcessSend(uint8_t aArgsLength, char *aArgs[])
457457
VerifyOrExit(txLength >= OT_RADIO_FRAME_MIN_SIZE, error = kErrorInvalidArgs);
458458
mTxLen = txLength;
459459

460-
Output("sending %#x packet(s), length %#x\r\n", static_cast<int>(mTxPackets), static_cast<int>(mTxLen));
461-
TransmitPacket();
460+
SuccessOrExit(error = TransmitPacket());
462461

462+
Output("sending %#x packet(s), length %#x\r\n", static_cast<int>(mTxPackets), static_cast<int>(mTxLen));
463463
exit:
464464
return error;
465465
}
@@ -537,7 +537,7 @@ Error Diags::ProcessStop(uint8_t aArgsLength, char *aArgs[])
537537
return kErrorNone;
538538
}
539539

540-
void Diags::TransmitPacket(void)
540+
Error Diags::TransmitPacket(void)
541541
{
542542
mTxPacket->mChannel = mChannel;
543543

@@ -559,7 +559,7 @@ void Diags::TransmitPacket(void)
559559
}
560560

561561
mDiagSendOn = true;
562-
IgnoreError(Get<Radio>().Transmit(*static_cast<Mac::TxFrame *>(mTxPacket)));
562+
return Get<Radio>().Transmit(*static_cast<Mac::TxFrame *>(mTxPacket));
563563
}
564564

565565
Error Diags::ParseReceiveConfigFormat(const char *aFormat, ReceiveConfig &aConfig)
@@ -758,7 +758,11 @@ void Diags::AlarmFired(void)
758758
{
759759
uint32_t now = otPlatAlarmMilliGetNow();
760760

761-
TransmitPacket();
761+
Error error = TransmitPacket();
762+
if (error != kErrorNone)
763+
{
764+
Output("Packet transmission failed\r\ntatus %#x\r\n", error);
765+
}
762766
otPlatAlarmMilliStartAt(&GetInstance(), now, mTxPeriod);
763767
}
764768
else
@@ -841,6 +845,8 @@ void Diags::ReceiveDone(otRadioFrame *aFrame, Error aError)
841845

842846
void Diags::TransmitDone(Error aError)
843847
{
848+
Error error;
849+
844850
VerifyOrExit(mDiagSendOn);
845851
mDiagSendOn = false;
846852

@@ -859,7 +865,11 @@ void Diags::TransmitDone(Error aError)
859865
}
860866

861867
VerifyOrExit(!mRepeatActive);
862-
TransmitPacket();
868+
error = TransmitPacket();
869+
if (error != kErrorNone)
870+
{
871+
Output("Packet transmission failed\r\ntatus %#x\r\n", error);
872+
}
863873

864874
exit:
865875
return;

src/core/diags/factory_diags.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ class Diags : public InstanceLocator, private NonCopyable
231231
void OutputReceivedFrame(const otRadioFrame *aFrame);
232232
bool ShouldHandleReceivedFrame(const otRadioFrame &aFrame) const;
233233

234-
void TransmitPacket(void);
234+
Error TransmitPacket(void);
235235
void Output(const char *aFormat, ...);
236236
void AppendErrorResult(Error aError);
237237
void ResetTxPacket(void);

0 commit comments

Comments
 (0)