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:
Kevin Tang 2013-10-09 18:35:04 -07:00
parent db74b5e449
commit 351cb70668
3 changed files with 20 additions and 3 deletions

View file

@ -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 */

View file

@ -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)
{

View file

@ -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