From 075017bedcf5c90aa7f711c24599ea011b320a8f Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Sat, 1 Aug 2020 10:50:07 -0700 Subject: [PATCH] [commissioner] add 'state' CLI command (#5317) --- src/cli/cli_commissioner.cpp | 27 ++++++++++++++++++----- src/cli/cli_commissioner.hpp | 3 +++ tests/scripts/expect/cli-commissioner.exp | 9 ++++++++ 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/cli/cli_commissioner.cpp b/src/cli/cli_commissioner.cpp index 606ad9ba6..1ebbda249 100644 --- a/src/cli/cli_commissioner.cpp +++ b/src/cli/cli_commissioner.cpp @@ -47,7 +47,7 @@ const struct Commissioner::Command Commissioner::sCommands[] = { {"mgmtget", &Commissioner::ProcessMgmtGet}, {"mgmtset", &Commissioner::ProcessMgmtSet}, {"panid", &Commissioner::ProcessPanId}, {"provisioningurl", &Commissioner::ProcessProvisioningUrl}, {"sessionid", &Commissioner::ProcessSessionId}, {"start", &Commissioner::ProcessStart}, - {"stop", &Commissioner::ProcessStop}, + {"state", &Commissioner::ProcessState}, {"stop", &Commissioner::ProcessStop}, }; otError Commissioner::ProcessHelp(uint8_t aArgsLength, char *aArgs[]) @@ -344,20 +344,27 @@ void Commissioner::HandleStateChanged(otCommissionerState aState, void *aContext void Commissioner::HandleStateChanged(otCommissionerState aState) { - mInterpreter.mServer->OutputFormat("Commissioner: "); + mInterpreter.mServer->OutputFormat("Commissioner: %s\r\n", StateToString(aState)); +} + +const char *Commissioner::StateToString(otCommissionerState aState) +{ + const char *rval = "unknown"; switch (aState) { case OT_COMMISSIONER_STATE_DISABLED: - mInterpreter.mServer->OutputFormat("disabled\r\n"); + rval = "disabled"; break; case OT_COMMISSIONER_STATE_PETITION: - mInterpreter.mServer->OutputFormat("petitioning\r\n"); + rval = "petitioning"; break; case OT_COMMISSIONER_STATE_ACTIVE: - mInterpreter.mServer->OutputFormat("active\r\n"); + rval = "active"; break; } + + return rval; } void Commissioner::HandleJoinerEvent(otCommissionerJoinerEvent aEvent, @@ -411,6 +418,16 @@ otError Commissioner::ProcessStop(uint8_t aArgsLength, char *aArgs[]) return otCommissionerStop(mInterpreter.mInstance); } +otError Commissioner::ProcessState(uint8_t aArgsLength, char *aArgs[]) +{ + OT_UNUSED_VARIABLE(aArgsLength); + OT_UNUSED_VARIABLE(aArgs); + + mInterpreter.mServer->OutputFormat("%s\r\n", StateToString(otCommissionerGetState(mInterpreter.mInstance))); + + return OT_ERROR_NONE; +} + otError Commissioner::Process(uint8_t aArgsLength, char *aArgs[]) { otError error = OT_ERROR_INVALID_COMMAND; diff --git a/src/cli/cli_commissioner.hpp b/src/cli/cli_commissioner.hpp index 0b5b071a1..51ef2d8e0 100644 --- a/src/cli/cli_commissioner.hpp +++ b/src/cli/cli_commissioner.hpp @@ -94,6 +94,7 @@ private: otError ProcessProvisioningUrl(uint8_t aArgsLength, char *aArgs[]); otError ProcessSessionId(uint8_t aArgsLength, char *aArgs[]); otError ProcessStart(uint8_t aArgsLength, char *aArgs[]); + otError ProcessState(uint8_t aArgsLength, char *aArgs[]); otError ProcessStop(uint8_t aArgsLength, char *aArgs[]); static void HandleStateChanged(otCommissionerState aState, void *aContext); @@ -116,6 +117,8 @@ private: static void HandlePanIdConflict(uint16_t aPanId, uint32_t aChannelMask, void *aContext); void HandlePanIdConflict(uint16_t aPanId, uint32_t aChannelMask); + static const char *StateToString(otCommissionerState aState); + static const Command sCommands[]; Interpreter & mInterpreter; }; diff --git a/tests/scripts/expect/cli-commissioner.exp b/tests/scripts/expect/cli-commissioner.exp index d31ce46ba..16a64815d 100755 --- a/tests/scripts/expect/cli-commissioner.exp +++ b/tests/scripts/expect/cli-commissioner.exp @@ -33,9 +33,15 @@ source "tests/scripts/expect/_multinode.exp" setup_nodes set spawn_id $spawn_2 +send "commissioner state\n" +expect "disabled" +expect "Done" send "commissioner start\n" expect "Done" expect "Commissioner: active" +send "commissioner state\n" +expect "active" +expect "Done" send "commissioner provisioningurl openthread.io\n" expect "Done" send "commissioner joiner add * J01NME 1\n" @@ -55,6 +61,9 @@ expect "Done" send "commissioner stop\n" expect "Commissioner: disabled" expect "Done" +send "commissioner state\n" +expect "disabled" +expect "Done" send "commissioner help\n" expect "Done" send "commissioner joiner something_invalid\n"