From c6a46571782a78d020c045db64d31ffe50a67c39 Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Thu, 19 Sep 2024 02:20:11 +0800 Subject: [PATCH] [diag] add flag to enable CSMA/CA (#10723) --- src/core/diags/README.md | 5 +++-- src/core/diags/factory_diags.cpp | 17 ++++++++++++++--- tests/scripts/expect/cli-diags.exp | 7 +++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/core/diags/README.md b/src/core/diags/README.md index 7af2f608455..550223d021f 100644 --- a/src/core/diags/README.md +++ b/src/core/diags/README.md @@ -80,11 +80,12 @@ Done ### diag frame -Usage: `diag frame [-s] ` +Usage: `diag frame [-c] [-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 skip security processing in radio layer. +- 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. ```bash > diag frame 11223344 diff --git a/src/core/diags/factory_diags.cpp b/src/core/diags/factory_diags.cpp index 1c1a28c2886..0ae249fbc24 100644 --- a/src/core/diags/factory_diags.cpp +++ b/src/core/diags/factory_diags.cpp @@ -236,15 +236,25 @@ Error Diags::ProcessFrame(uint8_t aArgsLength, char *aArgs[]) Error error = kErrorNone; uint16_t size = OT_RADIO_FRAME_MAX_SIZE; bool securityProcessed = false; + bool csmaCaEnabled = false; - if (aArgsLength >= 1) + while (aArgsLength > 1) { if (StringMatch(aArgs[0], "-s")) { securityProcessed = true; - aArgs++; - aArgsLength--; } + else if (StringMatch(aArgs[0], "-c")) + { + csmaCaEnabled = true; + } + else + { + ExitNow(error = kErrorInvalidArgs); + } + + aArgs++; + aArgsLength--; } VerifyOrExit(aArgsLength == 1, error = kErrorInvalidArgs); @@ -254,6 +264,7 @@ Error Diags::ProcessFrame(uint8_t aArgsLength, char *aArgs[]) VerifyOrExit(size >= OT_RADIO_FRAME_MIN_SIZE, error = kErrorInvalidArgs); ResetTxPacket(); + mTxPacket->mInfo.mTxInfo.mCsmaCaEnabled = csmaCaEnabled; mTxPacket->mInfo.mTxInfo.mIsSecurityProcessed = securityProcessed; mTxPacket->mLength = size; mIsTxPacketSet = true; diff --git a/tests/scripts/expect/cli-diags.exp b/tests/scripts/expect/cli-diags.exp index 3f26628d012..6f2a3f19273 100755 --- a/tests/scripts/expect/cli-diags.exp +++ b/tests/scripts/expect/cli-diags.exp @@ -159,6 +159,13 @@ send "diag send 1\n" expect "length 0x3" expect "Done" +send_user "send frame with CSMA/CA enabled\n" +send "diag frame -c 112233\n" +expect "Done" +send "diag send 1\n" +expect "length 0x3" +expect "Done" + send "diag repeat stop\n" expect "Done"