diff --git a/include/openthread/instance.h b/include/openthread/instance.h index bf7dfb60c..65c6df56b 100644 --- a/include/openthread/instance.h +++ b/include/openthread/instance.h @@ -53,7 +53,7 @@ extern "C" { * @note This number versions both OpenThread platform and user APIs. * */ -#define OPENTHREAD_API_VERSION (127) +#define OPENTHREAD_API_VERSION (128) /** * @addtogroup api-instance diff --git a/include/openthread/platform/radio.h b/include/openthread/platform/radio.h index bba9d7699..8fd87d463 100644 --- a/include/openthread/platform/radio.h +++ b/include/openthread/platform/radio.h @@ -68,6 +68,7 @@ extern "C" { enum { OT_RADIO_FRAME_MAX_SIZE = 127, ///< aMaxPHYPacketSize (IEEE 802.15.4-2006) + OT_RADIO_FRAME_MIN_SIZE = 3, ///< Minimal size of frame FCS + CONTROL OT_RADIO_SYMBOLS_PER_OCTET = 2, ///< 2.4 GHz IEEE 802.15.4-2006 OT_RADIO_BIT_RATE = 250000, ///< 2.4 GHz IEEE 802.15.4 (bits per second) OT_RADIO_BITS_PER_OCTET = 8, ///< Number of bits per octet diff --git a/src/core/diags/README.md b/src/core/diags/README.md index 2dc027918..ba2a9ec75 100644 --- a/src/core/diags/README.md +++ b/src/core/diags/README.md @@ -77,6 +77,8 @@ status 0x00 Transmit a fixed number of packets with fixed length. +Length parameter has to be in range [3, 127]. + ```bash > diag send 20 100 sending 0x14 packet(s), length 0x64 @@ -87,6 +89,8 @@ status 0x00 Transmit packets repeatedly with a fixed interval. +Length parameter has to be in range [3, 127]. + ```bash > diag repeat 100 100 sending packets of length 0x64 at the delay of 0x64 ms diff --git a/src/core/diags/factory_diags.cpp b/src/core/diags/factory_diags.cpp index 73de633b1..6b6d109f5 100644 --- a/src/core/diags/factory_diags.cpp +++ b/src/core/diags/factory_diags.cpp @@ -244,6 +244,7 @@ Error Diags::ProcessRepeat(uint8_t aArgsLength, char *aArgs[], char *aOutput, si SuccessOrExit(error = ParseLong(aArgs[1], value)); VerifyOrExit(value <= OT_RADIO_FRAME_MAX_SIZE, error = kErrorInvalidArgs); + VerifyOrExit(value >= OT_RADIO_FRAME_MIN_SIZE, error = kErrorInvalidArgs); mTxLen = static_cast(value); mRepeatActive = true; @@ -271,6 +272,7 @@ Error Diags::ProcessSend(uint8_t aArgsLength, char *aArgs[], char *aOutput, size SuccessOrExit(error = ParseLong(aArgs[1], value)); VerifyOrExit(value <= OT_RADIO_FRAME_MAX_SIZE, error = kErrorInvalidArgs); + VerifyOrExit(value >= OT_RADIO_FRAME_MIN_SIZE, error = kErrorInvalidArgs); mTxLen = static_cast(value); snprintf(aOutput, aOutputMaxLen, "sending %#x packet(s), length %#x\r\nstatus 0x%02x\r\n",