From eaa9d97939d65b8aff72a66a0ae34135e94b469d Mon Sep 17 00:00:00 2001 From: vassilis Date: Thu, 10 Jun 2010 01:28:06 +0000 Subject: [PATCH] Flight/GPS Renamed GPSObject to PositionActual and implemented field for GPS status (NoGPS, NoFix, Fix2D and Fix3D) git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@734 ebee16cc-31ac-478f-84a7-5cbb03baadba --- flight/OpenPilot/Makefile | 2 +- flight/OpenPilot/Modules/GPS/GPS.c | 75 +++++++++++---- flight/OpenPilot/UAVObjects/inc/gpsobject.h | 92 ------------------- .../OpenPilot/UAVObjects/inc/positionactual.h | 92 +++++++++++++++++++ .../{gpsobject.c => positionactual.c} | 20 ++-- flight/OpenPilot/UAVObjects/uavobjectsinit.c | 4 +- 6 files changed, 160 insertions(+), 125 deletions(-) delete mode 100644 flight/OpenPilot/UAVObjects/inc/gpsobject.h create mode 100644 flight/OpenPilot/UAVObjects/inc/positionactual.h rename flight/OpenPilot/UAVObjects/{gpsobject.c => positionactual.c} (79%) diff --git a/flight/OpenPilot/Makefile b/flight/OpenPilot/Makefile index 03ea388cd..832dd66f1 100644 --- a/flight/OpenPilot/Makefile +++ b/flight/OpenPilot/Makefile @@ -131,7 +131,7 @@ SRC += $(OPUAVOBJ)/exampleobject1.c SRC += $(OPUAVOBJ)/exampleobject2.c SRC += $(OPUAVOBJ)/examplesettings.c SRC += $(OPUAVOBJ)/objectpersistence.c -SRC += $(OPUAVOBJ)/gpsobject.c +SRC += $(OPUAVOBJ)/positionactual.c SRC += $(OPUAVOBJ)/gcstelemetrystats.c SRC += $(OPUAVOBJ)/flighttelemetrystats.c SRC += $(OPUAVOBJ)/systemstats.c diff --git a/flight/OpenPilot/Modules/GPS/GPS.c b/flight/OpenPilot/Modules/GPS/GPS.c index 2df32769a..b9b6d2a59 100644 --- a/flight/OpenPilot/Modules/GPS/GPS.c +++ b/flight/OpenPilot/Modules/GPS/GPS.c @@ -26,7 +26,7 @@ #include "openpilot.h" #include "buffer.h" #include "GPS.h" -#include "gpsobject.h" +#include "positionactual.h" // constants/macros/typdefs #define NMEA_BUFFERSIZE 128 @@ -41,6 +41,8 @@ #define NMEA_GPRMC 6 // Recommended minimum specific GPS data #define NMEA_UNKNOWN 0xFF// Packet received but not known +#define GPS_TIMEOUT_MS 500 + // Debugging //#define GPSDEBUG @@ -79,6 +81,9 @@ static xTaskHandle gpsTaskHandle; cBuffer gpsRxBuffer; static char gpsRxData[512]; char NmeaPacket[NMEA_BUFFERSIZE]; +static uint32_t numUpdates; +static uint32_t numErrors; +static uint32_t timeOfLastUpdateMs; /** * Initialise the gps module @@ -88,6 +93,12 @@ char NmeaPacket[NMEA_BUFFERSIZE]; int32_t GPSInitialize(void) { signed portBASE_TYPE xReturn; + + // Init vars + numUpdates = 0; + numErrors = 0; + timeOfLastUpdateMs = 0; + // TODO: Get gps settings object gpsPort = COM_USART2; @@ -109,6 +120,8 @@ static void gpsTask(void* parameters) int32_t gpsRxOverflow=0; char c; portTickType xDelay = 100 / portTICK_RATE_MS; + PositionActualData GpsData; + uint32_t timeNowMs; // Loop forever while(1) @@ -126,6 +139,15 @@ static void gpsTask(void* parameters) } nmeaProcess(&gpsRxBuffer); } + // Check for GPS timeout + timeNowMs = xTaskGetTickCount() * portTICK_RATE_MS; + if ( (timeNowMs - timeOfLastUpdateMs) > GPS_TIMEOUT_MS ) + { + PositionActualGet(&GpsData); + GpsData.Status = POSITIONACTUAL_STATUS_NOGPS; + PositionActualSet(&GpsData); + } + // Block task until next update vTaskDelay(xDelay); } } @@ -145,8 +167,8 @@ char nmeaChecksum(char* gps_buffer) { char checksum=0; char checksum_received=0; - GpsObjectData GpsData; - GpsObjectGet(&GpsData); + PositionActualData GpsData; + PositionActualGet(&GpsData); for(int x=0; x