예제 #1
0
파일: radio.c 프로젝트: nodish/openthread
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;
}
예제 #2
0
파일: radio.c 프로젝트: spark/firmware
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;
}