diff options
-rw-r--r-- | msm8909w_3100/android/location_api/GnssAPIClient.cpp | 31 | ||||
-rw-r--r-- | msm8909w_3100/android/location_api/GnssAPIClient.h | 5 | ||||
-rw-r--r-- | msm8909w_3100/android/location_api/MeasurementAPIClient.cpp | 10 | ||||
-rw-r--r-- | msm8909w_3100/android/location_api/MeasurementAPIClient.h | 4 | ||||
-rw-r--r-- | msm8998/android/location_api/GnssAPIClient.cpp | 3 | ||||
-rw-r--r-- | msm8998/core/LocApiBase.cpp | 3 | ||||
-rw-r--r-- | msm8998/location/LocationAPI.h | 2 |
7 files changed, 43 insertions, 15 deletions
diff --git a/msm8909w_3100/android/location_api/GnssAPIClient.cpp b/msm8909w_3100/android/location_api/GnssAPIClient.cpp index 2745f56..2e44c2e 100644 --- a/msm8909w_3100/android/location_api/GnssAPIClient.cpp +++ b/msm8909w_3100/android/location_api/GnssAPIClient.cpp @@ -81,8 +81,10 @@ void GnssAPIClient::gnssUpdateCallbacks(const sp<IGnssCallback>& gpsCb, { LOC_LOGD("%s]: (%p %p)", __FUNCTION__, &gpsCb, &niCb); + mMutex.lock(); mGnssCbIface = gpsCb; mGnssNiCbIface = niCb; + mMutex.unlock(); LocationCallbacks locationCallbacks; memset(&locationCallbacks, 0, sizeof(LocationCallbacks)); @@ -278,7 +280,10 @@ void GnssAPIClient::onCapabilitiesCb(LocationCapabilitiesMask capabilitiesMask) LOC_LOGD("%s]: (%02x)", __FUNCTION__, capabilitiesMask); mLocationCapabilitiesMask = capabilitiesMask; mLocationCapabilitiesCached = true; - sp<IGnssCallback> gnssCbIface = mGnssCbIface; + + mMutex.lock(); + auto gnssCbIface(mGnssCbIface); + mMutex.unlock(); if (gnssCbIface != nullptr) { uint32_t data = 0; @@ -322,7 +327,9 @@ void GnssAPIClient::onCapabilitiesCb(LocationCapabilitiesMask capabilitiesMask) void GnssAPIClient::onTrackingCb(Location location) { LOC_LOGD("%s]: (flags: %02x)", __FUNCTION__, location.flags); - sp<IGnssCallback> gnssCbIface = mGnssCbIface; + mMutex.lock(); + auto gnssCbIface(mGnssCbIface); + mMutex.unlock(); if (gnssCbIface != nullptr) { GnssLocation gnssLocation; @@ -338,7 +345,9 @@ void GnssAPIClient::onTrackingCb(Location location) void GnssAPIClient::onGnssNiCb(uint32_t id, GnssNiNotification gnssNiNotification) { LOC_LOGD("%s]: (id: %d)", __FUNCTION__, id); - sp<IGnssNiCallback> gnssNiCbIface = mGnssNiCbIface; + mMutex.lock(); + auto gnssNiCbIface(mGnssNiCbIface); + mMutex.unlock(); if (gnssNiCbIface == nullptr) { LOC_LOGE("%s]: mGnssNiCbIface is nullptr", __FUNCTION__); @@ -411,7 +420,9 @@ void GnssAPIClient::onGnssNiCb(uint32_t id, GnssNiNotification gnssNiNotificatio void GnssAPIClient::onGnssSvCb(GnssSvNotification gnssSvNotification) { LOC_LOGD("%s]: (count: %zu)", __FUNCTION__, gnssSvNotification.count); - sp<IGnssCallback> gnssCbIface = mGnssCbIface; + mMutex.lock(); + auto gnssCbIface(mGnssCbIface); + mMutex.unlock(); if (gnssCbIface != nullptr) { IGnssCallback::GnssSvStatus svStatus; @@ -426,7 +437,9 @@ void GnssAPIClient::onGnssSvCb(GnssSvNotification gnssSvNotification) void GnssAPIClient::onGnssNmeaCb(GnssNmeaNotification gnssNmeaNotification) { - sp<IGnssCallback> gnssCbIface = mGnssCbIface; + mMutex.lock(); + auto gnssCbIface(mGnssCbIface); + mMutex.unlock(); if (gnssCbIface != nullptr) { android::hardware::hidl_string nmeaString; @@ -443,7 +456,9 @@ void GnssAPIClient::onGnssNmeaCb(GnssNmeaNotification gnssNmeaNotification) void GnssAPIClient::onStartTrackingCb(LocationError error) { LOC_LOGD("%s]: (%d)", __FUNCTION__, error); - sp<IGnssCallback> gnssCbIface = mGnssCbIface; + mMutex.lock(); + auto gnssCbIface(mGnssCbIface); + mMutex.unlock(); if (error == LOCATION_ERROR_SUCCESS && gnssCbIface != nullptr) { auto r = gnssCbIface->gnssStatusCb(IGnssCallback::GnssStatusValue::ENGINE_ON); @@ -462,7 +477,9 @@ void GnssAPIClient::onStartTrackingCb(LocationError error) void GnssAPIClient::onStopTrackingCb(LocationError error) { LOC_LOGD("%s]: (%d)", __FUNCTION__, error); - sp<IGnssCallback> gnssCbIface = mGnssCbIface; + mMutex.lock(); + auto gnssCbIface(mGnssCbIface); + mMutex.unlock(); if (error == LOCATION_ERROR_SUCCESS && gnssCbIface != nullptr) { auto r = gnssCbIface->gnssStatusCb(IGnssCallback::GnssStatusValue::SESSION_END); diff --git a/msm8909w_3100/android/location_api/GnssAPIClient.h b/msm8909w_3100/android/location_api/GnssAPIClient.h index 295a9e9..b5cffb1 100644 --- a/msm8909w_3100/android/location_api/GnssAPIClient.h +++ b/msm8909w_3100/android/location_api/GnssAPIClient.h @@ -30,7 +30,7 @@ #ifndef GNSS_API_CLINET_H #define GNSS_API_CLINET_H - +#include <mutex> #include <android/hardware/gnss/1.0/IGnss.h> #include <android/hardware/gnss/1.0/IGnssCallback.h> #include <android/hardware/gnss/1.0/IGnssNiCallback.h> @@ -91,11 +91,10 @@ public: private: sp<IGnssCallback> mGnssCbIface; sp<IGnssNiCallback> mGnssNiCbIface; - + std::mutex mMutex; LocationAPIControlClient* mControlClient; LocationCapabilitiesMask mLocationCapabilitiesMask; bool mLocationCapabilitiesCached; - LocationOptions mLocationOptions; }; diff --git a/msm8909w_3100/android/location_api/MeasurementAPIClient.cpp b/msm8909w_3100/android/location_api/MeasurementAPIClient.cpp index dd7ceac..731c7ed 100644 --- a/msm8909w_3100/android/location_api/MeasurementAPIClient.cpp +++ b/msm8909w_3100/android/location_api/MeasurementAPIClient.cpp @@ -66,7 +66,9 @@ MeasurementAPIClient::measurementSetCallback(const sp<IGnssMeasurementCallback>& { LOC_LOGD("%s]: (%p)", __FUNCTION__, &callback); + mMutex.lock(); mGnssMeasurementCbIface = callback; + mMutex.unlock(); LocationCallbacks locationCallbacks; memset(&locationCallbacks, 0, sizeof(LocationCallbacks)); @@ -116,10 +118,14 @@ void MeasurementAPIClient::onGnssMeasurementsCb( LOC_LOGD("%s]: (count: %zu active: %zu)", __FUNCTION__, gnssMeasurementsNotification.count, mTracking); if (mTracking) { - if (mGnssMeasurementCbIface != nullptr) { + mMutex.lock(); + auto gnssMeasurementCbIface(mGnssMeasurementCbIface); + mMutex.unlock(); + + if (gnssMeasurementCbIface != nullptr) { IGnssMeasurementCallback::GnssData gnssData; convertGnssData(gnssMeasurementsNotification, gnssData); - auto r = mGnssMeasurementCbIface->GnssMeasurementCb(gnssData); + auto r = gnssMeasurementCbIface->GnssMeasurementCb(gnssData); if (!r.isOk()) { LOC_LOGE("%s] Error from GnssMeasurementCb description=%s", __func__, r.description().c_str()); diff --git a/msm8909w_3100/android/location_api/MeasurementAPIClient.h b/msm8909w_3100/android/location_api/MeasurementAPIClient.h index 422564d..8de1326 100644 --- a/msm8909w_3100/android/location_api/MeasurementAPIClient.h +++ b/msm8909w_3100/android/location_api/MeasurementAPIClient.h @@ -30,7 +30,7 @@ #ifndef MEASUREMENT_API_CLINET_H #define MEASUREMENT_API_CLINET_H - +#include <mutex> #include <android/hardware/gnss/1.0/IGnssMeasurement.h> #include <android/hardware/gnss/1.0/IGnssMeasurementCallback.h> #include <LocationAPIClientBase.h> @@ -63,7 +63,7 @@ public: private: sp<IGnssMeasurementCallback> mGnssMeasurementCbIface; - + std::mutex mMutex; bool mTracking; }; diff --git a/msm8998/android/location_api/GnssAPIClient.cpp b/msm8998/android/location_api/GnssAPIClient.cpp index 0c00e0a..efcc1c6 100644 --- a/msm8998/android/location_api/GnssAPIClient.cpp +++ b/msm8998/android/location_api/GnssAPIClient.cpp @@ -447,6 +447,7 @@ static void convertGnssSvStatus(GnssSvNotification& in, IGnssCallback::GnssSvSta info.cN0Dbhz = in.gnssSvs[i].cN0Dbhz; info.elevationDegrees = in.gnssSvs[i].elevation; info.azimuthDegrees = in.gnssSvs[i].azimuth; + info.carrierFrequencyHz = in.gnssSvs[i].carrierFrequencyHz; info.svFlag = static_cast<uint8_t>(IGnssCallback::GnssSvFlags::NONE); if (in.gnssSvs[i].gnssSvOptionsMask & GNSS_SV_OPTIONS_HAS_EPHEMER_BIT) info.svFlag |= IGnssCallback::GnssSvFlags::HAS_EPHEMERIS_DATA; @@ -454,6 +455,8 @@ static void convertGnssSvStatus(GnssSvNotification& in, IGnssCallback::GnssSvSta info.svFlag |= IGnssCallback::GnssSvFlags::HAS_ALMANAC_DATA; if (in.gnssSvs[i].gnssSvOptionsMask & GNSS_SV_OPTIONS_USED_IN_FIX_BIT) info.svFlag |= IGnssCallback::GnssSvFlags::USED_IN_FIX; + if (in.gnssSvs[i].gnssSvOptionsMask & GNSS_SV_OPTIONS_HAS_CARRIER_FREQUENCY_BIT) + info.svFlag |= IGnssCallback::GnssSvFlags::HAS_CARRIER_FREQUENCY; } } diff --git a/msm8998/core/LocApiBase.cpp b/msm8998/core/LocApiBase.cpp index 0036d88..7e2ea25 100644 --- a/msm8998/core/LocApiBase.cpp +++ b/msm8998/core/LocApiBase.cpp @@ -276,7 +276,7 @@ void LocApiBase::reportSv(GnssSvNotification& svNotify) sizeof(constellationString) / sizeof(constellationString[0]) - 1) { svNotify.gnssSvs[i].type = GNSS_SV_TYPE_UNKNOWN; } - LOC_LOGV(" %03d: %*s %02d %f %f %f 0x%02X", + LOC_LOGV(" %03zu: %*s %02d %f %f %f %f 0x%02X", i, 13, constellationString[svNotify.gnssSvs[i].type], @@ -284,6 +284,7 @@ void LocApiBase::reportSv(GnssSvNotification& svNotify) svNotify.gnssSvs[i].cN0Dbhz, svNotify.gnssSvs[i].elevation, svNotify.gnssSvs[i].azimuth, + svNotify.gnssSvs[i].carrierFrequencyHz, svNotify.gnssSvs[i].gnssSvOptionsMask); } // loop through adapters, and deliver to all adapters. diff --git a/msm8998/location/LocationAPI.h b/msm8998/location/LocationAPI.h index d128d5e..6f33b49 100644 --- a/msm8998/location/LocationAPI.h +++ b/msm8998/location/LocationAPI.h @@ -283,6 +283,7 @@ typedef enum { GNSS_SV_OPTIONS_HAS_EPHEMER_BIT = (1<<0), GNSS_SV_OPTIONS_HAS_ALMANAC_BIT = (1<<1), GNSS_SV_OPTIONS_USED_IN_FIX_BIT = (1<<2), + GNSS_SV_OPTIONS_HAS_CARRIER_FREQUENCY_BIT = (1<<3), } GnssSvOptionsBits; typedef enum { @@ -502,6 +503,7 @@ typedef struct { float elevation; // elevation of SV (in degrees) float azimuth; // azimuth of SV (in degrees) GnssSvOptionsMask gnssSvOptionsMask; // Bitwise OR of GnssSvOptionsBits + float carrierFrequencyHz; // carrier frequency of the signal tracked } GnssSv; typedef struct { |