From acbd38a5f11ee6a9bee5516fa33d584fc18fd8c4 Mon Sep 17 00:00:00 2001 From: Moandor Date: Sat, 21 Nov 2020 08:01:57 +0800 Subject: [PATCH] [posix] add radio URL parameter cca-threshold (#5832) --- src/posix/platform/radio.cpp | 16 ++++- src/posix/platform/radio_url.cpp | 1 + tests/scripts/expect/posix-ccathreshold.exp | 70 +++++++++++++++++++++ 3 files changed, 84 insertions(+), 3 deletions(-) create mode 100755 tests/scripts/expect/posix-ccathreshold.exp diff --git a/src/posix/platform/radio.cpp b/src/posix/platform/radio.cpp index faefa6758..1545307b5 100644 --- a/src/posix/platform/radio.cpp +++ b/src/posix/platform/radio.cpp @@ -99,7 +99,7 @@ void platformRadioInit(otUrl *aRadioUrl) ot::Posix::RadioUrl &radioUrl = *static_cast(aRadioUrl); bool resetRadio = (radioUrl.GetValue("no-reset") == nullptr); bool restoreDataset = (radioUrl.GetValue("ncp-dataset") != nullptr); - const char * urlFemLnaGain = radioUrl.GetValue("fem-lnagain"); + const char * parameterValue; #if OPENTHREAD_POSIX_CONFIG_MAX_POWER_TABLE_ENABLE uint8_t channel = ot::Radio::kChannelMin; int8_t power = ot::Posix::MaxPowerTable::kPowerDefault; @@ -130,13 +130,23 @@ void platformRadioInit(otUrl *aRadioUrl) SuccessOrDie(sRadioSpinel.GetSpinelInterface().Init(radioUrl)); sRadioSpinel.Init(resetRadio, restoreDataset); - if (urlFemLnaGain != nullptr) + parameterValue = radioUrl.GetValue("fem-lnagain"); + if (parameterValue != nullptr) { - long femLnaGain = strtol(urlFemLnaGain, nullptr, 0); + long femLnaGain = strtol(parameterValue, nullptr, 0); VerifyOrDie(INT8_MIN <= femLnaGain && femLnaGain <= INT8_MAX, OT_EXIT_INVALID_ARGUMENTS); SuccessOrDie(sRadioSpinel.SetFemLnaGain(static_cast(femLnaGain))); } + + parameterValue = radioUrl.GetValue("cca-threshold"); + if (parameterValue != nullptr) + { + long ccaThreshold = strtol(parameterValue, nullptr, 0); + + VerifyOrDie(INT8_MIN <= ccaThreshold && ccaThreshold <= INT8_MAX, OT_EXIT_INVALID_ARGUMENTS); + SuccessOrDie(sRadioSpinel.SetCcaEnergyDetectThreshold(static_cast(ccaThreshold))); + } } void platformRadioDeinit(void) diff --git a/src/posix/platform/radio_url.cpp b/src/posix/platform/radio_url.cpp index 7dbc84d39..7c80f1ec3 100644 --- a/src/posix/platform/radio_url.cpp +++ b/src/posix/platform/radio_url.cpp @@ -88,6 +88,7 @@ const char *otSysGetRadioUrlHelpString(void) #endif return "RadioURL:\n" OT_RADIO_URL_HELP_BUS OT_RADIO_URL_HELP_MAX_POWER_TABLE + " cca-threshold[=dbm] Set the radio's CCA ED threshold in dBm measured at antenna connector.\n" " fem-lnagain[=dbm] Set the Rx LNA gain in dBm of the external FEM.\n" " ncp-dataset Retrieve dataset from ncp.\n" " no-reset Do not send Spinel reset command to RCP on initialization.\n"; diff --git a/tests/scripts/expect/posix-ccathreshold.exp b/tests/scripts/expect/posix-ccathreshold.exp new file mode 100755 index 000000000..34e4d966c --- /dev/null +++ b/tests/scripts/expect/posix-ccathreshold.exp @@ -0,0 +1,70 @@ +#!/usr/bin/expect -f +# +# Copyright (c) 2020, The OpenThread Authors. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +spawn $env(OT_POSIX_APPS)/ot-cli "spinel+hdlc+uart://$env(OT_SIMULATION_APPS)/ncp/ot-rcp?forkpty-arg=1&cca-threshold=-100" +expect_after { + timeout { exit 1 } +} +send "ccathreshold\n" +expect -- "-100" +expect "Done" +send "\x04" +expect eof + +spawn $env(OT_POSIX_APPS)/ot-cli "spinel+hdlc+uart://$env(OT_SIMULATION_APPS)/ncp/ot-rcp?forkpty-arg=1&cca-threshold=-128" +expect_after { + timeout { exit 1 } +} +send "ccathreshold\n" +expect -- "-128" +expect "Done" +send "\x04" +expect eof + +spawn $env(OT_POSIX_APPS)/ot-cli "spinel+hdlc+uart://$env(OT_SIMULATION_APPS)/ncp/ot-rcp?forkpty-arg=1&cca-threshold=127" +expect_after { + timeout { exit 1 } +} +send "ccathreshold\n" +expect "127" +expect "Done" +send "\x04" +expect eof + +spawn $env(OT_POSIX_APPS)/ot-cli "spinel+hdlc+uart://$env(OT_SIMULATION_APPS)/ncp/ot-rcp?forkpty-arg=1&cca-threshold=-129" +expect_after { + timeout { exit 1 } +} +expect eof + +spawn $env(OT_POSIX_APPS)/ot-cli "spinel+hdlc+uart://$env(OT_SIMULATION_APPS)/ncp/ot-rcp?forkpty-arg=1&cca-threshold=128" +expect_after { + timeout { exit 1 } +} +expect eof