Exemplo n.º 1
0
void
TaskAutoPilot::update_mode(const TaskAccessor& task,
                           const AircraftState& state)
{
    switch (acstate) {
    case Cruise:
        /* XXX this condition is probably broken */
        if (awp > 0 && !negative(task.remaining_alt_difference())) {
            acstate = FinalGlide;
            on_mode_change();
        } else {
            if (state.altitude<=target_height(task)) {
                acstate = Climb;
                on_mode_change();
            }
        }
        break;
    case FinalGlide:
        if (task.remaining_alt_difference()<-fixed_20) {
            acstate = Climb;
            on_mode_change();
        }
        break;
    case Climb:
        /* XXX this condition is probably broken */
        if (awp > 0 && !negative(task.remaining_alt_difference())) {
            acstate = FinalGlide;
            on_mode_change();
        } else if (state.altitude>=fixed_1500) {
            acstate = Cruise;
            on_mode_change();
        }
        break;
    };
}
Exemplo n.º 2
0
void
TaskAutoPilot::update_mode(const TaskAccessor& task,
                           const AIRCRAFT_STATE& state)
{
  switch (acstate) {
  case Cruise:
    if ((awp>0) &&
        (task.distance_to_final()<= state.Speed)) {
      acstate = FinalGlide;
      on_mode_change();
    } else {
      if (state.NavAltitude<=target_height(task)) {
        acstate = Climb;
        on_mode_change();
      }
    }
    break;
  case FinalGlide:
    if (task.remaining_alt_difference()<-fixed_20) {
      acstate = Climb;
      on_mode_change();
    }
    break;
  case Climb:
    if ((awp>0) &&
        (task.distance_to_final()<= state.Speed)) {
      acstate = FinalGlide;
      on_mode_change();
    } else if (state.NavAltitude>=fixed_1500) {
      acstate = Cruise;
      on_mode_change();
    }
    break;
  };
}