mirror of
https://github.com/espressif/openthread.git
synced 2026-09-04 16:20:05 +00:00
[diag] diagnostic module improvements (#3969)
Added diagnostic statistic clearing. Improved tx power setting. Provide RSSI of the last received packet.
This commit is contained in:
committed by
Jonathan Hui
parent
050cc07206
commit
db8c4c8339
@@ -134,8 +134,17 @@ Print statistics during diagnostics mode.
|
||||
received packets: 10
|
||||
sent packets: 10
|
||||
first received packet: rssi=-65, lqi=101
|
||||
last received packet: rssi=-64, lqi=98
|
||||
```
|
||||
|
||||
### diag stats clear
|
||||
|
||||
Clear statistics during diagnostics mode.
|
||||
|
||||
```bash
|
||||
> diag stats clear
|
||||
stats cleared
|
||||
```
|
||||
### diag stop
|
||||
|
||||
Stop diagnostics mode and print statistics.
|
||||
@@ -145,6 +154,7 @@ Stop diagnostics mode and print statistics.
|
||||
received packets: 10
|
||||
sent packets: 10
|
||||
first received packet: rssi=-65, lqi=101
|
||||
last received packet: rssi=-61, lqi=98
|
||||
|
||||
stop diagnostics mode
|
||||
status 0x00
|
||||
|
||||
+29
-10
@@ -126,6 +126,7 @@ void Diag::ProcessStart(int aArgCount, char *aArgVector[], char *aOutput, size_t
|
||||
otPlatRadioSetPromiscuous(sInstance, true);
|
||||
otPlatAlarmMilliStop(sInstance);
|
||||
SuccessOrExit(error = otPlatRadioReceive(sInstance, sChannel));
|
||||
SuccessOrExit(error = otPlatRadioSetTransmitPower(sInstance, sTxPower));
|
||||
otPlatDiagModeSet(true);
|
||||
memset(&sStats, 0, sizeof(struct DiagStats));
|
||||
snprintf(aOutput, aOutputMaxLen, "start diagnostics mode\r\nstatus 0x%02x\r\n", error);
|
||||
@@ -148,10 +149,13 @@ void Diag::ProcessStop(int aArgCount, char *aArgVector[], char *aOutput, size_t
|
||||
otPlatRadioSetPromiscuous(sInstance, false);
|
||||
|
||||
snprintf(aOutput, aOutputMaxLen,
|
||||
"received packets: %d\r\nsent packets: %d\r\nfirst received packet: rssi=%d, lqi=%d\r\n"
|
||||
"received packets: %d\r\nsent packets: %d\r\n"
|
||||
"first received packet: rssi=%d, lqi=%d\r\n"
|
||||
"last received packet: rssi=%d, lqi=%d\r\n"
|
||||
"\nstop diagnostics mode\r\nstatus 0x%02x\r\n",
|
||||
static_cast<int>(sStats.mReceivedPackets), static_cast<int>(sStats.mSentPackets),
|
||||
static_cast<int>(sStats.mFirstRssi), static_cast<int>(sStats.mFirstLqi), error);
|
||||
static_cast<int>(sStats.mFirstRssi), static_cast<int>(sStats.mFirstLqi),
|
||||
static_cast<int>(sStats.mLastRssi), static_cast<int>(sStats.mLastLqi), error);
|
||||
|
||||
exit:
|
||||
AppendErrorResult(error, aOutput, aOutputMaxLen);
|
||||
@@ -222,6 +226,7 @@ void Diag::ProcessPower(int aArgCount, char *aArgVector[], char *aOutput, size_t
|
||||
SuccessOrExit(error = ParseLong(aArgVector[0], value));
|
||||
|
||||
sTxPower = static_cast<int8_t>(value);
|
||||
SuccessOrExit(error = otPlatRadioSetTransmitPower(sInstance, sTxPower));
|
||||
otPlatDiagTxPowerSet(sTxPower);
|
||||
|
||||
snprintf(aOutput, aOutputMaxLen, "set tx power to %d dBm\r\nstatus 0x%02x\r\n", sTxPower, error);
|
||||
@@ -293,17 +298,26 @@ exit:
|
||||
|
||||
void Diag::ProcessStats(int aArgCount, char *aArgVector[], char *aOutput, size_t aOutputMaxLen)
|
||||
{
|
||||
OT_UNUSED_VARIABLE(aArgCount);
|
||||
OT_UNUSED_VARIABLE(aArgVector);
|
||||
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
VerifyOrExit(otPlatDiagModeGet(), error = OT_ERROR_INVALID_STATE);
|
||||
|
||||
snprintf(aOutput, aOutputMaxLen,
|
||||
"received packets: %d\r\nsent packets: %d\r\nfirst received packet: rssi=%d, lqi=%d\r\n",
|
||||
static_cast<int>(sStats.mReceivedPackets), static_cast<int>(sStats.mSentPackets),
|
||||
static_cast<int>(sStats.mFirstRssi), static_cast<int>(sStats.mFirstLqi));
|
||||
if ((aArgCount == 1) && (strcmp(aArgVector[0], "clear") == 0))
|
||||
{
|
||||
memset(&sStats, 0, sizeof(struct DiagStats));
|
||||
snprintf(aOutput, aOutputMaxLen, "stats cleared\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
VerifyOrExit(aArgCount == 0, error = OT_ERROR_INVALID_ARGS);
|
||||
snprintf(aOutput, aOutputMaxLen,
|
||||
"received packets: %d\r\nsent packets: %d\r\n"
|
||||
"first received packet: rssi=%d, lqi=%d\r\n"
|
||||
"last received packet: rssi=%d, lqi=%d\r\n",
|
||||
static_cast<int>(sStats.mReceivedPackets), static_cast<int>(sStats.mSentPackets),
|
||||
static_cast<int>(sStats.mFirstRssi), static_cast<int>(sStats.mFirstLqi),
|
||||
static_cast<int>(sStats.mLastRssi), static_cast<int>(sStats.mLastLqi));
|
||||
}
|
||||
|
||||
exit:
|
||||
AppendErrorResult(error, aOutput, aOutputMaxLen);
|
||||
@@ -324,7 +338,9 @@ void Diag::ProcessRadio(int aArgCount, char *aArgVector[], char *aOutput, size_t
|
||||
else if (strcmp(aArgVector[0], "receive") == 0)
|
||||
{
|
||||
SuccessOrExit(error = otPlatRadioReceive(sInstance, sChannel));
|
||||
SuccessOrExit(error = otPlatRadioSetTransmitPower(sInstance, sTxPower));
|
||||
otPlatDiagChannelSet(sChannel);
|
||||
otPlatDiagTxPowerSet(sTxPower);
|
||||
|
||||
snprintf(aOutput, aOutputMaxLen, "set radio from sleep to receive on channel %d\r\nstatus 0x%02x\r\n", sChannel,
|
||||
error);
|
||||
@@ -363,13 +379,16 @@ void Diag::DiagReceiveDone(otInstance *aInstance, otRadioFrame *aFrame, otError
|
||||
|
||||
if (aError == OT_ERROR_NONE)
|
||||
{
|
||||
// for sensitivity test, only record the rssi and lqi for the first packet
|
||||
// for sensitivity test, only record the rssi and lqi for the first and last packet
|
||||
if (sStats.mReceivedPackets == 0)
|
||||
{
|
||||
sStats.mFirstRssi = aFrame->mInfo.mRxInfo.mRssi;
|
||||
sStats.mFirstLqi = aFrame->mInfo.mRxInfo.mLqi;
|
||||
}
|
||||
|
||||
sStats.mLastRssi = aFrame->mInfo.mRxInfo.mRssi;
|
||||
sStats.mLastLqi = aFrame->mInfo.mRxInfo.mLqi;
|
||||
|
||||
sStats.mReceivedPackets++;
|
||||
}
|
||||
otPlatDiagRadioReceived(aInstance, aFrame, aError);
|
||||
|
||||
@@ -64,6 +64,8 @@ private:
|
||||
uint32_t mSentPackets;
|
||||
int8_t mFirstRssi;
|
||||
uint8_t mFirstLqi;
|
||||
int8_t mLastRssi;
|
||||
uint8_t mLastLqi;
|
||||
};
|
||||
|
||||
struct Command
|
||||
|
||||
@@ -63,7 +63,9 @@ class TestDiag(unittest.TestCase):
|
||||
('diag power\n',
|
||||
'tx power: -10 dBm\r\n'),
|
||||
('diag stats\n',
|
||||
'received packets: 0\r\nsent packets: 0\r\nfirst received packet: rssi=0, lqi=0\r\n',
|
||||
'received packets: 0\r\nsent packets: 0\r\n'
|
||||
'first received packet: rssi=0, lqi=0\r\n'
|
||||
'last received packet: rssi=0, lqi=0\r\n',
|
||||
),
|
||||
('diag send 20 100\n',
|
||||
r'sending 0x14 packet\(s\), length 0x64\r\nstatus 0x00\r\n',
|
||||
@@ -78,7 +80,9 @@ class TestDiag(unittest.TestCase):
|
||||
'repeated packet transmission is stopped\r\nstatus 0x00\r\n',
|
||||
),
|
||||
('diag stop\n',
|
||||
r'received packets: 0\r\nsent packets: ([1-9]\d*)\r\nfirst received packet: rssi=0, lqi=0\r\n\n'
|
||||
r'received packets: 0\r\nsent packets: ([1-9]\d*)\r\n'
|
||||
'first received packet: rssi=0, lqi=0\r\n'
|
||||
'last received packet: rssi=0, lqi=0\r\n\n'
|
||||
r'stop diagnostics mode\r\nstatus 0x00\r\n',
|
||||
),
|
||||
('diag',
|
||||
|
||||
Reference in New Issue
Block a user