[cli] support energy scan command (#3036)

This commit is contained in:
Shu Chen
2018-09-06 07:30:55 -10:00
committed by Jonathan Hui
parent b83fa59914
commit 9a9da5124f
3 changed files with 84 additions and 6 deletions
+30 -1
View File
@@ -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
View File
@@ -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;
+2
View File
@@ -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