otError otPlatRadioTransmit(otInstance *aInstance, otRadioFrame *aFrame) { (void)aInstance; otLogDebgPlat(sInstance, "Radio transmit"); otError error = OT_ERROR_NONE; 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); PHY_DataReq(frame); otPlatRadioTxStarted(aInstance, aFrame); sState = OT_RADIO_STATE_TRANSMIT; exit: return error; }
otError otPlatRadioTransmit(otInstance *aInstance, otRadioFrame *aFrame) { otError result = OT_ERROR_NONE; aFrame->mPsdu[-1] = aFrame->mLength; nrf_802154_channel_set(aFrame->mChannel); if (aFrame->mInfo.mTxInfo.mCsmaCaEnabled) { nrf_802154_transmit_csma_ca_raw(&aFrame->mPsdu[-1]); } else { if (!nrf_802154_transmit_raw(&aFrame->mPsdu[-1], false)) { result = OT_ERROR_FAILED; } } clearPendingEvents(); if (result == OT_ERROR_NONE) { otPlatRadioTxStarted(aInstance, aFrame); } return result; }