Merge "Update capabilites when suplmode changes"
This commit is contained in:
commit
471853fda2
2 changed files with 51 additions and 34 deletions
|
@ -771,6 +771,7 @@ GnssAdapter::gnssUpdateConfigCommand(GnssConfig config)
|
||||||
ContextBase::mGps_conf.SUPL_MODE = newSuplMode;
|
ContextBase::mGps_conf.SUPL_MODE = newSuplMode;
|
||||||
mAdapter.getUlpProxy()->setCapabilities(
|
mAdapter.getUlpProxy()->setCapabilities(
|
||||||
ContextBase::getCarrierCapabilities());
|
ContextBase::getCarrierCapabilities());
|
||||||
|
mAdapter.broadcastCapabilities(mAdapter.getCapabilities());
|
||||||
}
|
}
|
||||||
err = LOCATION_ERROR_SUCCESS;
|
err = LOCATION_ERROR_SUCCESS;
|
||||||
if (index < mCount) {
|
if (index < mCount) {
|
||||||
|
@ -1085,14 +1086,11 @@ GnssAdapter::requestCapabilitiesCommand(LocationAPI* client)
|
||||||
|
|
||||||
struct MsgRequestCapabilities : public LocMsg {
|
struct MsgRequestCapabilities : public LocMsg {
|
||||||
GnssAdapter& mAdapter;
|
GnssAdapter& mAdapter;
|
||||||
LocApiBase& mApi;
|
|
||||||
LocationAPI* mClient;
|
LocationAPI* mClient;
|
||||||
inline MsgRequestCapabilities(GnssAdapter& adapter,
|
inline MsgRequestCapabilities(GnssAdapter& adapter,
|
||||||
LocApiBase& api,
|
|
||||||
LocationAPI* client) :
|
LocationAPI* client) :
|
||||||
LocMsg(),
|
LocMsg(),
|
||||||
mAdapter(adapter),
|
mAdapter(adapter),
|
||||||
mApi(api),
|
|
||||||
mClient(client) {}
|
mClient(client) {}
|
||||||
inline virtual void proc() const {
|
inline virtual void proc() const {
|
||||||
LocationCallbacks callbacks = mAdapter.getClientCallbacks(mClient);
|
LocationCallbacks callbacks = mAdapter.getClientCallbacks(mClient);
|
||||||
|
@ -1101,41 +1099,58 @@ GnssAdapter::requestCapabilitiesCommand(LocationAPI* client)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LocationCapabilitiesMask mask = 0;
|
LocationCapabilitiesMask mask = mAdapter.getCapabilities();
|
||||||
// time based tracking always supported
|
|
||||||
mask |= LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT;
|
|
||||||
if (mApi.isMessageSupported(LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_LOCATION_BATCHING)){
|
|
||||||
mask |= LOCATION_CAPABILITIES_TIME_BASED_BATCHING_BIT |
|
|
||||||
LOCATION_CAPABILITIES_DISTANCE_BASED_BATCHING_BIT;
|
|
||||||
}
|
|
||||||
if (mApi.isMessageSupported(LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_TRACKING)) {
|
|
||||||
mask |= LOCATION_CAPABILITIES_DISTANCE_BASED_TRACKING_BIT;
|
|
||||||
}
|
|
||||||
if (mApi.isMessageSupported(LOC_API_ADAPTER_MESSAGE_OUTDOOR_TRIP_BATCHING)) {
|
|
||||||
mask |= LOCATION_CAPABILITIES_OUTDOOR_TRIP_BATCHING_BIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
// geofence always supported
|
|
||||||
mask |= LOCATION_CAPABILITIES_GEOFENCE_BIT;
|
|
||||||
if (mApi.gnssConstellationConfig()) {
|
|
||||||
mask |= LOCATION_CAPABILITIES_GNSS_MEASUREMENTS_BIT;
|
|
||||||
}
|
|
||||||
uint32_t carrierCapabilities = ContextBase::getCarrierCapabilities();
|
|
||||||
if (carrierCapabilities & LOC_GPS_CAPABILITY_MSB) {
|
|
||||||
mask |= LOCATION_CAPABILITIES_GNSS_MSB_BIT;
|
|
||||||
}
|
|
||||||
if (LOC_GPS_CAPABILITY_MSA & carrierCapabilities) {
|
|
||||||
mask |= LOCATION_CAPABILITIES_GNSS_MSA_BIT;
|
|
||||||
}
|
|
||||||
if (mApi.isFeatureSupported(LOC_SUPPORTED_FEATURE_DEBUG_NMEA_V02)) {
|
|
||||||
mask |= LOCATION_CAPABILITIES_DEBUG_NMEA_BIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
callbacks.capabilitiesCb(mask);
|
callbacks.capabilitiesCb(mask);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
sendMsg(new MsgRequestCapabilities(*this, *mLocApi, client));
|
sendMsg(new MsgRequestCapabilities(*this, client));
|
||||||
|
}
|
||||||
|
|
||||||
|
LocationCapabilitiesMask
|
||||||
|
GnssAdapter::getCapabilities()
|
||||||
|
{
|
||||||
|
LocationCapabilitiesMask mask = 0;
|
||||||
|
uint32_t carrierCapabilities = ContextBase::getCarrierCapabilities();
|
||||||
|
// time based tracking always supported
|
||||||
|
mask |= LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT;
|
||||||
|
// geofence always supported
|
||||||
|
mask |= LOCATION_CAPABILITIES_GEOFENCE_BIT;
|
||||||
|
if (carrierCapabilities & LOC_GPS_CAPABILITY_MSB) {
|
||||||
|
mask |= LOCATION_CAPABILITIES_GNSS_MSB_BIT;
|
||||||
|
}
|
||||||
|
if (LOC_GPS_CAPABILITY_MSA & carrierCapabilities) {
|
||||||
|
mask |= LOCATION_CAPABILITIES_GNSS_MSA_BIT;
|
||||||
|
}
|
||||||
|
if (mLocApi == nullptr)
|
||||||
|
return mask;
|
||||||
|
if (mLocApi->isMessageSupported(LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_LOCATION_BATCHING)) {
|
||||||
|
mask |= LOCATION_CAPABILITIES_TIME_BASED_BATCHING_BIT |
|
||||||
|
LOCATION_CAPABILITIES_DISTANCE_BASED_BATCHING_BIT;
|
||||||
|
}
|
||||||
|
if (mLocApi->isMessageSupported(LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_TRACKING)) {
|
||||||
|
mask |= LOCATION_CAPABILITIES_DISTANCE_BASED_TRACKING_BIT;
|
||||||
|
}
|
||||||
|
if (mLocApi->isMessageSupported(LOC_API_ADAPTER_MESSAGE_OUTDOOR_TRIP_BATCHING)) {
|
||||||
|
mask |= LOCATION_CAPABILITIES_OUTDOOR_TRIP_BATCHING_BIT;
|
||||||
|
}
|
||||||
|
if (mLocApi->gnssConstellationConfig()) {
|
||||||
|
mask |= LOCATION_CAPABILITIES_GNSS_MEASUREMENTS_BIT;
|
||||||
|
}
|
||||||
|
if (mLocApi->isFeatureSupported(LOC_SUPPORTED_FEATURE_DEBUG_NMEA_V02)) {
|
||||||
|
mask |= LOCATION_CAPABILITIES_DEBUG_NMEA_BIT;
|
||||||
|
}
|
||||||
|
return mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GnssAdapter::broadcastCapabilities(LocationCapabilitiesMask mask)
|
||||||
|
{
|
||||||
|
for (auto it = mClientData.begin(); it != mClientData.end(); ++it) {
|
||||||
|
if (nullptr != it->second.capabilitiesCb) {
|
||||||
|
it->second.capabilitiesCb(mask);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LocationCallbacks
|
LocationCallbacks
|
||||||
|
|
|
@ -139,6 +139,8 @@ public:
|
||||||
void updateClientsEventMask();
|
void updateClientsEventMask();
|
||||||
void stopClientSessions(LocationAPI* client);
|
void stopClientSessions(LocationAPI* client);
|
||||||
LocationCallbacks getClientCallbacks(LocationAPI* client);
|
LocationCallbacks getClientCallbacks(LocationAPI* client);
|
||||||
|
LocationCapabilitiesMask getCapabilities();
|
||||||
|
void broadcastCapabilities(LocationCapabilitiesMask);
|
||||||
|
|
||||||
/* ==== TRACKING ======================================================================= */
|
/* ==== TRACKING ======================================================================= */
|
||||||
/* ======== COMMANDS ====(Called from Client Thread)==================================== */
|
/* ======== COMMANDS ====(Called from Client Thread)==================================== */
|
||||||
|
|
Loading…
Reference in a new issue