diff --git a/core/gps_extended_c.h b/core/gps_extended_c.h index d11016ec..e7aa0b98 100644 --- a/core/gps_extended_c.h +++ b/core/gps_extended_c.h @@ -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 */ diff --git a/loc_api/libloc_api_50001/LocEngAdapter.cpp b/loc_api/libloc_api_50001/LocEngAdapter.cpp index 5224473f..9e337f12 100644 --- a/loc_api/libloc_api_50001/LocEngAdapter.cpp +++ b/loc_api/libloc_api_50001/LocEngAdapter.cpp @@ -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) { diff --git a/loc_api/libloc_api_50001/LocEngAdapter.h b/loc_api/libloc_api_50001/LocEngAdapter.h index 53a5aca0..e0fd2ee5 100644 --- a/loc_api/libloc_api_50001/LocEngAdapter.h +++ b/loc_api/libloc_api_50001/LocEngAdapter.h @@ -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