コード例 #1
0
ファイル: rx.c プロジェクト: oleost/inav
static void readRxChannelsApplyRanges(void)
{
    for (int channel = 0; channel < rxRuntimeConfig.channelCount; channel++) {

        const uint8_t rawChannel = calculateChannelRemapping(rxConfig->rcmap, REMAPPABLE_CHANNEL_COUNT, channel);

        // sample the channel
        uint16_t sample = (*rxRuntimeConfig.rcReadRawFn)(&rxRuntimeConfig, rawChannel);

        // apply the rx calibration
        if (channel < NON_AUX_CHANNEL_COUNT) {
            sample = applyRxChannelRangeConfiguraton(sample, rxConfig->channelRanges[channel]);
        }

        rcRaw[channel] = sample;
    }
}
コード例 #2
0
ファイル: rx.c プロジェクト: bitogre/cleanflight
static void processRxChannels(void)
{
    uint8_t chan;

    if (feature(FEATURE_RX_MSP)) {
        return; // rcData will have already been updated by MSP_SET_RAW_RC
    }

    rxPwmFlightChannelsAreGood = false;

    for (chan = 0; chan < rxRuntimeConfig.channelCount; chan++) {

        if (!rcReadRawFunc) {
            rcData[chan] = getRxfailValue(chan);
            continue;
        }

        uint8_t rawChannel = calculateChannelRemapping(rxConfig->rcmap, REMAPPABLE_CHANNEL_COUNT, chan);

        // sample the channel
        uint16_t sample = rcReadRawFunc(&rxRuntimeConfig, rawChannel);

        if (shouldCheckPulse) {
            rxCheckPulse(chan, sample);
        }

        // validate the range and check if rx signal is received
        if (sample < rxConfig->rx_min_usec || sample > rxConfig->rx_max_usec || !rxSignalReceived) {
            sample = getRxfailValue(chan);
        }

        if (isRxDataDriven()) {
            rcData[chan] = sample;
        } else {
            rcData[chan] = calculateNonDataDrivenChannel(chan, sample);
        }
    }

    // Using PARALLEL PWM and one of the 4 control channels is out of range:
    // Probably one of the cables came loose, all channels are set to rxfail values
    if ((rxPwmFlightChannelsAreGood == false) && feature(FEATURE_RX_PARALLEL_PWM)) {
        for (chan = 0; chan < rxRuntimeConfig.channelCount; chan++) {
            rcData[chan] = getRxfailValue(chan);
        }
    }
}
コード例 #3
0
ファイル: rx.c プロジェクト: Andriiy/cleanflight
static void readRxChannelsApplyRanges(void)
{
    uint8_t channel;

    for (channel = 0; channel < rxRuntimeConfig.channelCount; channel++) {

        uint8_t rawChannel = calculateChannelRemapping(rxConfig()->rcmap, ARRAYLEN(rxConfig()->rcmap), channel);

        // sample the channel
        uint16_t sample = rcReadRawFunc(&rxRuntimeConfig, rawChannel);

        // apply the rx calibration
        if (channel < NON_AUX_CHANNEL_COUNT) {
            sample = applyRxChannelRangeConfiguraton(sample, channelRanges(channel));
        }

        rcRaw[channel] = sample;
    }
}