|
|
@ -179,21 +179,14 @@ SRV_Channels::SRV_Channels(void) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
// remap a PWM value from a channel in value
|
|
|
|
remap radio_out values for first 4 servos using SERVO* parameters, if enabled |
|
|
|
uint16_t SRV_Channels::remap_pwm(uint8_t i, uint16_t pwm) const |
|
|
|
This should be called with cork enabled in hal.rcout |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
void SRV_Channels::remap_servo_output(void) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
if (!enable) { |
|
|
|
const RC_Channel *ch = RC_Channel::rc_channel(i); |
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
for (uint8_t i=0; i<NUM_SERVO_RANGE_CHANNELS; i++) { |
|
|
|
|
|
|
|
RC_Channel *ch = RC_Channel::rc_channel(i); |
|
|
|
|
|
|
|
if (ch == nullptr) { |
|
|
|
if (ch == nullptr) { |
|
|
|
continue; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
float v = ch->get_radio_out_normalised(); |
|
|
|
float v = ch->get_radio_out_normalised(pwm); |
|
|
|
uint16_t radio_out; |
|
|
|
uint16_t radio_out; |
|
|
|
if (ch->get_type_out() == RC_CHANNEL_TYPE_RANGE) { |
|
|
|
if (ch->get_type_out() == RC_CHANNEL_TYPE_RANGE) { |
|
|
|
if (reverse[i] == -1) { |
|
|
|
if (reverse[i] == -1) { |
|
|
@ -210,7 +203,48 @@ void SRV_Channels::remap_servo_output(void) |
|
|
|
radio_out = servo_trim[i] + v * (servo_trim[i] - servo_min[i]); |
|
|
|
radio_out = servo_trim[i] + v * (servo_trim[i] - servo_min[i]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return radio_out; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
remap radio_out values for first 4 servos using SERVO* parameters, if enabled |
|
|
|
|
|
|
|
This should be called with cork enabled in hal.rcout |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
void SRV_Channels::remap_servo_output(void) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (!enable) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
for (uint8_t i=0; i<NUM_SERVO_RANGE_CHANNELS; i++) { |
|
|
|
|
|
|
|
RC_Channel *ch = RC_Channel::rc_channel(i); |
|
|
|
|
|
|
|
if (ch == nullptr) { |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
uint16_t radio_out = remap_pwm(i, ch->get_radio_out()); |
|
|
|
ch->set_radio_out(radio_out); |
|
|
|
ch->set_radio_out(radio_out); |
|
|
|
ch->output(); |
|
|
|
ch->output(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
set trim values for output channels |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
void SRV_Channels::set_trim(void) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (!enable) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
for (uint8_t i=0; i<NUM_SERVO_RANGE_CHANNELS; i++) { |
|
|
|
|
|
|
|
const RC_Channel *ch = RC_Channel::rc_channel(i); |
|
|
|
|
|
|
|
if (ch == nullptr) { |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (ch->get_type_out() == RC_CHANNEL_TYPE_RANGE) { |
|
|
|
|
|
|
|
// we don't trim range channels (like throttle)
|
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
uint16_t new_trim = remap_pwm(i, ch->get_radio_trim()); |
|
|
|
|
|
|
|
servo_trim[i].set_and_save(new_trim); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|