enhance ulp handshake
send ULP the position mode if it is valid when ULP handle is first received. This helps handling a race condition where ULP handshake happens when a GPS session is about to happen or already happening. Change-Id: I029e5c3bbb9d8e89b220ca44e9704b5a1d1451ff CRs-Fixed: 554340
This commit is contained in:
parent
db74b5e449
commit
351cb70668
3 changed files with 20 additions and 3 deletions
|
@ -161,7 +161,8 @@ typedef enum loc_server_type {
|
|||
} LocServerType;
|
||||
|
||||
typedef enum loc_position_mode_type {
|
||||
LOC_POSITION_MODE_STANDALONE,
|
||||
LOC_POSITION_MODE_INVALID = -1,
|
||||
LOC_POSITION_MODE_STANDALONE = 0,
|
||||
LOC_POSITION_MODE_MS_BASED,
|
||||
LOC_POSITION_MODE_MS_ASSISTED,
|
||||
LOC_POSITION_MODE_RESERVED_1,
|
||||
|
@ -169,6 +170,7 @@ typedef enum loc_position_mode_type {
|
|||
LOC_POSITION_MODE_RESERVED_3,
|
||||
LOC_POSITION_MODE_RESERVED_4,
|
||||
LOC_POSITION_MODE_RESERVED_5
|
||||
|
||||
} LocPositionMode;
|
||||
|
||||
#define MIN_POSSIBLE_FIX_INTERVAL 1000 /* msec */
|
||||
|
|
|
@ -78,6 +78,7 @@ LocEngAdapter::LocEngAdapter(LOC_API_ADAPTER_EVENT_MASK_T mask,
|
|||
mAgpsEnabled(false)
|
||||
{
|
||||
memset(&mFixCriteria, 0, sizeof(mFixCriteria));
|
||||
mFixCriteria.mode = LOC_POSITION_MODE_INVALID;
|
||||
LOC_LOGD("LocEngAdapter created");
|
||||
}
|
||||
|
||||
|
@ -101,6 +102,12 @@ void LocEngAdapter::setUlpProxy(UlpProxyBase* ulp)
|
|||
ulp = new UlpProxyBase();
|
||||
}
|
||||
mUlp = ulp;
|
||||
|
||||
if (LOC_POSITION_MODE_INVALID != mFixCriteria.mode) {
|
||||
// need to send this mode and start msg to ULP
|
||||
mUlp->sendFixMode(mFixCriteria);
|
||||
mUlp->sendStartFix();
|
||||
}
|
||||
}
|
||||
|
||||
void LocInternalAdapter::reportPosition(UlpLocation &location,
|
||||
|
@ -157,6 +164,15 @@ void LocEngAdapter::reportSv(GpsSvStatus &svStatus,
|
|||
}
|
||||
}
|
||||
|
||||
void LocEngAdapter::setInSession(bool inSession)
|
||||
{
|
||||
mNavigating = inSession;
|
||||
mLocApi->setInSession(inSession);
|
||||
if (!mNavigating) {
|
||||
mFixCriteria.mode = LOC_POSITION_MODE_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void LocEngAdapter::reportStatus(GpsStatusValue status)
|
||||
{
|
||||
|
|
|
@ -264,8 +264,7 @@ public:
|
|||
{return mFixCriteria;}
|
||||
inline virtual bool isInSession()
|
||||
{ return mNavigating; }
|
||||
inline void setInSession(bool inSession)
|
||||
{ mNavigating = inSession; mLocApi->setInSession(inSession); }
|
||||
void setInSession(bool inSession);
|
||||
|
||||
/*Values for lock
|
||||
1 = Do not lock any position sessions
|
||||
|
|
Loading…
Reference in a new issue