You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

42 lines
1.1 KiB

#include "mode.h"
#include "Plane.h"
bool ModeCruise::_enter()
{
plane.throttle_allows_nudging = false;
plane.auto_throttle_mode = true;
plane.auto_navigation_mode = false;
plane.cruise_state.locked_heading = false;
plane.cruise_state.lock_timer_ms = 0;
#if SOARING_ENABLED == ENABLED
// for ArduSoar soaring_controller
plane.g2.soaring_controller.init_cruising();
#endif
plane.set_target_altitude_current();
return true;
}
void ModeCruise::update()
{
/*
in CRUISE mode we use the navigation code to control
roll when heading is locked. Heading becomes unlocked on
any aileron or rudder input
*/
if (plane.channel_roll->get_control_in() != 0 || plane.channel_rudder->get_control_in() != 0) {
plane.cruise_state.locked_heading = false;
plane.cruise_state.lock_timer_ms = 0;
}
if (!plane.cruise_state.locked_heading) {
plane.nav_roll_cd = plane.channel_roll->norm_input() * plane.roll_limit_cd;
plane.update_load_factor();
} else {
plane.calc_nav_roll();
}
plane.update_fbwb_speed_height();
}