From da9ba9cbdc9be5bbf3ea6ae5a6d39540bcf6dd7b Mon Sep 17 00:00:00 2001 From: Yuzhuo Yang Date: Tue, 12 Mar 2019 00:37:52 +0800 Subject: [PATCH] [diag] add radio sleep / receive mode for RF certification (#3657) Bug: 127894959 --- src/diag/README.md | 19 +++++++++++++++---- src/diag/diag_process.cpp | 30 ++++++++++++++++++++++++++++-- src/diag/diag_process.hpp | 1 + 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/diag/README.md b/src/diag/README.md index 226e3cdb2..7732bd55a 100644 --- a/src/diag/README.md +++ b/src/diag/README.md @@ -13,7 +13,7 @@ The diagnostics module supports common diagnostics features that are listed belo * [diag power](#diag-power) * [diag send](#diag-send-packets-length) * [diag repeat](#diag-repeat-delay-length) -* [diag sleep](#diag-sleep) +* [diag radio](#diag-radio) * [diag stats](#diag-stats) * [diag stop](#diag-stop) @@ -105,13 +105,24 @@ repeated packet transmission is stopped status 0x00 ``` -### diag sleep +### diag radio sleep Enter radio sleep mode. ```bash -> diag sleep -sleeping now... +> diag radio sleep +set radio from receive to sleep +status 0x00 +``` + +### diag radio receive + +Set radio from sleep mode to receive mode. + +```bash +> diag radio receive +set radio from sleep to receive on channel 11 +status 0x00 ``` ### diag stats diff --git a/src/diag/diag_process.cpp b/src/diag/diag_process.cpp index 356af24a1..14d820b55 100644 --- a/src/diag/diag_process.cpp +++ b/src/diag/diag_process.cpp @@ -46,8 +46,9 @@ namespace ot { namespace Diagnostics { const struct Diag::Command Diag::sCommands[] = { - {"start", &ProcessStart}, {"stop", &ProcessStop}, {"channel", &ProcessChannel}, {"power", &ProcessPower}, - {"send", &ProcessSend}, {"repeat", &ProcessRepeat}, {"stats", &ProcessStats}, {NULL, NULL}, + {"start", &ProcessStart}, {"stop", &ProcessStop}, {"channel", &ProcessChannel}, + {"power", &ProcessPower}, {"send", &ProcessSend}, {"repeat", &ProcessRepeat}, + {"stats", &ProcessStats}, {"radio", &ProcessRadio}, {NULL, NULL}, }; struct Diag::DiagStats Diag::sStats; @@ -309,6 +310,31 @@ exit: AppendErrorResult(error, aOutput, aOutputMaxLen); } +void Diag::ProcessRadio(int aArgCount, char *aArgVector[], char *aOutput, size_t aOutputMaxLen) +{ + otError error = OT_ERROR_INVALID_ARGS; + + VerifyOrExit(otPlatDiagModeGet(), error = OT_ERROR_INVALID_STATE); + VerifyOrExit(aArgCount > 0, error = OT_ERROR_INVALID_ARGS); + + if (strcmp(aArgVector[0], "sleep") == 0) + { + SuccessOrExit(error = otPlatRadioSleep(sInstance)); + snprintf(aOutput, aOutputMaxLen, "set radio from receive to sleep \r\nstatus 0x%02x\r\n", error); + } + else if (strcmp(aArgVector[0], "receive") == 0) + { + SuccessOrExit(error = otPlatRadioReceive(sInstance, sChannel)); + otPlatDiagChannelSet(sChannel); + + snprintf(aOutput, aOutputMaxLen, "set radio from sleep to receive on channel %d\r\nstatus 0x%02x\r\n", sChannel, + error); + } + +exit: + AppendErrorResult(error, aOutput, aOutputMaxLen); +} + void Diag::DiagTransmitDone(otInstance *aInstance, otError aError) { VerifyOrExit(aInstance == sInstance); diff --git a/src/diag/diag_process.hpp b/src/diag/diag_process.hpp index bca053f77..6fa8aaa6a 100644 --- a/src/diag/diag_process.hpp +++ b/src/diag/diag_process.hpp @@ -78,6 +78,7 @@ private: static void ProcessSend(int aArgCount, char *aArgVector[], char *aOutput, size_t aOutputMaxLen); static void ProcessRepeat(int aArgCount, char *aArgVector[], char *aOutput, size_t aOutputMaxLen); static void ProcessStats(int aArgCount, char *aArgVector[], char *aOutput, size_t aOutputMaxLen); + static void ProcessRadio(int aArgCount, char *aArgVector[], char *aOutput, size_t aOutputMaxLen); static void ProcessChannel(int aArgCount, char *aArgVector[], char *aOutput, size_t aOutputMaxLen); static void ProcessPower(int aArgCount, char *aArgVector[], char *aOutput, size_t aOutputMaxLen); static void TxPacket(void);