Improved Location NI Privacy
Changes to be made starting in Android Q in the way that Location requests made by Location clients other than the Android FrameWork (e.g. Network Initiated AGNSS clients, modem-based clients such as MDT) are handled CRs-fixed: 2397454 Change-Id: Ibb5b9429a1ec1e14ee59d89763d8a78607997615
This commit is contained in:
parent
1839fb1140
commit
b046241ec2
16 changed files with 374 additions and 75 deletions
|
@ -38,6 +38,8 @@ namespace gnss {
|
||||||
namespace V2_0 {
|
namespace V2_0 {
|
||||||
namespace implementation {
|
namespace implementation {
|
||||||
|
|
||||||
|
using ::android::hardware::gnss::visibility_control::V1_0::implementation::GnssVisibilityControl;
|
||||||
|
|
||||||
static std::string getVersionString() {
|
static std::string getVersionString() {
|
||||||
static std::string version;
|
static std::string version;
|
||||||
if (!version.empty())
|
if (!version.empty())
|
||||||
|
@ -239,6 +241,10 @@ Return<bool> Gnss::updateConfiguration(GnssConfig& gnssConfig) {
|
||||||
mPendingConfig.flags |= GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT;
|
mPendingConfig.flags |= GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT;
|
||||||
mPendingConfig.blacklistedSvIds = gnssConfig.blacklistedSvIds;
|
mPendingConfig.blacklistedSvIds = gnssConfig.blacklistedSvIds;
|
||||||
}
|
}
|
||||||
|
if (gnssConfig.flags & GNSS_CONFIG_FLAGS_EMERGENCY_EXTENSION_SECONDS_BIT) {
|
||||||
|
mPendingConfig.flags |= GNSS_CONFIG_FLAGS_EMERGENCY_EXTENSION_SECONDS_BIT;
|
||||||
|
mPendingConfig.emergencyExtensionSeconds = gnssConfig.emergencyExtensionSeconds;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -483,8 +489,9 @@ Return<sp<::android::hardware::gnss::measurement_corrections::V1_0::IMeasurement
|
||||||
}
|
}
|
||||||
Return<sp<::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl>>
|
Return<sp<::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl>>
|
||||||
Gnss::getExtensionVisibilityControl() {
|
Gnss::getExtensionVisibilityControl() {
|
||||||
|
ENTRY_LOG_CALLFLOW();
|
||||||
if (mVisibCtrl == nullptr) {
|
if (mVisibCtrl == nullptr) {
|
||||||
mVisibCtrl = new GnssVisibilityControl();
|
mVisibCtrl = new GnssVisibilityControl(this);
|
||||||
}
|
}
|
||||||
return mVisibCtrl;
|
return mVisibCtrl;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,6 @@ using ::android::hardware::gnss::V1_0::GnssLocation;
|
||||||
using ::android::hardware::gnss::measurement_corrections::V1_0::IMeasurementCorrections;
|
using ::android::hardware::gnss::measurement_corrections::V1_0::IMeasurementCorrections;
|
||||||
using ::android::hardware::gnss::measurement_corrections::V1_0::implementation::MeasurementCorrections;
|
using ::android::hardware::gnss::measurement_corrections::V1_0::implementation::MeasurementCorrections;
|
||||||
using ::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl;
|
using ::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl;
|
||||||
using ::android::hardware::gnss::visibility_control::V1_0::implementation::GnssVisibilityControl;
|
|
||||||
|
|
||||||
struct Gnss : public IGnss {
|
struct Gnss : public IGnss {
|
||||||
Gnss();
|
Gnss();
|
||||||
|
@ -131,7 +130,6 @@ struct Gnss : public IGnss {
|
||||||
getExtensionVisibilityControl() override;
|
getExtensionVisibilityControl() override;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// These methods are not part of the IGnss base class.
|
// These methods are not part of the IGnss base class.
|
||||||
GnssAPIClient* getApi();
|
GnssAPIClient* getApi();
|
||||||
Return<bool> setGnssNiCb(const sp<IGnssNiCallback>& niCb);
|
Return<bool> setGnssNiCb(const sp<IGnssNiCallback>& niCb);
|
||||||
|
|
|
@ -175,35 +175,9 @@ Return<bool> GnssConfiguration::setGlonassPositioningProtocol(uint8_t protocol)
|
||||||
}
|
}
|
||||||
|
|
||||||
Return<bool> GnssConfiguration::setGpsLock(uint8_t lock) {
|
Return<bool> GnssConfiguration::setGpsLock(uint8_t lock) {
|
||||||
if (mGnss == nullptr) {
|
/* we no longer set GPS lock here, there is
|
||||||
LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__);
|
visibility control for this */
|
||||||
return false;
|
return true;
|
||||||
}
|
|
||||||
|
|
||||||
GnssConfig config;
|
|
||||||
memset(&config, 0, sizeof(GnssConfig));
|
|
||||||
config.size = sizeof(GnssConfig);
|
|
||||||
config.flags = GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT;
|
|
||||||
switch (lock) {
|
|
||||||
case 0:
|
|
||||||
config.gpsLock = GNSS_CONFIG_GPS_LOCK_NONE;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
config.gpsLock = GNSS_CONFIG_GPS_LOCK_MO;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
config.gpsLock = GNSS_CONFIG_GPS_LOCK_NI;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
config.gpsLock = GNSS_CONFIG_GPS_LOCK_MO_AND_NI;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
LOC_LOGE("%s]: invalid lock: %d.", __FUNCTION__, lock);
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return mGnss->updateConfiguration(config);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Return<bool> GnssConfiguration::setEmergencySuplPdn(bool enabled) {
|
Return<bool> GnssConfiguration::setEmergencySuplPdn(bool enabled) {
|
||||||
|
@ -308,10 +282,21 @@ bool GnssConfiguration::setBlacklistedSource(
|
||||||
|
|
||||||
// Methods from ::android::hardware::gnss::V2_0::IGnssConfiguration follow.
|
// Methods from ::android::hardware::gnss::V2_0::IGnssConfiguration follow.
|
||||||
Return<bool> GnssConfiguration::setEsExtensionSec(uint32_t emergencyExtensionSeconds) {
|
Return<bool> GnssConfiguration::setEsExtensionSec(uint32_t emergencyExtensionSeconds) {
|
||||||
//TODO emergencyExtensionSeconds is not supporded in GnssConfig yet
|
ENTRY_LOG_CALLFLOW();
|
||||||
|
if (mGnss == nullptr) {
|
||||||
|
LOC_LOGe("mGnss is nullptr");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GnssConfig config;
|
||||||
|
memset(&config, 0, sizeof(GnssConfig));
|
||||||
|
config.size = sizeof(GnssConfig);
|
||||||
|
config.flags = GNSS_CONFIG_FLAGS_EMERGENCY_EXTENSION_SECONDS_BIT;
|
||||||
|
config.emergencyExtensionSeconds = emergencyExtensionSeconds;
|
||||||
|
|
||||||
|
return mGnss->updateConfiguration(config);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace implementation
|
} // namespace implementation
|
||||||
} // namespace V2_0
|
} // namespace V2_0
|
||||||
} // namespace gnss
|
} // namespace gnss
|
||||||
|
|
|
@ -48,11 +48,72 @@ using ::android::hardware::Return;
|
||||||
using ::android::hardware::Void;
|
using ::android::hardware::Void;
|
||||||
using ::android::sp;
|
using ::android::sp;
|
||||||
|
|
||||||
GnssVisibilityControl::GnssVisibilityControl() {}
|
static GnssVisibilityControl* spGnssVisibilityControl = nullptr;
|
||||||
GnssVisibilityControl::~GnssVisibilityControl() {}
|
|
||||||
|
static void convertGnssNfwNotification(GnssNfwNotification& in,
|
||||||
|
IGnssVisibilityControlCallback::NfwNotification& out);
|
||||||
|
|
||||||
|
GnssVisibilityControl::GnssVisibilityControl(Gnss* gnss) : mGnss(gnss) {
|
||||||
|
spGnssVisibilityControl = this;
|
||||||
|
}
|
||||||
|
GnssVisibilityControl::~GnssVisibilityControl() {
|
||||||
|
spGnssVisibilityControl = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GnssVisibilityControl::nfwStatusCb(GnssNfwNotification notification) {
|
||||||
|
if (nullptr != spGnssVisibilityControl) {
|
||||||
|
spGnssVisibilityControl->statusCb(notification);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void convertGnssNfwNotification(GnssNfwNotification& in,
|
||||||
|
IGnssVisibilityControlCallback::NfwNotification& out)
|
||||||
|
{
|
||||||
|
memset(&out, 0, sizeof(IGnssVisibilityControlCallback::NfwNotification));
|
||||||
|
out.proxyAppPackageName = in.proxyAppPackageName;
|
||||||
|
out.protocolStack = (IGnssVisibilityControlCallback::NfwProtocolStack)in.protocolStack;
|
||||||
|
out.otherProtocolStackName = in.otherProtocolStackName;
|
||||||
|
out.requestor = (IGnssVisibilityControlCallback::NfwRequestor)in.requestor;
|
||||||
|
out.requestorId = in.requestorId;
|
||||||
|
out.responseType = (IGnssVisibilityControlCallback::NfwResponseType)in.responseType;
|
||||||
|
out.inEmergencyMode = in.inEmergencyMode;
|
||||||
|
out.isCachedLocation = in.isCachedLocation;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GnssVisibilityControl::statusCb(GnssNfwNotification notification) {
|
||||||
|
|
||||||
|
if (mGnssVisibilityControlCbIface != nullptr) {
|
||||||
|
IGnssVisibilityControlCallback::NfwNotification nfwNotification;
|
||||||
|
|
||||||
|
// Convert from one structure to another
|
||||||
|
convertGnssNfwNotification(notification, nfwNotification);
|
||||||
|
|
||||||
|
auto r = mGnssVisibilityControlCbIface->nfwNotifyCb(nfwNotification);
|
||||||
|
if (!r.isOk()) {
|
||||||
|
LOC_LOGw("Error invoking NFW status cb %s", r.description().c_str());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LOC_LOGw("setCallback has not been called yet");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Methods from ::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl follow.
|
// Methods from ::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl follow.
|
||||||
Return<bool> GnssVisibilityControl::enableNfwLocationAccess(const hidl_vec<::android::hardware::hidl_string>& proxyApps) {
|
Return<bool> GnssVisibilityControl::enableNfwLocationAccess(const hidl_vec<::android::hardware::hidl_string>& proxyApps) {
|
||||||
|
|
||||||
|
if (nullptr == mGnss || nullptr == mGnss->getGnssInterface()) {
|
||||||
|
LOC_LOGe("Null GNSS interface");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the vector is empty we need to disable all NFW clients
|
||||||
|
If there is at least one app in the vector we need to enable
|
||||||
|
all NFW clients */
|
||||||
|
if (0 == proxyApps.size()) {
|
||||||
|
mGnss->getGnssInterface()->enableNfwLocationAccess(false);
|
||||||
|
} else {
|
||||||
|
mGnss->getGnssInterface()->enableNfwLocationAccess(true);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -61,6 +122,18 @@ Return<bool> GnssVisibilityControl::enableNfwLocationAccess(const hidl_vec<::and
|
||||||
* @param callback Handle to IGnssVisibilityControlCallback interface.
|
* @param callback Handle to IGnssVisibilityControlCallback interface.
|
||||||
*/
|
*/
|
||||||
Return<bool> GnssVisibilityControl::setCallback(const ::android::sp<::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControlCallback>& callback) {
|
Return<bool> GnssVisibilityControl::setCallback(const ::android::sp<::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControlCallback>& callback) {
|
||||||
|
|
||||||
|
if (nullptr == mGnss || nullptr == mGnss->getGnssInterface()) {
|
||||||
|
LOC_LOGe("Null GNSS interface");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
mGnssVisibilityControlCbIface = callback;
|
||||||
|
|
||||||
|
NfwCbInfo cbInfo = {};
|
||||||
|
cbInfo.visibilityControlCb = (void*)nfwStatusCb;
|
||||||
|
|
||||||
|
mGnss->getGnssInterface()->nfwInit(cbInfo);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,9 @@
|
||||||
#include <hidl/MQDescriptor.h>
|
#include <hidl/MQDescriptor.h>
|
||||||
#include <hidl/Status.h>
|
#include <hidl/Status.h>
|
||||||
|
|
||||||
|
#include <gps_extended_c.h>
|
||||||
#include <location_interface.h>
|
#include <location_interface.h>
|
||||||
|
#include "Gnss.h"
|
||||||
|
|
||||||
namespace android {
|
namespace android {
|
||||||
namespace hardware {
|
namespace hardware {
|
||||||
|
@ -50,9 +52,10 @@ using ::android::hardware::hidl_vec;
|
||||||
using ::android::hardware::Return;
|
using ::android::hardware::Return;
|
||||||
using ::android::hardware::Void;
|
using ::android::hardware::Void;
|
||||||
using ::android::sp;
|
using ::android::sp;
|
||||||
|
using ::android::hardware::gnss::V2_0::implementation::Gnss;
|
||||||
|
|
||||||
struct GnssVisibilityControl : public IGnssVisibilityControl {
|
struct GnssVisibilityControl : public IGnssVisibilityControl {
|
||||||
GnssVisibilityControl();
|
GnssVisibilityControl(Gnss* gnss);
|
||||||
~GnssVisibilityControl();
|
~GnssVisibilityControl();
|
||||||
|
|
||||||
// Methods from ::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl follow.
|
// Methods from ::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl follow.
|
||||||
|
@ -64,6 +67,14 @@ struct GnssVisibilityControl : public IGnssVisibilityControl {
|
||||||
*/
|
*/
|
||||||
Return<bool> setCallback(const ::android::sp<::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControlCallback>& callback) override;
|
Return<bool> setCallback(const ::android::sp<::android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControlCallback>& callback) override;
|
||||||
|
|
||||||
|
void statusCb(GnssNfwNotification notification);
|
||||||
|
|
||||||
|
/* Data call setup callback passed down to GNSS HAL implementation */
|
||||||
|
static void nfwStatusCb(GnssNfwNotification notification);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Gnss* mGnss = nullptr;
|
||||||
|
sp<IGnssVisibilityControlCallback> mGnssVisibilityControlCbIface = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2011-2014, 2016-2018 The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2011-2014, 2016-2019 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -199,4 +199,8 @@ DEFAULT_IMPL(false)
|
||||||
bool LocAdapterBase::
|
bool LocAdapterBase::
|
||||||
reportGnssAdditionalSystemInfoEvent(GnssAdditionalSystemInfo& /*additionalSystemInfo*/)
|
reportGnssAdditionalSystemInfoEvent(GnssAdditionalSystemInfo& /*additionalSystemInfo*/)
|
||||||
DEFAULT_IMPL(false)
|
DEFAULT_IMPL(false)
|
||||||
|
|
||||||
|
void LocAdapterBase::
|
||||||
|
reportNfwNotificationEvent(GnssNfwNotification& /*notification*/)
|
||||||
|
DEFAULT_IMPL()
|
||||||
} // namespace loc_core
|
} // namespace loc_core
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2011-2014, 2016-2018 The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2011-2014, 2016-2019 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -171,6 +171,7 @@ public:
|
||||||
virtual bool reportKlobucharIonoModelEvent(GnssKlobucharIonoModel& ionoModel);
|
virtual bool reportKlobucharIonoModelEvent(GnssKlobucharIonoModel& ionoModel);
|
||||||
virtual bool reportGnssAdditionalSystemInfoEvent(
|
virtual bool reportGnssAdditionalSystemInfoEvent(
|
||||||
GnssAdditionalSystemInfo& additionalSystemInfo);
|
GnssAdditionalSystemInfo& additionalSystemInfo);
|
||||||
|
virtual void reportNfwNotificationEvent(GnssNfwNotification& notification);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace loc_core
|
} // namespace loc_core
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2011-2014, 2016-2018 The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2011-2014, 2016-2019 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -391,6 +391,13 @@ void LocApiBase::reportGnssAdditionalSystemInfo(GnssAdditionalSystemInfo& additi
|
||||||
additionalSystemInfo));
|
additionalSystemInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LocApiBase::sendNfwNotification(GnssNfwNotification& notification)
|
||||||
|
{
|
||||||
|
// loop through adapters, and deliver to the first handling adapter.
|
||||||
|
TO_ALL_LOCADAPTERS(mLocAdapters[i]->reportNfwNotificationEvent(notification));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void LocApiBase::reportSv(GnssSvNotification& svNotify)
|
void LocApiBase::reportSv(GnssSvNotification& svNotify)
|
||||||
{
|
{
|
||||||
const char* constellationString[] = { "Unknown", "GPS", "SBAS", "GLONASS",
|
const char* constellationString[] = { "Unknown", "GPS", "SBAS", "GLONASS",
|
||||||
|
@ -683,6 +690,10 @@ DEFAULT_IMPL(0)
|
||||||
GnssConfigLppeUserPlaneMask LocApiBase::convertLppeUp(const uint32_t /*lppeUserPlaneMask*/)
|
GnssConfigLppeUserPlaneMask LocApiBase::convertLppeUp(const uint32_t /*lppeUserPlaneMask*/)
|
||||||
DEFAULT_IMPL(0)
|
DEFAULT_IMPL(0)
|
||||||
|
|
||||||
|
LocationError LocApiBase::setEmergencyExtensionWindowSync(
|
||||||
|
const uint32_t /*emergencyExtensionSeconds*/)
|
||||||
|
DEFAULT_IMPL(LOCATION_ERROR_SUCCESS)
|
||||||
|
|
||||||
void LocApiBase::
|
void LocApiBase::
|
||||||
getWwanZppFix()
|
getWwanZppFix()
|
||||||
DEFAULT_IMPL()
|
DEFAULT_IMPL()
|
||||||
|
@ -737,7 +748,6 @@ LocationError LocApiBase::
|
||||||
setPositionAssistedClockEstimatorMode(bool /*enabled*/)
|
setPositionAssistedClockEstimatorMode(bool /*enabled*/)
|
||||||
DEFAULT_IMPL(LOCATION_ERROR_SUCCESS)
|
DEFAULT_IMPL(LOCATION_ERROR_SUCCESS)
|
||||||
|
|
||||||
LocationError LocApiBase::
|
LocationError LocApiBase::getGnssEnergyConsumed()
|
||||||
getGnssEnergyConsumed()
|
|
||||||
DEFAULT_IMPL(LOCATION_ERROR_SUCCESS)
|
DEFAULT_IMPL(LOCATION_ERROR_SUCCESS)
|
||||||
} // namespace loc_core
|
} // namespace loc_core
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2011-2014, 2016-2018 The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2011-2014, 2016-2019 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -189,6 +189,7 @@ public:
|
||||||
void reportDeleteAidingDataEvent(GnssAidingData& aidingData);
|
void reportDeleteAidingDataEvent(GnssAidingData& aidingData);
|
||||||
void reportKlobucharIonoModel(GnssKlobucharIonoModel& ionoModel);
|
void reportKlobucharIonoModel(GnssKlobucharIonoModel& ionoModel);
|
||||||
void reportGnssAdditionalSystemInfo(GnssAdditionalSystemInfo& additionalSystemInfo);
|
void reportGnssAdditionalSystemInfo(GnssAdditionalSystemInfo& additionalSystemInfo);
|
||||||
|
void sendNfwNotification(GnssNfwNotification& notification);
|
||||||
|
|
||||||
// downward calls
|
// downward calls
|
||||||
// All below functions are to be defined by adapter specific modules:
|
// All below functions are to be defined by adapter specific modules:
|
||||||
|
@ -265,6 +266,7 @@ public:
|
||||||
virtual GnssConfigLppProfile convertLppProfile(const uint32_t lppProfile);
|
virtual GnssConfigLppProfile convertLppProfile(const uint32_t lppProfile);
|
||||||
virtual GnssConfigLppeControlPlaneMask convertLppeCp(const uint32_t lppeControlPlaneMask);
|
virtual GnssConfigLppeControlPlaneMask convertLppeCp(const uint32_t lppeControlPlaneMask);
|
||||||
virtual GnssConfigLppeUserPlaneMask convertLppeUp(const uint32_t lppeUserPlaneMask);
|
virtual GnssConfigLppeUserPlaneMask convertLppeUp(const uint32_t lppeUserPlaneMask);
|
||||||
|
virtual LocationError setEmergencyExtensionWindowSync(const uint32_t emergencyExtensionSeconds);
|
||||||
|
|
||||||
virtual void getWwanZppFix();
|
virtual void getWwanZppFix();
|
||||||
virtual void getBestAvailableZppFix();
|
virtual void getBestAvailableZppFix();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2017, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -88,7 +88,8 @@ GnssAdapter::GnssAdapter() :
|
||||||
mServerUrl(":"),
|
mServerUrl(":"),
|
||||||
mXtraObserver(mSystemStatus->getOsObserver(), mMsgTask),
|
mXtraObserver(mSystemStatus->getOsObserver(), mMsgTask),
|
||||||
mBlockCPIInfo{},
|
mBlockCPIInfo{},
|
||||||
mLocSystemInfo{}
|
mLocSystemInfo{},
|
||||||
|
mNfwCb(NULL)
|
||||||
{
|
{
|
||||||
LOC_LOGD("%s]: Constructor %p", __func__, this);
|
LOC_LOGD("%s]: Constructor %p", __func__, this);
|
||||||
mLocPositionMode.mode = LOC_POSITION_MODE_INVALID;
|
mLocPositionMode.mode = LOC_POSITION_MODE_INVALID;
|
||||||
|
@ -658,7 +659,7 @@ GnssAdapter::setConfigCommand()
|
||||||
GNSS_CONFIG_FLAGS_LPPE_USER_PLANE_VALID_BIT |
|
GNSS_CONFIG_FLAGS_LPPE_USER_PLANE_VALID_BIT |
|
||||||
GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT;
|
GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT;
|
||||||
gnssConfigRequested.gpsLock = GNSS_CONFIG_GPS_LOCK_NONE;
|
gnssConfigRequested.gpsLock = GNSS_CONFIG_GPS_LOCK_NONE;
|
||||||
if (0 == adapter.getPowerVoteId()) {
|
if (0 == adapter.getAfwControlId() || NULL != adapter.mNfwCb) {
|
||||||
gnssConfigRequested.gpsLock = gpsConf.GPS_LOCK;
|
gnssConfigRequested.gpsLock = gpsConf.GPS_LOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -910,6 +911,18 @@ std::vector<LocationError> GnssAdapter::gnssUpdateConfig(const std::string& oldS
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
if (gnssConfigRequested.flags &
|
||||||
|
GNSS_CONFIG_FLAGS_EMERGENCY_EXTENSION_SECONDS_BIT) {
|
||||||
|
if (gnssConfigNeedEngineUpdate.flags &
|
||||||
|
GNSS_CONFIG_FLAGS_EMERGENCY_EXTENSION_SECONDS_BIT) {
|
||||||
|
err = mLocApi->setEmergencyExtensionWindowSync(
|
||||||
|
gnssConfigRequested.emergencyExtensionSeconds);
|
||||||
|
if (index < count) {
|
||||||
|
errsList[index] = err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
return errsList;
|
return errsList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -982,10 +995,10 @@ GnssAdapter::gnssUpdateConfigCommand(GnssConfig config)
|
||||||
if (gnssConfigRequested.flags & GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT) {
|
if (gnssConfigRequested.flags & GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT) {
|
||||||
GnssConfigGpsLock newGpsLock = gnssConfigRequested.gpsLock;
|
GnssConfigGpsLock newGpsLock = gnssConfigRequested.gpsLock;
|
||||||
if (GNSS_CONFIG_GPS_LOCK_NONE == newGpsLock) {
|
if (GNSS_CONFIG_GPS_LOCK_NONE == newGpsLock) {
|
||||||
newGpsLock = GNSS_CONFIG_GPS_LOCK_MO_AND_NI;
|
newGpsLock = GNSS_CONFIG_GPS_LOCK_MO;
|
||||||
}
|
}
|
||||||
if (newGpsLock == ContextBase::mGps_conf.GPS_LOCK ||
|
if (newGpsLock == ContextBase::mGps_conf.GPS_LOCK ||
|
||||||
0 != mAdapter.getPowerVoteId()) {
|
0 != mAdapter.getAfwControlId()) {
|
||||||
gnssConfigNeedEngineUpdate.flags &= ~(GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT);
|
gnssConfigNeedEngineUpdate.flags &= ~(GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT);
|
||||||
}
|
}
|
||||||
ContextBase::mGps_conf.GPS_LOCK = newGpsLock;
|
ContextBase::mGps_conf.GPS_LOCK = newGpsLock;
|
||||||
|
@ -1299,6 +1312,12 @@ GnssAdapter::gnssGetConfigCommand(GnssConfigFlagsMask configMask) {
|
||||||
errs[index++] = err;
|
errs[index++] = err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (mConfigMask & GNSS_CONFIG_FLAGS_EMERGENCY_EXTENSION_SECONDS_BIT) {
|
||||||
|
err = LOCATION_ERROR_NOT_SUPPORTED;
|
||||||
|
if (index < mCount) {
|
||||||
|
errs[index++] = LOCATION_ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mAdapter.reportResponse(index, errs, mIds);
|
mAdapter.reportResponse(index, errs, mIds);
|
||||||
delete[] errs;
|
delete[] errs;
|
||||||
|
@ -2802,21 +2821,24 @@ GnssAdapter::enableCommand(LocationTechnologyType techType)
|
||||||
mTechType(techType) {}
|
mTechType(techType) {}
|
||||||
inline virtual void proc() const {
|
inline virtual void proc() const {
|
||||||
LocationError err = LOCATION_ERROR_SUCCESS;
|
LocationError err = LOCATION_ERROR_SUCCESS;
|
||||||
uint32_t powerVoteId = mAdapter.getPowerVoteId();
|
uint32_t powerVoteId = mAdapter.getAfwControlId();
|
||||||
if (mTechType != LOCATION_TECHNOLOGY_TYPE_GNSS) {
|
if (mTechType != LOCATION_TECHNOLOGY_TYPE_GNSS) {
|
||||||
err = LOCATION_ERROR_INVALID_PARAMETER;
|
err = LOCATION_ERROR_INVALID_PARAMETER;
|
||||||
} else if (powerVoteId > 0) {
|
} else if (powerVoteId > 0) {
|
||||||
err = LOCATION_ERROR_ALREADY_STARTED;
|
err = LOCATION_ERROR_ALREADY_STARTED;
|
||||||
} else {
|
} else {
|
||||||
mContext.modemPowerVote(true);
|
mContext.modemPowerVote(true);
|
||||||
mAdapter.setPowerVoteId(mSessionId);
|
mAdapter.setAfwControlId(mSessionId);
|
||||||
|
|
||||||
mApi.sendMsg(new LocApiMsg([&mApi = mApi] () {
|
GnssConfigGpsLock gpsLock = GNSS_CONFIG_GPS_LOCK_NONE;
|
||||||
mApi.setGpsLockSync(GNSS_CONFIG_GPS_LOCK_NONE);
|
if (NULL != mAdapter.mNfwCb) {
|
||||||
|
ContextBase::mGps_conf.GPS_LOCK &= GNSS_CONFIG_GPS_LOCK_NI;
|
||||||
|
gpsLock = ContextBase::mGps_conf.GPS_LOCK;
|
||||||
|
}
|
||||||
|
mApi.sendMsg(new LocApiMsg([&mApi = mApi, gpsLock]() {
|
||||||
|
mApi.setGpsLockSync(gpsLock);
|
||||||
}));
|
}));
|
||||||
|
mAdapter.mXtraObserver.updateLockStatus(gpsLock);
|
||||||
mAdapter.mXtraObserver.updateLockStatus(
|
|
||||||
GNSS_CONFIG_GPS_LOCK_NONE);
|
|
||||||
}
|
}
|
||||||
mAdapter.reportResponse(err, mSessionId);
|
mAdapter.reportResponse(err, mSessionId);
|
||||||
}
|
}
|
||||||
|
@ -2852,15 +2874,18 @@ GnssAdapter::disableCommand(uint32_t id)
|
||||||
mSessionId(sessionId) {}
|
mSessionId(sessionId) {}
|
||||||
inline virtual void proc() const {
|
inline virtual void proc() const {
|
||||||
LocationError err = LOCATION_ERROR_SUCCESS;
|
LocationError err = LOCATION_ERROR_SUCCESS;
|
||||||
uint32_t powerVoteId = mAdapter.getPowerVoteId();
|
uint32_t powerVoteId = mAdapter.getAfwControlId();
|
||||||
if (powerVoteId != mSessionId) {
|
if (powerVoteId != mSessionId) {
|
||||||
err = LOCATION_ERROR_ID_UNKNOWN;
|
err = LOCATION_ERROR_ID_UNKNOWN;
|
||||||
} else {
|
} else {
|
||||||
mContext.modemPowerVote(false);
|
mContext.modemPowerVote(false);
|
||||||
mAdapter.setPowerVoteId(0);
|
mAdapter.setAfwControlId(0);
|
||||||
|
|
||||||
GnssConfigGpsLock gpsLock =
|
if (NULL != mAdapter.mNfwCb) {
|
||||||
ContextBase::mGps_conf.GPS_LOCK;
|
/* We need to disable MO (AFW) */
|
||||||
|
ContextBase::mGps_conf.GPS_LOCK |= GNSS_CONFIG_GPS_LOCK_MO;
|
||||||
|
}
|
||||||
|
GnssConfigGpsLock gpsLock = ContextBase::mGps_conf.GPS_LOCK;
|
||||||
mApi.sendMsg(new LocApiMsg([&mApi = mApi,gpsLock] () {
|
mApi.sendMsg(new LocApiMsg([&mApi = mApi,gpsLock] () {
|
||||||
mApi.setGpsLockSync(gpsLock);
|
mApi.setGpsLockSync(gpsLock);
|
||||||
}));
|
}));
|
||||||
|
@ -3824,6 +3849,52 @@ void GnssAdapter::initAgpsCommand(const AgpsCbInfo& cbInfo){
|
||||||
sendMsg(new AgpsMsgInit(cbInfo, *this));
|
sendMsg(new AgpsMsgInit(cbInfo, *this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GnssAdapter::initNfwCommand(const NfwCbInfo& cbInfo) {
|
||||||
|
LOC_LOGi("GnssAdapter::initNfwCommand");
|
||||||
|
|
||||||
|
/* Message to initialize NFW */
|
||||||
|
struct MsgInitNfw : public LocMsg {
|
||||||
|
const NfwCbInfo mCbInfo;
|
||||||
|
GnssAdapter& mAdapter;
|
||||||
|
|
||||||
|
inline MsgInitNfw(const NfwCbInfo& cbInfo,
|
||||||
|
GnssAdapter& adapter) :
|
||||||
|
LocMsg(), mCbInfo(cbInfo), mAdapter(adapter) {
|
||||||
|
LOC_LOGv("MsgInitNfw");
|
||||||
|
}
|
||||||
|
|
||||||
|
inline virtual void proc() const {
|
||||||
|
LOC_LOGv("MsgInitNfw::proc()");
|
||||||
|
mAdapter.initNfw(mCbInfo);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Send message to initialize NFW */
|
||||||
|
sendMsg(new MsgInitNfw(cbInfo, *this));
|
||||||
|
}
|
||||||
|
|
||||||
|
void GnssAdapter::reportNfwNotificationEvent(GnssNfwNotification& notification) {
|
||||||
|
LOC_LOGi("GnssAdapter::reportNfwNotificationEvent");
|
||||||
|
|
||||||
|
struct MsgReportNfwNotification : public LocMsg {
|
||||||
|
const GnssNfwNotification mNotification;
|
||||||
|
GnssAdapter& mAdapter;
|
||||||
|
|
||||||
|
inline MsgReportNfwNotification(const GnssNfwNotification& notification,
|
||||||
|
GnssAdapter& adapter) :
|
||||||
|
LocMsg(), mNotification(notification), mAdapter(adapter) {
|
||||||
|
LOC_LOGv("MsgReportNfwNotification");
|
||||||
|
}
|
||||||
|
|
||||||
|
inline virtual void proc() const {
|
||||||
|
LOC_LOGv("MsgReportNfwNotification::proc()");
|
||||||
|
mAdapter.reportNfwNotification(mNotification);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
sendMsg(new MsgReportNfwNotification(notification, *this));
|
||||||
|
}
|
||||||
|
|
||||||
/* GnssAdapter::requestATL
|
/* GnssAdapter::requestATL
|
||||||
* Method triggered in QMI thread as part of handling below message:
|
* Method triggered in QMI thread as part of handling below message:
|
||||||
* eQMI_LOC_SERVER_REQUEST_OPEN_V02
|
* eQMI_LOC_SERVER_REQUEST_OPEN_V02
|
||||||
|
@ -4405,6 +4476,37 @@ GnssAdapter::getGnssEnergyConsumedCommand(GnssEnergyConsumedCallback energyConsu
|
||||||
sendMsg(new MsgGetGnssEnergyConsumed(*this, *mLocApi, energyConsumedCb));
|
sendMsg(new MsgGetGnssEnergyConsumed(*this, *mLocApi, energyConsumedCb));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GnssAdapter::nfwControlCommand(bool enable) {
|
||||||
|
struct MsgenableNfwLocationAccess : public LocMsg {
|
||||||
|
GnssAdapter& mAdapter;
|
||||||
|
LocApiBase& mApi;
|
||||||
|
bool mEnable;
|
||||||
|
inline MsgenableNfwLocationAccess(GnssAdapter& adapter, LocApiBase& api,
|
||||||
|
bool enable) :
|
||||||
|
LocMsg(),
|
||||||
|
mAdapter(adapter),
|
||||||
|
mApi(api),
|
||||||
|
mEnable(enable) {}
|
||||||
|
inline virtual void proc() const {
|
||||||
|
GnssConfigGpsLock gpsLock;
|
||||||
|
|
||||||
|
gpsLock = ContextBase::mGps_conf.GPS_LOCK;
|
||||||
|
if (mEnable) {
|
||||||
|
gpsLock &= ~GNSS_CONFIG_GPS_LOCK_NI;
|
||||||
|
} else {
|
||||||
|
gpsLock |= GNSS_CONFIG_GPS_LOCK_NI;
|
||||||
|
}
|
||||||
|
ContextBase::mGps_conf.GPS_LOCK = gpsLock;
|
||||||
|
mApi.sendMsg(new LocApiMsg([&mApi = mApi, gpsLock]() {
|
||||||
|
mApi.setGpsLockSync((GnssConfigGpsLock)gpsLock);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
sendMsg(new MsgenableNfwLocationAccess(*this, *mLocApi, enable));
|
||||||
|
}
|
||||||
|
|
||||||
/* ==== Eng Hub Proxy ================================================================= */
|
/* ==== Eng Hub Proxy ================================================================= */
|
||||||
/* ======== UTILITIES ================================================================= */
|
/* ======== UTILITIES ================================================================= */
|
||||||
void
|
void
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -162,6 +162,12 @@ class GnssAdapter : public LocAdapterBase {
|
||||||
AgpsCbInfo mAgpsCbInfo;
|
AgpsCbInfo mAgpsCbInfo;
|
||||||
void initAgps(const AgpsCbInfo& cbInfo);
|
void initAgps(const AgpsCbInfo& cbInfo);
|
||||||
|
|
||||||
|
/* ==== NFW =========================================================================== */
|
||||||
|
NfwStatusCb mNfwCb;
|
||||||
|
inline void initNfw(const NfwCbInfo& cbInfo) {
|
||||||
|
mNfwCb = (NfwStatusCb)cbInfo.visibilityControlCb;
|
||||||
|
}
|
||||||
|
|
||||||
/* ==== ODCPI ========================================================================== */
|
/* ==== ODCPI ========================================================================== */
|
||||||
OdcpiRequestCallback mOdcpiRequestCb;
|
OdcpiRequestCallback mOdcpiRequestCb;
|
||||||
bool mOdcpiRequestActive;
|
bool mOdcpiRequestActive;
|
||||||
|
@ -308,11 +314,13 @@ public:
|
||||||
/* ======== COMMANDS ====(Called from Client Thread)==================================== */
|
/* ======== COMMANDS ====(Called from Client Thread)==================================== */
|
||||||
void initDefaultAgpsCommand();
|
void initDefaultAgpsCommand();
|
||||||
void initAgpsCommand(const AgpsCbInfo& cbInfo);
|
void initAgpsCommand(const AgpsCbInfo& cbInfo);
|
||||||
|
void initNfwCommand(const NfwCbInfo& cbInfo);
|
||||||
void dataConnOpenCommand(AGpsExtType agpsType,
|
void dataConnOpenCommand(AGpsExtType agpsType,
|
||||||
const char* apnName, int apnLen, AGpsBearerType bearerType);
|
const char* apnName, int apnLen, AGpsBearerType bearerType);
|
||||||
void dataConnClosedCommand(AGpsExtType agpsType);
|
void dataConnClosedCommand(AGpsExtType agpsType);
|
||||||
void dataConnFailedCommand(AGpsExtType agpsType);
|
void dataConnFailedCommand(AGpsExtType agpsType);
|
||||||
void getGnssEnergyConsumedCommand(GnssEnergyConsumedCallback energyConsumedCb);
|
void getGnssEnergyConsumedCommand(GnssEnergyConsumedCallback energyConsumedCb);
|
||||||
|
void nfwControlCommand(bool enable);
|
||||||
|
|
||||||
/* ========= ODCPI ===================================================================== */
|
/* ========= ODCPI ===================================================================== */
|
||||||
/* ======== COMMANDS ====(Called from Client Thread)==================================== */
|
/* ======== COMMANDS ====(Called from Client Thread)==================================== */
|
||||||
|
@ -325,8 +333,8 @@ public:
|
||||||
LocationControlCallbacks& getControlCallbacks() { return mControlCallbacks; }
|
LocationControlCallbacks& getControlCallbacks() { return mControlCallbacks; }
|
||||||
void setControlCallbacks(const LocationControlCallbacks& controlCallbacks)
|
void setControlCallbacks(const LocationControlCallbacks& controlCallbacks)
|
||||||
{ mControlCallbacks = controlCallbacks; }
|
{ mControlCallbacks = controlCallbacks; }
|
||||||
void setPowerVoteId(uint32_t id) { mPowerVoteId = id; }
|
void setAfwControlId(uint32_t id) { mPowerVoteId = id; }
|
||||||
uint32_t getPowerVoteId() { return mPowerVoteId; }
|
uint32_t getAfwControlId() { return mPowerVoteId; }
|
||||||
virtual bool isInSession() { return !mTrackingSessions.empty(); }
|
virtual bool isInSession() { return !mTrackingSessions.empty(); }
|
||||||
void initDefaultAgps();
|
void initDefaultAgps();
|
||||||
bool initEngHubProxy();
|
bool initEngHubProxy();
|
||||||
|
@ -363,6 +371,7 @@ public:
|
||||||
virtual bool reportKlobucharIonoModelEvent(GnssKlobucharIonoModel& ionoModel);
|
virtual bool reportKlobucharIonoModelEvent(GnssKlobucharIonoModel& ionoModel);
|
||||||
virtual bool reportGnssAdditionalSystemInfoEvent(
|
virtual bool reportGnssAdditionalSystemInfoEvent(
|
||||||
GnssAdditionalSystemInfo& additionalSystemInfo);
|
GnssAdditionalSystemInfo& additionalSystemInfo);
|
||||||
|
virtual void reportNfwNotificationEvent(GnssNfwNotification& notification);
|
||||||
|
|
||||||
/* ======== UTILITIES ================================================================= */
|
/* ======== UTILITIES ================================================================= */
|
||||||
bool needReport(const UlpLocation& ulpLocation,
|
bool needReport(const UlpLocation& ulpLocation,
|
||||||
|
@ -382,6 +391,11 @@ public:
|
||||||
void invokeGnssEnergyConsumedCallback(uint64_t energyConsumedSinceFirstBoot);
|
void invokeGnssEnergyConsumedCallback(uint64_t energyConsumedSinceFirstBoot);
|
||||||
void saveGnssEnergyConsumedCallback(GnssEnergyConsumedCallback energyConsumedCb);
|
void saveGnssEnergyConsumedCallback(GnssEnergyConsumedCallback energyConsumedCb);
|
||||||
void reportLocationSystemInfo(const LocationSystemInfo & locationSystemInfo);
|
void reportLocationSystemInfo(const LocationSystemInfo & locationSystemInfo);
|
||||||
|
inline void reportNfwNotification(const GnssNfwNotification& notification) {
|
||||||
|
if (NULL != mNfwCb) {
|
||||||
|
mNfwCb(notification);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*======== GNSSDEBUG ================================================================*/
|
/*======== GNSSDEBUG ================================================================*/
|
||||||
bool getDebugReport(GnssDebugReport& report);
|
bool getDebugReport(GnssDebugReport& report);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2017, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2017, 2019 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -67,6 +67,9 @@ static void agpsDataConnFailed(AGpsExtType agpsType);
|
||||||
static void getDebugReport(GnssDebugReport& report);
|
static void getDebugReport(GnssDebugReport& report);
|
||||||
static void updateConnectionStatus(bool connected, int8_t type);
|
static void updateConnectionStatus(bool connected, int8_t type);
|
||||||
static void getGnssEnergyConsumed(GnssEnergyConsumedCallback energyConsumedCb);
|
static void getGnssEnergyConsumed(GnssEnergyConsumedCallback energyConsumedCb);
|
||||||
|
static void enableNfwLocationAccess(bool enable);
|
||||||
|
static void nfwInit(const NfwCbInfo& cbInfo);
|
||||||
|
static uint8_t getGpsLock();
|
||||||
|
|
||||||
static void odcpiInit(const OdcpiRequestCallback& callback);
|
static void odcpiInit(const OdcpiRequestCallback& callback);
|
||||||
static void odcpiInject(const Location& location);
|
static void odcpiInject(const Location& location);
|
||||||
|
@ -106,7 +109,10 @@ static const GnssInterface gGnssInterface = {
|
||||||
odcpiInit,
|
odcpiInit,
|
||||||
odcpiInject,
|
odcpiInject,
|
||||||
blockCPI,
|
blockCPI,
|
||||||
getGnssEnergyConsumed
|
getGnssEnergyConsumed,
|
||||||
|
enableNfwLocationAccess,
|
||||||
|
nfwInit,
|
||||||
|
getGpsLock
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef DEBUG_X86
|
#ifndef DEBUG_X86
|
||||||
|
@ -346,3 +352,29 @@ static void getGnssEnergyConsumed(GnssEnergyConsumedCallback energyConsumedCb) {
|
||||||
gGnssAdapter->getGnssEnergyConsumedCommand(energyConsumedCb);
|
gGnssAdapter->getGnssEnergyConsumedCommand(energyConsumedCb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void enableNfwLocationAccess(bool enable) {
|
||||||
|
if (NULL != gGnssAdapter) {
|
||||||
|
gGnssAdapter->nfwControlCommand(enable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void nfwInit(const NfwCbInfo& cbInfo) {
|
||||||
|
if (NULL != gGnssAdapter) {
|
||||||
|
gGnssAdapter->initNfwCommand(cbInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t getGpsLock() {
|
||||||
|
if (NULL != gGnssAdapter) {
|
||||||
|
return ContextBase::mGps_conf.GPS_LOCK;
|
||||||
|
} else {
|
||||||
|
/* In case gGnssAdapter is NULL
|
||||||
|
just return 0x3 which means both
|
||||||
|
AFW and NFW are locked (the bits are NFW
|
||||||
|
for 2^1 and AFW for 2^0) */
|
||||||
|
LOC_LOGe("gGnssAdapter is NULL");
|
||||||
|
return 0x3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2017 The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -36,6 +36,7 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include "LocationAPI.h"
|
#include "LocationAPI.h"
|
||||||
|
#include <gps_extended_c.h>
|
||||||
#include <loc_pla.h>
|
#include <loc_pla.h>
|
||||||
#include <log_util.h>
|
#include <log_util.h>
|
||||||
|
|
||||||
|
@ -252,6 +253,9 @@ public:
|
||||||
inline virtual void onGnssLocationInfoCb(
|
inline virtual void onGnssLocationInfoCb(
|
||||||
GnssLocationInfoNotification /*gnssLocationInfoNotification*/) {}
|
GnssLocationInfoNotification /*gnssLocationInfoNotification*/) {}
|
||||||
|
|
||||||
|
inline virtual void onGnssNfwStatusCb(
|
||||||
|
GnssNfwNotification /*notification*/) {}
|
||||||
|
|
||||||
inline virtual void onBatchingCb(size_t /*count*/, Location* /*location*/,
|
inline virtual void onBatchingCb(size_t /*count*/, Location* /*location*/,
|
||||||
BatchingOptions /*batchingOptions*/) {}
|
BatchingOptions /*batchingOptions*/) {}
|
||||||
inline virtual void onBatchingStatusCb(BatchingStatusInfo /*batchingStatus*/,
|
inline virtual void onBatchingStatusCb(BatchingStatusInfo /*batchingStatus*/,
|
||||||
|
|
|
@ -306,6 +306,7 @@ typedef enum {
|
||||||
GNSS_CONFIG_FLAGS_SUPL_EM_SERVICES_BIT = (1<<8),
|
GNSS_CONFIG_FLAGS_SUPL_EM_SERVICES_BIT = (1<<8),
|
||||||
GNSS_CONFIG_FLAGS_SUPL_MODE_BIT = (1<<9),
|
GNSS_CONFIG_FLAGS_SUPL_MODE_BIT = (1<<9),
|
||||||
GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT = (1<<10),
|
GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT = (1<<10),
|
||||||
|
GNSS_CONFIG_FLAGS_EMERGENCY_EXTENSION_SECONDS_BIT = (1<<11),
|
||||||
} GnssConfigFlagsBits;
|
} GnssConfigFlagsBits;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -1109,6 +1110,7 @@ struct GnssConfig{
|
||||||
GnssConfigSuplEmergencyServices suplEmergencyServices;
|
GnssConfigSuplEmergencyServices suplEmergencyServices;
|
||||||
GnssConfigSuplModeMask suplModeMask; //bitwise OR of GnssConfigSuplModeBits
|
GnssConfigSuplModeMask suplModeMask; //bitwise OR of GnssConfigSuplModeBits
|
||||||
std::vector<GnssSvIdSource> blacklistedSvIds;
|
std::vector<GnssSvIdSource> blacklistedSvIds;
|
||||||
|
uint32_t emergencyExtensionSeconds;
|
||||||
|
|
||||||
inline bool equals(const GnssConfig& config) {
|
inline bool equals(const GnssConfig& config) {
|
||||||
if (flags == config.flags &&
|
if (flags == config.flags &&
|
||||||
|
@ -1122,7 +1124,8 @@ struct GnssConfig{
|
||||||
emergencyPdnForEmergencySupl == config.emergencyPdnForEmergencySupl &&
|
emergencyPdnForEmergencySupl == config.emergencyPdnForEmergencySupl &&
|
||||||
suplEmergencyServices == config.suplEmergencyServices &&
|
suplEmergencyServices == config.suplEmergencyServices &&
|
||||||
suplModeMask == config.suplModeMask &&
|
suplModeMask == config.suplModeMask &&
|
||||||
blacklistedSvIds == config.blacklistedSvIds) {
|
blacklistedSvIds == config.blacklistedSvIds &&
|
||||||
|
emergencyExtensionSeconds == config.emergencyExtensionSeconds) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2017 The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -82,6 +82,9 @@ struct GnssInterface {
|
||||||
void (*blockCPI)(double latitude, double longitude, float accuracy,
|
void (*blockCPI)(double latitude, double longitude, float accuracy,
|
||||||
int blockDurationMsec, double latLonDiffThreshold);
|
int blockDurationMsec, double latLonDiffThreshold);
|
||||||
void (*getGnssEnergyConsumed)(GnssEnergyConsumedCallback energyConsumedCb);
|
void (*getGnssEnergyConsumed)(GnssEnergyConsumedCallback energyConsumedCb);
|
||||||
|
void (*enableNfwLocationAccess)(bool enable);
|
||||||
|
void (*nfwInit)(const NfwCbInfo& cbInfo);
|
||||||
|
uint8_t (*getGpsLock)();
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FlpInterface {
|
struct FlpInterface {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2013-2019 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -199,6 +199,11 @@ typedef struct {
|
||||||
AgpsCbPriority cbPriority;
|
AgpsCbPriority cbPriority;
|
||||||
} AgpsCbInfo;
|
} AgpsCbInfo;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
void* visibilityControlCb;
|
||||||
|
void* isInEmergencySession;
|
||||||
|
} NfwCbInfo;
|
||||||
|
|
||||||
/** GPS extended callback structure. */
|
/** GPS extended callback structure. */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/** set to sizeof(LocGpsCallbacks) */
|
/** set to sizeof(LocGpsCallbacks) */
|
||||||
|
@ -2038,6 +2043,46 @@ struct AGnssExtStatusIpV6 {
|
||||||
uint8_t ipV6Addr[16];
|
uint8_t ipV6Addr[16];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Represents the the Nfw Notification structure
|
||||||
|
*/
|
||||||
|
#define GNSS_MAX_NFW_STRING_LEN 20
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
GNSS_NFW_CTRL_PLANE = 0,
|
||||||
|
GNSS_NFW_SUPL = 1,
|
||||||
|
GNSS_NFW_IMS = 10,
|
||||||
|
GNSS_NFW_SIM = 11,
|
||||||
|
GNSS_NFW_OTHER_PROTOCOL_STACK = 100
|
||||||
|
} GnssNfwProtocolStack;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
GNSS_NFW_CARRIER = 0,
|
||||||
|
GNSS_NFW_OEM = 10,
|
||||||
|
GNSS_NFW_MODEM_CHIPSET_VENDOR = 11,
|
||||||
|
GNSS_NFW_GNSS_CHIPSET_VENDOR = 12,
|
||||||
|
GNSS_NFW_OTHER_CHIPSET_VENDOR = 13,
|
||||||
|
GNSS_NFW_AUTOMOBILE_CLIENT = 20,
|
||||||
|
GNSS_NFW_OTHER_REQUESTOR = 100
|
||||||
|
} GnssNfwRequestor;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
GNSS_NFW_REJECTED = 0,
|
||||||
|
GNSS_NFW_ACCEPTED_NO_LOCATION_PROVIDED = 1,
|
||||||
|
GNSS_NFW_ACCEPTED_LOCATION_PROVIDED = 2,
|
||||||
|
} GnssNfwResponseType;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char proxyAppPackageName[GNSS_MAX_NFW_STRING_LEN];
|
||||||
|
GnssNfwProtocolStack protocolStack;
|
||||||
|
char otherProtocolStackName[GNSS_MAX_NFW_STRING_LEN];
|
||||||
|
GnssNfwRequestor requestor;
|
||||||
|
char requestorId[GNSS_MAX_NFW_STRING_LEN];
|
||||||
|
GnssNfwResponseType responseType;
|
||||||
|
bool inEmergencyMode;
|
||||||
|
bool isCachedLocation;
|
||||||
|
} GnssNfwNotification;
|
||||||
|
|
||||||
/* ODCPI Request Info */
|
/* ODCPI Request Info */
|
||||||
enum OdcpiRequestType {
|
enum OdcpiRequestType {
|
||||||
ODCPI_REQUEST_TYPE_START,
|
ODCPI_REQUEST_TYPE_START,
|
||||||
|
@ -2059,6 +2104,11 @@ typedef std::function<void(const OdcpiRequestInfo& request)> OdcpiRequestCallbac
|
||||||
*/
|
*/
|
||||||
typedef void (*AgnssStatusIpV4Cb)(AGnssExtStatusIpV4 status);
|
typedef void (*AgnssStatusIpV4Cb)(AGnssExtStatusIpV4 status);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Callback with NFW information.
|
||||||
|
*/
|
||||||
|
typedef void(*NfwStatusCb)(GnssNfwNotification notification);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Callback with AGNSS(IpV6) status information.
|
* Callback with AGNSS(IpV6) status information.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue