sm8450-common: gps: Support WiFi RTT position injection for non ES case
Change-Id: I92248c5a95c042c90164308d0617d9197625e6dd CRs-Fixed: 3432072
This commit is contained in:
@@ -5119,7 +5119,7 @@ void GnssAdapter::requestOdcpi(const OdcpiRequestInfo& request)
|
||||
// extending the odcpi session past 30 seconds if needed
|
||||
if (ODCPI_REQUEST_TYPE_START == request.type) {
|
||||
if (!(mOdcpiStateMask & ODCPI_REQ_ACTIVE) && false == mOdcpiTimer.isActive()) {
|
||||
mOdcpiRequestCb(request);
|
||||
fireOdcpiRequest(request);
|
||||
mOdcpiStateMask |= ODCPI_REQ_ACTIVE;
|
||||
mOdcpiTimer.start();
|
||||
sendEmergencyCallStatusEvent = true;
|
||||
@@ -5128,7 +5128,7 @@ void GnssAdapter::requestOdcpi(const OdcpiRequestInfo& request)
|
||||
// and restart the timer
|
||||
} else if (false == mOdcpiRequest.isEmergencyMode &&
|
||||
true == request.isEmergencyMode) {
|
||||
mOdcpiRequestCb(request);
|
||||
fireOdcpiRequest(request);
|
||||
mOdcpiStateMask |= ODCPI_REQ_ACTIVE;
|
||||
if (true == mOdcpiTimer.isActive()) {
|
||||
mOdcpiTimer.restart();
|
||||
@@ -5153,7 +5153,7 @@ void GnssAdapter::requestOdcpi(const OdcpiRequestInfo& request)
|
||||
// to avoid spamming more odcpi requests to the framework
|
||||
} else if (ODCPI_REQUEST_TYPE_STOP == request.type) {
|
||||
LOC_LOGd("request: type %d, isEmergency %d", request.type, request.isEmergencyMode);
|
||||
mOdcpiRequestCb(request);
|
||||
fireOdcpiRequest(request);
|
||||
mOdcpiStateMask = 0;
|
||||
sendEmergencyCallStatusEvent = true;
|
||||
} else {
|
||||
@@ -5222,36 +5222,84 @@ bool GnssAdapter::reportQwesCapabilities(
|
||||
}
|
||||
|
||||
void GnssAdapter::initOdcpiCommand(const OdcpiRequestCallback& callback,
|
||||
OdcpiPrioritytype priority)
|
||||
OdcpiPrioritytype priority,
|
||||
OdcpiCallbackTypeMask typeMask)
|
||||
{
|
||||
struct MsgInitOdcpi : public LocMsg {
|
||||
GnssAdapter& mAdapter;
|
||||
OdcpiRequestCallback mOdcpiCb;
|
||||
OdcpiPrioritytype mPriority;
|
||||
OdcpiCallbackTypeMask mTypeMask;
|
||||
inline MsgInitOdcpi(GnssAdapter& adapter,
|
||||
const OdcpiRequestCallback& callback,
|
||||
OdcpiPrioritytype priority) :
|
||||
OdcpiPrioritytype priority,
|
||||
OdcpiCallbackTypeMask typeMask) :
|
||||
LocMsg(),
|
||||
mAdapter(adapter),
|
||||
mOdcpiCb(callback), mPriority(priority){}
|
||||
mOdcpiCb(callback), mPriority(priority),
|
||||
mTypeMask(typeMask) {}
|
||||
inline virtual void proc() const {
|
||||
mAdapter.initOdcpi(mOdcpiCb, mPriority);
|
||||
mAdapter.initOdcpi(mOdcpiCb, mPriority, mTypeMask);
|
||||
}
|
||||
};
|
||||
|
||||
sendMsg(new MsgInitOdcpi(*this, callback, priority));
|
||||
sendMsg(new MsgInitOdcpi(*this, callback, priority, typeMask));
|
||||
}
|
||||
|
||||
void GnssAdapter::deRegisterOdcpiCommand(OdcpiPrioritytype priority,
|
||||
OdcpiCallbackTypeMask typeMask) {
|
||||
struct MsgDeRegisterNonEsOdcpi : public LocMsg {
|
||||
GnssAdapter& mAdapter;
|
||||
OdcpiPrioritytype mPriority;
|
||||
OdcpiCallbackTypeMask mTypeMask;
|
||||
inline MsgDeRegisterNonEsOdcpi(GnssAdapter& adapter,
|
||||
OdcpiPrioritytype priority,
|
||||
OdcpiCallbackTypeMask typeMask) :
|
||||
LocMsg(),
|
||||
mAdapter(adapter),
|
||||
mPriority(priority),
|
||||
mTypeMask(typeMask) {}
|
||||
inline virtual void proc() const {
|
||||
mAdapter.deRegisterOdcpi(mPriority, mTypeMask);
|
||||
}
|
||||
};
|
||||
|
||||
sendMsg(new MsgDeRegisterNonEsOdcpi(*this, priority, typeMask));
|
||||
}
|
||||
|
||||
void GnssAdapter::fireOdcpiRequest(const OdcpiRequestInfo& request) {
|
||||
if (request.isEmergencyMode) {
|
||||
mOdcpiRequestCb(request);
|
||||
} else {
|
||||
std::unordered_map<OdcpiPrioritytype, OdcpiRequestCallback>::iterator iter;
|
||||
for (int priority = ODCPI_HANDLER_PRIORITY_HIGH;
|
||||
priority >= ODCPI_HANDLER_PRIORITY_LOW && iter == mNonEsOdcpiReqCbMap.end();
|
||||
priority--) {
|
||||
iter = mNonEsOdcpiReqCbMap.find((OdcpiPrioritytype)priority);
|
||||
}
|
||||
if (iter != mNonEsOdcpiReqCbMap.end()) {
|
||||
iter->second(request);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GnssAdapter::initOdcpi(const OdcpiRequestCallback& callback,
|
||||
OdcpiPrioritytype priority)
|
||||
{
|
||||
LOC_LOGd("In priority: %d, Curr priority: %d", priority, mCallbackPriority);
|
||||
if (priority >= mCallbackPriority) {
|
||||
mOdcpiRequestCb = callback;
|
||||
mCallbackPriority = priority;
|
||||
/* Register for WIFI request */
|
||||
updateEvtMask(LOC_API_ADAPTER_BIT_REQUEST_WIFI,
|
||||
LOC_REGISTRATION_MASK_ENABLED);
|
||||
OdcpiPrioritytype priority, OdcpiCallbackTypeMask typeMask) {
|
||||
if (typeMask & EMERGENCY_ODCPI) {
|
||||
LOC_LOGd("In priority: %d, Curr priority: %d", priority, mCallbackPriority);
|
||||
if (priority >= mCallbackPriority) {
|
||||
mOdcpiRequestCb = callback;
|
||||
mCallbackPriority = priority;
|
||||
/* Register for WIFI request */
|
||||
updateEvtMask(LOC_API_ADAPTER_BIT_REQUEST_WIFI,
|
||||
LOC_REGISTRATION_MASK_ENABLED);
|
||||
}
|
||||
}
|
||||
if (typeMask & NON_EMERGENCY_ODCPI) {
|
||||
//If this is for non emergency odcpi,
|
||||
//Only set callback to mNonEsOdcpiReqCbMap according to its priority
|
||||
//Will overwrite callback with same priority in this map
|
||||
mNonEsOdcpiReqCbMap[priority] = callback;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5373,7 +5421,7 @@ void GnssAdapter::odcpiTimerExpire()
|
||||
// if ODCPI request is still active after timer
|
||||
// expires, request again and restart timer
|
||||
if (mOdcpiStateMask & ODCPI_REQ_ACTIVE) {
|
||||
mOdcpiRequestCb(mOdcpiRequest);
|
||||
fireOdcpiRequest(mOdcpiRequest);
|
||||
mOdcpiTimer.restart();
|
||||
} else {
|
||||
mOdcpiTimer.stop();
|
||||
|
Reference in New Issue
Block a user