mirror of
https://github.com/espressif/openthread.git
synced 2026-10-01 21:37:39 +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)
|
* [routerrole](#routerrole)
|
||||||
* [routerselectionjitter](#routerselectionjitter)
|
* [routerselectionjitter](#routerselectionjitter)
|
||||||
* [routerupgradethreshold](#routerupgradethreshold)
|
* [routerupgradethreshold](#routerupgradethreshold)
|
||||||
* [scan](#scan-channel)
|
* [scan](#scan)
|
||||||
* [singleton](#singleton)
|
* [singleton](#singleton)
|
||||||
* [state](#state)
|
* [state](#state)
|
||||||
* [thread](#thread-start)
|
* [thread](#thread-start)
|
||||||
@@ -1592,6 +1592,35 @@ Perform an IEEE 802.15.4 Active Scan.
|
|||||||
Done
|
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
|
### singleton
|
||||||
Return true when there are no other nodes in the network, otherwise return false.
|
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;
|
otError error = OT_ERROR_NONE;
|
||||||
uint32_t scanChannels = 0;
|
uint32_t scanChannels = 0;
|
||||||
|
uint16_t scanDuration = 0;
|
||||||
|
bool energyScan = false;
|
||||||
long value;
|
long value;
|
||||||
|
|
||||||
if (argc > 0)
|
if (argc > 0)
|
||||||
{
|
{
|
||||||
SuccessOrExit(error = ParseLong(argv[0], value));
|
if (strcmp(argv[0], "energy") == 0)
|
||||||
scanChannels = 1 << value;
|
{
|
||||||
|
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");
|
if (energyScan)
|
||||||
mServer->OutputFormat("+---+------------------+------------------+------+------------------+----+-----+-----+\r\n");
|
{
|
||||||
SuccessOrExit(error = otLinkActiveScan(mInstance, scanChannels, 0, &Interpreter::s_HandleActiveScanResult, this));
|
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;
|
return;
|
||||||
|
|
||||||
@@ -2619,6 +2647,25 @@ exit:
|
|||||||
return;
|
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[])
|
void Interpreter::ProcessSingleton(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
otError error = OT_ERROR_NONE;
|
otError error = OT_ERROR_NONE;
|
||||||
|
|||||||
@@ -332,6 +332,7 @@ private:
|
|||||||
static void s_HandlePingTimer(Timer &aTimer);
|
static void s_HandlePingTimer(Timer &aTimer);
|
||||||
#endif
|
#endif
|
||||||
static void OTCALL s_HandleActiveScanResult(otActiveScanResult *aResult, void *aContext);
|
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);
|
static void OTCALL s_HandleNetifStateChanged(otChangedFlags aFlags, void *aContext);
|
||||||
#ifndef OTDLL
|
#ifndef OTDLL
|
||||||
static void s_HandleLinkPcapReceive(const otRadioFrame *aFrame, void *aContext);
|
static void s_HandleLinkPcapReceive(const otRadioFrame *aFrame, void *aContext);
|
||||||
@@ -361,6 +362,7 @@ private:
|
|||||||
void HandlePingTimer();
|
void HandlePingTimer();
|
||||||
#endif
|
#endif
|
||||||
void HandleActiveScanResult(otActiveScanResult *aResult);
|
void HandleActiveScanResult(otActiveScanResult *aResult);
|
||||||
|
void HandleEnergyScanResult(otEnergyScanResult *aResult);
|
||||||
#ifdef OTDLL
|
#ifdef OTDLL
|
||||||
void HandleNetifStateChanged(otInstance *aInstance, otChangedFlags aFlags);
|
void HandleNetifStateChanged(otInstance *aInstance, otChangedFlags aFlags);
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user