mirror of
https://github.com/espressif/openthread.git
synced 2026-07-28 22:57:47 +00:00
[cli] support energy scan command (#3036)
This commit is contained in:
+30
-1
@@ -64,7 +64,7 @@ OpenThread test scripts use the CLI to execute test cases.
|
||||
* [routerrole](#routerrole)
|
||||
* [routerselectionjitter](#routerselectionjitter)
|
||||
* [routerupgradethreshold](#routerupgradethreshold)
|
||||
* [scan](#scan-channel)
|
||||
* [scan](#scan)
|
||||
* [singleton](#singleton)
|
||||
* [state](#state)
|
||||
* [thread](#thread-start)
|
||||
@@ -1592,6 +1592,35 @@ Perform an IEEE 802.15.4 Active Scan.
|
||||
Done
|
||||
```
|
||||
|
||||
### scan energy \[duration\]
|
||||
|
||||
Perform an IEEE 802.15.4 Energy Scan.
|
||||
|
||||
* duration: The time in milliseconds to spend scanning each channel.
|
||||
|
||||
```bash
|
||||
> scan energy 10
|
||||
| Ch | RSSI |
|
||||
+----+------+
|
||||
| 11 | -59 |
|
||||
| 12 | -62 |
|
||||
| 13 | -67 |
|
||||
| 14 | -61 |
|
||||
| 15 | -87 |
|
||||
| 16 | -86 |
|
||||
| 17 | -86 |
|
||||
| 18 | -52 |
|
||||
| 19 | -58 |
|
||||
| 20 | -82 |
|
||||
| 21 | -76 |
|
||||
| 22 | -82 |
|
||||
| 23 | -74 |
|
||||
| 24 | -81 |
|
||||
| 25 | -88 |
|
||||
| 26 | -71 |
|
||||
Done
|
||||
```
|
||||
|
||||
### singleton
|
||||
Return true when there are no other nodes in the network, otherwise return false.
|
||||
|
||||
|
||||
+52
-5
@@ -2570,17 +2570,45 @@ void Interpreter::ProcessScan(int argc, char *argv[])
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
uint32_t scanChannels = 0;
|
||||
uint16_t scanDuration = 0;
|
||||
bool energyScan = false;
|
||||
long value;
|
||||
|
||||
if (argc > 0)
|
||||
{
|
||||
SuccessOrExit(error = ParseLong(argv[0], value));
|
||||
scanChannels = 1 << value;
|
||||
if (strcmp(argv[0], "energy") == 0)
|
||||
{
|
||||
energyScan = true;
|
||||
|
||||
if (argc > 1)
|
||||
{
|
||||
SuccessOrExit(error = ParseLong(argv[1], value));
|
||||
scanDuration = static_cast<uint16_t>(value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SuccessOrExit(error = ParseLong(argv[0], value));
|
||||
scanChannels = 1 << value;
|
||||
}
|
||||
}
|
||||
|
||||
mServer->OutputFormat("| J | Network Name | Extended PAN | PAN | MAC Address | Ch | dBm | LQI |\r\n");
|
||||
mServer->OutputFormat("+---+------------------+------------------+------+------------------+----+-----+-----+\r\n");
|
||||
SuccessOrExit(error = otLinkActiveScan(mInstance, scanChannels, 0, &Interpreter::s_HandleActiveScanResult, this));
|
||||
if (energyScan)
|
||||
{
|
||||
mServer->OutputFormat("| Ch | RSSI |\r\n");
|
||||
mServer->OutputFormat("+----+------+\r\n");
|
||||
SuccessOrExit(error = otLinkEnergyScan(mInstance, scanChannels, scanDuration,
|
||||
&Interpreter::s_HandleEnergyScanResult, this));
|
||||
}
|
||||
else
|
||||
{
|
||||
mServer->OutputFormat(
|
||||
"| J | Network Name | Extended PAN | PAN | MAC Address | Ch | dBm | LQI |\r\n");
|
||||
mServer->OutputFormat(
|
||||
"+---+------------------+------------------+------+------------------+----+-----+-----+\r\n");
|
||||
SuccessOrExit(error = otLinkActiveScan(mInstance, scanChannels, scanDuration,
|
||||
&Interpreter::s_HandleActiveScanResult, this));
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
@@ -2619,6 +2647,25 @@ exit:
|
||||
return;
|
||||
}
|
||||
|
||||
void OTCALL Interpreter::s_HandleEnergyScanResult(otEnergyScanResult *aResult, void *aContext)
|
||||
{
|
||||
static_cast<Interpreter *>(aContext)->HandleEnergyScanResult(aResult);
|
||||
}
|
||||
|
||||
void Interpreter::HandleEnergyScanResult(otEnergyScanResult *aResult)
|
||||
{
|
||||
if (aResult == NULL)
|
||||
{
|
||||
mServer->OutputFormat("Done\r\n");
|
||||
ExitNow();
|
||||
}
|
||||
|
||||
mServer->OutputFormat("| %2d | %4d |\r\n", aResult->mChannel, aResult->mMaxRssi);
|
||||
|
||||
exit:
|
||||
return;
|
||||
}
|
||||
|
||||
void Interpreter::ProcessSingleton(int argc, char *argv[])
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
@@ -332,6 +332,7 @@ private:
|
||||
static void s_HandlePingTimer(Timer &aTimer);
|
||||
#endif
|
||||
static void OTCALL s_HandleActiveScanResult(otActiveScanResult *aResult, void *aContext);
|
||||
static void OTCALL s_HandleEnergyScanResult(otEnergyScanResult *aResult, void *aContext);
|
||||
static void OTCALL s_HandleNetifStateChanged(otChangedFlags aFlags, void *aContext);
|
||||
#ifndef OTDLL
|
||||
static void s_HandleLinkPcapReceive(const otRadioFrame *aFrame, void *aContext);
|
||||
@@ -361,6 +362,7 @@ private:
|
||||
void HandlePingTimer();
|
||||
#endif
|
||||
void HandleActiveScanResult(otActiveScanResult *aResult);
|
||||
void HandleEnergyScanResult(otEnergyScanResult *aResult);
|
||||
#ifdef OTDLL
|
||||
void HandleNetifStateChanged(otInstance *aInstance, otChangedFlags aFlags);
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user