From 9fee87c071116ab186c7a5ff9c07c629790fbbc3 Mon Sep 17 00:00:00 2001 From: Oleksandr Grytsov Date: Tue, 15 Jan 2019 23:05:05 +0200 Subject: [PATCH] [samr21] Remove memcpy from otPlatRadioTransmit (#3491) samr21 rf driver requires that first byte of transmit buffer should be psdu length. The psdu was copied to a local buffer with one byte shift then the local buffer was passed to rf driver. This copying is removed by extending length of sTransmitPsdu by 1 byte and use &sTransmitPsdu[1] as transmit frame psdu. Signed-off-by: Oleksandr Grytsov --- examples/platforms/samr21/radio.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/examples/platforms/samr21/radio.c b/examples/platforms/samr21/radio.c index beba143c7..379404429 100644 --- a/examples/platforms/samr21/radio.c +++ b/examples/platforms/samr21/radio.c @@ -56,7 +56,7 @@ enum }; static otRadioFrame sTransmitFrame; -static uint8_t sTransmitPsdu[OT_RADIO_FRAME_MAX_SIZE]; +static uint8_t sTransmitPsdu[OT_RADIO_FRAME_MAX_SIZE + 1]; static otRadioFrame sReceiveFrame; @@ -307,7 +307,7 @@ void PHY_DataConf(uint8_t status) void samr21RadioInit(void) { sTransmitFrame.mLength = 0; - sTransmitFrame.mPsdu = sTransmitPsdu; + sTransmitFrame.mPsdu = sTransmitPsdu + 1; sReceiveFrame.mLength = 0; sReceiveFrame.mPsdu = NULL; @@ -492,14 +492,11 @@ otError otPlatRadioTransmit(otInstance *aInstance, otRadioFrame *aFrame) otEXPECT_ACTION(sState == OT_RADIO_STATE_RECEIVE, error = OT_ERROR_INVALID_STATE); - uint8_t frame[OT_RADIO_FRAME_MAX_SIZE + 1]; - setChannel(aFrame->mChannel); - frame[0] = aFrame->mLength - IEEE802154_FCS_SIZE; - memcpy(frame + 1, aFrame->mPsdu, aFrame->mLength); + aFrame->mPsdu[-1] = aFrame->mLength - IEEE802154_FCS_SIZE; - PHY_DataReq(frame); + PHY_DataReq(&aFrame->mPsdu[-1]); otPlatRadioTxStarted(aInstance, aFrame);