Merge "Fix potential NMEA event registration issue"

This commit is contained in:
qctecmdr 2019-07-25 17:02:01 -07:00 committed by Gerrit - the friendly Code Review server
commit 3eb3079f05
2 changed files with 116 additions and 120 deletions

View file

@ -681,22 +681,10 @@ GnssAdapter::setSuplHostServer(const char* server, int port, LocServerType type)
} }
void void
GnssAdapter::setConfigCommand() GnssAdapter::setConfig()
{ {
LOC_LOGD("%s]: ", __func__); LOC_LOGD("%s]: ", __func__);
struct MsgSetConfig : public LocMsg {
GnssAdapter& mAdapter;
LocApiBase& mApi;
inline MsgSetConfig(GnssAdapter& adapter, LocApiBase& api) :
LocMsg(),
mAdapter(adapter),
mApi(api) {}
inline virtual void proc() const {
if (!mAdapter.isEngineCapabilitiesKnown()) {
mAdapter.mPendingMsgs.push_back(new MsgSetConfig(*this));
return;
}
// set nmea mask type // set nmea mask type
uint32_t mask = 0; uint32_t mask = 0;
if (NMEA_PROVIDER_MP == ContextBase::mGps_conf.NMEA_PROVIDER) { if (NMEA_PROVIDER_MP == ContextBase::mGps_conf.NMEA_PROVIDER) {
@ -705,18 +693,28 @@ GnssAdapter::setConfigCommand()
if (ContextBase::isFeatureSupported(LOC_SUPPORTED_FEATURE_DEBUG_NMEA_V02)) { if (ContextBase::isFeatureSupported(LOC_SUPPORTED_FEATURE_DEBUG_NMEA_V02)) {
mask |= LOC_NMEA_MASK_DEBUG_V02; mask |= LOC_NMEA_MASK_DEBUG_V02;
} }
mAdapter.mNmeaMask= mask; if (mNmeaMask != mask) {
mNmeaMask = mask;
if (mNmeaMask) {
for (auto it=mClientData.begin(); it != mClientData.end(); ++it) {
if ((it->second.gnssNmeaCb != nullptr)) {
updateEvtMask(LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT,
LOC_REGISTRATION_MASK_ENABLED);
break;
}
}
}
}
std::string oldMoServerUrl = mAdapter.getMoServerUrl(); std::string oldMoServerUrl = getMoServerUrl();
mAdapter.setSuplHostServer(ContextBase::mGps_conf.SUPL_HOST, setSuplHostServer(ContextBase::mGps_conf.SUPL_HOST,
ContextBase::mGps_conf.SUPL_PORT, ContextBase::mGps_conf.SUPL_PORT,
LOC_AGPS_SUPL_SERVER); LOC_AGPS_SUPL_SERVER);
mAdapter.setSuplHostServer(ContextBase::mGps_conf.MO_SUPL_HOST, setSuplHostServer(ContextBase::mGps_conf.MO_SUPL_HOST,
ContextBase::mGps_conf.MO_SUPL_PORT, ContextBase::mGps_conf.MO_SUPL_PORT,
LOC_AGPS_MO_SUPL_SERVER); LOC_AGPS_MO_SUPL_SERVER);
// inject the configurations into modem // inject the configurations into modem
GnssAdapter& adapter = mAdapter;
loc_gps_cfg_s gpsConf = ContextBase::mGps_conf; loc_gps_cfg_s gpsConf = ContextBase::mGps_conf;
loc_sap_cfg_s_type sapConf = ContextBase::mSap_conf; loc_sap_cfg_s_type sapConf = ContextBase::mSap_conf;
@ -734,21 +732,21 @@ GnssAdapter::setConfigCommand()
GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT | GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT |
GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT; GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT;
gnssConfigRequested.suplVersion = gnssConfigRequested.suplVersion =
adapter.mLocApi->convertSuplVersion(gpsConf.SUPL_VER); mLocApi->convertSuplVersion(gpsConf.SUPL_VER);
gnssConfigRequested.lppProfile = gnssConfigRequested.lppProfile =
adapter.mLocApi->convertLppProfile(gpsConf.LPP_PROFILE); mLocApi->convertLppProfile(gpsConf.LPP_PROFILE);
gnssConfigRequested.aGlonassPositionProtocolMask = gnssConfigRequested.aGlonassPositionProtocolMask =
gpsConf.A_GLONASS_POS_PROTOCOL_SELECT; gpsConf.A_GLONASS_POS_PROTOCOL_SELECT;
} }
gnssConfigRequested.lppeControlPlaneMask = gnssConfigRequested.lppeControlPlaneMask =
adapter.mLocApi->convertLppeCp(gpsConf.LPPE_CP_TECHNOLOGY); mLocApi->convertLppeCp(gpsConf.LPPE_CP_TECHNOLOGY);
gnssConfigRequested.lppeUserPlaneMask = gnssConfigRequested.lppeUserPlaneMask =
adapter.mLocApi->convertLppeUp(gpsConf.LPPE_UP_TECHNOLOGY); mLocApi->convertLppeUp(gpsConf.LPPE_UP_TECHNOLOGY);
gnssConfigRequested.blacklistedSvIds.assign(adapter.mBlacklistedSvIds.begin(), gnssConfigRequested.blacklistedSvIds.assign(mBlacklistedSvIds.begin(),
adapter.mBlacklistedSvIds.end()); mBlacklistedSvIds.end());
mApi.sendMsg(new LocApiMsg( mLocApi->sendMsg(new LocApiMsg(
[&adapter, gpsConf, sapConf, oldMoServerUrl, gnssConfigRequested] () { [this, gpsConf, sapConf, oldMoServerUrl, gnssConfigRequested] () {
adapter.gnssUpdateConfig(oldMoServerUrl, gnssConfigRequested, gnssConfigRequested); gnssUpdateConfig(oldMoServerUrl, gnssConfigRequested, gnssConfigRequested);
// set nmea mask type // set nmea mask type
uint32_t mask = 0; uint32_t mask = 0;
@ -760,16 +758,16 @@ GnssAdapter::setConfigCommand()
} }
if (mask != 0) { if (mask != 0) {
adapter.mLocApi->setNMEATypesSync(mask); mLocApi->setNMEATypesSync(mask);
} }
adapter.mLocApi->setXtraVersionCheckSync(gpsConf.XTRA_VERSION_CHECK); mLocApi->setXtraVersionCheckSync(gpsConf.XTRA_VERSION_CHECK);
adapter.mLocApi->setConstrainedTuncMode( mLocApi->setConstrainedTuncMode(
gpsConf.CONSTRAINED_TIME_UNCERTAINTY_ENABLED == 1, gpsConf.CONSTRAINED_TIME_UNCERTAINTY_ENABLED == 1,
(float)gpsConf.CONSTRAINED_TIME_UNCERTAINTY_THRESHOLD, (float)gpsConf.CONSTRAINED_TIME_UNCERTAINTY_THRESHOLD,
gpsConf.CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET); gpsConf.CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET);
adapter.mLocApi->setPositionAssistedClockEstimatorMode( mLocApi->setPositionAssistedClockEstimatorMode(
gpsConf.POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED == 1); gpsConf.POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED == 1);
if (sapConf.GYRO_BIAS_RANDOM_WALK_VALID || if (sapConf.GYRO_BIAS_RANDOM_WALK_VALID ||
@ -777,7 +775,7 @@ GnssAdapter::setConfigCommand()
sapConf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || sapConf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID ||
sapConf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || sapConf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID ||
sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID ) { sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID ) {
adapter.mLocApi->setSensorPropertiesSync( mLocApi->setSensorPropertiesSync(
sapConf.GYRO_BIAS_RANDOM_WALK_VALID, sapConf.GYRO_BIAS_RANDOM_WALK_VALID,
sapConf.GYRO_BIAS_RANDOM_WALK, sapConf.GYRO_BIAS_RANDOM_WALK,
sapConf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID, sapConf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID,
@ -789,7 +787,7 @@ GnssAdapter::setConfigCommand()
sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID, sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID,
sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY); sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY);
} }
adapter.mLocApi->setSensorPerfControlConfigSync( mLocApi->setSensorPerfControlConfigSync(
sapConf.SENSOR_CONTROL_MODE, sapConf.SENSOR_CONTROL_MODE,
sapConf.SENSOR_ACCEL_SAMPLES_PER_BATCH, sapConf.SENSOR_ACCEL_SAMPLES_PER_BATCH,
sapConf.SENSOR_ACCEL_BATCHES_PER_SEC, sapConf.SENSOR_ACCEL_BATCHES_PER_SEC,
@ -801,10 +799,7 @@ GnssAdapter::setConfigCommand()
sapConf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH, sapConf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH,
sapConf.SENSOR_ALGORITHM_CONFIG_MASK); sapConf.SENSOR_ALGORITHM_CONFIG_MASK);
} )); } ));
}
};
sendMsg(new MsgSetConfig(*this, *mLocApi));
} }
std::vector<LocationError> GnssAdapter::gnssUpdateConfig(const std::string& oldMoServerUrl, std::vector<LocationError> GnssAdapter::gnssUpdateConfig(const std::string& oldMoServerUrl,
@ -2075,6 +2070,8 @@ GnssAdapter::handleEngineUpEvent()
virtual void proc() const { virtual void proc() const {
mAdapter.setEngineCapabilitiesKnown(true); mAdapter.setEngineCapabilitiesKnown(true);
mAdapter.broadcastCapabilities(mAdapter.getCapabilities()); mAdapter.broadcastCapabilities(mAdapter.getCapabilities());
// must be called only after capabilities are known
mAdapter.setConfig();
mAdapter.restartSessions(); mAdapter.restartSessions();
mAdapter.gnssSvIdConfigUpdate(); mAdapter.gnssSvIdConfigUpdate();
mAdapter.gnssSvTypeConfigUpdate(); mAdapter.gnssSvTypeConfigUpdate();
@ -2086,7 +2083,6 @@ GnssAdapter::handleEngineUpEvent()
}; };
readConfigCommand(); readConfigCommand();
setConfigCommand();
sendMsg(new MsgHandleEngineUpEvent(*this)); sendMsg(new MsgHandleEngineUpEvent(*this));
} }

View file

@ -281,7 +281,6 @@ public:
void disableCommand(uint32_t id); void disableCommand(uint32_t id);
void setControlCallbacksCommand(LocationControlCallbacks& controlCallbacks); void setControlCallbacksCommand(LocationControlCallbacks& controlCallbacks);
void readConfigCommand(); void readConfigCommand();
void setConfigCommand();
void requestUlpCommand(); void requestUlpCommand();
void initEngHubProxyCommand(); void initEngHubProxyCommand();
uint32_t* gnssUpdateConfigCommand(GnssConfig config); uint32_t* gnssUpdateConfigCommand(GnssConfig config);
@ -313,6 +312,7 @@ public:
{ mGnssSvTypeConfigCb = callback; } { mGnssSvTypeConfigCb = callback; }
inline GnssSvTypeConfigCallback gnssGetSvTypeConfigCallback() inline GnssSvTypeConfigCallback gnssGetSvTypeConfigCallback()
{ return mGnssSvTypeConfigCb; } { return mGnssSvTypeConfigCb; }
void setConfig();
/* ========= AGPS ====================================================================== */ /* ========= AGPS ====================================================================== */
/* ======== COMMANDS ====(Called from Client Thread)==================================== */ /* ======== COMMANDS ====(Called from Client Thread)==================================== */