TM_GPS_Result_t TM_GPS_Update(TM_GPS_Data_t* GPS_Data) { if (!TM_USART_BufferEmpty(GPS_USART)) { while (!TM_USART_BufferEmpty(GPS_USART)) { TM_GPS_INT_Do(GPS_Data, (char)TM_USART_Getc(GPS_USART)); if (GPS_Data->Status == TM_GPS_Result_NewData) { return GPS_Data->Status; } } } if (TM_GPS_FirstTime) { /* No any valid data, return First Data Waiting */ /* Returning only after power up and calling when no all data is received */ return TM_GPS_INT_ReturnWithStatus(GPS_Data, TM_GPS_Result_FirstDataWaiting); } /* We have old data */ return TM_GPS_INT_ReturnWithStatus(GPS_Data, TM_GPS_Result_OldData); }
TM_GPS_Result_t TM_GPS_Update(TM_GPS_t* GPS_Data) { /* Check for data in USART */ while (!GPS_USART_BUFFER_EMPTY) { TM_GPS_INT_Do(GPS_Data, (char)GPS_USART_BUFFER_GET_CHAR); if (GPS_Data->Status == TM_GPS_Result_NewData) { return GPS_Data->Status; } } if (TM_GPS_FirstTime) { /* No any valid data, return First Data Waiting */ /* Returning only after power up and calling when no all data is received */ TM_GPS_INT_ReturnWithStatus(GPS_Data, TM_GPS_Result_FirstDataWaiting); } /* We have old data */ TM_GPS_INT_ReturnWithStatus(GPS_Data, TM_GPS_Result_OldData); }
TM_GPS_Result_t TM_GPS_INT_Return(TM_GPS_t* GPS_Data) { uint8_t i; if (TM_GPS_INT_FlagsOk(GPS_Data)) { TM_GPS_FirstTime = 0; /* Clear first time */ /* Set data */ #ifndef GPS_DISABLE_GPGGA GPS_Data->Latitude = TM_GPS_INT_Data.Latitude; GPS_Data->Longitude = TM_GPS_INT_Data.Longitude; GPS_Data->Satellites = TM_GPS_INT_Data.Satellites; GPS_Data->Fix = TM_GPS_INT_Data.Fix; GPS_Data->Altitude = TM_GPS_INT_Data.Altitude; GPS_Data->Time = TM_GPS_INT_Data.Time; #endif #ifndef GPS_DISABLE_GPRMC GPS_Data->Speed = TM_GPS_INT_Data.Speed; GPS_Data->Date = TM_GPS_INT_Data.Date; GPS_Data->Validity = TM_GPS_INT_Data.Validity; GPS_Data->Direction = TM_GPS_INT_Data.Direction; #endif #ifndef GPS_DISABLE_GPGSA GPS_Data->HDOP = TM_GPS_INT_Data.HDOP; GPS_Data->VDOP = TM_GPS_INT_Data.VDOP; GPS_Data->PDOP = TM_GPS_INT_Data.PDOP; GPS_Data->FixMode = TM_GPS_INT_Data.FixMode; for (i = 0; i < 12; i++) { GPS_Data->SatelliteIDs[i] = TM_GPS_INT_Data.SatelliteIDs[i]; } #endif #ifndef GPS_DISABLE_GPGSV GPS_Data->SatellitesInView = TM_GPS_INT_Data.SatellitesInView; for (i = 0; i < GPS_MAX_SATS_IN_VIEW; i++) { GPS_Data->SatDesc[i] = TM_GPS_INT_Data.SatDesc[i]; } #endif TM_GPS_INT_ReturnWithStatus(GPS_Data, TM_GPS_Result_NewData); /* Return new data */ } if (TM_GPS_FirstTime) { TM_GPS_INT_ReturnWithStatus(GPS_Data, TM_GPS_Result_FirstDataWaiting); /* We are first time */ } TM_GPS_INT_ReturnWithStatus(GPS_Data, TM_GPS_Result_OldData); /* Return old data */ }