Example #1
0
bool
IGCFix::Apply(const NMEAInfo &basic)
{
  if (!basic.time_available)
    return false;

  if (!IsDefined() && !basic.location_available)
    return false;

  /* "Use A for a 3D fix and V for a 2D fix (no GPS altitude) or for
     no GPS data" */
  gps_valid = basic.location_available && basic.gps_altitude_available;

  if (basic.location_available)
    location = basic.location;

  time = basic.date_time_utc;

  gps_altitude = basic.gps_altitude_available
    ? (int)basic.gps_altitude
    : 0;

  pressure_altitude = basic.pressure_altitude_available
    ? (int)basic.pressure_altitude
    : (basic.baro_altitude_available
       /* if there's only baro altitude and no QNH, assume baro
          altitude is good enough */
       ? (int)basic.baro_altitude
       /* if all else fails, fall back to GPS altitude, to avoid
          application bugs (SeeYou is known for display errors) */
       : gps_altitude);

  ClearExtensions();

  enl = basic.engine_noise_level_available
    ? (int16_t) basic.engine_noise_level
    : -1;

  trt = basic.track_available
    ? (int16_t) basic.track.Degrees()
    : -1;

  gsp = basic.ground_speed_available
    ? (int16_t) Units::ToUserUnit(basic.ground_speed, Unit::KILOMETER_PER_HOUR)
    : -1;

  if (basic.airspeed_available) {
    ias = (int16_t) Units::ToUserUnit(basic.indicated_airspeed, Unit::KILOMETER_PER_HOUR);
    tas = (int16_t) Units::ToUserUnit(basic.true_airspeed, Unit::KILOMETER_PER_HOUR);
  }

  siu = basic.gps.satellites_used_available
    ? (int16_t) basic.gps.satellites_used
    : -1;

  return true;
}
Example #2
0
 void Clear() {
   time = BrokenTime::Invalid();
   ClearExtensions();
 }
Example #3
0
 void Clear() {
   time = BrokenTime::Invalid();
   elevation = -1000;
   level = 0;
   ClearExtensions();
 };