Exemple #1
0
static uint16_t getRxfailValue(uint8_t channel)
{
    rxFailsafeChannelConfiguration_t *channelFailsafeConfiguration = &rxConfig->failsafe_channel_configurations[channel];

    switch(channelFailsafeConfiguration->mode) {
        case RX_FAILSAFE_MODE_AUTO:
            switch (channel) {
                case ROLL:
                case PITCH:
                case YAW:
                    return rxConfig->midrc;

                case THROTTLE:
                    if (feature(FEATURE_3D))
                        return rxConfig->midrc;
                    else
                        return rxConfig->rx_min_usec;
            }
            /* no break */

        default:
        case RX_FAILSAFE_MODE_INVALID:
        case RX_FAILSAFE_MODE_HOLD:
            return rcData[channel];

        case RX_FAILSAFE_MODE_SET:
            return RXFAIL_STEP_TO_CHANNEL_VALUE(channelFailsafeConfiguration->step);
    }
}
Exemple #2
0
static uint16_t getRxfailValue(uint8_t channel)
{
    rxFailsafeChannelConfig_t *failsafeChannelConfig = failsafeChannelConfigs(channel);
    uint8_t mode = failsafeChannelConfig->mode;

    // force auto mode to prevent fly away when failsafe stage 2 is disabled
    if ( channel < NON_AUX_CHANNEL_COUNT && (!feature(FEATURE_FAILSAFE)) ) {
        mode = RX_FAILSAFE_MODE_AUTO;
    }

    switch(mode) {
        case RX_FAILSAFE_MODE_AUTO:
            switch (channel) {
                case ROLL:
                case PITCH:
                case YAW:
                    return rxConfig()->midrc;

                case THROTTLE:
                    if (feature(FEATURE_3D))
                        return rxConfig()->midrc;
                    else
                        return rxConfig()->rx_min_usec;
            }
            /* no break */

        default:
        case RX_FAILSAFE_MODE_INVALID:
        case RX_FAILSAFE_MODE_HOLD:
            return rcData[channel];

        case RX_FAILSAFE_MODE_SET:
            return RXFAIL_STEP_TO_CHANNEL_VALUE(failsafeChannelConfig->step);
    }
}