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); }
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; }