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); } }
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); } }