Addition of vertical/speed/bearing accuracy feilds
Fill in the new feilds of vertical/speed/bearing accuracy into hidl structure CRs-fixed: 2021399 Change-Id: I409e2559e671e65c307758ee273c64f98f650c11
This commit is contained in:
parent
db80463553
commit
af318504e2
4 changed files with 41 additions and 37 deletions
|
@ -46,21 +46,23 @@ void convertGnssLocation(Location& in, GnssLocation& out)
|
||||||
out.gnssLocationFlags |= GnssLocationFlags::HAS_SPEED;
|
out.gnssLocationFlags |= GnssLocationFlags::HAS_SPEED;
|
||||||
if (in.flags & LOCATION_HAS_BEARING_BIT)
|
if (in.flags & LOCATION_HAS_BEARING_BIT)
|
||||||
out.gnssLocationFlags |= GnssLocationFlags::HAS_BEARING;
|
out.gnssLocationFlags |= GnssLocationFlags::HAS_BEARING;
|
||||||
if (in.flags & LOCATION_HAS_ACCURACY_BIT) {
|
if (in.flags & LOCATION_HAS_ACCURACY_BIT)
|
||||||
out.gnssLocationFlags |= GnssLocationFlags::HAS_HORIZONTAL_ACCURACY;
|
out.gnssLocationFlags |= GnssLocationFlags::HAS_HORIZONTAL_ACCURACY;
|
||||||
//out.gnssLocationFlags |= GnssLocationFlags::HAS_VERTICAL_ACCURACY;
|
if (in.flags & LOCATION_HAS_VERTICAL_ACCURACY_BIT)
|
||||||
//out.gnssLocationFlags |= GnssLocationFlags::HAS_SPEED_ACCURACY;
|
out.gnssLocationFlags |= GnssLocationFlags::HAS_VERTICAL_ACCURACY;
|
||||||
//out.gnssLocationFlags |= GnssLocationFlags::HAS_BEARING_ACCURACY;
|
if (in.flags & LOCATION_HAS_SPEED_ACCURACY_BIT)
|
||||||
}
|
out.gnssLocationFlags |= GnssLocationFlags::HAS_SPEED_ACCURACY;
|
||||||
|
if (in.flags & LOCATION_HAS_BEARING_ACCURACY_BIT)
|
||||||
|
out.gnssLocationFlags |= GnssLocationFlags::HAS_BEARING_ACCURACY;
|
||||||
out.latitudeDegrees = in.latitude;
|
out.latitudeDegrees = in.latitude;
|
||||||
out.longitudeDegrees = in.longitude;
|
out.longitudeDegrees = in.longitude;
|
||||||
out.altitudeMeters = in.altitude;
|
out.altitudeMeters = in.altitude;
|
||||||
out.speedMetersPerSec = in.speed;
|
out.speedMetersPerSec = in.speed;
|
||||||
out.bearingDegrees = in.bearing;
|
out.bearingDegrees = in.bearing;
|
||||||
out.horizontalAccuracyMeters = in.accuracy;
|
out.horizontalAccuracyMeters = in.accuracy;
|
||||||
//out.verticalAccuracyMeters = in.accuracy;
|
out.verticalAccuracyMeters = in.verticalAccuracy;
|
||||||
//out.speedAccuracyMetersPerSecond = in.accuracy;
|
out.speedAccuracyMetersPerSecond = in.speedAccuracy;
|
||||||
//out.bearingAccuracyDegrees = in.accuracy;
|
out.bearingAccuracyDegrees = in.bearingAccuracy;
|
||||||
out.timestamp = static_cast<GnssUtcTime>(in.timestamp);
|
out.timestamp = static_cast<GnssUtcTime>(in.timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,7 @@ GnssAdapter::convertOptions(LocPosMode& out, const LocationOptions& options)
|
||||||
|
|
||||||
void
|
void
|
||||||
GnssAdapter::convertLocation(Location& out, const LocGpsLocation& locGpsLocation,
|
GnssAdapter::convertLocation(Location& out, const LocGpsLocation& locGpsLocation,
|
||||||
|
const GpsLocationExtended& locationExtended,
|
||||||
const LocPosTechMask techMask)
|
const LocPosTechMask techMask)
|
||||||
{
|
{
|
||||||
out.size = sizeof(Location);
|
out.size = sizeof(Location);
|
||||||
|
@ -137,6 +138,18 @@ GnssAdapter::convertLocation(Location& out, const LocGpsLocation& locGpsLocation
|
||||||
out.flags |= LOCATION_HAS_ACCURACY_BIT;
|
out.flags |= LOCATION_HAS_ACCURACY_BIT;
|
||||||
out.accuracy = locGpsLocation.accuracy;
|
out.accuracy = locGpsLocation.accuracy;
|
||||||
}
|
}
|
||||||
|
if (GPS_LOCATION_EXTENDED_HAS_VERT_UNC & locationExtended.flags) {
|
||||||
|
out.flags |= LOCATION_HAS_VERTICAL_ACCURACY_BIT;
|
||||||
|
out.verticalAccuracy = locationExtended.vert_unc;
|
||||||
|
}
|
||||||
|
if (GPS_LOCATION_EXTENDED_HAS_SPEED_UNC & locationExtended.flags) {
|
||||||
|
out.flags |= LOCATION_HAS_SPEED_ACCURACY_BIT;
|
||||||
|
out.speedAccuracy = locationExtended.speed_unc;
|
||||||
|
}
|
||||||
|
if (GPS_LOCATION_EXTENDED_HAS_BEARING_UNC & locationExtended.flags) {
|
||||||
|
out.flags |= LOCATION_HAS_BEARING_ACCURACY_BIT;
|
||||||
|
out.bearingAccuracy = locationExtended.bearing_unc;
|
||||||
|
}
|
||||||
out.timestamp = locGpsLocation.timestamp;
|
out.timestamp = locGpsLocation.timestamp;
|
||||||
if (LOC_POS_TECH_MASK_SATELLITE & techMask) {
|
if (LOC_POS_TECH_MASK_SATELLITE & techMask) {
|
||||||
out.techMask |= LOCATION_TECHNOLOGY_GNSS_BIT;
|
out.techMask |= LOCATION_TECHNOLOGY_GNSS_BIT;
|
||||||
|
@ -171,18 +184,6 @@ GnssAdapter::convertLocationInfo(GnssLocationInfoNotification& out,
|
||||||
out.flags |= GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT;
|
out.flags |= GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT;
|
||||||
out.magneticDeviation = locationExtended.magneticDeviation;
|
out.magneticDeviation = locationExtended.magneticDeviation;
|
||||||
}
|
}
|
||||||
if (GPS_LOCATION_EXTENDED_HAS_VERT_UNC & locationExtended.flags) {
|
|
||||||
out.flags |= GNSS_LOCATION_INFO_VER_ACCURACY_BIT;
|
|
||||||
out.verAccuracy = locationExtended.vert_unc;
|
|
||||||
}
|
|
||||||
if (GPS_LOCATION_EXTENDED_HAS_SPEED_UNC & locationExtended.flags) {
|
|
||||||
out.flags |= GNSS_LOCATION_INFO_SPEED_ACCURACY_BIT;
|
|
||||||
out.speedAccuracy = locationExtended.speed_unc;
|
|
||||||
}
|
|
||||||
if (GPS_LOCATION_EXTENDED_HAS_BEARING_UNC & locationExtended.flags) {
|
|
||||||
out.flags |= GNSS_LOCATION_INFO_BEARING_ACCURACY_BIT;
|
|
||||||
out.bearingAccuracy = locationExtended.bearing_unc;
|
|
||||||
}
|
|
||||||
if (GPS_LOCATION_EXTENDED_HAS_HOR_RELIABILITY & locationExtended.flags) {
|
if (GPS_LOCATION_EXTENDED_HAS_HOR_RELIABILITY & locationExtended.flags) {
|
||||||
out.flags |= GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT;
|
out.flags |= GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT;
|
||||||
switch (locationExtended.horizontal_reliability) {
|
switch (locationExtended.horizontal_reliability) {
|
||||||
|
@ -1858,7 +1859,7 @@ GnssAdapter::reportPosition(const UlpLocation& ulpLocation,
|
||||||
for (auto it=mClientData.begin(); it != mClientData.end(); ++it) {
|
for (auto it=mClientData.begin(); it != mClientData.end(); ++it) {
|
||||||
if (nullptr != it->second.trackingCb) {
|
if (nullptr != it->second.trackingCb) {
|
||||||
Location location = {};
|
Location location = {};
|
||||||
convertLocation(location, ulpLocation.gpsLocation, techMask);
|
convertLocation(location, ulpLocation.gpsLocation, locationExtended, techMask);
|
||||||
it->second.trackingCb(location);
|
it->second.trackingCb(location);
|
||||||
}
|
}
|
||||||
if (nullptr != it->second.gnssLocationInfoCb) {
|
if (nullptr != it->second.gnssLocationInfoCb) {
|
||||||
|
|
|
@ -103,6 +103,7 @@ class GnssAdapter : public LocAdapterBase {
|
||||||
/*==== CONVERSION ===================================================================*/
|
/*==== CONVERSION ===================================================================*/
|
||||||
static void convertOptions(LocPosMode& out, const LocationOptions& options);
|
static void convertOptions(LocPosMode& out, const LocationOptions& options);
|
||||||
static void convertLocation(Location& out, const LocGpsLocation& locGpsLocation,
|
static void convertLocation(Location& out, const LocGpsLocation& locGpsLocation,
|
||||||
|
const GpsLocationExtended& locationExtended,
|
||||||
const LocPosTechMask techMask);
|
const LocPosTechMask techMask);
|
||||||
static void convertLocationInfo(GnssLocationInfoNotification& out,
|
static void convertLocationInfo(GnssLocationInfoNotification& out,
|
||||||
const GpsLocationExtended& locationExtended);
|
const GpsLocationExtended& locationExtended);
|
||||||
|
|
|
@ -52,11 +52,14 @@ typedef enum {
|
||||||
// Flags to indicate which values are valid in a Location
|
// Flags to indicate which values are valid in a Location
|
||||||
typedef uint16_t LocationFlagsMask;
|
typedef uint16_t LocationFlagsMask;
|
||||||
typedef enum {
|
typedef enum {
|
||||||
LOCATION_HAS_LAT_LONG_BIT = (1<<0), // location has valid latitude and longitude
|
LOCATION_HAS_LAT_LONG_BIT = (1<<0), // location has valid latitude and longitude
|
||||||
LOCATION_HAS_ALTITUDE_BIT = (1<<1), // location has valid altitude
|
LOCATION_HAS_ALTITUDE_BIT = (1<<1), // location has valid altitude
|
||||||
LOCATION_HAS_SPEED_BIT = (1<<2), // location has valid speed
|
LOCATION_HAS_SPEED_BIT = (1<<2), // location has valid speed
|
||||||
LOCATION_HAS_BEARING_BIT = (1<<3), // location has valid bearing
|
LOCATION_HAS_BEARING_BIT = (1<<3), // location has valid bearing
|
||||||
LOCATION_HAS_ACCURACY_BIT = (1<<4), // location has valid accuracy
|
LOCATION_HAS_ACCURACY_BIT = (1<<4), // location has valid accuracy
|
||||||
|
LOCATION_HAS_VERTICAL_ACCURACY_BIT = (1<<5), // location has valid vertical accuracy
|
||||||
|
LOCATION_HAS_SPEED_ACCURACY_BIT = (1<<6), // location has valid speed accuracy
|
||||||
|
LOCATION_HAS_BEARING_ACCURACY_BIT = (1<<7), // location has valid bearing accuracy
|
||||||
} LocationFlagsBits;
|
} LocationFlagsBits;
|
||||||
|
|
||||||
typedef uint16_t LocationTechnologyMask;
|
typedef uint16_t LocationTechnologyMask;
|
||||||
|
@ -80,14 +83,11 @@ typedef enum {
|
||||||
GNSS_LOCATION_INFO_ALTITUDE_MEAN_SEA_LEVEL_BIT = (1<<0), // valid altitude mean sea level
|
GNSS_LOCATION_INFO_ALTITUDE_MEAN_SEA_LEVEL_BIT = (1<<0), // valid altitude mean sea level
|
||||||
GNSS_LOCATION_INFO_DOP_BIT = (1<<1), // valid pdop, hdop, and vdop
|
GNSS_LOCATION_INFO_DOP_BIT = (1<<1), // valid pdop, hdop, and vdop
|
||||||
GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT = (1<<2), // valid magnetic deviation
|
GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT = (1<<2), // valid magnetic deviation
|
||||||
GNSS_LOCATION_INFO_VER_ACCURACY_BIT = (1<<3), // valid vertical accuracy
|
GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT = (1<<3), // valid horizontal reliability
|
||||||
GNSS_LOCATION_INFO_SPEED_ACCURACY_BIT = (1<<4), // valid speed accuracy
|
GNSS_LOCATION_INFO_VER_RELIABILITY_BIT = (1<<4), // valid vertical reliability
|
||||||
GNSS_LOCATION_INFO_BEARING_ACCURACY_BIT = (1<<5), // valid bearing accuracy
|
GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MAJOR_BIT = (1<<5), // valid elipsode semi major
|
||||||
GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT = (1<<6), // valid horizontal reliability
|
GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MINOR_BIT = (1<<6), // valid elipsode semi minor
|
||||||
GNSS_LOCATION_INFO_VER_RELIABILITY_BIT = (1<<7), // valid vertical reliability
|
GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_AZIMUTH_BIT = (1<<7),// valid accuracy elipsode azimuth
|
||||||
GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MAJOR_BIT = (1<<8), // valid elipsode semi major
|
|
||||||
GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MINOR_BIT = (1<<9), // valid elipsode semi minor
|
|
||||||
GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_AZIMUTH_BIT = (1<<10),// valid accuracy elipsode azimuth
|
|
||||||
} GnssLocationInfoFlagBits;
|
} GnssLocationInfoFlagBits;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -393,6 +393,9 @@ typedef struct {
|
||||||
float speed; // in meters per second
|
float speed; // in meters per second
|
||||||
float bearing; // in degrees; range [0, 360)
|
float bearing; // in degrees; range [0, 360)
|
||||||
float accuracy; // in meters
|
float accuracy; // in meters
|
||||||
|
float verticalAccuracy; // in meters
|
||||||
|
float speedAccuracy; // in meters/second
|
||||||
|
float bearingAccuracy; // in degrees (0 to 359.999)
|
||||||
LocationTechnologyMask techMask;
|
LocationTechnologyMask techMask;
|
||||||
} Location;
|
} Location;
|
||||||
|
|
||||||
|
@ -441,9 +444,6 @@ typedef struct {
|
||||||
float hdop; // horizontal dilusion of precision
|
float hdop; // horizontal dilusion of precision
|
||||||
float vdop; // vertical dilusion of precision
|
float vdop; // vertical dilusion of precision
|
||||||
float magneticDeviation; // magnetic deviation
|
float magneticDeviation; // magnetic deviation
|
||||||
float verAccuracy; // vertical accuracy in meters
|
|
||||||
float speedAccuracy; // speed accuracy in meters/second
|
|
||||||
float bearingAccuracy; // bearing accuracy in degrees (0 to 359.999)
|
|
||||||
LocationReliability horReliability; // horizontal reliability
|
LocationReliability horReliability; // horizontal reliability
|
||||||
LocationReliability verReliability; // vertical reliability
|
LocationReliability verReliability; // vertical reliability
|
||||||
float horUncEllipseSemiMajor; // horizontal elliptical accuracy semi-major axis
|
float horUncEllipseSemiMajor; // horizontal elliptical accuracy semi-major axis
|
||||||
|
|
Loading…
Reference in a new issue