aboutsummaryrefslogtreecommitdiff
path: root/gps/loc_api/loc_api_v02/LocApiV02.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gps/loc_api/loc_api_v02/LocApiV02.cpp')
-rw-r--r--gps/loc_api/loc_api_v02/LocApiV02.cpp3489
1 files changed, 0 insertions, 3489 deletions
diff --git a/gps/loc_api/loc_api_v02/LocApiV02.cpp b/gps/loc_api/loc_api_v02/LocApiV02.cpp
deleted file mode 100644
index a73459b..0000000
--- a/gps/loc_api/loc_api_v02/LocApiV02.cpp
+++ /dev/null
@@ -1,3489 +0,0 @@
-/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundatoin, nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#define LOG_NDEBUG 0
-#define LOG_TAG "LocSvc_ApiV02"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <dlfcn.h>
-
-#include <hardware/gps.h>
-
-#ifndef USE_GLIB
-#include <utils/SystemClock.h>
-#endif /* USE_GLIB */
-#include <LocApiV02.h>
-#include <loc_api_v02_log.h>
-#include <loc_api_sync_req.h>
-#include <loc_util_log.h>
-#include <gps_extended.h>
-#include "platform_lib_includes.h"
-
-using namespace loc_core;
-
-/* Default session id ; TBD needs incrementing for each */
-#define LOC_API_V02_DEF_SESSION_ID (1)
-
-/* UMTS CP Address key*/
-#define LOC_NI_NOTIF_KEY_ADDRESS "Address"
-
-/* GPS SV Id offset */
-#define GPS_SV_ID_OFFSET (1)
-
-/* GLONASS SV Id offset */
-#define GLONASS_SV_ID_OFFSET (65)
-
-/* SV ID range */
-#define SV_ID_RANGE (32)
-
-#define BDS_SV_ID_OFFSET (201)
-
-/* BeiDou SV ID RANGE*/
-#define BDS_SV_ID_RANGE QMI_LOC_DELETE_MAX_BDS_SV_INFO_LENGTH_V02
-
-/* GPS week unknown*/
-#define C_GPS_WEEK_UNKNOWN (65535)
-
-/* seconds per week*/
-#define WEEK_MSECS (60*60*24*7*1000)
-
-/* number of QMI_LOC messages that need to be checked*/
-#define NUMBER_OF_MSG_TO_BE_CHECKED (3)
-
-/* static event callbacks that call the LocApiV02 callbacks*/
-
-/* global event callback, call the eventCb function in loc api adapter v02
- instance */
-static void globalEventCb(locClientHandleType clientHandle,
- uint32_t eventId,
- const locClientEventIndUnionType eventPayload,
- void* pClientCookie)
-{
- MODEM_LOG_CALLFLOW(%s, loc_get_v02_event_name(eventId));
- LocApiV02 *locApiV02Instance =
- (LocApiV02 *)pClientCookie;
-
- LOC_LOGV ("%s:%d] client = %p, event id = %d, client cookie ptr = %p\n",
- __func__, __LINE__, clientHandle, eventId, pClientCookie);
-
- // return if null is passed
- if( NULL == locApiV02Instance)
- {
- LOC_LOGE ("%s:%d] NULL object passed : client = %p, event id = %d\n",
- __func__, __LINE__, clientHandle, eventId);
- return;
- }
- locApiV02Instance->eventCb(clientHandle, eventId, eventPayload);
-}
-
-/* global response callback, it calls the sync request process
- indication function to unblock the request that is waiting on this
- response indication*/
-static void globalRespCb(locClientHandleType clientHandle,
- uint32_t respId,
- const locClientRespIndUnionType respPayload,
- void* pClientCookie)
-{
- MODEM_LOG_CALLFLOW(%s, loc_get_v02_event_name(respId));
- LocApiV02 *locApiV02Instance =
- (LocApiV02 *)pClientCookie;
-
-
- LOC_LOGV ("%s:%d] client = %p, resp id = %d, client cookie ptr = %p\n",
- __func__, __LINE__, clientHandle, respId, pClientCookie);
-
- if( NULL == locApiV02Instance)
- {
- LOC_LOGE ("%s:%d] NULL object passed : client = %p, resp id = %d\n",
- __func__, __LINE__, clientHandle, respId);
- return;
- }
- // process the sync call
- // use pDeleteAssistDataInd as a dummy pointer
- loc_sync_process_ind(clientHandle, respId,
- (void *)respPayload.pDeleteAssistDataInd);
-}
-
-/* global error callback, it will call the handle service down
- function in the loc api adapter instance. */
-static void globalErrorCb (locClientHandleType clientHandle,
- locClientErrorEnumType errorId,
- void *pClientCookie)
-{
- LocApiV02 *locApiV02Instance =
- (LocApiV02 *)pClientCookie;
-
- LOC_LOGV ("%s:%d] client = %p, error id = %d\n, client cookie ptr = %p\n",
- __func__, __LINE__, clientHandle, errorId, pClientCookie);
- if( NULL == locApiV02Instance)
- {
- LOC_LOGE ("%s:%d] NULL object passed : client = %p, error id = %d\n",
- __func__, __LINE__, clientHandle, errorId);
- return;
- }
- locApiV02Instance->errorCb(clientHandle, errorId);
-}
-
-/* global structure containing the callbacks */
-locClientCallbacksType globalCallbacks =
-{
- sizeof(locClientCallbacksType),
- globalEventCb,
- globalRespCb,
- globalErrorCb
-};
-
-/* Constructor for LocApiV02 */
-LocApiV02 :: LocApiV02(const MsgTask* msgTask,
- LOC_API_ADAPTER_EVENT_MASK_T exMask,
- ContextBase* context):
- LocApiBase(msgTask, exMask, context),
- clientHandle(LOC_CLIENT_INVALID_HANDLE_VALUE),
- dsClientIface(NULL),
- dsClientHandle(NULL),
- mGnssMeasurementSupported(sup_unknown),
- mQmiMask(0), mInSession(false), mEngineOn(false)
-{
- // initialize loc_sync_req interface
- loc_sync_req_init();
-}
-
-/* Destructor for LocApiV02 */
-LocApiV02 :: ~LocApiV02()
-{
- close();
-}
-
-LocApiBase* getLocApi(const MsgTask *msgTask,
- LOC_API_ADAPTER_EVENT_MASK_T exMask,
- ContextBase* context)
-{
- LOC_LOGD("%s:%d]: Creating new LocApiV02", __func__, __LINE__);
- return new LocApiV02(msgTask, exMask, context);
-}
-
-/* Initialize a loc api v02 client AND
- check which loc message are supported by modem */
-enum loc_api_adapter_err
-LocApiV02 :: open(LOC_API_ADAPTER_EVENT_MASK_T mask)
-{
- enum loc_api_adapter_err rtv = LOC_API_ADAPTER_ERR_SUCCESS;
- LOC_API_ADAPTER_EVENT_MASK_T newMask = mMask | (mask & ~mExcludedMask);
- locClientEventMaskType qmiMask = convertMask(newMask);
- LOC_LOGD("%s:%d]: Enter mMask: %x; mask: %x; newMask: %x mQmiMask: %lld qmiMask: %lld",
- __func__, __LINE__, mMask, mask, newMask, mQmiMask, qmiMask);
- /* If the client is already open close it first */
- if(LOC_CLIENT_INVALID_HANDLE_VALUE == clientHandle)
- {
- locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
-
- LOC_LOGV ("%s:%d]: reference to this = %p passed in \n",
- __func__, __LINE__, this);
- /* initialize the loc api v02 interface, note that
- the locClientOpen() function will block if the
- service is unavailable for a fixed time out */
-
- // it is important to cap the mask here, because not all LocApi's
- // can enable the same bits, e.g. foreground and bckground.
- status = locClientOpen(adjustMaskForNoSession(qmiMask), &globalCallbacks,
- &clientHandle, (void *)this);
- mMask = newMask;
- mQmiMask = qmiMask;
- if (eLOC_CLIENT_SUCCESS != status ||
- clientHandle == LOC_CLIENT_INVALID_HANDLE_VALUE )
- {
- mMask = 0;
- mQmiMask = 0;
- LOC_LOGE ("%s:%d]: locClientOpen failed, status = %s\n", __func__,
- __LINE__, loc_get_v02_client_status_name(status));
- rtv = LOC_API_ADAPTER_ERR_FAILURE;
- } else {
- uint64_t supportedMsgList = 0;
- const uint32_t msgArray[NUMBER_OF_MSG_TO_BE_CHECKED] =
- {
- // For - LOC_API_ADAPTER_MESSAGE_LOCATION_BATCHING
- QMI_LOC_GET_BATCH_SIZE_REQ_V02,
-
- // For - LOC_API_ADAPTER_MESSAGE_BATCHED_GENFENCE_BREACH
- QMI_LOC_EVENT_GEOFENCE_BATCHED_BREACH_NOTIFICATION_IND_V02,
-
- // For - LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_TRACKING
- QMI_LOC_START_DBT_REQ_V02
- };
-
- // check the modem
- status = locClientSupportMsgCheck(clientHandle,
- msgArray,
- NUMBER_OF_MSG_TO_BE_CHECKED,
- &supportedMsgList);
- if (eLOC_CLIENT_SUCCESS != status) {
- LOC_LOGE("%s:%d]: Failed to checking QMI_LOC message supported. \n",
- __func__, __LINE__);
- }
-
- /** if batching is supported , check if the adaptive batching or
- distance-based batching is supported. */
- uint32_t messageChecker = 1 << LOC_API_ADAPTER_MESSAGE_LOCATION_BATCHING;
- if ((messageChecker & supportedMsgList) == messageChecker) {
- locClientReqUnionType req_union;
- locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
- qmiLocQueryAonConfigReqMsgT_v02 queryAonConfigReq;
- qmiLocQueryAonConfigIndMsgT_v02 queryAonConfigInd;
-
- memset(&queryAonConfigReq, 0, sizeof(queryAonConfigReq));
- memset(&queryAonConfigInd, 0, sizeof(queryAonConfigInd));
- queryAonConfigReq.transactionId = LOC_API_V02_DEF_SESSION_ID;
-
- req_union.pQueryAonConfigReq = &queryAonConfigReq;
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_QUERY_AON_CONFIG_REQ_V02,
- req_union,
- LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_QUERY_AON_CONFIG_IND_V02,
- &queryAonConfigInd);
-
- if (status == eLOC_CLIENT_FAILURE_UNSUPPORTED) {
- LOC_LOGE("%s:%d]: Query AON config is not supported.\n", __func__, __LINE__);
- } else {
- if (status != eLOC_CLIENT_SUCCESS ||
- queryAonConfigInd.status != eQMI_LOC_SUCCESS_V02) {
- LOC_LOGE("%s:%d]: Query AON config failed."
- " status: %s, ind status:%s\n",
- __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(queryAonConfigInd.status));
- } else {
- LOC_LOGD("%s:%d]: Query AON config succeeded. aonCapability is %d.\n",
- __func__, __LINE__, queryAonConfigInd.aonCapability);
- if (queryAonConfigInd.aonCapability_valid) {
- if (queryAonConfigInd.aonCapability |
- QMI_LOC_MASK_AON_TIME_BASED_BATCHING_SUPPORTED_V02) {
- LOC_LOGD("%s:%d]: LB 1.0 is supported.\n", __func__, __LINE__);
- }
- if (queryAonConfigInd.aonCapability |
- QMI_LOC_MASK_AON_AUTO_BATCHING_SUPPORTED_V02) {
- LOC_LOGD("%s:%d]: LB 1.5 is supported.\n", __func__, __LINE__);
- supportedMsgList |=
- (1 << LOC_API_ADAPTER_MESSAGE_ADAPTIVE_LOCATION_BATCHING);
- }
- if (queryAonConfigInd.aonCapability |
- QMI_LOC_MASK_AON_DISTANCE_BASED_BATCHING_SUPPORTED_V02) {
- LOC_LOGD("%s:%d]: LB 2.0 is supported.\n", __func__, __LINE__);
- supportedMsgList |=
- (1 << LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_LOCATION_BATCHING);
- }
- if (queryAonConfigInd.aonCapability |
- QMI_LOC_MASK_AON_DISTANCE_BASED_TRACKING_SUPPORTED_V02) {
- LOC_LOGD("%s:%d]: DBT 2.0 is supported.\n", __func__, __LINE__);
- }
- if (queryAonConfigInd.aonCapability |
- QMI_LOC_MASK_AON_UPDATE_TBF_SUPPORTED_V02) {
- LOC_LOGD("%s:%d]: Updating tracking TBF on the fly is supported.\n",
- __func__, __LINE__);
- supportedMsgList |=
- (1 << LOC_API_ADAPTER_MESSAGE_UPDATE_TBF_ON_THE_FLY);
- }
- } else {
- LOC_LOGE("%s:%d]: AON capability is invalid.\n", __func__, __LINE__);
- }
- }
- }
- }
- LOC_LOGV("%s:%d]: supportedMsgList is %lld. \n",
- __func__, __LINE__, supportedMsgList);
- // save the supported message list
- saveSupportedMsgList(supportedMsgList);
- }
- } else if (newMask != mMask) {
- // it is important to cap the mask here, because not all LocApi's
- // can enable the same bits, e.g. foreground and background.
- if (!registerEventMask(qmiMask)) {
- // we do not update mMask here, because it did not change
- // as the mask update has failed.
- rtv = LOC_API_ADAPTER_ERR_FAILURE;
- }
- else {
- mMask = newMask;
- mQmiMask = qmiMask;
- }
- }
- LOC_LOGD("%s:%d]: Exit mMask: %x; mask: %x mQmiMask: %llx qmiMask: %llx",
- __func__, __LINE__, mMask, mask, mQmiMask, qmiMask);
-
- if (LOC_API_ADAPTER_ERR_SUCCESS == rtv) {
- cacheGnssMeasurementSupport();
- }
-
- return rtv;
-}
-
-bool LocApiV02 :: registerEventMask(locClientEventMaskType qmiMask)
-{
- if (!mInSession) {
- qmiMask = adjustMaskForNoSession(qmiMask);
- }
- LOC_LOGD("%s:%d]: mQmiMask=%lld qmiMask=%lld",
- __func__, __LINE__, mQmiMask, qmiMask);
- return locClientRegisterEventMask(clientHandle, qmiMask);
-}
-
-locClientEventMaskType LocApiV02 :: adjustMaskForNoSession(locClientEventMaskType qmiMask)
-{
- LOC_LOGD("%s:%d]: before qmiMask=%lld",
- __func__, __LINE__, qmiMask);
- locClientEventMaskType clearMask = QMI_LOC_EVENT_MASK_POSITION_REPORT_V02 |
- QMI_LOC_EVENT_MASK_GNSS_SV_INFO_V02 |
- QMI_LOC_EVENT_MASK_NMEA_V02 |
- QMI_LOC_EVENT_MASK_ENGINE_STATE_V02 |
- QMI_LOC_EVENT_MASK_GNSS_MEASUREMENT_REPORT_V02;
-
- qmiMask = qmiMask & ~clearMask;
- LOC_LOGD("%s:%d]: after qmiMask=%lld",
- __func__, __LINE__, qmiMask);
- return qmiMask;
-}
-
-enum loc_api_adapter_err LocApiV02 :: close()
-{
- enum loc_api_adapter_err rtv =
- // success if either client is already invalid, or
- // we successfully close the handle
- (LOC_CLIENT_INVALID_HANDLE_VALUE == clientHandle ||
- eLOC_CLIENT_SUCCESS == locClientClose(&clientHandle)) ?
- LOC_API_ADAPTER_ERR_SUCCESS : LOC_API_ADAPTER_ERR_FAILURE;
-
- mMask = 0;
- clientHandle = LOC_CLIENT_INVALID_HANDLE_VALUE;
-
- return rtv;
-}
-
-/* start positioning session */
-enum loc_api_adapter_err LocApiV02 :: startFix(const LocPosMode& fixCriteria)
-{
- locClientStatusEnumType status;
- locClientReqUnionType req_union;
-
- qmiLocStartReqMsgT_v02 start_msg;
-
- qmiLocSetOperationModeReqMsgT_v02 set_mode_msg;
- qmiLocSetOperationModeIndMsgT_v02 set_mode_ind;
-
- // clear all fields, validity masks
- memset (&start_msg, 0, sizeof(start_msg));
- memset (&set_mode_msg, 0, sizeof(set_mode_msg));
- memset (&set_mode_ind, 0, sizeof(set_mode_ind));
-
- LOC_LOGV("%s:%d]: start \n", __func__, __LINE__);
- fixCriteria.logv();
-
- mInSession = true;
- registerEventMask(mQmiMask);
-
- // fill in the start request
- switch(fixCriteria.mode)
- {
- case LOC_POSITION_MODE_MS_BASED:
- set_mode_msg.operationMode = eQMI_LOC_OPER_MODE_MSB_V02;
- break;
-
- case LOC_POSITION_MODE_MS_ASSISTED:
- set_mode_msg.operationMode = eQMI_LOC_OPER_MODE_MSA_V02;
- break;
-
- case LOC_POSITION_MODE_RESERVED_4:
- set_mode_msg.operationMode = eQMI_LOC_OPER_MODE_CELL_ID_V02;
- break;
-
- case LOC_POSITION_MODE_RESERVED_5:
- set_mode_msg.operationMode = eQMI_LOC_OPER_MODE_WWAN_V02;
- break;
-
- default:
- set_mode_msg.operationMode = eQMI_LOC_OPER_MODE_STANDALONE_V02;
- break;
- }
-
- req_union.pSetOperationModeReq = &set_mode_msg;
-
- // send the mode first, before the start message.
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_OPERATION_MODE_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_OPERATION_MODE_IND_V02,
- &set_mode_ind); // NULL?
- //When loc_sync_send_req status is time out, more likely the response was lost.
- //startFix will continue as though it is succeeded.
- if ((status != eLOC_CLIENT_SUCCESS && status != eLOC_CLIENT_FAILURE_TIMEOUT) ||
- eQMI_LOC_SUCCESS_V02 != set_mode_ind.status)
- {
- LOC_LOGE ("%s:%d]: set opertion mode failed status = %s, "
- "ind..status = %s\n", __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(set_mode_ind.status));
- } else {
- if (status == eLOC_CLIENT_FAILURE_TIMEOUT)
- {
- LOC_LOGE ("%s:%d]: set operation mode timed out\n", __func__, __LINE__);
- }
- start_msg.minInterval_valid = 1;
- start_msg.minInterval = fixCriteria.min_interval;
-
- if (fixCriteria.preferred_accuracy >= 0) {
- start_msg.horizontalAccuracyLevel_valid = 1;
-
- if (fixCriteria.preferred_accuracy <= 100)
- {
- // fix needs high accuracy
- start_msg.horizontalAccuracyLevel = eQMI_LOC_ACCURACY_HIGH_V02;
- }
- else if (fixCriteria.preferred_accuracy <= 1000)
- {
- //fix needs med accuracy
- start_msg.horizontalAccuracyLevel = eQMI_LOC_ACCURACY_MED_V02;
- }
- else
- {
- //fix needs low accuracy
- start_msg.horizontalAccuracyLevel = eQMI_LOC_ACCURACY_LOW_V02;
- }
- }
-
- start_msg.fixRecurrence_valid = 1;
- if(GPS_POSITION_RECURRENCE_SINGLE == fixCriteria.recurrence)
- {
- start_msg.fixRecurrence = eQMI_LOC_RECURRENCE_SINGLE_V02;
- }
- else
- {
- start_msg.fixRecurrence = eQMI_LOC_RECURRENCE_PERIODIC_V02;
- }
-
- //dummy session id
- // TBD: store session ID, check for session id in pos reports.
- start_msg.sessionId = LOC_API_V02_DEF_SESSION_ID;
-
- if (fixCriteria.credentials[0] != 0) {
- int size1 = sizeof(start_msg.applicationId.applicationName);
- int size2 = sizeof(fixCriteria.credentials);
- int len = ((size1 < size2) ? size1 : size2) - 1;
- memcpy(start_msg.applicationId.applicationName,
- fixCriteria.credentials,
- len);
-
- size1 = sizeof(start_msg.applicationId.applicationProvider);
- size2 = sizeof(fixCriteria.provider);
- len = ((size1 < size2) ? size1 : size2) - 1;
- memcpy(start_msg.applicationId.applicationProvider,
- fixCriteria.provider,
- len);
-
- start_msg.applicationId_valid = 1;
- }
-
- // config Altitude Assumed
- start_msg.configAltitudeAssumed_valid = 1;
- start_msg.configAltitudeAssumed = eQMI_LOC_ALTITUDE_ASSUMED_IN_GNSS_SV_INFO_DISABLED_V02;
-
- req_union.pStartReq = &start_msg;
-
- status = locClientSendReq (clientHandle, QMI_LOC_START_REQ_V02,
- req_union );
- }
-
- return convertErr(status);
-}
-
-/* stop a positioning session */
-enum loc_api_adapter_err LocApiV02 :: stopFix()
-{
- locClientStatusEnumType status;
- locClientReqUnionType req_union;
-
- qmiLocStopReqMsgT_v02 stop_msg;
-
- LOC_LOGD(" %s:%d]: stop called \n", __func__, __LINE__);
-
- memset(&stop_msg, 0, sizeof(stop_msg));
-
- // dummy session id
- stop_msg.sessionId = LOC_API_V02_DEF_SESSION_ID;
-
- req_union.pStopReq = &stop_msg;
-
- status = locClientSendReq(clientHandle,
- QMI_LOC_STOP_REQ_V02,
- req_union);
-
- mInSession = false;
- // if engine on never happend, deregister events
- // without waiting for Engine Off
- if (!mEngineOn) {
- registerEventMask(mQmiMask);
- }
-
- if( eLOC_CLIENT_SUCCESS != status)
- {
- LOC_LOGE("%s:%d]: error = %s\n",__func__, __LINE__,
- loc_get_v02_client_status_name(status));
- }
-
- return convertErr(status);
-}
-
-/* set the positioning fix criteria */
-enum loc_api_adapter_err LocApiV02 :: setPositionMode(
- const LocPosMode& posMode)
-{
- if(isInSession())
- {
- //fix is in progress, send a restart
- LOC_LOGD ("%s:%d]: fix is in progress restarting the fix with new "
- "criteria\n", __func__, __LINE__);
-
- return( startFix(posMode));
- }
-
- return LOC_API_ADAPTER_ERR_SUCCESS;
-}
-
-/* inject time into the position engine */
-enum loc_api_adapter_err LocApiV02 ::
- setTime(GpsUtcTime time, int64_t timeReference, int uncertainty)
-{
- locClientReqUnionType req_union;
- locClientStatusEnumType status;
- qmiLocInjectUtcTimeReqMsgT_v02 inject_time_msg;
- qmiLocInjectUtcTimeIndMsgT_v02 inject_time_ind;
-
- memset(&inject_time_msg, 0, sizeof(inject_time_msg));
-
- inject_time_ind.status = eQMI_LOC_GENERAL_FAILURE_V02;
-
- inject_time_msg.timeUtc = time;
-
- inject_time_msg.timeUtc += (int64_t)(ELAPSED_MILLIS_SINCE_BOOT_PLATFORM_LIB_ABSTRACTION - timeReference);
-
- inject_time_msg.timeUnc = uncertainty;
-
- req_union.pInjectUtcTimeReq = &inject_time_msg;
-
- LOC_LOGV ("%s:%d]: uncertainty = %d\n", __func__, __LINE__,
- uncertainty);
-
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_INJECT_UTC_TIME_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_INJECT_UTC_TIME_IND_V02,
- &inject_time_ind);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != inject_time_ind.status)
- {
- LOC_LOGE ("%s:%d] status = %s, ind..status = %s\n", __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(inject_time_ind.status));
- }
-
- return convertErr(status);
-}
-
-/* inject position into the position engine */
-enum loc_api_adapter_err LocApiV02 ::
- injectPosition(double latitude, double longitude, float accuracy)
-{
- locClientReqUnionType req_union;
- locClientStatusEnumType status;
- qmiLocInjectPositionReqMsgT_v02 inject_pos_msg;
- qmiLocInjectPositionIndMsgT_v02 inject_pos_ind;
-
- memset(&inject_pos_msg, 0, sizeof(inject_pos_msg));
-
- inject_pos_msg.latitude_valid = 1;
- inject_pos_msg.latitude = latitude;
-
- inject_pos_msg.longitude_valid = 1;
- inject_pos_msg.longitude = longitude;
-
- inject_pos_msg.horUncCircular_valid = 1;
-
- inject_pos_msg.horUncCircular = accuracy; //meters assumed
- if (inject_pos_msg.horUncCircular < 1000) {
- inject_pos_msg.horUncCircular = 1000;
- }
-
- inject_pos_msg.horConfidence_valid = 1;
-
- inject_pos_msg.horConfidence = 68; //1 std dev assumed as specified by API
-
- inject_pos_msg.rawHorUncCircular_valid = 1;
-
- inject_pos_msg.rawHorUncCircular = accuracy; //meters assumed
-
- inject_pos_msg.rawHorConfidence_valid = 1;
-
- inject_pos_msg.rawHorConfidence = 68; //1 std dev assumed as specified by API
-
- /* Log */
- LOC_LOGD("%s:%d]: Lat=%lf, Lon=%lf, Acc=%.2lf rawAcc=%.2lf", __func__, __LINE__,
- inject_pos_msg.latitude, inject_pos_msg.longitude,
- inject_pos_msg.horUncCircular, inject_pos_msg.rawHorUncCircular);
-
- req_union.pInjectPositionReq = &inject_pos_msg;
-
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_INJECT_POSITION_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_INJECT_POSITION_IND_V02,
- &inject_pos_ind);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != inject_pos_ind.status)
- {
- LOC_LOGE ("%s:%d]: error! status = %s, inject_pos_ind.status = %s\n",
- __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(inject_pos_ind.status));
- }
-
- return convertErr(status);
-}
-
-/* delete assistance date */
-enum loc_api_adapter_err LocApiV02 :: deleteAidingData(GpsAidingData f)
-{
- locClientReqUnionType req_union;
- locClientStatusEnumType status;
- qmiLocDeleteAssistDataReqMsgT_v02 delete_req;
- qmiLocDeleteAssistDataIndMsgT_v02 delete_resp;
-
- memset(&delete_req, 0, sizeof(delete_req));
- memset(&delete_resp, 0, sizeof(delete_resp));
-
- if( f == GPS_DELETE_ALL )
- {
- delete_req.deleteAllFlag = true;
- }
-
- else
- {
- /* to keep track of svInfoList for GPS and GLO*/
- uint32_t curr_sv_len = 0;
- uint32_t curr_sv_idx = 0;
- uint32_t sv_id = 0;
-
- if((f & GPS_DELETE_EPHEMERIS ) || ( f & GPS_DELETE_ALMANAC ))
- {
- /* do delete for all GPS SV's */
-
- curr_sv_len += SV_ID_RANGE;
-
- sv_id = GPS_SV_ID_OFFSET;
-
- delete_req.deleteSvInfoList_valid = 1;
-
- delete_req.deleteSvInfoList_len = curr_sv_len;
-
- LOC_LOGV("%s:%d]: Delete GPS SV info for index %d to %d"
- "and sv id %d to %d \n",
- __func__, __LINE__, curr_sv_idx, curr_sv_len - 1,
- sv_id, sv_id+SV_ID_RANGE-1);
-
- for( uint32_t i = curr_sv_idx; i< curr_sv_len ; i++, sv_id++ )
- {
- delete_req.deleteSvInfoList[i].gnssSvId = sv_id;
-
- delete_req.deleteSvInfoList[i].system = eQMI_LOC_SV_SYSTEM_GPS_V02;
-
- if(f & GPS_DELETE_EPHEMERIS )
- {
- // set ephemeris mask for all GPS SV's
- delete_req.deleteSvInfoList[i].deleteSvInfoMask |=
- QMI_LOC_MASK_DELETE_EPHEMERIS_V02;
- }
-
- if( f & GPS_DELETE_ALMANAC )
- {
- delete_req.deleteSvInfoList[i].deleteSvInfoMask |=
- QMI_LOC_MASK_DELETE_ALMANAC_V02;
- }
- }
- // increment the current index
- curr_sv_idx += SV_ID_RANGE;
-
- }
-
- if(f & GPS_DELETE_POSITION )
- {
- delete_req.deleteGnssDataMask_valid = 1;
- delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_POSITION_V02;
- }
-
- if(f & GPS_DELETE_TIME )
- {
- delete_req.deleteGnssDataMask_valid = 1;
- delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_TIME_V02;
- }
-
- if(f & GPS_DELETE_IONO )
- {
- delete_req.deleteGnssDataMask_valid = 1;
- delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_IONO_V02;
- }
-
- if(f & GPS_DELETE_UTC )
- {
- delete_req.deleteGnssDataMask_valid = 1;
- delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_UTC_V02;
- }
-
- if(f & GPS_DELETE_HEALTH )
- {
- delete_req.deleteGnssDataMask_valid = 1;
- delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_HEALTH_V02;
- }
-
- if(f & GPS_DELETE_SVDIR )
- {
- delete_req.deleteGnssDataMask_valid = 1;
- delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GPS_SVDIR_V02;
- }
- if(f & GPS_DELETE_SADATA )
- {
- delete_req.deleteGnssDataMask_valid = 1;
- delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_SADATA_V02;
- }
- if(f & GPS_DELETE_RTI )
- {
- delete_req.deleteGnssDataMask_valid = 1;
- delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_RTI_V02;
- }
- if(f & GPS_DELETE_CELLDB_INFO )
- {
- delete_req.deleteCellDbDataMask_valid = 1;
- delete_req.deleteCellDbDataMask =
- ( QMI_LOC_MASK_DELETE_CELLDB_POS_V02 |
- QMI_LOC_MASK_DELETE_CELLDB_LATEST_GPS_POS_V02 |
- QMI_LOC_MASK_DELETE_CELLDB_OTA_POS_V02 |
- QMI_LOC_MASK_DELETE_CELLDB_EXT_REF_POS_V02 |
- QMI_LOC_MASK_DELETE_CELLDB_TIMETAG_V02 |
- QMI_LOC_MASK_DELETE_CELLDB_CELLID_V02 |
- QMI_LOC_MASK_DELETE_CELLDB_CACHED_CELLID_V02 |
- QMI_LOC_MASK_DELETE_CELLDB_LAST_SRV_CELL_V02 |
- QMI_LOC_MASK_DELETE_CELLDB_CUR_SRV_CELL_V02 |
- QMI_LOC_MASK_DELETE_CELLDB_NEIGHBOR_INFO_V02) ;
-
- }
-#ifndef PDK_FEATURE_SET
-#endif
-
- }
-
- req_union.pDeleteAssistDataReq = &delete_req;
-
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_DELETE_ASSIST_DATA_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_DELETE_ASSIST_DATA_IND_V02,
- &delete_resp);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != delete_resp.status)
- {
- LOC_LOGE ("%s:%d]: error! status = %s, delete_resp.status = %s\n",
- __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(delete_resp.status));
- }
-
- return convertErr(status);
-}
-
-/* send NI user repsonse to the engine */
-enum loc_api_adapter_err LocApiV02 ::
- informNiResponse(GpsUserResponseType userResponse,
- const void* passThroughData)
-{
- locClientReqUnionType req_union;
- locClientStatusEnumType status;
-
- qmiLocNiUserRespReqMsgT_v02 ni_resp;
- qmiLocNiUserRespIndMsgT_v02 ni_resp_ind;
-
- qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *request_pass_back =
- (qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *)passThroughData;
-
- memset(&ni_resp,0, sizeof(ni_resp));
-
- memset(&ni_resp_ind,0, sizeof(ni_resp_ind));
-
- switch (userResponse)
- {
- case GPS_NI_RESPONSE_ACCEPT:
- ni_resp.userResp = eQMI_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT_V02;
- break;
- case GPS_NI_RESPONSE_DENY:
- ni_resp.userResp = eQMI_LOC_NI_LCS_NOTIFY_VERIFY_DENY_V02;
- break;
- case GPS_NI_RESPONSE_NORESP:
- ni_resp.userResp = eQMI_LOC_NI_LCS_NOTIFY_VERIFY_NORESP_V02;
- break;
- default:
- return LOC_API_ADAPTER_ERR_INVALID_PARAMETER;
- }
-
- LOC_LOGV(" %s:%d]: NI response: %d\n", __func__, __LINE__,
- ni_resp.userResp);
-
- ni_resp.notificationType = request_pass_back->notificationType;
-
- // copy SUPL payload from request
- if(request_pass_back->NiSuplInd_valid == 1)
- {
- ni_resp.NiSuplPayload_valid = 1;
- memcpy(&(ni_resp.NiSuplPayload), &(request_pass_back->NiSuplInd),
- sizeof(qmiLocNiSuplNotifyVerifyStructT_v02));
-
- }
- // should this be an "else if"?? we don't need to decide
-
- // copy UMTS-CP payload from request
- if( request_pass_back->NiUmtsCpInd_valid == 1 )
- {
- ni_resp.NiUmtsCpPayload_valid = 1;
- memcpy(&(ni_resp.NiUmtsCpPayload), &(request_pass_back->NiUmtsCpInd),
- sizeof(qmiLocNiUmtsCpNotifyVerifyStructT_v02));
- }
-
- //copy Vx payload from the request
- if( request_pass_back->NiVxInd_valid == 1)
- {
- ni_resp.NiVxPayload_valid = 1;
- memcpy(&(ni_resp.NiVxPayload), &(request_pass_back->NiVxInd),
- sizeof(qmiLocNiVxNotifyVerifyStructT_v02));
- }
-
- // copy Vx service interaction payload from the request
- if(request_pass_back->NiVxServiceInteractionInd_valid == 1)
- {
- ni_resp.NiVxServiceInteractionPayload_valid = 1;
- memcpy(&(ni_resp.NiVxServiceInteractionPayload),
- &(request_pass_back->NiVxServiceInteractionInd),
- sizeof(qmiLocNiVxServiceInteractionStructT_v02));
- }
-
- // copy Network Initiated SUPL Version 2 Extension
- if (request_pass_back->NiSuplVer2ExtInd_valid == 1)
- {
- ni_resp.NiSuplVer2ExtPayload_valid = 1;
- memcpy(&(ni_resp.NiSuplVer2ExtPayload),
- &(request_pass_back->NiSuplVer2ExtInd),
- sizeof(qmiLocNiSuplVer2ExtStructT_v02));
- }
-
- // copy SUPL Emergency Notification
- if(request_pass_back->suplEmergencyNotification_valid)
- {
- ni_resp.suplEmergencyNotification_valid = 1;
- memcpy(&(ni_resp.suplEmergencyNotification),
- &(request_pass_back->suplEmergencyNotification),
- sizeof(qmiLocEmergencyNotificationStructT_v02));
- }
-
- req_union.pNiUserRespReq = &ni_resp;
-
- status = loc_sync_send_req (
- clientHandle, QMI_LOC_NI_USER_RESPONSE_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_NI_USER_RESPONSE_IND_V02, &ni_resp_ind);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != ni_resp_ind.status)
- {
- LOC_LOGE ("%s:%d]: error! status = %s, ni_resp_ind.status = %s\n",
- __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(ni_resp_ind.status));
- }
-
- return convertErr(status);
-}
-
-/* Set UMTs SLP server URL */
-enum loc_api_adapter_err LocApiV02 :: setServer(
- const char* url, int len)
-{
- locClientReqUnionType req_union;
- locClientStatusEnumType status;
- qmiLocSetServerReqMsgT_v02 set_server_req;
- qmiLocSetServerIndMsgT_v02 set_server_ind;
-
- if(len < 0 || len > sizeof(set_server_req.urlAddr))
- {
- LOC_LOGE("%s:%d]: len = %d greater than max allowed url length\n",
- __func__, __LINE__, len);
-
- return LOC_API_ADAPTER_ERR_INVALID_PARAMETER;
- }
-
- memset(&set_server_req, 0, sizeof(set_server_req));
-
- LOC_LOGD("%s:%d]:, url = %s, len = %d\n", __func__, __LINE__, url, len);
-
- set_server_req.serverType = eQMI_LOC_SERVER_TYPE_UMTS_SLP_V02;
-
- set_server_req.urlAddr_valid = 1;
-
- strlcpy(set_server_req.urlAddr, url, sizeof(set_server_req.urlAddr));
-
- req_union.pSetServerReq = &set_server_req;
-
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_SERVER_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_SERVER_IND_V02,
- &set_server_ind);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != set_server_ind.status)
- {
- LOC_LOGE ("%s:%d]: error status = %s, set_server_ind.status = %s\n",
- __func__,__LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(set_server_ind.status));
- }
-
- return convertErr(status);
-}
-
-enum loc_api_adapter_err LocApiV02 ::
- setServer(unsigned int ip, int port, LocServerType type)
-{
- locClientReqUnionType req_union;
- locClientStatusEnumType status;
- qmiLocSetServerReqMsgT_v02 set_server_req;
- qmiLocSetServerIndMsgT_v02 set_server_ind;
- qmiLocServerTypeEnumT_v02 set_server_cmd;
-
- switch (type) {
- case LOC_AGPS_MPC_SERVER:
- set_server_cmd = eQMI_LOC_SERVER_TYPE_CDMA_MPC_V02;
- break;
- case LOC_AGPS_CUSTOM_PDE_SERVER:
- set_server_cmd = eQMI_LOC_SERVER_TYPE_CUSTOM_PDE_V02;
- break;
- default:
- set_server_cmd = eQMI_LOC_SERVER_TYPE_CDMA_PDE_V02;
- break;
- }
-
- memset(&set_server_req, 0, sizeof(set_server_req));
-
- LOC_LOGD("%s:%d]:, ip = %u, port = %d\n", __func__, __LINE__, ip, port);
-
- set_server_req.serverType = set_server_cmd;
- set_server_req.ipv4Addr_valid = 1;
- set_server_req.ipv4Addr.addr = ip;
- set_server_req.ipv4Addr.port = port;
-
- req_union.pSetServerReq = &set_server_req;
-
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_SERVER_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_SERVER_IND_V02,
- &set_server_ind);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != set_server_ind.status)
- {
- LOC_LOGE ("%s:%d]: error status = %s, set_server_ind.status = %s\n",
- __func__,__LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(set_server_ind.status));
- }
-
- return convertErr(status);
-}
-
-/* Inject XTRA data, this module breaks down the XTRA
- file into "chunks" and injects them one at a time */
-enum loc_api_adapter_err LocApiV02 :: setXtraData(
- char* data, int length)
-{
- locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
- int total_parts;
- uint8_t part;
- uint16_t len_injected;
-
- locClientReqUnionType req_union;
- qmiLocInjectPredictedOrbitsDataReqMsgT_v02 inject_xtra;
- qmiLocInjectPredictedOrbitsDataIndMsgT_v02 inject_xtra_ind;
-
- req_union.pInjectPredictedOrbitsDataReq = &inject_xtra;
-
- LOC_LOGD("%s:%d]: xtra size = %d\n", __func__, __LINE__, length);
-
- inject_xtra.formatType_valid = 1;
- inject_xtra.formatType = eQMI_LOC_PREDICTED_ORBITS_XTRA_V02;
- inject_xtra.totalSize = length;
-
- total_parts = ((length - 1) / QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02) + 1;
-
- inject_xtra.totalParts = total_parts;
-
- len_injected = 0; // O bytes injected
-
- // XTRA injection starts with part 1
- for (part = 1; part <= total_parts; part++)
- {
- inject_xtra.partNum = part;
-
- if (QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02 > (length - len_injected))
- {
- inject_xtra.partData_len = length - len_injected;
- }
- else
- {
- inject_xtra.partData_len = QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02;
- }
-
- // copy data into the message
- memcpy(inject_xtra.partData, data+len_injected, inject_xtra.partData_len);
-
- LOC_LOGD("[%s:%d] part %d/%d, len = %d, total injected = %d\n",
- __func__, __LINE__,
- inject_xtra.partNum, total_parts, inject_xtra.partData_len,
- len_injected);
-
- status = loc_sync_send_req( clientHandle,
- QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02,
- &inject_xtra_ind);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != inject_xtra_ind.status ||
- inject_xtra.partNum != inject_xtra_ind.partNum)
- {
- LOC_LOGE ("%s:%d]: failed status = %s, inject_pos_ind.status = %s,"
- " part num = %d, ind.partNum = %d\n", __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(inject_xtra_ind.status),
- inject_xtra.partNum, inject_xtra_ind.partNum);
- } else {
- len_injected += inject_xtra.partData_len;
- LOC_LOGD("%s:%d]: XTRA injected length: %d\n", __func__, __LINE__,
- len_injected);
- }
- }
-
- return convertErr(status);
-}
-
-/* Request the Xtra Server Url from the modem */
-enum loc_api_adapter_err LocApiV02 :: requestXtraServer()
-{
- locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
-
- locClientReqUnionType req_union;
- qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02 request_xtra_server_ind;
-
- status = loc_sync_send_req( clientHandle,
- QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02,
- &request_xtra_server_ind);
-
- if (status == eLOC_CLIENT_SUCCESS &&
- eQMI_LOC_SUCCESS_V02 == request_xtra_server_ind.status &&
- false != request_xtra_server_ind.serverList_valid &&
- 0 != request_xtra_server_ind.serverList.serverList_len)
- {
- if (request_xtra_server_ind.serverList.serverList_len == 1)
- {
- reportXtraServer(request_xtra_server_ind.serverList.serverList[0].serverUrl,
- "",
- "",
- QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
- }
- else if (request_xtra_server_ind.serverList.serverList_len == 2)
- {
- reportXtraServer(request_xtra_server_ind.serverList.serverList[0].serverUrl,
- request_xtra_server_ind.serverList.serverList[1].serverUrl,
- "",
- QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
- }
- else
- {
- reportXtraServer(request_xtra_server_ind.serverList.serverList[0].serverUrl,
- request_xtra_server_ind.serverList.serverList[1].serverUrl,
- request_xtra_server_ind.serverList.serverList[2].serverUrl,
- QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
- }
- }
-
- return convertErr(status);
-}
-
-enum loc_api_adapter_err LocApiV02 :: atlOpenStatus(
- int handle, int is_succ, char* apn, AGpsBearerType bear,
- AGpsType agpsType)
-{
- locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
- locClientReqUnionType req_union;
- qmiLocInformLocationServerConnStatusReqMsgT_v02 conn_status_req;
- qmiLocInformLocationServerConnStatusIndMsgT_v02 conn_status_ind;
-
-
- LOC_LOGD("%s:%d]: ATL open handle = %d, is_succ = %d, "
- "APN = [%s], bearer = %d \n", __func__, __LINE__,
- handle, is_succ, apn, bear);
-
- memset(&conn_status_req, 0, sizeof(conn_status_req));
- memset(&conn_status_ind, 0, sizeof(conn_status_ind));
-
- // Fill in data
- conn_status_req.connHandle = handle;
-
- conn_status_req.requestType = eQMI_LOC_SERVER_REQUEST_OPEN_V02;
-
- if(is_succ)
- {
- conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_SUCCESS_V02;
-
- if(apn != NULL)
- strlcpy(conn_status_req.apnProfile.apnName, apn,
- sizeof(conn_status_req.apnProfile.apnName) );
-
- switch(bear)
- {
- case AGPS_APN_BEARER_IPV4:
- conn_status_req.apnProfile.pdnType =
- eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4_V02;
- conn_status_req.apnProfile_valid = 1;
- break;
-
- case AGPS_APN_BEARER_IPV6:
- conn_status_req.apnProfile.pdnType =
- eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV6_V02;
- conn_status_req.apnProfile_valid = 1;
- break;
-
- case AGPS_APN_BEARER_IPV4V6:
- conn_status_req.apnProfile.pdnType =
- eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4V6_V02;
- conn_status_req.apnProfile_valid = 1;
- break;
-
- case AGPS_APN_BEARER_INVALID:
- conn_status_req.apnProfile_valid = 0;
- break;
-
- default:
- LOC_LOGE("%s:%d]:invalid bearer type\n",__func__,__LINE__);
- conn_status_req.apnProfile_valid = 0;
- return LOC_API_ADAPTER_ERR_INVALID_HANDLE;
- }
-
- }
- else
- {
- conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_FAILURE_V02;
- }
-
- req_union.pInformLocationServerConnStatusReq = &conn_status_req;
-
- result = loc_sync_send_req(clientHandle,
- QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02,
- &conn_status_ind);
-
- if(result != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != conn_status_ind.status)
- {
- LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
- __func__, __LINE__,
- loc_get_v02_client_status_name(result),
- loc_get_v02_qmi_status_name(conn_status_ind.status));
- }
-
- return convertErr(result);
-
-}
-
-
-/* close atl connection */
-enum loc_api_adapter_err LocApiV02 :: atlCloseStatus(
- int handle, int is_succ)
-{
- locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
- locClientReqUnionType req_union;
- qmiLocInformLocationServerConnStatusReqMsgT_v02 conn_status_req;
- qmiLocInformLocationServerConnStatusIndMsgT_v02 conn_status_ind;
-
- LOC_LOGD("%s:%d]: ATL close handle = %d, is_succ = %d\n",
- __func__, __LINE__, handle, is_succ);
-
- memset(&conn_status_req, 0, sizeof(conn_status_req));
- memset(&conn_status_ind, 0, sizeof(conn_status_ind));
-
- // Fill in data
- conn_status_req.connHandle = handle;
-
- conn_status_req.requestType = eQMI_LOC_SERVER_REQUEST_CLOSE_V02;
-
- if(is_succ)
- {
- conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_SUCCESS_V02;
- }
- else
- {
- conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_FAILURE_V02;
- }
-
- req_union.pInformLocationServerConnStatusReq = &conn_status_req;
-
- result = loc_sync_send_req(clientHandle,
- QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02,
- &conn_status_ind);
-
- if(result != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != conn_status_ind.status)
- {
- LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
- __func__, __LINE__,
- loc_get_v02_client_status_name(result),
- loc_get_v02_qmi_status_name(conn_status_ind.status));
- }
-
- return convertErr(result);
-}
-
-/* set the SUPL version */
-enum loc_api_adapter_err LocApiV02 :: setSUPLVersion(uint32_t version)
-{
- locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
- locClientReqUnionType req_union;
-
- qmiLocSetProtocolConfigParametersReqMsgT_v02 supl_config_req;
- qmiLocSetProtocolConfigParametersIndMsgT_v02 supl_config_ind;
-
- LOC_LOGD("%s:%d]: supl version = %d\n", __func__, __LINE__, version);
-
-
- memset(&supl_config_req, 0, sizeof(supl_config_req));
- memset(&supl_config_ind, 0, sizeof(supl_config_ind));
-
- supl_config_req.suplVersion_valid = 1;
- // SUPL version from MSByte to LSByte:
- // (reserved)(major version)(minor version)(serviceIndicator)
-
- supl_config_req.suplVersion = (version == 0x00020000)?
- eQMI_LOC_SUPL_VERSION_2_0_V02 : eQMI_LOC_SUPL_VERSION_1_0_V02;
-
- req_union.pSetProtocolConfigParametersReq = &supl_config_req;
-
- result = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02,
- &supl_config_ind);
-
- if(result != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != supl_config_ind.status)
- {
- LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
- __func__, __LINE__,
- loc_get_v02_client_status_name(result),
- loc_get_v02_qmi_status_name(supl_config_ind.status));
- }
-
- return convertErr(result);
-}
-
-/* set the configuration for LTE positioning profile (LPP) */
-enum loc_api_adapter_err LocApiV02 :: setLPPConfig(uint32_t profile)
-{
- locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
- locClientReqUnionType req_union;
- qmiLocSetProtocolConfigParametersReqMsgT_v02 lpp_config_req;
- qmiLocSetProtocolConfigParametersIndMsgT_v02 lpp_config_ind;
-
- LOC_LOGD("%s:%d]: lpp profile = %d\n", __func__, __LINE__, profile);
-
- memset(&lpp_config_req, 0, sizeof(lpp_config_req));
- memset(&lpp_config_ind, 0, sizeof(lpp_config_ind));
-
- lpp_config_req.lppConfig_valid = 1;
-
- lpp_config_req.lppConfig = profile;
-
- req_union.pSetProtocolConfigParametersReq = &lpp_config_req;
-
- result = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02,
- &lpp_config_ind);
-
- if(result != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != lpp_config_ind.status)
- {
- LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
- __func__, __LINE__,
- loc_get_v02_client_status_name(result),
- loc_get_v02_qmi_status_name(lpp_config_ind.status));
- }
-
- return convertErr(result);
-}
-
-/* set the Sensor Configuration */
-enum loc_api_adapter_err LocApiV02 :: setSensorControlConfig(
- int sensorsDisabled, int sensorProvider)
-{
- locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
- locClientReqUnionType req_union;
-
- qmiLocSetSensorControlConfigReqMsgT_v02 sensor_config_req;
- qmiLocSetSensorControlConfigIndMsgT_v02 sensor_config_ind;
-
- LOC_LOGD("%s:%d]: sensors disabled = %d\n", __func__, __LINE__, sensorsDisabled);
-
- memset(&sensor_config_req, 0, sizeof(sensor_config_req));
- memset(&sensor_config_ind, 0, sizeof(sensor_config_ind));
-
- sensor_config_req.sensorsUsage_valid = 1;
- sensor_config_req.sensorsUsage = (sensorsDisabled == 1) ? eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_DISABLE_V02
- : eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_ENABLE_V02;
-
- sensor_config_req.sensorProvider_valid = 1;
- sensor_config_req.sensorProvider = (sensorProvider == 1 || sensorProvider == 4) ?
- eQMI_LOC_SENSOR_CONFIG_USE_PROVIDER_SSC_V02 :
- eQMI_LOC_SENSOR_CONFIG_USE_PROVIDER_NATIVE_V02;
-
- req_union.pSetSensorControlConfigReq = &sensor_config_req;
-
- result = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02,
- &sensor_config_ind);
-
- if(result != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != sensor_config_ind.status)
- {
- LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
- __func__, __LINE__,
- loc_get_v02_client_status_name(result),
- loc_get_v02_qmi_status_name(sensor_config_ind.status));
- }
-
- return convertErr(result);
-}
-
-/* set the Sensor Properties */
-enum loc_api_adapter_err LocApiV02 :: setSensorProperties(bool gyroBiasVarianceRandomWalk_valid, float gyroBiasVarianceRandomWalk,
- bool accelBiasVarianceRandomWalk_valid, float accelBiasVarianceRandomWalk,
- bool angleBiasVarianceRandomWalk_valid, float angleBiasVarianceRandomWalk,
- bool rateBiasVarianceRandomWalk_valid, float rateBiasVarianceRandomWalk,
- bool velocityBiasVarianceRandomWalk_valid, float velocityBiasVarianceRandomWalk)
-{
- locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
- locClientReqUnionType req_union;
-
- qmiLocSetSensorPropertiesReqMsgT_v02 sensor_prop_req;
- qmiLocSetSensorPropertiesIndMsgT_v02 sensor_prop_ind;
-
- LOC_LOGI("%s:%d]: sensors prop: gyroBiasRandomWalk = %f, accelRandomWalk = %f, "
- "angleRandomWalk = %f, rateRandomWalk = %f, velocityRandomWalk = %f\n",
- __func__, __LINE__, gyroBiasVarianceRandomWalk, accelBiasVarianceRandomWalk,
- angleBiasVarianceRandomWalk, rateBiasVarianceRandomWalk, velocityBiasVarianceRandomWalk);
-
- memset(&sensor_prop_req, 0, sizeof(sensor_prop_req));
- memset(&sensor_prop_ind, 0, sizeof(sensor_prop_ind));
-
- /* Set the validity bit and value for each sensor property */
- sensor_prop_req.gyroBiasVarianceRandomWalk_valid = gyroBiasVarianceRandomWalk_valid;
- sensor_prop_req.gyroBiasVarianceRandomWalk = gyroBiasVarianceRandomWalk;
-
- sensor_prop_req.accelerationRandomWalkSpectralDensity_valid = accelBiasVarianceRandomWalk_valid;
- sensor_prop_req.accelerationRandomWalkSpectralDensity = accelBiasVarianceRandomWalk;
-
- sensor_prop_req.angleRandomWalkSpectralDensity_valid = angleBiasVarianceRandomWalk_valid;
- sensor_prop_req.angleRandomWalkSpectralDensity = angleBiasVarianceRandomWalk;
-
- sensor_prop_req.rateRandomWalkSpectralDensity_valid = rateBiasVarianceRandomWalk_valid;
- sensor_prop_req.rateRandomWalkSpectralDensity = rateBiasVarianceRandomWalk;
-
- sensor_prop_req.velocityRandomWalkSpectralDensity_valid = velocityBiasVarianceRandomWalk_valid;
- sensor_prop_req.velocityRandomWalkSpectralDensity = velocityBiasVarianceRandomWalk;
-
- req_union.pSetSensorPropertiesReq = &sensor_prop_req;
-
- result = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02,
- &sensor_prop_ind);
-
- if(result != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != sensor_prop_ind.status)
- {
- LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
- __func__, __LINE__,
- loc_get_v02_client_status_name(result),
- loc_get_v02_qmi_status_name(sensor_prop_ind.status));
- }
-
- return convertErr(result);
-}
-
-/* set the Sensor Performance Config */
-enum loc_api_adapter_err LocApiV02 :: setSensorPerfControlConfig(int controlMode,
- int accelSamplesPerBatch, int accelBatchesPerSec,
- int gyroSamplesPerBatch, int gyroBatchesPerSec,
- int accelSamplesPerBatchHigh, int accelBatchesPerSecHigh,
- int gyroSamplesPerBatchHigh, int gyroBatchesPerSecHigh,
- int algorithmConfig)
-{
- locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
- locClientReqUnionType req_union;
-
- qmiLocSetSensorPerformanceControlConfigReqMsgT_v02 sensor_perf_config_req;
- qmiLocSetSensorPerformanceControlConfigIndMsgT_v02 sensor_perf_config_ind;
-
- LOC_LOGD("%s:%d]: Sensor Perf Control Config (performanceControlMode)(%u) "
- "accel(#smp,#batches) (%u,%u) gyro(#smp,#batches) (%u,%u) "
- "accel_high(#smp,#batches) (%u,%u) gyro_high(#smp,#batches) (%u,%u) "
- "algorithmConfig(%u)\n",
- __FUNCTION__,
- __LINE__,
- controlMode,
- accelSamplesPerBatch,
- accelBatchesPerSec,
- gyroSamplesPerBatch,
- gyroBatchesPerSec,
- accelSamplesPerBatchHigh,
- accelBatchesPerSecHigh,
- gyroSamplesPerBatchHigh,
- gyroBatchesPerSecHigh,
- algorithmConfig
- );
-
- memset(&sensor_perf_config_req, 0, sizeof(sensor_perf_config_req));
- memset(&sensor_perf_config_ind, 0, sizeof(sensor_perf_config_ind));
-
- sensor_perf_config_req.performanceControlMode_valid = 1;
- sensor_perf_config_req.performanceControlMode = (qmiLocSensorPerformanceControlModeEnumT_v02)controlMode;
- sensor_perf_config_req.accelSamplingSpec_valid = 1;
- sensor_perf_config_req.accelSamplingSpec.batchesPerSecond = accelBatchesPerSec;
- sensor_perf_config_req.accelSamplingSpec.samplesPerBatch = accelSamplesPerBatch;
- sensor_perf_config_req.gyroSamplingSpec_valid = 1;
- sensor_perf_config_req.gyroSamplingSpec.batchesPerSecond = gyroBatchesPerSec;
- sensor_perf_config_req.gyroSamplingSpec.samplesPerBatch = gyroSamplesPerBatch;
- sensor_perf_config_req.accelSamplingSpecHigh_valid = 1;
- sensor_perf_config_req.accelSamplingSpecHigh.batchesPerSecond = accelBatchesPerSecHigh;
- sensor_perf_config_req.accelSamplingSpecHigh.samplesPerBatch = accelSamplesPerBatchHigh;
- sensor_perf_config_req.gyroSamplingSpecHigh_valid = 1;
- sensor_perf_config_req.gyroSamplingSpecHigh.batchesPerSecond = gyroBatchesPerSecHigh;
- sensor_perf_config_req.gyroSamplingSpecHigh.samplesPerBatch = gyroSamplesPerBatchHigh;
- sensor_perf_config_req.algorithmConfig_valid = 1;
- sensor_perf_config_req.algorithmConfig = algorithmConfig;
-
- req_union.pSetSensorPerformanceControlConfigReq = &sensor_perf_config_req;
-
- result = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02,
- &sensor_perf_config_ind);
-
- if(result != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != sensor_perf_config_ind.status)
- {
- LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
- __func__, __LINE__,
- loc_get_v02_client_status_name(result),
- loc_get_v02_qmi_status_name(sensor_perf_config_ind.status));
- }
-
- return convertErr(result);
-}
-
-/* set the External Power Config */
-enum loc_api_adapter_err LocApiV02 :: setExtPowerConfig(int isBatteryCharging)
-{
- locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
- locClientReqUnionType req_union;
-
- qmiLocSetExternalPowerConfigReqMsgT_v02 ext_pwr_req;
- qmiLocGetExternalPowerConfigIndMsgT_v02 ext_pwr_ind;
-
- LOC_LOGI("%s:%d]: Ext Pwr Config (isBatteryCharging)(%u)",
- __FUNCTION__,
- __LINE__,
- isBatteryCharging
- );
-
- memset(&ext_pwr_req, 0, sizeof(ext_pwr_req));
- memset(&ext_pwr_ind, 0, sizeof(ext_pwr_ind));
-
- switch(isBatteryCharging)
- {
- /* Charging */
- case 1:
- ext_pwr_req.externalPowerState = eQMI_LOC_EXTERNAL_POWER_CONNECTED_V02;
- break;
-
- /* Not charging */
- case 0:
- ext_pwr_req.externalPowerState = eQMI_LOC_EXTERNAL_POWER_NOT_CONNECTED_V02;
- break;
-
- default:
- LOC_LOGE("%s:%d]: Invalid ext power state = %d!",
- __FUNCTION__,
- __LINE__,
- isBatteryCharging);
- return LOC_API_ADAPTER_ERR_INVALID_PARAMETER;
- break;
- }
-
- req_union.pSetExternalPowerConfigReq = &ext_pwr_req;
-
- result = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02,
- &ext_pwr_ind);
-
- if(result != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != ext_pwr_ind.status)
- {
- LOC_LOGE ("%s:%d]: Error status = %d, ind..status = %d ",
- __func__, __LINE__, result, ext_pwr_ind.status);
- }
-
- return convertErr(result);
-}
-
-/* set the Positioning Protocol on A-GLONASS system */
-enum loc_api_adapter_err LocApiV02 :: setAGLONASSProtocol(unsigned long aGlonassProtocol)
-{
- locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
- locClientReqUnionType req_union;
- qmiLocSetProtocolConfigParametersReqMsgT_v02 aGlonassProtocol_req;
- qmiLocSetProtocolConfigParametersIndMsgT_v02 aGlonassProtocol_ind;
-
- memset(&aGlonassProtocol_req, 0, sizeof(aGlonassProtocol_req));
- memset(&aGlonassProtocol_ind, 0, sizeof(aGlonassProtocol_ind));
-
- aGlonassProtocol_req.assistedGlonassProtocolMask_valid = 1;
- aGlonassProtocol_req.assistedGlonassProtocolMask = aGlonassProtocol;
-
- req_union.pSetProtocolConfigParametersReq = &aGlonassProtocol_req;
-
- LOC_LOGD("%s:%d]: aGlonassProtocolMask = 0x%x\n", __func__, __LINE__,
- aGlonassProtocol_req.assistedGlonassProtocolMask);
-
- result = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02,
- &aGlonassProtocol_ind);
-
- if(result != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != aGlonassProtocol_ind.status)
- {
- LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
- __func__, __LINE__,
- loc_get_v02_client_status_name(result),
- loc_get_v02_qmi_status_name(aGlonassProtocol_ind.status));
- }
-
- return convertErr(result);
-}
-
-/* Convert event mask from loc eng to loc_api_v02 format */
-locClientEventMaskType LocApiV02 :: convertMask(
- LOC_API_ADAPTER_EVENT_MASK_T mask)
-{
- locClientEventMaskType eventMask = 0;
- LOC_LOGD("%s:%d]: adapter mask = %u\n", __func__, __LINE__, mask);
-
- if (mask & LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT)
- eventMask |= QMI_LOC_EVENT_MASK_POSITION_REPORT_V02;
-
- if (mask & LOC_API_ADAPTER_BIT_SATELLITE_REPORT)
- eventMask |= QMI_LOC_EVENT_MASK_GNSS_SV_INFO_V02;
-
- /* treat NMEA_1Hz and NMEA_POSITION_REPORT the same*/
- if ((mask & LOC_API_ADAPTER_BIT_NMEA_POSITION_REPORT) ||
- (mask & LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT) )
- eventMask |= QMI_LOC_EVENT_MASK_NMEA_V02;
-
- if (mask & LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST)
- eventMask |= QMI_LOC_EVENT_MASK_NI_NOTIFY_VERIFY_REQ_V02;
-
- if (mask & LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST)
- {
- // TBD: This needs to be decoupled in the HAL
- eventMask |= QMI_LOC_EVENT_MASK_INJECT_PREDICTED_ORBITS_REQ_V02;
- eventMask |= QMI_LOC_EVENT_MASK_INJECT_TIME_REQ_V02;
- eventMask |= QMI_LOC_EVENT_MASK_INJECT_POSITION_REQ_V02;
- }
-
- if (mask & LOC_API_ADAPTER_BIT_STATUS_REPORT)
- {
- eventMask |= (QMI_LOC_EVENT_MASK_ENGINE_STATE_V02);
- }
-
- if (mask & LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST)
- eventMask |= QMI_LOC_EVENT_MASK_LOCATION_SERVER_CONNECTION_REQ_V02;
-
- if (mask & LOC_API_ADAPTER_REQUEST_WIFI)
- eventMask |= QMI_LOC_EVENT_MASK_WIFI_REQ_V02;
-
- if (mask & LOC_API_ADAPTER_SENSOR_STATUS)
- eventMask |= QMI_LOC_EVENT_MASK_SENSOR_STREAMING_READY_STATUS_V02;
-
- if (mask & LOC_API_ADAPTER_REQUEST_TIME_SYNC)
- eventMask |= QMI_LOC_EVENT_MASK_TIME_SYNC_REQ_V02;
-
- if (mask & LOC_API_ADAPTER_REPORT_SPI)
- eventMask |= QMI_LOC_EVENT_MASK_SET_SPI_STREAMING_REPORT_V02;
-
- if (mask & LOC_API_ADAPTER_BIT_REPORT_NI_GEOFENCE)
- eventMask |= QMI_LOC_EVENT_MASK_NI_GEOFENCE_NOTIFICATION_V02;
-
- if (mask & LOC_API_ADAPTER_BIT_GEOFENCE_GEN_ALERT)
- eventMask |= QMI_LOC_EVENT_MASK_GEOFENCE_GEN_ALERT_V02;
-
- if (mask & LOC_API_ADAPTER_BIT_REPORT_GENFENCE_BREACH)
- eventMask |= QMI_LOC_EVENT_MASK_GEOFENCE_BREACH_NOTIFICATION_V02;
-
- if (mask & LOC_API_ADAPTER_BIT_BATCHED_GENFENCE_BREACH_REPORT)
- eventMask |= QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_BREACH_NOTIFICATION_V02;
-
- if (mask & LOC_API_ADAPTER_BIT_REPORT_GENFENCE_DWELL)
- eventMask |= QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_DWELL_NOTIFICATION_V02;
-
- if (mask & LOC_API_ADAPTER_PEDOMETER_CTRL)
- eventMask |= QMI_LOC_EVENT_MASK_PEDOMETER_CONTROL_V02;
-
- if (mask & LOC_API_ADAPTER_MOTION_CTRL)
- eventMask |= QMI_LOC_EVENT_MASK_MOTION_DATA_CONTROL_V02;
-
- if (mask & LOC_API_ADAPTER_REQUEST_WIFI_AP_DATA)
- eventMask |= QMI_LOC_EVENT_MASK_INJECT_WIFI_AP_DATA_REQ_V02;
-
- if(mask & LOC_API_ADAPTER_BIT_BATCH_FULL)
- eventMask |= QMI_LOC_EVENT_MASK_BATCH_FULL_NOTIFICATION_V02;
-
- if(mask & LOC_API_ADAPTER_BIT_BATCHED_POSITION_REPORT)
- eventMask |= QMI_LOC_EVENT_MASK_LIVE_BATCHED_POSITION_REPORT_V02;
-
- // for GDT
- if(mask & LOC_API_ADAPTER_BIT_GDT_UPLOAD_BEGIN_REQ)
- eventMask |= QMI_LOC_EVENT_MASK_GDT_UPLOAD_BEGIN_REQ_V02;
-
- if(mask & LOC_API_ADAPTER_BIT_GDT_UPLOAD_END_REQ)
- eventMask |= QMI_LOC_EVENT_MASK_GDT_UPLOAD_END_REQ_V02;
-
- if (mask & LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT)
- eventMask |= QMI_LOC_EVENT_MASK_GNSS_MEASUREMENT_REPORT_V02;
-
- if(mask & LOC_API_ADAPTER_BIT_REQUEST_TIMEZONE)
- eventMask |= QMI_LOC_EVENT_MASK_GET_TIME_ZONE_REQ_V02;
- return eventMask;
-}
-
-qmiLocLockEnumT_v02 LocApiV02 :: convertGpsLockMask(LOC_GPS_LOCK_MASK lockMask)
-{
- /* GPS HAL uses power voting through GPS Lock mask.
- When QCA1530 daemon is present two values are used: 101 and 103.*/
- if ( 101 == lockMask || 103 == lockMask )
- {
- return (qmiLocLockEnumT_v02)lockMask;
- }
- if (isGpsLockAll(lockMask))
- return eQMI_LOC_LOCK_ALL_V02;
- if (isGpsLockMO(lockMask))
- return eQMI_LOC_LOCK_MI_V02;
- if (isGpsLockMT(lockMask))
- return eQMI_LOC_LOCK_MT_V02;
- if (isGpsLockNone(lockMask))
- return eQMI_LOC_LOCK_NONE_V02;
- return (qmiLocLockEnumT_v02)lockMask;
-}
-
-/* Convert error from loc_api_v02 to loc eng format*/
-enum loc_api_adapter_err LocApiV02 :: convertErr(
- locClientStatusEnumType status)
-{
- switch( status)
- {
- case eLOC_CLIENT_SUCCESS:
- return LOC_API_ADAPTER_ERR_SUCCESS;
-
- case eLOC_CLIENT_FAILURE_GENERAL:
- return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
-
- case eLOC_CLIENT_FAILURE_UNSUPPORTED:
- return LOC_API_ADAPTER_ERR_UNSUPPORTED;
-
- case eLOC_CLIENT_FAILURE_INVALID_PARAMETER:
- return LOC_API_ADAPTER_ERR_INVALID_PARAMETER;
-
- case eLOC_CLIENT_FAILURE_ENGINE_BUSY:
- return LOC_API_ADAPTER_ERR_ENGINE_BUSY;
-
- case eLOC_CLIENT_FAILURE_PHONE_OFFLINE:
- return LOC_API_ADAPTER_ERR_PHONE_OFFLINE;
-
- case eLOC_CLIENT_FAILURE_TIMEOUT:
- return LOC_API_ADAPTER_ERR_TIMEOUT;
-
- case eLOC_CLIENT_FAILURE_INVALID_HANDLE:
- return LOC_API_ADAPTER_ERR_INVALID_HANDLE;
-
- case eLOC_CLIENT_FAILURE_SERVICE_NOT_PRESENT:
- return LOC_API_ADAPTER_ERR_SERVICE_NOT_PRESENT;
-
- case eLOC_CLIENT_FAILURE_INTERNAL:
- return LOC_API_ADAPTER_ERR_INTERNAL;
-
- default:
- return LOC_API_ADAPTER_ERR_FAILURE;
- }
-}
-
-/* convert position report to loc eng format and send the converted
- position to loc eng */
-
-void LocApiV02 :: reportPosition (
- const qmiLocEventPositionReportIndMsgT_v02 *location_report_ptr)
-{
- UlpLocation location;
- LocPosTechMask tech_Mask = LOC_POS_TECH_MASK_DEFAULT;
- LOC_LOGD("Reporting postion from V2 Adapter\n");
- memset(&location, 0, sizeof (UlpLocation));
- location.size = sizeof(location);
- GpsLocationExtended locationExtended;
- memset(&locationExtended, 0, sizeof (GpsLocationExtended));
- locationExtended.size = sizeof(locationExtended);
- // Process the position from final and intermediate reports
-
- if( (location_report_ptr->sessionStatus == eQMI_LOC_SESS_STATUS_SUCCESS_V02) ||
- (location_report_ptr->sessionStatus == eQMI_LOC_SESS_STATUS_IN_PROGRESS_V02)
- )
- {
- // Latitude & Longitude
- if( (location_report_ptr->latitude_valid == 1 ) &&
- (location_report_ptr->longitude_valid == 1) &&
- (location_report_ptr->latitude != 0 ||
- location_report_ptr->longitude!= 0))
- {
- location.gpsLocation.flags |= GPS_LOCATION_HAS_LAT_LONG;
- location.gpsLocation.latitude = location_report_ptr->latitude;
- location.gpsLocation.longitude = location_report_ptr->longitude;
-
- // Time stamp (UTC)
- if(location_report_ptr->timestampUtc_valid == 1)
- {
- location.gpsLocation.timestamp = location_report_ptr->timestampUtc;
- }
-
- // Altitude
- if(location_report_ptr->altitudeWrtEllipsoid_valid == 1 )
- {
- location.gpsLocation.flags |= GPS_LOCATION_HAS_ALTITUDE;
- location.gpsLocation.altitude = location_report_ptr->altitudeWrtEllipsoid;
- }
-
- // Speed
- if(location_report_ptr->speedHorizontal_valid == 1)
- {
- location.gpsLocation.flags |= GPS_LOCATION_HAS_SPEED;
- location.gpsLocation.speed = location_report_ptr->speedHorizontal;
- }
-
- // Heading
- if(location_report_ptr->heading_valid == 1)
- {
- location.gpsLocation.flags |= GPS_LOCATION_HAS_BEARING;
- location.gpsLocation.bearing = location_report_ptr->heading;
- }
-
- // Uncertainty (circular)
- if (location_report_ptr->horUncCircular_valid) {
- location.gpsLocation.flags |= GPS_LOCATION_HAS_ACCURACY;
- location.gpsLocation.accuracy = location_report_ptr->horUncCircular;
- } else if (location_report_ptr->horUncEllipseSemiMinor_valid &&
- location_report_ptr->horUncEllipseSemiMajor_valid) {
- location.gpsLocation.flags |= GPS_LOCATION_HAS_ACCURACY;
- location.gpsLocation.accuracy =
- sqrt((location_report_ptr->horUncEllipseSemiMinor *
- location_report_ptr->horUncEllipseSemiMinor) +
- (location_report_ptr->horUncEllipseSemiMajor *
- location_report_ptr->horUncEllipseSemiMajor));
- }
-
- // Technology Mask
- tech_Mask |= location_report_ptr->technologyMask;
-
- //Mark the location source as from GNSS
- location.gpsLocation.flags |= LOCATION_HAS_SOURCE_INFO;
- location.position_source = ULP_LOCATION_IS_FROM_GNSS;
- if (location_report_ptr->magneticDeviation_valid)
- {
- locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_MAG_DEV;
- locationExtended.magneticDeviation = location_report_ptr->magneticDeviation;
- }
-
- if (location_report_ptr->DOP_valid)
- {
- locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_DOP;
- locationExtended.pdop = location_report_ptr->DOP.PDOP;
- locationExtended.hdop = location_report_ptr->DOP.HDOP;
- locationExtended.vdop = location_report_ptr->DOP.VDOP;
- }
-
- if (location_report_ptr->altitudeWrtMeanSeaLevel_valid)
- {
- locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL;
- locationExtended.altitudeMeanSeaLevel = location_report_ptr->altitudeWrtMeanSeaLevel;
- }
-
- if (location_report_ptr->vertUnc_valid)
- {
- locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_VERT_UNC;
- locationExtended.vert_unc = location_report_ptr->vertUnc;
- }
-
- if (location_report_ptr->speedUnc_valid)
- {
- locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_SPEED_UNC;
- locationExtended.speed_unc = location_report_ptr->speedUnc;
- }
- if (location_report_ptr->headingUnc_valid)
- {
- locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_BEARING_UNC;
- locationExtended.bearing_unc = location_report_ptr->headingUnc;
- }
- if (location_report_ptr->horReliability_valid)
- {
- locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_HOR_RELIABILITY;
- switch(location_report_ptr->horReliability)
- {
- case eQMI_LOC_RELIABILITY_NOT_SET_V02 :
- locationExtended.horizontal_reliability = LOC_RELIABILITY_NOT_SET;
- break;
- case eQMI_LOC_RELIABILITY_VERY_LOW_V02 :
- locationExtended.horizontal_reliability = LOC_RELIABILITY_VERY_LOW;
- break;
- case eQMI_LOC_RELIABILITY_LOW_V02 :
- locationExtended.horizontal_reliability = LOC_RELIABILITY_LOW;
- break;
- case eQMI_LOC_RELIABILITY_MEDIUM_V02 :
- locationExtended.horizontal_reliability = LOC_RELIABILITY_MEDIUM;
- break;
- case eQMI_LOC_RELIABILITY_HIGH_V02 :
- locationExtended.horizontal_reliability = LOC_RELIABILITY_HIGH;
- break;
- default:
- locationExtended.horizontal_reliability = LOC_RELIABILITY_NOT_SET;
- break;
- }
- }
- if (location_report_ptr->vertReliability_valid)
- {
- locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_VERT_RELIABILITY;
- switch(location_report_ptr->vertReliability)
- {
- case eQMI_LOC_RELIABILITY_NOT_SET_V02 :
- locationExtended.vertical_reliability = LOC_RELIABILITY_NOT_SET;
- break;
- case eQMI_LOC_RELIABILITY_VERY_LOW_V02 :
- locationExtended.vertical_reliability = LOC_RELIABILITY_VERY_LOW;
- break;
- case eQMI_LOC_RELIABILITY_LOW_V02 :
- locationExtended.vertical_reliability = LOC_RELIABILITY_LOW;
- break;
- case eQMI_LOC_RELIABILITY_MEDIUM_V02 :
- locationExtended.vertical_reliability = LOC_RELIABILITY_MEDIUM;
- break;
- case eQMI_LOC_RELIABILITY_HIGH_V02 :
- locationExtended.vertical_reliability = LOC_RELIABILITY_HIGH;
- break;
- default:
- locationExtended.vertical_reliability = LOC_RELIABILITY_NOT_SET;
- break;
- }
- }
- LocApiBase::reportPosition( location,
- locationExtended,
- (void*)location_report_ptr,
- (location_report_ptr->sessionStatus
- == eQMI_LOC_SESS_STATUS_IN_PROGRESS_V02 ?
- LOC_SESS_INTERMEDIATE : LOC_SESS_SUCCESS),
- tech_Mask);
- }
- }
- else
- {
- LocApiBase::reportPosition(location,
- locationExtended,
- NULL,
- LOC_SESS_FAILURE);
-
- LOC_LOGD("%s:%d]: Ignoring position report with sess status = %d, "
- "fix id = %u\n", __func__, __LINE__,
- location_report_ptr->sessionStatus,
- location_report_ptr->fixId );
- }
-}
-
-/* convert satellite report to loc eng format and send the converted
- report to loc eng */
-void LocApiV02 :: reportSv (
- const qmiLocEventGnssSvInfoIndMsgT_v02 *gnss_report_ptr)
-{
- QcomSvStatus SvStatus;
- GpsLocationExtended locationExtended;
- int num_svs_max, i;
- const qmiLocSvInfoStructT_v02 *sv_info_ptr;
-
- LOC_LOGV ("%s:%d]: num of sv = %d, validity = %d, altitude assumed = %u \n",
- __func__, __LINE__, gnss_report_ptr->svList_len,
- gnss_report_ptr->svList_valid,
- gnss_report_ptr->altitudeAssumed);
-
- num_svs_max = 0;
- memset (&SvStatus, 0, sizeof (QcomSvStatus));
- memset(&locationExtended, 0, sizeof (GpsLocationExtended));
- locationExtended.size = sizeof(locationExtended);
- if(gnss_report_ptr->svList_valid == 1)
- {
- num_svs_max = gnss_report_ptr->svList_len;
- if(num_svs_max > GPS_MAX_SVS)
- {
- num_svs_max = GPS_MAX_SVS;
- }
- SvStatus.num_svs = 0;
- for(i = 0; i < num_svs_max; i++)
- {
- sv_info_ptr = &(gnss_report_ptr->svList[i]);
- if((sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_SYSTEM_V02) &&
- (sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_GNSS_SVID_V02)
- && (sv_info_ptr->gnssSvId != 0 ))
- {
- if(sv_info_ptr->system == eQMI_LOC_SV_SYSTEM_GPS_V02)
- {
- SvStatus.sv_list[SvStatus.num_svs].size = sizeof(GpsSvInfo);
- SvStatus.sv_list[SvStatus.num_svs].prn = (int)sv_info_ptr->gnssSvId;
-
- // We only have the data field to report gps eph and alm mask
- if(sv_info_ptr->validMask &
- QMI_LOC_SV_INFO_MASK_VALID_SVINFO_MASK_V02)
- {
- if(sv_info_ptr->svInfoMask &
- QMI_LOC_SVINFO_MASK_HAS_EPHEMERIS_V02)
- {
- SvStatus.ephemeris_mask |= (1 << (sv_info_ptr->gnssSvId-1));
- }
- if(sv_info_ptr->svInfoMask &
- QMI_LOC_SVINFO_MASK_HAS_ALMANAC_V02)
- {
- SvStatus.almanac_mask |= (1 << (sv_info_ptr->gnssSvId-1));
- }
- }
-
- if((sv_info_ptr->validMask &
- QMI_LOC_SV_INFO_MASK_VALID_PROCESS_STATUS_V02)
- &&
- (sv_info_ptr->svStatus == eQMI_LOC_SV_STATUS_TRACK_V02))
- {
- SvStatus.gps_used_in_fix_mask |= (1 << (sv_info_ptr->gnssSvId-1));
- }
- }
- // SBAS: GPS PRN: 120-151,
- // In exteneded measurement report, we follow nmea standard,
- // which is from 33-64.
- else if(sv_info_ptr->system == eQMI_LOC_SV_SYSTEM_SBAS_V02)
- {
- SvStatus.sv_list[SvStatus.num_svs].prn =
- sv_info_ptr->gnssSvId + 33 - 120;
- }
- // Gloness: Slot id: 1-32
- // In extended measurement report, we follow nmea standard,
- // which is 65-96
- else if(sv_info_ptr->system == eQMI_LOC_SV_SYSTEM_GLONASS_V02)
- {
- if((sv_info_ptr->validMask &
- QMI_LOC_SV_INFO_MASK_VALID_PROCESS_STATUS_V02)
- &&
- (sv_info_ptr->svStatus == eQMI_LOC_SV_STATUS_TRACK_V02))
- {
- SvStatus.glo_used_in_fix_mask |= (1 << (sv_info_ptr->gnssSvId-1));
- }
-
- SvStatus.sv_list[SvStatus.num_svs].prn =
- sv_info_ptr->gnssSvId + (65-1);
- }
- //BeiDou: Slot id: 1-37
- //In extended measurement report, we follow nmea standard,
- //which is 201-237
- else if(sv_info_ptr->system == eQMI_LOC_SV_SYSTEM_BDS_V02)
- {
- if((sv_info_ptr->validMask &
- QMI_LOC_SV_INFO_MASK_VALID_PROCESS_STATUS_V02)
- &&
- (sv_info_ptr->svStatus == eQMI_LOC_SV_STATUS_TRACK_V02))
- {
- SvStatus.bds_used_in_fix_mask |= (1 << (sv_info_ptr->gnssSvId-1-200));
- }
- SvStatus.sv_list[SvStatus.num_svs].prn =
- sv_info_ptr->gnssSvId;
- }
- // Unsupported SV system
- else
- {
- continue;
- }
- }
-
- if(sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_SNR_V02 )
- {
- SvStatus.sv_list[SvStatus.num_svs].snr = sv_info_ptr->snr;
- }
-
- if(sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_ELEVATION_V02)
- {
- SvStatus.sv_list[SvStatus.num_svs].elevation = sv_info_ptr->elevation;
- }
-
- if(sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_AZIMUTH_V02)
- {
- SvStatus.sv_list[SvStatus.num_svs].azimuth = sv_info_ptr->azimuth;
- }
-
- SvStatus.num_svs++;
- }
- }
-
- if (SvStatus.num_svs >= 0)
- {
- LOC_LOGV ("%s:%d]: firing SV callback\n", __func__, __LINE__);
- LocApiBase::reportSv(SvStatus,
- locationExtended,
- (void*)gnss_report_ptr);
- }
-}
-
-/* convert engine state report to loc eng format and send the converted
- report to loc eng */
-void LocApiV02 :: reportEngineState (
- const qmiLocEventEngineStateIndMsgT_v02 *engine_state_ptr)
-{
-
- LOC_LOGV("%s:%d]: state = %d\n", __func__, __LINE__,
- engine_state_ptr->engineState);
-
- struct MsgUpdateEngineState : public LocMsg {
- LocApiV02* mpLocApiV02;
- bool mEngineOn;
- inline MsgUpdateEngineState(LocApiV02* pLocApiV02, bool engineOn) :
- LocMsg(), mpLocApiV02(pLocApiV02), mEngineOn(engineOn) {}
- inline virtual void proc() const {
- // If EngineOn is true and InSession is false and Engine is just turned off,
- // then unregister the gps tracking specific event masks
- if (mpLocApiV02->mEngineOn && !mpLocApiV02->mInSession && !mEngineOn) {
- mpLocApiV02->registerEventMask(mpLocApiV02->mQmiMask);
- }
- mpLocApiV02->mEngineOn = mEngineOn;
-
- if (mEngineOn) {
- // if EngineOn and not InSession, then we have already stopped
- // the fix, so do not send ENGINE_ON
- if (mpLocApiV02->mInSession) {
- mpLocApiV02->reportStatus(GPS_STATUS_ENGINE_ON);
- mpLocApiV02->reportStatus(GPS_STATUS_SESSION_BEGIN);
- }
- } else {
- mpLocApiV02->reportStatus(GPS_STATUS_SESSION_END);
- mpLocApiV02->reportStatus(GPS_STATUS_ENGINE_OFF);
- }
- }
- };
-
- if (engine_state_ptr->engineState == eQMI_LOC_ENGINE_STATE_ON_V02)
- {
- sendMsg(new MsgUpdateEngineState(this, true));
- }
- else if (engine_state_ptr->engineState == eQMI_LOC_ENGINE_STATE_OFF_V02)
- {
- sendMsg(new MsgUpdateEngineState(this, false));
- }
- else
- {
- reportStatus(GPS_STATUS_NONE);
- }
-
-}
-
-/* convert fix session state report to loc eng format and send the converted
- report to loc eng */
-void LocApiV02 :: reportFixSessionState (
- const qmiLocEventFixSessionStateIndMsgT_v02 *fix_session_state_ptr)
-{
- GpsStatusValue status;
- LOC_LOGD("%s:%d]: state = %d\n", __func__, __LINE__,
- fix_session_state_ptr->sessionState);
-
- status = GPS_STATUS_NONE;
- if (fix_session_state_ptr->sessionState == eQMI_LOC_FIX_SESSION_STARTED_V02)
- {
- status = GPS_STATUS_SESSION_BEGIN;
- }
- else if (fix_session_state_ptr->sessionState
- == eQMI_LOC_FIX_SESSION_FINISHED_V02)
- {
- status = GPS_STATUS_SESSION_END;
- }
- reportStatus(status);
-}
-
-/* convert NMEA report to loc eng format and send the converted
- report to loc eng */
-void LocApiV02 :: reportNmea (
- const qmiLocEventNmeaIndMsgT_v02 *nmea_report_ptr)
-{
-
- LocApiBase::reportNmea(nmea_report_ptr->nmea,
- strlen(nmea_report_ptr->nmea));
-
- LOC_LOGD("NMEA <%s", nmea_report_ptr->nmea);
-}
-
-/* convert and report an ATL request to loc engine */
-void LocApiV02 :: reportAtlRequest(
- const qmiLocEventLocationServerConnectionReqIndMsgT_v02 * server_request_ptr)
-{
- uint32_t connHandle = server_request_ptr->connHandle;
- // service ATL open request; copy the WWAN type
- if(server_request_ptr->requestType == eQMI_LOC_SERVER_REQUEST_OPEN_V02 )
- {
- AGpsType agpsType;
- switch(server_request_ptr->wwanType)
- {
- case eQMI_LOC_WWAN_TYPE_INTERNET_V02:
- agpsType = AGPS_TYPE_WWAN_ANY;
- requestATL(connHandle, agpsType);
- break;
- case eQMI_LOC_WWAN_TYPE_AGNSS_V02:
- agpsType = AGPS_TYPE_SUPL;
- requestATL(connHandle, agpsType);
- break;
- case eQMI_LOC_WWAN_TYPE_AGNSS_EMERGENCY_V02:
- requestSuplES(connHandle);
- break;
- default:
- agpsType = AGPS_TYPE_WWAN_ANY;
- requestATL(connHandle, agpsType);
- break;
- }
- }
- // service the ATL close request
- else if (server_request_ptr->requestType == eQMI_LOC_SERVER_REQUEST_CLOSE_V02)
- {
- releaseATL(connHandle);
- }
-}
-
-/* conver the NI report to loc eng format and send t loc engine */
-void LocApiV02 :: reportNiRequest(
- const qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *ni_req_ptr)
-{
- GpsNiNotification notif;
-
- /* initialize the notification*/
- memset(notif.extras, 0, sizeof notif.extras);
- memset(notif.text, 0, sizeof notif.text);
- memset(notif.requestor_id, 0, sizeof notif.requestor_id);
-
- /* NI timeout gets overwritten in LocApiEngAdapter,
- initializing to 0 here */
- notif.timeout = 0;
-
- notif.text_encoding = GPS_ENC_NONE ;
-
- notif.requestor_id_encoding = GPS_ENC_UNKNOWN;
-
- notif.notify_flags = 0;
-
- notif.default_response = GPS_NI_RESPONSE_NORESP;
-
- /*Handle Vx request */
- if(ni_req_ptr->NiVxInd_valid == 1)
- {
- const qmiLocNiVxNotifyVerifyStructT_v02 *vx_req = &(ni_req_ptr->NiVxInd);
-
- notif.ni_type = GPS_NI_TYPE_VOICE;
-
- // Requestor ID, the requestor id recieved is NULL terminated
- hexcode(notif.requestor_id, sizeof notif.requestor_id,
- (char *)vx_req->requestorId, vx_req->requestorId_len );
- }
-
- /* Handle UMTS CP request*/
- else if(ni_req_ptr->NiUmtsCpInd_valid == 1)
- {
- const qmiLocNiUmtsCpNotifyVerifyStructT_v02 *umts_cp_req =
- &ni_req_ptr->NiUmtsCpInd;
-
- notif.ni_type = GPS_NI_TYPE_UMTS_CTRL_PLANE;
-
- /* notificationText should always be a NULL terminated string */
- hexcode(notif.text, sizeof notif.text,
- (char *)umts_cp_req->notificationText,
- umts_cp_req->notificationText_len);
-
- /* Store requestor ID */
- hexcode(notif.requestor_id, sizeof(notif.requestor_id),
- (char *)umts_cp_req->requestorId.codedString,
- umts_cp_req->requestorId.codedString_len);
-
- /* convert encodings */
- notif.text_encoding = convertNiEncoding(umts_cp_req->dataCodingScheme);
-
- notif.requestor_id_encoding =
- convertNiEncoding(umts_cp_req->requestorId.dataCodingScheme);
-
- /* LCS address (using extras field) */
- if ( umts_cp_req->clientAddress_len != 0)
- {
- char lcs_addr[32]; // Decoded LCS address for UMTS CP NI
-
- // Copy LCS Address into notif.extras in the format: Address = 012345
- strlcat(notif.extras, LOC_NI_NOTIF_KEY_ADDRESS, sizeof (notif.extras));
- strlcat(notif.extras, " = ", sizeof notif.extras);
- int addr_len = 0;
- const char *address_source = NULL;
- address_source = (char *)umts_cp_req->clientAddress;
- // client Address is always NULL terminated
- addr_len = decodeAddress(lcs_addr, sizeof(lcs_addr), address_source,
- umts_cp_req->clientAddress_len);
-
- // The address is ASCII string
- if (addr_len)
- {
- strlcat(notif.extras, lcs_addr, sizeof notif.extras);
- }
- }
-
- }
- else if(ni_req_ptr->NiSuplInd_valid == 1)
- {
- const qmiLocNiSuplNotifyVerifyStructT_v02 *supl_req =
- &ni_req_ptr->NiSuplInd;
-
- notif.ni_type = GPS_NI_TYPE_UMTS_SUPL;
-
- // Client name
- if (supl_req->valid_flags & QMI_LOC_SUPL_CLIENT_NAME_MASK_V02)
- {
- hexcode(notif.text, sizeof(notif.text),
- (char *)supl_req->clientName.formattedString,
- supl_req->clientName.formattedString_len);
- LOC_LOGV("%s:%d]: SUPL NI: client_name: %s \n", __func__, __LINE__,
- notif.text);
- }
- else
- {
- LOC_LOGV("%s:%d]: SUPL NI: client_name not present.",
- __func__, __LINE__);
- }
-
- // Requestor ID
- if (supl_req->valid_flags & QMI_LOC_SUPL_REQUESTOR_ID_MASK_V02)
- {
- hexcode(notif.requestor_id, sizeof notif.requestor_id,
- (char*)supl_req->requestorId.formattedString,
- supl_req->requestorId.formattedString_len );
-
- LOC_LOGV("%s:%d]: SUPL NI: requestor_id: %s \n", __func__, __LINE__,
- notif.requestor_id);
- }
- else
- {
- LOC_LOGV("%s:%d]: SUPL NI: requestor_id not present.",
- __func__, __LINE__);
- }
-
- // Encoding type
- if (supl_req->valid_flags & QMI_LOC_SUPL_DATA_CODING_SCHEME_MASK_V02)
- {
- notif.text_encoding = convertNiEncoding(supl_req->dataCodingScheme);
-
- notif.requestor_id_encoding = convertNiEncoding(supl_req->dataCodingScheme);
- }
- else
- {
- notif.text_encoding = notif.requestor_id_encoding = GPS_ENC_UNKNOWN;
- }
-
- // ES SUPL
- if(ni_req_ptr->suplEmergencyNotification_valid ==1)
- {
- const qmiLocEmergencyNotificationStructT_v02 *supl_emergency_request =
- &ni_req_ptr->suplEmergencyNotification;
-
- notif.ni_type = GPS_NI_TYPE_EMERGENCY_SUPL;
- }
-
- } //ni_req_ptr->NiSuplInd_valid == 1
- else
- {
- LOC_LOGE("%s:%d]: unknown request event \n",__func__, __LINE__);
- return;
- }
-
- // Set default_response & notify_flags
- convertNiNotifyVerifyType(&notif, ni_req_ptr->notificationType);
-
- qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *ni_req_copy_ptr =
- (qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *)malloc(sizeof(*ni_req_copy_ptr));
-
- if( NULL != ni_req_copy_ptr)
- {
- memcpy(ni_req_copy_ptr, ni_req_ptr, sizeof(*ni_req_copy_ptr));
-
- requestNiNotify(notif, (const void*)ni_req_copy_ptr);
- }
- else
- {
- LOC_LOGE("%s:%d]: Error copying NI request\n", __func__, __LINE__);
- }
-
-}
-
-/* Report the Xtra Server Url from the modem to HAL*/
-void LocApiV02 :: reportXtraServerUrl(
- const qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02*
- server_request_ptr)
-{
-
- if (server_request_ptr->serverList.serverList_len == 1)
- {
- reportXtraServer(server_request_ptr->serverList.serverList[0].serverUrl,
- "",
- "",
- QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
- }
- else if (server_request_ptr->serverList.serverList_len == 2)
- {
- reportXtraServer(server_request_ptr->serverList.serverList[0].serverUrl,
- server_request_ptr->serverList.serverList[1].serverUrl,
- "",
- QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
- }
- else
- {
- reportXtraServer(server_request_ptr->serverList.serverList[0].serverUrl,
- server_request_ptr->serverList.serverList[1].serverUrl,
- server_request_ptr->serverList.serverList[2].serverUrl,
- QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
- }
-
-}
-
-/* convert Ni Encoding type from QMI_LOC to loc eng format */
-GpsNiEncodingType LocApiV02 ::convertNiEncoding(
- qmiLocNiDataCodingSchemeEnumT_v02 loc_encoding)
-{
- GpsNiEncodingType enc = GPS_ENC_UNKNOWN;
-
- switch (loc_encoding)
- {
- case eQMI_LOC_NI_SUPL_UTF8_V02:
- enc = GPS_ENC_SUPL_UTF8;
- break;
- case eQMI_LOC_NI_SUPL_UCS2_V02:
- enc = GPS_ENC_SUPL_UCS2;
- break;
- case eQMI_LOC_NI_SUPL_GSM_DEFAULT_V02:
- enc = GPS_ENC_SUPL_GSM_DEFAULT;
- break;
- case eQMI_LOC_NI_SS_LANGUAGE_UNSPEC_V02:
- enc = GPS_ENC_SUPL_GSM_DEFAULT; // SS_LANGUAGE_UNSPEC = GSM
- break;
- default:
- break;
- }
-
- return enc;
-}
-
-/*convert NI notify verify type from QMI LOC to loc eng format*/
-bool LocApiV02 :: convertNiNotifyVerifyType (
- GpsNiNotification *notif,
- qmiLocNiNotifyVerifyEnumT_v02 notif_priv)
-{
- switch (notif_priv)
- {
- case eQMI_LOC_NI_USER_NO_NOTIFY_NO_VERIFY_V02:
- notif->notify_flags = 0;
- break;
-
- case eQMI_LOC_NI_USER_NOTIFY_ONLY_V02:
- notif->notify_flags = GPS_NI_NEED_NOTIFY;
- break;
-
- case eQMI_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP_V02:
- notif->notify_flags = GPS_NI_NEED_NOTIFY | GPS_NI_NEED_VERIFY;
- notif->default_response = GPS_NI_RESPONSE_ACCEPT;
- break;
-
- case eQMI_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP_V02:
- notif->notify_flags = GPS_NI_NEED_NOTIFY | GPS_NI_NEED_VERIFY;
- notif->default_response = GPS_NI_RESPONSE_DENY;
- break;
-
- case eQMI_LOC_NI_USER_NOTIFY_VERIFY_PRIVACY_OVERRIDE_V02:
- notif->notify_flags = GPS_NI_PRIVACY_OVERRIDE;
- break;
-
- default:
- return false;
- }
-
- return true;
-}
-
-/* convert and report GNSS measurement data to loc eng */
-void LocApiV02 :: reportGnssMeasurementData(
- const qmiLocEventGnssSvMeasInfoIndMsgT_v02& gnss_measurement_report_ptr)
-{
- LOC_LOGV ("%s:%d]: entering\n", __func__, __LINE__);
-
- GpsData gpsMeasurementData;
- memset (&gpsMeasurementData, 0, sizeof(GpsData));
-
- int svMeasurment_len = 0;
-
- // size
- gpsMeasurementData.size = sizeof(GpsData);
-
- // number of measurements
- if (gnss_measurement_report_ptr.svMeasurement_valid) {
- svMeasurment_len =
- gnss_measurement_report_ptr.svMeasurement_len;
- gpsMeasurementData.measurement_count = svMeasurment_len;
- LOC_LOGV ("%s:%d]: there are %d SV measurements\n",
- __func__, __LINE__, svMeasurment_len);
- } else {
- LOC_LOGV ("%s:%d]: there is no valid SV measurements\n",
- __func__, __LINE__);
- }
-
- if (svMeasurment_len != 0 &&
- gnss_measurement_report_ptr.system == eQMI_LOC_SV_SYSTEM_GPS_V02) {
-
- // the array of measurements
- int index = 0;
- while(svMeasurment_len > 0) {
- convertGpsMeasurements(gpsMeasurementData.measurements[index],
- gnss_measurement_report_ptr.svMeasurement[index]);
- index++;
- svMeasurment_len--;
- }
-
- // the GPS clock time reading
- convertGpsClock(gpsMeasurementData.clock,
- gnss_measurement_report_ptr);
-
- // calling the base
- LOC_LOGV ("%s:%d]: calling LocApiBase::reportGpsMeasurementData.\n",
- __func__, __LINE__);
- LocApiBase::reportGpsMeasurementData(gpsMeasurementData);
- } else {
- LOC_LOGV ("%s:%d]: There is no GPS measurement.\n",
- __func__, __LINE__);
- }
-}
-
-/*convert GpsMeasurement type from QMI LOC to loc eng format*/
-void LocApiV02 :: convertGpsMeasurements (GpsMeasurement& gpsMeasurement,
- const qmiLocSVMeasurementStructT_v02& gnss_measurement_info)
-{
- LOC_LOGV ("%s:%d]: entering\n", __func__, __LINE__);
-
- // size
- gpsMeasurement.size = sizeof(GpsMeasurement);
-
- // flag initiation
- int flags = 0;
-
- // prn
- gpsMeasurement.prn = gnss_measurement_info.gnssSvId;
-
- // time_offset_ns
- gpsMeasurement.time_offset_ns = 0;
-
- // state & received_gps_tow_ns & received_gps_tow_uncertainty_ns
- uint64_t validMask = gnss_measurement_info.measurementStatus &
- gnss_measurement_info.validMeasStatusMask;
- uint64_t bitSynMask = QMI_LOC_MASK_MEAS_STATUS_BE_CONFIRM_V02 |
- QMI_LOC_MASK_MEAS_STATUS_SB_VALID_V02;
- double gpsTowUncNs = (double)gnss_measurement_info.svTimeSpeed.svTimeUncMs * 1e6;
-
- if (validMask & QMI_LOC_MASK_MEAS_STATUS_MS_VALID_V02) {
- /* sub-frame decode & TOW decode */
- gpsMeasurement.state = GPS_MEASUREMENT_STATE_SUBFRAME_SYNC |
- GPS_MEASUREMENT_STATE_TOW_DECODED |
- GPS_MEASUREMENT_STATE_BIT_SYNC |
- GPS_MEASUREMENT_STATE_CODE_LOCK;
- gpsMeasurement.received_gps_tow_ns =
- ((double)gnss_measurement_info.svTimeSpeed.svTimeMs +
- (double)gnss_measurement_info.svTimeSpeed.svTimeSubMs) * 1e6;
- gpsMeasurement.received_gps_tow_uncertainty_ns = gpsTowUncNs;
-
- } else if ((validMask & bitSynMask) == bitSynMask) {
- /* bit sync */
- gpsMeasurement.state = GPS_MEASUREMENT_STATE_BIT_SYNC |
- GPS_MEASUREMENT_STATE_CODE_LOCK;
- gpsMeasurement.received_gps_tow_ns =
- fmod(((double)gnss_measurement_info.svTimeSpeed.svTimeMs +
- (double)gnss_measurement_info.svTimeSpeed.svTimeSubMs), 20) * 1e6;
- gpsMeasurement.received_gps_tow_uncertainty_ns = gpsTowUncNs;
-
- } else if (validMask & QMI_LOC_MASK_MEAS_STATUS_SM_VALID_V02) {
- /* code lock */
- gpsMeasurement.state = GPS_MEASUREMENT_STATE_CODE_LOCK;
- gpsMeasurement.received_gps_tow_ns =
- (double)gnss_measurement_info.svTimeSpeed.svTimeSubMs * 1e6;
- gpsMeasurement.received_gps_tow_uncertainty_ns = gpsTowUncNs;
-
- } else {
- /* by default */
- gpsMeasurement.state = GPS_MEASUREMENT_STATE_UNKNOWN;
- gpsMeasurement.received_gps_tow_ns = 0;
- gpsMeasurement.received_gps_tow_uncertainty_ns = 0;
- }
-
- // c_n0_dbhz
- gpsMeasurement.c_n0_dbhz = gnss_measurement_info.CNo/10.0;
-
- // pseudorange_rate_mps
- gpsMeasurement.pseudorange_rate_mps =
- gnss_measurement_info.svTimeSpeed.dopplerShift;
-
- // pseudorange_rate_uncertainty_mps
- gpsMeasurement.pseudorange_rate_uncertainty_mps =
- gnss_measurement_info.svTimeSpeed.dopplerShiftUnc;
-
- // accumulated_delta_range_state
- gpsMeasurement.accumulated_delta_range_state = GPS_ADR_STATE_UNKNOWN;
-
- gpsMeasurement.flags = flags;
-
- LOC_LOGV(" %s:%d]: GNSS measurement raw data received form modem: \n"
- " Input => gnssSvId | CNo "
- "| measurementStatus | dopplerShift |"
- " dopplerShiftUnc| svTimeMs | svTimeSubMs | svTimeUncMs"
- " | validMeasStatusMask | \n"
- " Input => %d | %d | 0x%04x%04x | %f | %f | %u | %f | %f | 0x%04x%04x |\n",
- __func__, __LINE__,
- gnss_measurement_info.gnssSvId, // %d
- gnss_measurement_info.CNo, // %d
- (uint32_t)(gnss_measurement_info.measurementStatus >> 32), // %04x Upper 32
- (uint32_t)(gnss_measurement_info.measurementStatus & 0xFFFFFFFF), // %04x Lower 32
- gnss_measurement_info.svTimeSpeed.dopplerShift, // %f
- gnss_measurement_info.svTimeSpeed.dopplerShiftUnc, // %f
- gnss_measurement_info.svTimeSpeed.svTimeMs, // %u
- gnss_measurement_info.svTimeSpeed.svTimeSubMs, // %f
- gnss_measurement_info.svTimeSpeed.svTimeUncMs, // %f
- (uint32_t)(gnss_measurement_info.validMeasStatusMask >> 32), // %04x Upper 32
- (uint32_t)(gnss_measurement_info.validMeasStatusMask & 0xFFFFFFFF) // %04x Lower 32
- );
-
- LOC_LOGV(" %s:%d]: GNSS measurement data after conversion: \n"
- " Output => size | prn | time_offset_ns | state |"
- " received_gps_tow_ns| received_gps_tow_uncertainty_ns |c_n0_dbhz |"
- " pseudorange_rate_mps | pseudorange_rate_uncertainty_mps |"
- " accumulated_delta_range_state | flags \n"
- " Output => %d | %d | %f | %d | %lld | %lld | %f | %f | %f | %d | %d \n",
- __func__, __LINE__,
- gpsMeasurement.size, // %d
- gpsMeasurement.prn, // %d
- gpsMeasurement.time_offset_ns, // %f
- gpsMeasurement.state, // %d
- gpsMeasurement.received_gps_tow_ns, // %lld
- gpsMeasurement.received_gps_tow_uncertainty_ns, // %lld
- gpsMeasurement.c_n0_dbhz, // %f
- gpsMeasurement.pseudorange_rate_mps, // %f
- gpsMeasurement.pseudorange_rate_uncertainty_mps, // %f
- gpsMeasurement.accumulated_delta_range_state, // %d
- gpsMeasurement.flags // %d
- );
-}
-
-/*convert GpsClock type from QMI LOC to loc eng format*/
-void LocApiV02 :: convertGpsClock (GpsClock& gpsClock,
- const qmiLocEventGnssSvMeasInfoIndMsgT_v02& gnss_measurement_info)
-{
- LOC_LOGV ("%s:%d]: entering\n", __func__, __LINE__);
-
- // size
- gpsClock.size = sizeof(GpsClock);
-
- // flag initiation
- int flags = 0;
-
- // type & time_ns & time_uncertainty_ns
- if (gnss_measurement_info.systemTime_valid &&
- gnss_measurement_info.systemTimeExt_valid) {
-
- uint16_t systemWeek = gnss_measurement_info.systemTime.systemWeek;
- uint32_t systemMsec = gnss_measurement_info.systemTime.systemMsec;
- float sysClkBias = gnss_measurement_info.systemTime.systemClkTimeBias;
- float sysClkUncMs = gnss_measurement_info.systemTime.systemClkTimeUncMs;
- int sourceOfTime = gnss_measurement_info.systemTimeExt.sourceOfTime;
- bool isTimeValid = (sysClkUncMs <= 15.0f); // 15ms
-
- if(systemWeek != C_GPS_WEEK_UNKNOWN && isTimeValid) {
- gpsClock.type = GPS_CLOCK_TYPE_GPS_TIME;
- double temp = (double)(systemWeek) * (double)WEEK_MSECS + (double)systemMsec;
- gpsClock.time_ns = (double)temp*1e6 -
- (double)((int)(sysClkBias*1e6));
- flags |= GPS_CLOCK_HAS_TIME_UNCERTAINTY;
- gpsClock.time_uncertainty_ns = (double)sysClkUncMs * 1e6;
-
- } else {
- gpsClock.type = GPS_CLOCK_TYPE_UNKNOWN;
- }
- } else {
- gpsClock.type = GPS_CLOCK_TYPE_UNKNOWN;
- }
-
- LOC_LOGV(" %s:%d]: GNSS measurement clock data received form modem: \n"
- " Input => systemTime_valid | systemTimeExt_valid | systemWeek"
- " | systemMsec | systemClkTimeBias"
- " | systemClkTimeUncMs | sourceOfTime \n"
- " Input => %d | %d | %d | %d | %f | %f | %d \n",
- __func__, __LINE__,
- gnss_measurement_info.systemTime_valid, // %d
- gnss_measurement_info.systemTimeExt_valid, // %d
- gnss_measurement_info.systemTime.systemWeek, // %d
- gnss_measurement_info.systemTime.systemMsec, // %d
- gnss_measurement_info.systemTime.systemClkTimeBias, // %f
- gnss_measurement_info.systemTime.systemClkTimeUncMs, // %f
- gnss_measurement_info.systemTimeExt.sourceOfTime); // %d
-
- LOC_LOGV(" %s:%d]: GNSS measurement clock after conversion: \n"
- " Output => type | time_ns | time_uncertainty_ns\n"
- " Output => %d | %lld | %f \n", __func__, __LINE__,
- gpsClock.type, // %d
- gpsClock.time_ns, // %lld
- gpsClock.time_uncertainty_ns); // %f
-
- gpsClock.flags = flags;
-}
-
-/* event callback registered with the loc_api v02 interface */
-void LocApiV02 :: eventCb(locClientHandleType clientHandle,
- uint32_t eventId, locClientEventIndUnionType eventPayload)
-{
- LOC_LOGD("%s:%d]: event id = %d\n", __func__, __LINE__,
- eventId);
-
- switch(eventId)
- {
- //Position Report
- case QMI_LOC_EVENT_POSITION_REPORT_IND_V02:
- reportPosition(eventPayload.pPositionReportEvent);
- break;
-
- // Satellite report
- case QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02:
- reportSv(eventPayload.pGnssSvInfoReportEvent);
- break;
-
- // Status report
- case QMI_LOC_EVENT_ENGINE_STATE_IND_V02:
- reportEngineState(eventPayload.pEngineState);
- break;
-
- case QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02:
- reportFixSessionState(eventPayload.pFixSessionState);
- break;
-
- // NMEA
- case QMI_LOC_EVENT_NMEA_IND_V02:
- reportNmea(eventPayload.pNmeaReportEvent);
- break;
-
- // XTRA request
- case QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02:
- LOC_LOGD("%s:%d]: XTRA download request\n", __func__,
- __LINE__);
- reportXtraServerUrl(eventPayload.pInjectPredictedOrbitsReqEvent);
- requestXtraData();
- break;
-
- // time request
- case QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02:
- LOC_LOGD("%s:%d]: Time request\n", __func__,
- __LINE__);
- requestTime();
- break;
-
- //position request
- case QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02:
- LOC_LOGD("%s:%d]: Position request\n", __func__,
- __LINE__);
- requestLocation();
- break;
-
- // NI request
- case QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02:
- reportNiRequest(eventPayload.pNiNotifyVerifyReqEvent);
- break;
-
- // AGPS connection request
- case QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02:
- reportAtlRequest(eventPayload.pLocationServerConnReqEvent);
- break;
-
- // GNSS Measurement Report
- case QMI_LOC_EVENT_GNSS_MEASUREMENT_REPORT_IND_V02:
- reportGnssMeasurementData(*eventPayload.pGnssSvRawInfoEvent);
- break;
- }
-}
-
-/* Call the service LocAdapterBase down event*/
-void LocApiV02 :: errorCb(locClientHandleType handle,
- locClientErrorEnumType errorId)
-{
- if(errorId == eLOC_CLIENT_ERROR_SERVICE_UNAVAILABLE)
- {
- LOC_LOGE("%s:%d]: Service unavailable error\n",
- __func__, __LINE__);
-
- handleEngineDownEvent();
-
- /* immediately send the engine up event so that
- the loc engine re-initializes the adapter and the
- loc-api_v02 interface */
-
- handleEngineUpEvent();
- }
-}
-
-static void ds_client_global_event_cb(ds_client_status_enum_type result,
- void *loc_adapter_cookie)
-{
- LocApiV02 *locApiV02Instance = (LocApiV02 *)loc_adapter_cookie;
-
- locApiV02Instance->ds_client_event_cb(result);
- return;
-}
-
-void LocApiV02::ds_client_event_cb(ds_client_status_enum_type result)
-{
- if(result == E_DS_CLIENT_DATA_CALL_CONNECTED) {
- LOC_LOGD("%s:%d]: Emergency call is up", __func__, __LINE__);
- reportDataCallOpened();
- }
- else if(result == E_DS_CLIENT_DATA_CALL_DISCONNECTED) {
- LOC_LOGE("%s:%d]: Emergency call is stopped", __func__, __LINE__);
- reportDataCallClosed();
- }
- return;
-}
-
-static const ds_client_cb_data ds_client_cb = {
- ds_client_global_event_cb
-};
-
-int LocApiV02 :: initDataServiceClient()
-{
- int ret=0;
- if (NULL == dsLibraryHandle)
- {
- dsLibraryHandle = dlopen(DS_CLIENT_LIB_NAME, RTLD_NOW);
- if (NULL == dsLibraryHandle)
- {
- const char * err = dlerror();
- if (NULL == err)
- {
- err = "Unknown";
- }
- LOC_LOGE("%s:%d]: failed to load library %s; error=%s",
- __func__, __LINE__,
- DS_CLIENT_LIB_NAME,
- err);
- ret = 1;
- }
- if (NULL != dsLibraryHandle)
- {
- ds_client_get_iface_fn *getIface = NULL;
-
- getIface = (ds_client_get_iface_fn*)dlsym(dsLibraryHandle,
- DS_CLIENT_GET_INTERFACE_FN);
- if (NULL != getIface)
- {
- dsClientIface = getIface();
- }
- else
- {
- const char * err = dlerror();
- if (NULL == err)
- {
- err = "Unknown";
- }
- LOC_LOGE("%s:%d]: failed to find symbol %s; error=%s",
- __func__, __LINE__,
- DS_CLIENT_GET_INTERFACE_FN,
- err);
- }
- }
- }
- if (NULL != dsClientIface && NULL != dsClientIface->pfn_init)
- {
- ds_client_status_enum_type dsret = dsClientIface->pfn_init();
- if (dsret != E_DS_CLIENT_SUCCESS)
- {
- LOC_LOGE("%s:%d]: Error during client initialization %d",
- __func__, __LINE__,
- (int)dsret);
-
- ret = 3;
- }
- }
- else
- {
- ret = 2;
- }
- LOC_LOGD("%s:%d]: ret = %d\n", __func__, __LINE__,ret);
- return ret;
-}
-
-int LocApiV02 :: openAndStartDataCall()
-{
- loc_api_adapter_err ret = LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
- int profile_index = -1;
- int pdp_type = -1;
- ds_client_status_enum_type result = E_DS_CLIENT_FAILURE_NOT_INITIALIZED;
-
- if (NULL != dsClientIface &&
- NULL != dsClientIface->pfn_open_call &&
- NULL != dsClientIface->pfn_start_call)
- {
- result = dsClientIface->pfn_open_call(&dsClientHandle,
- &ds_client_cb,
- (void *)this,
- &profile_index,
- &pdp_type);
- }
- if (E_DS_CLIENT_SUCCESS == result)
- {
- result = dsClientIface->pfn_start_call(dsClientHandle,
- profile_index,
- pdp_type);
-
- if(result == E_DS_CLIENT_SUCCESS) {
- LOC_LOGD("%s:%d]: Request to start Emergency call sent\n",
- __func__, __LINE__);
- ret = LOC_API_ADAPTER_ERR_SUCCESS;
- }
- else {
- LOC_LOGE("%s:%d]: Unable to bring up emergency call using DS. result = %d",
- __func__, __LINE__, (int)result);
- ret = LOC_API_ADAPTER_ERR_UNSUPPORTED;
- }
- }
- else if(result == E_DS_CLIENT_RETRY_LATER) {
- LOC_LOGE("%s:%d]: Could not start emergency call. Retry after delay\n",
- __func__, __LINE__);
- ret = LOC_API_ADAPTER_ERR_ENGINE_BUSY;
- }
- else {
- LOC_LOGE("%s:%d]: Unable to bring up emergency call using DS. ret = %d",
- __func__, __LINE__, (int)ret);
- ret = LOC_API_ADAPTER_ERR_UNSUPPORTED;
- }
-
- return (int)ret;
-}
-
-void LocApiV02 :: stopDataCall()
-{
- ds_client_status_enum_type ret = E_DS_CLIENT_FAILURE_NOT_INITIALIZED;
-
- if (NULL != dsClientIface &&
- NULL != dsClientIface->pfn_stop_call)
- {
- ret = dsClientIface->pfn_stop_call(dsClientHandle);
- }
-
- if (ret == E_DS_CLIENT_SUCCESS) {
- LOC_LOGD("%s:%d]: Request to Close SUPL ES call sent",
- __func__, __LINE__);
- }
- else {
- if (ret == E_DS_CLIENT_FAILURE_INVALID_HANDLE) {
- LOC_LOGE("%s:%d]: Conn handle not found for SUPL ES",
- __func__, __LINE__);
- }
- LOC_LOGE("%s:%d]: Could not close SUPL ES call. Ret: %d",
- __func__, __LINE__, ret);
- }
- return;
-}
-
-void LocApiV02 :: closeDataCall()
-{
- int ret = 1;
-
- if (NULL != dsClientIface &&
- NULL != dsClientIface->pfn_close_call)
- {
- dsClientIface->pfn_close_call(&dsClientHandle);
- ret = 0;
- }
-
- LOC_LOGD("%s:%d]: Release data client handle; ret=%d",
- __func__, __LINE__, ret);
-}
-
-enum loc_api_adapter_err LocApiV02 ::
-getWwanZppFix(GpsLocation &zppLoc)
-{
- locClientReqUnionType req_union;
- qmiLocGetAvailWwanPositionReqMsgT_v02 zpp_req;
- qmiLocGetAvailWwanPositionIndMsgT_v02 zpp_ind;
- memset(&zpp_ind, 0, sizeof(zpp_ind));
- memset(&zpp_req, 0, sizeof(zpp_req));
- memset(&zppLoc, 0, sizeof(zppLoc));
-
- req_union.pGetAvailWwanPositionReq = &zpp_req;
-
- LOC_LOGD("%s:%d]: Get ZPP Fix from available wwan position\n", __func__, __LINE__);
-
- locClientStatusEnumType status =
- loc_sync_send_req(clientHandle,
- QMI_LOC_GET_AVAILABLE_WWAN_POSITION_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_GET_AVAILABLE_WWAN_POSITION_IND_V02,
- &zpp_ind);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != zpp_ind.status) {
- LOC_LOGD ("%s:%d]: getWwanZppFix may not be supported by modem"
- " so will fallback to getBestAvailableZppFix"
- " status = %s, zpp_ind.status = %s ",
- __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(zpp_ind.status));
-
- LocPosTechMask tech_mask;
- loc_api_adapter_err ret;
- ret = getBestAvailableZppFix(zppLoc, tech_mask);
- if (ret == LOC_API_ADAPTER_ERR_SUCCESS &&
- tech_mask != LOC_POS_TECH_MASK_DEFAULT &&
- tech_mask & LOC_POS_TECH_MASK_CELLID) {
- return LOC_API_ADAPTER_ERR_SUCCESS;
- } else {
- LOC_LOGD ("%s:%d]: getBestAvailableZppFix failed or"
- " technoloy source includes GNSS that is not allowed"
- " ret = %u, tech_mask = 0x%X ",
- __func__, __LINE__, ret, tech_mask);
- return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
- }
- }
-
- LOC_LOGD("Got Zpp fix location validity (lat:%d, lon:%d, timestamp:%d accuracy:%d)",
- zpp_ind.latitude_valid,
- zpp_ind.longitude_valid,
- zpp_ind.timestampUtc_valid,
- zpp_ind.horUncCircular_valid);
-
- LOC_LOGD("(%.7f, %.7f), timestamp %llu, accuracy %f",
- zpp_ind.latitude,
- zpp_ind.longitude,
- zpp_ind.timestampUtc,
- zpp_ind.horUncCircular);
-
- zppLoc.size = sizeof(GpsLocation);
- if (zpp_ind.timestampUtc_valid) {
- zppLoc.timestamp = zpp_ind.timestampUtc;
- }
- else {
- /* The UTC time from modem is not valid.
- In this case, we use current system time instead.*/
-
- struct timespec time_info_current;
- clock_gettime(CLOCK_REALTIME,&time_info_current);
- zppLoc.timestamp = (time_info_current.tv_sec)*1e3 +
- (time_info_current.tv_nsec)/1e6;
- LOC_LOGD("zpp timestamp got from system: %llu", zppLoc.timestamp);
- }
-
- if ((zpp_ind.latitude_valid == false) ||
- (zpp_ind.longitude_valid == false) ||
- (zpp_ind.horUncCircular_valid == false)) {
- return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
- }
-
- zppLoc.flags = GPS_LOCATION_HAS_LAT_LONG | GPS_LOCATION_HAS_ACCURACY;
- zppLoc.latitude = zpp_ind.latitude;
- zppLoc.longitude = zpp_ind.longitude;
- zppLoc.accuracy = zpp_ind.horUncCircular;
-
- if (zpp_ind.altitudeWrtEllipsoid_valid) {
- zppLoc.flags |= GPS_LOCATION_HAS_ALTITUDE;
- zppLoc.altitude = zpp_ind.altitudeWrtEllipsoid;
- }
-
- return LOC_API_ADAPTER_ERR_SUCCESS;
-}
-
-enum loc_api_adapter_err LocApiV02 :: getBestAvailableZppFix(GpsLocation & zppLoc)
-{
- LocPosTechMask tech_mask;
- return getBestAvailableZppFix(zppLoc, tech_mask);
-}
-
-enum loc_api_adapter_err LocApiV02 ::
-getBestAvailableZppFix(GpsLocation &zppLoc, LocPosTechMask &tech_mask)
-{
- locClientReqUnionType req_union;
-
- qmiLocGetBestAvailablePositionIndMsgT_v02 zpp_ind;
- qmiLocGetBestAvailablePositionReqMsgT_v02 zpp_req;
-
- memset(&zpp_ind, 0, sizeof(zpp_ind));
- memset(&zpp_req, 0, sizeof(zpp_req));
- memset(&zppLoc, 0, sizeof(zppLoc));
- tech_mask = LOC_POS_TECH_MASK_DEFAULT;
-
- req_union.pGetBestAvailablePositionReq = &zpp_req;
-
- LOC_LOGD("%s:%d]: Get ZPP Fix from best available source\n", __func__, __LINE__);
-
- locClientStatusEnumType status =
- loc_sync_send_req(clientHandle,
- QMI_LOC_GET_BEST_AVAILABLE_POSITION_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_GET_BEST_AVAILABLE_POSITION_IND_V02,
- &zpp_ind);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != zpp_ind.status) {
- LOC_LOGE ("%s:%d]: error! status = %s, zpp_ind.status = %s\n",
- __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(zpp_ind.status));
- } else {
- LOC_LOGD("Got Zpp fix location validity (lat:%d, lon:%d, timestamp:%d accuracy:%d)"
- " (%.7f, %.7f), timestamp %llu, accuracy %f",
- zpp_ind.latitude_valid,
- zpp_ind.longitude_valid,
- zpp_ind.timestampUtc_valid,
- zpp_ind.horUncCircular_valid,
- zpp_ind.latitude,
- zpp_ind.longitude,
- zpp_ind.timestampUtc,
- zpp_ind.horUncCircular);
-
- zppLoc.size = sizeof(GpsLocation);
- if (zpp_ind.timestampUtc_valid) {
- zppLoc.timestamp = zpp_ind.timestampUtc;
- }
- else {
- /* The UTC time from modem is not valid.
- In this case, we use current system time instead.*/
-
- struct timespec time_info_current;
- clock_gettime(CLOCK_REALTIME,&time_info_current);
- zppLoc.timestamp = (time_info_current.tv_sec)*1e3 +
- (time_info_current.tv_nsec)/1e6;
- LOC_LOGD("zpp timestamp got from system: %llu", zppLoc.timestamp);
- }
-
- if (zpp_ind.latitude_valid &&
- zpp_ind.longitude_valid &&
- zpp_ind.horUncCircular_valid ) {
- zppLoc.flags = GPS_LOCATION_HAS_LAT_LONG | GPS_LOCATION_HAS_ACCURACY;
- zppLoc.latitude = zpp_ind.latitude;
- zppLoc.longitude = zpp_ind.longitude;
- zppLoc.accuracy = zpp_ind.horUncCircular;
-
- if (zpp_ind.altitudeWrtEllipsoid_valid) {
- zppLoc.flags |= GPS_LOCATION_HAS_ALTITUDE;
- zppLoc.altitude = zpp_ind.altitudeWrtEllipsoid;
- }
-
- if (zpp_ind.horSpeed_valid) {
- zppLoc.flags |= GPS_LOCATION_HAS_SPEED;
- zppLoc.speed = zpp_ind.horSpeed;
- }
-
- if (zpp_ind.heading_valid) {
- zppLoc.flags |= GPS_LOCATION_HAS_BEARING;
- zppLoc.bearing = zpp_ind.heading;
- }
-
- if (zpp_ind.technologyMask_valid) {
- tech_mask = zpp_ind.technologyMask;
- }
- }
- }
-
- return convertErr(status);
-}
-
-/*Values for lock
- 1 = Do not lock any position sessions
- 2 = Lock MI position sessions
- 3 = Lock MT position sessions
- 4 = Lock all position sessions
-
- Returns values:
- zero on success; non-zero on failure
-*/
-int LocApiV02 :: setGpsLock(LOC_GPS_LOCK_MASK lockMask)
-{
- qmiLocSetEngineLockReqMsgT_v02 setEngineLockReq;
- qmiLocSetEngineLockIndMsgT_v02 setEngineLockInd;
- locClientStatusEnumType status;
- locClientReqUnionType req_union;
- int ret=0;
-
- LOC_LOGD("%s:%d]: Set Gps Lock: %x\n", __func__, __LINE__, lockMask);
- setEngineLockReq.lockType = convertGpsLockMask(lockMask);
- req_union.pSetEngineLockReq = &setEngineLockReq;
- memset(&setEngineLockInd, 0, sizeof(setEngineLockInd));
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_ENGINE_LOCK_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_ENGINE_LOCK_IND_V02,
- &setEngineLockInd);
-
- if(status != eLOC_CLIENT_SUCCESS || setEngineLockInd.status != eQMI_LOC_SUCCESS_V02) {
- LOC_LOGE("%s:%d]: Set engine lock failed. status: %s, ind status:%s\n",
- __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(setEngineLockInd.status));
- ret = -1;
- }
- LOC_LOGD("%s:%d]: exit\n", __func__, __LINE__);
- return ret;
-}
-/*
- Returns
- Current value of GPS Lock on success
- -1 on failure
-*/
-int LocApiV02 :: getGpsLock()
-{
- qmiLocGetEngineLockReqMsgT_v02 getEngineLockReq;
- qmiLocGetEngineLockIndMsgT_v02 getEngineLockInd;
- locClientStatusEnumType status;
- locClientReqUnionType req_union;
- int ret=0;
- LOC_LOGD("%s:%d]: Enter\n", __func__, __LINE__);
- memset(&getEngineLockInd, 0, sizeof(getEngineLockInd));
-
- //Passing req_union as a parameter even though this request has no payload
- //since NULL or 0 gives an error during compilation
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_GET_ENGINE_LOCK_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_GET_ENGINE_LOCK_IND_V02,
- &getEngineLockInd);
- if(status != eLOC_CLIENT_SUCCESS || getEngineLockInd.status != eQMI_LOC_SUCCESS_V02) {
- LOC_LOGE("%s:%d]: Set engine lock failed. status: %s, ind status:%s\n",
- __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(getEngineLockInd.status));
- ret = -1;
- }
- else {
- if(getEngineLockInd.lockType_valid) {
- ret = (int)getEngineLockInd.lockType;
- LOC_LOGD("%s:%d]: Lock Type: %d\n", __func__, __LINE__, ret);
- }
- else {
- LOC_LOGE("%s:%d]: Lock Type not valid\n", __func__, __LINE__);
- ret = -1;
- }
- }
- LOC_LOGD("%s:%d]: Exit\n", __func__, __LINE__);
- return ret;
-}
-
-enum loc_api_adapter_err LocApiV02:: setXtraVersionCheck(enum xtra_version_check check)
-{
- qmiLocSetXtraVersionCheckReqMsgT_v02 req;
- qmiLocSetXtraVersionCheckIndMsgT_v02 ind;
- locClientStatusEnumType status;
- locClientReqUnionType req_union;
- enum loc_api_adapter_err ret = LOC_API_ADAPTER_ERR_SUCCESS;
-
- LOC_LOGD("%s:%d]: Enter. check: %d", __func__, __LINE__, check);
- memset(&req, 0, sizeof(req));
- memset(&ind, 0, sizeof(ind));
- switch (check) {
- case DISABLED:
- req.xtraVersionCheckMode = eQMI_LOC_XTRA_VERSION_CHECK_DISABLE_V02;
- break;
- case AUTO:
- req.xtraVersionCheckMode = eQMI_LOC_XTRA_VERSION_CHECK_AUTO_V02;
- break;
- case XTRA2:
- req.xtraVersionCheckMode = eQMI_LOC_XTRA_VERSION_CHECK_XTRA2_V02;
- break;
- case XTRA3:
- req.xtraVersionCheckMode = eQMI_LOC_XTRA_VERSION_CHECK_XTRA3_V02;
- break;
- default:
- req.xtraVersionCheckMode = eQMI_LOC_XTRA_VERSION_CHECK_DISABLE_V02;
- break;
- }
-
- req_union.pSetXtraVersionCheckReq = &req;
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_XTRA_VERSION_CHECK_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_XTRA_VERSION_CHECK_IND_V02,
- &ind);
- if(status != eLOC_CLIENT_SUCCESS || ind.status != eQMI_LOC_SUCCESS_V02) {
- LOC_LOGE("%s:%d]: Set xtra version check failed. status: %s, ind status:%s\n",
- __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(ind.status));
- ret = LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
- }
-
- LOC_LOGD("%s:%d]: Exit. ret: %d", __func__, __LINE__, (int)ret);
- return ret;
-}
-
-void LocApiV02 :: installAGpsCert(const DerEncodedCertificate* pData,
- size_t numberOfCerts,
- uint32_t slotBitMask)
-{
- LOC_LOGD("%s:%d]:, slot mask=%u number of certs=%u",
- __func__, __LINE__, slotBitMask, numberOfCerts);
-
- uint8_t certIndex = 0;
- for (uint8_t slot = 0; slot <= AGPS_CERTIFICATE_MAX_SLOTS-1; slot++, slotBitMask >>= 1)
- {
- if (slotBitMask & 1) //slot is writable
- {
- if (certIndex < numberOfCerts && pData[certIndex].data && pData[certIndex].length > 0)
- {
- LOC_LOGD("%s:%d]:, Inject cert#%u slot=%u length=%u",
- __func__, __LINE__, certIndex, slot, pData[certIndex].length);
-
- locClientReqUnionType req_union;
- locClientStatusEnumType status;
- qmiLocInjectSuplCertificateReqMsgT_v02 injectCertReq;
- qmiLocInjectSuplCertificateIndMsgT_v02 injectCertInd;
-
- memset(&injectCertReq, 0, sizeof(injectCertReq));
- injectCertReq.suplCertId = slot;
- injectCertReq.suplCertData_len = pData[certIndex].length;
- memcpy(injectCertReq.suplCertData, pData[certIndex].data, pData[certIndex].length);
-
- req_union.pInjectSuplCertificateReq = &injectCertReq;
-
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02,
- &injectCertInd);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != injectCertInd.status)
- {
- LOC_LOGE ("%s:%d]: inject-error status = %s, set_server_ind.status = %s",
- __func__,__LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(injectCertInd.status));
- }
-
- certIndex++; //move to next cert
-
- } else {
-
- LOC_LOGD("%s:%d]:, Delete slot=%u",
- __func__, __LINE__, slot);
-
- // A fake cert is injected first before delete is called to workaround
- // an issue that is seen with trying to delete an empty slot.
- {
- locClientReqUnionType req_union;
- locClientStatusEnumType status;
- qmiLocInjectSuplCertificateReqMsgT_v02 injectFakeCertReq;
- qmiLocInjectSuplCertificateIndMsgT_v02 injectFakeCertInd;
-
- memset(&injectFakeCertReq, 0, sizeof(injectFakeCertReq));
- injectFakeCertReq.suplCertId = slot;
- injectFakeCertReq.suplCertData_len = 1;
- injectFakeCertReq.suplCertData[0] = 1;
-
- req_union.pInjectSuplCertificateReq = &injectFakeCertReq;
-
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02,
- &injectFakeCertInd);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != injectFakeCertInd.status)
- {
- LOC_LOGE ("%s:%d]: inject-fake-error status = %s, set_server_ind.status = %s",
- __func__,__LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(injectFakeCertInd.status));
- }
- }
-
- locClientReqUnionType req_union;
- locClientStatusEnumType status;
- qmiLocDeleteSuplCertificateReqMsgT_v02 deleteCertReq;
- qmiLocDeleteSuplCertificateIndMsgT_v02 deleteCertInd;
-
- memset(&deleteCertReq, 0, sizeof(deleteCertReq));
- deleteCertReq.suplCertId = slot;
- deleteCertReq.suplCertId_valid = 1;
-
- req_union.pDeleteSuplCertificateReq = &deleteCertReq;
-
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02,
- req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02,
- &deleteCertInd);
-
- if (status != eLOC_CLIENT_SUCCESS ||
- eQMI_LOC_SUCCESS_V02 != deleteCertInd.status)
- {
- LOC_LOGE("%s:%d]: delete-error status = %s, set_server_ind.status = %s",
- __func__,__LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(deleteCertInd.status));
- }
- }
- } else {
- LOC_LOGD("%s:%d]:, Not writable slot=%u",
- __func__, __LINE__, slot);
- }
- }
-}
-
-/*
- Returns
- 0: update the gps reporting event successfully
- -1: on failure
-*/
-int LocApiV02 :: updateRegistrationMask(LOC_API_ADAPTER_EVENT_MASK_T event,
- loc_registration_mask_status isEnabled)
-{
- LOC_LOGD("%s:%d]: Enter\n", __func__, __LINE__);
-
- return open((isEnabled == LOC_REGISTRATION_MASK_ENABLED)?(mMask|event):(mMask&~event));
-}
-
-bool LocApiV02 :: gnssConstellationConfig()
-{
- return mGnssMeasurementSupported == sup_yes;
-}
-
-void LocApiV02 :: cacheGnssMeasurementSupport()
-{
- if (sup_unknown == mGnssMeasurementSupported) {
- if ((mQmiMask & QMI_LOC_EVENT_MASK_POSITION_REPORT_V02) ==
- QMI_LOC_EVENT_MASK_POSITION_REPORT_V02) {
- /*for GNSS Measurement service, use
- QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_V02
- to check if modem support this feature or not*/
- LOC_LOGD("%s:%d]: set GNSS measurement to report gps measurement only.\n",
- __func__, __LINE__);
-
- qmiLocSetGNSSConstRepConfigReqMsgT_v02 setGNSSConstRepConfigReq;
- qmiLocSetGNSSConstRepConfigIndMsgT_v02 setGNSSConstRepConfigInd;
- memset(&setGNSSConstRepConfigReq, 0, sizeof(setGNSSConstRepConfigReq));
- memset(&setGNSSConstRepConfigInd, 0, sizeof(setGNSSConstRepConfigInd));
-
- locClientStatusEnumType status;
- locClientReqUnionType req_union;
-
- setGNSSConstRepConfigReq.measReportConfig_valid = true;
- setGNSSConstRepConfigReq.measReportConfig = eQMI_SYSTEM_GPS_V02;
- req_union.pSetGNSSConstRepConfigReq = &setGNSSConstRepConfigReq;
-
- status = loc_sync_send_req(clientHandle,
- QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_V02,
- req_union,
- LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
- QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_IND_V02,
- &setGNSSConstRepConfigInd);
-
- if(status != eLOC_CLIENT_SUCCESS ||
- setGNSSConstRepConfigInd.status != eQMI_LOC_SUCCESS_V02) {
- LOC_LOGD("%s:%d]: Set GNSS constellation failed."
- " status: %s, ind status:%s\n",
- __func__, __LINE__,
- loc_get_v02_client_status_name(status),
- loc_get_v02_qmi_status_name(setGNSSConstRepConfigInd.status));
- mGnssMeasurementSupported = sup_no;
- } else {
- LOC_LOGD("%s:%d]: Set GNSS constellation succeeded.\n",
- __func__, __LINE__);
- mGnssMeasurementSupported = sup_yes;
- }
- }
- }
-
- LOC_LOGV("%s:%d]: mGnssMeasurementSupported is %d\n", __func__, __LINE__, mGnssMeasurementSupported);
-}