From b8070846cddd0665cd6e41c16303d8feb9b2e0b4 Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Thu, 17 Oct 2024 13:27:26 +0800 Subject: [PATCH] [diag] support per-frame tx power (#10847) --- src/core/diags/README.md | 3 ++- src/core/diags/factory_diags.cpp | 13 +++++++++++++ tests/scripts/expect/cli-diags.exp | 7 +++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/core/diags/README.md b/src/core/diags/README.md index 550223d02..9ec39c2cf 100644 --- a/src/core/diags/README.md +++ b/src/core/diags/README.md @@ -80,12 +80,13 @@ Done ### diag frame -Usage: `diag frame [-c] [-s] ` +Usage: `diag frame [-c] [-p TX_POWER] [-s] ` Set the frame (hex encoded) to be used by `diag send` and `diag repeat`. The frame may be overwritten by `diag send` and `diag repeat`. - Specify `-s` to indicate that tx security is already processed so that it should be skipped in the radio layer. - Specify `-c` to enable CSMA/CA for this frame in the radio layer. +- Specify `-p` to specify the tx power in dBm for this frame. ```bash > diag frame 11223344 diff --git a/src/core/diags/factory_diags.cpp b/src/core/diags/factory_diags.cpp index e17cae27c..ab88579f3 100644 --- a/src/core/diags/factory_diags.cpp +++ b/src/core/diags/factory_diags.cpp @@ -232,6 +232,7 @@ Error Diags::ProcessFrame(uint8_t aArgsLength, char *aArgs[]) uint16_t size = OT_RADIO_FRAME_MAX_SIZE; bool securityProcessed = false; bool csmaCaEnabled = false; + int8_t txPower = OT_RADIO_POWER_INVALID; while (aArgsLength > 1) { @@ -239,6 +240,17 @@ Error Diags::ProcessFrame(uint8_t aArgsLength, char *aArgs[]) { securityProcessed = true; } + else if (StringMatch(aArgs[0], "-p")) + { + long value; + + aArgs++; + aArgsLength--; + + VerifyOrExit(aArgsLength > 1, error = kErrorInvalidArgs); + SuccessOrExit(error = ParseLong(aArgs[0], value)); + txPower = static_cast(value); + } else if (StringMatch(aArgs[0], "-c")) { csmaCaEnabled = true; @@ -261,6 +273,7 @@ Error Diags::ProcessFrame(uint8_t aArgsLength, char *aArgs[]) ResetTxPacket(); mTxPacket->mInfo.mTxInfo.mCsmaCaEnabled = csmaCaEnabled; mTxPacket->mInfo.mTxInfo.mIsSecurityProcessed = securityProcessed; + mTxPacket->mInfo.mTxInfo.mTxPower = txPower; mTxPacket->mLength = size; mIsTxPacketSet = true; diff --git a/tests/scripts/expect/cli-diags.exp b/tests/scripts/expect/cli-diags.exp index 6f2a3f192..116412f8c 100755 --- a/tests/scripts/expect/cli-diags.exp +++ b/tests/scripts/expect/cli-diags.exp @@ -166,6 +166,13 @@ send "diag send 1\n" expect "length 0x3" expect "Done" +send_user "send frame with tx power\n" +send "diag frame -p 11 112233\n" +expect "Done" +send "diag send 1\n" +expect "length 0x3" +expect "Done" + send "diag repeat stop\n" expect "Done"