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