Altitude and decimal degrees positions can be negative!
Without this patch, dangerous overflows can happen.
Also fix some minor documentation issues.
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3896
38d2e660-2303-0410-9eaa-
f027e97ec537
* Return altitude in meter from a string.
*
*/
* Return altitude in meter from a string.
*
*/
-static uint16_t nmea_altitude(const char *palt, const char *punits)
+static int32_t nmea_altitude(const char *palt, const char *punits)
if (*palt == 0)
return 0;
if (*palt == 0)
return 0;
#define NMEA_GPGSV 4 // GSV MESSAGE ID
// Standart type to rappresent fiels.
#define NMEA_GPGSV 4 // GSV MESSAGE ID
// Standart type to rappresent fiels.
-typedef uint32_t udegree_t; // Micro degrees
-typedef uint32_t mdegree_t; // Milli degrees
-typedef uint16_t degree_t; // Degrees
+typedef int32_t udegree_t; // Micro degrees
+typedef int32_t mdegree_t; // Milli degrees
+typedef int16_t degree_t; // Degrees
/**
* Global Positioning System Fix Data.
* Extracted data from a GGA message
*
/**
* Global Positioning System Fix Data.
* Extracted data from a GGA message
*
- * Note: time membert containt the second elapsed from 00:00:00 1/1/1970,
- * becouse from nmea sentence we read only the time of UTC position, we
- * not have any reference of date (day, month and year) so time is refered to
+ * Note: time member contains the seconds elapsed from 00:00:00 1/1/1970,
+ * because from nmea sentence we read only the time of UTC position, we
+ * have not any reference of date (day, month and year) so time is referred to
* the start of unix time.
*/
typedef struct NmeaGga
{
udegree_t latitude; /* Latitude (micro degree) */
udegree_t longitude; /* Longitude (micro degree) */
* the start of unix time.
*/
typedef struct NmeaGga
{
udegree_t latitude; /* Latitude (micro degree) */
udegree_t longitude; /* Longitude (micro degree) */
- uint16_t altitude; /* Altitude (Meter) */
+ int32_t altitude; /* Altitude (Meter) */
time_t time; /* UTC of position (Unix time) */
uint16_t satellites; /* Satellites are in view */
uint16_t quality; /* Fix Quality: 0 = Invalid; 1 = GPS fix; 2 = DGPS fix; */
uint16_t hdop; /* Relative accuracy of horizontal position (hdop * 10) */
time_t time; /* UTC of position (Unix time) */
uint16_t satellites; /* Satellites are in view */
uint16_t quality; /* Fix Quality: 0 = Invalid; 1 = GPS fix; 2 = DGPS fix; */
uint16_t hdop; /* Relative accuracy of horizontal position (hdop * 10) */
- uint16_t geoid; /* Height of geoid above WGS84 ellipsoid (Meter) */
+ int16_t geoid; /* Height of geoid above WGS84 ellipsoid (Meter) */
} NmeaGga;
/**
* Recommended minimum specific GPS/Transit data.
* Extracted data from an RMC message
*
} NmeaGga;
/**
* Recommended minimum specific GPS/Transit data.
* Extracted data from an RMC message
*
- * Note: RMC sentece contain also date stamp so, time contain real second elapsed
+ * Note: RMC sentences contain also date stamp so, time contains real seconds elapsed
* from 0:00:00 1/1/1970.
*/
typedef struct NmeaRmc
* from 0:00:00 1/1/1970.
*/
typedef struct NmeaRmc