Merge "FR47184: tunc constrained and position assisted time estimator"
This commit is contained in:
commit
b18e6f9b8c
11 changed files with 203 additions and 6 deletions
|
@ -74,6 +74,10 @@ const loc_param_s_type ContextBase::mGps_conf_table[] =
|
||||||
{"MODEM_TYPE", &mGps_conf.MODEM_TYPE, NULL, 'n' },
|
{"MODEM_TYPE", &mGps_conf.MODEM_TYPE, NULL, 'n' },
|
||||||
{"MO_SUPL_HOST", &mGps_conf.MO_SUPL_HOST, NULL, 's' },
|
{"MO_SUPL_HOST", &mGps_conf.MO_SUPL_HOST, NULL, 's' },
|
||||||
{"MO_SUPL_PORT", &mGps_conf.MO_SUPL_PORT, NULL, 'n' },
|
{"MO_SUPL_PORT", &mGps_conf.MO_SUPL_PORT, NULL, 'n' },
|
||||||
|
{"CONSTRAINED_TIME_UNCERTAINTY_ENABLED", &mGps_conf.CONSTRAINED_TIME_UNCERTAINTY_ENABLED, NULL, 'n'},
|
||||||
|
{"CONSTRAINED_TIME_UNCERTAINTY_THRESHOLD", &mGps_conf.CONSTRAINED_TIME_UNCERTAINTY_THRESHOLD, NULL, 'f'},
|
||||||
|
{"CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET", &mGps_conf.CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET, NULL, 'n'},
|
||||||
|
{"POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED", &mGps_conf.POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED, NULL, 'n'},
|
||||||
};
|
};
|
||||||
|
|
||||||
const loc_param_s_type ContextBase::mSap_conf_table[] =
|
const loc_param_s_type ContextBase::mSap_conf_table[] =
|
||||||
|
@ -156,6 +160,15 @@ void ContextBase::readConfig()
|
||||||
/* inject supl config to modem with config values from config.xml or gps.conf, default 1 */
|
/* inject supl config to modem with config values from config.xml or gps.conf, default 1 */
|
||||||
mGps_conf.AGPS_CONFIG_INJECT = 1;
|
mGps_conf.AGPS_CONFIG_INJECT = 1;
|
||||||
|
|
||||||
|
/* default configuration value of constrained time uncertainty mode:
|
||||||
|
feature disabled, time uncertainty threshold defined by modem,
|
||||||
|
and unlimited power budget */
|
||||||
|
mGps_conf.CONSTRAINED_TIME_UNCERTAINTY_ENABLED = 0;
|
||||||
|
mGps_conf.CONSTRAINED_TIME_UNCERTAINTY_THRESHOLD = 0.0;
|
||||||
|
mGps_conf.CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET = 0;
|
||||||
|
/* default configuration value of position assisted clock estimator mode */
|
||||||
|
mGps_conf.POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED = 0;
|
||||||
|
|
||||||
UTIL_READ_CONF(LOC_PATH_GPS_CONF, mGps_conf_table);
|
UTIL_READ_CONF(LOC_PATH_GPS_CONF, mGps_conf_table);
|
||||||
UTIL_READ_CONF(LOC_PATH_SAP_CONF, mSap_conf_table);
|
UTIL_READ_CONF(LOC_PATH_SAP_CONF, mSap_conf_table);
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,10 @@ typedef struct loc_gps_cfg_s
|
||||||
uint32_t MODEM_TYPE;
|
uint32_t MODEM_TYPE;
|
||||||
char MO_SUPL_HOST[LOC_MAX_PARAM_STRING];
|
char MO_SUPL_HOST[LOC_MAX_PARAM_STRING];
|
||||||
uint32_t MO_SUPL_PORT;
|
uint32_t MO_SUPL_PORT;
|
||||||
|
uint32_t CONSTRAINED_TIME_UNCERTAINTY_ENABLED;
|
||||||
|
double CONSTRAINED_TIME_UNCERTAINTY_THRESHOLD;
|
||||||
|
uint32_t CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET;
|
||||||
|
uint32_t POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED;
|
||||||
} loc_gps_cfg_s_type;
|
} loc_gps_cfg_s_type;
|
||||||
|
|
||||||
/* NOTE: the implementaiton of the parser casts number
|
/* NOTE: the implementaiton of the parser casts number
|
||||||
|
|
|
@ -175,4 +175,8 @@ bool LocAdapterBase::
|
||||||
requestOdcpiEvent(OdcpiRequestInfo& /*request*/)
|
requestOdcpiEvent(OdcpiRequestInfo& /*request*/)
|
||||||
DEFAULT_IMPL(false)
|
DEFAULT_IMPL(false)
|
||||||
|
|
||||||
|
bool LocAdapterBase::
|
||||||
|
reportGnssEngEnergyConsumedEvent(uint64_t /*energyConsumedSinceFirstBoot*/)
|
||||||
|
DEFAULT_IMPL(false)
|
||||||
|
|
||||||
} // namespace loc_core
|
} // namespace loc_core
|
||||||
|
|
|
@ -167,6 +167,7 @@ public:
|
||||||
virtual void reportGnssSvIdConfigEvent(const GnssSvIdConfig& config);
|
virtual void reportGnssSvIdConfigEvent(const GnssSvIdConfig& config);
|
||||||
virtual void reportGnssSvTypeConfigEvent(const GnssSvTypeConfig& config);
|
virtual void reportGnssSvTypeConfigEvent(const GnssSvTypeConfig& config);
|
||||||
virtual bool requestOdcpiEvent(OdcpiRequestInfo& request);
|
virtual bool requestOdcpiEvent(OdcpiRequestInfo& request);
|
||||||
|
virtual bool reportGnssEngEnergyConsumedEvent(uint64_t energyConsumedSinceFirstBoot);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace loc_core
|
} // namespace loc_core
|
||||||
|
|
|
@ -362,6 +362,13 @@ void LocApiBase::requestOdcpi(OdcpiRequestInfo& request)
|
||||||
TO_1ST_HANDLING_LOCADAPTERS(mLocAdapters[i]->requestOdcpiEvent(request));
|
TO_1ST_HANDLING_LOCADAPTERS(mLocAdapters[i]->requestOdcpiEvent(request));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LocApiBase::reportGnssEngEnergyConsumedEvent(uint64_t energyConsumedSinceFirstBoot)
|
||||||
|
{
|
||||||
|
// loop through adapters, and deliver to the first handling adapter.
|
||||||
|
TO_ALL_LOCADAPTERS(mLocAdapters[i]->reportGnssEngEnergyConsumedEvent(
|
||||||
|
energyConsumedSinceFirstBoot));
|
||||||
|
}
|
||||||
|
|
||||||
void LocApiBase::reportSv(GnssSvNotification& svNotify)
|
void LocApiBase::reportSv(GnssSvNotification& svNotify)
|
||||||
{
|
{
|
||||||
const char* constellationString[] = { "Unknown", "GPS", "SBAS", "GLONASS",
|
const char* constellationString[] = { "Unknown", "GPS", "SBAS", "GLONASS",
|
||||||
|
@ -539,6 +546,10 @@ void LocApiBase::
|
||||||
injectPosition(const Location& /*location*/, bool /*onDemandCpi*/)
|
injectPosition(const Location& /*location*/, bool /*onDemandCpi*/)
|
||||||
DEFAULT_IMPL()
|
DEFAULT_IMPL()
|
||||||
|
|
||||||
|
void LocApiBase::
|
||||||
|
injectPosition(const GnssLocationInfoNotification & /*locationInfo*/, bool /*onDemandCpi*/)
|
||||||
|
DEFAULT_IMPL()
|
||||||
|
|
||||||
void LocApiBase::
|
void LocApiBase::
|
||||||
setTime(LocGpsUtcTime /*time*/, int64_t /*timeReference*/, int /*uncertainty*/)
|
setTime(LocGpsUtcTime /*time*/, int64_t /*timeReference*/, int /*uncertainty*/)
|
||||||
DEFAULT_IMPL()
|
DEFAULT_IMPL()
|
||||||
|
@ -676,4 +687,17 @@ DEFAULT_IMPL()
|
||||||
void LocApiBase::resetConstellationControl()
|
void LocApiBase::resetConstellationControl()
|
||||||
DEFAULT_IMPL()
|
DEFAULT_IMPL()
|
||||||
|
|
||||||
|
LocationError LocApiBase::
|
||||||
|
setConstrainedTuncMode(bool /*enabled*/,
|
||||||
|
float /*tuncConstraint*/,
|
||||||
|
uint32_t /*energyBudget*/)
|
||||||
|
DEFAULT_IMPL(LOCATION_ERROR_SUCCESS)
|
||||||
|
|
||||||
|
LocationError LocApiBase::
|
||||||
|
setPositionAssistedClockEstimatorMode(bool /*enabled*/)
|
||||||
|
DEFAULT_IMPL(LOCATION_ERROR_SUCCESS)
|
||||||
|
|
||||||
|
LocationError LocApiBase::
|
||||||
|
getGnssEnergyConsumed()
|
||||||
|
DEFAULT_IMPL(LOCATION_ERROR_SUCCESS)
|
||||||
} // namespace loc_core
|
} // namespace loc_core
|
||||||
|
|
|
@ -183,6 +183,7 @@ public:
|
||||||
void reportGnssSvIdConfig(const GnssSvIdConfig& config);
|
void reportGnssSvIdConfig(const GnssSvIdConfig& config);
|
||||||
void reportGnssSvTypeConfig(const GnssSvTypeConfig& config);
|
void reportGnssSvTypeConfig(const GnssSvTypeConfig& config);
|
||||||
void requestOdcpi(OdcpiRequestInfo& request);
|
void requestOdcpi(OdcpiRequestInfo& request);
|
||||||
|
void reportGnssEngEnergyConsumedEvent(uint64_t energyConsumedSinceFirstBoot);
|
||||||
|
|
||||||
// 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:
|
||||||
|
@ -198,6 +199,10 @@ public:
|
||||||
|
|
||||||
virtual void
|
virtual void
|
||||||
injectPosition(double latitude, double longitude, float accuracy);
|
injectPosition(double latitude, double longitude, float accuracy);
|
||||||
|
|
||||||
|
virtual void
|
||||||
|
injectPosition(const GnssLocationInfoNotification &locationInfo, bool onDemandCpi=false);
|
||||||
|
|
||||||
virtual void
|
virtual void
|
||||||
injectPosition(const Location& location, bool onDemandCpi);
|
injectPosition(const Location& location, bool onDemandCpi);
|
||||||
virtual void
|
virtual void
|
||||||
|
@ -281,6 +286,12 @@ public:
|
||||||
virtual void setConstellationControl(const GnssSvTypeConfig& config);
|
virtual void setConstellationControl(const GnssSvTypeConfig& config);
|
||||||
virtual void getConstellationControl();
|
virtual void getConstellationControl();
|
||||||
virtual void resetConstellationControl();
|
virtual void resetConstellationControl();
|
||||||
|
|
||||||
|
virtual LocationError setConstrainedTuncMode(bool enabled,
|
||||||
|
float tuncConstraint,
|
||||||
|
uint32_t energyBudget);
|
||||||
|
virtual LocationError setPositionAssistedClockEstimatorMode(bool enabled);
|
||||||
|
virtual LocationError getGnssEnergyConsumed();
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef LocApiBase* (getLocApi_t)(LOC_API_ADAPTER_EVENT_MASK_T exMask,
|
typedef LocApiBase* (getLocApi_t)(LOC_API_ADAPTER_EVENT_MASK_T exMask,
|
||||||
|
|
36
etc/gps.conf
36
etc/gps.conf
|
@ -245,3 +245,39 @@ PROPAGATION_TIME_UNCERTAINTY = 1
|
||||||
# for the first modem in the list
|
# for the first modem in the list
|
||||||
MODEM_TYPE = 1
|
MODEM_TYPE = 1
|
||||||
|
|
||||||
|
##################################################
|
||||||
|
# CONSTRAINED TIME UNCERTAINTY MODE
|
||||||
|
##################################################
|
||||||
|
# 0 : disabled (default)
|
||||||
|
# 1 : enabled
|
||||||
|
# This setting enables GPS engine to keep its time
|
||||||
|
# uncertainty below the specified constraint
|
||||||
|
#CONSTRAINED_TIME_UNCERTAINTY_ENABLED = 0
|
||||||
|
|
||||||
|
# If constrained time uncertainty mode is enabled,
|
||||||
|
# this setting specifies the time uncertainty
|
||||||
|
# threshold that gps engine need to maintain.
|
||||||
|
# In unit of milli-seconds.
|
||||||
|
# Default is 0.0 meaning that modem default value
|
||||||
|
# of time uncertainty threshold will be used.
|
||||||
|
#CONSTRAINED_TIME_UNCERTAINTY_THRESHOLD = 0.0
|
||||||
|
|
||||||
|
# If constrained time uncertainty mode is enabled,
|
||||||
|
# this setting specifies the power budget that
|
||||||
|
# gps engine is allowed to spend to maintain the time
|
||||||
|
# uncertainty.
|
||||||
|
# Default is 0 meaning that GPS engine is not constained
|
||||||
|
# by power budget and can spend as much power as needed.
|
||||||
|
# In unit of 0.1 milli watt second.
|
||||||
|
#CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET = 0
|
||||||
|
|
||||||
|
##################################################
|
||||||
|
# POSITION ASSISTED CLOCK ESTIMATOR
|
||||||
|
##################################################
|
||||||
|
# 0 : disabled (default)
|
||||||
|
# 1 : enabled
|
||||||
|
# This setting enables GPS engine to estimate clock
|
||||||
|
# bias and drift when the signal from at least 1
|
||||||
|
# SV is available and the UE’s position is known by
|
||||||
|
# other position engines.
|
||||||
|
#POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED = 0
|
||||||
|
|
|
@ -733,6 +733,14 @@ GnssAdapter::setConfigCommand()
|
||||||
}
|
}
|
||||||
|
|
||||||
adapter.mLocApi->setXtraVersionCheckSync(gpsConf.XTRA_VERSION_CHECK);
|
adapter.mLocApi->setXtraVersionCheckSync(gpsConf.XTRA_VERSION_CHECK);
|
||||||
|
|
||||||
|
adapter.mLocApi->setConstrainedTuncMode(
|
||||||
|
gpsConf.CONSTRAINED_TIME_UNCERTAINTY_ENABLED == 1,
|
||||||
|
(float)gpsConf.CONSTRAINED_TIME_UNCERTAINTY_THRESHOLD,
|
||||||
|
gpsConf.CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET);
|
||||||
|
adapter.mLocApi->setPositionAssistedClockEstimatorMode(
|
||||||
|
gpsConf.POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED == 1);
|
||||||
|
|
||||||
if (sapConf.GYRO_BIAS_RANDOM_WALK_VALID ||
|
if (sapConf.GYRO_BIAS_RANDOM_WALK_VALID ||
|
||||||
sapConf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID ||
|
sapConf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID ||
|
||||||
sapConf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID ||
|
sapConf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID ||
|
||||||
|
@ -2935,18 +2943,25 @@ GnssAdapter::reportPosition(const UlpLocation& ulpLocation,
|
||||||
mGnssSvIdUsedInPosAvail = true;
|
mGnssSvIdUsedInPosAvail = true;
|
||||||
mGnssSvIdUsedInPosition = locationExtended.gnss_sv_used_ids;
|
mGnssSvIdUsedInPosition = locationExtended.gnss_sv_used_ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GnssLocationInfoNotification locationInfo = {};
|
||||||
|
convertLocationInfo(locationInfo, locationExtended);
|
||||||
|
convertLocation(locationInfo.location, ulpLocation, locationExtended, techMask);
|
||||||
|
|
||||||
for (auto it=mClientData.begin(); it != mClientData.end(); ++it) {
|
for (auto it=mClientData.begin(); it != mClientData.end(); ++it) {
|
||||||
if (nullptr != it->second.gnssLocationInfoCb) {
|
if (nullptr != it->second.gnssLocationInfoCb) {
|
||||||
GnssLocationInfoNotification locationInfo = {};
|
|
||||||
convertLocationInfo(locationInfo, locationExtended);
|
|
||||||
convertLocation(locationInfo.location, ulpLocation, locationExtended, techMask);
|
|
||||||
it->second.gnssLocationInfoCb(locationInfo);
|
it->second.gnssLocationInfoCb(locationInfo);
|
||||||
} else if (nullptr != it->second.trackingCb) {
|
} else if (nullptr != it->second.trackingCb) {
|
||||||
Location location = {};
|
it->second.trackingCb(locationInfo.location);
|
||||||
convertLocation(location, ulpLocation, locationExtended, techMask);
|
|
||||||
it->second.trackingCb(location);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if engine hub is running and the fix is from sensor, e.g.: DRE,
|
||||||
|
// inject DRE fix to modem
|
||||||
|
if ((1 == ContextBase::mGps_conf.POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED) &&
|
||||||
|
(true == initEngHubProxy()) && (LOC_POS_TECH_MASK_SENSORS & techMask)) {
|
||||||
|
mLocApi->injectPosition(locationInfo, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NMEA_PROVIDER_AP == ContextBase::mGps_conf.NMEA_PROVIDER && !mTrackingSessions.empty()) {
|
if (NMEA_PROVIDER_AP == ContextBase::mGps_conf.NMEA_PROVIDER && !mTrackingSessions.empty()) {
|
||||||
|
@ -3542,6 +3557,35 @@ void GnssAdapter::odcpiTimerExpire()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GnssAdapter::invokeGnssEnergyConsumedCallback(uint64_t energyConsumedSinceFirstBoot) {
|
||||||
|
if (mGnssEnergyConsumedCb) {
|
||||||
|
mGnssEnergyConsumedCb(energyConsumedSinceFirstBoot);
|
||||||
|
mGnssEnergyConsumedCb = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
GnssAdapter::reportGnssEngEnergyConsumedEvent(uint64_t energyConsumedSinceFirstBoot){
|
||||||
|
LOC_LOGD("%s]: %" PRIu64 " ", __func__, energyConsumedSinceFirstBoot);
|
||||||
|
|
||||||
|
struct MsgReportGnssGnssEngEnergyConsumed : public LocMsg {
|
||||||
|
GnssAdapter& mAdapter;
|
||||||
|
uint64_t mGnssEnergyConsumedSinceFirstBoot;
|
||||||
|
inline MsgReportGnssGnssEngEnergyConsumed(GnssAdapter& adapter,
|
||||||
|
uint64_t energyConsumed) :
|
||||||
|
LocMsg(),
|
||||||
|
mAdapter(adapter),
|
||||||
|
mGnssEnergyConsumedSinceFirstBoot(energyConsumed) {}
|
||||||
|
inline virtual void proc() const {
|
||||||
|
mAdapter.invokeGnssEnergyConsumedCallback(mGnssEnergyConsumedSinceFirstBoot);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
sendMsg(new MsgReportGnssGnssEngEnergyConsumed(*this, energyConsumedSinceFirstBoot));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void GnssAdapter::initDefaultAgps() {
|
void GnssAdapter::initDefaultAgps() {
|
||||||
LOC_LOGD("%s]: ", __func__);
|
LOC_LOGD("%s]: ", __func__);
|
||||||
|
|
||||||
|
@ -4190,6 +4234,32 @@ static void agpsCloseResultCb (bool isSuccess, AGpsExtType agpsType, void* userD
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GnssAdapter::saveGnssEnergyConsumedCallback(GnssEnergyConsumedCallback energyConsumedCb) {
|
||||||
|
mGnssEnergyConsumedCb = energyConsumedCb;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GnssAdapter::getGnssEnergyConsumedCommand(GnssEnergyConsumedCallback energyConsumedCb) {
|
||||||
|
struct MsgGetGnssEnergyConsumed : public LocMsg {
|
||||||
|
GnssAdapter& mAdapter;
|
||||||
|
LocApiBase& mApi;
|
||||||
|
GnssEnergyConsumedCallback mEnergyConsumedCb;
|
||||||
|
inline MsgGetGnssEnergyConsumed(GnssAdapter& adapter, LocApiBase& api,
|
||||||
|
GnssEnergyConsumedCallback energyConsumedCb) :
|
||||||
|
LocMsg(),
|
||||||
|
mAdapter(adapter),
|
||||||
|
mApi(api),
|
||||||
|
mEnergyConsumedCb(energyConsumedCb){}
|
||||||
|
inline virtual void proc() const {
|
||||||
|
mAdapter.saveGnssEnergyConsumedCallback(mEnergyConsumedCb);
|
||||||
|
mApi.getGnssEnergyConsumed();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
sendMsg(new MsgGetGnssEnergyConsumed(*this, *mLocApi, energyConsumedCb));
|
||||||
|
}
|
||||||
|
|
||||||
/* ==== Eng Hub Proxy ================================================================= */
|
/* ==== Eng Hub Proxy ================================================================= */
|
||||||
/* ======== UTILITIES ================================================================= */
|
/* ======== UTILITIES ================================================================= */
|
||||||
void
|
void
|
||||||
|
|
|
@ -124,6 +124,10 @@ namespace loc_core {
|
||||||
class SystemStatus;
|
class SystemStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef std::function<void(
|
||||||
|
uint64_t gnssEnergyConsumedFromFirstBoot
|
||||||
|
)> GnssEnergyConsumedCallback;
|
||||||
|
|
||||||
class GnssAdapter : public LocAdapterBase {
|
class GnssAdapter : public LocAdapterBase {
|
||||||
|
|
||||||
/* ==== Engine Hub ===================================================================== */
|
/* ==== Engine Hub ===================================================================== */
|
||||||
|
@ -172,6 +176,9 @@ class GnssAdapter : public LocAdapterBase {
|
||||||
/* === Misc ===================================================================== */
|
/* === Misc ===================================================================== */
|
||||||
BlockCPIInfo mBlockCPIInfo;
|
BlockCPIInfo mBlockCPIInfo;
|
||||||
|
|
||||||
|
/* === Misc callback from QMI LOC API ============================================== */
|
||||||
|
GnssEnergyConsumedCallback mGnssEnergyConsumedCb;
|
||||||
|
|
||||||
/*==== CONVERSION ===================================================================*/
|
/*==== CONVERSION ===================================================================*/
|
||||||
static void convertOptions(LocPosMode& out, const TrackingOptions& trackingOptions);
|
static void convertOptions(LocPosMode& out, const TrackingOptions& trackingOptions);
|
||||||
static void convertLocation(Location& out, const UlpLocation& ulpLocation,
|
static void convertLocation(Location& out, const UlpLocation& ulpLocation,
|
||||||
|
@ -295,6 +302,7 @@ public:
|
||||||
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);
|
||||||
|
|
||||||
/* ========= ODCPI ===================================================================== */
|
/* ========= ODCPI ===================================================================== */
|
||||||
/* ======== COMMANDS ====(Called from Client Thread)==================================== */
|
/* ======== COMMANDS ====(Called from Client Thread)==================================== */
|
||||||
|
@ -334,6 +342,7 @@ public:
|
||||||
virtual void reportSvPolynomialEvent(GnssSvPolynomial &svPolynomial);
|
virtual void reportSvPolynomialEvent(GnssSvPolynomial &svPolynomial);
|
||||||
virtual void reportGnssSvIdConfigEvent(const GnssSvIdConfig& config);
|
virtual void reportGnssSvIdConfigEvent(const GnssSvIdConfig& config);
|
||||||
virtual void reportGnssSvTypeConfigEvent(const GnssSvTypeConfig& config);
|
virtual void reportGnssSvTypeConfigEvent(const GnssSvTypeConfig& config);
|
||||||
|
virtual bool reportGnssEngEnergyConsumedEvent(uint64_t energyConsumedSinceFirstBoot);
|
||||||
|
|
||||||
virtual bool requestATL(int connHandle, LocAGpsType agps_type, LocApnTypeMask apn_type_mask);
|
virtual bool requestATL(int connHandle, LocAGpsType agps_type, LocApnTypeMask apn_type_mask);
|
||||||
virtual bool releaseATL(int connHandle);
|
virtual bool releaseATL(int connHandle);
|
||||||
|
@ -354,6 +363,8 @@ public:
|
||||||
void reportGnssSvIdConfig(const GnssSvIdConfig& config);
|
void reportGnssSvIdConfig(const GnssSvIdConfig& config);
|
||||||
void reportGnssSvTypeConfig(const GnssSvTypeConfig& config);
|
void reportGnssSvTypeConfig(const GnssSvTypeConfig& config);
|
||||||
void requestOdcpi(const OdcpiRequestInfo& request);
|
void requestOdcpi(const OdcpiRequestInfo& request);
|
||||||
|
void invokeGnssEnergyConsumedCallback(uint64_t energyConsumedSinceFirstBoot);
|
||||||
|
void saveGnssEnergyConsumedCallback(GnssEnergyConsumedCallback energyConsumedCb);
|
||||||
|
|
||||||
/*======== GNSSDEBUG ================================================================*/
|
/*======== GNSSDEBUG ================================================================*/
|
||||||
bool getDebugReport(GnssDebugReport& report);
|
bool getDebugReport(GnssDebugReport& report);
|
||||||
|
|
|
@ -66,6 +66,7 @@ static void agpsDataConnClosed(AGpsExtType agpsType);
|
||||||
static void agpsDataConnFailed(AGpsExtType agpsType);
|
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 odcpiInit(const OdcpiRequestCallback& callback);
|
static void odcpiInit(const OdcpiRequestCallback& callback);
|
||||||
static void odcpiInject(const Location& location);
|
static void odcpiInject(const Location& location);
|
||||||
|
@ -105,6 +106,7 @@ static const GnssInterface gGnssInterface = {
|
||||||
odcpiInit,
|
odcpiInit,
|
||||||
odcpiInject,
|
odcpiInject,
|
||||||
blockCPI,
|
blockCPI,
|
||||||
|
getGnssEnergyConsumed
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef DEBUG_X86
|
#ifndef DEBUG_X86
|
||||||
|
@ -338,3 +340,9 @@ static void blockCPI(double latitude, double longitude, float accuracy,
|
||||||
blockDurationMsec, latLonDiffThreshold);
|
blockDurationMsec, latLonDiffThreshold);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void getGnssEnergyConsumed(GnssEnergyConsumedCallback energyConsumedCb) {
|
||||||
|
if (NULL != gGnssAdapter) {
|
||||||
|
gGnssAdapter->getGnssEnergyConsumedCommand(energyConsumedCb);
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,6 +32,20 @@
|
||||||
#include <LocationAPI.h>
|
#include <LocationAPI.h>
|
||||||
#include <gps_extended_c.h>
|
#include <gps_extended_c.h>
|
||||||
|
|
||||||
|
/* Used for callback to deliver GNSS energy consumed */
|
||||||
|
/** @fn
|
||||||
|
@brief Used by query API that retrieves energy consumed by
|
||||||
|
modem GNSS engine.
|
||||||
|
|
||||||
|
@param gnssEnergyConsumedFromFirstBoot:
|
||||||
|
Energy consumed by the GNSS engine since the first bootup
|
||||||
|
in units of 0.1 milli watt seconds.
|
||||||
|
A value of 0xffffffffffffffff indicates an invalid reading.
|
||||||
|
*/
|
||||||
|
typedef std::function<void(
|
||||||
|
uint64_t gnssEnergyConsumedFromFirstBoot
|
||||||
|
)> GnssEnergyConsumedCallback;
|
||||||
|
|
||||||
struct GnssInterface {
|
struct GnssInterface {
|
||||||
size_t size;
|
size_t size;
|
||||||
void (*initialize)(void);
|
void (*initialize)(void);
|
||||||
|
@ -65,6 +79,7 @@ struct GnssInterface {
|
||||||
void (*odcpiInject)(const Location& location);
|
void (*odcpiInject)(const Location& location);
|
||||||
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);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FlpInterface {
|
struct FlpInterface {
|
||||||
|
|
Loading…
Reference in a new issue