diff --git a/src/ncp/ncp_base_radio.cpp b/src/ncp/ncp_base_radio.cpp index e58f1d5f9..3e38620e1 100644 --- a/src/ncp/ncp_base_radio.cpp +++ b/src/ncp/ncp_base_radio.cpp @@ -90,10 +90,7 @@ void NcpBase::LinkRawReceiveDone(otRadioFrame *aFrame, otError aError) SuccessOrExit(mEncoder.WriteUint8(aFrame->mChannel)); // 802.15.4 channel (Receive channel) SuccessOrExit(mEncoder.WriteUint8(aFrame->mInfo.mRxInfo.mLqi)); // 802.15.4 LQI - SuccessOrExit(mEncoder.WriteUint32( - static_cast(aFrame->mInfo.mRxInfo.mTimestamp / 1000))); // The timestamp milliseconds - SuccessOrExit( - mEncoder.WriteUint16(aFrame->mInfo.mRxInfo.mTimestamp % 1000)); // The timestamp microseconds, offset to mMsec + SuccessOrExit(mEncoder.WriteUint64(aFrame->mInfo.mRxInfo.mTimestamp)); // The timestamp in microseconds SuccessOrExit(mEncoder.CloseStruct()); @@ -137,13 +134,10 @@ void NcpBase::LinkRawTransmitDone(otRadioFrame *aFrame, otRadioFrame *aAckFrame, SuccessOrExit(mEncoder.WriteInt8(-128)); // Noise Floor (Currently unused) SuccessOrExit(mEncoder.WriteUint16(0)); // Flags - SuccessOrExit(mEncoder.OpenStruct()); // PHY-data - SuccessOrExit(mEncoder.WriteUint8(aAckFrame->mChannel)); // Receive channel - SuccessOrExit(mEncoder.WriteUint8(aAckFrame->mInfo.mRxInfo.mLqi)); // Link Quality Indicator - SuccessOrExit(mEncoder.WriteUint32( - static_cast(aAckFrame->mInfo.mRxInfo.mTimestamp / 1000))); // The timestamp milliseconds - SuccessOrExit(mEncoder.WriteUint16(aAckFrame->mInfo.mRxInfo.mTimestamp % - 1000)); // The timestamp microseconds, offset to mMsec + SuccessOrExit(mEncoder.OpenStruct()); // PHY-data + SuccessOrExit(mEncoder.WriteUint8(aAckFrame->mChannel)); // Receive channel + SuccessOrExit(mEncoder.WriteUint8(aAckFrame->mInfo.mRxInfo.mLqi)); // Link Quality Indicator + SuccessOrExit(mEncoder.WriteUint64(aAckFrame->mInfo.mRxInfo.mTimestamp)); // The timestamp in microseconds SuccessOrExit(mEncoder.CloseStruct()); diff --git a/src/posix/platform/radio_spinel.cpp b/src/posix/platform/radio_spinel.cpp index b69b30f69..b11fe2460 100644 --- a/src/posix/platform/radio_spinel.cpp +++ b/src/posix/platform/radio_spinel.cpp @@ -612,29 +612,25 @@ otError RadioSpinel::ParseRadioFrame(otRadioFrame &aFrame, const uint8_t *aBuffe otError error = OT_ERROR_NONE; uint16_t flags = 0; int8_t noiseFloor = -128; - uint32_t msec = 0; - uint16_t usec = 0; spinel_size_t size = OT_RADIO_FRAME_MAX_SIZE; unsigned int receiveError = 0; spinel_ssize_t unpacked; - // Timestamp is ms + us. - unpacked = - spinel_datatype_unpack_in_place(aBuffer, aLength, - SPINEL_DATATYPE_DATA_WLEN_S // Frame - SPINEL_DATATYPE_INT8_S // RSSI - SPINEL_DATATYPE_INT8_S // Noise Floor - SPINEL_DATATYPE_UINT16_S // Flags - SPINEL_DATATYPE_STRUCT_S( // PHY-data - SPINEL_DATATYPE_UINT8_S // 802.15.4 channel - SPINEL_DATATYPE_UINT8_S // 802.15.4 LQI - SPINEL_DATATYPE_UINT32_S // Timestamp (ms). - SPINEL_DATATYPE_UINT16_S // Timestamp (us). - ) SPINEL_DATATYPE_STRUCT_S( // Vendor-data - SPINEL_DATATYPE_UINT_PACKED_S // Receive error - ), - aFrame.mPsdu, &size, &aFrame.mInfo.mRxInfo.mRssi, &noiseFloor, &flags, - &aFrame.mChannel, &aFrame.mInfo.mRxInfo.mLqi, &msec, &usec, &receiveError); + unpacked = spinel_datatype_unpack_in_place(aBuffer, aLength, + SPINEL_DATATYPE_DATA_WLEN_S // Frame + SPINEL_DATATYPE_INT8_S // RSSI + SPINEL_DATATYPE_INT8_S // Noise Floor + SPINEL_DATATYPE_UINT16_S // Flags + SPINEL_DATATYPE_STRUCT_S( // PHY-data + SPINEL_DATATYPE_UINT8_S // 802.15.4 channel + SPINEL_DATATYPE_UINT8_S // 802.15.4 LQI + SPINEL_DATATYPE_UINT64_S // Timestamp (us). + ) SPINEL_DATATYPE_STRUCT_S( // Vendor-data + SPINEL_DATATYPE_UINT_PACKED_S // Receive error + ), + aFrame.mPsdu, &size, &aFrame.mInfo.mRxInfo.mRssi, &noiseFloor, &flags, + &aFrame.mChannel, &aFrame.mInfo.mRxInfo.mLqi, + &aFrame.mInfo.mRxInfo.mTimestamp, &receiveError); VerifyOrExit(unpacked > 0, error = OT_ERROR_PARSE); @@ -642,7 +638,6 @@ otError RadioSpinel::ParseRadioFrame(otRadioFrame &aFrame, const uint8_t *aBuffe { aFrame.mLength = static_cast(size); - aFrame.mInfo.mRxInfo.mTimestamp = msec * 1000 + usec; aFrame.mInfo.mRxInfo.mAckedWithFramePending = ((flags & SPINEL_MD_FLAG_ACKED_FP) != 0); } else if (receiveError < OT_NUM_ERRORS)