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; } LocServerType;
typedef enum loc_position_mode_type { 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_BASED,
LOC_POSITION_MODE_MS_ASSISTED, LOC_POSITION_MODE_MS_ASSISTED,
LOC_POSITION_MODE_RESERVED_1, LOC_POSITION_MODE_RESERVED_1,
@ -169,6 +170,7 @@ typedef enum loc_position_mode_type {
LOC_POSITION_MODE_RESERVED_3, LOC_POSITION_MODE_RESERVED_3,
LOC_POSITION_MODE_RESERVED_4, LOC_POSITION_MODE_RESERVED_4,
LOC_POSITION_MODE_RESERVED_5 LOC_POSITION_MODE_RESERVED_5
} LocPositionMode; } LocPositionMode;
#define MIN_POSSIBLE_FIX_INTERVAL 1000 /* msec */ #define MIN_POSSIBLE_FIX_INTERVAL 1000 /* msec */

View file

@ -78,6 +78,7 @@ LocEngAdapter::LocEngAdapter(LOC_API_ADAPTER_EVENT_MASK_T mask,
mAgpsEnabled(false) mAgpsEnabled(false)
{ {
memset(&mFixCriteria, 0, sizeof(mFixCriteria)); memset(&mFixCriteria, 0, sizeof(mFixCriteria));
mFixCriteria.mode = LOC_POSITION_MODE_INVALID;
LOC_LOGD("LocEngAdapter created"); LOC_LOGD("LocEngAdapter created");
} }
@ -101,6 +102,12 @@ void LocEngAdapter::setUlpProxy(UlpProxyBase* ulp)
ulp = new UlpProxyBase(); ulp = new UlpProxyBase();
} }
mUlp = ulp; 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, 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 inline
void LocEngAdapter::reportStatus(GpsStatusValue status) void LocEngAdapter::reportStatus(GpsStatusValue status)
{ {

View file

@ -264,8 +264,7 @@ public:
{return mFixCriteria;} {return mFixCriteria;}
inline virtual bool isInSession() inline virtual bool isInSession()
{ return mNavigating; } { return mNavigating; }
inline void setInSession(bool inSession) void setInSession(bool inSession);
{ mNavigating = inSession; mLocApi->setInSession(inSession); }
/*Values for lock /*Values for lock
1 = Do not lock any position sessions 1 = Do not lock any position sessions