int main(void) { Systick_Init(); while (1) { gps.update(); if(gps.fix()) { latitude = gps.latitude(); longitude = gps.longitude(); time = gps.time(); date = gps.date(); } } }
// Called the first time that a client tries to kick the GPS to update. // // We detect the real GPS, then update the pointer we have been called through // and return. // /// @todo This routine spends a long time trying to detect a GPS. That's not strictly /// desirable; it might be a good idea to rethink the logic here to make it /// more asynchronous, so that other parts of the system can get a chance /// to run while GPS detection is in progress. /// bool AP_GPS_Auto::read(void) { GPS *gps; uint8_t i; uint32_t then; // Loop through possible baudrates trying to detect a GPS at one of them. // // Note that we need to have a FastSerial rather than a Stream here because // Stream has no idea of line speeds. FastSerial is quite OK with us calling // ::begin any number of times. // for (i = 0; i < (sizeof(baudrates) / sizeof(baudrates[0])); i++) { _fs->begin(baudrates[i]); if (NULL != (gps = _detect())) { // configure the detected GPS and give it a chance to listen to its device gps->init(); then = millis(); while ((millis() - then) < 1200) { // if we get a successful update from the GPS, we are done gps->new_data = false; gps->update(); if (gps->new_data) { Serial.println_P(PSTR("OK")); Serial.print("GPS:"); Serial.println(baudrates[i]); *_gps = gps; return true; } } // GPS driver failed to parse any data from GPS, // delete the driver and continue the process. Serial.println_P(PSTR("failed, retrying")); delete gps; } } return false; }