sm8450-common: gps: Support WiFi RTT position injection for non ES case

Change-Id: I92248c5a95c042c90164308d0617d9197625e6dd
CRs-Fixed: 3432072
This commit is contained in:
haohuang
2023-02-08 17:49:17 +08:00
committed by Arian
parent 58ea2a68e5
commit 7def8dd105
10 changed files with 244 additions and 30 deletions

View File

@@ -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();