From e181f1f98ed00091d5db5c59ac40363cd0cdaa93 Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Wed, 8 Aug 2018 10:15:14 +0800 Subject: [PATCH] [posix-app] fix diag issues of radio only mode (#2948) --- examples/platforms/posix/radio.c | 19 ++++++++++++++----- include/openthread-config-android.h | 4 ++-- src/posix/platform/radio_spinel.cpp | 16 ++++++++++++++-- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/examples/platforms/posix/radio.c b/examples/platforms/posix/radio.c index bd16b0164..6716b453c 100644 --- a/examples/platforms/posix/radio.c +++ b/examples/platforms/posix/radio.c @@ -693,13 +693,11 @@ void platformRadioProcess(otInstance *aInstance) } } -void radioTransmit(struct RadioMessage *aMessage, const struct otRadioFrame *aFrame) +static void radioComputeCrc(struct RadioMessage *aMessage, uint16_t aLength) { - uint32_t i; - struct sockaddr_in sockaddr; - + uint16_t i; uint16_t crc = 0; - uint16_t crc_offset = aFrame->mLength - sizeof(uint16_t); + uint16_t crc_offset = aLength - sizeof(uint16_t); for (i = 0; i < crc_offset; i++) { @@ -708,6 +706,17 @@ void radioTransmit(struct RadioMessage *aMessage, const struct otRadioFrame *aFr aMessage->mPsdu[crc_offset] = crc & 0xff; aMessage->mPsdu[crc_offset + 1] = crc >> 8; +} + +void radioTransmit(struct RadioMessage *aMessage, const struct otRadioFrame *aFrame) +{ + uint32_t i; + struct sockaddr_in sockaddr; + + if (!sPromiscuous) + { + radioComputeCrc(aMessage, aFrame->mLength); + } memset(&sockaddr, 0, sizeof(sockaddr)); sockaddr.sin_family = AF_INET; diff --git a/include/openthread-config-android.h b/include/openthread-config-android.h index b974287cd..a4087804d 100644 --- a/include/openthread-config-android.h +++ b/include/openthread-config-android.h @@ -143,13 +143,13 @@ #define OPENTHREAD_ENABLE_MULTIPLE_INSTANCES 0 /* Define to 1 to enable the NCP SPI interface. */ -#define OPENTHREAD_ENABLE_NCP_SPI 1 +#define OPENTHREAD_ENABLE_NCP_SPI 0 /* Define to 1 if using NCP Spinel Encrypter */ #define OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER 0 /* Define to 1 to enable the NCP UART interface. */ -#define OPENTHREAD_ENABLE_NCP_UART 0 +#define OPENTHREAD_ENABLE_NCP_UART 1 /* Define to 1 if using NCP vendor hook */ #define OPENTHREAD_ENABLE_NCP_VENDOR_HOOK 0 diff --git a/src/posix/platform/radio_spinel.cpp b/src/posix/platform/radio_spinel.cpp index 51d369eda..05cc3e6e1 100644 --- a/src/posix/platform/radio_spinel.cpp +++ b/src/posix/platform/radio_spinel.cpp @@ -793,7 +793,19 @@ void RadioSpinel::Process(const fd_set &aReadFdSet, const fd_set &aWriteFdSet) if (mState == OT_RADIO_STATE_TRANSMIT && mTxState == kDone) { mState = OT_RADIO_STATE_RECEIVE; - otPlatRadioTxDone(mInstance, mTransmitFrame, (mIsAckRequested ? &mRxRadioFrame : NULL), mTxError); + +#if OPENTHREAD_ENABLE_DIAG + if (otPlatDiagModeGet()) + { + otPlatDiagRadioTransmitDone(mInstance, mTransmitFrame, mTxError); + } + else +#endif + { + otPlatRadioTxDone(mInstance, mTransmitFrame, (mIsAckRequested ? &mRxRadioFrame : NULL), mTxError); + } + + mTxState = kIdle; } } @@ -1062,7 +1074,7 @@ void RadioSpinel::RadioTransmit(void) otPlatRadioTxStarted(mInstance, mTransmitFrame); assert(mTxState == kIdle); - mIsAckRequested = isAckRequested(mTransmitFrame->mPsdu); + mIsAckRequested = isAckRequested(mTransmitFrame->mPsdu) && !mIsPromiscuous; error = Request(true, SPINEL_CMD_PROP_VALUE_SET, SPINEL_PROP_STREAM_RAW, SPINEL_DATATYPE_DATA_WLEN_S SPINEL_DATATYPE_UINT8_S SPINEL_DATATYPE_INT8_S, mTransmitFrame->mPsdu,