@ -673,6 +673,7 @@ PX4FMU::set_mode(Mode mode)
if ( old_mask ! = _pwm_mask ) {
if ( old_mask ! = _pwm_mask ) {
/* disable servo outputs - no need to set rates */
/* disable servo outputs - no need to set rates */
up_pwm_servo_deinit ( ) ;
up_pwm_servo_deinit ( ) ;
return OK ;
}
}
break ;
break ;
@ -680,8 +681,8 @@ PX4FMU::set_mode(Mode mode)
default :
default :
return - EINVAL ;
return - EINVAL ;
}
}
_mode = mode ;
_mode = mode ;
up_pwm_servo_init ( _pwm_mask ) ;
return OK ;
return OK ;
}
}
@ -1048,7 +1049,6 @@ void
PX4FMU : : update_pwm_out_state ( bool on )
PX4FMU : : update_pwm_out_state ( bool on )
{
{
if ( on & & ! _pwm_initialized & & _pwm_mask ! = 0 ) {
if ( on & & ! _pwm_initialized & & _pwm_mask ! = 0 ) {
up_pwm_servo_init ( _pwm_mask ) ;
set_pwm_rate ( _pwm_alt_rate_channels , _pwm_default_rate , _pwm_alt_rate ) ;
set_pwm_rate ( _pwm_alt_rate_channels , _pwm_default_rate , _pwm_alt_rate ) ;
_pwm_initialized = true ;
_pwm_initialized = true ;
}
}
@ -1251,7 +1251,7 @@ PX4FMU::cycle()
/* do mixing */
/* do mixing */
float outputs [ _max_actuators ] ;
float outputs [ _max_actuators ] ;
_num_outputs = _mixers - > mix ( outputs , _num_outputs , NULL ) ;
size_t mixed _num_outputs = _mixers - > mix ( outputs , _num_outputs , NULL ) ;
/* publish mixer status */
/* publish mixer status */
multirotor_motor_limits_s multirotor_motor_limits = { } ;
multirotor_motor_limits_s multirotor_motor_limits = { } ;
@ -1270,7 +1270,7 @@ PX4FMU::cycle()
/* disable unused ports by setting their output to NaN */
/* disable unused ports by setting their output to NaN */
for ( size_t i = 0 ; i < sizeof ( outputs ) / sizeof ( outputs [ 0 ] ) ; i + + ) {
for ( size_t i = 0 ; i < sizeof ( outputs ) / sizeof ( outputs [ 0 ] ) ; i + + ) {
if ( i > = _num_outputs ) {
if ( i > = mixed _num_outputs) {
outputs [ i ] = NAN_VALUE ;
outputs [ i ] = NAN_VALUE ;
}
}
}
}
@ -1278,26 +1278,26 @@ PX4FMU::cycle()
uint16_t pwm_limited [ _max_actuators ] ;
uint16_t pwm_limited [ _max_actuators ] ;
/* the PWM limit call takes care of out of band errors, NaN and constrains */
/* the PWM limit call takes care of out of band errors, NaN and constrains */
pwm_limit_calc ( _throttle_armed , arm_nothrottle ( ) , _num_outputs , _reverse_pwm_mask ,
pwm_limit_calc ( _throttle_armed , arm_nothrottle ( ) , mixed _num_outputs, _reverse_pwm_mask ,
_disarmed_pwm , _min_pwm , _max_pwm , outputs , pwm_limited , & _pwm_limit ) ;
_disarmed_pwm , _min_pwm , _max_pwm , outputs , pwm_limited , & _pwm_limit ) ;
/* overwrite outputs in case of force_failsafe with _failsafe_pwm PWM values */
/* overwrite outputs in case of force_failsafe with _failsafe_pwm PWM values */
if ( _armed . force_failsafe ) {
if ( _armed . force_failsafe ) {
for ( size_t i = 0 ; i < _num_outputs ; i + + ) {
for ( size_t i = 0 ; i < mixed _num_outputs; i + + ) {
pwm_limited [ i ] = _failsafe_pwm [ i ] ;
pwm_limited [ i ] = _failsafe_pwm [ i ] ;
}
}
}
}
/* overwrite outputs in case of lockdown with disarmed PWM values */
/* overwrite outputs in case of lockdown with disarmed PWM values */
if ( _armed . lockdown | | _armed . manual_lockdown ) {
if ( _armed . lockdown | | _armed . manual_lockdown ) {
for ( size_t i = 0 ; i < _num_outputs ; i + + ) {
for ( size_t i = 0 ; i < mixed _num_outputs; i + + ) {
pwm_limited [ i ] = _disarmed_pwm [ i ] ;
pwm_limited [ i ] = _disarmed_pwm [ i ] ;
}
}
}
}
/* output to the servos */
/* output to the servos */
for ( size_t i = 0 ; i < _num_outputs ; i + + ) {
for ( size_t i = 0 ; i < mixed _num_outputs; i + + ) {
pwm_output_set ( i , pwm_limited [ i ] ) ;
pwm_output_set ( i , pwm_limited [ i ] ) ;
}
}
@ -1309,7 +1309,7 @@ PX4FMU::cycle()
up_pwm_update ( ) ;
up_pwm_update ( ) ;
}
}
publish_pwm_outputs ( pwm_limited , _num_outputs ) ;
publish_pwm_outputs ( pwm_limited , mixed _num_outputs) ;
perf_end ( _ctl_latency ) ;
perf_end ( _ctl_latency ) ;
}
}
}
}