예제 #1
0
static void
ConnectionProcessTimer()
{
  static bool connected_last = false;
  static bool location_last = false;
  static bool wait_connect = false;

  const NMEAInfo &basic = CommonInterface::Basic();

  const bool connected_now = basic.alive,
    location_now = basic.location_available;
  if (connected_now) {
    if (location_now) {
      wait_connect = false;
    } else if (!connected_last || location_last) {
      // waiting for lock first time
      InputEvents::processGlideComputer(GCE_GPS_FIX_WAIT);
    }
  } else if (!connected_last) {
    if (!wait_connect) {
      // gps is waiting for connection first time
      wait_connect = true;
      InputEvents::processGlideComputer(GCE_GPS_CONNECTION_WAIT);
    }
  }

  connected_last = connected_now;
  location_last = location_now;

  /* this OperationEnvironment instance must be persistent, because
     DeviceDescriptor::Open() is asynchronous */
  static QuietOperationEnvironment env;
  AllDevicesAutoReopen(env);
}
예제 #2
0
int
ProcessTimer::ConnectionProcessTimer(int itimeout)
{
  if (AllDevicesIsBusy())
    /* don't check for device timeouts during task declaration, as the
       device is busy with that and will not send NMEA updates */
    return itimeout;

  static bool connected_last = false;
  static bool location_last = false;
  static bool wait_connect = false;

  const NMEAInfo &basic = CommonInterface::Basic();

  bool connected_now = basic.connected;
  if (connected_now) {
    if (basic.location_available) {
      wait_connect = false;
      itimeout = 0;
    } else if (!connected_last || location_last) {
      // waiting for lock first time
      itimeout = 0;
      InputEvents::processGlideComputer(GCE_GPS_FIX_WAIT);
    }
  }

  if (!connected_now && !connected_last) {
    if (!wait_connect) {
      // gps is waiting for connection first time
      wait_connect = true;
      InputEvents::processGlideComputer(GCE_GPS_CONNECTION_WAIT);
    }
  }

  PopupOperationEnvironment env;
  AllDevicesAutoReopen(env);

  connected_last = connected_now;
  location_last = basic.location_available;
  return itimeout;
}