gps: Initial implementation of msm gps hal

Change-Id: Icf126a0bbb9dec414144b9b405694e41777920d5
diff --git a/CleanSpec.mk b/CleanSpec.mk
old mode 100644
new mode 100755
diff --git a/etc/Android.mk b/etc/Android.mk
new file mode 100755
index 0000000..26a39db
--- /dev/null
+++ b/etc/Android.mk
@@ -0,0 +1,11 @@
+
+#LOCAL_PATH := $(call my-dir)
+#include $(CLEAR_VARS)
+
+#LOCAL_MODULE := gps.conf
+#LOCAL_MODULE_TAGS := optional
+#LOCAL_MODULE_CLASS := ETC
+#LOCAL_MODULE_PATH  := $(TARGET_OUT_ETC)/
+#LOCAL_SRC_FILES := gps.conf
+#include $(BUILD_PREBUILT)
+
diff --git a/etc/gps.conf b/etc/gps.conf
new file mode 100755
index 0000000..cd3dada
--- /dev/null
+++ b/etc/gps.conf
@@ -0,0 +1,91 @@
+#Test
+NTP_SERVER=time.gpsonextra.net
+#Asia
+# NTP_SERVER=asia.pool.ntp.org
+#Europe
+# NTP_SERVER=europe.pool.ntp.org
+#North America
+# NTP_SERVER=north-america.pool.ntp.org
+
+XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin
+XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin
+XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin
+
+# DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info
+#               4 - Debug, 5 - Verbose
+DEBUG_LEVEL = 3
+
+# Intermediate position report, 1=enable, 0=disable
+INTERMEDIATE_POS=0
+
+# supl version 1.0
+SUPL_VER=0x10000
+
+# Error Estimate
+# _SET = 1
+# _CLEAR = 0
+ERR_ESTIMATE=0
+
+# GPS Capabilities bit mask
+# SCHEDULING = 1
+# MSB = 2
+# MSA = 4
+# ULP = 0x20
+# default = MSA | MSB | SCHEDULING | ULP
+CAPABILITIES=0x27
+
+# Accuracy threshold for intermediate positions
+# less accurate positions are ignored, 0 for passing all positions
+# ACCURACY_THRES=5000
+
+################################
+##### AGPS server settings #####
+################################
+
+# FOR SUPL SUPPORT, set the following
+# SUPL_HOST=supl.host.com or IP
+# SUPL_PORT=1234
+
+# FOR C2K PDE SUPPORT, set the following
+# C2K_HOST=c2k.pde.com or IP
+# C2K_PORT=1234
+
+################################
+# Sensor Settings
+################################
+
+# Needs to be set explicitly based on sensor
+# There is no default value.
+#GYRO_BIAS_RANDOM_WALK=
+
+SENSOR_ACCEL_BATCHES_PER_SEC=2
+SENSOR_ACCEL_SAMPLES_PER_BATCH=5
+SENSOR_GYRO_BATCHES_PER_SEC=2
+SENSOR_GYRO_SAMPLES_PER_BATCH=5
+
+# Sensor Control Mode (0=AUTO, 1=FORCE_ON)
+SENSOR_CONTROL_MODE=0
+
+# Enable or Disable Sensors for GPS use (0=Enable, 1=Disable)
+SENSOR_USAGE=0
+
+# Choose GSIFF sensor provider (1=DSPS, 2=Android NDK)
+SENSOR_PROVIDER=1
+
+################################
+# Indoor Positioning Settings
+################################
+# 0: QUIPC disabled, 1: QUIPC enabled, 2: forced QUIPC only
+QUIPC_ENABLED = 0
+
+################################
+# EXTRA SETTINGS
+################################
+# Enable or Disable Wiper (1=Enable, 0=Disable)
+ENABLE_WIPER=1
+
+####################################
+#  LTE Positioning Profile Settings
+####################################
+# 0: Enable RRLP on LTE(Default) 1: Enable LPP_User_Plane on LTE
+LPP_PROFILE = 0
\ No newline at end of file
diff --git a/loc_api/Android.mk b/loc_api/Android.mk
index 52942bf..7e09d5f 100755
--- a/loc_api/Android.mk
+++ b/loc_api/Android.mk
@@ -7,5 +7,27 @@
 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
 
 ifneq ($(BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE),)
-include $(call all-subdir-makefiles)
-endif
+
+LOCAL_PATH := $(call my-dir)
+
+GPS_DIR_LIST :=
+
+# add RPC dirs if RPC is available
+ifneq ($(TARGET_NO_RPC),true)
+
+GPS_DIR_LIST += $(LOCAL_PATH)/libloc_api-rpc-50001/
+GPS_DIR_LIST += $(LOCAL_PATH)/libloc_api-rpc/
+GPS_DIR_LIST += $(LOCAL_PATH)/libloc_api/
+
+else
+
+GPS_DIR_LIST += $(LOCAL_PATH)/loc_api_v02/
+
+endif #TARGET_NO_RPC
+
+GPS_DIR_LIST += $(LOCAL_PATH)/libloc_api_50001/
+
+#call the subfolders
+include $(addsuffix Android.mk, $(GPS_DIR_LIST))
+
+endif#BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE
diff --git a/loc_api/NOTICE b/loc_api/NOTICE
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc-50001/Android.mk b/loc_api/libloc_api-rpc-50001/Android.mk
new file mode 100755
index 0000000..6c5d533
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/Android.mk
@@ -0,0 +1,3 @@
+ifeq ($(BOARD_VENDOR_QCOM_GPS_LOC_API_AMSS_VERSION),50001)
+include $(call all-subdir-makefiles)
+endif
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/Android.mk b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/Android.mk
new file mode 100755
index 0000000..1287c69
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/Android.mk
@@ -0,0 +1,59 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+RPC_INC:=rpc_inc
+
+source_files:= \
+    src/loc_api_rpc_glue.c \
+    src/loc_api_sync_call.c \
+    src/loc_apicb_appinit.c \
+    src/loc_api_fixup.c \
+    src/loc_api_log.c \
+    src/LocApiRpcAdapter.cpp
+
+LOCAL_SRC_FILES:= $(source_files)
+
+LOCAL_CFLAGS:=-fno-short-enums
+LOCAL_CFLAGS+=-DDEBUG -DUSE_QCOM_AUTO_RPC -DUSE_QCOM_AUTO_RPC
+LOCAL_CFLAGS+=$(GPS_FEATURES)
+
+# for loc_api_fixup.c
+LOCAL_CFLAGS+=-DADD_XDR_FLOAT -DADD_XDR_BOOL
+
+LOCAL_SHARED_LIBRARIES:= \
+    librpc \
+    libutils \
+    libcutils \
+    libcommondefs \
+    libgps.utils \
+    libloc_adapter
+
+LOCAL_STATIC_LIBRARIES := \
+    libloc_api_rpcgen
+
+LOCAL_PRELINK_MODULE:= false
+
+LOCAL_C_INCLUDES:= \
+    $(LOCAL_PATH) \
+    $(LOCAL_PATH)/rpc_inc \
+    $(TARGET_OUT_HEADERS)/gps.utils \
+    $(TARGET_OUT_HEADERS)/loc_api/rpcgen/inc \
+    $(TARGET_OUT_HEADERS)/libcommondefs-rpc \
+    $(TARGET_OUT_HEADERS)/libcommondefs/rpcgen/inc \
+    $(TARGET_OUT_HEADERS)/librpc \
+    $(TARGET_OUT_HEADERS)/libloc-rpc/rpc_inc \
+    $(TARGET_OUT_HEADERS)/libloc_eng \
+    hardware/msm7k/librpc
+
+LOCAL_COPY_HEADERS_TO:= libloc_api-rpc-qc/$(RPC_INC)
+LOCAL_COPY_HEADERS:= \
+    $(RPC_INC)/loc_api_rpc_glue.h \
+    $(RPC_INC)/loc_api_fixup.h \
+    $(RPC_INC)/loc_api_sync_call.h \
+    $(RPC_INC)/loc_apicb_appinit.h
+
+LOCAL_MODULE:= libloc_api-rpc-qc
+
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpcAdapter.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpcAdapter.h
new file mode 100755
index 0000000..7b1f59b
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpcAdapter.h
@@ -0,0 +1,102 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#ifndef LOC_API_RPC_ADAPTER_H
+#define LOC_API_RPC_ADAPTER_H
+
+#include <rpc/rpc.h>
+#include <loc_api_rpc_glue.h>
+#include <LocApiAdapter.h>
+
+
+class LocApiRpcAdapter : public LocApiAdapter {
+    // RPC communication establishment
+    rpc_loc_client_handle_type client_handle;
+    rpc_loc_event_mask_type eMask;
+
+    static const rpc_loc_event_mask_type locBits[];
+    static rpc_loc_event_mask_type convertMask(LOC_API_ADAPTER_EVENT_MASK_T mask);
+    static enum loc_api_adapter_err convertErr(int rpcErr);
+
+    void reportPosition(const rpc_loc_parsed_position_s_type *location_report_ptr);
+    void reportSv(const rpc_loc_gnss_info_s_type *gnss_report_ptr);
+    void reportStatus(const rpc_loc_status_event_s_type *status_report_ptr);
+    void reportNmea(const rpc_loc_nmea_report_s_type *nmea_report_ptr);
+    void ATLEvent(const rpc_loc_server_request_s_type *server_request_ptr);
+    void NIEvent(const rpc_loc_ni_event_s_type *ni_req_ptr);
+    int NIEventFillVerfiyType(GpsNiNotification &notif,
+                              rpc_loc_ni_notify_verify_e_type notif_priv);
+    GpsNiEncodingType convertNiEncodingType(int loc_encoding);
+
+public:
+    LocApiRpcAdapter(LocEng &locEng);
+    ~LocApiRpcAdapter();
+
+    int locEventCB(rpc_loc_client_handle_type client_handle,
+                   rpc_loc_event_mask_type loc_event,
+                   const rpc_loc_event_payload_u_type* loc_event_payload);
+
+    void locRpcGlobalCB(CLIENT* clnt, enum rpc_reset_event event);
+
+    // RPC adapter interface implementations
+    virtual enum loc_api_adapter_err
+        reinit();
+    virtual enum loc_api_adapter_err
+        startFix();
+    virtual enum loc_api_adapter_err
+        stopFix();
+    virtual enum loc_api_adapter_err
+        setPositionMode(LocPositionMode mode, GpsPositionRecurrence recurrence,
+            uint32_t min_interval, uint32_t preferred_accuracy, uint32_t preferred_time);
+    virtual enum loc_api_adapter_err
+        enableData(int enable);
+    virtual enum loc_api_adapter_err
+        setTime(GpsUtcTime time, int64_t timeReference, int uncertainty);
+    virtual enum loc_api_adapter_err
+        injectPosition(double latitude, double longitude, float accuracy);
+    virtual enum loc_api_adapter_err
+        deleteAidingData(GpsAidingData f);
+    virtual enum loc_api_adapter_err
+        informNiResponse(GpsUserResponseType userResponse, const void* passThroughData);
+    virtual enum loc_api_adapter_err
+        setAPN(char* apn, int len);
+    virtual enum loc_api_adapter_err
+        setServer(const char* url, int len);
+    virtual enum loc_api_adapter_err
+        setServer(unsigned int ip, int port, LocServerType type);
+    virtual enum loc_api_adapter_err
+        setXtraData(char* data, int length);
+    virtual enum loc_api_adapter_err
+        atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bear, AGpsType agpsType);
+    virtual enum loc_api_adapter_err
+        atlCloseStatus(int handle, int is_succ);
+    virtual enum loc_api_adapter_err
+        setSUPLVersion(uint32_t version);
+};
+
+#endif //LOC_API_RPC_ADAPTER_H
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/debug.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/debug.h
new file mode 100755
index 0000000..8b20a3f
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/debug.h
@@ -0,0 +1,69 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#ifndef DEBUG_H
+#define DEBUG_H
+
+#include <stdio.h>
+
+#define LOG_TAG "LocSvc_rpc"
+#include <utils/Log.h>
+
+#define PRINT(x...) do {                                    \
+        fprintf(stdout, "%s(%d) ", __FUNCTION__, __LINE__); \
+        fprintf(stdout, ##x);                               \
+        LOGD(x);                               \
+    } while(0)
+
+#ifdef DEBUG
+#define D PRINT
+#else
+#define D(x...) do { } while(0)
+#endif
+
+#ifdef VERBOSE
+#define V PRINT
+#else
+#define V(x...) do { } while(0)
+#endif
+
+#define E(x...) do {                                        \
+        fprintf(stderr, "%s(%d) ", __FUNCTION__, __LINE__); \
+        fprintf(stderr, ##x);                               \
+        LOGE(x);                                            \
+    } while(0)
+
+#define FAILIF(cond, msg...) do {                                              \
+        if (__builtin_expect (cond, 0)) {                                      \
+            fprintf(stderr, "%s:%s:(%d): ", __FILE__, __FUNCTION__, __LINE__); \
+            fprintf(stderr, ##msg);                                            \
+            LOGE(##msg);                                                       \
+        }                                                                      \
+    } while(0)
+
+#endif/*DEBUG_H*/
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_fixup.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_fixup.h
new file mode 100755
index 0000000..9bfe5f0
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_fixup.h
@@ -0,0 +1,226 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#ifndef  LOC_API_FIXUP_H
+#define LOC_API_FIXUP_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#ifndef NULLPROC
+#define NULLPROC 0
+#endif /* NULLPROC */
+
+#ifdef ADD_XDR_FLOAT
+
+extern bool_t xdr_float (XDR *__xdrs, float *__fp);
+extern bool_t xdr_double (XDR *__xdrs, double *__dp);
+
+#endif /* ADD_XDR_FLOAT */
+
+#ifdef ADD_XDR_BOOL
+extern bool_t xdr_bool(XDR *__xdrs, int *__bp);
+#endif /* ADD_XDR_BOOL */
+
+#define RPC_LOC_API_MAJOR_VERSION_NUMBER   1
+#define RPC_LOC_API_MINOR_VERSION_NUMBER   0
+
+// Return value for loc_open in case of failure.
+#define RPC_LOC_CLIENT_HANDLE_INVALID     -1
+
+// Return value of loc api calls for loc_close, loc_start_fix, loc_stop_fix and loc_ioctl
+// These are also the status for the ioctl callback
+#define RPC_LOC_API_SUCCESS           0
+#define RPC_LOC_API_GENERAL_FAILURE   1
+#define RPC_LOC_API_UNSUPPORTED       2
+#define RPC_LOC_API_INVALID_HANDLE    4
+#define RPC_LOC_API_INVALID_PARAMETER 5
+#define RPC_LOC_API_ENGINE_BUSY       6
+#define RPC_LOC_API_PHONE_OFFLINE     7
+#define RPC_LOC_API_TIMEOUT           8
+
+// Special return value for loc api calls in case of RPC failure
+#define RPC_LOC_API_RPC_FAILURE       (-1234)
+// Special return value for modem restart incurred RPC failure
+#define RPC_LOC_API_RPC_MODEM_RESTART       (-1235)
+
+#define RPC_LOC_API_MAX_SV_COUNT                      80
+#define RPC_LOC_API_MAX_NMEA_STRING_LENGTH            1200
+
+// Maximum server address that will be used in location API
+#define RPC_LOC_API_MAX_SERVER_ADDR_LENGTH            256
+#define RPC_LOC_API_MAX_NUM_PREDICTED_ORBITS_SERVERS  3
+#define RPC_LOC_API_MAX_NUM_NTP_SERVERS               3
+
+#define RPC_LOC_EVENT_PARSED_POSITION_REPORT             0x00000001 // Position report comes in loc_parsed_position_s_type
+#define RPC_LOC_EVENT_SATELLITE_REPORT                   0x00000002 // Satellite in view report
+#define RPC_LOC_EVENT_NMEA_1HZ_REPORT                    0x00000004 // NMEA report at 1HZ rate
+#define RPC_LOC_EVENT_NMEA_POSITION_REPORT               0x00000008 // NMEA report at position report rate
+#define RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST           0x00000010 // NI notification/verification request
+#define RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST            0x00000020 // Assistance data, eg: time, predicted orbits request
+#define RPC_LOC_EVENT_LOCATION_SERVER_REQUEST            0x00000040 // Request for location server
+#define RPC_LOC_EVENT_IOCTL_REPORT                       0x00000080 // Callback report for loc_ioctl
+#define RPC_LOC_EVENT_STATUS_REPORT                      0x00000100 // Misc status report: eg, engine state
+
+#define RPC_LOC_POS_VALID_SESSION_STATUS                 0x00000001
+#define RPC_LOC_POS_VALID_TIMESTAMP_CALENDAR             0x00000002
+#define RPC_LOC_POS_VALID_TIMESTAMP_UTC                  0x00000004
+#define RPC_LOC_POS_VALID_LEAP_SECONDS                   0x00000008
+#define RPC_LOC_POS_VALID_TIME_UNC                       0x00000010
+#define RPC_LOC_POS_VALID_LATITUDE                       0x00000020
+#define RPC_LOC_POS_VALID_LONGITUDE                      0x00000040
+#define RPC_LOC_POS_VALID_ALTITUDE_WRT_ELLIPSOID         0x00000080
+#define RPC_LOC_POS_VALID_ALTITUDE_WRT_MEAN_SEA_LEVEL    0x00000100
+#define RPC_LOC_POS_VALID_SPEED_HORIZONTAL               0x00000200
+#define RPC_LOC_POS_VALID_SPEED_VERTICAL                 0x00000400
+#define RPC_LOC_POS_VALID_HEADING                        0x00000800
+#define RPC_LOC_POS_VALID_HOR_UNC_CIRCULAR               0x00001000
+#define RPC_LOC_POS_VALID_HOR_UNC_ELLI_SEMI_MAJ          0x00002000
+#define RPC_LOC_POS_VALID_HOR_UNC_ELLI_SEMI_MIN          0x00004000
+#define RPC_LOC_POS_VALID_HOR_UNC_ELLI_ORIENT_AZIMUTH    0x00008000
+#define RPC_LOC_POS_VALID_VERTICAL_UNC                   0x00010000
+#define RPC_LOC_POS_VALID_SPEED_UNC                      0x00020000
+#define RPC_LOC_POS_VALID_HEADING_UNC                    0x00040000
+#define RPC_LOC_POS_VALID_CONFIDENCE_HORIZONTAL          0x00080000
+#define RPC_LOC_POS_VALID_CONFIDENCE_VERTICAL            0x00100000
+#define RPC_LOC_POS_VALID_MAGNETIC_VARIATION             0x00200000
+#define RPC_LOC_POS_VALID_TECHNOLOGY_MASK                0x00400000
+
+#define RPC_LOC_POS_TECH_SATELLITE 0x00000001
+#define RPC_LOC_POS_TECH_CELLID    0x00000002
+#define RPC_LOC_POS_TECH_WIFI      0x00000004
+
+#define RPC_LOC_SV_INFO_VALID_SYSTEM         0x00000001
+#define RPC_LOC_SV_INFO_VALID_PRN            0x00000002
+#define RPC_LOC_SV_INFO_VALID_HEALTH_STATUS  0x00000004
+#define RPC_LOC_SV_INFO_VALID_PROCESS_STATUS 0x00000008
+#define RPC_LOC_SV_INFO_VALID_HAS_EPH        0x00000010
+#define RPC_LOC_SV_INFO_VALID_HAS_ALM        0x00000020
+#define RPC_LOC_SV_INFO_VALID_ELEVATION      0x00000040
+#define RPC_LOC_SV_INFO_VALID_AZIMUTH        0x00000080
+#define RPC_LOC_SV_INFO_VALID_SNR            0x00000100
+
+#define RPC_LOC_GNSS_INFO_VALID_POS_DOP           0x00000001
+#define RPC_LOC_GNSS_INFO_VALID_HOR_DOP           0x00000002
+#define RPC_LOC_GNSS_INFO_VALID_VERT_DOP          0x00000004
+#define RPC_LOC_GNSS_INFO_VALID_ALTITUDE_ASSUMED  0x00000008
+#define RPC_LOC_GNSS_INFO_VALID_SV_COUNT          0x00000010
+#define RPC_LOC_GNSS_INFO_VALID_SV_LIST           0x00000020
+
+#define RPC_LOC_NI_MAX_REQUESTOR_ID_LENGTH          200
+#define RPC_LOC_NI_SUPL_HASH_LENGTH                 8
+#define RPC_LOC_NI_SUPL_SLP_SESSION_ID_BYTE_LENGTH  4
+#define RPC_LOC_NI_MAX_CLIENT_NAME_LENGTH           64
+#define RPC_LOC_NI_MAX_EXT_CLIENT_ADDRESS           20
+#define RPC_LOC_NI_CODEWORD_LENGTH                  20
+
+#define RPC_LOC_NI_SUPL_QOP_VALID         0x01
+#define RPC_LOC_NI_SUPL_QOP_VERACC_VALID  0x02
+#define RPC_LOC_NI_SUPL_QOP_MAXAGE_VALID  0x04
+#define RPC_LOC_NI_SUPL_QOP_DELAY_VALID   0x08
+
+#define RPC_LOC_FIX_CRIT_VALID_RECURRENCE_TYPE                  0x00000001
+#define RPC_LOC_FIX_CRIT_VALID_PREFERRED_OPERATION_MODE         0x00000002
+#define RPC_LOC_FIX_CRIT_VALID_PREFERRED_ACCURACY               0x00000004
+#define RPC_LOC_FIX_CRIT_VALID_PREFERRED_RESPONSE_TIME          0x00000008
+#define RPC_LOC_FIX_CRIT_VALID_INTERMEDIATE_POS_REPORT_ENABLED  0x00000010
+#define RPC_LOC_FIX_CRIT_VALID_NOTIFY_TYPE                      0x00000020
+#define RPC_LOC_FIX_CRIT_VALID_MIN_INTERVAL                     0x00000040
+#define RPC_LOC_FIX_CRIT_VALID_MIN_DISTANCE                     0x00000080
+#define RPC_LOC_FIX_CRIT_VALID_MIN_DIST_SAMPLE_INTERVAL         0x00000100
+
+#define RPC_LOC_ASSIST_POS_VALID_TIMESTAMP_UTC                0x00000001
+#define RPC_LOC_ASSIST_POS_VALID_LATITUDE                     0x00000002
+#define RPC_LOC_ASSIST_POS_VALID_LONGITUDE                    0x00000004
+#define RPC_LOC_ASSIST_POS_VALID_ALTITUDE_WRT_ELLIPSOID       0x00000008
+#define RPC_LOC_ASSIST_POS_VALID_ALTITUDE_WRT_MEAN_SEA_LEVEL  0x00000010
+#define RPC_LOC_ASSIST_POS_VALID_HOR_UNC_CIRCULAR             0x00000020
+#define RPC_LOC_ASSIST_POS_VALID_VERT_UNC                     0x00000040
+#define RPC_LOC_ASSIST_POS_VALID_CONFIDENCE_HORIZONTAL        0x00000080
+#define RPC_LOC_ASSIST_POS_VALID_CONFIDENCE_VERTICAL          0x00000100
+#define RPC_LOC_ASSIST_POS_VALID_TIMESTAMP_AGE                0x00000200
+
+#define RPC_LOC_ASSIST_DATA_ALL         0xFFFFFFFF
+
+#define RPC_LOC_NMEA_MASK_ALL    0xffff
+#define RPC_LOC_NMEA_MASK_GGA    0x0001
+#define RPC_LOC_NMEA_MASK_RMC    0x0002
+#define RPC_LOC_NMEA_MASK_GSV    0x0004
+#define RPC_LOC_NMEA_MASK_GSA    0x0008
+#define RPC_LOC_NMEA_MASK_VTG    0x0010
+
+/* EFS data access */
+#define RPC_LOC_EFS_MAX_PATH_LEN_BYTES  64     /* Max file name length in bytes that can be written*/
+#define RPC_LOC_EFS_MAX_FILE_LEN_BYTES  2000   /* Max file size in bytes that can be written */
+
+/* WIPER valid information flag in log report */
+#define RPC_LOC_WIPER_LOG_TIME_VALID 0x01
+#define RPC_LOC_WIPER_LOG_POS_VALID 0x02
+#define RPC_LOC_WIPER_LOG_AP_SET_VALID 0x04
+
+/* General WIPER defines */
+#define RPC_LOC_WIPER_MAC_ADDR_LENGTH  6              // Do not change this number since it affects RPC and log packet sizes
+#define RPC_LOC_WIPER_MAX_REPORTED_APS_PER_LOG_MSG 50 // Do not change this number since it affects RPC and log packet sizes
+
+/* WIPER AP Qualifier */
+#define RPC_LOC_WIPER_AP_QUALIFIER_BEING_USED 0x1  /* AP is being used by WPS */
+#define RPC_LOC_WIPER_AP_QUALIFIER_HIDDEN_SSID 0x2 /* AP does not broadcast SSID */
+#define RPC_LOC_WIPER_AP_QUALIFIER_PRIVATE 0x4     /* AP has encryption turned on */
+#define RPC_LOC_WIPER_AP_QUALIFIER_INFRASTRUCTURE_MODE 0x8     /* AP is in infrastructure mode and not in ad-hoc/unknown mode */
+
+/* flags for notification */
+#define  RPC_LOC_NI_CLIENT_NAME_PRESENT             0x0001
+#define  RPC_LOC_NI_CLIENT_EXTADDR_PRESENT          0x0002
+#define  RPC_LOC_NI_DEF_LOCATION_TYPE_PRESENT       0x0010
+#define  RPC_LOC_NI_REQUESTOR_ID_PRESENT            0x0020
+#define  RPC_LOC_NI_CODEWORD_PRESENT                0x0040
+#define  RPC_LOC_NI_SERVICE_TYPE_ID_PRESENT         0x0080
+#define  RPC_LOC_NI_ENCODING_TYPE_PRESENT           0x0100
+
+/* below are for RPC_LOC_IOCTL_SET_LBS_APN_PROFILE data */
+/* values for apn_profiles[0].srv_system_type */
+#define LOC_APN_PROFILE_SRV_SYS_CDMA  0x01
+#define LOC_APN_PROFILE_SRV_SYS_HDR   0x02
+#define LOC_APN_PROFILE_SRV_SYS_GSM   0x04
+#define LOC_APN_PROFILE_SRV_SYS_WCDMA 0x08
+#define LOC_APN_PROFILE_SRV_SYS_LTE   0x10
+#define LOC_APN_PROFILE_SRV_SYS_MAX   0x1F
+/* values for apn_profiles[0].pdp_type */
+#define LOC_APN_PROFILE_PDN_TYPE_IPV4    0x01
+#define LOC_APN_PROFILE_PDN_TYPE_IPV6    0x02
+#define LOC_APN_PROFILE_PDN_TYPE_IPV4V6  0x03
+#define LOC_APN_PROFILE_PDN_TYPE_PPP     0x04
+#define LOC_APN_PROFILE_PDN_TYPE_MAX     0x04
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_API_FIXUP_H */
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_log.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_log.h
new file mode 100755
index 0000000..c0bcda1
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_log.h
@@ -0,0 +1,59 @@
+/* Copyright (c) 2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef LOC_API_LOG_H
+#define LOC_API_LOG_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <ctype.h>
+#include "loc_api_rpcgen_common_rpc.h"
+
+extern int loc_callback_log(
+      rpc_loc_event_mask_type               loc_event,              /* event mask           */
+      const rpc_loc_event_payload_u_type*   loc_event_payload       /* payload              */
+);
+
+extern const char* loc_get_event_atl_open_name(rpc_loc_server_request_e_type loc_event_atl_open);
+extern const char* loc_get_event_name(rpc_loc_event_mask_type loc_event_mask);
+extern const char* loc_get_ioctl_type_name(rpc_loc_ioctl_e_type ioctl_type);
+extern const char* loc_get_ioctl_status_name(uint32 status);
+extern const char* loc_get_sess_status_name(rpc_loc_session_status_e_type status);
+extern const char* loc_get_engine_state_name(rpc_loc_engine_state_e_type state);
+extern const char* loc_get_fix_session_state_name(rpc_loc_fix_session_state_e_type state);
+extern const char* loc_get_rpc_reset_event_name(enum rpc_reset_event event);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_API_LOG_H */
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_rpc_glue.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_rpc_glue.h
new file mode 100755
index 0000000..16552a0
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_rpc_glue.h
@@ -0,0 +1,123 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#ifndef LOC_API_RPC_GLUE_H
+#define LOC_API_RPC_GLUE_H
+
+/* Include RPC headers */
+#ifdef USE_LOCAL_RPC
+#include "rpc_inc/loc_api_common.h"
+#include "rpc_inc/loc_api.h"
+#include "rpc_inc/loc_api_cb.h"
+#endif
+
+#ifdef USE_QCOM_AUTO_RPC
+#include "loc_api_rpcgen_rpc.h"
+#include "loc_api_rpcgen_common_rpc.h"
+#include "loc_api_rpcgen_cb_rpc.h"
+#endif
+
+/* Boolean */
+/* Other data types in comdef.h are defined in rpc stubs, so fix it here */
+typedef unsigned char boolean;
+#define TRUE 1
+#define FALSE 0
+
+#include "rpc_inc/loc_api_fixup.h"
+#include "rpc_inc/loc_api_sync_call.h"
+#include <rpc/clnt.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+extern int loc_api_glue_init(void);
+extern int loc_api_null(void);
+
+typedef int32 (loc_event_cb_f_type)(
+    void*                                 userData,
+    rpc_loc_client_handle_type            loc_handle,             /* handle of the client */
+    rpc_loc_event_mask_type               loc_event,              /* event mask           */
+    const rpc_loc_event_payload_u_type*   loc_event_payload       /* payload              */
+);
+
+typedef void (loc_reset_notif_cb_f_type)(
+    void*                                 userData,
+    CLIENT*                               clnt,
+    enum rpc_reset_event                  event
+);
+
+extern rpc_loc_client_handle_type loc_open(
+    rpc_loc_event_mask_type       event_reg_mask,
+    loc_event_cb_f_type           *event_callback,
+    loc_reset_notif_cb_f_type     *rpc_global_cb,
+    void*                         userData
+);
+
+extern int32 loc_close
+(
+      rpc_loc_client_handle_type handle
+);
+
+extern void loc_clear
+(
+      rpc_loc_client_handle_type handle
+);
+
+extern int32 loc_start_fix
+(
+      rpc_loc_client_handle_type handle
+);
+
+extern int32 loc_stop_fix
+(
+      rpc_loc_client_handle_type handle
+);
+
+extern int32 loc_ioctl
+(
+      rpc_loc_client_handle_type           handle,
+      rpc_loc_ioctl_e_type                 ioctl_type,
+      rpc_loc_ioctl_data_u_type*           ioctl_data
+);
+
+extern int loc_eng_ioctl
+(
+      rpc_loc_client_handle_type           handle,
+      rpc_loc_ioctl_e_type                 ioctl_type,
+      rpc_loc_ioctl_data_u_type*           ioctl_data_ptr,
+      uint32                               timeout_msec,
+      rpc_loc_ioctl_callback_s_type       *cb_data_ptr
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_API_RPC_GLUE_H */
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_sync_call.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_sync_call.h
new file mode 100755
index 0000000..266f8ec
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_sync_call.h
@@ -0,0 +1,90 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#ifndef LOC_API_CB_SYNC_H
+#define LOC_API_CB_SYNC_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+#include "loc_api_rpc_glue.h"
+#define LOC_SYNC_CALL_SLOTS_MAX 8
+
+typedef struct {
+   pthread_mutex_t                lock;
+
+   /* Client ID */
+   rpc_loc_client_handle_type     loc_handle;
+
+   /* Callback waiting conditional variable */
+   pthread_cond_t                 loc_cb_arrived_cond;
+
+   /* Callback waiting data block, protected by loc_cb_data_mutex */
+   boolean                        in_use;
+   boolean                        signal_sent;
+   boolean                        not_available;
+   rpc_loc_event_mask_type        loc_cb_wait_event_mask;        /* event to wait for */
+   rpc_loc_ioctl_e_type           ioctl_type;                    /* ioctl to wait for */
+   rpc_loc_event_payload_u_type   loc_cb_received_payload;       /* received payload */
+   rpc_loc_event_mask_type        loc_cb_received_event_mask;    /* received event   */
+} loc_sync_call_slot_s_type;
+
+typedef struct {
+   int                            num_of_slots;
+   loc_sync_call_slot_s_type      slots[LOC_SYNC_CALL_SLOTS_MAX];
+} loc_sync_call_slot_array_s_type;
+
+/* Init function */
+void loc_api_sync_call_init();
+
+/* Destroy function */
+void loc_api_sync_call_destroy();
+
+/* Process Loc API callbacks to wake up blocked user threads */
+void loc_api_callback_process_sync_call(
+      rpc_loc_client_handle_type            loc_handle,             /* handle of the client */
+      rpc_loc_event_mask_type               loc_event,              /* event mask           */
+      const rpc_loc_event_payload_u_type*   loc_event_payload       /* payload              */
+);
+
+/* Reentrant synchronous IOCTL call, using Loc API return code */
+int loc_api_sync_ioctl
+(
+      rpc_loc_client_handle_type           handle,
+      rpc_loc_ioctl_e_type                 ioctl_type,
+      rpc_loc_ioctl_data_u_type*           ioctl_data_ptr,
+      uint32                               timeout_msec,
+      rpc_loc_ioctl_callback_s_type       *cb_data_ptr
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_API_CB_SYNC_H */
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_apicb_appinit.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_apicb_appinit.h
new file mode 100755
index 0000000..8dbcb9a
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_apicb_appinit.h
@@ -0,0 +1,45 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#ifndef LOC_APICB_APPINIT_H
+#define LOC_APICB_APPINIT_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ /* Initialization function for callbacks */
+extern int loc_apicb_app_init();
+extern void loc_apicb_app_deinit();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_APICB_APPINIT_H */
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpcAdapter.cpp b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpcAdapter.cpp
new file mode 100755
index 0000000..48b3a0f
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpcAdapter.cpp
@@ -0,0 +1,1225 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
+#define LOG_TAG "LocSvc_adapter"
+
+#include <unistd.h>
+#include <math.h>
+#include <utils/SystemClock.h>
+#include "LocApiRpcAdapter.h"
+#include "loc_api_rpcgen_common_rpc.h"
+#include "log_util.h"
+#include "loc_log.h"
+#include "loc_api_log.h"
+
+#define LOC_XTRA_INJECT_DEFAULT_TIMEOUT (3100)
+#define XTRA_BLOCK_SIZE                 (3072)
+#define LOC_IOCTL_DEFAULT_TIMEOUT 1000 // 1000 milli-seconds
+#define LOC_NI_NOTIF_KEY_ADDRESS           "Address"
+
+/*===========================================================================
+FUNCTION    loc_event_cb
+
+DESCRIPTION
+   This is the callback function registered by loc_open.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   RPC_LOC_API_SUCCESS
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int32 loc_event_cb
+(
+    void*                                user,
+    rpc_loc_client_handle_type           client_handle,
+    rpc_loc_event_mask_type              loc_event,
+    const rpc_loc_event_payload_u_type*  loc_event_payload
+)
+{
+    MODEM_LOG_CALLFLOW(%s, loc_get_event_name(loc_event));
+    loc_callback_log(loc_event, loc_event_payload);
+    int32 ret_val = ((LocApiRpcAdapter*)user)->locEventCB(client_handle, loc_event, loc_event_payload);
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_rpc_global_cb
+
+DESCRIPTION
+   This is the callback function registered by loc_open for RPC global events
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   RPC_LOC_API_SUCCESS
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_rpc_global_cb(void* user, CLIENT* clnt, enum rpc_reset_event event)
+{
+    MODEM_LOG_CALLFLOW(%s, loc_get_rpc_reset_event_name(event));
+    ((LocApiRpcAdapter*)user)->locRpcGlobalCB(clnt, event);
+    EXIT_LOG(%p, VOID_RET);
+}
+
+
+LocApiAdapter* getLocApiAdapter(LocEng &locEng)
+{
+    return new LocApiRpcAdapter(locEng);
+}
+
+const rpc_loc_event_mask_type LocApiRpcAdapter::locBits[] =
+{
+    RPC_LOC_EVENT_PARSED_POSITION_REPORT,
+    RPC_LOC_EVENT_SATELLITE_REPORT,
+    RPC_LOC_EVENT_NMEA_1HZ_REPORT,
+    RPC_LOC_EVENT_NMEA_POSITION_REPORT,
+    RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST,
+    RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST,
+    RPC_LOC_EVENT_LOCATION_SERVER_REQUEST,
+    RPC_LOC_EVENT_IOCTL_REPORT,
+    RPC_LOC_EVENT_STATUS_REPORT
+};
+
+LocApiRpcAdapter::LocApiRpcAdapter(LocEng &locEng) :
+    LocApiAdapter(locEng),
+    client_handle(RPC_LOC_CLIENT_HANDLE_INVALID),
+    eMask(convertMask(locEng.eventMask))
+{
+    loc_api_glue_init();
+}
+
+LocApiRpcAdapter::~LocApiRpcAdapter()
+{
+    if (RPC_LOC_CLIENT_HANDLE_INVALID != client_handle) {
+        loc_clear(client_handle);
+    }
+
+    loc_close(client_handle);
+}
+
+rpc_loc_event_mask_type
+LocApiRpcAdapter::convertMask(LOC_API_ADAPTER_EVENT_MASK_T mask)
+{
+    rpc_loc_event_mask_type newMask = 0;
+
+    for (unsigned int i = 0, bit=1; 0 != mask; i++, bit<<=1) {
+        if (mask & bit) {
+            newMask |= locBits[i];
+            mask ^= bit;
+        }
+    }
+
+    return newMask;
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::convertErr(int rpcErr)
+{
+    switch(rpcErr)
+    {
+    case RPC_LOC_API_SUCCESS:
+        return LOC_API_ADAPTER_ERR_SUCCESS;
+    case RPC_LOC_API_GENERAL_FAILURE:
+        return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+    case RPC_LOC_API_UNSUPPORTED:
+        return LOC_API_ADAPTER_ERR_UNSUPPORTED;
+    case RPC_LOC_API_INVALID_HANDLE:
+        return LOC_API_ADAPTER_ERR_INVALID_HANDLE;
+    case RPC_LOC_API_INVALID_PARAMETER:
+        return LOC_API_ADAPTER_ERR_INVALID_PARAMETER;
+    case RPC_LOC_API_ENGINE_BUSY:
+        return LOC_API_ADAPTER_ERR_ENGINE_BUSY;
+    case RPC_LOC_API_PHONE_OFFLINE:
+        return LOC_API_ADAPTER_ERR_PHONE_OFFLINE;
+    case RPC_LOC_API_TIMEOUT:
+        return LOC_API_ADAPTER_ERR_TIMEOUT;
+    case RPC_LOC_API_RPC_MODEM_RESTART:
+        return LOC_API_ADAPTER_ERR_ENGINE_DOWN;
+    case RPC_LOC_API_RPC_FAILURE:
+        return LOC_API_ADAPTER_ERR_FAILURE;
+    default:
+        return LOC_API_ADAPTER_ERR_UNKNOWN;
+    }
+}
+
+void LocApiRpcAdapter::locRpcGlobalCB(CLIENT* clnt, enum rpc_reset_event event)
+{
+    static rpc_loc_engine_state_e_type last_state = RPC_LOC_ENGINE_STATE_MAX;
+
+    switch (event) {
+    case RPC_SUBSYSTEM_RESTART_BEGIN:
+        if (RPC_LOC_ENGINE_STATE_OFF != last_state) {
+            last_state = RPC_LOC_ENGINE_STATE_OFF;
+            handleEngineDownEvent();
+        }
+        break;
+    case RPC_SUBSYSTEM_RESTART_END:
+        if (RPC_LOC_ENGINE_STATE_ON != last_state) {
+            last_state = RPC_LOC_ENGINE_STATE_ON;
+            handleEngineUpEvent();
+        }
+        break;
+    }
+}
+
+int32 LocApiRpcAdapter::locEventCB(rpc_loc_client_handle_type client_handle,
+                     rpc_loc_event_mask_type loc_event,
+                     const rpc_loc_event_payload_u_type* loc_event_payload)
+{
+    locEngHandle.acquireWakelock();
+
+    // Parsed report
+    if (loc_event & RPC_LOC_EVENT_PARSED_POSITION_REPORT)
+    {
+        reportPosition(&loc_event_payload->rpc_loc_event_payload_u_type_u.
+                       parsed_location_report);
+    }
+
+    // Satellite report
+    if (loc_event & RPC_LOC_EVENT_SATELLITE_REPORT)
+    {
+        reportSv(&loc_event_payload->rpc_loc_event_payload_u_type_u.gnss_report);
+    }
+
+    // Status report
+    if (loc_event & RPC_LOC_EVENT_STATUS_REPORT)
+    {
+        reportStatus(&loc_event_payload->rpc_loc_event_payload_u_type_u.status_report);
+    }
+
+    // NMEA
+    if (loc_event & RPC_LOC_EVENT_NMEA_1HZ_REPORT)
+    {
+        reportNmea(&(loc_event_payload->rpc_loc_event_payload_u_type_u.nmea_report));
+    }
+    // XTRA support: supports only XTRA download
+    if (loc_event & RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST)
+    {
+        if (loc_event_payload->rpc_loc_event_payload_u_type_u.assist_data_request.event ==
+            RPC_LOC_ASSIST_DATA_PREDICTED_ORBITS_REQ)
+        {
+            requestXtraData();
+        } else if (loc_event_payload->rpc_loc_event_payload_u_type_u.assist_data_request.event ==
+                   RPC_LOC_ASSIST_DATA_TIME_REQ)
+        {
+            requestTime();
+        } else if (loc_event_payload->rpc_loc_event_payload_u_type_u.assist_data_request.event ==
+                   RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ)
+        {
+            requestLocation();
+        }
+    }
+
+    // AGPS data request
+    if (loc_event & RPC_LOC_EVENT_LOCATION_SERVER_REQUEST)
+    {
+        ATLEvent(&loc_event_payload->rpc_loc_event_payload_u_type_u.
+                 loc_server_request);
+    }
+
+    // NI notify request
+    if (loc_event & RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST)
+    {
+        NIEvent(&loc_event_payload->rpc_loc_event_payload_u_type_u.ni_request);
+    }
+
+    locEngHandle.releaseWakeLock();
+    return RPC_LOC_API_SUCCESS;//We simply want to return sucess here as we do not want to
+    // cause any issues in RPC thread context
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::reinit()
+{
+    enum loc_api_adapter_err ret_val = LOC_API_ADAPTER_ERR_SUCCESS;
+    if (RPC_LOC_CLIENT_HANDLE_INVALID != client_handle) {
+        loc_clear(client_handle);
+    }
+
+    client_handle = loc_open(eMask, loc_event_cb, loc_rpc_global_cb, this);
+
+    if (client_handle < 0) {
+        ret_val = LOC_API_ADAPTER_ERR_INVALID_HANDLE;
+    }
+
+    return ret_val;
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::startFix() {
+   LOC_LOGD("LocApiRpcAdapter::startFix() called");
+   return convertErr(
+       loc_start_fix(client_handle)
+       );
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::stopFix() {
+   LOC_LOGD("LocApiRpcAdapter::stopFix() called");
+   return convertErr(
+       loc_stop_fix(client_handle)
+       );
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::setPositionMode(LocPositionMode mode,
+            GpsPositionRecurrence recurrence, uint32_t min_interval,
+            uint32_t preferred_accuracy, uint32_t preferred_time)
+{
+    rpc_loc_ioctl_data_u_type    ioctl_data;
+    rpc_loc_fix_criteria_s_type *fix_criteria_ptr;
+    rpc_loc_ioctl_e_type         ioctl_type = RPC_LOC_IOCTL_SET_FIX_CRITERIA;
+    rpc_loc_operation_mode_e_type op_mode;
+    int                          ret_val;
+
+    LOGD ("loc_eng_set_position mode, client = %d, interval = %d, mode = %d\n",
+          (int32) client_handle, min_interval, mode);
+
+    switch (mode)
+    {
+    case LOC_POSITION_MODE_MS_BASED:
+        op_mode = RPC_LOC_OPER_MODE_MSB;
+        break;
+    case LOC_POSITION_MODE_MS_ASSISTED:
+        op_mode = RPC_LOC_OPER_MODE_MSA;
+        break;
+    case LOC_POSITION_MODE_RESERVED_1:
+        op_mode = RPC_LOC_OPER_MODE_SPEED_OPTIMAL;
+        break;
+    case LOC_POSITION_MODE_RESERVED_2:
+        op_mode = RPC_LOC_OPER_MODE_ACCURACY_OPTIMAL;
+        break;
+    case LOC_POSITION_MODE_RESERVED_3:
+        op_mode = RPC_LOC_OPER_MODE_DATA_OPTIMAL;
+        break;
+    case LOC_POSITION_MODE_RESERVED_4:
+        op_mode = RPC_LOC_OPER_MODE_MSA;
+        fix_criteria_ptr->preferred_response_time  = 0;
+        break;
+    default:
+        op_mode = RPC_LOC_OPER_MODE_STANDALONE;
+    }
+
+    fix_criteria_ptr = &ioctl_data.rpc_loc_ioctl_data_u_type_u.fix_criteria;
+    fix_criteria_ptr->valid_mask = RPC_LOC_FIX_CRIT_VALID_PREFERRED_OPERATION_MODE |
+                                   RPC_LOC_FIX_CRIT_VALID_RECURRENCE_TYPE;
+    fix_criteria_ptr->min_interval = min_interval;
+    fix_criteria_ptr->preferred_operation_mode = op_mode;
+
+    if (min_interval > 0) {
+        fix_criteria_ptr->min_interval = min_interval;
+        fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_MIN_INTERVAL;
+    }else if(min_interval == 0)
+    {
+        /*If the framework passes in 0 transalate it into the maximum frequency we can report positions
+          which is 1 Hz or once very second */
+        fix_criteria_ptr->min_interval = MIN_POSSIBLE_FIX_INTERVAL;
+        fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_MIN_INTERVAL;
+    }
+    if (preferred_accuracy > 0) {
+        fix_criteria_ptr->preferred_accuracy = preferred_accuracy;
+        fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_PREFERRED_ACCURACY;
+    }
+    if (preferred_time > 0) {
+        fix_criteria_ptr->preferred_response_time = preferred_time;
+        fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_PREFERRED_RESPONSE_TIME;
+    }
+
+    switch (recurrence) {
+    case GPS_POSITION_RECURRENCE_SINGLE:
+        fix_criteria_ptr->recurrence_type = RPC_LOC_SINGLE_FIX;
+        break;
+    case GPS_POSITION_RECURRENCE_PERIODIC:
+    default:
+        fix_criteria_ptr->recurrence_type = RPC_LOC_PERIODIC_FIX;
+        break;
+    }
+    ioctl_data.disc = ioctl_type;
+
+    ret_val = loc_eng_ioctl (client_handle,
+                             ioctl_type,
+                             &ioctl_data,
+                             LOC_IOCTL_DEFAULT_TIMEOUT,
+                             NULL /* No output information is expected*/);
+
+    return convertErr(ret_val);
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::setTime(GpsUtcTime time, int64_t timeReference, int uncertainty)
+{
+    rpc_loc_ioctl_data_u_type        ioctl_data;
+    rpc_loc_assist_data_time_s_type *time_info_ptr;
+    rpc_loc_ioctl_e_type             ioctl_type = RPC_LOC_IOCTL_INJECT_UTC_TIME;
+    int                              ret_val;
+
+    LOC_LOGD ("loc_eng_inject_time, uncertainty = %d\n", uncertainty);
+
+    time_info_ptr = &ioctl_data.rpc_loc_ioctl_data_u_type_u.assistance_data_time;
+    time_info_ptr->time_utc = time;
+    time_info_ptr->time_utc += (int64_t)(android::elapsedRealtime() - timeReference);
+    time_info_ptr->uncertainty = uncertainty; // Uncertainty in ms
+
+    ioctl_data.disc = ioctl_type;
+
+    ret_val = loc_eng_ioctl (client_handle,
+                             ioctl_type,
+                             &ioctl_data,
+                             LOC_IOCTL_DEFAULT_TIMEOUT,
+                             NULL /* No output information is expected*/);
+
+    return convertErr(ret_val);
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::injectPosition(double latitude, double longitude, float accuracy)
+{
+    /* IOCTL data */
+    rpc_loc_ioctl_data_u_type ioctl_data;
+    rpc_loc_assist_data_pos_s_type *assistance_data_position =
+        &ioctl_data.rpc_loc_ioctl_data_u_type_u.assistance_data_position;
+    int                          ret_val;
+
+    /************************************************
+     * Fill in latitude, longitude & accuracy
+     ************************************************/
+
+    /* This combo is required */
+    assistance_data_position->valid_mask =
+        RPC_LOC_ASSIST_POS_VALID_LATITUDE |
+        RPC_LOC_ASSIST_POS_VALID_LONGITUDE |
+        RPC_LOC_ASSIST_POS_VALID_HOR_UNC_CIRCULAR |
+        RPC_LOC_ASSIST_POS_VALID_CONFIDENCE_HORIZONTAL;
+
+    assistance_data_position->latitude = latitude;
+    assistance_data_position->longitude = longitude;
+    assistance_data_position->hor_unc_circular = accuracy; /* Meters assumed */
+    assistance_data_position->confidence_horizontal = 63;  /* 63% (1 std dev) assumed */
+
+    /* Log */
+    LOC_LOGD("Inject coarse position Lat=%lf, Lon=%lf, Acc=%.2lf\n",
+             (double) assistance_data_position->latitude,
+             (double) assistance_data_position->longitude,
+             (double) assistance_data_position->hor_unc_circular);
+
+    ret_val = loc_eng_ioctl( client_handle,
+                             RPC_LOC_IOCTL_INJECT_POSITION,
+                             &ioctl_data,
+                             LOC_IOCTL_DEFAULT_TIMEOUT,
+                             NULL /* No output information is expected*/);
+    return convertErr(ret_val);
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::informNiResponse(GpsUserResponseType userResponse,
+                                   const void* passThroughData)
+{
+    rpc_loc_ioctl_data_u_type data;
+    rpc_loc_ioctl_callback_s_type callback_payload;
+
+    memcpy(&data.rpc_loc_ioctl_data_u_type_u.user_verify_resp.ni_event_pass_back,
+           passThroughData, sizeof (rpc_loc_ni_event_s_type));
+
+    rpc_loc_ni_user_resp_e_type resp;
+    switch (userResponse)
+    {
+    case GPS_NI_RESPONSE_ACCEPT:
+        data.rpc_loc_ioctl_data_u_type_u.user_verify_resp.user_resp =
+            RPC_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT;
+        break;
+    case GPS_NI_RESPONSE_DENY:
+        data.rpc_loc_ioctl_data_u_type_u.user_verify_resp.user_resp =
+            RPC_LOC_NI_LCS_NOTIFY_VERIFY_DENY;
+        break;
+    case GPS_NI_RESPONSE_NORESP:
+    default:
+        data.rpc_loc_ioctl_data_u_type_u.user_verify_resp.user_resp =
+            RPC_LOC_NI_LCS_NOTIFY_VERIFY_NORESP;
+        break;
+    }
+
+    return convertErr(
+        loc_eng_ioctl(client_handle,
+                      RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE,
+                      &data,
+                      LOC_IOCTL_DEFAULT_TIMEOUT,
+                      &callback_payload)
+        );
+}
+
+enum loc_api_adapter_err
+    LocApiRpcAdapter::setAPN(char* apn, int len)
+{
+      rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_SET_LBS_APN_PROFILE, {0}};
+      ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].srv_system_type = LOC_APN_PROFILE_SRV_SYS_MAX;
+      ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].pdp_type = LOC_APN_PROFILE_PDN_TYPE_IPV4;
+      memcpy(&(ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].apn_name), apn, len+1);
+
+      return convertErr(
+          loc_eng_ioctl (client_handle,
+                         RPC_LOC_IOCTL_SET_LBS_APN_PROFILE,
+                         &ioctl_data,
+                         LOC_IOCTL_DEFAULT_TIMEOUT,
+                         NULL)
+          );
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::setServer(const char* url, int len)
+{
+    rpc_loc_ioctl_data_u_type         ioctl_data;
+    rpc_loc_server_info_s_type       *server_info_ptr;
+    rpc_loc_ioctl_e_type              ioctl_cmd;
+
+    ioctl_cmd = RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR;
+    ioctl_data.disc = ioctl_cmd;
+    server_info_ptr = &ioctl_data.rpc_loc_ioctl_data_u_type_u.server_addr;
+    server_info_ptr->addr_type = RPC_LOC_SERVER_ADDR_URL;
+    server_info_ptr->addr_info.disc = server_info_ptr->addr_type;
+    server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.length = len;
+#if (AMSS_VERSION==3200)
+    server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr.addr_val = (char*) url;
+    server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr.addr_len= len;
+#else
+    strlcpy(server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr, url,
+            sizeof server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr);
+#endif /* #if (AMSS_VERSION==3200) */
+    LOC_LOGD ("loc_eng_set_server, addr = %s\n", url);
+
+    return convertErr(
+        loc_eng_ioctl (client_handle,
+                       ioctl_cmd,
+                       &ioctl_data,
+                       LOC_IOCTL_DEFAULT_TIMEOUT,
+                       NULL /* No output information is expected*/)
+        );
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::setServer(unsigned int ip, int port, LocServerType type)
+{
+    rpc_loc_ioctl_data_u_type         ioctl_data;
+    rpc_loc_server_info_s_type       *server_info_ptr;
+    rpc_loc_ioctl_e_type              ioctl_cmd;
+
+    switch (type) {
+    case LOC_AGPS_MPC_SERVER:
+        ioctl_cmd = RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR;
+        break;
+    case LOC_AGPS_CUSTOM_PDE_SERVER:
+        ioctl_cmd = RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR;
+        break;
+    default:
+        ioctl_cmd = RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR;
+        break;
+    }
+    ioctl_data.disc = ioctl_cmd;
+    server_info_ptr = &ioctl_data.rpc_loc_ioctl_data_u_type_u.server_addr;
+    server_info_ptr->addr_type = RPC_LOC_SERVER_ADDR_IPV4;
+    server_info_ptr->addr_info.disc = server_info_ptr->addr_type;
+    server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.ipv4.addr = ip;
+    server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.ipv4.port = port;
+    LOC_LOGD ("setServer, addr = %X:%d\n", (unsigned int) ip, (unsigned int) port);
+
+    return convertErr(
+        loc_eng_ioctl (client_handle,
+                       ioctl_cmd,
+                       &ioctl_data,
+                       LOC_IOCTL_DEFAULT_TIMEOUT,
+                       NULL /* No output information is expected*/)
+        );
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::enableData(int enable)
+{
+    rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_SET_DATA_ENABLE, {0}};
+
+    ioctl_data.rpc_loc_ioctl_data_u_type_u.data_enable = enable;
+    return convertErr(
+        loc_eng_ioctl (client_handle,
+                       RPC_LOC_IOCTL_SET_DATA_ENABLE,
+                       &ioctl_data,
+                       LOC_IOCTL_DEFAULT_TIMEOUT,
+                       NULL)
+        );
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::deleteAidingData(GpsAidingData bits)
+{
+    rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_DELETE_ASSIST_DATA, {0}};
+    ioctl_data.rpc_loc_ioctl_data_u_type_u.assist_data_delete.type = bits;
+
+    return convertErr(
+        loc_eng_ioctl (client_handle,
+                       RPC_LOC_IOCTL_DELETE_ASSIST_DATA,
+                       &ioctl_data,
+                       LOC_IOCTL_DEFAULT_TIMEOUT,
+                       NULL)
+        );
+}
+
+void LocApiRpcAdapter::reportPosition(const rpc_loc_parsed_position_s_type *location_report_ptr)
+{
+    GpsLocation location = {0};
+
+    location.size = sizeof(location);
+    if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_SESSION_STATUS)
+    {
+        // Process the position from final and intermediate reports
+        if (location_report_ptr->session_status == RPC_LOC_SESS_STATUS_SUCCESS ||
+            location_report_ptr->session_status == RPC_LOC_SESS_STATUS_IN_PROGESS)
+        {
+            // Latitude & Longitude
+            if ((location_report_ptr->valid_mask & RPC_LOC_POS_VALID_LATITUDE) &&
+                (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_LONGITUDE) &&
+                (location_report_ptr->latitude != 0 ||
+                 location_report_ptr->longitude != 0))
+            {
+                location.flags    |= GPS_LOCATION_HAS_LAT_LONG;
+                location.latitude  = location_report_ptr->latitude;
+                location.longitude = location_report_ptr->longitude;
+
+                // Time stamp (UTC)
+                if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_TIMESTAMP_UTC)
+                {
+                    location.timestamp = location_report_ptr->timestamp_utc;
+                }
+
+                // Altitude
+                if (location_report_ptr->valid_mask &  RPC_LOC_POS_VALID_ALTITUDE_WRT_ELLIPSOID )
+                {
+                    location.flags    |= GPS_LOCATION_HAS_ALTITUDE;
+                    location.altitude = location_report_ptr->altitude_wrt_ellipsoid;
+                }
+
+                // Speed
+                if ((location_report_ptr->valid_mask & RPC_LOC_POS_VALID_SPEED_HORIZONTAL) &&
+                    (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_SPEED_VERTICAL))
+                {
+                    location.flags    |= GPS_LOCATION_HAS_SPEED;
+                    location.speed = sqrt(location_report_ptr->speed_horizontal * location_report_ptr->speed_horizontal +
+                                          location_report_ptr->speed_vertical * location_report_ptr->speed_vertical);
+                }
+
+                // Heading
+                if (location_report_ptr->valid_mask &  RPC_LOC_POS_VALID_HEADING)
+                {
+                    location.flags    |= GPS_LOCATION_HAS_BEARING;
+                    location.bearing = location_report_ptr->heading;
+                }
+
+                // Uncertainty (circular)
+                if ( (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_HOR_UNC_CIRCULAR) )
+                {
+                    location.flags    |= GPS_LOCATION_HAS_ACCURACY;
+                    location.accuracy = location_report_ptr->hor_unc_circular;
+                }
+
+                LOC_LOGV("reportPosition: fire callback\n");
+                LocApiAdapter::reportPosition(location,
+                                              locEngHandle.extPosInfo((void*)location_report_ptr),
+                                              (location_report_ptr->session_status == RPC_LOC_SESS_STATUS_IN_PROGESS ?
+                                               LOC_SESS_INTERMEDIATE : LOC_SESS_SUCCESS));
+            }
+        }
+        else
+        {
+            LocApiAdapter::reportPosition(location,
+                                          NULL,
+                                          LOC_SESS_FAILURE);
+            LOC_LOGV("loc_eng_report_position: ignore position report when session status = %d\n", location_report_ptr->session_status);
+        }
+    }
+    else
+    {
+        LOC_LOGV("loc_eng_report_position: ignore position report when session status is not set\n");
+    }
+}
+
+void LocApiRpcAdapter::reportSv(const rpc_loc_gnss_info_s_type *gnss_report_ptr)
+{
+    GpsSvStatus     SvStatus = {0};
+    int             num_svs_max = 0;
+    const rpc_loc_sv_info_s_type *sv_info_ptr;
+
+    if (gnss_report_ptr->valid_mask & RPC_LOC_GNSS_INFO_VALID_SV_COUNT)
+    {
+        num_svs_max = gnss_report_ptr->sv_count;
+        if (num_svs_max > GPS_MAX_SVS)
+        {
+            num_svs_max = GPS_MAX_SVS;
+        }
+    }
+
+    if (gnss_report_ptr->valid_mask & RPC_LOC_GNSS_INFO_VALID_SV_LIST)
+    {
+        SvStatus.num_svs = 0;
+
+        for (int i = 0; i < num_svs_max; i++)
+        {
+            sv_info_ptr = &(gnss_report_ptr->sv_list.sv_list_val[i]);
+            if (sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_SYSTEM)
+            {
+                if (sv_info_ptr->system == RPC_LOC_SV_SYSTEM_GPS)
+                {
+                    SvStatus.sv_list[SvStatus.num_svs].size = sizeof(GpsSvStatus);
+                    SvStatus.sv_list[SvStatus.num_svs].prn = sv_info_ptr->prn;
+
+                    // We only have the data field to report gps eph and alm mask
+                    if ((sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_HAS_EPH) &&
+                        (sv_info_ptr->has_eph == 1))
+                    {
+                        SvStatus.ephemeris_mask |= (1 << (sv_info_ptr->prn-1));
+                    }
+
+                    if ((sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_HAS_ALM) &&
+                        (sv_info_ptr->has_alm == 1))
+                    {
+                        SvStatus.almanac_mask |= (1 << (sv_info_ptr->prn-1));
+                    }
+
+                    if ((sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_PROCESS_STATUS) &&
+                        (sv_info_ptr->process_status == RPC_LOC_SV_STATUS_TRACK))
+                    {
+                        SvStatus.used_in_fix_mask |= (1 << (sv_info_ptr->prn-1));
+                    }
+                }
+                // SBAS: GPS RPN: 120-151,
+                // In exteneded measurement report, we follow nmea standard, which is from 33-64.
+                else if (sv_info_ptr->system == RPC_LOC_SV_SYSTEM_SBAS)
+                {
+                    SvStatus.sv_list[SvStatus.num_svs].prn = sv_info_ptr->prn + 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 == RPC_LOC_SV_SYSTEM_GLONASS)
+                {
+                    SvStatus.sv_list[SvStatus.num_svs].prn = sv_info_ptr->prn + (65-1);
+                }
+                // Unsupported SV system
+                else
+                {
+                    continue;
+                }
+            }
+
+            if (sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_SNR)
+            {
+                SvStatus.sv_list[SvStatus.num_svs].snr = sv_info_ptr->snr;
+            }
+
+            if (sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_ELEVATION)
+            {
+                SvStatus.sv_list[SvStatus.num_svs].elevation = sv_info_ptr->elevation;
+            }
+
+            if (sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_AZIMUTH)
+            {
+                SvStatus.sv_list[SvStatus.num_svs].azimuth = sv_info_ptr->azimuth;
+            }
+
+            SvStatus.num_svs++;
+        }
+    }
+
+    if (SvStatus.num_svs >= 0)
+    {
+        LocApiAdapter::reportSv(SvStatus,
+                                locEngHandle.extSvInfo((void*)gnss_report_ptr));
+    }
+}
+
+void LocApiRpcAdapter::reportStatus(const rpc_loc_status_event_s_type *status_report_ptr)
+{
+    GpsStatusValue status = GPS_STATUS_NONE;
+
+    if (status_report_ptr->event == RPC_LOC_STATUS_EVENT_ENGINE_STATE) {
+        if (status_report_ptr->payload.rpc_loc_status_event_payload_u_type_u.engine_state == RPC_LOC_ENGINE_STATE_ON)
+        {
+            status = GPS_STATUS_ENGINE_ON;
+        }
+        else if (status_report_ptr->payload.rpc_loc_status_event_payload_u_type_u.engine_state == RPC_LOC_ENGINE_STATE_OFF)
+        {
+            status = GPS_STATUS_ENGINE_OFF;
+        }
+    } else if (status_report_ptr->event == RPC_LOC_STATUS_EVENT_FIX_SESSION_STATE) {
+        if (status_report_ptr->payload.rpc_loc_status_event_payload_u_type_u.fix_session_state == RPC_LOC_FIX_SESSION_STATE_BEGIN)
+        {
+            status = GPS_STATUS_SESSION_BEGIN;
+        }
+        else if (status_report_ptr->payload.rpc_loc_status_event_payload_u_type_u.fix_session_state == RPC_LOC_FIX_SESSION_STATE_END)
+        {
+            status = GPS_STATUS_SESSION_END;
+        }
+    }
+
+    LocApiAdapter::reportStatus(status);
+}
+
+void LocApiRpcAdapter::reportNmea(const rpc_loc_nmea_report_s_type *nmea_report_ptr)
+{
+
+#if (AMSS_VERSION==3200)
+    LocApiAdapter::reportNmea(nmea_report_ptr->nmea_sentences.nmea_sentences_val,
+                              nmea_report_ptr->nmea_sentences.nmea_sentences_len);
+#else
+    LocApiAdapter::reportNmea(nmea_report_ptr->nmea_sentences,
+                              nmea_report_ptr->length);
+    LOC_LOGD("loc_eng_report_nmea: $%c%c%c\n",
+             nmea_report_ptr->nmea_sentences[3], nmea_report_ptr->nmea_sentences[4],
+             nmea_report_ptr->nmea_sentences[5]);
+#endif /* #if (AMSS_VERSION==3200) */
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::setXtraData(char* data, int length)
+{
+    int     rpc_ret_val = RPC_LOC_API_GENERAL_FAILURE;
+    int     total_parts;
+    uint8   part;
+    uint16  part_len;
+    uint16  len_injected;
+    rpc_loc_ioctl_data_u_type            ioctl_data;
+    rpc_loc_ioctl_e_type                 ioctl_type = RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA;
+    rpc_loc_predicted_orbits_data_s_type *predicted_orbits_data_ptr;
+
+    LOC_LOGD("qct_loc_eng_inject_xtra_data, xtra size = %d, data ptr = 0x%lx\n", length, (long) data);
+
+    predicted_orbits_data_ptr = &ioctl_data.rpc_loc_ioctl_data_u_type_u.predicted_orbits_data;
+    predicted_orbits_data_ptr->format_type = RPC_LOC_PREDICTED_ORBITS_XTRA;
+    predicted_orbits_data_ptr->total_size = length;
+    total_parts = (length - 1) / XTRA_BLOCK_SIZE + 1;
+    predicted_orbits_data_ptr->total_parts = total_parts;
+
+    len_injected = 0; // O bytes injected
+    ioctl_data.disc = ioctl_type;
+
+    // XTRA injection starts with part 1
+    for (part = 1; part <= total_parts; part++)
+    {
+        predicted_orbits_data_ptr->part = part;
+        predicted_orbits_data_ptr->part_len = XTRA_BLOCK_SIZE;
+        if (XTRA_BLOCK_SIZE > (length - len_injected))
+        {
+            predicted_orbits_data_ptr->part_len = length - len_injected;
+        }
+        predicted_orbits_data_ptr->data_ptr.data_ptr_len = predicted_orbits_data_ptr->part_len;
+        predicted_orbits_data_ptr->data_ptr.data_ptr_val = data + len_injected;
+
+        LOC_LOGD("qct_loc_eng_inject_xtra_data, part %d/%d, len = %d, total = %d\n",
+                 predicted_orbits_data_ptr->part,
+                 total_parts,
+                 predicted_orbits_data_ptr->part_len,
+                 len_injected);
+
+        if (part < total_parts)
+        {
+            // No callback in this case
+            rpc_ret_val = loc_ioctl (client_handle,
+                                     ioctl_type,
+                                     &ioctl_data);
+
+            if (rpc_ret_val != RPC_LOC_API_SUCCESS)
+            {
+                LOC_LOGE("loc_ioctl for xtra error: %s\n", loc_get_ioctl_status_name(rpc_ret_val));
+                break;
+            }
+            //Add a delay of 10 ms so that repeated RPC calls dont starve the modem processor
+            usleep(10 * 1000);
+        }
+        else // part == total_parts
+        {
+            // Last part injection, will need to wait for callback
+            if (!loc_eng_ioctl(client_handle,
+                               ioctl_type,
+                               &ioctl_data,
+                               LOC_XTRA_INJECT_DEFAULT_TIMEOUT,
+                               NULL))
+            {
+                rpc_ret_val = RPC_LOC_API_GENERAL_FAILURE;
+            }
+            break; // done with injection
+        }
+
+        len_injected += predicted_orbits_data_ptr->part_len;
+        LOC_LOGD("loc_ioctl XTRA injected length: %d\n", len_injected);
+    }
+
+    return convertErr(rpc_ret_val);
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bearer, AGpsType agpsType)
+{
+    rpc_loc_server_open_status_e_type open_status = is_succ ? RPC_LOC_SERVER_OPEN_SUCCESS : RPC_LOC_SERVER_OPEN_FAIL;
+   rpc_loc_ioctl_data_u_type           ioctl_data;
+
+    if (AGPS_TYPE_INVALID == agpsType) {
+        rpc_loc_server_open_status_s_type  *conn_open_status_ptr =
+            &ioctl_data.rpc_loc_ioctl_data_u_type_u.conn_open_status;
+
+        // Fill in data
+        ioctl_data.disc = RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS;
+        conn_open_status_ptr->conn_handle = handle;
+        conn_open_status_ptr->open_status = open_status;
+#if (AMSS_VERSION==3200)
+        conn_open_status_ptr->apn_name = apn; /* requires APN */
+#else
+        if (is_succ) {
+            strlcpy(conn_open_status_ptr->apn_name, apn,
+                    sizeof conn_open_status_ptr->apn_name);
+        } else {
+            conn_open_status_ptr->apn_name[0] = 0;
+        }
+#endif /* #if (AMSS_VERSION==3200) */
+
+        LOC_LOGD("ATL RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS open %s, APN name = [%s]\n",
+                 log_succ_fail_string(is_succ),
+                 apn);
+    } else {
+        rpc_loc_server_multi_open_status_s_type  *conn_multi_open_status_ptr =
+            &ioctl_data.rpc_loc_ioctl_data_u_type_u.multi_conn_open_status;
+
+        // Fill in data
+        ioctl_data.disc = RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS;
+        conn_multi_open_status_ptr->conn_handle = handle;
+        conn_multi_open_status_ptr->open_status = open_status;
+        if (is_succ) {
+            strlcpy(conn_multi_open_status_ptr->apn_name, apn,
+                    sizeof conn_multi_open_status_ptr->apn_name);
+        } else {
+            conn_multi_open_status_ptr->apn_name[0] = 0;
+        }
+
+        switch(bearer)
+        {
+        case AGPS_APN_BEARER_IPV4:
+            conn_multi_open_status_ptr->pdp_type = RPC_LOC_SERVER_PDP_IP;
+            break;
+        case AGPS_APN_BEARER_IPV6:
+            conn_multi_open_status_ptr->pdp_type = RPC_LOC_SERVER_PDP_IPV6;
+            break;
+        case AGPS_APN_BEARER_IPV4V6:
+            conn_multi_open_status_ptr->pdp_type = RPC_LOC_SERVER_PDP_IPV4V6;
+            break;
+        default:
+            conn_multi_open_status_ptr->pdp_type = RPC_LOC_SERVER_PDP_PPP;
+        }
+
+        LOC_LOGD("ATL RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS open %s, APN name = [%s], pdp_type = %d\n",
+                 log_succ_fail_string(is_succ),
+                 apn,
+                 conn_multi_open_status_ptr->pdp_type);
+    }
+
+    // Make the IOCTL call
+    return convertErr(
+        loc_eng_ioctl(client_handle,
+                      ioctl_data.disc,
+                      &ioctl_data,
+                      LOC_IOCTL_DEFAULT_TIMEOUT,
+                      NULL)
+        );
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::atlCloseStatus(int handle, int is_succ)
+{
+    rpc_loc_ioctl_data_u_type           ioctl_data;
+    ioctl_data.disc = RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS;
+
+    rpc_loc_server_close_status_s_type *conn_close_status_ptr =
+        &ioctl_data.rpc_loc_ioctl_data_u_type_u.conn_close_status;
+    conn_close_status_ptr->conn_handle = handle;
+    conn_close_status_ptr->close_status = is_succ ? RPC_LOC_SERVER_CLOSE_SUCCESS : RPC_LOC_SERVER_CLOSE_FAIL;
+
+    // Make the IOCTL call
+    return convertErr(
+        loc_eng_ioctl(client_handle,
+                      ioctl_data.disc,
+                      &ioctl_data,
+                      LOC_IOCTL_DEFAULT_TIMEOUT,
+                      NULL)
+        );
+}
+
+void LocApiRpcAdapter::ATLEvent(const rpc_loc_server_request_s_type *server_request_ptr)
+{
+    int connHandle;
+    AGpsType agps_type;
+
+    LOC_LOGV("RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST event %s)",
+             loc_get_event_atl_open_name(server_request_ptr->event));
+    switch (server_request_ptr->event)
+    {
+    case RPC_LOC_SERVER_REQUEST_MULTI_OPEN:
+        connHandle = server_request_ptr->payload.rpc_loc_server_request_u_type_u.multi_open_req.conn_handle;
+        if (server_request_ptr->payload.rpc_loc_server_request_u_type_u.multi_open_req.connection_type
+            == RPC_LOC_SERVER_CONNECTION_LBS) {
+            agps_type = AGPS_TYPE_SUPL;
+            LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_MULTI_OPEN\n            type - AGPS_TYPE_SUPL\n            handle - %d", connHandle);
+        } else {
+            agps_type = AGPS_TYPE_WWAN_ANY;
+            LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_MULTI_OPEN\n            type - AGPS_TYPE_WWAN_ANY\n            handle - %d", connHandle);
+        }
+        requestATL(connHandle, agps_type);
+        break;
+    case RPC_LOC_SERVER_REQUEST_OPEN:
+        connHandle = server_request_ptr->payload.rpc_loc_server_request_u_type_u.open_req.conn_handle;
+        LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_OPEN\n            handle - %d", connHandle);
+        requestATL(connHandle, AGPS_TYPE_INVALID);
+        break;
+    case RPC_LOC_SERVER_REQUEST_CLOSE:
+        connHandle = server_request_ptr->payload.rpc_loc_server_request_u_type_u.close_req.conn_handle;
+        LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_CLOSE\n            handle - %d", connHandle);
+        releaseATL(connHandle);
+        break;
+    default:
+        LOC_LOGE("ATLEvent: event type %d invalid", server_request_ptr->event);
+   }
+}
+
+void LocApiRpcAdapter::NIEvent(const rpc_loc_ni_event_s_type *ni_req)
+{
+    GpsNiNotification notif = {0};
+
+    switch (ni_req->event)
+    {
+    case RPC_LOC_NI_EVENT_VX_NOTIFY_VERIFY_REQ:
+    {
+        const rpc_loc_ni_vx_notify_verify_req_s_type *vx_req =
+            &ni_req->payload.rpc_loc_ni_event_payload_u_type_u.vx_req;
+        LOC_LOGI("VX Notification");
+        notif.ni_type = GPS_NI_TYPE_VOICE;
+        // Requestor ID
+        hexcode(notif.requestor_id, sizeof notif.requestor_id,
+                vx_req->requester_id.requester_id,
+                vx_req->requester_id.requester_id_length);
+        notif.text_encoding = 0; // No text and no encoding
+        notif.requestor_id_encoding = convertNiEncodingType(vx_req->encoding_scheme);
+        NIEventFillVerfiyType(notif, vx_req->notification_priv_type);
+    }
+        break;
+
+    case RPC_LOC_NI_EVENT_UMTS_CP_NOTIFY_VERIFY_REQ:
+    {
+        const rpc_loc_ni_umts_cp_notify_verify_req_s_type *umts_cp_req =
+            &ni_req->payload.rpc_loc_ni_event_payload_u_type_u.umts_cp_req;
+        LOC_LOGI("UMTS CP Notification\n");
+        notif.ni_type= GPS_NI_TYPE_UMTS_CTRL_PLANE;         // Stores notification text
+#if (AMSS_VERSION==3200)
+        hexcode(notif.text, sizeof notif.text,
+                umts_cp_req->notification_text.notification_text_val,
+                umts_cp_req->notification_length);
+        hexcode(notif.requestor_id, sizeof notif.requestor_id,
+                umts_cp_req->requestor_id.requestor_id_string.requestor_id_string_val,
+                umts_cp_req->requestor_id.string_len);
+#else
+        hexcode(notif.text, sizeof notif.text,
+                umts_cp_req->notification_text,
+                umts_cp_req->notification_length);
+        hexcode(notif.requestor_id, sizeof notif.requestor_id,
+                umts_cp_req->requestor_id.requestor_id_string,
+                umts_cp_req->requestor_id.string_len);
+#endif
+        notif.text_encoding = convertNiEncodingType(umts_cp_req->datacoding_scheme);
+        notif.requestor_id_encoding = notif.text_encoding;
+        NIEventFillVerfiyType(notif, umts_cp_req->notification_priv_type);
+
+        // LCS address (using extras field)
+        if (umts_cp_req->ext_client_address_data.ext_client_address_len != 0)
+        {
+            // 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;
+
+#if (AMSS_VERSION==3200)
+            address_source = umts_cp_req->ext_client_address_data.ext_client_address.ext_client_address_val;
+#else
+            address_source = umts_cp_req->ext_client_address_data.ext_client_address;
+#endif /* #if (AMSS_VERSION==3200) */
+
+            char lcs_addr[32]; // Decoded LCS address for UMTS CP NI
+            addr_len = LocApiAdapter::decodeAddress(lcs_addr, sizeof lcs_addr, address_source,
+                                                    umts_cp_req->ext_client_address_data.ext_client_address_len);
+
+            // The address is ASCII string
+            if (addr_len)
+            {
+                strlcat(notif.extras, lcs_addr, sizeof notif.extras);
+            }
+        }
+    }
+        break;
+
+    case RPC_LOC_NI_EVENT_SUPL_NOTIFY_VERIFY_REQ:
+    {
+        const rpc_loc_ni_supl_notify_verify_req_s_type *supl_req =
+            &ni_req->payload.rpc_loc_ni_event_payload_u_type_u.supl_req;
+        LOC_LOGI("SUPL Notification\n");
+        notif.ni_type = GPS_NI_TYPE_UMTS_SUPL;
+
+        if (supl_req->flags & RPC_LOC_NI_CLIENT_NAME_PRESENT)
+        {
+#if (AMSS_VERSION==3200)
+            hexcode(notif.text, sizeof notif.text,
+                    supl_req->client_name.client_name_string.client_name_string_val,   /* buffer */
+                    supl_req->client_name.string_len                                   /* length */
+            );
+#else
+            hexcode(notif.text, sizeof notif.text,
+                            supl_req->client_name.client_name_string,   /* buffer */
+                            supl_req->client_name.string_len            /* length */
+            );
+#endif /* #if (AMSS_VERSION==3200) */
+            LOC_LOGV("SUPL NI: client_name: %s len=%d", notif.text, supl_req->client_name.string_len);
+        }
+        else {
+            LOC_LOGV("SUPL NI: client_name not present.");
+        }
+
+        // Requestor ID
+        if (supl_req->flags & RPC_LOC_NI_REQUESTOR_ID_PRESENT)
+        {
+#if (AMSS_VERSION==3200)
+            hexcode(notif.requestor_id, sizeof notif.requestor_id,
+                    supl_req->requestor_id.requestor_id_string.requestor_id_string_val,  /* buffer */
+                    supl_req->requestor_id.string_len                                    /* length */
+                );
+#else
+            hexcode(notif.requestor_id, sizeof notif.requestor_id,
+                    supl_req->requestor_id.requestor_id_string,  /* buffer */
+                    supl_req->requestor_id.string_len            /* length */
+                );
+#endif /* #if (AMSS_VERSION==3200) */
+            LOC_LOGV("SUPL NI: requestor_id: %s len=%d", notif.requestor_id, supl_req->requestor_id.string_len);
+        }
+        else {
+            LOC_LOGV("SUPL NI: requestor_id not present.");
+        }
+
+        // Encoding type
+        if (supl_req->flags & RPC_LOC_NI_ENCODING_TYPE_PRESENT)
+        {
+            notif.text_encoding = convertNiEncodingType(supl_req->datacoding_scheme);
+            notif.requestor_id_encoding = notif.text_encoding;
+        }
+        else {
+            notif.text_encoding = notif.requestor_id_encoding = GPS_ENC_UNKNOWN;
+        }
+
+        NIEventFillVerfiyType(notif, ni_req->payload.rpc_loc_ni_event_payload_u_type_u.supl_req.notification_priv_type);
+    }
+        break;
+
+    default:
+        LOC_LOGE("Unknown NI event: %x\n", (int) ni_req->event);
+        return;
+    }
+
+    // this copy will get freed in loc_eng_ni when loc_ni_respond() is called
+    rpc_loc_ni_event_s_type *copy = (rpc_loc_ni_event_s_type *)malloc(sizeof(*copy));
+    memcpy(copy, ni_req, sizeof(*copy));
+    LocApiAdapter::requestNiNotify(notif, (const void*)copy);
+}
+
+int LocApiRpcAdapter::NIEventFillVerfiyType(GpsNiNotification &notif,
+                                rpc_loc_ni_notify_verify_e_type notif_priv)
+{
+   switch (notif_priv)
+   {
+   case RPC_LOC_NI_USER_NO_NOTIFY_NO_VERIFY:
+       notif.notify_flags = 0;
+       notif.default_response = GPS_NI_RESPONSE_NORESP;
+       return 1;
+   case RPC_LOC_NI_USER_NOTIFY_ONLY:
+       notif.notify_flags = GPS_NI_NEED_NOTIFY;
+       notif.default_response = GPS_NI_RESPONSE_NORESP;
+       return 1;
+   case RPC_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP:
+       notif.notify_flags = GPS_NI_NEED_NOTIFY | GPS_NI_NEED_VERIFY;
+       notif.default_response = GPS_NI_RESPONSE_ACCEPT;
+       return 1;
+   case RPC_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP:
+       notif.notify_flags = GPS_NI_NEED_NOTIFY | GPS_NI_NEED_VERIFY;
+       notif.default_response = GPS_NI_RESPONSE_DENY;
+       return 1;
+   case RPC_LOC_NI_USER_PRIVACY_OVERRIDE:
+       notif.notify_flags = GPS_NI_PRIVACY_OVERRIDE;
+       notif.default_response = GPS_NI_RESPONSE_NORESP;
+       return 1;
+   default:
+      return 0;
+   }
+}
+
+enum loc_api_adapter_err
+LocApiRpcAdapter::setSUPLVersion(uint32_t version)
+{
+   rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_SET_SUPL_VERSION, {0}};
+   ioctl_data.rpc_loc_ioctl_data_u_type_u.supl_version = (int)version;
+   return convertErr(
+       loc_eng_ioctl (client_handle,
+                      RPC_LOC_IOCTL_SET_SUPL_VERSION,
+                      &ioctl_data,
+                      LOC_IOCTL_DEFAULT_TIMEOUT,
+                      NULL)
+       );
+}
+
+GpsNiEncodingType LocApiRpcAdapter::convertNiEncodingType(int loc_encoding)
+{
+   switch (loc_encoding)
+   {
+   case RPC_LOC_NI_SUPL_UTF8:
+       return GPS_ENC_SUPL_UTF8;
+   case RPC_LOC_NI_SUPL_UCS2:
+       return GPS_ENC_SUPL_UCS2;
+   case RPC_LOC_NI_SUPL_GSM_DEFAULT:
+      return GPS_ENC_SUPL_GSM_DEFAULT;
+   case RPC_LOC_NI_SS_LANGUAGE_UNSPEC:
+      return GPS_ENC_SUPL_GSM_DEFAULT; // SS_LANGUAGE_UNSPEC = GSM
+   default:
+       return GPS_ENC_UNKNOWN;
+   }
+}
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_fixup.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_fixup.c
new file mode 100755
index 0000000..32e3cda
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_fixup.c
@@ -0,0 +1,52 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#include <rpc/rpc.h>
+
+#include "loc_api_fixup.h"
+
+#ifdef ADD_XDR_FLOAT
+
+int
+xdr_float(xdrp, fp)
+        XDR *xdrp;
+        float *fp;
+{
+        return xdr_long(xdrp, (long*)fp);
+}
+
+int
+xdr_double(xdrp, dp)
+        XDR *xdrp;
+        double *dp;
+{
+                return xdr_long(xdrp, (long*)dp + 1)
+                                && xdr_long(xdrp, (long*)dp);
+}
+
+#endif /* ADD_XDR_FLOAT */
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c
new file mode 100755
index 0000000..6aa5254
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c
@@ -0,0 +1,344 @@
+/* Copyright (c) 2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
+#define LOG_TAG "LocSvc_api_rpc_glue"
+
+#include "loc_api_log.h"
+#include "loc_log.h"
+#include "log_util.h"
+#include "rpc/rpc.h"
+#include "loc_api_fixup.h"
+
+/* Event names */
+loc_name_val_s_type loc_event_name[] =
+   {
+      NAME_VAL( RPC_LOC_EVENT_PARSED_POSITION_REPORT ),
+      NAME_VAL( RPC_LOC_EVENT_SATELLITE_REPORT ),
+      NAME_VAL( RPC_LOC_EVENT_NMEA_1HZ_REPORT ),
+      NAME_VAL( RPC_LOC_EVENT_NMEA_POSITION_REPORT ),
+      NAME_VAL( RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST ),
+      NAME_VAL( RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST ),
+      NAME_VAL( RPC_LOC_EVENT_LOCATION_SERVER_REQUEST ),
+      NAME_VAL( RPC_LOC_EVENT_IOCTL_REPORT ),
+      NAME_VAL( RPC_LOC_EVENT_STATUS_REPORT ),
+      NAME_VAL( RPC_LOC_EVENT_WPS_NEEDED_REQUEST ),
+   };
+int loc_event_num = sizeof loc_event_name / sizeof(loc_name_val_s_type);
+
+/* Event names */
+loc_name_val_s_type loc_event_atl_open_name[] =
+   {
+      NAME_VAL( RPC_LOC_SERVER_REQUEST_OPEN ),
+      NAME_VAL( RPC_LOC_SERVER_REQUEST_CLOSE ),
+      NAME_VAL( RPC_LOC_SERVER_REQUEST_MULTI_OPEN )
+   };
+int loc_event_atl_open_num = sizeof loc_event_atl_open_name / sizeof(loc_name_val_s_type);
+
+/* Finds the first event found in the mask */
+const char* loc_get_event_atl_open_name(rpc_loc_server_request_e_type loc_event_atl_open)
+{
+   return loc_get_name_from_val(loc_event_atl_open_name, loc_event_atl_open_num,
+         (long) loc_event_atl_open);
+}
+
+/* IOCTL Type names */
+loc_name_val_s_type loc_ioctl_type_name[] =
+   {
+      NAME_VAL( RPC_LOC_IOCTL_GET_API_VERSION ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_FIX_CRITERIA ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_FIX_CRITERIA ),
+      NAME_VAL( RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE ),
+      NAME_VAL( RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA ),
+      NAME_VAL( RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_VALIDITY ),
+      NAME_VAL( RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_PREDICTED_ORBITS_DATA_AUTO_DOWNLOAD ),
+      NAME_VAL( RPC_LOC_IOCTL_INJECT_UTC_TIME ),
+      NAME_VAL( RPC_LOC_IOCTL_INJECT_RTC_VALUE ),
+      NAME_VAL( RPC_LOC_IOCTL_INJECT_POSITION ),
+      NAME_VAL( RPC_LOC_IOCTL_QUERY_ENGINE_STATE ),
+      NAME_VAL( RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG),
+      NAME_VAL( RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS ),
+      NAME_VAL( RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS ),
+      NAME_VAL( RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS ),
+      NAME_VAL( RPC_LOC_IOCTL_SEND_WIPER_POSITION_REPORT ),
+      NAME_VAL( RPC_LOC_IOCTL_NOTIFY_WIPER_STATUS ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_ENGINE_LOCK ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_ENGINE_LOCK ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_SBAS_CONFIG ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_SBAS_CONFIG ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_NMEA_TYPES ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_NMEA_TYPES ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_CDMA_PDE_SERVER_ADDR ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_CDMA_MPC_SERVER_ADDR ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_UMTS_SLP_SERVER_ADDR ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_ON_DEMAND_LPM ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_ON_DEMAND_LPM ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_LBS_APN_PROFILE ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_LBS_APN_PROFILE ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_DATA_ENABLE ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_SUPL_VERSION ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_SUPL_VERSION ),
+      NAME_VAL( RPC_LOC_IOCTL_DELETE_ASSIST_DATA ),
+      NAME_VAL( RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR ),
+      NAME_VAL( RPC_LOC_IOCTL_GET_CUSTOM_PDE_SERVER_ADDR ),
+   };
+int loc_ioctl_type_num = sizeof loc_ioctl_type_name / sizeof(loc_name_val_s_type);
+
+/* IOCTL Status names */
+loc_name_val_s_type loc_ioctl_status_name[] =
+   {
+      NAME_VAL( RPC_LOC_API_SUCCESS ),
+      NAME_VAL( RPC_LOC_API_GENERAL_FAILURE ),
+      NAME_VAL( RPC_LOC_API_UNSUPPORTED ),
+      NAME_VAL( RPC_LOC_API_INVALID_HANDLE ),
+      NAME_VAL( RPC_LOC_API_INVALID_PARAMETER ),
+      NAME_VAL( RPC_LOC_API_ENGINE_BUSY ),
+      NAME_VAL( RPC_LOC_API_PHONE_OFFLINE ),
+      NAME_VAL( RPC_LOC_API_TIMEOUT ),
+      NAME_VAL( RPC_LOC_API_RPC_FAILURE ),
+      NAME_VAL( RPC_LOC_API_RPC_MODEM_RESTART )
+   };
+int loc_ioctl_status_num = sizeof loc_ioctl_status_name / sizeof(loc_name_val_s_type);
+
+/* Fix session status names */
+loc_name_val_s_type loc_sess_status_name[] =
+   {
+      NAME_VAL( RPC_LOC_SESS_STATUS_SUCCESS ),
+      NAME_VAL( RPC_LOC_SESS_STATUS_IN_PROGESS ),
+      NAME_VAL( RPC_LOC_SESS_STATUS_GENERAL_FAILURE ),
+      NAME_VAL( RPC_LOC_SESS_STATUS_TIMEOUT ),
+      NAME_VAL( RPC_LOC_SESS_STATUS_USER_END ),
+      NAME_VAL( RPC_LOC_SESS_STATUS_BAD_PARAMETER ),
+      NAME_VAL( RPC_LOC_SESS_STATUS_PHONE_OFFLINE ),
+      NAME_VAL( RPC_LOC_SESS_STATUS_USER_END ),
+      NAME_VAL( RPC_LOC_SESS_STATUS_ENGINE_LOCKED )
+   };
+int loc_sess_status_num = sizeof loc_sess_status_name / sizeof(loc_name_val_s_type);
+
+/* Engine state names */
+loc_name_val_s_type loc_engine_state_name[] =
+   {
+      NAME_VAL( RPC_LOC_ENGINE_STATE_ON ),
+      NAME_VAL( RPC_LOC_ENGINE_STATE_OFF )
+   };
+int loc_engine_state_num = sizeof loc_engine_state_name / sizeof(loc_name_val_s_type);
+
+/* Fix session state names */
+loc_name_val_s_type loc_fix_session_state_name[] =
+   {
+      NAME_VAL( RPC_LOC_FIX_SESSION_STATE_BEGIN ),
+      NAME_VAL( RPC_LOC_FIX_SESSION_STATE_END )
+   };
+int loc_fix_session_state_num = sizeof loc_fix_session_state_name / sizeof(loc_name_val_s_type);
+
+
+static const char* log_final_interm_string(int is_final)
+{
+   return is_final ? "final" : "intermediate";
+}
+
+/* Logs parsed report */
+static void log_parsed_report(const rpc_loc_parsed_position_s_type *parsed_report)
+{
+   rpc_loc_session_status_e_type status = parsed_report->session_status;
+   LOC_LOGD("Session status: %s   Valid mask: 0x%X\n",
+         loc_get_sess_status_name(status),
+         (uint) parsed_report->valid_mask);
+   LOC_LOGD("Latitude:  %.7f (%s)\n", parsed_report->latitude,
+         log_final_interm_string(
+               (parsed_report->valid_mask & RPC_LOC_POS_VALID_LATITUDE) &&
+               parsed_report->session_status == RPC_LOC_SESS_STATUS_SUCCESS));
+   LOC_LOGD("Longitude: %.7f\n", parsed_report->longitude);
+   LOC_LOGD("Accuracy: %.7f\n", parsed_report->hor_unc_circular);
+}
+
+/* Logs status report */
+static void log_status_report(const rpc_loc_status_event_s_type *status_event)
+{
+   rpc_loc_status_event_e_type event = status_event->event;
+   switch (event) {
+   case RPC_LOC_STATUS_EVENT_ENGINE_STATE:
+      LOC_LOGD("Engine state: %s\n",
+            loc_get_engine_state_name(
+                  status_event->payload.rpc_loc_status_event_payload_u_type_u.engine_state));
+      break;
+   case RPC_LOC_STATUS_EVENT_FIX_SESSION_STATE:
+      LOC_LOGD("Fix session state: %s\n",
+            loc_get_fix_session_state_name(
+                  status_event->payload.rpc_loc_status_event_payload_u_type_u.fix_session_state));
+      break;
+   default:
+      break;
+   }
+}
+
+/* Logs valid fields in the GNSS SV constellation report */
+static void log_satellite_report(const rpc_loc_gnss_info_s_type *gnss)
+{
+   if (gnss->valid_mask & RPC_LOC_GNSS_INFO_VALID_POS_DOP)
+   {
+      LOC_LOGV("position dop: %.3f\n", (float) gnss->position_dop);
+   }
+   if (gnss->valid_mask & RPC_LOC_GNSS_INFO_VALID_HOR_DOP)
+   {
+      LOC_LOGV("horizontal dop: %.3f\n", (float) gnss->horizontal_dop);
+   }
+   if (gnss->valid_mask & RPC_LOC_GNSS_INFO_VALID_VERT_DOP)
+   {
+      LOC_LOGV("vertical dop: %.3f\n", (float) gnss->vertical_dop);
+   }
+   if (gnss->valid_mask & RPC_LOC_GNSS_INFO_VALID_ALTITUDE_ASSUMED)
+   {
+      LOC_LOGV("altitude assumed: %d\n", (int) gnss->altitude_assumed);
+   }
+   if (gnss->valid_mask & RPC_LOC_GNSS_INFO_VALID_SV_COUNT)
+   {
+      LOC_LOGD("sv count: %d\n", (int) gnss->sv_count);
+   }
+   if (gnss->valid_mask & RPC_LOC_GNSS_INFO_VALID_SV_LIST)
+   {
+      LOC_LOGV("sv list: ");
+
+      if (gnss->sv_count)
+      {
+         LOC_LOGV("\n\tsys\tprn\thlth\tproc\teph\talm\telev\tazi\tsnr\n");
+      }
+      else {
+         LOC_LOGV("empty\n");
+      }
+
+      int i;
+      for (i = 0; i < gnss->sv_count; i++)
+      {
+         const rpc_loc_sv_info_s_type *sv = &gnss->sv_list.sv_list_val[i];
+         rpc_loc_sv_info_valid_mask_type mask = sv->valid_mask;
+         LOC_LOGV("  %d: \t%d\t%d\t%d\t%d\t%d\t%d\t%.3f\t%.3f\t%.3f\n", i,
+               CHECK_MASK(int,   sv->system,         mask, RPC_LOC_SV_INFO_VALID_SYSTEM),
+               CHECK_MASK(int,   sv->prn,            mask, RPC_LOC_SV_INFO_VALID_PRN),
+               CHECK_MASK(int,   sv->health_status,  mask, RPC_LOC_SV_INFO_VALID_HEALTH_STATUS),
+               CHECK_MASK(int,   sv->process_status, mask, RPC_LOC_SV_INFO_VALID_PROCESS_STATUS),
+               CHECK_MASK(int,   sv->has_eph,        mask, RPC_LOC_SV_INFO_VALID_HAS_EPH),
+               CHECK_MASK(int,   sv->has_alm,        mask, RPC_LOC_SV_INFO_VALID_HAS_ALM),
+               CHECK_MASK(float, sv->elevation,      mask, RPC_LOC_SV_INFO_VALID_ELEVATION),
+               CHECK_MASK(float, sv->azimuth,        mask, RPC_LOC_SV_INFO_VALID_AZIMUTH),
+               CHECK_MASK(float, sv->snr,            mask, RPC_LOC_SV_INFO_VALID_SNR)
+         );
+      }
+   }
+}
+
+/* Logs a callback event */
+int loc_callback_log(
+      rpc_loc_event_mask_type               loc_event,              /* event mask           */
+      const rpc_loc_event_payload_u_type*   loc_event_payload       /* payload              */
+)
+{
+   switch (loc_event)
+   {
+   case RPC_LOC_EVENT_SATELLITE_REPORT:
+      log_satellite_report(&loc_event_payload->
+            rpc_loc_event_payload_u_type_u.gnss_report);
+      break;
+   case RPC_LOC_EVENT_STATUS_REPORT:
+      log_status_report(&loc_event_payload->
+            rpc_loc_event_payload_u_type_u.status_report);
+      break;
+   case RPC_LOC_EVENT_PARSED_POSITION_REPORT:
+      log_parsed_report(&loc_event_payload->
+            rpc_loc_event_payload_u_type_u.parsed_location_report);
+      break;
+   default:
+      break;
+   }
+
+   return 0;
+}
+
+/* Finds the first event found in the mask */
+const char* loc_get_event_name(rpc_loc_event_mask_type loc_event_mask)
+{
+   return loc_get_name_from_mask(loc_event_name, loc_event_num,
+         (long) loc_event_mask);
+}
+
+/* Finds IOCTL type name */
+const char* loc_get_ioctl_type_name(rpc_loc_ioctl_e_type ioctl_type)
+{
+   return loc_get_name_from_val(loc_ioctl_type_name, loc_ioctl_type_num,
+         (long) ioctl_type);
+}
+
+/* Finds IOCTL status name */
+const char* loc_get_ioctl_status_name(uint32 status)
+{
+   return loc_get_name_from_val(loc_ioctl_status_name, loc_ioctl_status_num,
+         (long) status);
+}
+
+/* Finds session status name */
+const char* loc_get_sess_status_name(rpc_loc_session_status_e_type status)
+{
+   return loc_get_name_from_val(loc_sess_status_name, loc_sess_status_num,
+         (long) status);
+}
+
+/* Find engine state name */
+const char* loc_get_engine_state_name(rpc_loc_engine_state_e_type state)
+{
+   return loc_get_name_from_val(loc_engine_state_name, loc_engine_state_num,
+         (long) state);
+}
+
+/* Find engine state name */
+const char* loc_get_fix_session_state_name(rpc_loc_fix_session_state_e_type state)
+{
+   return loc_get_name_from_val(loc_fix_session_state_name, loc_fix_session_state_num,
+         (long) state);
+}
+
+/* Event names */
+loc_name_val_s_type rpc_reset_event_name[] =
+{
+    NAME_VAL( RPC_SUBSYSTEM_RESTART_BEGIN ),
+    NAME_VAL( RPC_SUBSYSTEM_RESTART_END )
+};
+int rpc_reset_event_num = sizeof rpc_reset_event_name / sizeof(loc_name_val_s_type);
+
+const char* loc_get_rpc_reset_event_name(enum rpc_reset_event event)
+{
+    return loc_get_name_from_val(rpc_reset_event_name, rpc_reset_event_num, event);
+}
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c
new file mode 100755
index 0000000..10b2d22
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c
@@ -0,0 +1,621 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+/*=====================================================================
+
+                     INCLUDE FILES FOR MODULE
+
+======================================================================*/
+#include <stdio.h>
+#include <pthread.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/select.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <loc_api_log.h>
+
+#include <rpc/rpc.h>
+
+/* Include RPC headers */
+#include "rpc_inc/loc_api_rpc_glue.h"
+
+/* Callback init */
+#include "rpc_inc/loc_apicb_appinit.h"
+
+/* Logging */
+#define LOG_TAG "LocSvc_api_rpc_glue"
+#define LOG_NDDEBUG 0
+#include <utils/Log.h>
+
+/* Logging Improvement */
+#include "log_util.h"
+
+/* Uncomment to force LOGD messages */
+// #define LOGD LOGI
+
+/*=====================================================================
+     External declarations
+======================================================================*/
+
+CLIENT* loc_api_clnt = NULL;
+
+/* Callback ID and pointer */
+#define LOC_API_CB_MAX_CLIENTS 16
+typedef struct
+{
+    uint32 cb_id;                        /* same as rpc/types.h */
+    loc_event_cb_f_type *cb_func;      /* callback func */
+    loc_reset_notif_cb_f_type *rpc_cb; /* callback from RPC */
+    rpc_loc_client_handle_type handle; /* stores handle for client closing */
+    void* user;                        /* user's own data handle */
+} loc_glue_cb_entry_s_type;
+
+loc_glue_cb_entry_s_type loc_glue_callback_table[LOC_API_CB_MAX_CLIENTS];
+
+#define RPC_FUNC_VERSION_BASE(a,b) a ## b
+#define RPC_FUNC_VERSION(a,b) RPC_FUNC_VERSION_BASE(a,b)
+
+#define RPC_CALLBACK_FUNC_VERSION_BASE(a,v,b) a ## v ## b
+#define RPC_CALLBACK_FUNC_VERSION(a,v,b) RPC_CALLBACK_FUNC_VERSION_BASE(a,v,b)
+
+#define LOC_GLUE_CHECK_INIT(ret_type) \
+   if (loc_api_clnt == NULL) { EXIT_LOG_CALLFLOW(%d, RPC_LOC_API_RPC_FAILURE); return (ret_type) RPC_LOC_API_RPC_FAILURE; }
+
+#define LOC_GLUE_CHECK_RESULT(stat, ret_type) \
+  if (stat != RPC_SUCCESS) { \
+      LOC_LOGE("%s:%d] failure code %d", __func__, __LINE__, stat); \
+      return (ret_type)((stat == RPC_SUBSYSTEM_RESTART) ? \
+                        RPC_LOC_API_RPC_MODEM_RESTART : RPC_LOC_API_RPC_FAILURE); \
+  }
+
+/* Callback functions */
+/* Returns 1 if successful */
+bool_t rpc_loc_event_cb_f_type_svc(
+      rpc_loc_event_cb_f_type_args *argp,
+      rpc_loc_event_cb_f_type_rets *ret,
+      struct svc_req *req)
+{
+    // The lower word of cd_id is the index
+    int index = argp->cb_id & 0xFFFF;
+
+    /* Callback not registered, or unexpected ID (shouldn't happen) */
+    if (index >= LOC_API_CB_MAX_CLIENTS || loc_glue_callback_table[index].cb_func == NULL)
+    {
+        LOC_LOGE("Warning: No callback handler %d.\n", index);
+        ret->loc_event_cb_f_type_result = 0;
+        return 1; /* simply return */
+    }
+
+    LOC_LOGV("proc: %x  prog: %x  vers: %x\n",
+         (int) req->rq_proc,
+         (int) req->rq_prog,
+         (int) req->rq_vers);
+
+    LOC_LOGV("Callback received: %x (cb_id=%p handle=%d ret_ptr=%d)\n",
+         (int) argp->loc_event,
+               argp->cb_id,
+         (int) argp->loc_handle,
+         (int) ret);
+
+    /* Forward callback to real callback procedure */
+    rpc_loc_client_handle_type        loc_handle = argp->loc_handle;
+    rpc_loc_event_mask_type           loc_event  = argp->loc_event;
+    const rpc_loc_event_payload_u_type*  loc_event_payload =
+        (const rpc_loc_event_payload_u_type*) argp->loc_event_payload;
+
+    /* Gives control to synchronous call handler */
+    loc_api_callback_process_sync_call(loc_handle, loc_event, loc_event_payload);
+
+    int32 rc = (loc_glue_callback_table[index].cb_func)(loc_glue_callback_table[index].user,
+                                                        loc_handle, loc_event, loc_event_payload);
+
+    LOC_LOGV("cb_func=%p", loc_glue_callback_table[index].cb_func);
+
+    ret->loc_event_cb_f_type_result = rc;
+
+    return 1; /* ok */
+}
+
+int loc_apicbprog_freeresult (SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result)
+{
+   xdr_free (xdr_result, result);
+
+   /*
+    * Insert additional freeing code here, if needed
+    */
+   // LOC_LOGD("***** loc_apicbprog_freeresult\n");
+
+   return 1;
+}
+
+/*===========================================================================
+
+FUNCTION rpc_loc_event_cb_f_type_<version>_svc (MACRO)
+
+DESCRIPTION
+   Callback function for Loc API
+
+RETURN VALUE
+   1 for success
+   0 for failure
+
+===========================================================================*/
+bool_t RPC_CALLBACK_FUNC_VERSION(rpc_loc_event_cb_f_type_, RPC_LOC_EVENT_CB_F_TYPE_VERSION, _svc) (
+      rpc_loc_event_cb_f_type_args *argp,
+      rpc_loc_event_cb_f_type_rets *ret,
+      struct svc_req *req)
+{
+   return rpc_loc_event_cb_f_type_svc(argp, ret, req);
+}
+
+/*===========================================================================
+
+FUNCTION loc_apicbprog_<version>_freeresult (MACRO)
+
+DESCRIPTION
+   Free up RPC data structure
+
+RETURN VALUE
+   1 for success
+   0 for failure
+
+===========================================================================*/
+#define VERSION_CONCAT(MAJOR,MINOR) MAJOR##MINOR
+#define loc_apicb_prog_VER_freeresult(M,N) \
+int RPC_CALLBACK_FUNC_VERSION(loc_apicbprog_, VERSION_CONCAT(M,N), _freeresult) \
+(SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result) \
+{ \
+   return loc_apicbprog_freeresult(transp, xdr_result, result); \
+}
+
+/* Define all of the possible minors */
+loc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0001);
+loc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0002);
+loc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0003);
+loc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0004);
+loc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0005);
+loc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0006);
+
+/*===========================================================================
+
+FUNCTION rpc_loc_api_cb_null_<version>_svc (MACRO) [Patch for wrong RPCGEN stubs]
+
+DESCRIPTION
+   Null callback function for Loc API
+
+RETURN VALUE
+   1 for success
+
+===========================================================================*/
+#define rpc_loc_api_cb_null_VER_svc(M,N) \
+bool_t RPC_CALLBACK_FUNC_VERSION(rpc_loc_api_cb_null_, VERSION_CONCAT(M,N), _svc) ( \
+      void *a, int *b, struct svc_req *req) \
+{ \
+   return 1; \
+}
+
+/* Define all of the possible minors */
+rpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0001);
+rpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0002);
+rpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0003);
+rpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0004);
+rpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0005);
+rpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0006);
+
+static void loc_api_glue_rpc_cb(CLIENT* client, enum rpc_reset_event event)
+{
+    int i;
+    for (i = 0; i < LOC_API_CB_MAX_CLIENTS; i++) {
+        if (NULL != loc_glue_callback_table[i].rpc_cb) {
+            loc_glue_callback_table[i].rpc_cb(loc_glue_callback_table[i].user, client, event);
+        }
+    }
+}
+
+/*===========================================================================
+
+FUNCTION loc_api_glue_init
+
+DESCRIPTION
+   Initiates the RPC client
+
+RETURN VALUE
+   1 for success
+   0 for failure
+
+===========================================================================*/
+int loc_api_glue_init(void)
+{
+   if (loc_api_clnt == NULL)
+   {
+      /* Initialize data */
+      int i;
+      int pid = getpid();
+      for (i = 0; i < LOC_API_CB_MAX_CLIENTS; i++)
+      {
+          loc_glue_callback_table[i].cb_id = i | (pid << 16);
+          loc_glue_callback_table[i].cb_func = NULL;
+          loc_glue_callback_table[i].handle = -1;
+          loc_glue_callback_table[i].rpc_cb = NULL;
+          loc_glue_callback_table[i].user = NULL;
+      }
+
+      /* Print msg */
+      LOC_LOGV("Trying to create RPC client...\n");
+      loc_api_clnt = clnt_create(NULL, LOC_APIPROG, LOC_APIVERS, NULL);
+      LOC_LOGV("Created loc_api_clnt ---- %x\n", (unsigned int)loc_api_clnt);
+
+      if (loc_api_clnt == NULL)
+      {
+         LOC_LOGE("Error: cannot create RPC client.\n");
+         return 0;
+      }
+
+      /* Init RPC callbacks */
+      loc_api_sync_call_init();
+
+      int rc = loc_apicb_app_init();
+      if (rc >= 0)
+      {
+         LOC_LOGD("Loc API RPC client initialized.\n");
+         clnt_register_reset_notification_cb(loc_api_clnt, loc_api_glue_rpc_cb);
+      }
+      else {
+         LOC_LOGE("Loc API callback initialization failed.\n");
+         return 0;
+      }
+   }
+
+   return 1;
+}
+
+rpc_loc_client_handle_type loc_open (
+    rpc_loc_event_mask_type       event_reg_mask,
+    loc_event_cb_f_type           *event_callback,
+    loc_reset_notif_cb_f_type     *rpc_cb,
+    void*                         userData
+)
+{
+    ENTRY_LOG();
+    LOC_GLUE_CHECK_INIT(rpc_loc_client_handle_type);
+
+    rpc_loc_client_handle_type ret_val;
+
+    rpc_loc_open_args args;
+    args.event_reg_mask = event_reg_mask;
+
+    int i;
+    for (i = 0; i < LOC_API_CB_MAX_CLIENTS; i++)
+    {
+        if (loc_glue_callback_table[i].cb_func == event_callback ||
+            loc_glue_callback_table[i].user == userData)
+        {
+            LOC_LOGW("Client already opened service (callback=%p)...\n",
+                  event_callback);
+            break;
+        }
+    }
+
+    if (i == LOC_API_CB_MAX_CLIENTS)
+    {
+        for (i = 0; i < LOC_API_CB_MAX_CLIENTS; i++)
+        {
+            if (loc_glue_callback_table[i].cb_func == NULL)
+            {
+                loc_glue_callback_table[i].cb_func = event_callback;
+                loc_glue_callback_table[i].rpc_cb = rpc_cb;
+                loc_glue_callback_table[i].user = userData;
+                break;
+            }
+        }
+    }
+
+    if (i == LOC_API_CB_MAX_CLIENTS)
+    {
+        LOC_LOGE("Too many clients opened at once...\n");
+        return RPC_LOC_CLIENT_HANDLE_INVALID;
+    }
+
+    args.event_callback = loc_glue_callback_table[i].cb_id;
+    LOC_LOGV("cb_id=%d, func=0x%x", i, (unsigned int) event_callback);
+
+    rpc_loc_open_rets rets;
+    enum clnt_stat stat = RPC_SUCCESS;
+
+    EXIT_LOG_CALLFLOW(%s, "loc client open");
+    stat = RPC_FUNC_VERSION(rpc_loc_open_, RPC_LOC_OPEN_VERSION)(&args, &rets, loc_api_clnt);
+    LOC_GLUE_CHECK_RESULT(stat, int32);
+
+    /* save the handle in the table */
+    loc_glue_callback_table[i].handle = (rpc_loc_client_handle_type) rets.loc_open_result;
+
+    ret_val = (rpc_loc_client_handle_type) rets.loc_open_result;
+
+    return ret_val;
+
+}
+
+int32 loc_close
+(
+      rpc_loc_client_handle_type handle
+)
+{
+    ENTRY_LOG();
+    LOC_GLUE_CHECK_INIT(int32);
+
+    int32 ret_val;
+
+    rpc_loc_close_args args;
+    args.handle = handle;
+
+    rpc_loc_close_rets rets;
+    enum clnt_stat stat = RPC_SUCCESS;
+
+    EXIT_LOG_CALLFLOW(%s, "loc client close");
+    stat = RPC_FUNC_VERSION(rpc_loc_close_, RPC_LOC_CLOSE_VERSION)(&args, &rets, loc_api_clnt);
+
+    loc_clear(handle);
+
+    LOC_GLUE_CHECK_RESULT(stat, int32);
+    ret_val = (int32) rets.loc_close_result;
+
+    return ret_val;
+}
+
+void loc_clear(rpc_loc_client_handle_type handle) {
+    /* Clean the client's callback function in callback table */
+    int i;
+    for (i = 0; i < LOC_API_CB_MAX_CLIENTS; i++)
+    {
+        if (loc_glue_callback_table[i].handle == handle)
+        {
+            /* Found the client */
+            loc_glue_callback_table[i].cb_func = NULL;
+            loc_glue_callback_table[i].rpc_cb = NULL;
+            loc_glue_callback_table[i].handle = -1;
+            break;
+        }
+    }
+
+    if (i == LOC_API_CB_MAX_CLIENTS)
+    {
+        LOC_LOGW("Handle not found (handle=%d)...\n", (int) handle);
+    }
+}
+
+int32 loc_start_fix
+(
+      rpc_loc_client_handle_type handle
+)
+{
+    ENTRY_LOG();
+    LOC_GLUE_CHECK_INIT(int32);
+
+    int32 ret_val;
+
+    rpc_loc_start_fix_args args;
+    args.handle = handle;
+
+    rpc_loc_start_fix_rets rets;
+    enum clnt_stat stat = RPC_SUCCESS;
+
+    EXIT_LOG_CALLFLOW(%s, "loc start fix");
+    stat = RPC_FUNC_VERSION(rpc_loc_start_fix_, RPC_LOC_START_FIX_VERSION)(&args, &rets, loc_api_clnt);
+    LOC_GLUE_CHECK_RESULT(stat, int32);
+
+    ret_val = (int32) rets.loc_start_fix_result;
+
+    return ret_val;
+}
+
+int32 loc_stop_fix
+(
+      rpc_loc_client_handle_type handle
+)
+{
+    ENTRY_LOG();
+    LOC_GLUE_CHECK_INIT(int32);
+
+    int32 ret_val;
+
+    rpc_loc_stop_fix_args args;
+    args.handle = handle;
+
+    rpc_loc_stop_fix_rets rets;
+    enum clnt_stat stat = RPC_SUCCESS;
+
+    EXIT_LOG_CALLFLOW(%s, "loc stop fix");
+    stat = RPC_FUNC_VERSION(rpc_loc_stop_fix_, RPC_LOC_STOP_FIX_VERSION)(&args, &rets, loc_api_clnt);
+    LOC_GLUE_CHECK_RESULT(stat, int32);
+
+    ret_val = (int32) rets.loc_stop_fix_result;
+
+    return ret_val;
+}
+
+int32 loc_ioctl
+(
+      rpc_loc_client_handle_type           handle,
+      rpc_loc_ioctl_e_type                 ioctl_type,
+      rpc_loc_ioctl_data_u_type*           ioctl_data
+)
+{
+    ENTRY_LOG();
+    LOC_GLUE_CHECK_INIT(int32);
+
+    int32 ret_val;
+
+    rpc_loc_ioctl_args args;
+    args.handle = handle;
+    args.ioctl_data = ioctl_data;
+    args.ioctl_type = ioctl_type;
+    if (ioctl_data != NULL)
+    {
+        /* Assign ioctl union discriminator */
+        ioctl_data->disc = ioctl_type;
+
+        /* In case the user hasn't filled in other disc fields,
+           automatically fill them in here */
+        switch (ioctl_type)
+        {
+        case RPC_LOC_IOCTL_GET_API_VERSION:
+            break;
+        case RPC_LOC_IOCTL_SET_FIX_CRITERIA:
+            break;
+        case RPC_LOC_IOCTL_GET_FIX_CRITERIA:
+            break;
+        case RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE:
+            break;
+        case RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA:
+            break;
+        case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_VALIDITY:
+            break;
+        case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE:
+            break;
+        case RPC_LOC_IOCTL_SET_PREDICTED_ORBITS_DATA_AUTO_DOWNLOAD:
+            break;
+        case RPC_LOC_IOCTL_INJECT_UTC_TIME:
+            break;
+        case RPC_LOC_IOCTL_INJECT_RTC_VALUE:
+            break;
+        case RPC_LOC_IOCTL_INJECT_POSITION:
+            break;
+        case RPC_LOC_IOCTL_QUERY_ENGINE_STATE:
+            break;
+        case RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS:
+            break;
+        case RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS:
+            break;
+        case RPC_LOC_IOCTL_SET_ENGINE_LOCK:
+            break;
+        case RPC_LOC_IOCTL_GET_ENGINE_LOCK:
+            break;
+        case RPC_LOC_IOCTL_SET_SBAS_CONFIG:
+            break;
+        case RPC_LOC_IOCTL_GET_SBAS_CONFIG:
+            break;
+        case RPC_LOC_IOCTL_SET_NMEA_TYPES:
+            break;
+        case RPC_LOC_IOCTL_GET_NMEA_TYPES:
+            break;
+        case RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR:
+        case RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR:
+        case RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR:
+        case RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR:
+            args.ioctl_data->rpc_loc_ioctl_data_u_type_u.server_addr.addr_info.disc =
+                args.ioctl_data->rpc_loc_ioctl_data_u_type_u.server_addr.addr_type;
+            break;
+        case RPC_LOC_IOCTL_GET_CDMA_PDE_SERVER_ADDR:
+        case RPC_LOC_IOCTL_GET_CDMA_MPC_SERVER_ADDR:
+        case RPC_LOC_IOCTL_GET_UMTS_SLP_SERVER_ADDR:
+        case RPC_LOC_IOCTL_GET_CUSTOM_PDE_SERVER_ADDR:
+            break;
+        case RPC_LOC_IOCTL_SET_ON_DEMAND_LPM:
+            break;
+        case RPC_LOC_IOCTL_GET_ON_DEMAND_LPM:
+            break;
+        case RPC_LOC_IOCTL_DELETE_ASSIST_DATA:
+            break;
+        default:
+            break;
+        } /* switch */
+    } /* ioctl_data != NULL */
+
+    rpc_loc_ioctl_rets rets;
+    enum clnt_stat stat = RPC_SUCCESS;
+
+    EXIT_LOG_CALLFLOW(%s, loc_get_ioctl_type_name(ioctl_type));
+    stat = RPC_FUNC_VERSION(rpc_loc_ioctl_, RPC_LOC_IOCTL_VERSION)(&args, &rets, loc_api_clnt);
+    LOC_GLUE_CHECK_RESULT(stat, int32);
+
+    ret_val = (int32) rets.loc_ioctl_result;
+
+    return ret_val;
+}
+
+/* Returns 0 if error */
+int32 loc_api_null(void)
+{
+    LOC_GLUE_CHECK_INIT(int32);
+
+    int32 rets;
+    enum clnt_stat stat = RPC_SUCCESS;
+
+    clnt_unregister_reset_notification_cb(loc_api_clnt);
+    stat = RPC_FUNC_VERSION(rpc_loc_api_null_, RPC_LOC_API_NULL_VERSION)(NULL, &rets, loc_api_clnt);
+    LOC_GLUE_CHECK_RESULT(stat, int32);
+
+    return (int32) rets;
+}
+
+/*===========================================================================
+
+FUNCTION    loc_eng_ioctl
+
+DESCRIPTION
+   This function calls loc_ioctl and waits for the callback result before
+   returning back to the user.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   TRUE                 if successful
+   FALSE                if failed
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_ioctl
+(
+      rpc_loc_client_handle_type           handle,
+      rpc_loc_ioctl_e_type                 ioctl_type,
+      rpc_loc_ioctl_data_u_type*           ioctl_data_ptr,
+      uint32                               timeout_msec,
+      rpc_loc_ioctl_callback_s_type       *cb_data_ptr
+)
+{
+    int ret_val = RPC_LOC_API_SUCCESS;
+
+    ret_val = loc_api_sync_ioctl(handle, ioctl_type, ioctl_data_ptr, timeout_msec, cb_data_ptr);
+
+    LOC_LOGD("loc_eng_ioctl result: client = %d, ioctl_type = %s, returt %s\n",
+             (int32) handle,
+             loc_get_ioctl_type_name(ioctl_type),
+             loc_get_ioctl_status_name(ret_val) );
+
+    return ret_val;
+}
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_sync_call.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_sync_call.c
new file mode 100755
index 0000000..e2a5786
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_sync_call.c
@@ -0,0 +1,510 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#include <stdio.h>
+#include <assert.h>
+#include <errno.h>
+#include <sys/time.h>
+#include <string.h>
+#include <pthread.h>
+
+#include <rpc/rpc.h>
+#include <loc_api_rpc_glue.h>
+#include "loc_api_sync_call.h"
+
+/* Logging */
+#define LOG_TAG "LocSvc_api_rpc_glue"
+// #define LOG_NDDEBUG 0
+#include <utils/Log.h>
+
+/***************************************************************************
+ *                 DATA FOR ASYNCHRONOUS RPC PROCESSING
+ **************************************************************************/
+loc_sync_call_slot_array_s_type loc_sync_data;
+
+pthread_mutex_t loc_sync_call_mutex = PTHREAD_MUTEX_INITIALIZER;
+boolean loc_sync_call_inited = 0;
+
+/*===========================================================================
+
+FUNCTION    loc_api_sync_call_init
+
+DESCRIPTION
+   Initialize this module
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   none
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_api_sync_call_init()
+{
+   pthread_mutex_lock(&loc_sync_call_mutex);
+   if (loc_sync_call_inited == 1) {
+       pthread_mutex_unlock(&loc_sync_call_mutex);
+       return;
+   }
+   loc_sync_call_inited = 1;
+
+   loc_sync_data.num_of_slots = LOC_SYNC_CALL_SLOTS_MAX;
+
+   int i;
+   for (i = 0; i < loc_sync_data.num_of_slots; i++)
+   {
+      loc_sync_call_slot_s_type *slot = &loc_sync_data.slots[i];
+
+      pthread_mutex_init(&slot->lock, NULL);
+      pthread_cond_init(&slot->loc_cb_arrived_cond, NULL);
+
+      slot->not_available = 0;
+      slot->in_use = 0;
+      slot->loc_handle = -1;
+      slot->loc_cb_wait_event_mask = 0;       /* event to wait   */
+      slot->loc_cb_received_event_mask = 0;   /* received event   */
+   }
+
+   pthread_mutex_unlock(&loc_sync_call_mutex);
+}
+
+/*===========================================================================
+
+FUNCTION    loc_api_sync_call_destroy
+
+DESCRIPTION
+   Initialize this module
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   none
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_api_sync_call_destroy()
+{
+   int i;
+
+   pthread_mutex_lock(&loc_sync_call_mutex);
+   if (loc_sync_call_inited == 0) {
+       pthread_mutex_unlock(&loc_sync_call_mutex);
+       return;
+   }
+   loc_sync_call_inited = 0;
+
+   for (i = 0; i < loc_sync_data.num_of_slots; i++)
+   {
+      loc_sync_call_slot_s_type *slot = &loc_sync_data.slots[i];
+
+      pthread_mutex_lock(&slot->lock);
+
+      slot->not_available = 1;
+
+      pthread_mutex_unlock(&slot->lock);
+
+      pthread_cond_destroy(&slot->loc_cb_arrived_cond);
+      pthread_mutex_destroy(&slot->lock);
+   }
+
+   pthread_mutex_unlock(&loc_sync_call_mutex);
+}
+
+/*===========================================================================
+
+FUNCTION    loc_match_callback
+
+DESCRIPTION
+   Checks if an awaited event has arrived
+
+RETURN VALUE
+   TRUE                 arrived
+   FALSE                not matching
+
+===========================================================================*/
+static boolean loc_match_callback(
+      rpc_loc_event_mask_type             wait_mask,
+      rpc_loc_ioctl_e_type                wait_ioctl,
+      rpc_loc_event_mask_type             event_mask,
+      const rpc_loc_event_payload_u_type  *callback_payload
+)
+{
+   if ((event_mask & wait_mask) == 0) return FALSE;
+
+   if (event_mask != RPC_LOC_EVENT_IOCTL_REPORT || wait_ioctl == 0 ||
+        ( (callback_payload != NULL) &&
+         callback_payload->rpc_loc_event_payload_u_type_u.ioctl_report.type == wait_ioctl) )
+      return TRUE;
+
+   return FALSE;
+}
+
+/*===========================================================================
+
+FUNCTION    loc_api_callback_process_sync_call
+
+DESCRIPTION
+   Wakes up blocked API calls to check if the needed callback has arrived
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   none
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_api_callback_process_sync_call(
+      rpc_loc_client_handle_type            loc_handle,             /* handle of the client */
+      rpc_loc_event_mask_type               loc_event,              /* event mask           */
+      const rpc_loc_event_payload_u_type*   loc_event_payload       /* payload              */
+)
+{
+   int i;
+
+   LOGV("loc_handle = 0x%lx, loc_event = 0x%lx", loc_handle, loc_event);
+   for (i = 0; i < loc_sync_data.num_of_slots; i++)
+   {
+      loc_sync_call_slot_s_type *slot = &loc_sync_data.slots[i];
+
+      pthread_mutex_lock(&slot->lock);
+
+      if (slot->in_use &&
+          slot->signal_sent == 0 &&
+          slot->loc_handle == loc_handle &&
+          loc_match_callback(slot->loc_cb_wait_event_mask, slot->ioctl_type, loc_event, loc_event_payload))
+      {
+         memcpy(&slot->loc_cb_received_payload, loc_event_payload, sizeof (rpc_loc_event_payload_u_type));
+
+         slot->loc_cb_received_event_mask = loc_event;
+
+         LOGV("signal slot %d in_use %d, loc_handle 0x%lx, event_mask 0x%1x, ioctl_type %d", i, slot->in_use, slot->loc_handle, (int) slot->loc_cb_wait_event_mask, (int) slot->ioctl_type);
+         pthread_cond_signal(&slot->loc_cb_arrived_cond);
+         slot->signal_sent = 1;
+
+         pthread_mutex_unlock(&slot->lock);
+         break;
+      } else {
+         /* do nothing */
+      }
+
+      pthread_mutex_unlock(&slot->lock);
+   }
+}
+
+/*===========================================================================
+
+FUNCTION    loc_lock_a_slot
+
+DESCRIPTION
+   Allocates a buffer slot for the synchronous API call
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Select ID (>=0)     : successful
+   -1                  : buffer full
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_lock_a_slot()
+{
+   int i, select_id = -1; /* no free buffer */
+
+   for (i = 0; i < loc_sync_data.num_of_slots; i++)
+   {
+      loc_sync_call_slot_s_type *slot = &loc_sync_data.slots[i];
+      if (pthread_mutex_trylock(&slot->lock) == EBUSY)
+      {
+         LOGV("trylock EBUSY : %d", i);
+         continue;
+      }
+
+      if (!slot->in_use && !slot->not_available)
+      {
+         select_id = i;
+         slot->in_use = 1;
+         slot->signal_sent = 0;
+         /* Return from here and leave the mutex locked.
+          * will unlock it in loc_unlock_slot()
+          */
+         break;
+      }
+      /* LOGV("slot %d in_use = %d, not_available = %d : %d", i, slot->in_use, slot->not_available, i); */
+      pthread_mutex_unlock(&slot->lock);
+   }
+
+   return select_id;
+}
+
+/*===========================================================================
+
+FUNCTION    loc_unlock_slot
+
+DESCRIPTION
+   Frees a buffer slot after the synchronous API call
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_unlock_slot(int select_id)
+{
+   loc_sync_data.slots[select_id].in_use = 0;
+
+   pthread_mutex_unlock(&loc_sync_data.slots[select_id].lock);
+}
+
+/*===========================================================================
+
+FUNCTION    loc_api_save_callback
+
+DESCRIPTION
+   Selects which callback or IOCTL event to wait for.
+
+   The event_mask specifies the event(s). If it is RPC_LOC_EVENT_IOCTL_REPORT,
+   then ioctl_type specifies the IOCTL event.
+
+   If ioctl_type is non-zero, RPC_LOC_EVENT_IOCTL_REPORT is automatically added.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Select ID (>=0)     : successful
+   -1                  : out of buffer
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_api_save_callback(
+      int                              select_id,            /* Selected slot */
+      rpc_loc_client_handle_type       loc_handle,           /* Client handle */
+      rpc_loc_event_mask_type          event_mask,           /* Event mask to wait for */
+      rpc_loc_ioctl_e_type             ioctl_type            /* IOCTL type to wait for */
+)
+{
+   loc_sync_call_slot_s_type *slot = &loc_sync_data.slots[select_id];
+
+   slot->loc_handle = loc_handle;
+
+   slot->loc_cb_wait_event_mask = event_mask;
+   slot->ioctl_type = ioctl_type;
+   if (ioctl_type) slot->loc_cb_wait_event_mask |= RPC_LOC_EVENT_IOCTL_REPORT;
+
+   return;
+}
+
+/*===========================================================================
+
+FUNCTION    loc_save_user_payload
+
+DESCRIPTION
+   Saves received payload into user data structures
+
+RETURN VALUE
+   None
+
+===========================================================================*/
+static void loc_save_user_payload(
+      rpc_loc_event_payload_u_type  *user_cb_payload,
+      rpc_loc_ioctl_callback_s_type *user_ioctl_buffer,
+      const rpc_loc_event_payload_u_type  *received_cb_payload
+)
+{
+   if (user_cb_payload)
+   {
+      memcpy(user_cb_payload, received_cb_payload,
+            sizeof (rpc_loc_event_payload_u_type));
+   }
+   if (user_ioctl_buffer)
+   {
+      memcpy(user_ioctl_buffer,
+            &received_cb_payload->rpc_loc_event_payload_u_type_u.ioctl_report,
+            sizeof *user_ioctl_buffer);
+   }
+}
+
+/*===========================================================================
+
+FUNCTION    loc_api_wait_callback
+
+DESCRIPTION
+   Waits for a selected callback. The wait expires in timeout_seconds seconds.
+
+   If the function is called before an existing wait has finished, it will
+   immediately return EBUSY.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   RPC_LOC_API_SUCCESS              if successful (0)
+   RPC_LOC_API_TIMEOUT              if timed out
+   RPC_LOC_API_ENGINE_BUSY          if already in a wait
+   RPC_LOC_API_INVALID_PARAMETER    if callback is not yet selected
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_api_wait_callback(
+      int select_id,        /* ID from loc_select_callback() */
+      int timeout_seconds,  /* Timeout in this number of seconds  */
+      rpc_loc_event_payload_u_type     *callback_payload,    /* Pointer to callback payload buffer, can be NULL */
+      rpc_loc_ioctl_callback_s_type    *ioctl_payload        /* Pointer to IOCTL payload, can be NULL */
+)
+{
+   int ret_val = RPC_LOC_API_SUCCESS;  /* the return value of this function: 0 = no error */
+   int rc;                             /* return code from pthread calls */
+
+   struct timespec expire_time;
+
+   loc_sync_call_slot_s_type *slot = &loc_sync_data.slots[select_id];
+
+   clock_gettime(CLOCK_REALTIME, &expire_time);
+   expire_time.tv_sec += timeout_seconds;
+
+   /* Waiting */
+   while (slot->signal_sent == 0 && rc != ETIMEDOUT) {
+       rc = pthread_cond_timedwait(&slot->loc_cb_arrived_cond,
+             &slot->lock, &expire_time);
+   }
+
+   if (rc == ETIMEDOUT)
+   {
+      ret_val = RPC_LOC_API_TIMEOUT; /* Timed out */
+      LOGE("TIMEOUT: %d", select_id);
+   }
+   else {
+      /* Obtained the first awaited callback */
+      ret_val = RPC_LOC_API_SUCCESS;       /* Successful */
+      loc_save_user_payload(callback_payload, ioctl_payload, &slot->loc_cb_received_payload);
+   }
+
+   return ret_val;
+}
+
+/*===========================================================================
+
+FUNCTION    loc_api_sync_ioctl
+
+DESCRIPTION
+   Synchronous IOCTL call (reentrant version)
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Loc API error code (0 = success)
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_api_sync_ioctl
+(
+      rpc_loc_client_handle_type           handle,
+      rpc_loc_ioctl_e_type                 ioctl_type,
+      rpc_loc_ioctl_data_u_type*           ioctl_data_ptr,
+      uint32                               timeout_msec,
+      rpc_loc_ioctl_callback_s_type       *cb_data_ptr
+)
+{
+   int                              rc = -1;
+   int                              select_id;
+   rpc_loc_ioctl_callback_s_type    callback_data;
+
+   select_id = loc_lock_a_slot();
+
+   if (select_id < 0 || select_id >= loc_sync_data.num_of_slots)
+   {
+      LOGE("slot not available ioctl_type = %s",
+           loc_get_ioctl_type_name(ioctl_type));
+      return rc;
+   }
+
+   // Select the callback we are waiting for
+   loc_api_save_callback(select_id, handle, 0, ioctl_type);
+
+   rc =  loc_ioctl(handle, ioctl_type, ioctl_data_ptr);
+
+   if (rc != RPC_LOC_API_SUCCESS)
+   {
+      LOGE("loc_ioctl failed select_id = %d, ioctl_type %s, returned %s",
+           select_id, loc_get_ioctl_type_name(ioctl_type), loc_get_ioctl_status_name(rc));
+   }
+   else {
+      LOGV("select_id = %d, ioctl_type %d, returned RPC_LOC_API_SUCCESS",
+          select_id, ioctl_type);
+      // Wait for the callback of loc_ioctl
+      if ((rc = loc_api_wait_callback(select_id, timeout_msec / 1000, NULL, &callback_data)) != 0)
+      {
+         // Callback waiting failed
+         LOGE("callback wait failed select_id = %d, ioctl_type %s, returned %s",
+              select_id, loc_get_ioctl_type_name(ioctl_type), loc_get_ioctl_status_name(rc));
+      }
+      else
+      {
+         if (cb_data_ptr) memcpy(cb_data_ptr, &callback_data, sizeof *cb_data_ptr);
+         if (callback_data.status != RPC_LOC_API_SUCCESS)
+         {
+            rc = callback_data.status;
+            LOGE("callback status failed select_id = %d, ioctl_type %s, returned %s",
+                 select_id, loc_get_ioctl_type_name(ioctl_type), loc_get_ioctl_status_name(rc));
+         } else {
+            LOGV("callback status success select_id = %d, ioctl_type %d, returned %d",
+                select_id, ioctl_type, rc);
+         }
+      } /* wait callback */
+   } /* loc_ioctl */
+
+   loc_unlock_slot(select_id);
+
+   return rc;
+}
+
+
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_apicb_appinit.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_apicb_appinit.c
new file mode 100755
index 0000000..b257fb8
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_apicb_appinit.c
@@ -0,0 +1,86 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#include "rpc/rpc.h"
+
+/* Include RPC headers */
+#ifdef USE_LOCAL_RPC
+#include "rpc_inc/loc_api_common.h"
+#include "rpc_inc/loc_api.h"
+#include "rpc_inc/loc_api_cb.h"
+#endif
+
+#ifdef USE_QCOM_AUTO_RPC
+#include "loc_api_rpcgen_rpc.h"
+#include "loc_api_rpcgen_common_rpc.h"
+#include "loc_api_rpcgen_cb_rpc.h"
+#endif
+
+#include "rpc_inc/loc_api_fixup.h"
+#include "loc_apicb_appinit.h"
+
+#define RPC_FUNC_VERSION_BASE(a,b) a ## b
+#define RPC_CB_FUNC_VERS(a,b) RPC_FUNC_VERSION_BASE(a,b)
+
+static SVCXPRT* svrPort = NULL;
+
+extern void RPC_CB_FUNC_VERS(loc_apicbprog_,LOC_APICBVERS_0001)(struct svc_req *rqstp, register SVCXPRT *transp);
+
+int loc_apicb_app_init(void)
+{
+
+  /* Register a callback server to use the loc_apicbprog_* function  */
+  if (svrPort == NULL) {
+        svrPort = svcrtr_create();
+  }
+  if (!svrPort) return -1;
+
+  xprt_register(svrPort);
+  if(svc_register(svrPort, LOC_APICBPROG, LOC_APICBVERS_0001, RPC_CB_FUNC_VERS(loc_apicbprog_,LOC_APICBVERS_0001),0))
+  {
+     return 0;
+  }
+  else
+  {
+    return -1;
+  }
+}
+
+void loc_apicb_app_deinit(void)
+{
+   if (svrPort == NULL)
+   {
+      return;
+   }
+
+   svc_unregister(svrPort, LOC_APICBPROG, LOC_APICBVERS_0001);
+   xprt_unregister(svrPort);
+   svc_destroy(svrPort);
+   svrPort = NULL;
+}
+
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/Android.mk b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/Android.mk
new file mode 100755
index 0000000..abd15c8
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/Android.mk
@@ -0,0 +1,35 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+# functions
+LOC_RPCGEN_APIS_PATH := $(TARGET_OUT_INTERMEDIATES)/loc_api/libloc_api_rpcgen_intermediates
+LOC_RPCGEN_APIS_PATH_FL := ../../../../../$(TARGET_OUT_INTERMEDIATES)/loc_api/libloc_api_rpcgen_intermediates
+
+LOCAL_MODULE := libloc_api_rpcgen
+
+LOCAL_SHARED_LIBRARIES := \
+    librpc \
+    libcommondefs
+
+LOCAL_SRC_FILES += \
+    src/loc_api_rpcgen_cb_xdr.c \
+    src/loc_api_rpcgen_common_xdr.c \
+    src/loc_api_rpcgen_cb_svc.c \
+    src/loc_api_rpcgen_clnt.c \
+    src/loc_api_rpcgen_xdr.c
+
+LOCAL_C_INCLUDES += hardware/msm7k/librpc
+LOCAL_C_INCLUDES += $(LOC_RPCGEN_APIS_PATH)/../../SHARED_LIBRARIES/libcommondefs_intermediates/inc
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/inc
+LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/libcommondefs/rpcgen/inc
+
+LOCAL_COPY_HEADERS_TO := loc_api/rpcgen/inc
+LOCAL_COPY_HEADERS := inc/loc_api_rpcgen_rpc.h
+LOCAL_COPY_HEADERS += inc/loc_api_rpcgen_common_rpc.h
+LOCAL_COPY_HEADERS += inc/loc_api_rpcgen_cb_rpc.h
+LOCAL_COPY_HEADERS += inc/loc_apicb_appinit.h
+
+LOCAL_LDLIBS += -lpthread
+LOCAL_PRELINK_MODULE := false
+include $(BUILD_STATIC_LIBRARY)
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_cb_rpc.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_cb_rpc.h
new file mode 100755
index 0000000..47478e8
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_cb_rpc.h
@@ -0,0 +1,156 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _LOC_API_CB_RPC_H_RPCGEN
+#define _LOC_API_CB_RPC_H_RPCGEN
+
+#include "librpc.h"
+#include "commondefs_rpcgen_rpc.h"
+#include "loc_api_rpcgen_common_rpc.h"
+
+#include <pthread.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct rpc_loc_event_cb_f_type_args {
+    rpc_uint32 cb_id;
+    rpc_loc_client_handle_type loc_handle;
+    rpc_loc_event_mask_type loc_event;
+    rpc_loc_event_payload_u_type *loc_event_payload;
+};
+typedef struct rpc_loc_event_cb_f_type_args rpc_loc_event_cb_f_type_args;
+
+struct rpc_loc_event_cb_f_type_rets {
+    rpc_int32 loc_event_cb_f_type_result;
+};
+typedef struct rpc_loc_event_cb_f_type_rets rpc_loc_event_cb_f_type_rets;
+#define LOC_APICBVERS 0x00050006
+
+#define LOC_APICBPROG 0x3100008C
+#define LOC_APICBVERS_0001 0x00050001
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define rpc_loc_event_cb_f_type 1
+extern  enum clnt_stat rpc_loc_event_cb_f_type_0x00050001(rpc_loc_event_cb_f_type_args *, rpc_loc_event_cb_f_type_rets *, CLIENT *);
+extern  bool_t rpc_loc_event_cb_f_type_0x00050001_svc(rpc_loc_event_cb_f_type_args *, rpc_loc_event_cb_f_type_rets *, struct svc_req *);
+extern int loc_apicbprog_0x00050001_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define rpc_loc_event_cb_f_type 1
+extern  enum clnt_stat rpc_loc_event_cb_f_type_0x00050001();
+extern  bool_t rpc_loc_event_cb_f_type_0x00050001_svc();
+extern int loc_apicbprog_0x00050001_freeresult ();
+#endif /* K&R C */
+#define LOC_APICBVERS_0002 0x00050002
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define rpc_loc_api_cb_null 0xffffff00
+extern  enum clnt_stat rpc_loc_api_cb_null_0x00050002(void *, int *, CLIENT *);
+extern  bool_t rpc_loc_api_cb_null_0x00050002_svc(void *, int *, struct svc_req *);
+extern int loc_apicbprog_0x00050002_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define rpc_loc_api_cb_null 0xffffff00
+extern  enum clnt_stat rpc_loc_api_cb_null_0x00050002();
+extern  bool_t rpc_loc_api_cb_null_0x00050002_svc();
+extern int loc_apicbprog_0x00050002_freeresult ();
+#endif /* K&R C */
+#define LOC_APICBVERS_0003 0x00050003
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  enum clnt_stat rpc_loc_api_cb_null_0x00050003(void *, int *, CLIENT *);
+extern  bool_t rpc_loc_api_cb_null_0x00050003_svc(void *, int *, struct svc_req *);
+extern int loc_apicbprog_0x00050003_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  enum clnt_stat rpc_loc_api_cb_null_0x00050003();
+extern  bool_t rpc_loc_api_cb_null_0x00050003_svc();
+extern int loc_apicbprog_0x00050003_freeresult ();
+#endif /* K&R C */
+#define LOC_APICBVERS_0004 0x00050004
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  enum clnt_stat rpc_loc_api_cb_null_0x00050004(void *, int *, CLIENT *);
+extern  bool_t rpc_loc_api_cb_null_0x00050004_svc(void *, int *, struct svc_req *);
+extern int loc_apicbprog_0x00050004_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  enum clnt_stat rpc_loc_api_cb_null_0x00050004();
+extern  bool_t rpc_loc_api_cb_null_0x00050004_svc();
+extern int loc_apicbprog_0x00050004_freeresult ();
+#endif /* K&R C */
+#define LOC_APICBVERS_0005 0x00050005
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  enum clnt_stat rpc_loc_api_cb_null_0x00050005(void *, int *, CLIENT *);
+extern  bool_t rpc_loc_api_cb_null_0x00050005_svc(void *, int *, struct svc_req *);
+extern int loc_apicbprog_0x00050005_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  enum clnt_stat rpc_loc_api_cb_null_0x00050005();
+extern  bool_t rpc_loc_api_cb_null_0x00050005_svc();
+extern int loc_apicbprog_0x00050005_freeresult ();
+#endif /* K&R C */
+#define LOC_APICBVERS_0006 0x00050006
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  enum clnt_stat rpc_loc_api_cb_null_0x00050006(void *, int *, CLIENT *);
+extern  bool_t rpc_loc_api_cb_null_0x00050006_svc(void *, int *, struct svc_req *);
+extern int loc_apicbprog_0x00050006_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  enum clnt_stat rpc_loc_api_cb_null_0x00050006();
+extern  bool_t rpc_loc_api_cb_null_0x00050006_svc();
+extern int loc_apicbprog_0x00050006_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_rpc_loc_event_cb_f_type_args (XDR *, rpc_loc_event_cb_f_type_args*);
+extern  bool_t xdr_rpc_loc_event_cb_f_type_rets (XDR *, rpc_loc_event_cb_f_type_rets*);
+
+#else /* K&R C */
+extern bool_t xdr_rpc_loc_event_cb_f_type_args ();
+extern bool_t xdr_rpc_loc_event_cb_f_type_rets ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_LOC_API_CB_RPC_H_RPCGEN */
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_common_rpc.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_common_rpc.h
new file mode 100755
index 0000000..507103c
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_common_rpc.h
@@ -0,0 +1,1261 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _LOC_API_COMMON_RPC_H_RPCGEN
+#define _LOC_API_COMMON_RPC_H_RPCGEN
+
+#include "librpc.h"
+#include "commondefs_rpcgen_rpc.h"
+
+#include <pthread.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LOC_API_TOOLVERS 0x00040030
+#define LOC_API_FEATURES 0x00000001
+#define RPC_LOC_EVENT_STATUS_REPORT 0x00000100
+#define RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST 0x00000020
+#define RPC_LOC_EVENT_WPS_NEEDED_REQUEST 0x00000200
+#define RPC_LOC_EVENT_SATELLITE_REPORT 0x00000002
+#define RPC_LOC_EVENT_PARSED_POSITION_REPORT 0x00000001
+#define RPC_LOC_EVENT_RESERVED 0x8000000000000000
+#define RPC_LOC_EVENT_LOCATION_SERVER_REQUEST 0x00000040
+#define RPC_LOC_EVENT_NMEA_POSITION_REPORT 0x00000008
+#define RPC_LOC_EVENT_IOCTL_REPORT 0x00000080
+#define RPC_LOC_EVENT_NMEA_1HZ_REPORT 0x00000004
+#define RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST 0x00000010
+#define RPC_LOC_API_CB_NULL_VERSION 0x00050002
+#define RPC_LOC_EVENT_CB_F_TYPE_VERSION 0x00050001
+#define RPC_LOC_API_API_VERSIONS_VERSION 0x00050001
+#define RPC_LOC_STOP_FIX_VERSION 0x00050001
+#define RPC_LOC_START_FIX_VERSION 0x00050001
+#define RPC_LOC_IOCTL_VERSION 0x00050001
+#define RPC_LOC_CLOSE_VERSION 0x00050001
+#define RPC_LOC_API_RPC_GLUE_CODE_INFO_REMOTE_VERSION 0x00050001
+#define RPC_LOC_OPEN_VERSION 0x00050001
+#define RPC_LOC_API_NULL_VERSION 0x00050001
+#define RPC_LOC_API_API_MAJOR_NUM 0x0005
+#define RPC_LOC_APIAPI_VERSION_IS_HASHKEY 0
+
+typedef rpc_int32 rpc_loc_client_handle_type;
+
+typedef rpc_uint64 rpc_loc_event_mask_type;
+
+typedef rpc_uint64 rpc_loc_position_valid_mask_type;
+
+typedef rpc_uint32 rpc_loc_pos_technology_mask_type;
+
+enum rpc_loc_session_status_e_type {
+    RPC_LOC_SESS_STATUS_SUCCESS = 0,
+    RPC_LOC_SESS_STATUS_IN_PROGESS = 1,
+    RPC_LOC_SESS_STATUS_GENERAL_FAILURE = 2,
+    RPC_LOC_SESS_STATUS_TIMEOUT = 3,
+    RPC_LOC_SESS_STATUS_USER_END = 4,
+    RPC_LOC_SESS_STATUS_BAD_PARAMETER = 5,
+    RPC_LOC_SESS_STATUS_PHONE_OFFLINE = 6,
+    RPC_LOC_SESS_STATUS_ENGINE_LOCKED = 7,
+    RPC_LOC_SESS_STATUS_MAX = 268435456,
+};
+typedef enum rpc_loc_session_status_e_type rpc_loc_session_status_e_type;
+
+struct rpc_loc_calendar_time_s_type {
+    rpc_uint16 year;
+    u_char month;
+    u_char day_of_week;
+    u_char day;
+    u_char hour;
+    u_char minute;
+    u_char second;
+    rpc_uint16 millisecond;
+};
+typedef struct rpc_loc_calendar_time_s_type rpc_loc_calendar_time_s_type;
+
+struct rpc_loc_parsed_position_s_type {
+    rpc_loc_position_valid_mask_type valid_mask;
+    rpc_loc_session_status_e_type session_status;
+    rpc_loc_calendar_time_s_type timestamp_calendar;
+    rpc_uint64 timestamp_utc;
+    rpc_uint8 leap_seconds;
+    float time_unc;
+    double latitude;
+    double longitude;
+    float altitude_wrt_ellipsoid;
+    float altitude_wrt_mean_sea_level;
+    float speed_horizontal;
+    float speed_vertical;
+    float heading;
+    float hor_unc_circular;
+    float hor_unc_ellipse_semi_major;
+    float hor_unc_ellipse_semi_minor;
+    float hor_unc_ellipse_orient_azimuth;
+    float vert_unc;
+    float speed_unc;
+    float heading_unc;
+    u_char confidence_horizontal;
+    u_char confidence_vertical;
+    float magnetic_deviation;
+    rpc_loc_pos_technology_mask_type technology_mask;
+};
+typedef struct rpc_loc_parsed_position_s_type rpc_loc_parsed_position_s_type;
+
+enum rpc_loc_sv_system_e_type {
+    RPC_LOC_SV_SYSTEM_GPS = 1,
+    RPC_LOC_SV_SYSTEM_GALILEO = 2,
+    RPC_LOC_SV_SYSTEM_SBAS = 3,
+    RPC_LOC_SV_SYSTEM_COMPASS = 4,
+    RPC_LOC_SV_SYSTEM_GLONASS = 5,
+    RPC_LOC_SV_SYSTEM_MAX = 268435456,
+};
+typedef enum rpc_loc_sv_system_e_type rpc_loc_sv_system_e_type;
+
+enum rpc_loc_sv_status_e_type {
+    RPC_LOC_SV_STATUS_IDLE = 1,
+    RPC_LOC_SV_STATUS_SEARCH = 2,
+    RPC_LOC_SV_STATUS_TRACK = 3,
+    RPC_LOC_SV_STATUS_MAX = 268435456,
+};
+typedef enum rpc_loc_sv_status_e_type rpc_loc_sv_status_e_type;
+
+typedef rpc_uint32 rpc_loc_sv_info_valid_mask_type;
+
+struct rpc_loc_sv_info_s_type {
+    rpc_loc_sv_info_valid_mask_type valid_mask;
+    rpc_loc_sv_system_e_type system;
+    rpc_uint8 prn;
+    rpc_uint8 health_status;
+    rpc_loc_sv_status_e_type process_status;
+    rpc_boolean has_eph;
+    rpc_boolean has_alm;
+    float elevation;
+    float azimuth;
+    float snr;
+};
+typedef struct rpc_loc_sv_info_s_type rpc_loc_sv_info_s_type;
+
+typedef rpc_uint32 rpc_loc_gnss_info_valid_mask_type;
+
+struct rpc_loc_gnss_info_s_type {
+    rpc_loc_gnss_info_valid_mask_type valid_mask;
+    float position_dop;
+    float horizontal_dop;
+    float vertical_dop;
+    rpc_boolean altitude_assumed;
+    rpc_uint16 sv_count;
+    struct {
+        u_int sv_list_len;
+        rpc_loc_sv_info_s_type *sv_list_val;
+    } sv_list;
+};
+typedef struct rpc_loc_gnss_info_s_type rpc_loc_gnss_info_s_type;
+
+struct rpc_loc_nmea_report_s_type {
+    rpc_uint16 length;
+    char nmea_sentences[200];
+};
+typedef struct rpc_loc_nmea_report_s_type rpc_loc_nmea_report_s_type;
+
+enum rpc_loc_status_event_e_type {
+    RPC_LOC_STATUS_EVENT_ENGINE_STATE = 1,
+    RPC_LOC_STATUS_EVENT_FIX_SESSION_STATE = 2,
+    RPC_LOC_STATUS_EVENT_MAX = 268435456,
+};
+typedef enum rpc_loc_status_event_e_type rpc_loc_status_event_e_type;
+
+enum rpc_loc_engine_state_e_type {
+    RPC_LOC_ENGINE_STATE_ON = 1,
+    RPC_LOC_ENGINE_STATE_OFF = 2,
+    RPC_LOC_ENGINE_STATE_MAX = 268435456,
+};
+typedef enum rpc_loc_engine_state_e_type rpc_loc_engine_state_e_type;
+
+enum rpc_loc_fix_session_state_e_type {
+    RPC_LOC_FIX_SESSION_STATE_BEGIN = 1,
+    RPC_LOC_FIX_SESSION_STATE_END = 2,
+    RPC_LOC_FIX_SESSION_STATE_MAX = 268435456,
+};
+typedef enum rpc_loc_fix_session_state_e_type rpc_loc_fix_session_state_e_type;
+
+struct rpc_loc_status_event_payload_u_type {
+    rpc_loc_status_event_e_type disc;
+    union {
+        rpc_loc_engine_state_e_type engine_state;
+        rpc_loc_fix_session_state_e_type fix_session_state;
+    } rpc_loc_status_event_payload_u_type_u;
+};
+typedef struct rpc_loc_status_event_payload_u_type rpc_loc_status_event_payload_u_type;
+
+struct rpc_loc_status_event_s_type {
+    rpc_loc_status_event_e_type event;
+    rpc_loc_status_event_payload_u_type payload;
+};
+typedef struct rpc_loc_status_event_s_type rpc_loc_status_event_s_type;
+
+enum rpc_loc_server_addr_e_type {
+    RPC_LOC_SERVER_ADDR_IPV4 = 1,
+    RPC_LOC_SERVER_ADDR_URL = 2,
+    RPC_LOC_SERVER_ADDR_IPV6 = 3,
+    RPC_LOC_SERVER_ADDR_MAX = 268435456,
+};
+typedef enum rpc_loc_server_addr_e_type rpc_loc_server_addr_e_type;
+
+struct rpc_loc_server_addr_ipv4_type {
+    rpc_uint32 addr;
+    rpc_uint16 port;
+};
+typedef struct rpc_loc_server_addr_ipv4_type rpc_loc_server_addr_ipv4_type;
+
+struct rpc_loc_server_addr_url_type {
+    rpc_uint16 length;
+    char addr[256];
+};
+typedef struct rpc_loc_server_addr_url_type rpc_loc_server_addr_url_type;
+
+struct rpc_loc_server_addr_ipv6_type {
+    rpc_uint16 addr[8];
+    rpc_uint32 port;
+};
+typedef struct rpc_loc_server_addr_ipv6_type rpc_loc_server_addr_ipv6_type;
+
+struct rpc_loc_server_addr_u_type {
+    rpc_loc_server_addr_e_type disc;
+    union {
+        rpc_loc_server_addr_ipv4_type ipv4;
+        rpc_loc_server_addr_url_type url;
+        rpc_loc_server_addr_ipv6_type ipv6;
+    } rpc_loc_server_addr_u_type_u;
+};
+typedef struct rpc_loc_server_addr_u_type rpc_loc_server_addr_u_type;
+
+struct rpc_loc_server_info_s_type {
+    rpc_loc_server_addr_e_type addr_type;
+    rpc_loc_server_addr_u_type addr_info;
+};
+typedef struct rpc_loc_server_info_s_type rpc_loc_server_info_s_type;
+
+enum rpc_loc_ni_notify_verify_e_type {
+    RPC_LOC_NI_USER_NO_NOTIFY_NO_VERIFY = 1,
+    RPC_LOC_NI_USER_NOTIFY_ONLY = 2,
+    RPC_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP = 3,
+    RPC_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP = 4,
+    RPC_LOC_NI_USER_PRIVACY_OVERRIDE = 5,
+    RPC_LOC_NI_USER_NOTIFY_VERITY_TYPE_MAX = 268435456,
+};
+typedef enum rpc_loc_ni_notify_verify_e_type rpc_loc_ni_notify_verify_e_type;
+
+enum rpc_loc_ni_event_e_type {
+    RPC_LOC_NI_EVENT_VX_NOTIFY_VERIFY_REQ = 1,
+    RPC_LOC_NI_EVENT_SUPL_NOTIFY_VERIFY_REQ = 2,
+    RPC_LOC_NI_EVENT_UMTS_CP_NOTIFY_VERIFY_REQ = 3,
+    RPC_LOC_NI_EVENT_VX_SERVICE_INTERACTION_REQ = 4,
+    RPC_LOC_NI_EVENT_MAX = 268435456,
+};
+typedef enum rpc_loc_ni_event_e_type rpc_loc_ni_event_e_type;
+
+enum rpc_loc_ni_datacoding_scheme_e_type {
+    RPC_LOC_NI_PRESUPL_ISO646IRV = 0,
+    RPC_LOC_NI_PRESUPL_ISO8859 = 1,
+    RPC_LOC_NI_PRESUPL_UTF8 = 2,
+    RPC_LOC_NI_PRESUPL_UTF16 = 3,
+    RPC_LOC_NI_PRESUPL_UCS2 = 4,
+    RPC_LOC_NI_PRESUPL_GSM_DEFAULT = 5,
+    RPC_LOC_NI_PRESUPL_SHIFT_JIS = 6,
+    RPC_LOC_NI_PRESUPL_JIS = 7,
+    RPC_LOC_NI_PRESUPL_EUC = 8,
+    RPC_LOC_NI_PRESUPL_GB2312 = 9,
+    RPC_LOC_NI_PRESUPL_CNS11643 = 10,
+    RPC_LOC_NI_PRESUPL_KSC1001 = 11,
+    RPC_LOC_NI_PRESUPL_ENCODING_UNKNOWN = 2147483647,
+    RPC_LOC_NI_SS_GERMAN = 12,
+    RPC_LOC_NI_SS_ENGLISH = 13,
+    RPC_LOC_NI_SS_ITALIAN = 14,
+    RPC_LOC_NI_SS_FRENCH = 15,
+    RPC_LOC_NI_SS_SPANISH = 16,
+    RPC_LOC_NI_SS_DUTCH = 17,
+    RPC_LOC_NI_SS_SWEDISH = 18,
+    RPC_LOC_NI_SS_DANISH = 19,
+    RPC_LOC_NI_SS_PORTUGUESE = 20,
+    RPC_LOC_NI_SS_FINNISH = 21,
+    RPC_LOC_NI_SS_NORWEGIAN = 22,
+    RPC_LOC_NI_SS_GREEK = 23,
+    RPC_LOC_NI_SS_TURKISH = 24,
+    RPC_LOC_NI_SS_HUNGARIAN = 25,
+    RPC_LOC_NI_SS_POLISH = 26,
+    RPC_LOC_NI_SS_LANGUAGE_UNSPEC = 27,
+    RPC_LOC_NI_SUPL_UTF8 = 28,
+    RPC_LOC_NI_SUPL_UCS2 = 29,
+    RPC_LOC_NI_SUPL_GSM_DEFAULT = 30,
+    RPC_LOC_NI_SUPL_ENCODING_UNKNOWN = 2147483647,
+};
+typedef enum rpc_loc_ni_datacoding_scheme_e_type rpc_loc_ni_datacoding_scheme_e_type;
+
+enum rpc_loc_ni_vx_requester_id_encoding_scheme_e_type {
+    RPC_LOC_NI_VX_OCTET = 0,
+    RPC_LOC_NI_VX_EXN_PROTOCOL_MSG = 1,
+    RPC_LOC_NI_VX_ASCII = 2,
+    RPC_LOC_NI_VX_IA5 = 3,
+    RPC_LOC_NI_VX_UNICODE = 4,
+    RPC_LOC_NI_VX_SHIFT_JIS = 5,
+    RPC_LOC_NI_VX_KOREAN = 6,
+    RPC_LOC_NI_VX_LATIN_HEBREW = 7,
+    RPC_LOC_NI_VX_LATIN = 8,
+    RPC_LOC_NI_VX_GSM = 9,
+    RPC_LOC_NI_VX_ENCODING_TYPE_MAX = 268435456,
+};
+typedef enum rpc_loc_ni_vx_requester_id_encoding_scheme_e_type rpc_loc_ni_vx_requester_id_encoding_scheme_e_type;
+
+enum rpc_loc_ni_vx_pos_mode_e_type {
+    RPC_LOC_VX_MS_ASSISTED_ONLY = 1,
+    RPC_LOC_VX_MS_BASED_ONLY = 2,
+    RPC_LOC_VX_MS_ASSISTED_PREF_MSBASED_ALLWD = 3,
+    RPC_LOC_VX_MS_BASED_PREF_ASSISTED_ALLWD = 4,
+    RPC_LOC_VX_POS_MODE_MAX = 268435456,
+};
+typedef enum rpc_loc_ni_vx_pos_mode_e_type rpc_loc_ni_vx_pos_mode_e_type;
+
+struct rpc_loc_ni_vx_requester_id_s_type {
+    u_char requester_id_length;
+    char requester_id[200];
+};
+typedef struct rpc_loc_ni_vx_requester_id_s_type rpc_loc_ni_vx_requester_id_s_type;
+
+struct rpc_loc_ni_vx_notify_verify_req_s_type {
+    rpc_loc_ni_notify_verify_e_type notification_priv_type;
+    u_char pos_qos_incl;
+    u_char pos_qos;
+    rpc_uint32 num_fixes;
+    rpc_uint32 tbf;
+    rpc_loc_ni_vx_pos_mode_e_type pos_mode;
+    rpc_loc_ni_vx_requester_id_encoding_scheme_e_type encoding_scheme;
+    rpc_loc_ni_vx_requester_id_s_type requester_id;
+    rpc_uint16 user_resp_timer_val;
+};
+typedef struct rpc_loc_ni_vx_notify_verify_req_s_type rpc_loc_ni_vx_notify_verify_req_s_type;
+
+enum rpc_loc_ni_supl_pos_method_e_type {
+    RPC_LOC_NI_POSMETHOD_AGPS_SETASSISTED = 1,
+    RPC_LOC_NI_POSMETHOD_AGPS_SETBASED = 2,
+    RPC_LOC_NI_POSMETHOD_AGPS_SETASSISTED_PREF = 3,
+    RPC_LOC_NI_POSMETHOD_AGPS_SETBASED_PREF = 4,
+    RPC_LOC_NI_POSMETHOD_AUTONOMOUS_GPS = 5,
+    RPC_LOC_NI_POSMETHOD_AFLT = 6,
+    RPC_LOC_NI_POSMETHOD_ECID = 7,
+    RPC_LOC_NI_POSMETHOD_EOTD = 8,
+    RPC_LOC_NI_POSMETHOD_OTDOA = 9,
+    RPC_LOC_NI_POSMETHOD_NO_POSITION = 10,
+    RPC_LOC_NI_POSMETHOD_MAX = 268435456,
+};
+typedef enum rpc_loc_ni_supl_pos_method_e_type rpc_loc_ni_supl_pos_method_e_type;
+
+struct rpc_loc_ni_supl_slp_session_id_s_type {
+    u_char presence;
+    char session_id[4];
+    rpc_loc_server_info_s_type slp_address;
+};
+typedef struct rpc_loc_ni_supl_slp_session_id_s_type rpc_loc_ni_supl_slp_session_id_s_type;
+
+struct rpc_loc_ni_requestor_id_s_type {
+    u_char data_coding_scheme;
+    char requestor_id_string[200];
+    u_char string_len;
+};
+typedef struct rpc_loc_ni_requestor_id_s_type rpc_loc_ni_requestor_id_s_type;
+
+struct rpc_loc_ni_supl_client_name_s_type {
+    u_char data_coding_scheme;
+    char client_name_string[64];
+    u_char string_len;
+};
+typedef struct rpc_loc_ni_supl_client_name_s_type rpc_loc_ni_supl_client_name_s_type;
+
+struct rpc_loc_ni_supl_qop_s_type {
+    u_char bit_mask;
+    u_char horacc;
+    u_char veracc;
+    rpc_uint16 maxLocAge;
+    u_char delay;
+};
+typedef struct rpc_loc_ni_supl_qop_s_type rpc_loc_ni_supl_qop_s_type;
+
+struct rpc_loc_ni_supl_notify_verify_req_s_type {
+    rpc_loc_ni_notify_verify_e_type notification_priv_type;
+    rpc_uint16 flags;
+    rpc_loc_ni_supl_slp_session_id_s_type supl_slp_session_id;
+    char supl_hash[8];
+    rpc_loc_ni_datacoding_scheme_e_type datacoding_scheme;
+    rpc_loc_ni_supl_pos_method_e_type pos_method;
+    rpc_loc_ni_requestor_id_s_type requestor_id;
+    rpc_loc_ni_supl_client_name_s_type client_name;
+    rpc_loc_ni_supl_qop_s_type supl_qop;
+    rpc_uint16 user_response_timer;
+};
+typedef struct rpc_loc_ni_supl_notify_verify_req_s_type rpc_loc_ni_supl_notify_verify_req_s_type;
+
+struct rpc_loc_ni_ext_client_address_s_type {
+    u_char ext_client_address_len;
+    char ext_client_address[20];
+};
+typedef struct rpc_loc_ni_ext_client_address_s_type rpc_loc_ni_ext_client_address_s_type;
+
+enum rpc_loc_ni_location_type_e_type {
+    RPC_LOC_NI_LOCATIONTYPE_CURRENT_LOCATION = 1,
+    RPC_LOC_NI_LOCATIONTYPE_CURRENT_OR_LAST_KNOWN_LOCATION = 2,
+    RPC_LOC_NI_LOCATIONTYPE_INITIAL_LOCATION = 3,
+    RPC_LOC_NI_LOCATIONTYPE_MAX = 268435456,
+};
+typedef enum rpc_loc_ni_location_type_e_type rpc_loc_ni_location_type_e_type;
+
+struct rpc_loc_ni_deferred_location_s_type {
+    u_char unused_bits;
+    u_char ms_available;
+};
+typedef struct rpc_loc_ni_deferred_location_s_type rpc_loc_ni_deferred_location_s_type;
+
+struct rpc_loc_ni_codeword_string_s_type {
+    u_char data_coding_scheme;
+    char lcs_codeword_string[20];
+    u_char string_len;
+};
+typedef struct rpc_loc_ni_codeword_string_s_type rpc_loc_ni_codeword_string_s_type;
+
+struct rpc_loc_ni_service_type_id_s_type {
+    u_char lcs_service_type_id;
+};
+typedef struct rpc_loc_ni_service_type_id_s_type rpc_loc_ni_service_type_id_s_type;
+
+struct rpc_loc_ni_umts_cp_notify_verify_req_s_type {
+    rpc_loc_ni_notify_verify_e_type notification_priv_type;
+    u_char invoke_id;
+    rpc_uint16 flags;
+    u_char notification_length;
+    char notification_text[64];
+    rpc_loc_ni_datacoding_scheme_e_type datacoding_scheme;
+    rpc_loc_ni_ext_client_address_s_type ext_client_address_data;
+    rpc_loc_ni_location_type_e_type location_type;
+    rpc_loc_ni_deferred_location_s_type deferred_location;
+    rpc_loc_ni_requestor_id_s_type requestor_id;
+    rpc_loc_ni_codeword_string_s_type codeword_string;
+    rpc_loc_ni_service_type_id_s_type service_type_id;
+    rpc_uint16 user_response_timer;
+};
+typedef struct rpc_loc_ni_umts_cp_notify_verify_req_s_type rpc_loc_ni_umts_cp_notify_verify_req_s_type;
+
+enum rpc_loc_ni_service_interaction_e_type {
+    RPC_LOC_NI_SERVICE_INTERACTION_ONGOING_NI_INCOMING_MO = 1,
+    RPC_LOC_NI_SERVICE_INTERACTION_MAX = 268435456,
+};
+typedef enum rpc_loc_ni_service_interaction_e_type rpc_loc_ni_service_interaction_e_type;
+
+struct rpc_loc_ni_vx_service_interaction_req_s_type {
+    rpc_loc_ni_vx_notify_verify_req_s_type ni_vx_req;
+    rpc_loc_ni_service_interaction_e_type service_interation_type;
+};
+typedef struct rpc_loc_ni_vx_service_interaction_req_s_type rpc_loc_ni_vx_service_interaction_req_s_type;
+
+struct rpc_loc_ni_event_payload_u_type {
+    rpc_loc_ni_event_e_type disc;
+    union {
+        rpc_loc_ni_vx_notify_verify_req_s_type vx_req;
+        rpc_loc_ni_supl_notify_verify_req_s_type supl_req;
+        rpc_loc_ni_umts_cp_notify_verify_req_s_type umts_cp_req;
+        rpc_loc_ni_vx_service_interaction_req_s_type service_interaction_req;
+    } rpc_loc_ni_event_payload_u_type_u;
+};
+typedef struct rpc_loc_ni_event_payload_u_type rpc_loc_ni_event_payload_u_type;
+
+struct rpc_loc_ni_event_s_type {
+    rpc_loc_ni_event_e_type event;
+    rpc_loc_ni_event_payload_u_type payload;
+};
+typedef struct rpc_loc_ni_event_s_type rpc_loc_ni_event_s_type;
+
+enum rpc_loc_assist_data_request_e_type {
+    RPC_LOC_ASSIST_DATA_TIME_REQ = 1,
+    RPC_LOC_ASSIST_DATA_PREDICTED_ORBITS_REQ = 2,
+    RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ = 3,
+    RPC_LOC_ASSIST_DATA_MAX = 268435456,
+};
+typedef enum rpc_loc_assist_data_request_e_type rpc_loc_assist_data_request_e_type;
+
+typedef char *rpc_struct_loc_time_download_source_s_type_servers_ptr;
+
+typedef rpc_struct_loc_time_download_source_s_type_servers_ptr rpc_struct_loc_time_download_source_s_type_servers[3];
+
+struct rpc_loc_time_download_source_s_type {
+    rpc_uint32 delay_threshold;
+    rpc_struct_loc_time_download_source_s_type_servers servers;
+};
+typedef struct rpc_loc_time_download_source_s_type rpc_loc_time_download_source_s_type;
+
+typedef char *rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr;
+
+typedef rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr rpc_struct_loc_predicted_orbits_data_source_s_type_servers[3];
+
+struct rpc_loc_predicted_orbits_data_source_s_type {
+    rpc_uint32 max_file_size;
+    rpc_uint32 max_part_size;
+    rpc_struct_loc_predicted_orbits_data_source_s_type_servers servers;
+};
+typedef struct rpc_loc_predicted_orbits_data_source_s_type rpc_loc_predicted_orbits_data_source_s_type;
+
+struct rpc_loc_pos_inj_request_s_type {
+    rpc_uint32 flags;
+    double latitude;
+    double longitude;
+    rpc_uint32 position_uncertainty;
+    rpc_uint64 timestamp;
+};
+typedef struct rpc_loc_pos_inj_request_s_type rpc_loc_pos_inj_request_s_type;
+
+struct rpc_loc_assist_data_request_payload_u_type {
+    rpc_loc_assist_data_request_e_type disc;
+    union {
+        rpc_loc_time_download_source_s_type time_download;
+        rpc_loc_predicted_orbits_data_source_s_type data_download;
+        rpc_loc_pos_inj_request_s_type pos_injection;
+    } rpc_loc_assist_data_request_payload_u_type_u;
+};
+typedef struct rpc_loc_assist_data_request_payload_u_type rpc_loc_assist_data_request_payload_u_type;
+
+struct rpc_loc_assist_data_request_s_type {
+    rpc_loc_assist_data_request_e_type event;
+    rpc_loc_assist_data_request_payload_u_type payload;
+};
+typedef struct rpc_loc_assist_data_request_s_type rpc_loc_assist_data_request_s_type;
+
+typedef rpc_uint32 rpc_loc_server_connection_handle;
+
+enum rpc_loc_server_protocol_e_type {
+    RPC_LOC_SERVER_PROTOCOL_DEFAULT = 0,
+    RPC_LOC_SERVER_PROTOCOL_SUPL = 1,
+    RPC_LOC_SERVER_PROTOCOL_VX_MPC = 2,
+    RPC_LOC_SERVER_PROTOCOL_VX_PDE = 3,
+    RPC_LOC_SERVER_PROTOCOL_MAX = 16777216,
+};
+typedef enum rpc_loc_server_protocol_e_type rpc_loc_server_protocol_e_type;
+
+enum rpc_loc_server_connection_e_type {
+    RPC_LOC_SERVER_CONNECTION_LBS = 0,
+    RPC_LOC_SERVER_CONNECTION_WWAN_INTERNET = 0 + 1,
+    RPC_LOC_SERVER_CONNECTION_MAX = 16777216,
+};
+typedef enum rpc_loc_server_connection_e_type rpc_loc_server_connection_e_type;
+
+enum rpc_loc_server_request_e_type {
+    RPC_LOC_SERVER_REQUEST_OPEN = 1,
+    RPC_LOC_SERVER_REQUEST_CLOSE = 2,
+    RPC_LOC_SERVER_REQUEST_MULTI_OPEN = 3,
+    RPC_LOC_SERVER_REQUEST_MAX = 268435456,
+};
+typedef enum rpc_loc_server_request_e_type rpc_loc_server_request_e_type;
+
+struct rpc_loc_server_open_req_s_type {
+    rpc_loc_server_connection_handle conn_handle;
+    rpc_loc_server_protocol_e_type protocol;
+};
+typedef struct rpc_loc_server_open_req_s_type rpc_loc_server_open_req_s_type;
+
+struct rpc_loc_server_multi_open_req_s_type {
+    rpc_loc_server_connection_handle conn_handle;
+    rpc_loc_server_protocol_e_type protocol;
+    rpc_loc_server_connection_e_type connection_type;
+};
+typedef struct rpc_loc_server_multi_open_req_s_type rpc_loc_server_multi_open_req_s_type;
+
+struct rpc_loc_server_close_req_s_type {
+    rpc_loc_server_connection_handle conn_handle;
+};
+typedef struct rpc_loc_server_close_req_s_type rpc_loc_server_close_req_s_type;
+
+struct rpc_loc_server_request_u_type {
+    rpc_loc_server_request_e_type disc;
+    union {
+        rpc_loc_server_open_req_s_type open_req;
+        rpc_loc_server_close_req_s_type close_req;
+        rpc_loc_server_multi_open_req_s_type multi_open_req;
+    } rpc_loc_server_request_u_type_u;
+};
+typedef struct rpc_loc_server_request_u_type rpc_loc_server_request_u_type;
+
+struct rpc_loc_server_request_s_type {
+    rpc_loc_server_request_e_type event;
+    rpc_loc_server_request_u_type payload;
+};
+typedef struct rpc_loc_server_request_s_type rpc_loc_server_request_s_type;
+
+enum rpc_loc_qwip_request_e_type {
+    RPC_LOC_QWIP_START_PERIODIC_HI_FREQ_FIXES = 0,
+    RPC_LOC_QWIP_START_PERIODIC_KEEP_WARM = 0 + 1,
+    RPC_LOC_QWIP_STOP_PERIODIC_FIXES = 0 + 2,
+    RPC_LOC_QWIP_SUSPEND = 0 + 3,
+    RPC_LOC_QWIP_REQUEST_MAX = 268435456,
+};
+typedef enum rpc_loc_qwip_request_e_type rpc_loc_qwip_request_e_type;
+
+struct rpc_loc_qwip_request_s_type {
+    rpc_loc_qwip_request_e_type request_type;
+    rpc_uint16 tbf_ms;
+};
+typedef struct rpc_loc_qwip_request_s_type rpc_loc_qwip_request_s_type;
+
+struct rpc_loc_reserved_payload_s_type {
+    rpc_uint16 data_size;
+    struct {
+        u_int data_len;
+        char *data_val;
+    } data;
+};
+typedef struct rpc_loc_reserved_payload_s_type rpc_loc_reserved_payload_s_type;
+
+enum rpc_loc_ioctl_e_type {
+    RPC_LOC_IOCTL_GET_API_VERSION = 1,
+    RPC_LOC_IOCTL_SET_FIX_CRITERIA = 2,
+    RPC_LOC_IOCTL_GET_FIX_CRITERIA = 3,
+    RPC_LOC_IOCTL_SERVICE_START_INDEX = 400,
+    RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE = 400,
+    RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA = 401,
+    RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_VALIDITY = 402,
+    RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE = 403,
+    RPC_LOC_IOCTL_SET_PREDICTED_ORBITS_DATA_AUTO_DOWNLOAD = 404,
+    RPC_LOC_IOCTL_INJECT_UTC_TIME = 405,
+    RPC_LOC_IOCTL_INJECT_RTC_VALUE = 406,
+    RPC_LOC_IOCTL_INJECT_POSITION = 407,
+    RPC_LOC_IOCTL_QUERY_ENGINE_STATE = 408,
+    RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS = 409,
+    RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS = 410,
+    RPC_LOC_IOCTL_SEND_WIPER_POSITION_REPORT = 411,
+    RPC_LOC_IOCTL_NOTIFY_WIPER_STATUS = 412,
+    RPC_LOC_IOCTL_ACCESS_EFS_DATA = 413,
+    RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG = 414,
+    RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS = 415,
+    RPC_LOC_IOCTL_NV_SETTINGS_START_INDEX = 800,
+    RPC_LOC_IOCTL_SET_ENGINE_LOCK = 800,
+    RPC_LOC_IOCTL_GET_ENGINE_LOCK = 801,
+    RPC_LOC_IOCTL_SET_SBAS_CONFIG = 802,
+    RPC_LOC_IOCTL_GET_SBAS_CONFIG = 803,
+    RPC_LOC_IOCTL_SET_NMEA_TYPES = 804,
+    RPC_LOC_IOCTL_GET_NMEA_TYPES = 805,
+    RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR = 806,
+    RPC_LOC_IOCTL_GET_CDMA_PDE_SERVER_ADDR = 807,
+    RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR = 808,
+    RPC_LOC_IOCTL_GET_CDMA_MPC_SERVER_ADDR = 809,
+    RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR = 810,
+    RPC_LOC_IOCTL_GET_UMTS_SLP_SERVER_ADDR = 811,
+    RPC_LOC_IOCTL_SET_ON_DEMAND_LPM = 812,
+    RPC_LOC_IOCTL_GET_ON_DEMAND_LPM = 813,
+    RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL = 814,
+    RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL = 815,
+    RPC_LOC_IOCTL_SET_LBS_APN_PROFILE = 816,
+    RPC_LOC_IOCTL_GET_LBS_APN_PROFILE = 817,
+    RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE = 818,
+    RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE = 819,
+    RPC_LOC_IOCTL_SET_DATA_ENABLE = 820,
+    RPC_LOC_IOCTL_SET_SUPL_VERSION = 821,
+    RPC_LOC_IOCTL_GET_SUPL_VERSION = 822,
+    RPC_LOC_IOCTL_PROPRIETARY_START_INDEX = 1000,
+    RPC_LOC_IOCTL_DELETE_ASSIST_DATA = 1000,
+    RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR = 1001,
+    RPC_LOC_IOCTL_GET_CUSTOM_PDE_SERVER_ADDR = 1002,
+    RPC_LOC_IOCTL_RESERVED_CMD = 8000,
+    RPC_LOC_IOCTL_THIRD_PARTY_START_INDEX = 1073741824,
+};
+typedef enum rpc_loc_ioctl_e_type rpc_loc_ioctl_e_type;
+
+struct rpc_loc_api_version_s_type {
+    u_char major;
+    u_char minor;
+};
+typedef struct rpc_loc_api_version_s_type rpc_loc_api_version_s_type;
+
+enum rpc_loc_fix_recurrence_e_type {
+    RPC_LOC_PERIODIC_FIX = 1,
+    RPC_LOC_SINGLE_FIX = 2,
+    RPC_LOC_FIX_SESSION_TYPE_MAX = 268435456,
+};
+typedef enum rpc_loc_fix_recurrence_e_type rpc_loc_fix_recurrence_e_type;
+
+enum rpc_loc_operation_mode_e_type {
+    RPC_LOC_OPER_MODE_DEFAULT = 1,
+    RPC_LOC_OPER_MODE_MSB = 2,
+    RPC_LOC_OPER_MODE_MSA = 3,
+    RPC_LOC_OPER_MODE_STANDALONE = 4,
+    RPC_LOC_OPER_MODE_SPEED_OPTIMAL = 5,
+    RPC_LOC_OPER_MODE_ACCURACY_OPTIMAL = 6,
+    RPC_LOC_OPER_MODE_DATA_OPTIMAL = 7,
+    RPC_LOC_OPER_MODE_CELL_ID = 8,
+    RPC_LOC_OPER_MODE_MAX = 268435456,
+};
+typedef enum rpc_loc_operation_mode_e_type rpc_loc_operation_mode_e_type;
+
+enum rpc_loc_notify_e_type {
+    RPC_LOC_NOTIFY_ON_INTERVAL = 1,
+    RPC_LOC_NOTIFY_ON_DISTANCE = 2,
+    RPC_LOC_NOTIFY_ON_ANY = 3,
+    RPC_LOC_NOTIFY_ON_ALL = 4,
+    RPC_LOC_NOTIFY_TYPE_MAX = 268435456,
+};
+typedef enum rpc_loc_notify_e_type rpc_loc_notify_e_type;
+
+struct rpc_loc_fix_criteria_s_type {
+    rpc_uint32 valid_mask;
+    rpc_loc_fix_recurrence_e_type recurrence_type;
+    rpc_loc_operation_mode_e_type preferred_operation_mode;
+    rpc_uint32 preferred_accuracy;
+    rpc_uint32 preferred_response_time;
+    rpc_boolean intermediate_pos_report_enabled;
+    rpc_loc_notify_e_type notify_type;
+    rpc_uint32 min_interval;
+    float min_distance;
+    rpc_uint32 min_dist_sample_interval;
+};
+typedef struct rpc_loc_fix_criteria_s_type rpc_loc_fix_criteria_s_type;
+
+enum rpc_loc_ni_user_resp_e_type {
+    RPC_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT = 1,
+    RPC_LOC_NI_LCS_NOTIFY_VERIFY_DENY = 2,
+    RPC_LOC_NI_LCS_NOTIFY_VERIFY_NORESP = 3,
+    RPC_LOC_NI_LCS_NOTIFY_VERIFY_MAX = 268435456,
+};
+typedef enum rpc_loc_ni_user_resp_e_type rpc_loc_ni_user_resp_e_type;
+
+struct rpc_loc_user_verify_s_type {
+    rpc_loc_ni_user_resp_e_type user_resp;
+    rpc_loc_ni_event_s_type ni_event_pass_back;
+};
+typedef struct rpc_loc_user_verify_s_type rpc_loc_user_verify_s_type;
+
+enum rpc_loc_predicted_orbits_data_format_e_type {
+    RPC_LOC_PREDICTED_ORBITS_XTRA = 0,
+    RPC_LOC_PREDICTED_ORBITS_FORMAT_MAX = 268435456,
+};
+typedef enum rpc_loc_predicted_orbits_data_format_e_type rpc_loc_predicted_orbits_data_format_e_type;
+
+struct rpc_loc_predicted_orbits_data_s_type {
+    rpc_loc_predicted_orbits_data_format_e_type format_type;
+    rpc_uint32 total_size;
+    rpc_uint8 total_parts;
+    rpc_uint8 part;
+    rpc_uint16 part_len;
+    struct {
+        u_int data_ptr_len;
+        char *data_ptr_val;
+    } data_ptr;
+};
+typedef struct rpc_loc_predicted_orbits_data_s_type rpc_loc_predicted_orbits_data_s_type;
+
+struct rpc_loc_predicted_orbits_data_validity_report_s_type {
+    rpc_uint64 start_time_utc;
+    rpc_uint16 valid_duration_hrs;
+};
+typedef struct rpc_loc_predicted_orbits_data_validity_report_s_type rpc_loc_predicted_orbits_data_validity_report_s_type;
+
+struct rpc_loc_predicted_orbits_auto_download_config_s_type {
+    rpc_boolean enable;
+    u_char auto_check_every_hrs;
+};
+typedef struct rpc_loc_predicted_orbits_auto_download_config_s_type rpc_loc_predicted_orbits_auto_download_config_s_type;
+
+struct rpc_loc_assist_data_time_s_type {
+    rpc_uint64 time_utc;
+    rpc_uint32 uncertainty;
+};
+typedef struct rpc_loc_assist_data_time_s_type rpc_loc_assist_data_time_s_type;
+
+typedef rpc_uint64 rpc_loc_assist_pos_valid_mask_type;
+
+struct rpc_loc_assist_data_pos_s_type {
+    rpc_loc_assist_pos_valid_mask_type valid_mask;
+    rpc_uint64 timestamp_utc;
+    double latitude;
+    double longitude;
+    float altitude_wrt_ellipsoid;
+    float altitude_wrt_mean_sea_level;
+    float hor_unc_circular;
+    float vert_unc;
+    u_char confidence_horizontal;
+    u_char confidence_vertical;
+    rpc_int32 timestamp_age;
+};
+typedef struct rpc_loc_assist_data_pos_s_type rpc_loc_assist_data_pos_s_type;
+
+enum rpc_loc_server_open_status_e_type {
+    RPC_LOC_SERVER_OPEN_SUCCESS = 1,
+    RPC_LOC_SERVER_OPEN_FAIL = 2,
+    RPC_LOC_SERVER_OPEN_STATUS_MAX = 268435456,
+};
+typedef enum rpc_loc_server_open_status_e_type rpc_loc_server_open_status_e_type;
+
+enum rpc_loc_server_pdp_type_e_type {
+    RPC_LOC_SERVER_PDP_IP = 0,
+    RPC_LOC_SERVER_PDP_PPP = 0 + 1,
+    RPC_LOC_SERVER_PDP_IPV6 = 0 + 2,
+    RPC_LOC_SERVER_PDP_IPV4V6 = 0 + 3,
+    RPC_LOC_SERVER_PDP_MAX = 268435456,
+};
+typedef enum rpc_loc_server_pdp_type_e_type rpc_loc_server_pdp_type_e_type;
+
+struct rpc_loc_server_open_status_s_type {
+    rpc_loc_server_connection_handle conn_handle;
+    rpc_loc_server_open_status_e_type open_status;
+    char apn_name[100];
+};
+typedef struct rpc_loc_server_open_status_s_type rpc_loc_server_open_status_s_type;
+
+struct rpc_loc_server_multi_open_status_s_type {
+    rpc_loc_server_connection_handle conn_handle;
+    rpc_loc_server_open_status_e_type open_status;
+    rpc_loc_server_pdp_type_e_type pdp_type;
+    char apn_name[100];
+};
+typedef struct rpc_loc_server_multi_open_status_s_type rpc_loc_server_multi_open_status_s_type;
+
+enum rpc_loc_server_close_status_e_type {
+    RPC_LOC_SERVER_CLOSE_SUCCESS = 1,
+    RPC_LOC_SERVER_CLOSE_FAIL = 2,
+    RPC_LOC_SERVER_CLOSE_STATUS_MAX = 268435456,
+};
+typedef enum rpc_loc_server_close_status_e_type rpc_loc_server_close_status_e_type;
+
+struct rpc_loc_server_close_status_s_type {
+    rpc_loc_server_connection_handle conn_handle;
+    rpc_loc_server_close_status_e_type close_status;
+};
+typedef struct rpc_loc_server_close_status_s_type rpc_loc_server_close_status_s_type;
+
+struct rpc_loc_wiper_fix_time_s_type {
+    rpc_uint32 slow_clock_count;
+};
+typedef struct rpc_loc_wiper_fix_time_s_type rpc_loc_wiper_fix_time_s_type;
+
+struct rpc_loc_wiper_fix_pos_s_type {
+    rpc_int32 lat;
+    rpc_int32 lon;
+    rpc_uint16 HEPE;
+    rpc_uint8 num_of_aps_used;
+    rpc_uint8 fix_error_code;
+};
+typedef struct rpc_loc_wiper_fix_pos_s_type rpc_loc_wiper_fix_pos_s_type;
+
+struct rpc_loc_wiper_ap_info_s_type {
+    char mac_addr[6];
+    rpc_int32 rssi;
+    rpc_uint16 channel;
+    rpc_uint8 ap_qualifier;
+};
+typedef struct rpc_loc_wiper_ap_info_s_type rpc_loc_wiper_ap_info_s_type;
+
+struct rpc_loc_wiper_ap_set_s_type {
+    rpc_uint8 num_of_aps;
+    rpc_loc_wiper_ap_info_s_type ap_info[50];
+};
+typedef struct rpc_loc_wiper_ap_set_s_type rpc_loc_wiper_ap_set_s_type;
+
+struct rpc_loc_wiper_position_report_s_type {
+    rpc_uint8 wiper_valid_info_flag;
+    rpc_loc_wiper_fix_time_s_type wiper_fix_time;
+    rpc_loc_wiper_fix_pos_s_type wiper_fix_position;
+    rpc_loc_wiper_ap_set_s_type wiper_ap_set;
+};
+typedef struct rpc_loc_wiper_position_report_s_type rpc_loc_wiper_position_report_s_type;
+
+enum rpc_loc_wiper_status_e_type {
+    RPC_LOC_WIPER_STATUS_AVAILABLE = 1,
+    RPC_LOC_WIPER_STATUS_UNAVAILABLE = 2,
+    RPC_LOC_WIPER_STATUS_E_SIZE = 268435456,
+};
+typedef enum rpc_loc_wiper_status_e_type rpc_loc_wiper_status_e_type;
+
+enum rpc_loc_fs_operation_e_type {
+    RPC_LOC_FS_CREATE_WRITE_FILE = 1,
+    RPC_LOC_FS_APPEND_FILE = 2,
+    RPC_LOC_FS_DELETE_FILE = 3,
+    RPC_LOC_FS_READ_FILE = 4,
+    RPC_LOC_FS_MAX = 268435456,
+};
+typedef enum rpc_loc_fs_operation_e_type rpc_loc_fs_operation_e_type;
+
+struct rpc_loc_efs_data_s_type {
+    char filename[64];
+    rpc_loc_fs_operation_e_type operation;
+    rpc_uint32 total_size;
+    struct {
+        u_int data_ptr_len;
+        char *data_ptr_val;
+    } data_ptr;
+    rpc_uint32 part_len;
+    rpc_uint8 part;
+    rpc_uint8 total_parts;
+    rpc_uint32 reserved;
+};
+typedef struct rpc_loc_efs_data_s_type rpc_loc_efs_data_s_type;
+
+enum rpc_loc_error_estimate_config_e_type {
+    RPC_LOC_ERROR_ESTIMATE_CONFIG_SET = 1,
+    RPC_LOC_ERROR_ESTIMATE_CONFIG_CLEAR = 2,
+    RPC_LOC_ERROR_ESTIMATE_MAX = 268435456,
+};
+typedef enum rpc_loc_error_estimate_config_e_type rpc_loc_error_estimate_config_e_type;
+
+struct rpc_loc_apn_profiles_type {
+    rpc_uint32 srv_system_type;
+    rpc_uint32 pdp_type;
+    rpc_uint32 reserved;
+    char apn_name[100];
+};
+typedef struct rpc_loc_apn_profiles_type rpc_loc_apn_profiles_type;
+
+enum rpc_loc_lock_e_type {
+    RPC_LOC_LOCK_NONE = 1,
+    RPC_LOC_LOCK_MI = 2,
+    RPC_LOC_LOCK_MT = 3,
+    RPC_LOC_LOCK_ALL = 4,
+    RPC_LOC_LOCK_MAX = 268435456,
+};
+typedef enum rpc_loc_lock_e_type rpc_loc_lock_e_type;
+
+typedef rpc_uint32 rpc_loc_nmea_sentence_type;
+
+typedef rpc_uint32 rpc_loc_assist_data_type;
+
+struct rpc_loc_assist_data_delete_s_type {
+    rpc_loc_assist_data_type type;
+    rpc_uint32 reserved[8];
+};
+typedef struct rpc_loc_assist_data_delete_s_type rpc_loc_assist_data_delete_s_type;
+
+struct rpc_loc_ioctl_data_u_type {
+    rpc_loc_ioctl_e_type disc;
+    union {
+        rpc_loc_fix_criteria_s_type fix_criteria;
+        rpc_loc_user_verify_s_type user_verify_resp;
+        rpc_loc_predicted_orbits_data_s_type predicted_orbits_data;
+        rpc_loc_predicted_orbits_auto_download_config_s_type predicted_orbits_auto_download;
+        rpc_loc_assist_data_time_s_type assistance_data_time;
+        rpc_loc_assist_data_pos_s_type assistance_data_position;
+        rpc_loc_server_open_status_s_type conn_open_status;
+        rpc_loc_server_close_status_s_type conn_close_status;
+        rpc_loc_wiper_position_report_s_type wiper_pos;
+        rpc_loc_wiper_status_e_type wiper_status;
+        rpc_loc_lock_e_type engine_lock;
+        rpc_boolean sbas_mode;
+        rpc_loc_nmea_sentence_type nmea_types;
+        rpc_boolean on_demand_lpm;
+        rpc_loc_server_info_s_type server_addr;
+        rpc_loc_assist_data_delete_s_type assist_data_delete;
+        rpc_loc_efs_data_s_type efs_data;
+        rpc_loc_error_estimate_config_e_type error_estimate_config;
+        rpc_uint8 xtra_t_session_control;
+        rpc_loc_apn_profiles_type apn_profiles[6];
+        rpc_boolean data_enable;
+        rpc_uint32 supl_version;
+        rpc_loc_server_multi_open_status_s_type multi_conn_open_status;
+        rpc_loc_reserved_payload_s_type reserved;
+    } rpc_loc_ioctl_data_u_type_u;
+};
+typedef struct rpc_loc_ioctl_data_u_type rpc_loc_ioctl_data_u_type;
+
+struct rpc_loc_ioctl_callback_data_u_type {
+    rpc_loc_ioctl_e_type disc;
+    union {
+        rpc_loc_api_version_s_type api_version;
+        rpc_loc_fix_criteria_s_type fix_criteria;
+        rpc_loc_lock_e_type engine_lock;
+        rpc_boolean sbas_mode;
+        rpc_loc_nmea_sentence_type nmea_types;
+        rpc_boolean on_demand_lpm;
+        rpc_loc_server_info_s_type server_addr;
+        rpc_loc_predicted_orbits_data_source_s_type predicted_orbits_data_source;
+        rpc_loc_predicted_orbits_data_validity_report_s_type predicted_orbits_data_validity;
+        rpc_uint8 xtra_t_session_control;
+        rpc_loc_apn_profiles_type apn_profiles[6];
+        rpc_uint32 supl_version;
+    } rpc_loc_ioctl_callback_data_u_type_u;
+};
+typedef struct rpc_loc_ioctl_callback_data_u_type rpc_loc_ioctl_callback_data_u_type;
+
+struct rpc_loc_ioctl_callback_s_type {
+    rpc_loc_ioctl_e_type type;
+    rpc_int32 status;
+    rpc_loc_ioctl_callback_data_u_type data;
+};
+typedef struct rpc_loc_ioctl_callback_s_type rpc_loc_ioctl_callback_s_type;
+
+struct rpc_loc_event_payload_u_type {
+    u_quad_t disc;
+    union {
+        rpc_loc_parsed_position_s_type parsed_location_report;
+        rpc_loc_gnss_info_s_type gnss_report;
+        rpc_loc_nmea_report_s_type nmea_report;
+        rpc_loc_ni_event_s_type ni_request;
+        rpc_loc_assist_data_request_s_type assist_data_request;
+        rpc_loc_server_request_s_type loc_server_request;
+        rpc_loc_ioctl_callback_s_type ioctl_report;
+        rpc_loc_status_event_s_type status_report;
+        rpc_loc_qwip_request_s_type qwip_request;
+        rpc_loc_reserved_payload_s_type reserved;
+    } rpc_loc_event_payload_u_type_u;
+};
+typedef struct rpc_loc_event_payload_u_type rpc_loc_event_payload_u_type;
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_rpc_loc_client_handle_type (XDR *, rpc_loc_client_handle_type*);
+extern  bool_t xdr_rpc_loc_event_mask_type (XDR *, rpc_loc_event_mask_type*);
+extern  bool_t xdr_rpc_loc_position_valid_mask_type (XDR *, rpc_loc_position_valid_mask_type*);
+extern  bool_t xdr_rpc_loc_pos_technology_mask_type (XDR *, rpc_loc_pos_technology_mask_type*);
+extern  bool_t xdr_rpc_loc_session_status_e_type (XDR *, rpc_loc_session_status_e_type*);
+extern  bool_t xdr_rpc_loc_calendar_time_s_type (XDR *, rpc_loc_calendar_time_s_type*);
+extern  bool_t xdr_rpc_loc_parsed_position_s_type (XDR *, rpc_loc_parsed_position_s_type*);
+extern  bool_t xdr_rpc_loc_sv_system_e_type (XDR *, rpc_loc_sv_system_e_type*);
+extern  bool_t xdr_rpc_loc_sv_status_e_type (XDR *, rpc_loc_sv_status_e_type*);
+extern  bool_t xdr_rpc_loc_sv_info_valid_mask_type (XDR *, rpc_loc_sv_info_valid_mask_type*);
+extern  bool_t xdr_rpc_loc_sv_info_s_type (XDR *, rpc_loc_sv_info_s_type*);
+extern  bool_t xdr_rpc_loc_gnss_info_valid_mask_type (XDR *, rpc_loc_gnss_info_valid_mask_type*);
+extern  bool_t xdr_rpc_loc_gnss_info_s_type (XDR *, rpc_loc_gnss_info_s_type*);
+extern  bool_t xdr_rpc_loc_nmea_report_s_type (XDR *, rpc_loc_nmea_report_s_type*);
+extern  bool_t xdr_rpc_loc_status_event_e_type (XDR *, rpc_loc_status_event_e_type*);
+extern  bool_t xdr_rpc_loc_engine_state_e_type (XDR *, rpc_loc_engine_state_e_type*);
+extern  bool_t xdr_rpc_loc_fix_session_state_e_type (XDR *, rpc_loc_fix_session_state_e_type*);
+extern  bool_t xdr_rpc_loc_status_event_payload_u_type (XDR *, rpc_loc_status_event_payload_u_type*);
+extern  bool_t xdr_rpc_loc_status_event_s_type (XDR *, rpc_loc_status_event_s_type*);
+extern  bool_t xdr_rpc_loc_server_addr_e_type (XDR *, rpc_loc_server_addr_e_type*);
+extern  bool_t xdr_rpc_loc_server_addr_ipv4_type (XDR *, rpc_loc_server_addr_ipv4_type*);
+extern  bool_t xdr_rpc_loc_server_addr_url_type (XDR *, rpc_loc_server_addr_url_type*);
+extern  bool_t xdr_rpc_loc_server_addr_ipv6_type (XDR *, rpc_loc_server_addr_ipv6_type*);
+extern  bool_t xdr_rpc_loc_server_addr_u_type (XDR *, rpc_loc_server_addr_u_type*);
+extern  bool_t xdr_rpc_loc_server_info_s_type (XDR *, rpc_loc_server_info_s_type*);
+extern  bool_t xdr_rpc_loc_ni_notify_verify_e_type (XDR *, rpc_loc_ni_notify_verify_e_type*);
+extern  bool_t xdr_rpc_loc_ni_event_e_type (XDR *, rpc_loc_ni_event_e_type*);
+extern  bool_t xdr_rpc_loc_ni_datacoding_scheme_e_type (XDR *, rpc_loc_ni_datacoding_scheme_e_type*);
+extern  bool_t xdr_rpc_loc_ni_vx_requester_id_encoding_scheme_e_type (XDR *, rpc_loc_ni_vx_requester_id_encoding_scheme_e_type*);
+extern  bool_t xdr_rpc_loc_ni_vx_pos_mode_e_type (XDR *, rpc_loc_ni_vx_pos_mode_e_type*);
+extern  bool_t xdr_rpc_loc_ni_vx_requester_id_s_type (XDR *, rpc_loc_ni_vx_requester_id_s_type*);
+extern  bool_t xdr_rpc_loc_ni_vx_notify_verify_req_s_type (XDR *, rpc_loc_ni_vx_notify_verify_req_s_type*);
+extern  bool_t xdr_rpc_loc_ni_supl_pos_method_e_type (XDR *, rpc_loc_ni_supl_pos_method_e_type*);
+extern  bool_t xdr_rpc_loc_ni_supl_slp_session_id_s_type (XDR *, rpc_loc_ni_supl_slp_session_id_s_type*);
+extern  bool_t xdr_rpc_loc_ni_requestor_id_s_type (XDR *, rpc_loc_ni_requestor_id_s_type*);
+extern  bool_t xdr_rpc_loc_ni_supl_client_name_s_type (XDR *, rpc_loc_ni_supl_client_name_s_type*);
+extern  bool_t xdr_rpc_loc_ni_supl_qop_s_type (XDR *, rpc_loc_ni_supl_qop_s_type*);
+extern  bool_t xdr_rpc_loc_ni_supl_notify_verify_req_s_type (XDR *, rpc_loc_ni_supl_notify_verify_req_s_type*);
+extern  bool_t xdr_rpc_loc_ni_ext_client_address_s_type (XDR *, rpc_loc_ni_ext_client_address_s_type*);
+extern  bool_t xdr_rpc_loc_ni_location_type_e_type (XDR *, rpc_loc_ni_location_type_e_type*);
+extern  bool_t xdr_rpc_loc_ni_deferred_location_s_type (XDR *, rpc_loc_ni_deferred_location_s_type*);
+extern  bool_t xdr_rpc_loc_ni_codeword_string_s_type (XDR *, rpc_loc_ni_codeword_string_s_type*);
+extern  bool_t xdr_rpc_loc_ni_service_type_id_s_type (XDR *, rpc_loc_ni_service_type_id_s_type*);
+extern  bool_t xdr_rpc_loc_ni_umts_cp_notify_verify_req_s_type (XDR *, rpc_loc_ni_umts_cp_notify_verify_req_s_type*);
+extern  bool_t xdr_rpc_loc_ni_service_interaction_e_type (XDR *, rpc_loc_ni_service_interaction_e_type*);
+extern  bool_t xdr_rpc_loc_ni_vx_service_interaction_req_s_type (XDR *, rpc_loc_ni_vx_service_interaction_req_s_type*);
+extern  bool_t xdr_rpc_loc_ni_event_payload_u_type (XDR *, rpc_loc_ni_event_payload_u_type*);
+extern  bool_t xdr_rpc_loc_ni_event_s_type (XDR *, rpc_loc_ni_event_s_type*);
+extern  bool_t xdr_rpc_loc_assist_data_request_e_type (XDR *, rpc_loc_assist_data_request_e_type*);
+extern  bool_t xdr_rpc_struct_loc_time_download_source_s_type_servers_ptr (XDR *, rpc_struct_loc_time_download_source_s_type_servers_ptr*);
+extern  bool_t xdr_rpc_struct_loc_time_download_source_s_type_servers (XDR *, rpc_struct_loc_time_download_source_s_type_servers);
+extern  bool_t xdr_rpc_loc_time_download_source_s_type (XDR *, rpc_loc_time_download_source_s_type*);
+extern  bool_t xdr_rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr (XDR *, rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr*);
+extern  bool_t xdr_rpc_struct_loc_predicted_orbits_data_source_s_type_servers (XDR *, rpc_struct_loc_predicted_orbits_data_source_s_type_servers);
+extern  bool_t xdr_rpc_loc_predicted_orbits_data_source_s_type (XDR *, rpc_loc_predicted_orbits_data_source_s_type*);
+extern  bool_t xdr_rpc_loc_pos_inj_request_s_type (XDR *, rpc_loc_pos_inj_request_s_type*);
+extern  bool_t xdr_rpc_loc_assist_data_request_payload_u_type (XDR *, rpc_loc_assist_data_request_payload_u_type*);
+extern  bool_t xdr_rpc_loc_assist_data_request_s_type (XDR *, rpc_loc_assist_data_request_s_type*);
+extern  bool_t xdr_rpc_loc_server_connection_handle (XDR *, rpc_loc_server_connection_handle*);
+extern  bool_t xdr_rpc_loc_server_protocol_e_type (XDR *, rpc_loc_server_protocol_e_type*);
+extern  bool_t xdr_rpc_loc_server_connection_e_type (XDR *, rpc_loc_server_connection_e_type*);
+extern  bool_t xdr_rpc_loc_server_request_e_type (XDR *, rpc_loc_server_request_e_type*);
+extern  bool_t xdr_rpc_loc_server_open_req_s_type (XDR *, rpc_loc_server_open_req_s_type*);
+extern  bool_t xdr_rpc_loc_server_multi_open_req_s_type (XDR *, rpc_loc_server_multi_open_req_s_type*);
+extern  bool_t xdr_rpc_loc_server_close_req_s_type (XDR *, rpc_loc_server_close_req_s_type*);
+extern  bool_t xdr_rpc_loc_server_request_u_type (XDR *, rpc_loc_server_request_u_type*);
+extern  bool_t xdr_rpc_loc_server_request_s_type (XDR *, rpc_loc_server_request_s_type*);
+extern  bool_t xdr_rpc_loc_qwip_request_e_type (XDR *, rpc_loc_qwip_request_e_type*);
+extern  bool_t xdr_rpc_loc_qwip_request_s_type (XDR *, rpc_loc_qwip_request_s_type*);
+extern  bool_t xdr_rpc_loc_reserved_payload_s_type (XDR *, rpc_loc_reserved_payload_s_type*);
+extern  bool_t xdr_rpc_loc_ioctl_e_type (XDR *, rpc_loc_ioctl_e_type*);
+extern  bool_t xdr_rpc_loc_api_version_s_type (XDR *, rpc_loc_api_version_s_type*);
+extern  bool_t xdr_rpc_loc_fix_recurrence_e_type (XDR *, rpc_loc_fix_recurrence_e_type*);
+extern  bool_t xdr_rpc_loc_operation_mode_e_type (XDR *, rpc_loc_operation_mode_e_type*);
+extern  bool_t xdr_rpc_loc_notify_e_type (XDR *, rpc_loc_notify_e_type*);
+extern  bool_t xdr_rpc_loc_fix_criteria_s_type (XDR *, rpc_loc_fix_criteria_s_type*);
+extern  bool_t xdr_rpc_loc_ni_user_resp_e_type (XDR *, rpc_loc_ni_user_resp_e_type*);
+extern  bool_t xdr_rpc_loc_user_verify_s_type (XDR *, rpc_loc_user_verify_s_type*);
+extern  bool_t xdr_rpc_loc_predicted_orbits_data_format_e_type (XDR *, rpc_loc_predicted_orbits_data_format_e_type*);
+extern  bool_t xdr_rpc_loc_predicted_orbits_data_s_type (XDR *, rpc_loc_predicted_orbits_data_s_type*);
+extern  bool_t xdr_rpc_loc_predicted_orbits_data_validity_report_s_type (XDR *, rpc_loc_predicted_orbits_data_validity_report_s_type*);
+extern  bool_t xdr_rpc_loc_predicted_orbits_auto_download_config_s_type (XDR *, rpc_loc_predicted_orbits_auto_download_config_s_type*);
+extern  bool_t xdr_rpc_loc_assist_data_time_s_type (XDR *, rpc_loc_assist_data_time_s_type*);
+extern  bool_t xdr_rpc_loc_assist_pos_valid_mask_type (XDR *, rpc_loc_assist_pos_valid_mask_type*);
+extern  bool_t xdr_rpc_loc_assist_data_pos_s_type (XDR *, rpc_loc_assist_data_pos_s_type*);
+extern  bool_t xdr_rpc_loc_server_open_status_e_type (XDR *, rpc_loc_server_open_status_e_type*);
+extern  bool_t xdr_rpc_loc_server_pdp_type_e_type (XDR *, rpc_loc_server_pdp_type_e_type*);
+extern  bool_t xdr_rpc_loc_server_open_status_s_type (XDR *, rpc_loc_server_open_status_s_type*);
+extern  bool_t xdr_rpc_loc_server_multi_open_status_s_type (XDR *, rpc_loc_server_multi_open_status_s_type*);
+extern  bool_t xdr_rpc_loc_server_close_status_e_type (XDR *, rpc_loc_server_close_status_e_type*);
+extern  bool_t xdr_rpc_loc_server_close_status_s_type (XDR *, rpc_loc_server_close_status_s_type*);
+extern  bool_t xdr_rpc_loc_wiper_fix_time_s_type (XDR *, rpc_loc_wiper_fix_time_s_type*);
+extern  bool_t xdr_rpc_loc_wiper_fix_pos_s_type (XDR *, rpc_loc_wiper_fix_pos_s_type*);
+extern  bool_t xdr_rpc_loc_wiper_ap_info_s_type (XDR *, rpc_loc_wiper_ap_info_s_type*);
+extern  bool_t xdr_rpc_loc_wiper_ap_set_s_type (XDR *, rpc_loc_wiper_ap_set_s_type*);
+extern  bool_t xdr_rpc_loc_wiper_position_report_s_type (XDR *, rpc_loc_wiper_position_report_s_type*);
+extern  bool_t xdr_rpc_loc_wiper_status_e_type (XDR *, rpc_loc_wiper_status_e_type*);
+extern  bool_t xdr_rpc_loc_fs_operation_e_type (XDR *, rpc_loc_fs_operation_e_type*);
+extern  bool_t xdr_rpc_loc_efs_data_s_type (XDR *, rpc_loc_efs_data_s_type*);
+extern  bool_t xdr_rpc_loc_error_estimate_config_e_type (XDR *, rpc_loc_error_estimate_config_e_type*);
+extern  bool_t xdr_rpc_loc_apn_profiles_type (XDR *, rpc_loc_apn_profiles_type*);
+extern  bool_t xdr_rpc_loc_lock_e_type (XDR *, rpc_loc_lock_e_type*);
+extern  bool_t xdr_rpc_loc_nmea_sentence_type (XDR *, rpc_loc_nmea_sentence_type*);
+extern  bool_t xdr_rpc_loc_assist_data_type (XDR *, rpc_loc_assist_data_type*);
+extern  bool_t xdr_rpc_loc_assist_data_delete_s_type (XDR *, rpc_loc_assist_data_delete_s_type*);
+extern  bool_t xdr_rpc_loc_ioctl_data_u_type (XDR *, rpc_loc_ioctl_data_u_type*);
+extern  bool_t xdr_rpc_loc_ioctl_callback_data_u_type (XDR *, rpc_loc_ioctl_callback_data_u_type*);
+extern  bool_t xdr_rpc_loc_ioctl_callback_s_type (XDR *, rpc_loc_ioctl_callback_s_type*);
+extern  bool_t xdr_rpc_loc_event_payload_u_type (XDR *, rpc_loc_event_payload_u_type*);
+
+#else /* K&R C */
+extern bool_t xdr_rpc_loc_client_handle_type ();
+extern bool_t xdr_rpc_loc_event_mask_type ();
+extern bool_t xdr_rpc_loc_position_valid_mask_type ();
+extern bool_t xdr_rpc_loc_pos_technology_mask_type ();
+extern bool_t xdr_rpc_loc_session_status_e_type ();
+extern bool_t xdr_rpc_loc_calendar_time_s_type ();
+extern bool_t xdr_rpc_loc_parsed_position_s_type ();
+extern bool_t xdr_rpc_loc_sv_system_e_type ();
+extern bool_t xdr_rpc_loc_sv_status_e_type ();
+extern bool_t xdr_rpc_loc_sv_info_valid_mask_type ();
+extern bool_t xdr_rpc_loc_sv_info_s_type ();
+extern bool_t xdr_rpc_loc_gnss_info_valid_mask_type ();
+extern bool_t xdr_rpc_loc_gnss_info_s_type ();
+extern bool_t xdr_rpc_loc_nmea_report_s_type ();
+extern bool_t xdr_rpc_loc_status_event_e_type ();
+extern bool_t xdr_rpc_loc_engine_state_e_type ();
+extern bool_t xdr_rpc_loc_fix_session_state_e_type ();
+extern bool_t xdr_rpc_loc_status_event_payload_u_type ();
+extern bool_t xdr_rpc_loc_status_event_s_type ();
+extern bool_t xdr_rpc_loc_server_addr_e_type ();
+extern bool_t xdr_rpc_loc_server_addr_ipv4_type ();
+extern bool_t xdr_rpc_loc_server_addr_url_type ();
+extern bool_t xdr_rpc_loc_server_addr_ipv6_type ();
+extern bool_t xdr_rpc_loc_server_addr_u_type ();
+extern bool_t xdr_rpc_loc_server_info_s_type ();
+extern bool_t xdr_rpc_loc_ni_notify_verify_e_type ();
+extern bool_t xdr_rpc_loc_ni_event_e_type ();
+extern bool_t xdr_rpc_loc_ni_datacoding_scheme_e_type ();
+extern bool_t xdr_rpc_loc_ni_vx_requester_id_encoding_scheme_e_type ();
+extern bool_t xdr_rpc_loc_ni_vx_pos_mode_e_type ();
+extern bool_t xdr_rpc_loc_ni_vx_requester_id_s_type ();
+extern bool_t xdr_rpc_loc_ni_vx_notify_verify_req_s_type ();
+extern bool_t xdr_rpc_loc_ni_supl_pos_method_e_type ();
+extern bool_t xdr_rpc_loc_ni_supl_slp_session_id_s_type ();
+extern bool_t xdr_rpc_loc_ni_requestor_id_s_type ();
+extern bool_t xdr_rpc_loc_ni_supl_client_name_s_type ();
+extern bool_t xdr_rpc_loc_ni_supl_qop_s_type ();
+extern bool_t xdr_rpc_loc_ni_supl_notify_verify_req_s_type ();
+extern bool_t xdr_rpc_loc_ni_ext_client_address_s_type ();
+extern bool_t xdr_rpc_loc_ni_location_type_e_type ();
+extern bool_t xdr_rpc_loc_ni_deferred_location_s_type ();
+extern bool_t xdr_rpc_loc_ni_codeword_string_s_type ();
+extern bool_t xdr_rpc_loc_ni_service_type_id_s_type ();
+extern bool_t xdr_rpc_loc_ni_umts_cp_notify_verify_req_s_type ();
+extern bool_t xdr_rpc_loc_ni_service_interaction_e_type ();
+extern bool_t xdr_rpc_loc_ni_vx_service_interaction_req_s_type ();
+extern bool_t xdr_rpc_loc_ni_event_payload_u_type ();
+extern bool_t xdr_rpc_loc_ni_event_s_type ();
+extern bool_t xdr_rpc_loc_assist_data_request_e_type ();
+extern bool_t xdr_rpc_struct_loc_time_download_source_s_type_servers_ptr ();
+extern bool_t xdr_rpc_struct_loc_time_download_source_s_type_servers ();
+extern bool_t xdr_rpc_loc_time_download_source_s_type ();
+extern bool_t xdr_rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr ();
+extern bool_t xdr_rpc_struct_loc_predicted_orbits_data_source_s_type_servers ();
+extern bool_t xdr_rpc_loc_predicted_orbits_data_source_s_type ();
+extern bool_t xdr_rpc_loc_pos_inj_request_s_type ();
+extern bool_t xdr_rpc_loc_assist_data_request_payload_u_type ();
+extern bool_t xdr_rpc_loc_assist_data_request_s_type ();
+extern bool_t xdr_rpc_loc_server_connection_handle ();
+extern bool_t xdr_rpc_loc_server_protocol_e_type ();
+extern bool_t xdr_rpc_loc_server_connection_e_type ();
+extern bool_t xdr_rpc_loc_server_request_e_type ();
+extern bool_t xdr_rpc_loc_server_open_req_s_type ();
+extern bool_t xdr_rpc_loc_server_multi_open_req_s_type ();
+extern bool_t xdr_rpc_loc_server_close_req_s_type ();
+extern bool_t xdr_rpc_loc_server_request_u_type ();
+extern bool_t xdr_rpc_loc_server_request_s_type ();
+extern bool_t xdr_rpc_loc_qwip_request_e_type ();
+extern bool_t xdr_rpc_loc_qwip_request_s_type ();
+extern bool_t xdr_rpc_loc_reserved_payload_s_type ();
+extern bool_t xdr_rpc_loc_ioctl_e_type ();
+extern bool_t xdr_rpc_loc_api_version_s_type ();
+extern bool_t xdr_rpc_loc_fix_recurrence_e_type ();
+extern bool_t xdr_rpc_loc_operation_mode_e_type ();
+extern bool_t xdr_rpc_loc_notify_e_type ();
+extern bool_t xdr_rpc_loc_fix_criteria_s_type ();
+extern bool_t xdr_rpc_loc_ni_user_resp_e_type ();
+extern bool_t xdr_rpc_loc_user_verify_s_type ();
+extern bool_t xdr_rpc_loc_predicted_orbits_data_format_e_type ();
+extern bool_t xdr_rpc_loc_predicted_orbits_data_s_type ();
+extern bool_t xdr_rpc_loc_predicted_orbits_data_validity_report_s_type ();
+extern bool_t xdr_rpc_loc_predicted_orbits_auto_download_config_s_type ();
+extern bool_t xdr_rpc_loc_assist_data_time_s_type ();
+extern bool_t xdr_rpc_loc_assist_pos_valid_mask_type ();
+extern bool_t xdr_rpc_loc_assist_data_pos_s_type ();
+extern bool_t xdr_rpc_loc_server_open_status_e_type ();
+extern bool_t xdr_rpc_loc_server_pdp_type_e_type ();
+extern bool_t xdr_rpc_loc_server_open_status_s_type ();
+extern bool_t xdr_rpc_loc_server_multi_open_status_s_type ();
+extern bool_t xdr_rpc_loc_server_close_status_e_type ();
+extern bool_t xdr_rpc_loc_server_close_status_s_type ();
+extern bool_t xdr_rpc_loc_wiper_fix_time_s_type ();
+extern bool_t xdr_rpc_loc_wiper_fix_pos_s_type ();
+extern bool_t xdr_rpc_loc_wiper_ap_info_s_type ();
+extern bool_t xdr_rpc_loc_wiper_ap_set_s_type ();
+extern bool_t xdr_rpc_loc_wiper_position_report_s_type ();
+extern bool_t xdr_rpc_loc_wiper_status_e_type ();
+extern bool_t xdr_rpc_loc_fs_operation_e_type ();
+extern bool_t xdr_rpc_loc_efs_data_s_type ();
+extern bool_t xdr_rpc_loc_error_estimate_config_e_type ();
+extern bool_t xdr_rpc_loc_apn_profiles_type ();
+extern bool_t xdr_rpc_loc_lock_e_type ();
+extern bool_t xdr_rpc_loc_nmea_sentence_type ();
+extern bool_t xdr_rpc_loc_assist_data_type ();
+extern bool_t xdr_rpc_loc_assist_data_delete_s_type ();
+extern bool_t xdr_rpc_loc_ioctl_data_u_type ();
+extern bool_t xdr_rpc_loc_ioctl_callback_data_u_type ();
+extern bool_t xdr_rpc_loc_ioctl_callback_s_type ();
+extern bool_t xdr_rpc_loc_event_payload_u_type ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_LOC_API_COMMON_RPC_H_RPCGEN */
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_rpc.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_rpc.h
new file mode 100755
index 0000000..f11bb65
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_rpc.h
@@ -0,0 +1,288 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _LOC_API_RPC_H_RPCGEN
+#define _LOC_API_RPC_H_RPCGEN
+
+#include "librpc.h"
+#include "commondefs_rpcgen_rpc.h"
+#include "loc_api_rpcgen_common_rpc.h"
+
+#include <pthread.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct {
+    u_int rpc_loc_api_api_versions_return_type_len;
+    rpc_uint32 *rpc_loc_api_api_versions_return_type_val;
+} rpc_loc_api_api_versions_return_type;
+
+typedef rpc_uint32 rpc_loc_event_cb_f_type;
+
+struct rpc_loc_open_args {
+    rpc_loc_event_mask_type event_reg_mask;
+    rpc_loc_event_cb_f_type event_callback;
+};
+typedef struct rpc_loc_open_args rpc_loc_open_args;
+
+struct rpc_loc_close_args {
+    rpc_loc_client_handle_type handle;
+};
+typedef struct rpc_loc_close_args rpc_loc_close_args;
+
+struct rpc_loc_start_fix_args {
+    rpc_loc_client_handle_type handle;
+};
+typedef struct rpc_loc_start_fix_args rpc_loc_start_fix_args;
+
+struct rpc_loc_stop_fix_args {
+    rpc_loc_client_handle_type handle;
+};
+typedef struct rpc_loc_stop_fix_args rpc_loc_stop_fix_args;
+
+struct rpc_loc_ioctl_args {
+    rpc_loc_client_handle_type handle;
+    rpc_loc_ioctl_e_type ioctl_type;
+    rpc_loc_ioctl_data_u_type *ioctl_data;
+};
+typedef struct rpc_loc_ioctl_args rpc_loc_ioctl_args;
+
+struct rpc_loc_api_api_version_s_args {
+    rpc_boolean len_not_null;
+};
+typedef struct rpc_loc_api_api_version_s_args rpc_loc_api_api_version_s_args;
+
+struct rpc_loc_api_rpc_glue_code_info_remote_rets {
+    rpc_uint32 toolvers;
+    rpc_uint32 features;
+    rpc_uint32 proghash;
+    rpc_uint32 cbproghash;
+};
+typedef struct rpc_loc_api_rpc_glue_code_info_remote_rets rpc_loc_api_rpc_glue_code_info_remote_rets;
+
+struct rpc_loc_open_rets {
+    rpc_loc_client_handle_type loc_open_result;
+};
+typedef struct rpc_loc_open_rets rpc_loc_open_rets;
+
+struct rpc_loc_close_rets {
+    rpc_int32 loc_close_result;
+};
+typedef struct rpc_loc_close_rets rpc_loc_close_rets;
+
+struct rpc_loc_start_fix_rets {
+    rpc_int32 loc_start_fix_result;
+};
+typedef struct rpc_loc_start_fix_rets rpc_loc_start_fix_rets;
+
+struct rpc_loc_stop_fix_rets {
+    rpc_int32 loc_stop_fix_result;
+};
+typedef struct rpc_loc_stop_fix_rets rpc_loc_stop_fix_rets;
+
+struct rpc_loc_ioctl_rets {
+    rpc_int32 loc_ioctl_result;
+};
+typedef struct rpc_loc_ioctl_rets rpc_loc_ioctl_rets;
+
+struct rpc_loc_api_api_versions_rets {
+    rpc_loc_api_api_versions_return_type loc_api_api_versions_result;
+    rpc_uint32 *len;
+};
+typedef struct rpc_loc_api_api_versions_rets rpc_loc_api_api_versions_rets;
+#define LOC_APIVERS 0x00050006
+
+#define LOC_APIPROG 0x3000008C
+#define LOC_APIVERS_0001 0x00050001
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define rpc_loc_api_null 0
+extern  enum clnt_stat rpc_loc_api_null_0x00050001(void *, void *, CLIENT *);
+extern  bool_t rpc_loc_api_null_0x00050001_svc(void *, void *, struct svc_req *);
+#define rpc_loc_api_rpc_glue_code_info_remote 1
+extern  enum clnt_stat rpc_loc_api_rpc_glue_code_info_remote_0x00050001(void *, rpc_loc_api_rpc_glue_code_info_remote_rets *, CLIENT *);
+extern  bool_t rpc_loc_api_rpc_glue_code_info_remote_0x00050001_svc(void *, rpc_loc_api_rpc_glue_code_info_remote_rets *, struct svc_req *);
+#define rpc_loc_open 2
+extern  enum clnt_stat rpc_loc_open_0x00050001(rpc_loc_open_args *, rpc_loc_open_rets *, CLIENT *);
+extern  bool_t rpc_loc_open_0x00050001_svc(rpc_loc_open_args *, rpc_loc_open_rets *, struct svc_req *);
+#define rpc_loc_close 3
+extern  enum clnt_stat rpc_loc_close_0x00050001(rpc_loc_close_args *, rpc_loc_close_rets *, CLIENT *);
+extern  bool_t rpc_loc_close_0x00050001_svc(rpc_loc_close_args *, rpc_loc_close_rets *, struct svc_req *);
+#define rpc_loc_start_fix 4
+extern  enum clnt_stat rpc_loc_start_fix_0x00050001(rpc_loc_start_fix_args *, rpc_loc_start_fix_rets *, CLIENT *);
+extern  bool_t rpc_loc_start_fix_0x00050001_svc(rpc_loc_start_fix_args *, rpc_loc_start_fix_rets *, struct svc_req *);
+#define rpc_loc_stop_fix 5
+extern  enum clnt_stat rpc_loc_stop_fix_0x00050001(rpc_loc_stop_fix_args *, rpc_loc_stop_fix_rets *, CLIENT *);
+extern  bool_t rpc_loc_stop_fix_0x00050001_svc(rpc_loc_stop_fix_args *, rpc_loc_stop_fix_rets *, struct svc_req *);
+#define rpc_loc_ioctl 6
+extern  enum clnt_stat rpc_loc_ioctl_0x00050001(rpc_loc_ioctl_args *, rpc_loc_ioctl_rets *, CLIENT *);
+extern  bool_t rpc_loc_ioctl_0x00050001_svc(rpc_loc_ioctl_args *, rpc_loc_ioctl_rets *, struct svc_req *);
+#define rpc_loc_api_api_versions 0xFFFFFFFF
+extern  enum clnt_stat rpc_loc_api_api_versions_0x00050001(void *, rpc_loc_api_api_versions_rets *, CLIENT *);
+extern  bool_t rpc_loc_api_api_versions_0x00050001_svc(void *, rpc_loc_api_api_versions_rets *, struct svc_req *);
+extern int loc_apiprog_0x00050001_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define rpc_loc_api_null 0
+extern  enum clnt_stat rpc_loc_api_null_0x00050001();
+extern  bool_t rpc_loc_api_null_0x00050001_svc();
+#define rpc_loc_api_rpc_glue_code_info_remote 1
+extern  enum clnt_stat rpc_loc_api_rpc_glue_code_info_remote_0x00050001();
+extern  bool_t rpc_loc_api_rpc_glue_code_info_remote_0x00050001_svc();
+#define rpc_loc_open 2
+extern  enum clnt_stat rpc_loc_open_0x00050001();
+extern  bool_t rpc_loc_open_0x00050001_svc();
+#define rpc_loc_close 3
+extern  enum clnt_stat rpc_loc_close_0x00050001();
+extern  bool_t rpc_loc_close_0x00050001_svc();
+#define rpc_loc_start_fix 4
+extern  enum clnt_stat rpc_loc_start_fix_0x00050001();
+extern  bool_t rpc_loc_start_fix_0x00050001_svc();
+#define rpc_loc_stop_fix 5
+extern  enum clnt_stat rpc_loc_stop_fix_0x00050001();
+extern  bool_t rpc_loc_stop_fix_0x00050001_svc();
+#define rpc_loc_ioctl 6
+extern  enum clnt_stat rpc_loc_ioctl_0x00050001();
+extern  bool_t rpc_loc_ioctl_0x00050001_svc();
+#define rpc_loc_api_api_versions 0xFFFFFFFF
+extern  enum clnt_stat rpc_loc_api_api_versions_0x00050001();
+extern  bool_t rpc_loc_api_api_versions_0x00050001_svc();
+extern int loc_apiprog_0x00050001_freeresult ();
+#endif /* K&R C */
+#define LOC_APIVERS_0002 0x00050002
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  enum clnt_stat rpc_loc_api_null_0x00050002(void *, void *, CLIENT *);
+extern  bool_t rpc_loc_api_null_0x00050002_svc(void *, void *, struct svc_req *);
+extern int loc_apiprog_0x00050002_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  enum clnt_stat rpc_loc_api_null_0x00050002();
+extern  bool_t rpc_loc_api_null_0x00050002_svc();
+extern int loc_apiprog_0x00050002_freeresult ();
+#endif /* K&R C */
+#define LOC_APIVERS_0003 0x00050003
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  enum clnt_stat rpc_loc_api_null_0x00050003(void *, void *, CLIENT *);
+extern  bool_t rpc_loc_api_null_0x00050003_svc(void *, void *, struct svc_req *);
+extern int loc_apiprog_0x00050003_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  enum clnt_stat rpc_loc_api_null_0x00050003();
+extern  bool_t rpc_loc_api_null_0x00050003_svc();
+extern int loc_apiprog_0x00050003_freeresult ();
+#endif /* K&R C */
+#define LOC_APIVERS_0004 0x00050004
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  enum clnt_stat rpc_loc_api_null_0x00050004(void *, void *, CLIENT *);
+extern  bool_t rpc_loc_api_null_0x00050004_svc(void *, void *, struct svc_req *);
+extern int loc_apiprog_0x00050004_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  enum clnt_stat rpc_loc_api_null_0x00050004();
+extern  bool_t rpc_loc_api_null_0x00050004_svc();
+extern int loc_apiprog_0x00050004_freeresult ();
+#endif /* K&R C */
+#define LOC_APIVERS_0005 0x00050005
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  enum clnt_stat rpc_loc_api_null_0x00050005(void *, void *, CLIENT *);
+extern  bool_t rpc_loc_api_null_0x00050005_svc(void *, void *, struct svc_req *);
+extern int loc_apiprog_0x00050005_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  enum clnt_stat rpc_loc_api_null_0x00050005();
+extern  bool_t rpc_loc_api_null_0x00050005_svc();
+extern int loc_apiprog_0x00050005_freeresult ();
+#endif /* K&R C */
+#define LOC_APIVERS_0006 0x00050006
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  enum clnt_stat rpc_loc_api_null_0x00050006(void *, void *, CLIENT *);
+extern  bool_t rpc_loc_api_null_0x00050006_svc(void *, void *, struct svc_req *);
+extern int loc_apiprog_0x00050006_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  enum clnt_stat rpc_loc_api_null_0x00050006();
+extern  bool_t rpc_loc_api_null_0x00050006_svc();
+extern int loc_apiprog_0x00050006_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_rpc_loc_api_api_versions_return_type (XDR *, rpc_loc_api_api_versions_return_type*);
+extern  bool_t xdr_rpc_loc_event_cb_f_type (XDR *, rpc_loc_event_cb_f_type*);
+extern  bool_t xdr_rpc_loc_open_args (XDR *, rpc_loc_open_args*);
+extern  bool_t xdr_rpc_loc_close_args (XDR *, rpc_loc_close_args*);
+extern  bool_t xdr_rpc_loc_start_fix_args (XDR *, rpc_loc_start_fix_args*);
+extern  bool_t xdr_rpc_loc_stop_fix_args (XDR *, rpc_loc_stop_fix_args*);
+extern  bool_t xdr_rpc_loc_ioctl_args (XDR *, rpc_loc_ioctl_args*);
+extern  bool_t xdr_rpc_loc_api_api_version_s_args (XDR *, rpc_loc_api_api_version_s_args*);
+extern  bool_t xdr_rpc_loc_api_rpc_glue_code_info_remote_rets (XDR *, rpc_loc_api_rpc_glue_code_info_remote_rets*);
+extern  bool_t xdr_rpc_loc_open_rets (XDR *, rpc_loc_open_rets*);
+extern  bool_t xdr_rpc_loc_close_rets (XDR *, rpc_loc_close_rets*);
+extern  bool_t xdr_rpc_loc_start_fix_rets (XDR *, rpc_loc_start_fix_rets*);
+extern  bool_t xdr_rpc_loc_stop_fix_rets (XDR *, rpc_loc_stop_fix_rets*);
+extern  bool_t xdr_rpc_loc_ioctl_rets (XDR *, rpc_loc_ioctl_rets*);
+extern  bool_t xdr_rpc_loc_api_api_versions_rets (XDR *, rpc_loc_api_api_versions_rets*);
+
+#else /* K&R C */
+extern bool_t xdr_rpc_loc_api_api_versions_return_type ();
+extern bool_t xdr_rpc_loc_event_cb_f_type ();
+extern bool_t xdr_rpc_loc_open_args ();
+extern bool_t xdr_rpc_loc_close_args ();
+extern bool_t xdr_rpc_loc_start_fix_args ();
+extern bool_t xdr_rpc_loc_stop_fix_args ();
+extern bool_t xdr_rpc_loc_ioctl_args ();
+extern bool_t xdr_rpc_loc_api_api_version_s_args ();
+extern bool_t xdr_rpc_loc_api_rpc_glue_code_info_remote_rets ();
+extern bool_t xdr_rpc_loc_open_rets ();
+extern bool_t xdr_rpc_loc_close_rets ();
+extern bool_t xdr_rpc_loc_start_fix_rets ();
+extern bool_t xdr_rpc_loc_stop_fix_rets ();
+extern bool_t xdr_rpc_loc_ioctl_rets ();
+extern bool_t xdr_rpc_loc_api_api_versions_rets ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_LOC_API_RPC_H_RPCGEN */
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_apicb_appinit.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_apicb_appinit.h
new file mode 100755
index 0000000..e109852
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_apicb_appinit.h
@@ -0,0 +1,34 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+/* Initialization function for callbacks */
+int loc_apicb_app_init();
+
+void loc_apicb_app_deinit();
+
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_svc.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_svc.c
new file mode 100755
index 0000000..b044348
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_svc.c
@@ -0,0 +1,327 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "loc_api_rpcgen_cb_rpc.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <rpc/pmap_clnt.h>
+#include <string.h>
+#include <memory.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#ifndef SIG_PF
+#define SIG_PF void(*)(int)
+#endif
+
+void
+loc_apicbprog_0x00050001(struct svc_req *rqstp, register SVCXPRT *transp)
+{
+    union {
+        rpc_loc_event_cb_f_type_args rpc_loc_event_cb_f_type_0x00050001_arg;
+    } argument;
+    union {
+        rpc_loc_event_cb_f_type_rets rpc_loc_event_cb_f_type_0x00050001_res;
+    } result;
+    bool_t retval;
+    xdrproc_t _xdr_argument, _xdr_result;
+    bool_t (*local)(char *, void *, struct svc_req *);
+
+    switch (rqstp->rq_proc) {
+    case NULLPROC:
+        (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
+        return;
+
+    case rpc_loc_event_cb_f_type:
+        _xdr_argument = (xdrproc_t) xdr_rpc_loc_event_cb_f_type_args;
+        _xdr_result = (xdrproc_t) xdr_rpc_loc_event_cb_f_type_rets;
+        local = (bool_t (*) (char *, void *,  struct svc_req *))rpc_loc_event_cb_f_type_0x00050001_svc;
+        break;
+
+    default:
+        svcerr_noproc (transp);
+        return;
+    }
+    memset ((char *)&argument, 0, sizeof (argument));
+    if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        svcerr_decode (transp);
+        return;
+    }
+    retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
+    if (retval > 0 && !svc_sendreply(transp, (xdrproc_t) _xdr_result, (char *)&result)) {
+        svcerr_systemerr (transp);
+    }
+    if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        fprintf (stderr, "%s", "unable to free arguments");
+        exit (1);
+    }
+    if (!loc_apicbprog_0x00050001_freeresult (transp, _xdr_result, (caddr_t) &result))
+        fprintf (stderr, "%s", "unable to free results");
+
+    return;
+}
+
+void
+loc_apicbprog_0x00050002(struct svc_req *rqstp, register SVCXPRT *transp)
+{
+    union {
+        int fill;
+    } argument;
+    union {
+        int rpc_loc_api_cb_null_0x00050002_res;
+    } result;
+    bool_t retval;
+    xdrproc_t _xdr_argument, _xdr_result;
+    bool_t (*local)(char *, void *, struct svc_req *);
+
+    switch (rqstp->rq_proc) {
+    case NULLPROC:
+        (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
+        return;
+
+    case rpc_loc_api_cb_null:
+        _xdr_argument = (xdrproc_t) xdr_void;
+        _xdr_result = (xdrproc_t) xdr_int;
+        local = (bool_t (*) (char *, void *,  struct svc_req *))rpc_loc_api_cb_null_0x00050002_svc;
+        break;
+
+    default:
+        svcerr_noproc (transp);
+        return;
+    }
+    memset ((char *)&argument, 0, sizeof (argument));
+    if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        svcerr_decode (transp);
+        return;
+    }
+    retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
+    if (retval > 0 && !svc_sendreply(transp, (xdrproc_t) _xdr_result, (char *)&result)) {
+        svcerr_systemerr (transp);
+    }
+    if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        fprintf (stderr, "%s", "unable to free arguments");
+        exit (1);
+    }
+    if (!loc_apicbprog_0x00050002_freeresult (transp, _xdr_result, (caddr_t) &result))
+        fprintf (stderr, "%s", "unable to free results");
+
+    return;
+}
+
+void
+loc_apicbprog_0x00050003(struct svc_req *rqstp, register SVCXPRT *transp)
+{
+    union {
+        int fill;
+    } argument;
+    union {
+        int rpc_loc_api_cb_null_0x00050003_res;
+    } result;
+    bool_t retval;
+    xdrproc_t _xdr_argument, _xdr_result;
+    bool_t (*local)(char *, void *, struct svc_req *);
+
+    switch (rqstp->rq_proc) {
+    case NULLPROC:
+        (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
+        return;
+
+    case rpc_loc_api_cb_null:
+        _xdr_argument = (xdrproc_t) xdr_void;
+        _xdr_result = (xdrproc_t) xdr_int;
+        local = (bool_t (*) (char *, void *,  struct svc_req *))rpc_loc_api_cb_null_0x00050003_svc;
+        break;
+
+    default:
+        svcerr_noproc (transp);
+        return;
+    }
+    memset ((char *)&argument, 0, sizeof (argument));
+    if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        svcerr_decode (transp);
+        return;
+    }
+    retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
+    if (retval > 0 && !svc_sendreply(transp, (xdrproc_t) _xdr_result, (char *)&result)) {
+        svcerr_systemerr (transp);
+    }
+    if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        fprintf (stderr, "%s", "unable to free arguments");
+        exit (1);
+    }
+    if (!loc_apicbprog_0x00050003_freeresult (transp, _xdr_result, (caddr_t) &result))
+        fprintf (stderr, "%s", "unable to free results");
+
+    return;
+}
+
+void
+loc_apicbprog_0x00050004(struct svc_req *rqstp, register SVCXPRT *transp)
+{
+    union {
+        int fill;
+    } argument;
+    union {
+        int rpc_loc_api_cb_null_0x00050004_res;
+    } result;
+    bool_t retval;
+    xdrproc_t _xdr_argument, _xdr_result;
+    bool_t (*local)(char *, void *, struct svc_req *);
+
+    switch (rqstp->rq_proc) {
+    case NULLPROC:
+        (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
+        return;
+
+    case rpc_loc_api_cb_null:
+        _xdr_argument = (xdrproc_t) xdr_void;
+        _xdr_result = (xdrproc_t) xdr_int;
+        local = (bool_t (*) (char *, void *,  struct svc_req *))rpc_loc_api_cb_null_0x00050004_svc;
+        break;
+
+    default:
+        svcerr_noproc (transp);
+        return;
+    }
+    memset ((char *)&argument, 0, sizeof (argument));
+    if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        svcerr_decode (transp);
+        return;
+    }
+    retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
+    if (retval > 0 && !svc_sendreply(transp, (xdrproc_t) _xdr_result, (char *)&result)) {
+        svcerr_systemerr (transp);
+    }
+    if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        fprintf (stderr, "%s", "unable to free arguments");
+        exit (1);
+    }
+    if (!loc_apicbprog_0x00050004_freeresult (transp, _xdr_result, (caddr_t) &result))
+        fprintf (stderr, "%s", "unable to free results");
+
+    return;
+}
+
+void
+loc_apicbprog_0x00050005(struct svc_req *rqstp, register SVCXPRT *transp)
+{
+    union {
+        int fill;
+    } argument;
+    union {
+        int rpc_loc_api_cb_null_0x00050005_res;
+    } result;
+    bool_t retval;
+    xdrproc_t _xdr_argument, _xdr_result;
+    bool_t (*local)(char *, void *, struct svc_req *);
+
+    switch (rqstp->rq_proc) {
+    case NULLPROC:
+        (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
+        return;
+
+    case rpc_loc_api_cb_null:
+        _xdr_argument = (xdrproc_t) xdr_void;
+        _xdr_result = (xdrproc_t) xdr_int;
+        local = (bool_t (*) (char *, void *,  struct svc_req *))rpc_loc_api_cb_null_0x00050005_svc;
+        break;
+
+    default:
+        svcerr_noproc (transp);
+        return;
+    }
+    memset ((char *)&argument, 0, sizeof (argument));
+    if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        svcerr_decode (transp);
+        return;
+    }
+    retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
+    if (retval > 0 && !svc_sendreply(transp, (xdrproc_t) _xdr_result, (char *)&result)) {
+        svcerr_systemerr (transp);
+    }
+    if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        fprintf (stderr, "%s", "unable to free arguments");
+        exit (1);
+    }
+    if (!loc_apicbprog_0x00050005_freeresult (transp, _xdr_result, (caddr_t) &result))
+        fprintf (stderr, "%s", "unable to free results");
+
+    return;
+}
+
+void
+loc_apicbprog_0x00050006(struct svc_req *rqstp, register SVCXPRT *transp)
+{
+    union {
+        int fill;
+    } argument;
+    union {
+        int rpc_loc_api_cb_null_0x00050006_res;
+    } result;
+    bool_t retval;
+    xdrproc_t _xdr_argument, _xdr_result;
+    bool_t (*local)(char *, void *, struct svc_req *);
+
+    switch (rqstp->rq_proc) {
+    case NULLPROC:
+        (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
+        return;
+
+    case rpc_loc_api_cb_null:
+        _xdr_argument = (xdrproc_t) xdr_void;
+        _xdr_result = (xdrproc_t) xdr_int;
+        local = (bool_t (*) (char *, void *,  struct svc_req *))rpc_loc_api_cb_null_0x00050006_svc;
+        break;
+
+    default:
+        svcerr_noproc (transp);
+        return;
+    }
+    memset ((char *)&argument, 0, sizeof (argument));
+    if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        svcerr_decode (transp);
+        return;
+    }
+    retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
+    if (retval > 0 && !svc_sendreply(transp, (xdrproc_t) _xdr_result, (char *)&result)) {
+        svcerr_systemerr (transp);
+    }
+    if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
+        fprintf (stderr, "%s", "unable to free arguments");
+        exit (1);
+    }
+    if (!loc_apicbprog_0x00050006_freeresult (transp, _xdr_result, (caddr_t) &result))
+        fprintf (stderr, "%s", "unable to free results");
+
+    return;
+}
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_xdr.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_xdr.c
new file mode 100755
index 0000000..7f51928
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_xdr.c
@@ -0,0 +1,60 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "loc_api_rpcgen_cb_rpc.h"
+
+bool_t
+xdr_rpc_loc_event_cb_f_type_args (XDR *xdrs, rpc_loc_event_cb_f_type_args *objp)
+{
+;
+
+     if (!xdr_rpc_uint32 (xdrs, &objp->cb_id))
+         return FALSE;
+     if (!xdr_rpc_loc_client_handle_type (xdrs, &objp->loc_handle))
+         return FALSE;
+     if (!xdr_rpc_loc_event_mask_type (xdrs, &objp->loc_event))
+         return FALSE;
+     if (!xdr_pointer (xdrs, (char **)&objp->loc_event_payload, sizeof (rpc_loc_event_payload_u_type), (xdrproc_t) xdr_rpc_loc_event_payload_u_type))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_event_cb_f_type_rets (XDR *xdrs, rpc_loc_event_cb_f_type_rets *objp)
+{
+;
+
+     if (!xdr_rpc_int32 (xdrs, &objp->loc_event_cb_f_type_result))
+         return FALSE;
+    return TRUE;
+}
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_clnt.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_clnt.c
new file mode 100755
index 0000000..d2152ab
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_clnt.c
@@ -0,0 +1,155 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include <memory.h> /* for memset */
+#include "loc_api_rpcgen_rpc.h"
+
+/* Default timeout can be changed using clnt_control() */
+static struct timeval TIMEOUT = { 25, 0 };
+
+enum clnt_stat
+rpc_loc_api_null_0x00050001(void *argp, void *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_api_null,
+        (xdrproc_t) xdr_void, (caddr_t) argp,
+        (xdrproc_t) xdr_void, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_api_rpc_glue_code_info_remote_0x00050001(void *argp, rpc_loc_api_rpc_glue_code_info_remote_rets *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_api_rpc_glue_code_info_remote,
+        (xdrproc_t) xdr_void, (caddr_t) argp,
+        (xdrproc_t) xdr_rpc_loc_api_rpc_glue_code_info_remote_rets, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_open_0x00050001(rpc_loc_open_args *argp, rpc_loc_open_rets *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_open,
+        (xdrproc_t) xdr_rpc_loc_open_args, (caddr_t) argp,
+        (xdrproc_t) xdr_rpc_loc_open_rets, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_close_0x00050001(rpc_loc_close_args *argp, rpc_loc_close_rets *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_close,
+        (xdrproc_t) xdr_rpc_loc_close_args, (caddr_t) argp,
+        (xdrproc_t) xdr_rpc_loc_close_rets, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_start_fix_0x00050001(rpc_loc_start_fix_args *argp, rpc_loc_start_fix_rets *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_start_fix,
+        (xdrproc_t) xdr_rpc_loc_start_fix_args, (caddr_t) argp,
+        (xdrproc_t) xdr_rpc_loc_start_fix_rets, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_stop_fix_0x00050001(rpc_loc_stop_fix_args *argp, rpc_loc_stop_fix_rets *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_stop_fix,
+        (xdrproc_t) xdr_rpc_loc_stop_fix_args, (caddr_t) argp,
+        (xdrproc_t) xdr_rpc_loc_stop_fix_rets, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_ioctl_0x00050001(rpc_loc_ioctl_args *argp, rpc_loc_ioctl_rets *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_ioctl,
+        (xdrproc_t) xdr_rpc_loc_ioctl_args, (caddr_t) argp,
+        (xdrproc_t) xdr_rpc_loc_ioctl_rets, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_api_api_versions_0x00050001(void *argp, rpc_loc_api_api_versions_rets *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_api_api_versions,
+        (xdrproc_t) xdr_void, (caddr_t) argp,
+        (xdrproc_t) xdr_rpc_loc_api_api_versions_rets, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_api_null_0x00050002(void *argp, void *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_api_null,
+        (xdrproc_t) xdr_void, (caddr_t) argp,
+        (xdrproc_t) xdr_void, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_api_null_0x00050003(void *argp, void *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_api_null,
+        (xdrproc_t) xdr_void, (caddr_t) argp,
+        (xdrproc_t) xdr_void, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_api_null_0x00050004(void *argp, void *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_api_null,
+        (xdrproc_t) xdr_void, (caddr_t) argp,
+        (xdrproc_t) xdr_void, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_api_null_0x00050005(void *argp, void *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_api_null,
+        (xdrproc_t) xdr_void, (caddr_t) argp,
+        (xdrproc_t) xdr_void, (caddr_t) clnt_res,
+        TIMEOUT));
+}
+
+enum clnt_stat
+rpc_loc_api_null_0x00050006(void *argp, void *clnt_res, CLIENT *clnt)
+{
+    return (clnt_call(clnt, rpc_loc_api_null,
+        (xdrproc_t) xdr_void, (caddr_t) argp,
+        (xdrproc_t) xdr_void, (caddr_t) clnt_res,
+        TIMEOUT));
+}
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_common_xdr.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_common_xdr.c
new file mode 100755
index 0000000..da066b4
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_common_xdr.c
@@ -0,0 +1,1775 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "loc_api_rpcgen_common_rpc.h"
+
+bool_t
+xdr_rpc_loc_client_handle_type (XDR *xdrs, rpc_loc_client_handle_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_int32 (xdrs, objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_event_mask_type (XDR *xdrs, rpc_loc_event_mask_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint64 (xdrs, objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_position_valid_mask_type (XDR *xdrs, rpc_loc_position_valid_mask_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint64 (xdrs, objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_pos_technology_mask_type (XDR *xdrs, rpc_loc_pos_technology_mask_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_session_status_e_type (XDR *xdrs, rpc_loc_session_status_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_calendar_time_s_type (XDR *xdrs, rpc_loc_calendar_time_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint16 (xdrs, &objp->year))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->month))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->day_of_week))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->day))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->hour))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->minute))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->second))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->millisecond))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_parsed_position_s_type (XDR *xdrs, rpc_loc_parsed_position_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_position_valid_mask_type (xdrs, &objp->valid_mask))
+         return FALSE;
+     if (!xdr_rpc_loc_session_status_e_type (xdrs, &objp->session_status))
+         return FALSE;
+     if (!xdr_rpc_loc_calendar_time_s_type (xdrs, &objp->timestamp_calendar))
+         return FALSE;
+     if (!xdr_rpc_uint64 (xdrs, &objp->timestamp_utc))
+         return FALSE;
+     if (!xdr_rpc_uint8 (xdrs, &objp->leap_seconds))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->time_unc))
+         return FALSE;
+     if (!xdr_double (xdrs, &objp->latitude))
+         return FALSE;
+     if (!xdr_double (xdrs, &objp->longitude))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->altitude_wrt_ellipsoid))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->altitude_wrt_mean_sea_level))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->speed_horizontal))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->speed_vertical))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->heading))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->hor_unc_circular))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->hor_unc_ellipse_semi_major))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->hor_unc_ellipse_semi_minor))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->hor_unc_ellipse_orient_azimuth))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->vert_unc))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->speed_unc))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->heading_unc))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->confidence_horizontal))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->confidence_vertical))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->magnetic_deviation))
+         return FALSE;
+     if (!xdr_rpc_loc_pos_technology_mask_type (xdrs, &objp->technology_mask))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_sv_system_e_type (XDR *xdrs, rpc_loc_sv_system_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_sv_status_e_type (XDR *xdrs, rpc_loc_sv_status_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_sv_info_valid_mask_type (XDR *xdrs, rpc_loc_sv_info_valid_mask_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_sv_info_s_type (XDR *xdrs, rpc_loc_sv_info_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_sv_info_valid_mask_type (xdrs, &objp->valid_mask))
+         return FALSE;
+     if (!xdr_rpc_loc_sv_system_e_type (xdrs, &objp->system))
+         return FALSE;
+     if (!xdr_rpc_uint8 (xdrs, &objp->prn))
+         return FALSE;
+     if (!xdr_rpc_uint8 (xdrs, &objp->health_status))
+         return FALSE;
+     if (!xdr_rpc_loc_sv_status_e_type (xdrs, &objp->process_status))
+         return FALSE;
+     if (!xdr_rpc_boolean (xdrs, &objp->has_eph))
+         return FALSE;
+     if (!xdr_rpc_boolean (xdrs, &objp->has_alm))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->elevation))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->azimuth))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->snr))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_gnss_info_valid_mask_type (XDR *xdrs, rpc_loc_gnss_info_valid_mask_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_gnss_info_s_type (XDR *xdrs, rpc_loc_gnss_info_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_gnss_info_valid_mask_type (xdrs, &objp->valid_mask))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->position_dop))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->horizontal_dop))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->vertical_dop))
+         return FALSE;
+     if (!xdr_rpc_boolean (xdrs, &objp->altitude_assumed))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->sv_count))
+         return FALSE;
+     if (!xdr_array (xdrs, (char **)&objp->sv_list.sv_list_val, (u_int *) &objp->sv_list.sv_list_len, 80,
+        sizeof (rpc_loc_sv_info_s_type), (xdrproc_t) xdr_rpc_loc_sv_info_s_type))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_nmea_report_s_type (XDR *xdrs, rpc_loc_nmea_report_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_rpc_uint16 (xdrs, &objp->length))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->nmea_sentences, 200))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_status_event_e_type (XDR *xdrs, rpc_loc_status_event_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_engine_state_e_type (XDR *xdrs, rpc_loc_engine_state_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_fix_session_state_e_type (XDR *xdrs, rpc_loc_fix_session_state_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_status_event_payload_u_type (XDR *xdrs, rpc_loc_status_event_payload_u_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_status_event_e_type (xdrs, &objp->disc))
+         return FALSE;
+    switch (objp->disc) {
+    case RPC_LOC_STATUS_EVENT_ENGINE_STATE:
+         if (!xdr_rpc_loc_engine_state_e_type (xdrs, &objp->rpc_loc_status_event_payload_u_type_u.engine_state))
+             return FALSE;
+        break;
+    case RPC_LOC_STATUS_EVENT_FIX_SESSION_STATE:
+         if (!xdr_rpc_loc_fix_session_state_e_type (xdrs, &objp->rpc_loc_status_event_payload_u_type_u.fix_session_state))
+             return FALSE;
+        break;
+    default:
+        break;
+    }
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_status_event_s_type (XDR *xdrs, rpc_loc_status_event_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_status_event_e_type (xdrs, &objp->event))
+         return FALSE;
+     if (!xdr_rpc_loc_status_event_payload_u_type (xdrs, &objp->payload))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_addr_e_type (XDR *xdrs, rpc_loc_server_addr_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_addr_ipv4_type (XDR *xdrs, rpc_loc_server_addr_ipv4_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, &objp->addr))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->port))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_addr_url_type (XDR *xdrs, rpc_loc_server_addr_url_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_rpc_uint16 (xdrs, &objp->length))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->addr, 256))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_addr_ipv6_type (XDR *xdrs, rpc_loc_server_addr_ipv6_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_vector (xdrs, (char *)objp->addr, 8,
+        sizeof (rpc_uint16), (xdrproc_t) xdr_rpc_uint16))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->port))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_addr_u_type (XDR *xdrs, rpc_loc_server_addr_u_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_server_addr_e_type (xdrs, &objp->disc))
+         return FALSE;
+    switch (objp->disc) {
+    case RPC_LOC_SERVER_ADDR_IPV4:
+         if (!xdr_rpc_loc_server_addr_ipv4_type (xdrs, &objp->rpc_loc_server_addr_u_type_u.ipv4))
+             return FALSE;
+        break;
+    case RPC_LOC_SERVER_ADDR_URL:
+         if (!xdr_rpc_loc_server_addr_url_type (xdrs, &objp->rpc_loc_server_addr_u_type_u.url))
+             return FALSE;
+        break;
+    case RPC_LOC_SERVER_ADDR_IPV6:
+         if (!xdr_rpc_loc_server_addr_ipv6_type (xdrs, &objp->rpc_loc_server_addr_u_type_u.ipv6))
+             return FALSE;
+        break;
+    default:
+        break;
+    }
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_info_s_type (XDR *xdrs, rpc_loc_server_info_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_server_addr_e_type (xdrs, &objp->addr_type))
+         return FALSE;
+     if (!xdr_rpc_loc_server_addr_u_type (xdrs, &objp->addr_info))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_notify_verify_e_type (XDR *xdrs, rpc_loc_ni_notify_verify_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_event_e_type (XDR *xdrs, rpc_loc_ni_event_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_datacoding_scheme_e_type (XDR *xdrs, rpc_loc_ni_datacoding_scheme_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_vx_requester_id_encoding_scheme_e_type (XDR *xdrs, rpc_loc_ni_vx_requester_id_encoding_scheme_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_vx_pos_mode_e_type (XDR *xdrs, rpc_loc_ni_vx_pos_mode_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_vx_requester_id_s_type (XDR *xdrs, rpc_loc_ni_vx_requester_id_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_u_char (xdrs, &objp->requester_id_length))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->requester_id, 200))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_vx_notify_verify_req_s_type (XDR *xdrs, rpc_loc_ni_vx_notify_verify_req_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_ni_notify_verify_e_type (xdrs, &objp->notification_priv_type))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->pos_qos_incl))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->pos_qos))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->num_fixes))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->tbf))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_vx_pos_mode_e_type (xdrs, &objp->pos_mode))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_vx_requester_id_encoding_scheme_e_type (xdrs, &objp->encoding_scheme))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_vx_requester_id_s_type (xdrs, &objp->requester_id))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->user_resp_timer_val))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_supl_pos_method_e_type (XDR *xdrs, rpc_loc_ni_supl_pos_method_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_supl_slp_session_id_s_type (XDR *xdrs, rpc_loc_ni_supl_slp_session_id_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_u_char (xdrs, &objp->presence))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->session_id, 4))
+         return FALSE;
+     if (!xdr_rpc_loc_server_info_s_type (xdrs, &objp->slp_address))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_requestor_id_s_type (XDR *xdrs, rpc_loc_ni_requestor_id_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_u_char (xdrs, &objp->data_coding_scheme))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->requestor_id_string, 200))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->string_len))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_supl_client_name_s_type (XDR *xdrs, rpc_loc_ni_supl_client_name_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_u_char (xdrs, &objp->data_coding_scheme))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->client_name_string, 64))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->string_len))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_supl_qop_s_type (XDR *xdrs, rpc_loc_ni_supl_qop_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_u_char (xdrs, &objp->bit_mask))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->horacc))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->veracc))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->maxLocAge))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->delay))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_supl_notify_verify_req_s_type (XDR *xdrs, rpc_loc_ni_supl_notify_verify_req_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_rpc_loc_ni_notify_verify_e_type (xdrs, &objp->notification_priv_type))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->flags))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_supl_slp_session_id_s_type (xdrs, &objp->supl_slp_session_id))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->supl_hash, 8))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_datacoding_scheme_e_type (xdrs, &objp->datacoding_scheme))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_supl_pos_method_e_type (xdrs, &objp->pos_method))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_requestor_id_s_type (xdrs, &objp->requestor_id))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_supl_client_name_s_type (xdrs, &objp->client_name))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_supl_qop_s_type (xdrs, &objp->supl_qop))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->user_response_timer))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_ext_client_address_s_type (XDR *xdrs, rpc_loc_ni_ext_client_address_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_u_char (xdrs, &objp->ext_client_address_len))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->ext_client_address, 20))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_location_type_e_type (XDR *xdrs, rpc_loc_ni_location_type_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_deferred_location_s_type (XDR *xdrs, rpc_loc_ni_deferred_location_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_u_char (xdrs, &objp->unused_bits))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->ms_available))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_codeword_string_s_type (XDR *xdrs, rpc_loc_ni_codeword_string_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_u_char (xdrs, &objp->data_coding_scheme))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->lcs_codeword_string, 20))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->string_len))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_service_type_id_s_type (XDR *xdrs, rpc_loc_ni_service_type_id_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_u_char (xdrs, &objp->lcs_service_type_id))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_umts_cp_notify_verify_req_s_type (XDR *xdrs, rpc_loc_ni_umts_cp_notify_verify_req_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_rpc_loc_ni_notify_verify_e_type (xdrs, &objp->notification_priv_type))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->invoke_id))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->flags))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->notification_length))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->notification_text, 64))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_datacoding_scheme_e_type (xdrs, &objp->datacoding_scheme))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_ext_client_address_s_type (xdrs, &objp->ext_client_address_data))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_location_type_e_type (xdrs, &objp->location_type))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_deferred_location_s_type (xdrs, &objp->deferred_location))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_requestor_id_s_type (xdrs, &objp->requestor_id))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_codeword_string_s_type (xdrs, &objp->codeword_string))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_service_type_id_s_type (xdrs, &objp->service_type_id))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->user_response_timer))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_service_interaction_e_type (XDR *xdrs, rpc_loc_ni_service_interaction_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_vx_service_interaction_req_s_type (XDR *xdrs, rpc_loc_ni_vx_service_interaction_req_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_ni_vx_notify_verify_req_s_type (xdrs, &objp->ni_vx_req))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_service_interaction_e_type (xdrs, &objp->service_interation_type))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_event_payload_u_type (XDR *xdrs, rpc_loc_ni_event_payload_u_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_ni_event_e_type (xdrs, &objp->disc))
+         return FALSE;
+    switch (objp->disc) {
+    case RPC_LOC_NI_EVENT_VX_NOTIFY_VERIFY_REQ:
+         if (!xdr_rpc_loc_ni_vx_notify_verify_req_s_type (xdrs, &objp->rpc_loc_ni_event_payload_u_type_u.vx_req))
+             return FALSE;
+        break;
+    case RPC_LOC_NI_EVENT_SUPL_NOTIFY_VERIFY_REQ:
+         if (!xdr_rpc_loc_ni_supl_notify_verify_req_s_type (xdrs, &objp->rpc_loc_ni_event_payload_u_type_u.supl_req))
+             return FALSE;
+        break;
+    case RPC_LOC_NI_EVENT_UMTS_CP_NOTIFY_VERIFY_REQ:
+         if (!xdr_rpc_loc_ni_umts_cp_notify_verify_req_s_type (xdrs, &objp->rpc_loc_ni_event_payload_u_type_u.umts_cp_req))
+             return FALSE;
+        break;
+    case RPC_LOC_NI_EVENT_VX_SERVICE_INTERACTION_REQ:
+         if (!xdr_rpc_loc_ni_vx_service_interaction_req_s_type (xdrs, &objp->rpc_loc_ni_event_payload_u_type_u.service_interaction_req))
+             return FALSE;
+        break;
+    default:
+        break;
+    }
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_event_s_type (XDR *xdrs, rpc_loc_ni_event_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_ni_event_e_type (xdrs, &objp->event))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_event_payload_u_type (xdrs, &objp->payload))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_assist_data_request_e_type (XDR *xdrs, rpc_loc_assist_data_request_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_struct_loc_time_download_source_s_type_servers_ptr (XDR *xdrs, rpc_struct_loc_time_download_source_s_type_servers_ptr *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_string (xdrs, objp, 256))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_struct_loc_time_download_source_s_type_servers (XDR *xdrs, rpc_struct_loc_time_download_source_s_type_servers objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_vector (xdrs, (char *)objp, 3,
+        sizeof (rpc_struct_loc_time_download_source_s_type_servers_ptr), (xdrproc_t) xdr_rpc_struct_loc_time_download_source_s_type_servers_ptr))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_time_download_source_s_type (XDR *xdrs, rpc_loc_time_download_source_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, &objp->delay_threshold))
+         return FALSE;
+     if (!xdr_rpc_struct_loc_time_download_source_s_type_servers (xdrs, objp->servers))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr (XDR *xdrs, rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_string (xdrs, objp, 256))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_struct_loc_predicted_orbits_data_source_s_type_servers (XDR *xdrs, rpc_struct_loc_predicted_orbits_data_source_s_type_servers objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_vector (xdrs, (char *)objp, 3,
+        sizeof (rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr), (xdrproc_t) xdr_rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_predicted_orbits_data_source_s_type (XDR *xdrs, rpc_loc_predicted_orbits_data_source_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, &objp->max_file_size))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->max_part_size))
+         return FALSE;
+     if (!xdr_rpc_struct_loc_predicted_orbits_data_source_s_type_servers (xdrs, objp->servers))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_pos_inj_request_s_type (XDR *xdrs, rpc_loc_pos_inj_request_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, &objp->flags))
+         return FALSE;
+     if (!xdr_double (xdrs, &objp->latitude))
+         return FALSE;
+     if (!xdr_double (xdrs, &objp->longitude))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->position_uncertainty))
+         return FALSE;
+     if (!xdr_rpc_uint64 (xdrs, &objp->timestamp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_assist_data_request_payload_u_type (XDR *xdrs, rpc_loc_assist_data_request_payload_u_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_assist_data_request_e_type (xdrs, &objp->disc))
+         return FALSE;
+    switch (objp->disc) {
+    case RPC_LOC_ASSIST_DATA_TIME_REQ:
+         if (!xdr_rpc_loc_time_download_source_s_type (xdrs, &objp->rpc_loc_assist_data_request_payload_u_type_u.time_download))
+             return FALSE;
+        break;
+    case RPC_LOC_ASSIST_DATA_PREDICTED_ORBITS_REQ:
+         if (!xdr_rpc_loc_predicted_orbits_data_source_s_type (xdrs, &objp->rpc_loc_assist_data_request_payload_u_type_u.data_download))
+             return FALSE;
+        break;
+    case RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ:
+         if (!xdr_rpc_loc_pos_inj_request_s_type (xdrs, &objp->rpc_loc_assist_data_request_payload_u_type_u.pos_injection))
+             return FALSE;
+        break;
+    default:
+        break;
+    }
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_assist_data_request_s_type (XDR *xdrs, rpc_loc_assist_data_request_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_assist_data_request_e_type (xdrs, &objp->event))
+         return FALSE;
+     if (!xdr_rpc_loc_assist_data_request_payload_u_type (xdrs, &objp->payload))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_connection_handle (XDR *xdrs, rpc_loc_server_connection_handle *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_protocol_e_type (XDR *xdrs, rpc_loc_server_protocol_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_connection_e_type (XDR *xdrs, rpc_loc_server_connection_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_request_e_type (XDR *xdrs, rpc_loc_server_request_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_open_req_s_type (XDR *xdrs, rpc_loc_server_open_req_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_server_connection_handle (xdrs, &objp->conn_handle))
+         return FALSE;
+     if (!xdr_rpc_loc_server_protocol_e_type (xdrs, &objp->protocol))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_multi_open_req_s_type (XDR *xdrs, rpc_loc_server_multi_open_req_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_server_connection_handle (xdrs, &objp->conn_handle))
+         return FALSE;
+     if (!xdr_rpc_loc_server_protocol_e_type (xdrs, &objp->protocol))
+         return FALSE;
+     if (!xdr_rpc_loc_server_connection_e_type (xdrs, &objp->connection_type))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_close_req_s_type (XDR *xdrs, rpc_loc_server_close_req_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_server_connection_handle (xdrs, &objp->conn_handle))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_request_u_type (XDR *xdrs, rpc_loc_server_request_u_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_server_request_e_type (xdrs, &objp->disc))
+         return FALSE;
+    switch (objp->disc) {
+    case RPC_LOC_SERVER_REQUEST_OPEN:
+         if (!xdr_rpc_loc_server_open_req_s_type (xdrs, &objp->rpc_loc_server_request_u_type_u.open_req))
+             return FALSE;
+        break;
+    case RPC_LOC_SERVER_REQUEST_CLOSE:
+         if (!xdr_rpc_loc_server_close_req_s_type (xdrs, &objp->rpc_loc_server_request_u_type_u.close_req))
+             return FALSE;
+        break;
+    case RPC_LOC_SERVER_REQUEST_MULTI_OPEN:
+         if (!xdr_rpc_loc_server_multi_open_req_s_type (xdrs, &objp->rpc_loc_server_request_u_type_u.multi_open_req))
+             return FALSE;
+        break;
+    default:
+        break;
+    }
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_request_s_type (XDR *xdrs, rpc_loc_server_request_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_server_request_e_type (xdrs, &objp->event))
+         return FALSE;
+     if (!xdr_rpc_loc_server_request_u_type (xdrs, &objp->payload))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_qwip_request_e_type (XDR *xdrs, rpc_loc_qwip_request_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_qwip_request_s_type (XDR *xdrs, rpc_loc_qwip_request_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_qwip_request_e_type (xdrs, &objp->request_type))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->tbf_ms))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_reserved_payload_s_type (XDR *xdrs, rpc_loc_reserved_payload_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint16 (xdrs, &objp->data_size))
+         return FALSE;
+     if (!xdr_bytes (xdrs, (char **)&objp->data.data_val, (u_int *) &objp->data.data_len, ~0))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ioctl_e_type (XDR *xdrs, rpc_loc_ioctl_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_api_version_s_type (XDR *xdrs, rpc_loc_api_version_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_u_char (xdrs, &objp->major))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->minor))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_fix_recurrence_e_type (XDR *xdrs, rpc_loc_fix_recurrence_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_operation_mode_e_type (XDR *xdrs, rpc_loc_operation_mode_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_notify_e_type (XDR *xdrs, rpc_loc_notify_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_fix_criteria_s_type (XDR *xdrs, rpc_loc_fix_criteria_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, &objp->valid_mask))
+         return FALSE;
+     if (!xdr_rpc_loc_fix_recurrence_e_type (xdrs, &objp->recurrence_type))
+         return FALSE;
+     if (!xdr_rpc_loc_operation_mode_e_type (xdrs, &objp->preferred_operation_mode))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->preferred_accuracy))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->preferred_response_time))
+         return FALSE;
+     if (!xdr_rpc_boolean (xdrs, &objp->intermediate_pos_report_enabled))
+         return FALSE;
+     if (!xdr_rpc_loc_notify_e_type (xdrs, &objp->notify_type))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->min_interval))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->min_distance))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->min_dist_sample_interval))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ni_user_resp_e_type (XDR *xdrs, rpc_loc_ni_user_resp_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_user_verify_s_type (XDR *xdrs, rpc_loc_user_verify_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_ni_user_resp_e_type (xdrs, &objp->user_resp))
+         return FALSE;
+     if (!xdr_rpc_loc_ni_event_s_type (xdrs, &objp->ni_event_pass_back))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_predicted_orbits_data_format_e_type (XDR *xdrs, rpc_loc_predicted_orbits_data_format_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_predicted_orbits_data_s_type (XDR *xdrs, rpc_loc_predicted_orbits_data_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_predicted_orbits_data_format_e_type (xdrs, &objp->format_type))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->total_size))
+         return FALSE;
+     if (!xdr_rpc_uint8 (xdrs, &objp->total_parts))
+         return FALSE;
+     if (!xdr_rpc_uint8 (xdrs, &objp->part))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->part_len))
+         return FALSE;
+     if (!xdr_bytes (xdrs, (char **)&objp->data_ptr.data_ptr_val, (u_int *) &objp->data_ptr.data_ptr_len, ~0))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_predicted_orbits_data_validity_report_s_type (XDR *xdrs, rpc_loc_predicted_orbits_data_validity_report_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint64 (xdrs, &objp->start_time_utc))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->valid_duration_hrs))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_predicted_orbits_auto_download_config_s_type (XDR *xdrs, rpc_loc_predicted_orbits_auto_download_config_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_boolean (xdrs, &objp->enable))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->auto_check_every_hrs))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_assist_data_time_s_type (XDR *xdrs, rpc_loc_assist_data_time_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint64 (xdrs, &objp->time_utc))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->uncertainty))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_assist_pos_valid_mask_type (XDR *xdrs, rpc_loc_assist_pos_valid_mask_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint64 (xdrs, objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_assist_data_pos_s_type (XDR *xdrs, rpc_loc_assist_data_pos_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_assist_pos_valid_mask_type (xdrs, &objp->valid_mask))
+         return FALSE;
+     if (!xdr_rpc_uint64 (xdrs, &objp->timestamp_utc))
+         return FALSE;
+     if (!xdr_double (xdrs, &objp->latitude))
+         return FALSE;
+     if (!xdr_double (xdrs, &objp->longitude))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->altitude_wrt_ellipsoid))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->altitude_wrt_mean_sea_level))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->hor_unc_circular))
+         return FALSE;
+     if (!xdr_float (xdrs, &objp->vert_unc))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->confidence_horizontal))
+         return FALSE;
+     if (!xdr_u_char (xdrs, &objp->confidence_vertical))
+         return FALSE;
+     if (!xdr_rpc_int32 (xdrs, &objp->timestamp_age))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_open_status_e_type (XDR *xdrs, rpc_loc_server_open_status_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_pdp_type_e_type (XDR *xdrs, rpc_loc_server_pdp_type_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_open_status_s_type (XDR *xdrs, rpc_loc_server_open_status_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_rpc_loc_server_connection_handle (xdrs, &objp->conn_handle))
+         return FALSE;
+     if (!xdr_rpc_loc_server_open_status_e_type (xdrs, &objp->open_status))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->apn_name, 100))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_multi_open_status_s_type (XDR *xdrs, rpc_loc_server_multi_open_status_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_rpc_loc_server_connection_handle (xdrs, &objp->conn_handle))
+         return FALSE;
+     if (!xdr_rpc_loc_server_open_status_e_type (xdrs, &objp->open_status))
+         return FALSE;
+     if (!xdr_rpc_loc_server_pdp_type_e_type (xdrs, &objp->pdp_type))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->apn_name, 100))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_close_status_e_type (XDR *xdrs, rpc_loc_server_close_status_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_server_close_status_s_type (XDR *xdrs, rpc_loc_server_close_status_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_server_connection_handle (xdrs, &objp->conn_handle))
+         return FALSE;
+     if (!xdr_rpc_loc_server_close_status_e_type (xdrs, &objp->close_status))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_wiper_fix_time_s_type (XDR *xdrs, rpc_loc_wiper_fix_time_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, &objp->slow_clock_count))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_wiper_fix_pos_s_type (XDR *xdrs, rpc_loc_wiper_fix_pos_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_int32 (xdrs, &objp->lat))
+         return FALSE;
+     if (!xdr_rpc_int32 (xdrs, &objp->lon))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->HEPE))
+         return FALSE;
+     if (!xdr_rpc_uint8 (xdrs, &objp->num_of_aps_used))
+         return FALSE;
+     if (!xdr_rpc_uint8 (xdrs, &objp->fix_error_code))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_wiper_ap_info_s_type (XDR *xdrs, rpc_loc_wiper_ap_info_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_opaque (xdrs, objp->mac_addr, 6))
+         return FALSE;
+     if (!xdr_rpc_int32 (xdrs, &objp->rssi))
+         return FALSE;
+     if (!xdr_rpc_uint16 (xdrs, &objp->channel))
+         return FALSE;
+     if (!xdr_rpc_uint8 (xdrs, &objp->ap_qualifier))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_wiper_ap_set_s_type (XDR *xdrs, rpc_loc_wiper_ap_set_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_rpc_uint8 (xdrs, &objp->num_of_aps))
+         return FALSE;
+     if (!xdr_vector (xdrs, (char *)objp->ap_info, 50,
+        sizeof (rpc_loc_wiper_ap_info_s_type), (xdrproc_t) xdr_rpc_loc_wiper_ap_info_s_type))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_wiper_position_report_s_type (XDR *xdrs, rpc_loc_wiper_position_report_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint8 (xdrs, &objp->wiper_valid_info_flag))
+         return FALSE;
+     if (!xdr_rpc_loc_wiper_fix_time_s_type (xdrs, &objp->wiper_fix_time))
+         return FALSE;
+     if (!xdr_rpc_loc_wiper_fix_pos_s_type (xdrs, &objp->wiper_fix_position))
+         return FALSE;
+     if (!xdr_rpc_loc_wiper_ap_set_s_type (xdrs, &objp->wiper_ap_set))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_wiper_status_e_type (XDR *xdrs, rpc_loc_wiper_status_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_fs_operation_e_type (XDR *xdrs, rpc_loc_fs_operation_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_efs_data_s_type (XDR *xdrs, rpc_loc_efs_data_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_opaque (xdrs, objp->filename, 64))
+         return FALSE;
+     if (!xdr_rpc_loc_fs_operation_e_type (xdrs, &objp->operation))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->total_size))
+         return FALSE;
+     if (!xdr_bytes (xdrs, (char **)&objp->data_ptr.data_ptr_val, (u_int *) &objp->data_ptr.data_ptr_len, ~0))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->part_len))
+         return FALSE;
+     if (!xdr_rpc_uint8 (xdrs, &objp->part))
+         return FALSE;
+     if (!xdr_rpc_uint8 (xdrs, &objp->total_parts))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->reserved))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_error_estimate_config_e_type (XDR *xdrs, rpc_loc_error_estimate_config_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_apn_profiles_type (XDR *xdrs, rpc_loc_apn_profiles_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_rpc_uint32 (xdrs, &objp->srv_system_type))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->pdp_type))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->reserved))
+         return FALSE;
+     if (!xdr_opaque (xdrs, objp->apn_name, 100))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_lock_e_type (XDR *xdrs, rpc_loc_lock_e_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_enum (xdrs, (enum_t *) objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_nmea_sentence_type (XDR *xdrs, rpc_loc_nmea_sentence_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_assist_data_type (XDR *xdrs, rpc_loc_assist_data_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_uint32 (xdrs, objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_assist_data_delete_s_type (XDR *xdrs, rpc_loc_assist_data_delete_s_type *objp)
+{
+    register int32_t *buf;
+
+    int i;
+     if (!xdr_rpc_loc_assist_data_type (xdrs, &objp->type))
+         return FALSE;
+     if (!xdr_vector (xdrs, (char *)objp->reserved, 8,
+        sizeof (rpc_uint32), (xdrproc_t) xdr_rpc_uint32))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ioctl_data_u_type (XDR *xdrs, rpc_loc_ioctl_data_u_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_ioctl_e_type (xdrs, &objp->disc))
+         return FALSE;
+    switch (objp->disc) {
+    case RPC_LOC_IOCTL_SET_FIX_CRITERIA:
+         if (!xdr_rpc_loc_fix_criteria_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.fix_criteria))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE:
+         if (!xdr_rpc_loc_user_verify_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.user_verify_resp))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA:
+         if (!xdr_rpc_loc_predicted_orbits_data_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.predicted_orbits_data))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_SET_PREDICTED_ORBITS_DATA_AUTO_DOWNLOAD:
+         if (!xdr_rpc_loc_predicted_orbits_auto_download_config_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.predicted_orbits_auto_download))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_INJECT_UTC_TIME:
+         if (!xdr_rpc_loc_assist_data_time_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.assistance_data_time))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_INJECT_POSITION:
+         if (!xdr_rpc_loc_assist_data_pos_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.assistance_data_position))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS:
+         if (!xdr_rpc_loc_server_open_status_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.conn_open_status))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS:
+         if (!xdr_rpc_loc_server_close_status_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.conn_close_status))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_SEND_WIPER_POSITION_REPORT:
+         if (!xdr_rpc_loc_wiper_position_report_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.wiper_pos))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_NOTIFY_WIPER_STATUS:
+         if (!xdr_rpc_loc_wiper_status_e_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.wiper_status))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_SET_ENGINE_LOCK:
+         if (!xdr_rpc_loc_lock_e_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.engine_lock))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_SET_SBAS_CONFIG:
+         if (!xdr_rpc_boolean (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.sbas_mode))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_SET_NMEA_TYPES:
+         if (!xdr_rpc_loc_nmea_sentence_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.nmea_types))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_SET_ON_DEMAND_LPM:
+         if (!xdr_rpc_boolean (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.on_demand_lpm))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR:
+    case RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR:
+    case RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR:
+    case RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR:
+         if (!xdr_rpc_loc_server_info_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.server_addr))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_DELETE_ASSIST_DATA:
+         if (!xdr_rpc_loc_assist_data_delete_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.assist_data_delete))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_ACCESS_EFS_DATA:
+         if (!xdr_rpc_loc_efs_data_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.efs_data))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG:
+         if (!xdr_rpc_loc_error_estimate_config_e_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.error_estimate_config))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL:
+         if (!xdr_rpc_uint8 (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.xtra_t_session_control))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_SET_LBS_APN_PROFILE:
+    case RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE:
+         if (!xdr_vector (xdrs, (char *)objp->rpc_loc_ioctl_data_u_type_u.apn_profiles, 6,
+            sizeof (rpc_loc_apn_profiles_type), (xdrproc_t) xdr_rpc_loc_apn_profiles_type))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_SET_DATA_ENABLE:
+         if (!xdr_rpc_boolean (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.data_enable))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_SET_SUPL_VERSION:
+         if (!xdr_rpc_uint32 (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.supl_version))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS:
+         if (!xdr_rpc_loc_server_multi_open_status_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.multi_conn_open_status))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_RESERVED_CMD:
+         if (!xdr_rpc_loc_reserved_payload_s_type (xdrs, &objp->rpc_loc_ioctl_data_u_type_u.reserved))
+             return FALSE;
+        break;
+    default:
+        break;
+    }
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ioctl_callback_data_u_type (XDR *xdrs, rpc_loc_ioctl_callback_data_u_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_ioctl_e_type (xdrs, &objp->disc))
+         return FALSE;
+    switch (objp->disc) {
+    case RPC_LOC_IOCTL_GET_API_VERSION:
+         if (!xdr_rpc_loc_api_version_s_type (xdrs, &objp->rpc_loc_ioctl_callback_data_u_type_u.api_version))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_GET_FIX_CRITERIA:
+         if (!xdr_rpc_loc_fix_criteria_s_type (xdrs, &objp->rpc_loc_ioctl_callback_data_u_type_u.fix_criteria))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_GET_ENGINE_LOCK:
+         if (!xdr_rpc_loc_lock_e_type (xdrs, &objp->rpc_loc_ioctl_callback_data_u_type_u.engine_lock))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_GET_SBAS_CONFIG:
+         if (!xdr_rpc_boolean (xdrs, &objp->rpc_loc_ioctl_callback_data_u_type_u.sbas_mode))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_GET_NMEA_TYPES:
+         if (!xdr_rpc_loc_nmea_sentence_type (xdrs, &objp->rpc_loc_ioctl_callback_data_u_type_u.nmea_types))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_GET_ON_DEMAND_LPM:
+         if (!xdr_rpc_boolean (xdrs, &objp->rpc_loc_ioctl_callback_data_u_type_u.on_demand_lpm))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_GET_CDMA_PDE_SERVER_ADDR:
+    case RPC_LOC_IOCTL_GET_CDMA_MPC_SERVER_ADDR:
+    case RPC_LOC_IOCTL_GET_UMTS_SLP_SERVER_ADDR:
+    case RPC_LOC_IOCTL_GET_CUSTOM_PDE_SERVER_ADDR:
+         if (!xdr_rpc_loc_server_info_s_type (xdrs, &objp->rpc_loc_ioctl_callback_data_u_type_u.server_addr))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE:
+         if (!xdr_rpc_loc_predicted_orbits_data_source_s_type (xdrs, &objp->rpc_loc_ioctl_callback_data_u_type_u.predicted_orbits_data_source))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_VALIDITY:
+         if (!xdr_rpc_loc_predicted_orbits_data_validity_report_s_type (xdrs, &objp->rpc_loc_ioctl_callback_data_u_type_u.predicted_orbits_data_validity))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL:
+         if (!xdr_rpc_uint8 (xdrs, &objp->rpc_loc_ioctl_callback_data_u_type_u.xtra_t_session_control))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_GET_LBS_APN_PROFILE:
+    case RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE:
+         if (!xdr_vector (xdrs, (char *)objp->rpc_loc_ioctl_callback_data_u_type_u.apn_profiles, 6,
+            sizeof (rpc_loc_apn_profiles_type), (xdrproc_t) xdr_rpc_loc_apn_profiles_type))
+             return FALSE;
+        break;
+    case RPC_LOC_IOCTL_GET_SUPL_VERSION:
+         if (!xdr_rpc_uint32 (xdrs, &objp->rpc_loc_ioctl_callback_data_u_type_u.supl_version))
+             return FALSE;
+        break;
+    default:
+        break;
+    }
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ioctl_callback_s_type (XDR *xdrs, rpc_loc_ioctl_callback_s_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_rpc_loc_ioctl_e_type (xdrs, &objp->type))
+         return FALSE;
+     if (!xdr_rpc_int32 (xdrs, &objp->status))
+         return FALSE;
+     if (!xdr_rpc_loc_ioctl_callback_data_u_type (xdrs, &objp->data))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_event_payload_u_type (XDR *xdrs, rpc_loc_event_payload_u_type *objp)
+{
+    register int32_t *buf;
+
+     if (!xdr_u_quad_t (xdrs, &objp->disc))
+         return FALSE;
+    switch (objp->disc) {
+    case RPC_LOC_EVENT_PARSED_POSITION_REPORT:
+         if (!xdr_rpc_loc_parsed_position_s_type (xdrs, &objp->rpc_loc_event_payload_u_type_u.parsed_location_report))
+             return FALSE;
+        break;
+    case RPC_LOC_EVENT_SATELLITE_REPORT:
+         if (!xdr_rpc_loc_gnss_info_s_type (xdrs, &objp->rpc_loc_event_payload_u_type_u.gnss_report))
+             return FALSE;
+        break;
+    case RPC_LOC_EVENT_NMEA_POSITION_REPORT:
+    case RPC_LOC_EVENT_NMEA_1HZ_REPORT:
+         if (!xdr_rpc_loc_nmea_report_s_type (xdrs, &objp->rpc_loc_event_payload_u_type_u.nmea_report))
+             return FALSE;
+        break;
+    case RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST:
+         if (!xdr_rpc_loc_ni_event_s_type (xdrs, &objp->rpc_loc_event_payload_u_type_u.ni_request))
+             return FALSE;
+        break;
+    case RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST:
+         if (!xdr_rpc_loc_assist_data_request_s_type (xdrs, &objp->rpc_loc_event_payload_u_type_u.assist_data_request))
+             return FALSE;
+        break;
+    case RPC_LOC_EVENT_LOCATION_SERVER_REQUEST:
+         if (!xdr_rpc_loc_server_request_s_type (xdrs, &objp->rpc_loc_event_payload_u_type_u.loc_server_request))
+             return FALSE;
+        break;
+    case RPC_LOC_EVENT_IOCTL_REPORT:
+         if (!xdr_rpc_loc_ioctl_callback_s_type (xdrs, &objp->rpc_loc_event_payload_u_type_u.ioctl_report))
+             return FALSE;
+        break;
+    case RPC_LOC_EVENT_STATUS_REPORT:
+         if (!xdr_rpc_loc_status_event_s_type (xdrs, &objp->rpc_loc_event_payload_u_type_u.status_report))
+             return FALSE;
+        break;
+    case RPC_LOC_EVENT_WPS_NEEDED_REQUEST:
+         if (!xdr_rpc_loc_qwip_request_s_type (xdrs, &objp->rpc_loc_event_payload_u_type_u.qwip_request))
+             return FALSE;
+        break;
+    case RPC_LOC_EVENT_RESERVED:
+         if (!xdr_rpc_loc_reserved_payload_s_type (xdrs, &objp->rpc_loc_event_payload_u_type_u.reserved))
+             return FALSE;
+        break;
+    default:
+        break;
+    }
+    return TRUE;
+}
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_xdr.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_xdr.c
new file mode 100755
index 0000000..e8a2aa7
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_xdr.c
@@ -0,0 +1,199 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "loc_api_rpcgen_rpc.h"
+
+bool_t
+xdr_rpc_loc_api_api_versions_return_type (XDR *xdrs, rpc_loc_api_api_versions_return_type *objp)
+{
+;
+
+     if (!xdr_array (xdrs, (char **)&objp->rpc_loc_api_api_versions_return_type_val, (u_int *) &objp->rpc_loc_api_api_versions_return_type_len, ~0,
+        sizeof (rpc_uint32), (xdrproc_t) xdr_rpc_uint32))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_event_cb_f_type (XDR *xdrs, rpc_loc_event_cb_f_type *objp)
+{
+;
+
+     if (!xdr_rpc_uint32 (xdrs, objp))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_open_args (XDR *xdrs, rpc_loc_open_args *objp)
+{
+;
+
+     if (!xdr_rpc_loc_event_mask_type (xdrs, &objp->event_reg_mask))
+         return FALSE;
+     if (!xdr_rpc_loc_event_cb_f_type (xdrs, &objp->event_callback))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_close_args (XDR *xdrs, rpc_loc_close_args *objp)
+{
+;
+
+     if (!xdr_rpc_loc_client_handle_type (xdrs, &objp->handle))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_start_fix_args (XDR *xdrs, rpc_loc_start_fix_args *objp)
+{
+;
+
+     if (!xdr_rpc_loc_client_handle_type (xdrs, &objp->handle))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_stop_fix_args (XDR *xdrs, rpc_loc_stop_fix_args *objp)
+{
+;
+
+     if (!xdr_rpc_loc_client_handle_type (xdrs, &objp->handle))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ioctl_args (XDR *xdrs, rpc_loc_ioctl_args *objp)
+{
+;
+
+     if (!xdr_rpc_loc_client_handle_type (xdrs, &objp->handle))
+         return FALSE;
+     if (!xdr_rpc_loc_ioctl_e_type (xdrs, &objp->ioctl_type))
+         return FALSE;
+     if (!xdr_pointer (xdrs, (char **)&objp->ioctl_data, sizeof (rpc_loc_ioctl_data_u_type), (xdrproc_t) xdr_rpc_loc_ioctl_data_u_type))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_api_api_version_s_args (XDR *xdrs, rpc_loc_api_api_version_s_args *objp)
+{
+;
+
+     if (!xdr_rpc_boolean (xdrs, &objp->len_not_null))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_api_rpc_glue_code_info_remote_rets (XDR *xdrs, rpc_loc_api_rpc_glue_code_info_remote_rets *objp)
+{
+;
+
+     if (!xdr_rpc_uint32 (xdrs, &objp->toolvers))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->features))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->proghash))
+         return FALSE;
+     if (!xdr_rpc_uint32 (xdrs, &objp->cbproghash))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_open_rets (XDR *xdrs, rpc_loc_open_rets *objp)
+{
+;
+
+     if (!xdr_rpc_loc_client_handle_type (xdrs, &objp->loc_open_result))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_close_rets (XDR *xdrs, rpc_loc_close_rets *objp)
+{
+;
+
+     if (!xdr_rpc_int32 (xdrs, &objp->loc_close_result))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_start_fix_rets (XDR *xdrs, rpc_loc_start_fix_rets *objp)
+{
+;
+
+     if (!xdr_rpc_int32 (xdrs, &objp->loc_start_fix_result))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_stop_fix_rets (XDR *xdrs, rpc_loc_stop_fix_rets *objp)
+{
+;
+
+     if (!xdr_rpc_int32 (xdrs, &objp->loc_stop_fix_result))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_ioctl_rets (XDR *xdrs, rpc_loc_ioctl_rets *objp)
+{
+;
+
+     if (!xdr_rpc_int32 (xdrs, &objp->loc_ioctl_result))
+         return FALSE;
+    return TRUE;
+}
+
+bool_t
+xdr_rpc_loc_api_api_versions_rets (XDR *xdrs, rpc_loc_api_api_versions_rets *objp)
+{
+;
+
+     if (!xdr_rpc_loc_api_api_versions_return_type (xdrs, &objp->loc_api_api_versions_result))
+         return FALSE;
+     if (!xdr_pointer (xdrs, (char **)&objp->len, sizeof (rpc_uint32), (xdrproc_t) xdr_rpc_uint32))
+         return FALSE;
+    return TRUE;
+}
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_apicb_appinit.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_apicb_appinit.c
new file mode 100755
index 0000000..b4aeb5e
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_apicb_appinit.c
@@ -0,0 +1,74 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#include "librpc.h"
+#include "loc_api_rpcgen_rpc.h"
+#include "loc_api_rpcgen_cb_rpc.h"
+
+
+#define RPC_FUNC_VERSION_BASE(a,b) a ## b
+#define RPC_CB_FUNC_VERS(a,b) RPC_FUNC_VERSION_BASE(a,b)
+
+
+static SVCXPRT* svrPort = NULL;
+
+extern void RPC_CB_FUNC_VERS(loc_apicbprog_,LOC_APICBVERS_0001)(struct svc_req *rqstp, register SVCXPRT *transp);
+
+int loc_apicb_app_init(void)
+{
+
+  /* Register a callback server to use the loc_apicbprog_0x00010001  */
+  if (svrPort == NULL) {
+        svrPort = svcrtr_create();
+  }
+  if (!svrPort) return -1;
+
+  xprt_register(svrPort);
+
+
+
+  if(svc_register(svrPort, LOC_APICBPROG,LOC_APICBVERS_0001, RPC_CB_FUNC_VERS(loc_apicbprog_,LOC_APICBVERS_0001),0))
+  {
+     return 0;
+  }
+  else
+  {
+    return -1;
+  }
+}
+void loc_apicb_app_deinit(void)
+{
+
+   if (svrPort == NULL)
+   {
+      return;
+   }
+
+
+  svc_unregister(svrPort, LOC_APICBPROG,LOC_APICBVERS_0001);
+}
diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api.xdr b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api.xdr
new file mode 100755
index 0000000..3d6c759
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api.xdr
@@ -0,0 +1,261 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+/* LOC_API TOOL VERSION: 4.48 */

+/* GENERATED: TUE JUN 14 2011 */

+/*=============================================================================

+                             L O C _ A P I . X D R

+

+GENERAL DESCRIPTION

+  This is an AUTO GENERATED file that provides an xdr compatible definition of

+  the loc_api API.

+

+  ---------------------------------------------------------------------------

+
+
+  ---------------------------------------------------------------------------

+=============================================================================*/

+

+/*=============================================================================

+

+                              Edit History

+

+                             AUTO GENERATED

+

+Generated by following versions of Htorpc modules:

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/htorpc.pl#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Start.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Htoxdr.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/XDR.pm#3 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Output.pm#5 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Parser.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Metacomments.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/SymbolTable.pm#1  

+

+loc_api Definition File(s):

+Id: //source/qcom/qct/modem/api/gps/main/latest/loc_api.h#24

+=============================================================================*/

+/*=============================================================================

+$Header$ 

+=============================================================================*/

+

+

+

+typedef rpc_uint32 rpc_loc_api_api_versions_return_type<>;

+

+/*

+ * Declare an rpc_uint32 type for each callback type in the API

+ */

+typedef rpc_uint32 rpc_loc_event_cb_f_type;

+

+

+

+/*

+ * These are struct declarations for the function arguments

+ */

+

+struct rpc_loc_open_args {

+  rpc_loc_event_mask_type event_reg_mask;

+  rpc_loc_event_cb_f_type event_callback;

+};

+

+struct rpc_loc_close_args {

+  rpc_loc_client_handle_type handle;

+};

+

+struct rpc_loc_start_fix_args {

+  rpc_loc_client_handle_type handle;

+};

+

+struct rpc_loc_stop_fix_args {

+  rpc_loc_client_handle_type handle;

+};

+

+struct rpc_loc_ioctl_args {

+  rpc_loc_client_handle_type handle;

+  rpc_loc_ioctl_e_type ioctl_type;

+  rpc_loc_ioctl_data_u_type *ioctl_data;

+};

+

+

+

+struct rpc_loc_api_api_version_s_args {

+  rpc_boolean len_not_null;

+};

+

+/*

+ * These are struct declarations for the function results

+ */

+

+struct rpc_loc_api_rpc_glue_code_info_remote_rets {

+  rpc_uint32 toolvers;   /* Tool version */

+  rpc_uint32 features;   /* Features turned on in the code.

+                          * 0x00000001    ONCRPC Server Cleanup Support

+                          */

+  rpc_uint32 proghash;   /* Unique hash value for the API XDR definition */

+  rpc_uint32 cbproghash; /* Unique hash value for the Callbacks' XDR definition */

+};

+

+struct rpc_loc_open_rets {

+  rpc_loc_client_handle_type loc_open_result;

+};

+

+struct rpc_loc_close_rets {

+  rpc_int32 loc_close_result;

+};

+

+struct rpc_loc_start_fix_rets {

+  rpc_int32 loc_start_fix_result;

+};

+

+struct rpc_loc_stop_fix_rets {

+  rpc_int32 loc_stop_fix_result;

+};

+

+struct rpc_loc_ioctl_rets {

+  rpc_int32 loc_ioctl_result;

+};

+

+ struct rpc_loc_api_api_versions_rets {

+  rpc_loc_api_api_versions_return_type loc_api_api_versions_result;

+  rpc_uint32 *len;

+};

+

+/*

+ * XDR definition of the LOC_API program ( vers. 0x00050006 )

+ */

+

+program LOC_APIPROG {

+  version LOC_APIVERS_0001 {

+

+	void

+		rpc_loc_api_null( void ) = 0;

+

+	rpc_loc_api_rpc_glue_code_info_remote_rets

+		rpc_loc_api_rpc_glue_code_info_remote( void ) = 1;

+

+	rpc_loc_open_rets

+		rpc_loc_open( rpc_loc_open_args ) = 2;

+

+	rpc_loc_close_rets

+		rpc_loc_close( rpc_loc_close_args ) = 3;

+

+	rpc_loc_start_fix_rets

+		rpc_loc_start_fix( rpc_loc_start_fix_args ) = 4;

+

+	rpc_loc_stop_fix_rets

+		rpc_loc_stop_fix( rpc_loc_stop_fix_args ) = 5;

+

+	rpc_loc_ioctl_rets

+		rpc_loc_ioctl( rpc_loc_ioctl_args ) = 6;

+

+	rpc_loc_api_api_versions_rets

+		rpc_loc_api_api_versions( void ) = 0xFFFFFFFF;

+

+

+

+

+  } = 0x00050001;

+

+version LOC_APIVERS_0002 {

+

+/* Following elements added in enum rpc_loc_assist_data_request_e_type in 0x00050002 

+RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ

+*/

+/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050002 

+RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL

+RPC_LOC_IOCTL_RESERVED_CMD

+RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL

+*/

+

+	void

+	rpc_loc_api_null( void ) = 0;

+

+      } = 0x00050002;

+

+version LOC_APIVERS_0003 {

+

+/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050003 

+RPC_LOC_IOCTL_SET_DATA_ENABLE

+RPC_LOC_IOCTL_SET_LBS_APN_PROFILE

+RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE

+RPC_LOC_IOCTL_GET_LBS_APN_PROFILE

+RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE

+*/

+

+	void

+	rpc_loc_api_null( void ) = 0;

+

+      } = 0x00050003;

+

+version LOC_APIVERS_0004 {

+

+/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050004 

+RPC_LOC_IOCTL_GET_SUPL_VERSION

+RPC_LOC_IOCTL_SET_SUPL_VERSION

+*/

+

+	void

+	rpc_loc_api_null( void ) = 0;

+

+      } = 0x00050004;

+

+version LOC_APIVERS_0005 {

+

+/* Following elements added in enum rpc_loc_server_addr_e_type in 0x00050005 

+RPC_LOC_SERVER_ADDR_IPV6

+*/

+/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050005 

+RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG

+*/

+

+	void

+	rpc_loc_api_null( void ) = 0;

+

+      } = 0x00050005;

+

+

+

+    version LOC_APIVERS_0006 {

+

+/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050006 

+RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS

+*/

+/* Following elements added in enum rpc_loc_server_request_e_type in 0x00050006 

+RPC_LOC_SERVER_REQUEST_MULTI_OPEN

+*/

+

+	void

+	rpc_loc_api_null( void ) = 0;

+

+      } = 0x00050006;

+

+

+} = 0x3000008C;

+

+const LOC_APIVERS = 0x00050006;

diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_cb.xdr b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_cb.xdr
new file mode 100755
index 0000000..36d0e6d
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_cb.xdr
@@ -0,0 +1,187 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+/* LOC_API TOOL VERSION: 4.48 */

+/* GENERATED: TUE JUN 14 2011 */

+/*=============================================================================

+                          L O C _ A P I _ C B . X D R

+

+GENERAL DESCRIPTION

+  This is an AUTO GENERATED file that provides an xdr compatible definition of

+  an api that represents the grouping of the different callback functions the

+  loc_api API supports.

+

+  ---------------------------------------------------------------------------

+
+
+  ---------------------------------------------------------------------------

+=============================================================================*/

+

+/*=============================================================================

+

+                              Edit History

+

+                             AUTO GENERATED

+

+Generated by following versions of Htorpc modules:

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/htorpc.pl#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Start.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Htoxdr.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/XDR.pm#3 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Output.pm#5 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Parser.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Metacomments.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/SymbolTable.pm#1  

+

+loc_api Definition File(s):

+Id: //source/qcom/qct/modem/api/gps/main/latest/loc_api.h#24

+=============================================================================*/

+/*=============================================================================

+$Header$ 

+=============================================================================*/

+

+

+

+

+/*

+ * These are struct declarations for the function arguments

+ */

+

+struct rpc_loc_event_cb_f_type_args {

+  rpc_uint32 cb_id;

+  rpc_loc_client_handle_type loc_handle;

+  rpc_loc_event_mask_type loc_event;

+  rpc_loc_event_payload_u_type *loc_event_payload;

+};

+

+

+

+

+

+/*

+ * These are struct declaratios for the function results

+ */

+

+struct rpc_loc_event_cb_f_type_rets {

+  rpc_int32 loc_event_cb_f_type_result;

+};

+

+

+

+/*

+ * XDR definition of the LOC_API callback program ( vers. 0x00050006 )

+ */

+

+program LOC_APICBPROG {

+  version LOC_APICBVERS_0001 {

+

+	rpc_loc_event_cb_f_type_rets

+		rpc_loc_event_cb_f_type( rpc_loc_event_cb_f_type_args ) = 1;

+

+

+

+

+  } = 0x00050001;

+

+version LOC_APICBVERS_0002 {

+

+/* Following elements added in enum rpc_loc_assist_data_request_e_type in 0x00050002 

+RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ

+*/

+/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050002 

+RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL

+RPC_LOC_IOCTL_RESERVED_CMD

+RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL

+*/

+

+	int

+	rpc_loc_api_cb_null( void ) = 0xffffff00;

+

+      } = 0x00050002;

+

+version LOC_APICBVERS_0003 {

+

+/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050003 

+RPC_LOC_IOCTL_SET_DATA_ENABLE

+RPC_LOC_IOCTL_SET_LBS_APN_PROFILE

+RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE

+RPC_LOC_IOCTL_GET_LBS_APN_PROFILE

+RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE

+*/

+

+	int

+	rpc_loc_api_cb_null( void ) = 0xffffff00;

+

+      } = 0x00050003;

+

+version LOC_APICBVERS_0004 {

+

+/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050004 

+RPC_LOC_IOCTL_GET_SUPL_VERSION

+RPC_LOC_IOCTL_SET_SUPL_VERSION

+*/

+

+	int

+	rpc_loc_api_cb_null( void ) = 0xffffff00;

+

+      } = 0x00050004;

+

+version LOC_APICBVERS_0005 {

+

+/* Following elements added in enum rpc_loc_server_addr_e_type in 0x00050005 

+RPC_LOC_SERVER_ADDR_IPV6

+*/

+/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050005 

+RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG

+*/

+

+	int

+	rpc_loc_api_cb_null( void ) = 0xffffff00;

+

+      } = 0x00050005;

+

+

+

+    version LOC_APICBVERS_0006 {

+

+/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050006 

+RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS

+*/

+/* Following elements added in enum rpc_loc_server_request_e_type in 0x00050006 

+RPC_LOC_SERVER_REQUEST_MULTI_OPEN

+*/

+

+	int

+	rpc_loc_api_cb_null( void ) = 0xffffff00;

+

+      } = 0x00050006;

+

+

+} = 0x3100008C;

+

+const LOC_APICBVERS = 0x00050006;

diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_common.xdr b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_common.xdr
new file mode 100755
index 0000000..fcdaf57
--- /dev/null
+++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_common.xdr
@@ -0,0 +1,1021 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+/* LOC_API TOOL VERSION: 4.48 */

+/* GENERATED: TUE JUN 14 2011 */

+/*=============================================================================

+                      L O C _ A P I _ C O M M O N . X D R

+

+GENERAL DESCRIPTION

+  This is an AUTO GENERATED file that provides an xdr compatible definition of

+  an api that represents the grouping of the different callback functions the

+  loc_api API supports.

+

+  ---------------------------------------------------------------------------

+
+
+  ---------------------------------------------------------------------------

+=============================================================================*/

+

+/*=============================================================================

+

+                              Edit History

+

+                             AUTO GENERATED

+

+Generated by following versions of Htorpc modules:

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/htorpc.pl#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Start.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Htoxdr.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/XDR.pm#3 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Output.pm#5 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Parser.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Metacomments.pm#1 

+Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/SymbolTable.pm#1  

+

+loc_api Definition File(s):

+Id: //source/qcom/qct/modem/api/gps/main/latest/loc_api.h#24

+=============================================================================*/

+/*=============================================================================

+$Header$ 

+=============================================================================*/

+

+

+

+const LOC_API_TOOLVERS = 0x00040030;

+const LOC_API_FEATURES = 0x00000001;

+

+const RPC_LOC_EVENT_STATUS_REPORT = 0x00000100;

+

+const RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST = 0x00000020;

+

+const RPC_LOC_EVENT_WPS_NEEDED_REQUEST = 0x00000200;

+

+const RPC_LOC_EVENT_SATELLITE_REPORT = 0x00000002;

+

+const RPC_LOC_EVENT_PARSED_POSITION_REPORT = 0x00000001;

+

+const RPC_LOC_EVENT_RESERVED = 0x8000000000000000;

+

+const RPC_LOC_EVENT_LOCATION_SERVER_REQUEST = 0x00000040;

+

+const RPC_LOC_EVENT_NMEA_POSITION_REPORT = 0x00000008;

+

+const RPC_LOC_EVENT_IOCTL_REPORT = 0x00000080;

+

+const RPC_LOC_EVENT_NMEA_1HZ_REPORT = 0x00000004;

+

+const RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST = 0x00000010;

+

+const RPC_LOC_API_CB_NULL_VERSION = 0x00050002;

+const RPC_LOC_EVENT_CB_F_TYPE_VERSION = 0x00050001;

+const RPC_LOC_API_API_VERSIONS_VERSION = 0x00050001;

+const RPC_LOC_STOP_FIX_VERSION = 0x00050001;

+const RPC_LOC_START_FIX_VERSION = 0x00050001;

+const RPC_LOC_IOCTL_VERSION = 0x00050001;

+const RPC_LOC_CLOSE_VERSION = 0x00050001;

+const RPC_LOC_API_RPC_GLUE_CODE_INFO_REMOTE_VERSION = 0x00050001;

+const RPC_LOC_OPEN_VERSION = 0x00050001;

+const RPC_LOC_API_NULL_VERSION = 0x00050001;

+const RPC_LOC_API_API_MAJOR_NUM = 0x0005;

+const RPC_LOC_APIAPI_VERSION_IS_HASHKEY = 0;

+

+typedef rpc_int32 rpc_loc_client_handle_type;

+

+typedef rpc_uint64 rpc_loc_event_mask_type;

+

+typedef rpc_uint64 rpc_loc_position_valid_mask_type;

+

+typedef rpc_uint32 rpc_loc_pos_technology_mask_type;

+

+enum rpc_loc_session_status_e_type {

+  RPC_LOC_SESS_STATUS_SUCCESS = 0,

+  RPC_LOC_SESS_STATUS_IN_PROGESS = 1,

+  RPC_LOC_SESS_STATUS_GENERAL_FAILURE = 2,

+  RPC_LOC_SESS_STATUS_TIMEOUT = 3,

+  RPC_LOC_SESS_STATUS_USER_END = 4,

+  RPC_LOC_SESS_STATUS_BAD_PARAMETER = 5,

+  RPC_LOC_SESS_STATUS_PHONE_OFFLINE = 6,

+  RPC_LOC_SESS_STATUS_ENGINE_LOCKED = 7,

+  RPC_LOC_SESS_STATUS_MAX = 268435456

+};

+

+struct rpc_loc_calendar_time_s_type {

+  rpc_uint16 year;

+  unsigned char month;

+  unsigned char day_of_week;

+  unsigned char day;

+  unsigned char hour;

+  unsigned char minute;

+  unsigned char second;

+  rpc_uint16 millisecond;

+};

+

+struct rpc_loc_parsed_position_s_type {

+  rpc_loc_position_valid_mask_type valid_mask;

+  rpc_loc_session_status_e_type session_status;

+  rpc_loc_calendar_time_s_type timestamp_calendar;

+  rpc_uint64 timestamp_utc;

+  rpc_uint8 leap_seconds;

+  float time_unc;

+  double latitude;

+  double longitude;

+  float altitude_wrt_ellipsoid;

+  float altitude_wrt_mean_sea_level;

+  float speed_horizontal;

+  float speed_vertical;

+  float heading;

+  float hor_unc_circular;

+  float hor_unc_ellipse_semi_major;

+  float hor_unc_ellipse_semi_minor;

+  float hor_unc_ellipse_orient_azimuth;

+  float vert_unc;

+  float speed_unc;

+  float heading_unc;

+  unsigned char confidence_horizontal;

+  unsigned char confidence_vertical;

+  float magnetic_deviation;

+  rpc_loc_pos_technology_mask_type technology_mask;

+};

+

+enum rpc_loc_sv_system_e_type {

+  RPC_LOC_SV_SYSTEM_GPS = 1,

+  RPC_LOC_SV_SYSTEM_GALILEO = 2,

+  RPC_LOC_SV_SYSTEM_SBAS = 3,

+  RPC_LOC_SV_SYSTEM_COMPASS = 4,

+  RPC_LOC_SV_SYSTEM_GLONASS = 5,

+  RPC_LOC_SV_SYSTEM_MAX = 268435456

+};

+

+enum rpc_loc_sv_status_e_type {

+  RPC_LOC_SV_STATUS_IDLE = 1,

+  RPC_LOC_SV_STATUS_SEARCH = 2,

+  RPC_LOC_SV_STATUS_TRACK = 3,

+  RPC_LOC_SV_STATUS_MAX = 268435456

+};

+

+typedef rpc_uint32 rpc_loc_sv_info_valid_mask_type;

+

+struct rpc_loc_sv_info_s_type {

+  rpc_loc_sv_info_valid_mask_type valid_mask;

+  rpc_loc_sv_system_e_type system;

+  rpc_uint8 prn;

+  rpc_uint8 health_status;

+  rpc_loc_sv_status_e_type process_status;

+  rpc_boolean has_eph;

+  rpc_boolean has_alm;

+  float elevation;

+  float azimuth;

+  float snr;

+};

+

+typedef rpc_uint32 rpc_loc_gnss_info_valid_mask_type;

+

+struct rpc_loc_gnss_info_s_type {

+  rpc_loc_gnss_info_valid_mask_type valid_mask;

+  float position_dop;

+  float horizontal_dop;

+  float vertical_dop;

+  rpc_boolean altitude_assumed;

+  rpc_uint16 sv_count;

+    rpc_loc_sv_info_s_type sv_list<80>; /* EVAL:[LOC_API_MAX_SV_COUNT]*/  
+};

+

+struct rpc_loc_nmea_report_s_type {

+  rpc_uint16 length;

+  opaque nmea_sentences[200];

+};

+

+enum rpc_loc_status_event_e_type {

+  RPC_LOC_STATUS_EVENT_ENGINE_STATE = 1,

+  RPC_LOC_STATUS_EVENT_FIX_SESSION_STATE = 2,

+  RPC_LOC_STATUS_EVENT_MAX = 268435456

+};

+

+enum rpc_loc_engine_state_e_type {

+  RPC_LOC_ENGINE_STATE_ON = 1,

+  RPC_LOC_ENGINE_STATE_OFF = 2,

+  RPC_LOC_ENGINE_STATE_MAX = 268435456

+};

+

+enum rpc_loc_fix_session_state_e_type {

+  RPC_LOC_FIX_SESSION_STATE_BEGIN = 1,

+  RPC_LOC_FIX_SESSION_STATE_END = 2,

+  RPC_LOC_FIX_SESSION_STATE_MAX = 268435456

+};

+

+union rpc_loc_status_event_payload_u_type switch (rpc_loc_status_event_e_type disc) {

+  case RPC_LOC_STATUS_EVENT_ENGINE_STATE:

+    rpc_loc_engine_state_e_type engine_state;

+  case RPC_LOC_STATUS_EVENT_FIX_SESSION_STATE:

+    rpc_loc_fix_session_state_e_type fix_session_state;

+  default:

+    void;

+};

+

+struct rpc_loc_status_event_s_type {

+  rpc_loc_status_event_e_type event;

+  rpc_loc_status_event_payload_u_type payload;

+};

+

+enum rpc_loc_server_addr_e_type {

+  RPC_LOC_SERVER_ADDR_IPV4 = 1,

+  RPC_LOC_SERVER_ADDR_URL = 2,

+  RPC_LOC_SERVER_ADDR_IPV6 = 3,

+  RPC_LOC_SERVER_ADDR_MAX = 268435456

+};

+

+struct rpc_loc_server_addr_ipv4_type {

+  rpc_uint32 addr;

+  rpc_uint16 port;

+};

+

+struct rpc_loc_server_addr_url_type {

+  rpc_uint16 length;

+  opaque addr[256];

+};

+

+struct rpc_loc_server_addr_ipv6_type {

+  rpc_uint16 addr[8];

+  rpc_uint32 port;

+};

+

+union rpc_loc_server_addr_u_type switch (rpc_loc_server_addr_e_type disc) {

+  case RPC_LOC_SERVER_ADDR_IPV4:

+    rpc_loc_server_addr_ipv4_type ipv4;

+  case RPC_LOC_SERVER_ADDR_URL:

+    rpc_loc_server_addr_url_type url;

+  case RPC_LOC_SERVER_ADDR_IPV6:

+    rpc_loc_server_addr_ipv6_type ipv6;

+  default:

+    void;

+};

+

+struct rpc_loc_server_info_s_type {

+  rpc_loc_server_addr_e_type addr_type;

+  rpc_loc_server_addr_u_type addr_info;

+};

+

+enum rpc_loc_ni_notify_verify_e_type {

+  RPC_LOC_NI_USER_NO_NOTIFY_NO_VERIFY = 1,

+  RPC_LOC_NI_USER_NOTIFY_ONLY = 2,

+  RPC_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP = 3,

+  RPC_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP = 4,

+  RPC_LOC_NI_USER_PRIVACY_OVERRIDE = 5,

+  RPC_LOC_NI_USER_NOTIFY_VERITY_TYPE_MAX = 268435456

+};

+

+enum rpc_loc_ni_event_e_type {

+  RPC_LOC_NI_EVENT_VX_NOTIFY_VERIFY_REQ = 1,

+  RPC_LOC_NI_EVENT_SUPL_NOTIFY_VERIFY_REQ = 2,

+  RPC_LOC_NI_EVENT_UMTS_CP_NOTIFY_VERIFY_REQ = 3,

+  RPC_LOC_NI_EVENT_VX_SERVICE_INTERACTION_REQ = 4,

+  RPC_LOC_NI_EVENT_MAX = 268435456

+};

+

+enum rpc_loc_ni_datacoding_scheme_e_type {

+  RPC_LOC_NI_PRESUPL_ISO646IRV = 0,

+  RPC_LOC_NI_PRESUPL_ISO8859 = 1,

+  RPC_LOC_NI_PRESUPL_UTF8 = 2,

+  RPC_LOC_NI_PRESUPL_UTF16 = 3,

+  RPC_LOC_NI_PRESUPL_UCS2 = 4,

+  RPC_LOC_NI_PRESUPL_GSM_DEFAULT = 5,

+  RPC_LOC_NI_PRESUPL_SHIFT_JIS = 6,

+  RPC_LOC_NI_PRESUPL_JIS = 7,

+  RPC_LOC_NI_PRESUPL_EUC = 8,

+  RPC_LOC_NI_PRESUPL_GB2312 = 9,

+  RPC_LOC_NI_PRESUPL_CNS11643 = 10,

+  RPC_LOC_NI_PRESUPL_KSC1001 = 11,

+  RPC_LOC_NI_PRESUPL_ENCODING_UNKNOWN = 2147483647,

+  RPC_LOC_NI_SS_GERMAN = 12,

+  RPC_LOC_NI_SS_ENGLISH = 13,

+  RPC_LOC_NI_SS_ITALIAN = 14,

+  RPC_LOC_NI_SS_FRENCH = 15,

+  RPC_LOC_NI_SS_SPANISH = 16,

+  RPC_LOC_NI_SS_DUTCH = 17,

+  RPC_LOC_NI_SS_SWEDISH = 18,

+  RPC_LOC_NI_SS_DANISH = 19,

+  RPC_LOC_NI_SS_PORTUGUESE = 20,

+  RPC_LOC_NI_SS_FINNISH = 21,

+  RPC_LOC_NI_SS_NORWEGIAN = 22,

+  RPC_LOC_NI_SS_GREEK = 23,

+  RPC_LOC_NI_SS_TURKISH = 24,

+  RPC_LOC_NI_SS_HUNGARIAN = 25,

+  RPC_LOC_NI_SS_POLISH = 26,

+  RPC_LOC_NI_SS_LANGUAGE_UNSPEC = 27,

+  RPC_LOC_NI_SUPL_UTF8 = 28,

+  RPC_LOC_NI_SUPL_UCS2 = 29,

+  RPC_LOC_NI_SUPL_GSM_DEFAULT = 30,

+  RPC_LOC_NI_SUPL_ENCODING_UNKNOWN = 2147483647

+};

+

+enum rpc_loc_ni_vx_requester_id_encoding_scheme_e_type {

+  RPC_LOC_NI_VX_OCTET = 0,

+  RPC_LOC_NI_VX_EXN_PROTOCOL_MSG = 1,

+  RPC_LOC_NI_VX_ASCII = 2,

+  RPC_LOC_NI_VX_IA5 = 3,

+  RPC_LOC_NI_VX_UNICODE = 4,

+  RPC_LOC_NI_VX_SHIFT_JIS = 5,

+  RPC_LOC_NI_VX_KOREAN = 6,

+  RPC_LOC_NI_VX_LATIN_HEBREW = 7,

+  RPC_LOC_NI_VX_LATIN = 8,

+  RPC_LOC_NI_VX_GSM = 9,

+  RPC_LOC_NI_VX_ENCODING_TYPE_MAX = 268435456

+};

+

+enum rpc_loc_ni_vx_pos_mode_e_type {

+  RPC_LOC_VX_MS_ASSISTED_ONLY = 1,

+  RPC_LOC_VX_MS_BASED_ONLY = 2,

+  RPC_LOC_VX_MS_ASSISTED_PREF_MSBASED_ALLWD = 3,

+  RPC_LOC_VX_MS_BASED_PREF_ASSISTED_ALLWD = 4,

+  RPC_LOC_VX_POS_MODE_MAX = 268435456

+};

+

+struct rpc_loc_ni_vx_requester_id_s_type {

+  unsigned char requester_id_length;

+  opaque requester_id[200];

+};

+

+struct rpc_loc_ni_vx_notify_verify_req_s_type {

+  rpc_loc_ni_notify_verify_e_type notification_priv_type;

+  unsigned char pos_qos_incl;

+  unsigned char pos_qos;

+  rpc_uint32 num_fixes;

+  rpc_uint32 tbf;

+  rpc_loc_ni_vx_pos_mode_e_type pos_mode;

+  rpc_loc_ni_vx_requester_id_encoding_scheme_e_type encoding_scheme;

+  rpc_loc_ni_vx_requester_id_s_type requester_id;

+  rpc_uint16 user_resp_timer_val;

+};

+

+enum rpc_loc_ni_supl_pos_method_e_type {

+  RPC_LOC_NI_POSMETHOD_AGPS_SETASSISTED = 1,

+  RPC_LOC_NI_POSMETHOD_AGPS_SETBASED = 2,

+  RPC_LOC_NI_POSMETHOD_AGPS_SETASSISTED_PREF = 3,

+  RPC_LOC_NI_POSMETHOD_AGPS_SETBASED_PREF = 4,

+  RPC_LOC_NI_POSMETHOD_AUTONOMOUS_GPS = 5,

+  RPC_LOC_NI_POSMETHOD_AFLT = 6,

+  RPC_LOC_NI_POSMETHOD_ECID = 7,

+  RPC_LOC_NI_POSMETHOD_EOTD = 8,

+  RPC_LOC_NI_POSMETHOD_OTDOA = 9,

+  RPC_LOC_NI_POSMETHOD_NO_POSITION = 10,

+  RPC_LOC_NI_POSMETHOD_MAX = 268435456

+};

+

+struct rpc_loc_ni_supl_slp_session_id_s_type {

+  unsigned char presence;

+  opaque session_id[4];

+  rpc_loc_server_info_s_type slp_address;

+};

+

+struct rpc_loc_ni_requestor_id_s_type {

+  unsigned char data_coding_scheme;

+  opaque requestor_id_string[200];

+  unsigned char string_len;

+};

+

+struct rpc_loc_ni_supl_client_name_s_type {

+  unsigned char data_coding_scheme;

+  opaque client_name_string[64];

+  unsigned char string_len;

+};

+

+struct rpc_loc_ni_supl_qop_s_type {

+  unsigned char bit_mask;

+  unsigned char horacc;

+  unsigned char veracc;

+  rpc_uint16 maxLocAge;

+  unsigned char delay;

+};

+

+struct rpc_loc_ni_supl_notify_verify_req_s_type {

+  rpc_loc_ni_notify_verify_e_type notification_priv_type;

+  rpc_uint16 flags;

+  rpc_loc_ni_supl_slp_session_id_s_type supl_slp_session_id;

+  opaque supl_hash[8];

+  rpc_loc_ni_datacoding_scheme_e_type datacoding_scheme;

+  rpc_loc_ni_supl_pos_method_e_type pos_method;

+  rpc_loc_ni_requestor_id_s_type requestor_id;

+  rpc_loc_ni_supl_client_name_s_type client_name;

+  rpc_loc_ni_supl_qop_s_type supl_qop;

+  rpc_uint16 user_response_timer;

+};

+

+struct rpc_loc_ni_ext_client_address_s_type {

+  unsigned char ext_client_address_len;

+  opaque ext_client_address[20];

+};

+

+enum rpc_loc_ni_location_type_e_type {

+  RPC_LOC_NI_LOCATIONTYPE_CURRENT_LOCATION = 1,

+  RPC_LOC_NI_LOCATIONTYPE_CURRENT_OR_LAST_KNOWN_LOCATION = 2,

+  RPC_LOC_NI_LOCATIONTYPE_INITIAL_LOCATION = 3,

+  RPC_LOC_NI_LOCATIONTYPE_MAX = 268435456

+};

+

+struct rpc_loc_ni_deferred_location_s_type {

+  unsigned char unused_bits;

+  unsigned char ms_available;

+};

+

+struct rpc_loc_ni_codeword_string_s_type {

+  unsigned char data_coding_scheme;

+  opaque lcs_codeword_string[20];

+  unsigned char string_len;

+};

+

+struct rpc_loc_ni_service_type_id_s_type {

+  unsigned char lcs_service_type_id;

+};

+

+struct rpc_loc_ni_umts_cp_notify_verify_req_s_type {

+  rpc_loc_ni_notify_verify_e_type notification_priv_type;

+  unsigned char invoke_id;

+  rpc_uint16 flags;

+  unsigned char notification_length;

+  opaque notification_text[64];

+  rpc_loc_ni_datacoding_scheme_e_type datacoding_scheme;

+  rpc_loc_ni_ext_client_address_s_type ext_client_address_data;

+  rpc_loc_ni_location_type_e_type location_type;

+  rpc_loc_ni_deferred_location_s_type deferred_location;

+  rpc_loc_ni_requestor_id_s_type requestor_id;

+  rpc_loc_ni_codeword_string_s_type codeword_string;

+  rpc_loc_ni_service_type_id_s_type service_type_id;

+  rpc_uint16 user_response_timer;

+};

+

+enum rpc_loc_ni_service_interaction_e_type {

+  RPC_LOC_NI_SERVICE_INTERACTION_ONGOING_NI_INCOMING_MO = 1,

+  RPC_LOC_NI_SERVICE_INTERACTION_MAX = 268435456

+};

+

+struct rpc_loc_ni_vx_service_interaction_req_s_type {

+  rpc_loc_ni_vx_notify_verify_req_s_type ni_vx_req;

+  rpc_loc_ni_service_interaction_e_type service_interation_type;

+};

+

+union rpc_loc_ni_event_payload_u_type switch (rpc_loc_ni_event_e_type disc) {

+  case RPC_LOC_NI_EVENT_VX_NOTIFY_VERIFY_REQ:

+    rpc_loc_ni_vx_notify_verify_req_s_type vx_req;

+  case RPC_LOC_NI_EVENT_SUPL_NOTIFY_VERIFY_REQ:

+    rpc_loc_ni_supl_notify_verify_req_s_type supl_req;

+  case RPC_LOC_NI_EVENT_UMTS_CP_NOTIFY_VERIFY_REQ:

+    rpc_loc_ni_umts_cp_notify_verify_req_s_type umts_cp_req;

+  case RPC_LOC_NI_EVENT_VX_SERVICE_INTERACTION_REQ:

+    rpc_loc_ni_vx_service_interaction_req_s_type service_interaction_req;

+  default:

+    void;

+};

+

+struct rpc_loc_ni_event_s_type {

+  rpc_loc_ni_event_e_type event;

+  rpc_loc_ni_event_payload_u_type payload;

+};

+

+enum rpc_loc_assist_data_request_e_type {

+  RPC_LOC_ASSIST_DATA_TIME_REQ = 1,

+  RPC_LOC_ASSIST_DATA_PREDICTED_ORBITS_REQ = 2,

+  RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ = 3,

+  RPC_LOC_ASSIST_DATA_MAX = 268435456

+};

+

+typedef string rpc_struct_loc_time_download_source_s_type_servers_ptr<256>; /* EVAL:[LOC_API_MAX_SERVER_ADDR_LENGTH]*/  
+

+typedef rpc_struct_loc_time_download_source_s_type_servers_ptr rpc_struct_loc_time_download_source_s_type_servers[3];

+

+struct rpc_loc_time_download_source_s_type {

+  rpc_uint32 delay_threshold;

+  rpc_struct_loc_time_download_source_s_type_servers servers;

+};

+

+typedef string rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr<LOC_API_MAX_SERVER_ADDR_LENGTH>;

+

+typedef rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr rpc_struct_loc_predicted_orbits_data_source_s_type_servers[3];

+

+struct rpc_loc_predicted_orbits_data_source_s_type {

+  rpc_uint32 max_file_size;

+  rpc_uint32 max_part_size;

+  rpc_struct_loc_predicted_orbits_data_source_s_type_servers servers;

+};

+

+struct rpc_loc_pos_inj_request_s_type {

+  rpc_uint32 flags;

+  double latitude;

+  double longitude;

+  rpc_uint32 position_uncertainty;

+  rpc_uint64 timestamp;

+};

+

+union rpc_loc_assist_data_request_payload_u_type switch (rpc_loc_assist_data_request_e_type disc) {

+  case RPC_LOC_ASSIST_DATA_TIME_REQ:

+    rpc_loc_time_download_source_s_type time_download;

+  case RPC_LOC_ASSIST_DATA_PREDICTED_ORBITS_REQ:

+    rpc_loc_predicted_orbits_data_source_s_type data_download;

+  case RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ:

+    rpc_loc_pos_inj_request_s_type pos_injection;

+  default:

+    void;

+};

+

+struct rpc_loc_assist_data_request_s_type {

+  rpc_loc_assist_data_request_e_type event;

+  rpc_loc_assist_data_request_payload_u_type payload;

+};

+

+typedef rpc_uint32 rpc_loc_server_connection_handle;

+

+enum rpc_loc_server_protocol_e_type {

+  RPC_LOC_SERVER_PROTOCOL_DEFAULT = 0,

+  RPC_LOC_SERVER_PROTOCOL_SUPL = 1,

+  RPC_LOC_SERVER_PROTOCOL_VX_MPC = 2,

+  RPC_LOC_SERVER_PROTOCOL_VX_PDE = 3,

+  RPC_LOC_SERVER_PROTOCOL_MAX = 16777216

+};

+

+enum rpc_loc_server_connection_e_type {

+  RPC_LOC_SERVER_CONNECTION_LBS = 0,

+  RPC_LOC_SERVER_CONNECTION_WWAN_INTERNET,

+  RPC_LOC_SERVER_CONNECTION_MAX = 16777216

+};

+

+enum rpc_loc_server_request_e_type {

+  RPC_LOC_SERVER_REQUEST_OPEN = 1,

+  RPC_LOC_SERVER_REQUEST_CLOSE = 2,

+  RPC_LOC_SERVER_REQUEST_MULTI_OPEN = 3,

+  RPC_LOC_SERVER_REQUEST_MAX = 268435456

+};

+

+struct rpc_loc_server_open_req_s_type {

+  rpc_loc_server_connection_handle conn_handle;

+  rpc_loc_server_protocol_e_type protocol;

+};

+

+struct rpc_loc_server_multi_open_req_s_type {

+  rpc_loc_server_connection_handle conn_handle;

+  rpc_loc_server_protocol_e_type protocol;

+  rpc_loc_server_connection_e_type connection_type;

+};

+

+struct rpc_loc_server_close_req_s_type {

+  rpc_loc_server_connection_handle conn_handle;

+};

+

+union rpc_loc_server_request_u_type switch (rpc_loc_server_request_e_type disc) {

+  case RPC_LOC_SERVER_REQUEST_OPEN:

+    rpc_loc_server_open_req_s_type open_req;

+  case RPC_LOC_SERVER_REQUEST_CLOSE:

+    rpc_loc_server_close_req_s_type close_req;

+  case RPC_LOC_SERVER_REQUEST_MULTI_OPEN:

+    rpc_loc_server_multi_open_req_s_type multi_open_req;

+  default:

+    void;

+};

+

+struct rpc_loc_server_request_s_type {

+  rpc_loc_server_request_e_type event;

+  rpc_loc_server_request_u_type payload;

+};

+

+enum rpc_loc_qwip_request_e_type {

+  RPC_LOC_QWIP_START_PERIODIC_HI_FREQ_FIXES = 0,

+  RPC_LOC_QWIP_START_PERIODIC_KEEP_WARM,

+  RPC_LOC_QWIP_STOP_PERIODIC_FIXES,

+  RPC_LOC_QWIP_SUSPEND,

+  RPC_LOC_QWIP_REQUEST_MAX = 268435456

+};

+

+struct rpc_loc_qwip_request_s_type {

+  rpc_loc_qwip_request_e_type request_type;

+  rpc_uint16 tbf_ms;

+};

+

+struct rpc_loc_reserved_payload_s_type {

+  rpc_uint16 data_size;

+  opaque data<>;

+};

+

+enum rpc_loc_ioctl_e_type {

+  RPC_LOC_IOCTL_GET_API_VERSION = 1,

+  RPC_LOC_IOCTL_SET_FIX_CRITERIA = 2,

+  RPC_LOC_IOCTL_GET_FIX_CRITERIA = 3,

+  RPC_LOC_IOCTL_SERVICE_START_INDEX = 400,

+  RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE = 400,

+  RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA = 401,

+  RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_VALIDITY = 402,

+  RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE = 403,

+  RPC_LOC_IOCTL_SET_PREDICTED_ORBITS_DATA_AUTO_DOWNLOAD = 404,

+  RPC_LOC_IOCTL_INJECT_UTC_TIME = 405,

+  RPC_LOC_IOCTL_INJECT_RTC_VALUE = 406,

+  RPC_LOC_IOCTL_INJECT_POSITION = 407,

+  RPC_LOC_IOCTL_QUERY_ENGINE_STATE = 408,

+  RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS = 409,

+  RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS = 410,

+  RPC_LOC_IOCTL_SEND_WIPER_POSITION_REPORT = 411,

+  RPC_LOC_IOCTL_NOTIFY_WIPER_STATUS = 412,

+  RPC_LOC_IOCTL_ACCESS_EFS_DATA = 413,

+  RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG = 414,

+  RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS = 415,

+  RPC_LOC_IOCTL_NV_SETTINGS_START_INDEX = 800,

+  RPC_LOC_IOCTL_SET_ENGINE_LOCK = 800,

+  RPC_LOC_IOCTL_GET_ENGINE_LOCK = 801,

+  RPC_LOC_IOCTL_SET_SBAS_CONFIG = 802,

+  RPC_LOC_IOCTL_GET_SBAS_CONFIG = 803,

+  RPC_LOC_IOCTL_SET_NMEA_TYPES = 804,

+  RPC_LOC_IOCTL_GET_NMEA_TYPES = 805,

+  RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR = 806,

+  RPC_LOC_IOCTL_GET_CDMA_PDE_SERVER_ADDR = 807,

+  RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR = 808,

+  RPC_LOC_IOCTL_GET_CDMA_MPC_SERVER_ADDR = 809,

+  RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR = 810,

+  RPC_LOC_IOCTL_GET_UMTS_SLP_SERVER_ADDR = 811,

+  RPC_LOC_IOCTL_SET_ON_DEMAND_LPM = 812,

+  RPC_LOC_IOCTL_GET_ON_DEMAND_LPM = 813,

+  RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL = 814,

+  RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL = 815,

+  RPC_LOC_IOCTL_SET_LBS_APN_PROFILE = 816,

+  RPC_LOC_IOCTL_GET_LBS_APN_PROFILE = 817,

+  RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE = 818,

+  RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE = 819,

+  RPC_LOC_IOCTL_SET_DATA_ENABLE = 820,

+  RPC_LOC_IOCTL_SET_SUPL_VERSION = 821,

+  RPC_LOC_IOCTL_GET_SUPL_VERSION = 822,

+  RPC_LOC_IOCTL_PROPRIETARY_START_INDEX = 1000,

+  RPC_LOC_IOCTL_DELETE_ASSIST_DATA = 1000,

+  RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR = 1001,

+  RPC_LOC_IOCTL_GET_CUSTOM_PDE_SERVER_ADDR = 1002,

+  RPC_LOC_IOCTL_RESERVED_CMD = 8000,

+  RPC_LOC_IOCTL_THIRD_PARTY_START_INDEX = 1073741824

+};

+

+struct rpc_loc_api_version_s_type {

+  unsigned char major;

+  unsigned char minor;

+};

+

+enum rpc_loc_fix_recurrence_e_type {

+  RPC_LOC_PERIODIC_FIX = 1,

+  RPC_LOC_SINGLE_FIX = 2,

+  RPC_LOC_FIX_SESSION_TYPE_MAX = 268435456

+};

+

+enum rpc_loc_operation_mode_e_type {

+  RPC_LOC_OPER_MODE_DEFAULT = 1,

+  RPC_LOC_OPER_MODE_MSB = 2,

+  RPC_LOC_OPER_MODE_MSA = 3,

+  RPC_LOC_OPER_MODE_STANDALONE = 4,

+  RPC_LOC_OPER_MODE_SPEED_OPTIMAL = 5,

+  RPC_LOC_OPER_MODE_ACCURACY_OPTIMAL = 6,

+  RPC_LOC_OPER_MODE_DATA_OPTIMAL = 7,

+  RPC_LOC_OPER_MODE_CELL_ID = 8,

+  RPC_LOC_OPER_MODE_MAX = 268435456

+};

+

+enum rpc_loc_notify_e_type {

+  RPC_LOC_NOTIFY_ON_INTERVAL = 1,

+  RPC_LOC_NOTIFY_ON_DISTANCE = 2,

+  RPC_LOC_NOTIFY_ON_ANY = 3,

+  RPC_LOC_NOTIFY_ON_ALL = 4,

+  RPC_LOC_NOTIFY_TYPE_MAX = 268435456

+};

+

+struct rpc_loc_fix_criteria_s_type {

+  rpc_uint32 valid_mask;

+  rpc_loc_fix_recurrence_e_type recurrence_type;

+  rpc_loc_operation_mode_e_type preferred_operation_mode;

+  rpc_uint32 preferred_accuracy;

+  rpc_uint32 preferred_response_time;

+  rpc_boolean intermediate_pos_report_enabled;

+  rpc_loc_notify_e_type notify_type;

+  rpc_uint32 min_interval;

+  float min_distance;

+  rpc_uint32 min_dist_sample_interval;

+};

+

+enum rpc_loc_ni_user_resp_e_type {

+  RPC_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT = 1,

+  RPC_LOC_NI_LCS_NOTIFY_VERIFY_DENY = 2,

+  RPC_LOC_NI_LCS_NOTIFY_VERIFY_NORESP = 3,

+  RPC_LOC_NI_LCS_NOTIFY_VERIFY_MAX = 268435456

+};

+

+struct rpc_loc_user_verify_s_type {

+  rpc_loc_ni_user_resp_e_type user_resp;

+  rpc_loc_ni_event_s_type ni_event_pass_back;

+};

+

+enum rpc_loc_predicted_orbits_data_format_e_type {

+  RPC_LOC_PREDICTED_ORBITS_XTRA = 0,

+  RPC_LOC_PREDICTED_ORBITS_FORMAT_MAX = 268435456

+};

+

+struct rpc_loc_predicted_orbits_data_s_type {

+  rpc_loc_predicted_orbits_data_format_e_type format_type;

+  rpc_uint32 total_size;

+  rpc_uint8 total_parts;

+  rpc_uint8 part;

+  rpc_uint16 part_len;

+  opaque data_ptr<>;

+};

+

+struct rpc_loc_predicted_orbits_data_validity_report_s_type {

+  rpc_uint64 start_time_utc;

+  rpc_uint16 valid_duration_hrs;

+};

+

+struct rpc_loc_predicted_orbits_auto_download_config_s_type {

+  rpc_boolean enable;

+  unsigned char auto_check_every_hrs;

+};

+

+struct rpc_loc_assist_data_time_s_type {

+  rpc_uint64 time_utc;

+  rpc_uint32 uncertainty;

+};

+

+typedef rpc_uint64 rpc_loc_assist_pos_valid_mask_type;

+

+struct rpc_loc_assist_data_pos_s_type {

+  rpc_loc_assist_pos_valid_mask_type valid_mask;

+  rpc_uint64 timestamp_utc;

+  double latitude;

+  double longitude;

+  float altitude_wrt_ellipsoid;

+  float altitude_wrt_mean_sea_level;

+  float hor_unc_circular;

+  float vert_unc;

+  unsigned char confidence_horizontal;

+  unsigned char confidence_vertical;

+  rpc_int32 timestamp_age;

+};

+

+enum rpc_loc_server_open_status_e_type {

+  RPC_LOC_SERVER_OPEN_SUCCESS = 1,

+  RPC_LOC_SERVER_OPEN_FAIL = 2,

+  RPC_LOC_SERVER_OPEN_STATUS_MAX = 268435456

+};

+

+enum rpc_loc_server_pdp_type_e_type {

+  RPC_LOC_SERVER_PDP_IP = 0,

+  RPC_LOC_SERVER_PDP_PPP,

+  RPC_LOC_SERVER_PDP_IPV6,

+  RPC_LOC_SERVER_PDP_IPV4V6,

+  RPC_LOC_SERVER_PDP_MAX = 268435456

+};

+

+struct rpc_loc_server_open_status_s_type {

+  rpc_loc_server_connection_handle conn_handle;

+  rpc_loc_server_open_status_e_type open_status;

+  opaque apn_name[100];

+};

+

+struct rpc_loc_server_multi_open_status_s_type {

+  rpc_loc_server_connection_handle conn_handle;

+  rpc_loc_server_open_status_e_type open_status;

+  rpc_loc_server_pdp_type_e_type pdp_type;

+  opaque apn_name[100];

+};

+

+enum rpc_loc_server_close_status_e_type {

+  RPC_LOC_SERVER_CLOSE_SUCCESS = 1,

+  RPC_LOC_SERVER_CLOSE_FAIL = 2,

+  RPC_LOC_SERVER_CLOSE_STATUS_MAX = 268435456

+};

+

+struct rpc_loc_server_close_status_s_type {

+  rpc_loc_server_connection_handle conn_handle;

+  rpc_loc_server_close_status_e_type close_status;

+};

+

+struct rpc_loc_wiper_fix_time_s_type {

+  rpc_uint32 slow_clock_count;

+};

+

+struct rpc_loc_wiper_fix_pos_s_type {

+  rpc_int32 lat;

+  rpc_int32 lon;

+  rpc_uint16 HEPE;

+  rpc_uint8 num_of_aps_used;

+  rpc_uint8 fix_error_code;

+};

+

+struct rpc_loc_wiper_ap_info_s_type {

+  opaque mac_addr[6];

+  rpc_int32 rssi;

+  rpc_uint16 channel;

+  rpc_uint8 ap_qualifier;

+};

+

+struct rpc_loc_wiper_ap_set_s_type {

+  rpc_uint8 num_of_aps;

+  rpc_loc_wiper_ap_info_s_type ap_info[50];

+};

+

+struct rpc_loc_wiper_position_report_s_type {

+  rpc_uint8 wiper_valid_info_flag;

+  rpc_loc_wiper_fix_time_s_type wiper_fix_time;

+  rpc_loc_wiper_fix_pos_s_type wiper_fix_position;

+  rpc_loc_wiper_ap_set_s_type wiper_ap_set;

+};

+

+enum rpc_loc_wiper_status_e_type {

+  RPC_LOC_WIPER_STATUS_AVAILABLE = 1,

+  RPC_LOC_WIPER_STATUS_UNAVAILABLE = 2,

+  RPC_LOC_WIPER_STATUS_E_SIZE = 268435456

+};

+

+enum rpc_loc_fs_operation_e_type {

+  RPC_LOC_FS_CREATE_WRITE_FILE = 1,

+  RPC_LOC_FS_APPEND_FILE = 2,

+  RPC_LOC_FS_DELETE_FILE = 3,

+  RPC_LOC_FS_READ_FILE = 4,

+  RPC_LOC_FS_MAX = 268435456

+};

+

+struct rpc_loc_efs_data_s_type {

+  opaque filename[64];

+  rpc_loc_fs_operation_e_type operation;

+  rpc_uint32 total_size;

+  opaque data_ptr<>;

+  rpc_uint32 part_len;

+  rpc_uint8 part;

+  rpc_uint8 total_parts;

+  rpc_uint32 reserved;

+};

+

+enum rpc_loc_error_estimate_config_e_type {

+  RPC_LOC_ERROR_ESTIMATE_CONFIG_SET = 1,

+  RPC_LOC_ERROR_ESTIMATE_CONFIG_CLEAR = 2,

+  RPC_LOC_ERROR_ESTIMATE_MAX = 268435456

+};

+

+struct rpc_loc_apn_profiles_type {

+  rpc_uint32 srv_system_type;

+  rpc_uint32 pdp_type;

+  rpc_uint32 reserved;

+  opaque apn_name[100];

+};

+

+enum rpc_loc_lock_e_type {

+  RPC_LOC_LOCK_NONE = 1,

+  RPC_LOC_LOCK_MI = 2,

+  RPC_LOC_LOCK_MT = 3,

+  RPC_LOC_LOCK_ALL = 4,

+  RPC_LOC_LOCK_MAX = 268435456

+};

+

+typedef rpc_uint32 rpc_loc_nmea_sentence_type;

+

+typedef rpc_uint32 rpc_loc_assist_data_type;

+

+struct rpc_loc_assist_data_delete_s_type {

+  rpc_loc_assist_data_type type;

+  rpc_uint32 reserved[8];

+};

+

+union rpc_loc_ioctl_data_u_type switch (rpc_loc_ioctl_e_type disc) {

+  case RPC_LOC_IOCTL_SET_FIX_CRITERIA:

+    rpc_loc_fix_criteria_s_type fix_criteria;

+  case RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE:

+    rpc_loc_user_verify_s_type user_verify_resp;

+  case RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA:

+    rpc_loc_predicted_orbits_data_s_type predicted_orbits_data;

+  case RPC_LOC_IOCTL_SET_PREDICTED_ORBITS_DATA_AUTO_DOWNLOAD:

+    rpc_loc_predicted_orbits_auto_download_config_s_type predicted_orbits_auto_download;

+  case RPC_LOC_IOCTL_INJECT_UTC_TIME:

+    rpc_loc_assist_data_time_s_type assistance_data_time;

+  case RPC_LOC_IOCTL_INJECT_POSITION:

+    rpc_loc_assist_data_pos_s_type assistance_data_position;

+  case RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS:

+    rpc_loc_server_open_status_s_type conn_open_status;

+  case RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS:

+    rpc_loc_server_close_status_s_type conn_close_status;

+  case RPC_LOC_IOCTL_SEND_WIPER_POSITION_REPORT:

+    rpc_loc_wiper_position_report_s_type wiper_pos;

+  case RPC_LOC_IOCTL_NOTIFY_WIPER_STATUS:

+    rpc_loc_wiper_status_e_type wiper_status;

+  case RPC_LOC_IOCTL_SET_ENGINE_LOCK:

+    rpc_loc_lock_e_type engine_lock;

+  case RPC_LOC_IOCTL_SET_SBAS_CONFIG:

+    rpc_boolean sbas_mode;

+  case RPC_LOC_IOCTL_SET_NMEA_TYPES:

+    rpc_loc_nmea_sentence_type nmea_types;

+  case RPC_LOC_IOCTL_SET_ON_DEMAND_LPM:

+    rpc_boolean on_demand_lpm;

+  case  RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR:

+  case  RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR:

+  case  RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR:

+  case  RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR:

+    rpc_loc_server_info_s_type server_addr;

+  case RPC_LOC_IOCTL_DELETE_ASSIST_DATA:

+    rpc_loc_assist_data_delete_s_type assist_data_delete;

+  case RPC_LOC_IOCTL_ACCESS_EFS_DATA:

+    rpc_loc_efs_data_s_type efs_data;

+  case RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG:

+    rpc_loc_error_estimate_config_e_type error_estimate_config;

+  case RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL:

+    rpc_uint8 xtra_t_session_control;

+  case  RPC_LOC_IOCTL_SET_LBS_APN_PROFILE:

+  case  RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE:

+    rpc_loc_apn_profiles_type apn_profiles[6];

+  case RPC_LOC_IOCTL_SET_DATA_ENABLE:

+    rpc_boolean data_enable;

+  case RPC_LOC_IOCTL_SET_SUPL_VERSION:

+    rpc_uint32 supl_version;

+  case RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS:

+    rpc_loc_server_multi_open_status_s_type multi_conn_open_status;

+  case RPC_LOC_IOCTL_RESERVED_CMD:

+    rpc_loc_reserved_payload_s_type reserved;

+  default:

+    void;

+};

+

+union rpc_loc_ioctl_callback_data_u_type switch (rpc_loc_ioctl_e_type disc) {

+  case RPC_LOC_IOCTL_GET_API_VERSION:

+    rpc_loc_api_version_s_type api_version;

+  case RPC_LOC_IOCTL_GET_FIX_CRITERIA:

+    rpc_loc_fix_criteria_s_type fix_criteria;

+  case RPC_LOC_IOCTL_GET_ENGINE_LOCK:

+    rpc_loc_lock_e_type engine_lock;

+  case RPC_LOC_IOCTL_GET_SBAS_CONFIG:

+    rpc_boolean sbas_mode;

+  case RPC_LOC_IOCTL_GET_NMEA_TYPES:

+    rpc_loc_nmea_sentence_type nmea_types;

+  case RPC_LOC_IOCTL_GET_ON_DEMAND_LPM:

+    rpc_boolean on_demand_lpm;

+  case  RPC_LOC_IOCTL_GET_CDMA_PDE_SERVER_ADDR:

+  case  RPC_LOC_IOCTL_GET_CDMA_MPC_SERVER_ADDR:

+  case  RPC_LOC_IOCTL_GET_UMTS_SLP_SERVER_ADDR:

+  case  RPC_LOC_IOCTL_GET_CUSTOM_PDE_SERVER_ADDR:

+    rpc_loc_server_info_s_type server_addr;

+  case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE:

+    rpc_loc_predicted_orbits_data_source_s_type predicted_orbits_data_source;

+  case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_VALIDITY:

+    rpc_loc_predicted_orbits_data_validity_report_s_type predicted_orbits_data_validity;

+  case RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL:

+    rpc_uint8 xtra_t_session_control;

+  case  RPC_LOC_IOCTL_GET_LBS_APN_PROFILE:

+  case  RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE:

+    rpc_loc_apn_profiles_type apn_profiles[6];

+  case RPC_LOC_IOCTL_GET_SUPL_VERSION:

+    rpc_uint32 supl_version;

+  default:

+    void;

+};

+

+struct rpc_loc_ioctl_callback_s_type {

+  rpc_loc_ioctl_e_type type;

+  rpc_int32 status;

+  rpc_loc_ioctl_callback_data_u_type data;

+};

+

+union rpc_loc_event_payload_u_type switch (unsigned hyper disc) {

+  case RPC_LOC_EVENT_PARSED_POSITION_REPORT:

+    rpc_loc_parsed_position_s_type parsed_location_report;

+  case RPC_LOC_EVENT_SATELLITE_REPORT:

+    rpc_loc_gnss_info_s_type gnss_report;

+  case RPC_LOC_EVENT_NMEA_POSITION_REPORT:

+  case RPC_LOC_EVENT_NMEA_1HZ_REPORT:

+    rpc_loc_nmea_report_s_type nmea_report;

+  case RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST:

+    rpc_loc_ni_event_s_type ni_request;

+  case RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST:

+    rpc_loc_assist_data_request_s_type assist_data_request;

+  case RPC_LOC_EVENT_LOCATION_SERVER_REQUEST:

+    rpc_loc_server_request_s_type loc_server_request;

+  case RPC_LOC_EVENT_IOCTL_REPORT:

+    rpc_loc_ioctl_callback_s_type ioctl_report;

+  case RPC_LOC_EVENT_STATUS_REPORT:

+    rpc_loc_status_event_s_type status_report;

+  case RPC_LOC_EVENT_WPS_NEEDED_REQUEST:

+    rpc_loc_qwip_request_s_type qwip_request;

+  case RPC_LOC_EVENT_RESERVED:

+    rpc_loc_reserved_payload_s_type reserved;

+  default:

+    void;

+};

+

diff --git a/loc_api/libloc_api-rpc/Android.mk b/loc_api/libloc_api-rpc/Android.mk
index a0fec50..f70cba5 100755
--- a/loc_api/libloc_api-rpc/Android.mk
+++ b/loc_api/libloc_api-rpc/Android.mk
@@ -1,13 +1,7 @@
-#Copyright (c) 2009, QUALCOMM USA, INC.
-#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 QUALCOMM USA, Inc.  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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
-
 ifneq ($(BUILD_TINY_ANDROID),true)
 
+ifneq ($(BOARD_VENDOR_QCOM_GPS_LOC_API_AMSS_VERSION),50001)
+
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
@@ -63,3 +57,4 @@
 include $(BUILD_STATIC_LIBRARY)
 
 endif
+endif
diff --git a/loc_api/libloc_api-rpc/gen-1240/Makefile.xdr b/loc_api/libloc_api-rpc/gen-1240/Makefile.xdr
index 60f730c..5d9cf6c 100755
--- a/loc_api/libloc_api-rpc/gen-1240/Makefile.xdr
+++ b/loc_api/libloc_api-rpc/gen-1240/Makefile.xdr
@@ -1,12 +1,3 @@
-# Copyright (c) 2009, QUALCOMM USA, INC.
-# 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 QUALCOMM USA, INC.  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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
-
-
 CLIENTS:= loc_api
 SERVERS:= loc_api_cb
 COMMON:= loc_api_common
diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api.xdr b/loc_api/libloc_api-rpc/gen-1240/loc_api.xdr
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api_cb.xdr b/loc_api/libloc_api-rpc/gen-1240/loc_api_cb.xdr
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api_cb_svc.c b/loc_api/libloc_api-rpc/gen-1240/loc_api_cb_svc.c
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api_cb_xdr.c b/loc_api/libloc_api-rpc/gen-1240/loc_api_cb_xdr.c
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api_clnt.c b/loc_api/libloc_api-rpc/gen-1240/loc_api_clnt.c
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api_common.xdr b/loc_api/libloc_api-rpc/gen-1240/loc_api_common.xdr
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api_common_xdr.c b/loc_api/libloc_api-rpc/gen-1240/loc_api_common_xdr.c
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api_rpc_glue.c b/loc_api/libloc_api-rpc/gen-1240/loc_api_rpc_glue.c
index 571bbda..fbaca8b 100755
--- a/loc_api/libloc_api-rpc/gen-1240/loc_api_rpc_glue.c
+++ b/loc_api/libloc_api-rpc/gen-1240/loc_api_rpc_glue.c
@@ -67,8 +67,8 @@
 #include <utils/Log.h>
 
 /* Comment this out to enable logging */
-#undef ALOGD
-#define ALOGD(...) {}
+#undef LOGD
+#define LOGD(...) {}
 
 /*=====================================================================
      External declarations
@@ -99,17 +99,17 @@
     /* Callback not registered, or unexpected ID (shouldn't happen) */
     if (loc_api_saved_cb == NULL || argp->cb_id != LOC_API_CB_ID)
     {
-        ALOGD("Warning: No callback handler.\n");
+        LOGD("Warning: No callback handler.\n");
         ret->loc_event_cb_f_type_result = 0;
         return 1; /* simply return */
     }
 
-    ALOGD("proc: %x  prog: %x  vers: %x\n",
+    LOGD("proc: %x  prog: %x  vers: %x\n",
             (int) req->rq_proc,
             (int) req->rq_prog,
             (int) req->rq_vers);
 
-    ALOGD("Callback received: %x (handle=%d ret_ptr=%d)\n",
+    LOGD("Callback received: %x (handle=%d ret_ptr=%d)\n",
             (int) argp->loc_event,
             (int) argp->loc_handle,
             (int) ret);
@@ -133,7 +133,7 @@
     /*
      * Insert additional freeing code here, if needed
      */
-    // ALOGD("***** loc_apicbprog_freeresult\n");
+    // LOGD("***** loc_apicbprog_freeresult\n");
 
     return 1;
 }
@@ -160,9 +160,9 @@
     if (loc_api_clnt == NULL)
     {
         /* Print msg */
-        ALOGD("Trying to create RPC client...\n");
+        LOGD("Trying to create RPC client...\n");
         loc_api_clnt = clnt_create(NULL, LOC_APIPROG, LOC_APIVERS, NULL);
-        ALOGD("Created loc_api_clnt ---- %x\n", (unsigned int)loc_api_clnt);
+        LOGD("Created loc_api_clnt ---- %x\n", (unsigned int)loc_api_clnt);
 
         if (loc_api_clnt == NULL)
         {
@@ -174,7 +174,7 @@
         int rc = loc_apicb_app_init();
         if (rc >= 0)
         {
-            ALOGD("Loc API callback initialized.\n");
+            LOGD("Loc API callback initialized.\n");
         } else {
             fprintf(stderr, "Loc API callback initialization failed.\n");
             return 0;
diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api_xdr.c b/loc_api/libloc_api-rpc/gen-1240/loc_api_xdr.c
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-3200/Makefile.xdr b/loc_api/libloc_api-rpc/gen-3200/Makefile.xdr
index 60f730c..5d9cf6c 100755
--- a/loc_api/libloc_api-rpc/gen-3200/Makefile.xdr
+++ b/loc_api/libloc_api-rpc/gen-3200/Makefile.xdr
@@ -1,12 +1,3 @@
-# Copyright (c) 2009, QUALCOMM USA, INC.
-# 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 QUALCOMM USA, INC.  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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
-
-
 CLIENTS:= loc_api
 SERVERS:= loc_api_cb
 COMMON:= loc_api_common
diff --git a/loc_api/libloc_api-rpc/gen-3200/loc_api_cb_svc.c b/loc_api/libloc_api-rpc/gen-3200/loc_api_cb_svc.c
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-3200/loc_api_cb_xdr.c b/loc_api/libloc_api-rpc/gen-3200/loc_api_cb_xdr.c
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-3200/loc_api_clnt.c b/loc_api/libloc_api-rpc/gen-3200/loc_api_clnt.c
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-3200/loc_api_common_xdr.c b/loc_api/libloc_api-rpc/gen-3200/loc_api_common_xdr.c
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/gen-3200/loc_api_rpc_glue.c b/loc_api/libloc_api-rpc/gen-3200/loc_api_rpc_glue.c
index cb9350e..8c17122 100755
--- a/loc_api/libloc_api-rpc/gen-3200/loc_api_rpc_glue.c
+++ b/loc_api/libloc_api-rpc/gen-3200/loc_api_rpc_glue.c
@@ -67,8 +67,8 @@
 #include <utils/Log.h>
 
 /* Comment this out to enable logging */
-#undef ALOGD
-#define ALOGD(...) {}
+#undef LOGD
+#define LOGD(...) {}
 
 /*=====================================================================
      External declarations
@@ -99,17 +99,17 @@
     /* Callback not registered, or unexpected ID (shouldn't happen) */
     if (loc_api_saved_cb == NULL || argp->cb_id != LOC_API_CB_ID)
     {
-        ALOGD("Warning: No callback handler.\n");
+        LOGD("Warning: No callback handler.\n");
         ret->loc_event_cb_f_type_result = 0;
         return 1; /* simply return */
     }
 
-    ALOGD("proc: %x  prog: %x  vers: %x\n",
+    LOGD("proc: %x  prog: %x  vers: %x\n",
             (int) req->rq_proc,
             (int) req->rq_prog,
             (int) req->rq_vers);
 
-    ALOGD("Callback received: %x (handle=%d ret_ptr=%d)\n",
+    LOGD("Callback received: %x (handle=%d ret_ptr=%d)\n",
             (int) argp->loc_event,
             (int) argp->loc_handle,
             (int) ret);
@@ -133,7 +133,7 @@
     /*
      * Insert additional freeing code here, if needed
      */
-    // ALOGD("***** loc_apicbprog_freeresult\n");
+    // LOGD("***** loc_apicbprog_freeresult\n");
 
     return 1;
 }
@@ -160,9 +160,9 @@
     if (loc_api_clnt == NULL)
     {
         /* Print msg */
-        ALOGD("Trying to create RPC client...\n");
+        LOGD("Trying to create RPC client...\n");
         loc_api_clnt = clnt_create(NULL, LOC_APIPROG, /*LOC_APIVERS*/ 0x00010000, NULL);
-        ALOGD("Created loc_api_clnt ---- %x\n", (unsigned int)loc_api_clnt);
+        LOGD("Created loc_api_clnt ---- %x\n", (unsigned int)loc_api_clnt);
 
         if (loc_api_clnt == NULL)
         {
@@ -174,7 +174,7 @@
         int rc = loc_apicb_app_init();
         if (rc >= 0)
         {
-            ALOGD("Loc API callback initialized.\n");
+            LOGD("Loc API callback initialized.\n");
         } else {
             fprintf(stderr, "Loc API callback initialization failed.\n");
             return 0;
diff --git a/loc_api/libloc_api-rpc/gen-3200/loc_api_xdr.c b/loc_api/libloc_api-rpc/gen-3200/loc_api_xdr.c
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/inc-1240/loc_api.h b/loc_api/libloc_api-rpc/inc-1240/loc_api.h
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/inc-1240/loc_api_cb.h b/loc_api/libloc_api-rpc/inc-1240/loc_api_cb.h
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/inc-1240/loc_api_common.h b/loc_api/libloc_api-rpc/inc-1240/loc_api_common.h
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/inc-3200/loc_api.h b/loc_api/libloc_api-rpc/inc-3200/loc_api.h
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/inc-3200/loc_api_cb.h b/loc_api/libloc_api-rpc/inc-3200/loc_api_cb.h
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/inc-3200/loc_api_common.h b/loc_api/libloc_api-rpc/inc-3200/loc_api_common.h
old mode 100644
new mode 100755
diff --git a/loc_api/libloc_api-rpc/inc/debug.h b/loc_api/libloc_api-rpc/inc/debug.h
index bef0ad3..a71b23a 100755
--- a/loc_api/libloc_api-rpc/inc/debug.h
+++ b/loc_api/libloc_api-rpc/inc/debug.h
@@ -25,7 +25,7 @@
 #define PRINT(x...) do {                                    \
         fprintf(stdout, "%s(%d) ", __FUNCTION__, __LINE__); \
         fprintf(stdout, ##x);                               \
-        ALOGD(x);                               \
+        LOGD(x);                               \
     } while(0)
 
 #ifdef DEBUG
@@ -43,14 +43,14 @@
 #define E(x...) do {                                        \
         fprintf(stderr, "%s(%d) ", __FUNCTION__, __LINE__); \
         fprintf(stderr, ##x);                               \
-        ALOGE(x);                                            \
+        LOGE(x);                                            \
     } while(0)
 
 #define FAILIF(cond, msg...) do {                                              \
         if (__builtin_expect (cond, 0)) {                                      \
             fprintf(stderr, "%s:%s:(%d): ", __FILE__, __FUNCTION__, __LINE__); \
             fprintf(stderr, ##msg);                                            \
-            ALOGE(##msg);                                                       \
+            LOGE(##msg);                                                       \
         }                                                                      \
     } while(0)
 
diff --git a/loc_api/libloc_api/Android.mk b/loc_api/libloc_api/Android.mk
index 1fd409f..f20280e 100755
--- a/loc_api/libloc_api/Android.mk
+++ b/loc_api/libloc_api/Android.mk
@@ -1,16 +1,12 @@
-#Copyright (c) 2009, QUALCOMM USA, INC.
-#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 QUALCOMM USA, Inc.  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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
-
+#Compile the old library version from Google push for Passion builds with old modem image
+ifneq ($(BOARD_VENDOR_QCOM_GPS_LOC_API_AMSS_VERSION),50001)
 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := gps.$(BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE)
 
+LOCAL_MODULE_TAGS := optional
+
 LOCAL_STATIC_LIBRARIES:= \
     libloc_api-rpc 
 
@@ -40,4 +36,4 @@
 LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
 
 include $(BUILD_SHARED_LIBRARY)
-
+endif #BOARD_VENDOR_QCOM_GPS_LOC_API_AMSS_VERSION = 50001
diff --git a/loc_api/libloc_api/gps.c b/loc_api/libloc_api/gps.c
old mode 100644
new mode 100755
index a28a608..5f6d809
--- a/loc_api/libloc_api/gps.c
+++ b/loc_api/libloc_api/gps.c
@@ -1,29 +1,31 @@
-/******************************************************************************
-  @file:  gps.c
-  @brief:
-
-  DESCRIPTION
-    This file defines the implemenation for GPS hardware abstraction layer.
-
-  INITIALIZATION AND SEQUENCING REQUIREMENTS
-
-  -----------------------------------------------------------------------------
-Copyright (c) 2009, QUALCOMM USA, INC.
-
-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 QUALCOMM USA, INC.  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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
-  -----------------------------------------------------------------------------
-
-******************************************************************************/
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
 
 #include <hardware/gps.h>
 
@@ -55,7 +57,7 @@
     .open = open_gps
 };
 
-struct hw_module_t HAL_MODULE_INFO_SYM = {
+const struct hw_module_t HAL_MODULE_INFO_SYM = {
     .tag = HARDWARE_MODULE_TAG,
     .version_major = 1,
     .version_minor = 0,
diff --git a/loc_api/libloc_api/loc_eng.cpp b/loc_api/libloc_api/loc_eng.cpp
index 48c94f3..68ac002 100755
--- a/loc_api/libloc_api/loc_eng.cpp
+++ b/loc_api/libloc_api/loc_eng.cpp
@@ -1,35 +1,31 @@
-/******************************************************************************
-  @file:  loc_eng.cpp
-  @brief:
-
-  DESCRIPTION
-    This file defines the implemenation for GPS hardware abstraction layer.
-
-  INITIALIZATION AND SEQUENCING REQUIREMENTS
-
-  -----------------------------------------------------------------------------
-Copyright (c) 2009, QUALCOMM USA, INC.
-
-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 QUALCOMM USA, INC.  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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
-  -----------------------------------------------------------------------------
-
-******************************************************************************/
-
-/*=====================================================================
-$Header: $
-$DateTime: $
-$Author: $
-======================================================================*/
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
 
@@ -57,8 +53,8 @@
 #include <utils/Log.h>
 
 // comment this out to enable logging
-// #undef ALOGD
-// #define ALOGD(...) {}
+// #undef LOGD
+// #define LOGD(...) {}
 
 #define DEBUG_MOCK_NI 0
 
@@ -150,7 +146,7 @@
     property_get("gps.disable", propBuf, "");
     if (propBuf[0] == '1')
     {
-        ALOGD("gps_get_interface returning NULL because gps.disable=1\n");
+        LOGD("gps_get_interface returning NULL because gps.disable=1\n");
         return NULL;
     }
 
@@ -240,7 +236,7 @@
     loc_eng_data.deferred_action_thread = callbacks->create_thread_cb("loc_api",
                                             loc_eng_process_deferred_action, NULL);
 
-    ALOGD ("loc_eng_init called, client id = %d\n", (int32) loc_eng_data.client_handle);
+    LOGD ("loc_eng_init called, client id = %d\n", (int32) loc_eng_data.client_handle);
     return 0;
 }
 
@@ -314,20 +310,20 @@
 static int loc_eng_start()
 {
     int ret_val;
-    ALOGD ("loc_eng_start\n");
+    LOGD ("loc_eng_start\n");
 
     if (loc_eng_data.position_mode != GPS_POSITION_MODE_STANDALONE &&
             loc_eng_data.agps_server_host[0] != 0 &&
             loc_eng_data.agps_server_port != 0) {
         int result = set_agps_server();
-        ALOGD ("set_agps_server returned = %d\n", result);
+        LOGD ("set_agps_server returned = %d\n", result);
     }
 
     ret_val = loc_start_fix (loc_eng_data.client_handle);
 
     if (ret_val != RPC_LOC_API_SUCCESS)
     {
-        ALOGD ("loc_eng_start returned error = %d\n", ret_val);
+        LOGD ("loc_eng_start returned error = %d\n", ret_val);
     }
 
     return 0;
@@ -354,7 +350,7 @@
 {
     int ret_val;
 
-    ALOGD ("loc_eng_stop\n");
+    LOGD ("loc_eng_stop\n");
 
     pthread_mutex_lock(&(loc_eng_data.deferred_stop_mutex));
     // work around problem with loc_eng_stop when AGPS requests are pending
@@ -362,7 +358,7 @@
     if (loc_eng_data.agps_request_pending)
     {
         loc_eng_data.stop_request_pending = true;
-        ALOGD ("deferring stop until AGPS data call is finished\n");
+        LOGD ("deferring stop until AGPS data call is finished\n");
         pthread_mutex_unlock(&(loc_eng_data.deferred_stop_mutex));
         return 0;
     }
@@ -371,7 +367,7 @@
     ret_val = loc_stop_fix (loc_eng_data.client_handle);
     if (ret_val != RPC_LOC_API_SUCCESS)
     {
-        ALOGD ("loc_eng_stop returned error = %d\n", ret_val);
+        LOGD ("loc_eng_stop returned error = %d\n", ret_val);
     }
 
     return 0;
@@ -382,7 +378,7 @@
     rpc_loc_ioctl_data_u_type    ioctl_data;
     boolean                      ret_val;
 
-    ALOGD ("loc_eng_set_gps_lock mode, client = %d, lock_type = %d\n",
+    LOGD ("loc_eng_set_gps_lock mode, client = %d, lock_type = %d\n",
             (int32) loc_eng_data.client_handle, lock_type);
 
     ioctl_data.rpc_loc_ioctl_data_u_type_u.engine_lock = lock_type;
@@ -396,7 +392,7 @@
 
     if (ret_val != TRUE)
     {
-        ALOGD ("loc_eng_set_gps_lock mode failed\n");
+        LOGD ("loc_eng_set_gps_lock mode failed\n");
     }
 
     return 0;
@@ -425,7 +421,7 @@
     rpc_loc_fix_criteria_s_type *fix_criteria_ptr;
     boolean                      ret_val;
 
-    ALOGD ("loc_eng_set_position mode, client = %d, interval = %d, mode = %d\n",
+    LOGD ("loc_eng_set_position mode, client = %d, interval = %d, mode = %d\n",
             (int32) loc_eng_data.client_handle, min_interval, mode);
 
     loc_eng_data.position_mode = mode;
@@ -478,7 +474,7 @@
 
     if (ret_val != TRUE)
     {
-        ALOGD ("loc_eng_set_position mode failed\n");
+        LOGD ("loc_eng_set_position mode failed\n");
     }
 
     return 0;
@@ -506,7 +502,7 @@
     rpc_loc_assist_data_time_s_type *time_info_ptr;
     boolean                          ret_val;
 
-    ALOGD ("loc_eng_inject_time, uncertainty = %d\n", uncertainty);
+    LOGD ("loc_eng_inject_time, uncertainty = %d\n", uncertainty);
 
     ioctl_data.disc = RPC_LOC_IOCTL_INJECT_UTC_TIME;
 
@@ -523,7 +519,7 @@
 
     if (ret_val != TRUE)
     {
-        ALOGD ("loc_eng_inject_time failed\n");
+        LOGD ("loc_eng_inject_time failed\n");
     }
 
     return 0;
@@ -708,7 +704,7 @@
     const rpc_loc_event_payload_u_type*  loc_event_payload
     )
 {
-    ALOGV ("loc_event_cb, client = %d, loc_event = 0x%x", (int32) client_handle, (uint32) loc_event);
+    LOGV ("loc_event_cb, client = %d, loc_event = 0x%x", (int32) client_handle, (uint32) loc_event);
     if (client_handle == loc_eng_data.client_handle)
     {
         pthread_mutex_lock(&loc_eng_data.deferred_action_mutex);
@@ -723,7 +719,7 @@
     }
     else
     {
-        ALOGD ("loc client mismatch: received = %d, expected = %d \n", (int32) client_handle, (int32) loc_eng_data.client_handle);
+        LOGD ("loc client mismatch: received = %d, expected = %d \n", (int32) client_handle, (int32) loc_eng_data.client_handle);
     }
 
     return RPC_LOC_API_SUCCESS;
@@ -749,7 +745,7 @@
 {
     GpsLocation location;
 
-    ALOGV ("loc_eng_report_position: location report, valid mask = 0x%x, sess status = %d\n",
+    LOGV ("loc_eng_report_position: location report, valid mask = 0x%x, sess status = %d\n",
          (uint32) location_report_ptr->valid_mask, location_report_ptr->session_status);
 
     memset (&location, 0, sizeof(location));
@@ -800,18 +796,18 @@
 
             if (loc_eng_data.location_cb != NULL)
             {
-                ALOGV ("loc_eng_report_position: fire callback\n");
+                LOGV ("loc_eng_report_position: fire callback\n");
                 loc_eng_data.location_cb (&location);
             }
         }
         else
         {
-            ALOGV ("loc_eng_report_position: ignore position report when session status = %d\n", location_report_ptr->session_status);
+            LOGV ("loc_eng_report_position: ignore position report when session status = %d\n", location_report_ptr->session_status);
         }
     }
     else
     {
-        ALOGV ("loc_eng_report_position: ignore position report when session status is not set\n");
+        LOGV ("loc_eng_report_position: ignore position report when session status is not set\n");
     }
 }
 
@@ -837,7 +833,7 @@
     int             num_svs_max, i;
 	const rpc_loc_sv_info_s_type *sv_info_ptr;
 
-    ALOGV ("loc_eng_report_sv: valid_mask = 0x%x, num of sv = %d\n",
+    LOGV ("loc_eng_report_sv: valid_mask = 0x%x, num of sv = %d\n",
             (uint32) gnss_report_ptr->valid_mask,
             gnss_report_ptr->sv_count);
 
@@ -923,7 +919,7 @@
         }
     }
 
-    ALOGV ("num_svs = %d, eph mask = %d, alm mask = %d\n", SvStatus.num_svs, SvStatus.ephemeris_mask, SvStatus.almanac_mask );
+    LOGV ("num_svs = %d, eph mask = %d, alm mask = %d\n", SvStatus.num_svs, SvStatus.ephemeris_mask, SvStatus.almanac_mask );
     if ((SvStatus.num_svs != 0) && (loc_eng_data.sv_status_cb != NULL))
     {
         loc_eng_data.sv_status_cb(&SvStatus);
@@ -950,7 +946,7 @@
 {
     GpsStatus status;
 
-    ALOGV ("loc_eng_report_status: event = %d\n", status_report_ptr->event);
+    LOGV ("loc_eng_report_status: event = %d\n", status_report_ptr->event);
 
     memset (&status, 0, sizeof(status));
     status.size = sizeof(status);
@@ -1024,7 +1020,7 @@
 ===========================================================================*/
 static void loc_eng_process_conn_request (const rpc_loc_server_request_s_type *server_request_ptr)
 {
-    ALOGD ("loc_event_cb: get loc event location server request, event = %d\n", server_request_ptr->event);
+    LOGD ("loc_event_cb: get loc event location server request, event = %d\n", server_request_ptr->event);
 
     // Signal DeferredActionThread to send the APN name
     pthread_mutex_lock(&loc_eng_data.deferred_action_mutex);
@@ -1068,14 +1064,14 @@
 ===========================================================================*/
 static void loc_eng_agps_init(AGpsCallbacks* callbacks)
 {
-    ALOGV("loc_eng_agps_init\n");
+    LOGV("loc_eng_agps_init\n");
     loc_eng_data.agps_status_cb = callbacks->status_cb;
 }
 
 static int loc_eng_agps_data_conn_open(const char* apn)
 {
     int apn_len;
-    ALOGD("loc_eng_agps_data_conn_open: %s\n", apn);
+    LOGD("loc_eng_agps_data_conn_open: %s\n", apn);
 
     pthread_mutex_lock(&(loc_eng_data.deferred_action_mutex));
 
@@ -1085,7 +1081,7 @@
 
         if (apn_len >= sizeof(loc_eng_data.apn_name))
         {
-            ALOGD ("loc_eng_set_apn: error, apn name exceeds maximum lenght of 100 chars\n");
+            LOGD ("loc_eng_set_apn: error, apn name exceeds maximum lenght of 100 chars\n");
             apn_len = sizeof(loc_eng_data.apn_name) - 1;
         }
 
@@ -1103,7 +1099,7 @@
 
 static int loc_eng_agps_data_conn_closed()
 {
-    ALOGD("loc_eng_agps_data_conn_closed\n");
+    LOGD("loc_eng_agps_data_conn_closed\n");
     pthread_mutex_lock(&(loc_eng_data.deferred_action_mutex));
     /* hold a wake lock while events are pending for deferred_action_thread */
     loc_eng_data.acquire_wakelock_cb();
@@ -1115,7 +1111,7 @@
 
 static int loc_eng_agps_data_conn_failed()
 {
-    ALOGD("loc_eng_agps_data_conn_failed\n");
+    LOGD("loc_eng_agps_data_conn_failed\n");
 
     pthread_mutex_lock(&(loc_eng_data.deferred_action_mutex));
     /* hold a wake lock while events are pending for deferred_action_thread */
@@ -1163,7 +1159,7 @@
 
     server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr.addr_val = url;
     server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr.addr_len = strlen(url);
-    ALOGD ("set_agps_server, addr = %s\n", server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr.addr_val);
+    LOGD ("set_agps_server, addr = %s\n", server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr.addr_val);
 #else
     char* buf = server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr;
     int buf_len = sizeof(server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr);
@@ -1174,7 +1170,7 @@
             (loc_eng_data.agps_server_port & (0x0000ffff)));
 
     server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.length = buf_len;
-    ALOGD ("set_agps_server, addr = %s\n", buf);
+    LOGD ("set_agps_server, addr = %s\n", buf);
 #endif
 
     ret_val = loc_eng_ioctl (loc_eng_data.client_handle,
@@ -1185,19 +1181,19 @@
 
     if (ret_val != TRUE)
     {
-        ALOGD ("set_agps_server failed\n");
+        LOGD ("set_agps_server failed\n");
         return -1;
     }
     else
     {
-        ALOGV ("set_agps_server successful\n");
+        LOGV ("set_agps_server successful\n");
         return 0;
     }
 }
 
 static int loc_eng_agps_set_server(AGpsType type, const char* hostname, int port)
 {
-    ALOGD ("loc_eng_set_default_agps_server, type = %d, hostname = %s, port = %d\n", type, hostname, port);
+    LOGD ("loc_eng_set_default_agps_server, type = %d, hostname = %s, port = %d\n", type, hostname, port);
 
     if (type != AGPS_TYPE_SUPL)
         return -1;
@@ -1246,7 +1242,7 @@
                              LOC_IOCTL_DEFAULT_TIMEOUT,
                              NULL);
 
-    ALOGD("loc_eng_ioctl for aiding data deletion returned %d, 1 for success\n", ret_val);
+    LOGD("loc_eng_ioctl for aiding data deletion returned %d, 1 for success\n", ret_val);
 }
 
 /*===========================================================================
@@ -1274,7 +1270,7 @@
     boolean                             ret_val;
     int                                 agps_status = -1;
 
-    ALOGV("loc_eng_process_atl_deferred_action, agps_status = %d\n", loc_eng_data.agps_status);
+    LOGV("loc_eng_process_atl_deferred_action, agps_status = %d\n", loc_eng_data.agps_status);
 
     memset (&ioctl_data, 0, sizeof (rpc_loc_ioctl_data_u_type));
  
@@ -1304,7 +1300,7 @@
 #endif
             // Delay this so that PDSM ATL module will behave properly
             sleep (1);
-            ALOGD("loc_eng_ioctl for ATL with apn_name = %s\n", conn_open_status_ptr->apn_name);
+            LOGD("loc_eng_ioctl for ATL with apn_name = %s\n", conn_open_status_ptr->apn_name);
         }
         else // data_connection_failed
         {
@@ -1320,7 +1316,7 @@
                              LOC_IOCTL_DEFAULT_TIMEOUT,
                              NULL);
 
-    ALOGD("loc_eng_ioctl for ATL returned %d (1 for success)\n", ret_val);
+    LOGD("loc_eng_ioctl for ATL returned %d (1 for success)\n", ret_val);
 }
 
 /*===========================================================================
@@ -1368,7 +1364,7 @@
         if (loc_event_payload->rpc_loc_event_payload_u_type_u.assist_data_request.event ==
                 RPC_LOC_ASSIST_DATA_PREDICTED_ORBITS_REQ)
         {
-            ALOGD ("loc_event_cb: xtra download requst");
+            LOGD ("loc_event_cb: xtra download requst");
 
             // Call Registered callback
             if (loc_eng_data.xtra_module_data.download_request_cb != NULL)
@@ -1429,13 +1425,13 @@
     status.size = sizeof(status);
     status.type = AGPS_TYPE_SUPL;
 
-    ALOGD("loc_eng_process_deferred_action started\n");
+    LOGD("loc_eng_process_deferred_action started\n");
 
     // make sure we do not run in background scheduling group
     set_sched_policy(gettid(), SP_FOREGROUND);
 
     // disable the GPS lock
-    ALOGD("Setting GPS privacy lock to RPC_LOC_LOCK_NONE\n");
+    LOGD("Setting GPS privacy lock to RPC_LOC_LOCK_NONE\n");
     loc_eng_set_gps_lock(RPC_LOC_LOCK_NONE);
 
     while (1)
@@ -1506,10 +1502,10 @@
             loc_eng_data.agps_request_pending = false;
             if (loc_eng_data.stop_request_pending)
             {
-                ALOGD ("handling deferred stop\n");
+                LOGD ("handling deferred stop\n");
                 if (loc_stop_fix(loc_eng_data.client_handle) != RPC_LOC_API_SUCCESS)
                 {
-                    ALOGD ("loc_stop_fix failed!\n");
+                    LOGD ("loc_stop_fix failed!\n");
                 }
             }
             pthread_mutex_unlock(&(loc_eng_data.deferred_stop_mutex));
@@ -1521,10 +1517,10 @@
     }
 
     // reenable the GPS lock
-    ALOGD("Setting GPS privacy lock to RPC_LOC_LOCK_ALL\n");
+    LOGD("Setting GPS privacy lock to RPC_LOC_LOCK_ALL\n");
     loc_eng_set_gps_lock(RPC_LOC_LOCK_ALL);
 
-    ALOGD("loc_eng_process_deferred_action thread exiting\n");
+    LOGD("loc_eng_process_deferred_action thread exiting\n");
     loc_eng_data.release_wakelock_cb();
 
     loc_eng_data.deferred_action_thread = 0;
diff --git a/loc_api/libloc_api/loc_eng.h b/loc_api/libloc_api/loc_eng.h
index 39f3d91..553a97e 100755
--- a/loc_api/libloc_api/loc_eng.h
+++ b/loc_api/libloc_api/loc_eng.h
@@ -1,35 +1,31 @@
-/******************************************************************************
-  @file:  loc_eng.h
-  @brief:
-
-  DESCRIPTION
-    This file defines the global data structure used by this module.
-
-  INITIALIZATION AND SEQUENCING REQUIREMENTS
-
-  -----------------------------------------------------------------------------
-Copyright (c) 2009, QUALCOMM USA, INC.
-
-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 QUALCOMM USA, INC.  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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
-  -----------------------------------------------------------------------------
-
-******************************************************************************/
-
-/*=====================================================================
-$Header: $
-$DateTime: $
-$Author: $
-======================================================================*/
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
 
 #ifndef LOC_ENG_H
 #define LOC_ENG_H
diff --git a/loc_api/libloc_api/loc_eng_ioctl.cpp b/loc_api/libloc_api/loc_eng_ioctl.cpp
index f59cc4e..a43d8cc 100755
--- a/loc_api/libloc_api/loc_eng_ioctl.cpp
+++ b/loc_api/libloc_api/loc_eng_ioctl.cpp
@@ -1,36 +1,32 @@
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
 
-/******************************************************************************
-  @file:  loc_eng.cpp
-  @brief:
-
-  DESCRIPTION
-    This file defines the implemenation for GPS hardware abstraction layer.
-
-  INITIALIZATION AND SEQUENCING REQUIREMENTS
-
-  -----------------------------------------------------------------------------
-Copyright (c) 2009, QUALCOMM USA, INC.
-
-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 QUALCOMM USA, INC.  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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
-  -----------------------------------------------------------------------------
-
-******************************************************************************/
-
-/*=====================================================================
-$Header: $
-$DateTime: $
-$Author: $
-======================================================================*/
 #define LOG_NDDEBUG 0
 
 #include <stdio.h>
@@ -52,8 +48,8 @@
 #include <utils/Log.h>
 
 // comment this out to enable logging
-// #undef ALOGD
-// #define ALOGD(...) {}
+// #undef LOGD
+// #define LOGD(...) {}
 
 // Function declarations
 static boolean loc_eng_ioctl_setup_cb(
@@ -97,7 +93,7 @@
     int                        rpc_ret_val;
     loc_eng_ioctl_data_s_type *ioctl_cb_data_ptr;
 
-    ALOGV ("loc_eng_ioctl: client = %d, ioctl_type = %d, cb_data =0x%x\n", (int32) handle, ioctl_type, (uint32) cb_data_ptr);
+    LOGV ("loc_eng_ioctl: client = %d, ioctl_type = %d, cb_data =0x%x\n", (int32) handle, ioctl_type, (uint32) cb_data_ptr);
 
     ioctl_cb_data_ptr = &(loc_eng_data.ioctl_data);
     // Select the callback we are waiting for
@@ -109,7 +105,7 @@
                                     ioctl_type,
                                     ioctl_data_ptr);
 
-        ALOGV ("loc_eng_ioctl: loc_ioctl returned %d \n", rpc_ret_val);
+        LOGV ("loc_eng_ioctl: loc_ioctl returned %d \n", rpc_ret_val);
 
         if (rpc_ret_val == RPC_LOC_API_SUCCESS)
         {
@@ -164,7 +160,7 @@
     pthread_mutex_lock(&ioctl_cb_data_ptr->cb_data_mutex);
     if (ioctl_cb_data_ptr->cb_is_selected == TRUE)
     {
-        ALOGD ("loc_eng_ioctl_setup_cb: ERROR, another ioctl in progress \n");
+        LOGD ("loc_eng_ioctl_setup_cb: ERROR, another ioctl in progress \n");
         ret_val = FALSE;
     }
     else
@@ -222,7 +218,7 @@
     do {
         if (ioctl_cb_data_ptr->cb_is_selected == FALSE)
         {
-            ALOGD ("loc_eng_ioctl_wait_cb: ERROR called when cb_is_waiting is set to FALSE \n");
+            LOGD ("loc_eng_ioctl_wait_cb: ERROR called when cb_is_waiting is set to FALSE \n");
             ret_val = FALSE;
             break;
         }
@@ -240,7 +236,7 @@
         // Special case where callback is issued before loc_ioctl ever returns
         if (ioctl_cb_data_ptr->cb_has_arrived == TRUE)
         {
-            ALOGD ("loc_eng_ioctl_wait_cb: cb has arrived without waiting \n");
+            LOGD ("loc_eng_ioctl_wait_cb: cb has arrived without waiting \n");
             ret_val = TRUE;
             break;
         }
@@ -260,7 +256,7 @@
             ret_val = FALSE;
         }
 
-        ALOGV ("loc_eng_ioctl_wait_cb: pthread_cond_timedwait returned %d\n", rc);
+        LOGV ("loc_eng_ioctl_wait_cb: pthread_cond_timedwait returned %d\n", rc);
 
     } while (0);
 
@@ -286,7 +282,7 @@
 
     pthread_mutex_unlock(&ioctl_cb_data_ptr->cb_data_mutex);
 
-    ALOGV ("loc_eng_ioctl_wait_cb: returned %d\n", ret_val);
+    LOGV ("loc_eng_ioctl_wait_cb: returned %d\n", ret_val);
     return ret_val;
 }
 
@@ -321,13 +317,13 @@
     pthread_mutex_lock(&ioctl_cb_data_ptr->cb_data_mutex);
     if (client_handle != ioctl_cb_data_ptr->client_handle)
     {
-        ALOGD ("loc_eng_ioctl_process_cb: client handle mismatch, received = %d, expected = %d \n",
+        LOGD ("loc_eng_ioctl_process_cb: client handle mismatch, received = %d, expected = %d \n",
                 (int32) client_handle, (int32) ioctl_cb_data_ptr->client_handle);
         ret_val = FALSE;
     }
     else if (cb_data_ptr->type != ioctl_cb_data_ptr->ioctl_type)
     {
-        ALOGD ("loc_eng_ioctl_process_cb: ioctl type mismatch, received = %d, expected = %d \n",
+        LOGD ("loc_eng_ioctl_process_cb: ioctl type mismatch, received = %d, expected = %d \n",
                  cb_data_ptr->type, ioctl_cb_data_ptr->ioctl_type);
         ret_val = FALSE;
     }
@@ -339,7 +335,7 @@
 
         ioctl_cb_data_ptr->cb_has_arrived = TRUE;
 
-        ALOGV ("loc_eng_ioctl_process_cb: callback arrived for client = %d, ioctl = %d, status = %d\n",
+        LOGV ("loc_eng_ioctl_process_cb: callback arrived for client = %d, ioctl = %d, status = %d\n",
                 (int32) ioctl_cb_data_ptr->client_handle, ioctl_cb_data_ptr->ioctl_type,
                 (int32) ioctl_cb_data_ptr->cb_payload.status);
 
diff --git a/loc_api/libloc_api/loc_eng_ioctl.h b/loc_api/libloc_api/loc_eng_ioctl.h
index 4090a4d..eb0c201 100755
--- a/loc_api/libloc_api/loc_eng_ioctl.h
+++ b/loc_api/libloc_api/loc_eng_ioctl.h
@@ -1,37 +1,31 @@
-/******************************************************************************
-  @file:  loc_eng_ioctl.h
-  @brief:
-
-  DESCRIPTION
-    This file defines the data structure used by any location client that 
-    waits for the ioctl particular event to occur. Any one IOCTL can be pending
-    at any time.
-
-  INITIALIZATION AND SEQUENCING REQUIREMENTS
-
-  -----------------------------------------------------------------------------
-Copyright (c) 2009, QUALCOMM USA, INC.
-
-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 QUALCOMM USA, INC.  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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
-  -----------------------------------------------------------------------------
-
-******************************************************************************/
-
-/*=====================================================================
-$Header: $
-$DateTime: $
-$Author: $
-======================================================================*/
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
 
 #ifndef LOC_ENG_IOCTL_H
 #define LOC_ENG_IOCTL_H
diff --git a/loc_api/libloc_api/loc_eng_ni.cpp b/loc_api/libloc_api/loc_eng_ni.cpp
index c763683..3df0af1 100755
--- a/loc_api/libloc_api/loc_eng_ni.cpp
+++ b/loc_api/libloc_api/loc_eng_ni.cpp
@@ -1,33 +1,33 @@
-/******************************************************************************
-  @file:  loc_eng_ni.cpp
-  @brief:  module for network initiated interactions
-
-  DESCRIPTION
-     LOC_API network initiated operation support
-
-  INITIALIZATION AND SEQUENCING REQUIREMENTS
-
-  -----------------------------------------------------------------------------
-  Copyright (c) 2009 QUALCOMM Incorporated.
-  All Rights Reserved. QUALCOMM Proprietary and Confidential.
-  -----------------------------------------------------------------------------
-******************************************************************************/
-
-/*=====================================================================
-                        EDIT HISTORY FOR MODULE
-
-  This section contains comments describing changes made to the module.
-  Notice that changes are listed in reverse chronological order.
-
-when       who      what, where, why
---------   ---      -------------------------------------------------------
-07/30/09   dx       Initial version
-
-$Id:
-======================================================================*/
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
-#define LOG_NIDEBUG 0
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -46,8 +46,8 @@
 #include <utils/Log.h>
 
 // comment this out to enable logging
-// #undef ALOGD
-// #define ALOGD(...) {}
+// #undef LOGD
+// #define LOGD(...) {}
 
 /*=============================================================================
  *
@@ -119,7 +119,7 @@
                     const rpc_loc_ni_event_s_type *request_pass_back
 )
 {
-    ALOGD("Sending NI response: %s\n", respond_from_enum(resp));
+    LOGD("Sending NI response: %s\n", respond_from_enum(resp));
 
     rpc_loc_ioctl_data_u_type data;
     rpc_loc_ioctl_callback_s_type callback_payload;
@@ -267,12 +267,12 @@
 
         loc_ni_respond(response, ni_req); */
 #endif
-        ALOGW("loc_ni_request_handler, notification in progress, new NI request ignored, type: %d",
+        LOGW("loc_ni_request_handler, notification in progress, new NI request ignored, type: %d",
                 ni_req->event);
     }
     else {
         /* Print notification */
-        ALOGD("NI Notification: %s, event: %d", msg, ni_req->event);
+        LOGD("NI Notification: %s, event: %d", msg, ni_req->event);
 
         pthread_mutex_lock(&loc_eng_ni_data.loc_ni_lock);
 
@@ -366,9 +366,9 @@
 #endif
                             supl_req->client_name.string_len                                   /* length */
                     );
-                    ALOGD("SUPL NI: client_name: %s len=%d", notif.text, supl_req->client_name.string_len);
+                    LOGD("SUPL NI: client_name: %s len=%d", notif.text, supl_req->client_name.string_len);
                 } else {
-                    ALOGD("SUPL NI: client_name not present.");
+                    LOGD("SUPL NI: client_name not present.");
                 }
 
                 // Requestor ID
@@ -382,9 +382,9 @@
 #endif
                             supl_req->requestor_id.string_len                                    /* length */
                     );
-                    ALOGD("SUPL NI: requestor_id: %s len=%d", notif.requestor_id, supl_req->requestor_id.string_len);
+                    LOGD("SUPL NI: requestor_id: %s len=%d", notif.requestor_id, supl_req->requestor_id.string_len);
                 } else {
-                    ALOGD("SUPL NI: requestor_id not present.");
+                    LOGD("SUPL NI: requestor_id not present.");
                 }
 
                 // Encoding type
@@ -402,20 +402,20 @@
                 break;
 
             default:
-                ALOGE("loc_ni_request_handler, unknown request event: %d", ni_req->event);
+                LOGE("loc_ni_request_handler, unknown request event: %d", ni_req->event);
                 return;
         }
 
         /* Log requestor ID and text for debugging */
-        ALOGI("Notification: notif_type: %d, timeout: %d, default_resp: %d", notif.ni_type, notif.timeout, notif.default_response);
-        ALOGI("              requestor_id: %s (encoding: %d)", notif.requestor_id, notif.requestor_id_encoding);
-        ALOGI("              text: %s text (encoding: %d)", notif.text, notif.text_encoding);
+        LOGI("Notification: notif_type: %d, timeout: %d, default_resp: %d", notif.ni_type, notif.timeout, notif.default_response);
+        LOGI("              requestor_id: %s (encoding: %d)", notif.requestor_id, notif.requestor_id_encoding);
+        LOGI("              text: %s text (encoding: %d)", notif.text, notif.text_encoding);
 
         /* For robustness, always sets a timeout to clear up the notification status, even though
         * the OEM layer in java does not do so.
         **/
         loc_eng_ni_data.response_time_left = 5 + (notif.timeout != 0 ? notif.timeout : LOC_NI_NO_RESPONSE_TIME);
-        ALOGI("Automatically sends 'no response' in %d seconds (to clear status)\n", loc_eng_ni_data.response_time_left);
+        LOGI("Automatically sends 'no response' in %d seconds (to clear status)\n", loc_eng_ni_data.response_time_left);
 
         pthread_mutex_unlock(&loc_eng_ni_data.loc_ni_lock);
 
@@ -440,7 +440,7 @@
 ===========================================================================*/
 int loc_ni_process_user_response(GpsUserResponseType userResponse)
 {
-    ALOGD("NI response from UI: %d", userResponse);
+    LOGD("NI response from UI: %d", userResponse);
 
     rpc_loc_ni_user_resp_e_type resp;
     switch (userResponse)
@@ -493,22 +493,22 @@
         switch (ni_req->event)
         {
             case RPC_LOC_NI_EVENT_VX_NOTIFY_VERIFY_REQ:
-                ALOGI("VX Notification");
+                LOGI("VX Notification");
                 loc_ni_request_handler("VX Notify", ni_req);
                 break;
 
             case RPC_LOC_NI_EVENT_UMTS_CP_NOTIFY_VERIFY_REQ:
-                ALOGI("UMTS CP Notification\n");
+                LOGI("UMTS CP Notification\n");
                 loc_ni_request_handler("UMTS CP Notify", ni_req);
                 break;
 
             case RPC_LOC_NI_EVENT_SUPL_NOTIFY_VERIFY_REQ:
-                ALOGI("SUPL Notification\n");
+                LOGI("SUPL Notification\n");
                 loc_ni_request_handler("SUPL Notify", ni_req);
                 break;
 
             default:
-                ALOGE("Unknown NI event: %x\n", (int) ni_req->event);
+                LOGE("Unknown NI event: %x\n", (int) ni_req->event);
                 break;
         }
     }
@@ -522,7 +522,7 @@
 ===========================================================================*/
 static void loc_ni_thread_proc(void *unused)
 {
-    ALOGI("Starting Loc NI thread...\n");
+    LOGI("Starting Loc NI thread...\n");
 
     while (1)
     {
@@ -563,7 +563,7 @@
 ===========================================================================*/
 void loc_eng_ni_init(GpsNiCallbacks *callbacks)
 {
-    ALOGD("loc_eng_ni_init: entered.");
+    LOGD("loc_eng_ni_init: entered.");
 
     if (!loc_eng_ni_data_init)
     {
@@ -600,10 +600,10 @@
 {
     if (notif_id == loc_eng_ni_data.current_notif_id && loc_eng_ni_data.notif_in_progress)
     {
-        ALOGI("loc_eng_ni_respond: send user response %d for notif %d", user_response, notif_id);
+        LOGI("loc_eng_ni_respond: send user response %d for notif %d", user_response, notif_id);
         loc_ni_process_user_response(user_response);
     } else {
-        ALOGE("loc_eng_ni_respond: notif_id %d mismatch or notification not in progress, response: %d",
+        LOGE("loc_eng_ni_respond: notif_id %d mismatch or notification not in progress, response: %d",
             notif_id, user_response);
     }
 }
diff --git a/loc_api/libloc_api/loc_eng_ni.h b/loc_api/libloc_api/loc_eng_ni.h
index 88d285a..193b9f8 100755
--- a/loc_api/libloc_api/loc_eng_ni.h
+++ b/loc_api/libloc_api/loc_eng_ni.h
@@ -1,30 +1,31 @@
-/******************************************************************************
-  @file:  loc_eng_ni.cpp
-  @brief:  module for network initiated interactions
-
-  DESCRIPTION
-     LOC_API network initiated operation support
-
-  INITIALIZATION AND SEQUENCING REQUIREMENTS
-
-  -----------------------------------------------------------------------------
-  Copyright (c) 2009 QUALCOMM Incorporated.
-  All Rights Reserved. QUALCOMM Proprietary and Confidential.
-  -----------------------------------------------------------------------------
-******************************************************************************/
-
-/*=====================================================================
-                        EDIT HISTORY FOR MODULE
-
-  This section contains comments describing changes made to the module.
-  Notice that changes are listed in reverse chronological order.
-
-when       who      what, where, why
---------   ---      -------------------------------------------------------
-07/30/09   dx       Initial version
-
-$Id:
-======================================================================*/
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
 
 #ifndef LOC_ENG_NI_H
 #define LOC_ENG_NI_H
diff --git a/loc_api/libloc_api/loc_eng_xtra.cpp b/loc_api/libloc_api/loc_eng_xtra.cpp
index c713c27..1ec3bf0 100755
--- a/loc_api/libloc_api/loc_eng_xtra.cpp
+++ b/loc_api/libloc_api/loc_eng_xtra.cpp
@@ -1,35 +1,32 @@
-/******************************************************************************
-  @file:  loc_eng.cpp
-  @brief:
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
 
-  DESCRIPTION
-    This file defines the implemenation for GPS hardware abstraction layer.
-
-  INITIALIZATION AND SEQUENCING REQUIREMENTS
-
-  -----------------------------------------------------------------------------
-Copyright (c) 2009, QUALCOMM USA, INC.
-
-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 QUALCOMM USA, INC.  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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
-  -----------------------------------------------------------------------------
-
-******************************************************************************/
-
-/*=====================================================================
-$Header: $
-$DateTime: $
-$Author: $
-======================================================================*/
 #define LOG_NDDEBUG 0
 
 #include <stdio.h>
@@ -49,8 +46,8 @@
 #include <utils/Log.h>
 
 // comment this out to enable logging
-// #undef ALOGD
-// #define ALOGD(...) {}
+// #undef LOGD
+// #define LOGD(...) {}
 
 #define LOC_XTRA_INJECT_DEFAULT_TIMEOUT (3100)
 #define XTRA_BLOCK_SIZE                 (400)
@@ -120,7 +117,7 @@
     rpc_loc_ioctl_data_u_type            ioctl_data;
     rpc_loc_predicted_orbits_data_s_type *predicted_orbits_data_ptr;
 
-    ALOGV ("qct_loc_eng_inject_xtra_data, xtra size = %d, data ptr = 0x%x\n", length, (int) data);
+    LOGV ("qct_loc_eng_inject_xtra_data, xtra size = %d, data ptr = 0x%x\n", length, (int) data);
 
     ioctl_data.disc = RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA;
 
@@ -147,8 +144,8 @@
         predicted_orbits_data_ptr->data_ptr.data_ptr_len = predicted_orbits_data_ptr->part_len;
         predicted_orbits_data_ptr->data_ptr.data_ptr_val = data + len_injected;
 
-        ALOGV ("qct_loc_eng_inject_xtra_data, inject part = %d, len = %d, len = %d\n", predicted_orbits_data_ptr->part, predicted_orbits_data_ptr->part_len, predicted_orbits_data_ptr->data_ptr.data_ptr_len);
-        ALOGV ("qct_loc_eng_inject_xtra_data, total part = %d, len = %d \n", predicted_orbits_data_ptr->part, predicted_orbits_data_ptr->part_len);
+        LOGV ("qct_loc_eng_inject_xtra_data, inject part = %d, len = %d, len = %d\n", predicted_orbits_data_ptr->part, predicted_orbits_data_ptr->part_len, predicted_orbits_data_ptr->data_ptr.data_ptr_len);
+        LOGV ("qct_loc_eng_inject_xtra_data, total part = %d, len = %d \n", predicted_orbits_data_ptr->part, predicted_orbits_data_ptr->part_len);
 
         if (part < total_parts)
         {
@@ -159,7 +156,7 @@
 
             if (rpc_ret_val != RPC_LOC_API_SUCCESS)
             {
-                ALOGE ("loc_ioctl for xtra returned %d \n", rpc_ret_val);
+                LOGE ("loc_ioctl for xtra returned %d \n", rpc_ret_val);
                 ret_val = EINVAL; // return error
                 break;
             }
@@ -176,7 +173,7 @@
         }
 
         len_injected += predicted_orbits_data_ptr->part_len;
-        ALOGV ("loc_ioctl for xtra len injected %d \n", len_injected);
+        LOGV ("loc_ioctl for xtra len injected %d \n", len_injected);
     }
 
     return ret_val;
diff --git a/loc_api/libloc_api/loc_eng_xtra.h b/loc_api/libloc_api/loc_eng_xtra.h
index b5c7945..82778ae 100755
--- a/loc_api/libloc_api/loc_eng_xtra.h
+++ b/loc_api/libloc_api/loc_eng_xtra.h
@@ -1,35 +1,31 @@
-/******************************************************************************
-  @file:  loc_eng.h
-  @brief:
-
-  DESCRIPTION
-    This file defines the data structure used by this XTRA module.
-
-  INITIALIZATION AND SEQUENCING REQUIREMENTS
-
-  -----------------------------------------------------------------------------
-Copyright (c) 2009, QUALCOMM USA, INC.
-
-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 QUALCOMM USA, INC.  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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
-  -----------------------------------------------------------------------------
-
-******************************************************************************/
-
-/*=====================================================================
-$Header: $
-$DateTime: $
-$Author: $
-======================================================================*/
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
 
 #ifndef LOC_ENG_XTRA_H
 #define LOC_ENG_XTRA_H
diff --git a/loc_api/libloc_api_50001/Android.mk b/loc_api/libloc_api_50001/Android.mk
new file mode 100755
index 0000000..0a5a0a1
--- /dev/null
+++ b/loc_api/libloc_api_50001/Android.mk
@@ -0,0 +1,131 @@
+ifneq ($(BUILD_TINY_ANDROID),true)
+#Compile this library only for builds with the latest modem image
+
+BIT_ENABLED_BOARD_PLATFORM_LIST := msm7630_fusion
+BIT_ENABLED_BOARD_PLATFORM_LIST += msm8660
+ifeq ($(call is-board-platform-in-list,$(BIT_ENABLED_BOARD_PLATFORM_LIST)),true)
+FEATURE_GNSS_BIT_API := true
+endif # is-board-platform-in-list
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libloc_adapter
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SHARED_LIBRARIES := \
+    libutils \
+    libcutils \
+    libgps.utils
+
+LOCAL_SRC_FILES += \
+    loc_eng_log.cpp \
+    LocApiAdapter.cpp
+
+LOCAL_CFLAGS += \
+     -fno-short-enums \
+     -D_ANDROID_
+
+LOCAL_C_INCLUDES:= \
+    $(TARGET_OUT_HEADERS)/gps.utils
+
+LOCAL_COPY_HEADERS_TO:= libloc_eng/
+LOCAL_COPY_HEADERS:= \
+   LocApiAdapter.h \
+   loc.h \
+   loc_eng.h \
+   loc_eng_xtra.h \
+   loc_eng_ni.h \
+   loc_eng_agps.h \
+   loc_eng_msg.h \
+   loc_eng_msg_id.h \
+   loc_eng_log.h
+
+LOCAL_PRELINK_MODULE := false
+
+include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libloc_eng
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SHARED_LIBRARIES := \
+    libutils \
+    libcutils \
+    libloc_adapter \
+    libgps.utils \
+    libdl
+
+LOCAL_SRC_FILES += \
+    loc_eng.cpp \
+    loc_eng_agps.cpp \
+    loc_eng_xtra.cpp \
+    loc_eng_ni.cpp \
+    loc_eng_log.cpp
+
+ifeq ($(FEATURE_GNSS_BIT_API), true)
+LOCAL_CFLAGS += -DFEATURE_GNSS_BIT_API
+endif # FEATURE_GNSS_BIT_API
+
+LOCAL_SRC_FILES += \
+    loc_eng_dmn_conn.cpp \
+    loc_eng_dmn_conn_handler.cpp \
+    loc_eng_dmn_conn_thread_helper.c \
+    loc_eng_dmn_conn_glue_msg.c \
+    loc_eng_dmn_conn_glue_pipe.c
+
+## Check if RPC is not unsupported
+ifneq ($(TARGET_NO_RPC),true)
+LOCAL_SHARED_LIBRARIES += libloc_api-rpc-qc
+else
+LOCAL_SHARED_LIBRARIES += libloc_api_v02
+endif #TARGET_NO_RPC
+
+LOCAL_CFLAGS += \
+     -fno-short-enums \
+     -D_ANDROID_
+
+LOCAL_C_INCLUDES:= \
+    $(TARGET_OUT_HEADERS)/gps.utils \
+    hardware/qcom/gps/loc_api/ulp/inc
+
+LOCAL_PRELINK_MODULE := false
+
+include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := gps.$(BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE)
+
+LOCAL_MODULE_TAGS := optional
+
+## Libs
+
+LOCAL_SHARED_LIBRARIES := \
+    libutils \
+    libcutils \
+    libloc_eng \
+    libgps.utils
+
+LOCAL_SRC_FILES += \
+    loc.cpp \
+    gps.c
+
+LOCAL_CFLAGS += \
+    -fno-short-enums \
+    -D_ANDROID_ \
+
+## Includes
+LOCAL_C_INCLUDES:= \
+    $(TARGET_OUT_HEADERS)/gps.utils
+
+LOCAL_PRELINK_MODULE := false
+LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
+
+include $(BUILD_SHARED_LIBRARY)
+
+endif # not BUILD_TINY_ANDROID
diff --git a/loc_api/libloc_api_50001/LocApiAdapter.cpp b/loc_api/libloc_api_50001/LocApiAdapter.cpp
new file mode 100755
index 0000000..e631642
--- /dev/null
+++ b/loc_api/libloc_api_50001/LocApiAdapter.cpp
@@ -0,0 +1,196 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
+#define LOG_TAG "LocSvc_adapter"
+
+#include <LocApiAdapter.h>
+#include "loc_eng_msg.h"
+#include "loc_log.h"
+#include "loc_eng_ni.h"
+
+static void* noProc(void* data)
+{
+    return NULL;
+}
+
+LocEng::LocEng(void* caller,
+               LOC_API_ADAPTER_EVENT_MASK_T emask,
+               gps_acquire_wakelock acqwl,
+               gps_release_wakelock relwl,
+               loc_msg_sender msgSender,
+               loc_ext_parser posParser,
+               loc_ext_parser svParser) :
+        owner(caller),
+        eventMask(emask), acquireWakelock(acqwl),
+        releaseWakeLock(relwl), sendMsge(msgSender),
+        extPosInfo(NULL == posParser ? noProc : posParser),
+        extSvInfo(NULL == svParser ? noProc : svParser)
+{
+    LOC_LOGV("LocEng constructor %p, %p", posParser, svParser);
+}
+
+LocApiAdapter::LocApiAdapter(LocEng &locEng) :
+    locEngHandle(locEng)
+{
+    LOC_LOGD("LocApiAdapter created");
+}
+
+LocApiAdapter::~LocApiAdapter()
+{
+    LOC_LOGV("LocApiAdapter deleted");
+}
+
+int LocApiAdapter::hexcode(char *hexstring, int string_size,
+                        const char *data, int data_size)
+{
+   int i;
+   for (i = 0; i < data_size; i++)
+   {
+      char ch = data[i];
+      if (i*2 + 3 <= string_size)
+      {
+         snprintf(&hexstring[i*2], 3, "%02X", ch);
+      }
+      else {
+         break;
+      }
+   }
+   return i;
+}
+
+int LocApiAdapter::decodeAddress(char *addr_string, int string_size,
+                               const char *data, int data_size)
+{
+    const char addr_prefix = 0x91;
+    int i, idxOutput = 0;
+
+    if (!data || !addr_string) { return 0; }
+
+    if (data[0] != addr_prefix)
+    {
+        LOC_LOGW("decodeAddress: address prefix is not 0x%x but 0x%x", addr_prefix, data[0]);
+        addr_string[0] = '\0';
+        return 0; // prefix not correct
+    }
+
+    for (i = 1; i < data_size; i++)
+    {
+        unsigned char ch = data[i], low = ch & 0x0F, hi = ch >> 4;
+        if (low <= 9 && idxOutput < string_size - 1) { addr_string[idxOutput++] = low + '0'; }
+        if (hi <= 9 && idxOutput < string_size - 1) { addr_string[idxOutput++] = hi + '0'; }
+    }
+
+    addr_string[idxOutput] = '\0'; // Terminates the string
+
+    return idxOutput;
+}
+
+void LocApiAdapter::reportPosition(GpsLocation &location,
+                                   void* locationExt,
+                                   enum loc_sess_status status)
+{
+    loc_eng_msg_report_position *msg(new loc_eng_msg_report_position(locEngHandle.owner,
+                                                                     location,
+                                                                     locationExt,
+                                                                     status));
+    locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
+
+void LocApiAdapter::reportSv(GpsSvStatus &svStatus, void* svExt)
+{
+    loc_eng_msg_report_sv *msg(new loc_eng_msg_report_sv(locEngHandle.owner, svStatus, svExt));
+    locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
+
+void LocApiAdapter::reportStatus(GpsStatusValue status)
+{
+    loc_eng_msg_report_status *msg(new loc_eng_msg_report_status(locEngHandle.owner, status));
+    locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
+
+void LocApiAdapter::reportNmea(const char* nmea, int length)
+{
+    loc_eng_msg_report_nmea *msg(new loc_eng_msg_report_nmea(locEngHandle.owner, nmea, length));
+    locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
+
+void LocApiAdapter::requestATL(int connHandle, AGpsType agps_type)
+{
+    loc_eng_msg_request_atl *msg(new loc_eng_msg_request_atl(locEngHandle.owner, connHandle, agps_type));
+    locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
+
+void LocApiAdapter::releaseATL(int connHandle)
+{
+    loc_eng_msg_release_atl *msg(new loc_eng_msg_release_atl(locEngHandle.owner, connHandle));
+    locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
+
+void LocApiAdapter::requestXtraData()
+{
+    LOC_LOGD("XTRA download request");
+
+    loc_eng_msg *msg(new loc_eng_msg(locEngHandle.owner, LOC_ENG_MSG_REQUEST_XTRA_DATA));
+    locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
+
+void LocApiAdapter::requestTime()
+{
+    LOC_LOGD("loc_event_cb: XTRA time download request... not supported");
+    // loc_eng_msg *msg(new loc_eng_msg(locEngHandle.owner, LOC_ENG_MSG_REQUEST_TIME));
+    // locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
+
+void LocApiAdapter::requestLocation()
+{
+    LOC_LOGD("loc_event_cb: XTRA time download request... not supported");
+    // loc_eng_msg *msg(new loc_eng_msg(locEngHandle.owner, LOC_ENG_MSG_REQUEST_POSITION));
+    // locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
+
+void LocApiAdapter::requestNiNotify(GpsNiNotification &notif, const void* data)
+{
+    notif.size = sizeof(notif);
+    notif.timeout     = LOC_NI_NO_RESPONSE_TIME;
+
+    loc_eng_msg_request_ni *msg(new loc_eng_msg_request_ni(locEngHandle.owner, notif, data));
+    locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
+
+void LocApiAdapter::handleEngineDownEvent()
+{
+    loc_eng_msg *msg(new loc_eng_msg(locEngHandle.owner, LOC_ENG_MSG_ENGINE_DOWN));
+    locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
+
+void LocApiAdapter::handleEngineUpEvent()
+{
+    loc_eng_msg *msg(new loc_eng_msg(locEngHandle.owner, LOC_ENG_MSG_ENGINE_UP));
+    locEngHandle.sendMsge(locEngHandle.owner, msg);
+}
diff --git a/loc_api/libloc_api_50001/LocApiAdapter.h b/loc_api/libloc_api_50001/LocApiAdapter.h
new file mode 100755
index 0000000..033a034
--- /dev/null
+++ b/loc_api/libloc_api_50001/LocApiAdapter.h
@@ -0,0 +1,205 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#ifndef LOC_API_ADAPTER_H
+#define LOC_API_ADAPTER_H
+
+#include <ctype.h>
+#include <hardware/gps.h>
+#include <loc.h>
+#include <log_util.h>
+
+#define MIN_POSSIBLE_FIX_INTERVAL 1000 /* msec */
+
+enum loc_api_adapter_err {
+    LOC_API_ADAPTER_ERR_SUCCESS             = 0,
+    LOC_API_ADAPTER_ERR_GENERAL_FAILURE     = 1,
+    LOC_API_ADAPTER_ERR_UNSUPPORTED         = 2,
+    LOC_API_ADAPTER_ERR_INVALID_HANDLE      = 4,
+    LOC_API_ADAPTER_ERR_INVALID_PARAMETER   = 5,
+    LOC_API_ADAPTER_ERR_ENGINE_BUSY         = 6,
+    LOC_API_ADAPTER_ERR_PHONE_OFFLINE       = 7,
+    LOC_API_ADAPTER_ERR_TIMEOUT             = 8,
+    LOC_API_ADAPTER_ERR_SERVICE_NOT_PRESENT = 9,
+
+    LOC_API_ADAPTER_ERR_ENGINE_DOWN         = 100,
+    LOC_API_ADAPTER_ERR_FAILURE,
+    LOC_API_ADAPTER_ERR_UNKNOWN
+};
+
+enum loc_api_adapter_event_index {
+    LOC_API_ADAPTER_REPORT_POSITION = 0,       // Position report comes in loc_parsed_position_s_type
+    LOC_API_ADAPTER_REPORT_SATELLITE,          // Satellite in view report
+    LOC_API_ADAPTER_REPORT_NMEA_1HZ,           // NMEA report at 1HZ rate
+    LOC_API_ADAPTER_REPORT_NMEA_POSITION,      // NMEA report at position report rate
+    LOC_API_ADAPTER_REQUEST_NI_NOTIFY_VERIFY,  // NI notification/verification request
+    LOC_API_ADAPTER_REQUEST_ASSISTANCE_DATA,   // Assistance data, eg: time, predicted orbits request
+    LOC_API_ADAPTER_REQUEST_LOCATION_SERVER,   // Request for location server
+    LOC_API_ADAPTER_REPORT_IOCTL,              // Callback report for loc_ioctl
+    LOC_API_ADAPTER_REPORT_STATUS,             // Misc status report: eg, engine state
+
+    LOC_API_ADAPTER_EVENT_MAX
+};
+
+#define LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT   (1<<LOC_API_ADAPTER_REPORT_POSITION)
+#define LOC_API_ADAPTER_BIT_SATELLITE_REPORT         (1<<LOC_API_ADAPTER_REPORT_SATELLITE)
+#define LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT          (1<<LOC_API_ADAPTER_REPORT_NMEA_1HZ)
+#define LOC_API_ADAPTER_BIT_NMEA_POSITION_REPORT     (1<<LOC_API_ADAPTER_REPORT_NMEA_POSITION)
+#define LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST (1<<LOC_API_ADAPTER_REQUEST_NI_NOTIFY_VERIFY)
+#define LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST  (1<<LOC_API_ADAPTER_REQUEST_ASSISTANCE_DATA)
+#define LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST  (1<<LOC_API_ADAPTER_REQUEST_LOCATION_SERVER)
+#define LOC_API_ADAPTER_BIT_IOCTL_REPORT             (1<<LOC_API_ADAPTER_REPORT_IOCTL)
+#define LOC_API_ADAPTER_BIT_STATUS_REPORT            (1<<LOC_API_ADAPTER_REPORT_STATUS)
+
+typedef unsigned int LOC_API_ADAPTER_EVENT_MASK_T;
+typedef void (*loc_msg_sender)(void* loc_eng_data_p, void* msgp);
+
+struct LocEng {
+    void* owner;
+    LOC_API_ADAPTER_EVENT_MASK_T eventMask;
+    const gps_acquire_wakelock acquireWakelock;
+    const gps_release_wakelock releaseWakeLock;
+    const loc_msg_sender       sendMsge;
+    const loc_ext_parser       extPosInfo;
+    const loc_ext_parser       extSvInfo;
+
+    LocEng(void* caller,
+           LOC_API_ADAPTER_EVENT_MASK_T emask,
+           gps_acquire_wakelock acqwl,
+           gps_release_wakelock relwl,
+           loc_msg_sender msgSender,
+           loc_ext_parser posParser,
+           loc_ext_parser svParser);
+};
+
+class LocApiAdapter {
+protected:
+    const LocEng locEngHandle;
+
+    LocApiAdapter(LocEng &locEng);
+
+public:
+    //LocApiAdapter(int q, reportCb_t[LOC_API_ADAPTER_EVENT_MAX] callbackTable);
+    virtual ~LocApiAdapter();
+
+    static int hexcode(char *hexstring, int string_size,
+                       const char *data, int data_size);
+    static int decodeAddress(char *addr_string, int string_size,
+                             const char *data, int data_size);
+
+    void reportPosition(GpsLocation &location,
+                        void* locationExt,
+                        enum loc_sess_status status);
+    void reportSv(GpsSvStatus &svStatus, void* svExt);
+    void reportStatus(GpsStatusValue status);
+    void reportNmea(const char* nmea, int length);
+    void reportAgpsStatus(AGpsStatus &agpsStatus);
+    void requestXtraData();
+    void requestTime();
+    void requestLocation();
+    void requestATL(int connHandle, AGpsType agps_type);
+    void releaseATL(int connHandle);
+    void requestNiNotify(GpsNiNotification &notify, const void* data);
+    void handleEngineDownEvent();
+    void handleEngineUpEvent();
+
+    // All below functions are to be defined by adapter specific modules:
+    // RPC, QMI, etc.  The default implementation is empty.
+    inline virtual enum loc_api_adapter_err
+        reinit()
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        startFix()
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        stopFix()
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        deleteAidingData(GpsAidingData f)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        enableData(int enable)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        setAPN(char* apn, int len)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        injectPosition(double latitude, double longitude, float accuracy)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        setTime(GpsUtcTime time, int64_t timeReference, int uncertainty)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        setXtraData(char* data, int length)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+#ifdef QCOM_FEATURE_IPV6
+    inline virtual enum loc_api_adapter_err
+        atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bear, AGpsType agpsType)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+#else
+    inline virtual enum loc_api_adapter_err
+        atlOpenStatus(int handle, int is_succ, char* apn, AGpsType agpsType)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+#endif
+    inline virtual enum loc_api_adapter_err
+        atlCloseStatus(int handle, int is_succ)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        setPositionMode(LocPositionMode mode, GpsPositionRecurrence recurrence,
+                        uint32_t min_interval, uint32_t preferred_accuracy,
+                        uint32_t preferred_time)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        setServer(const char* url, int len)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        setServer(unsigned int ip, int port,
+                  LocServerType type)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        informNiResponse(GpsUserResponseType userResponse, const void* passThroughData)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        setSUPLVersion(uint32_t version)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        setSensorControlConfig(int sensorUsage)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        setSensorProperties(float gyroBiasVarianceRandomWalk)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+    inline virtual enum loc_api_adapter_err
+        setSensorPerfControlConfig(int controlMode, int accelSamplesPerBatch, int accelBatchesPerSec,
+                            int gyroSamplesPerBatch, int gyroBatchesPerSec)
+    {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;}
+};
+
+LocApiAdapter* getLocApiAdapter(LocEng &locEng);
+
+
+#endif //LOC_API_RPC_ADAPTER_H
diff --git a/loc_api/libloc_api_50001/gps.c b/loc_api/libloc_api_50001/gps.c
new file mode 100755
index 0000000..c9e4999
--- /dev/null
+++ b/loc_api/libloc_api_50001/gps.c
@@ -0,0 +1,68 @@
+/* Copyright (c) 2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#include <hardware/gps.h>
+
+#include <stdlib.h>
+
+extern const GpsInterface* get_gps_interface();
+
+const GpsInterface* gps__get_gps_interface(struct gps_device_t* dev)
+{
+    return get_gps_interface();
+}
+
+static int open_gps(const struct hw_module_t* module, char const* name,
+        struct hw_device_t** device)
+{
+    struct gps_device_t *dev = (struct gps_device_t *) malloc(sizeof(struct gps_device_t));
+    memset(dev, 0, sizeof(*dev));
+
+    dev->common.tag = HARDWARE_DEVICE_TAG;
+    dev->common.version = 0;
+    dev->common.module = (struct hw_module_t*)module;
+    dev->get_gps_interface = gps__get_gps_interface;
+
+    *device = (struct hw_device_t*)dev;
+    return 0;
+}
+
+static struct hw_module_methods_t gps_module_methods = {
+    .open = open_gps
+};
+
+struct hw_module_t HAL_MODULE_INFO_SYM = {
+    .tag = HARDWARE_MODULE_TAG,
+    .module_api_version = 1,
+    .hal_api_version = 0,
+    .id = GPS_HARDWARE_MODULE_ID,
+    .name = "loc_api GPS Module",
+    .author = "Qualcomm USA, Inc.",
+    .methods = &gps_module_methods,
+};
diff --git a/loc_api/libloc_api_50001/loc.cpp b/loc_api/libloc_api_50001/loc.cpp
new file mode 100755
index 0000000..16bed3b
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc.cpp
@@ -0,0 +1,870 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
+#define LOG_TAG "LocSvc_afw"
+
+#include <hardware/gps.h>
+#include <loc_eng.h>
+#include <loc_log.h>
+
+static gps_location_callback gps_loc_cb = NULL;
+static gps_sv_status_callback gps_sv_cb = NULL;
+
+static void loc_cb(GpsLocation* location, void* locExt);
+static void sv_cb(GpsSvStatus* sv_status, void* svExt);
+
+// Function declarations for sLocEngInterface
+static int  loc_init(GpsCallbacks* callbacks);
+static int  loc_start();
+static int  loc_stop();
+static void loc_cleanup();
+static int  loc_inject_time(GpsUtcTime time, int64_t timeReference, int uncertainty);
+static int  loc_inject_location(double latitude, double longitude, float accuracy);
+static void loc_delete_aiding_data(GpsAidingData f);
+static int  loc_set_position_mode(GpsPositionMode mode, GpsPositionRecurrence recurrence,
+                                  uint32_t min_interval, uint32_t preferred_accuracy,
+                                  uint32_t preferred_time);
+static const void* loc_get_extension(const char* name);
+#ifdef QCOM_FEATURE_ULP
+static int  loc_update_criteria(UlpLocationCriteria criteria);
+#endif
+
+// Defines the GpsInterface in gps.h
+static const GpsInterface sLocEngInterface =
+{
+   sizeof(GpsInterface),
+   loc_init,
+   loc_start,
+   loc_stop,
+   loc_cleanup,
+   loc_inject_time,
+   loc_inject_location,
+   loc_delete_aiding_data,
+   loc_set_position_mode,
+   loc_get_extension
+#ifdef QCOM_FEATURE_ULP
+   ,loc_update_criteria
+#endif
+};
+
+// Function declarations for sLocEngAGpsInterface
+static void loc_agps_init(AGpsCallbacks* callbacks);
+#ifdef QCOM_FEATURE_IPV6
+static int  loc_agps_open(AGpsType agpsType,
+                          const char* apn, AGpsBearerType bearerType);
+static int  loc_agps_closed(AGpsType agpsType);
+static int  loc_agps_open_failed(AGpsType agpsType);
+#else
+static int  loc_agps_open(const char* apn);
+static int  loc_agps_closed();
+static int  loc_agps_open_failed();
+#endif
+static int  loc_agps_set_server(AGpsType type, const char *hostname, int port);
+
+static const AGpsInterface sLocEngAGpsInterface =
+{
+   sizeof(AGpsInterface),
+   loc_agps_init,
+   loc_agps_open,
+   loc_agps_closed,
+   loc_agps_open_failed,
+   loc_agps_set_server
+};
+
+static int loc_xtra_init(GpsXtraCallbacks* callbacks);
+static int loc_xtra_inject_data(char* data, int length);
+
+static const GpsXtraInterface sLocEngXTRAInterface =
+{
+    sizeof(GpsXtraInterface),
+    loc_xtra_init,
+    loc_xtra_inject_data
+};
+
+static void loc_ni_init(GpsNiCallbacks *callbacks);
+static void loc_ni_respond(int notif_id, GpsUserResponseType user_response);
+
+const GpsNiInterface sLocEngNiInterface =
+{
+   sizeof(GpsNiInterface),
+   loc_ni_init,
+   loc_ni_respond,
+};
+
+static void loc_agps_ril_init( AGpsRilCallbacks* callbacks );
+static void loc_agps_ril_set_ref_location(const AGpsRefLocation *agps_reflocation, size_t sz_struct);
+static void loc_agps_ril_set_set_id(AGpsSetIDType type, const char* setid);
+static void loc_agps_ril_ni_message(uint8_t *msg, size_t len);
+static void loc_agps_ril_update_network_state(int connected, int type, int roaming, const char* extra_info);
+static void loc_agps_ril_update_network_availability(int avaiable, const char* apn);
+
+static const AGpsRilInterface sLocEngAGpsRilInterface =
+{
+   sizeof(AGpsRilInterface),
+   loc_agps_ril_init,
+   loc_agps_ril_set_ref_location,
+   loc_agps_ril_set_set_id,
+   loc_agps_ril_ni_message,
+   loc_agps_ril_update_network_state,
+   loc_agps_ril_update_network_availability
+};
+
+#ifdef QCOM_FEATURE_ULP
+static bool loc_inject_raw_command(char* command, int length);
+
+static const InjectRawCmdInterface sLocEngInjectRawCmdInterface =
+{
+   sizeof(InjectRawCmdInterface),
+   loc_inject_raw_command
+};
+#endif
+
+static loc_eng_data_s_type loc_afw_data;
+
+/*===========================================================================
+FUNCTION    gps_get_hardware_interface
+
+DESCRIPTION
+   Returns the GPS hardware interaface based on LOC API
+   if GPS is enabled.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+const GpsInterface* gps_get_hardware_interface ()
+{
+    ENTRY_LOG_CALLFLOW();
+    const GpsInterface* ret_val;
+
+    char propBuf[PROPERTY_VALUE_MAX];
+
+    // check to see if GPS should be disabled
+    property_get("gps.disable", propBuf, "");
+    if (propBuf[0] == '1')
+    {
+        LOC_LOGD("gps_get_interface returning NULL because gps.disable=1\n");
+        ret_val = NULL;
+    } else {
+        ret_val = &sLocEngInterface;
+    }
+
+    EXIT_LOG(%p, ret_val);
+    return ret_val;
+}
+
+// for gps.c
+extern "C" const GpsInterface* get_gps_interface()
+{
+    return &sLocEngInterface;
+}
+/*===========================================================================
+FUNCTION    loc_init
+
+DESCRIPTION
+   Initialize the location engine, this include setting up global datas
+   and registers location engien with loc api service.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/Ax
+
+===========================================================================*/
+static int loc_init(GpsCallbacks* callbacks)
+{
+    ENTRY_LOG();
+    LOC_API_ADAPTER_EVENT_MASK_T event =
+        LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT |
+        LOC_API_ADAPTER_BIT_SATELLITE_REPORT |
+        LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST |
+        LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST |
+        LOC_API_ADAPTER_BIT_IOCTL_REPORT |
+        LOC_API_ADAPTER_BIT_STATUS_REPORT |
+        LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT |
+        LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST;
+    LocCallbacks clientCallbacks = {loc_cb, /* location_cb */
+                                    callbacks->status_cb, /* status_cb */
+                                    sv_cb, /* sv_status_cb */
+                                    callbacks->nmea_cb, /* nmea_cb */
+                                    callbacks->set_capabilities_cb, /* set_capabilities_cb */
+                                    callbacks->acquire_wakelock_cb, /* acquire_wakelock_cb */
+                                    callbacks->release_wakelock_cb, /* release_wakelock_cb */
+                                    callbacks->create_thread_cb, /* create_thread_cb */
+                                    NULL, /* location_ext_parser */
+                                    NULL  /* sv_ext_parser */};
+    gps_loc_cb = callbacks->location_cb;
+    gps_sv_cb = callbacks->sv_status_cb;
+
+    int ret_val = loc_eng_init(loc_afw_data, &clientCallbacks, event);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_cleanup
+
+DESCRIPTION
+   Cleans location engine. The location client handle will be released.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_cleanup()
+{
+    ENTRY_LOG();
+    loc_eng_cleanup(loc_afw_data);
+    gps_loc_cb = NULL;
+    gps_sv_cb = NULL;
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION    loc_start
+
+DESCRIPTION
+   Starts the tracking session
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_start()
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_start(loc_afw_data);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_stop
+
+DESCRIPTION
+   Stops the tracking session
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_stop()
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_stop(loc_afw_data);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_set_position_mode
+
+DESCRIPTION
+   Sets the mode and fix frequency for the tracking session.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int  loc_set_position_mode(GpsPositionMode mode,
+                                  GpsPositionRecurrence recurrence,
+                                  uint32_t min_interval,
+                                  uint32_t preferred_accuracy,
+                                  uint32_t preferred_time)
+{
+    ENTRY_LOG();
+    LocPositionMode locMode;
+    switch (mode) {
+    case GPS_POSITION_MODE_MS_BASED:
+        locMode = LOC_POSITION_MODE_MS_BASED;
+        break;
+    case GPS_POSITION_MODE_MS_ASSISTED:
+        locMode = LOC_POSITION_MODE_MS_ASSISTED;
+        break;
+    default:
+        locMode = LOC_POSITION_MODE_STANDALONE;
+        break;
+    }
+    int ret_val = loc_eng_set_position_mode(loc_afw_data, locMode,
+                                            recurrence, min_interval,
+                                            preferred_accuracy, preferred_time);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_inject_time
+
+DESCRIPTION
+   This is used by Java native function to do time injection.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_inject_time(GpsUtcTime time, int64_t timeReference, int uncertainty)
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_inject_time(loc_afw_data, time, timeReference, uncertainty);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+
+/*===========================================================================
+FUNCTION    loc_inject_location
+
+DESCRIPTION
+   This is used by Java native function to do location injection.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0          : Successful
+   error code : Failure
+
+SIDE EFFECTS
+   N/A
+===========================================================================*/
+static int loc_inject_location(double latitude, double longitude, float accuracy)
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_inject_location(loc_afw_data, latitude, longitude, accuracy);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+
+/*===========================================================================
+FUNCTION    loc_delete_aiding_data
+
+DESCRIPTION
+   This is used by Java native function to delete the aiding data. The function
+   updates the global variable for the aiding data to be deleted. If the GPS
+   engine is off, the aiding data will be deleted. Otherwise, the actual action
+   will happen when gps engine is turned off.
+
+DEPENDENCIES
+   Assumes the aiding data type specified in GpsAidingData matches with
+   LOC API specification.
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_delete_aiding_data(GpsAidingData f)
+{
+    ENTRY_LOG();
+    loc_eng_delete_aiding_data(loc_afw_data, f);
+
+    EXIT_LOG(%s, VOID_RET);
+}
+
+#ifdef QCOM_FEATURE_ULP
+/*===========================================================================
+FUNCTION    loc_update_criteria
+
+DESCRIPTION
+   This is used to inform the ULP module of new unique criteria that are passed
+   in by the applications
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_update_criteria(UlpLocationCriteria criteria)
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_update_criteria(loc_afw_data, criteria);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+#endif
+
+/*===========================================================================
+FUNCTION    loc_get_extension
+
+DESCRIPTION
+   Get the gps extension to support XTRA.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   The GPS extension interface.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static const void* loc_get_extension(const char* name)
+{
+    ENTRY_LOG();
+    const void* ret_val = NULL;
+
+   if (strcmp(name, GPS_XTRA_INTERFACE) == 0)
+   {
+      ret_val = &sLocEngXTRAInterface;
+   }
+
+   else if (strcmp(name, AGPS_INTERFACE) == 0)
+   {
+      ret_val = &sLocEngAGpsInterface;
+   }
+
+   else if (strcmp(name, GPS_NI_INTERFACE) == 0)
+   {
+      ret_val = &sLocEngNiInterface;
+   }
+
+   else if (strcmp(name, AGPS_RIL_INTERFACE) == 0)
+   {
+      ret_val = &sLocEngAGpsRilInterface;
+   }
+#ifdef QCOM_FEATURE_ULP
+   else if (strcmp(name, ULP_RAW_CMD_INTERFACE) == 0)
+   {
+      ret_val = &sLocEngInjectRawCmdInterface;
+   }
+#endif
+   else
+   {
+      LOC_LOGE ("get_extension: Invalid interface passed in\n");
+   }
+
+    EXIT_LOG(%p, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_agps_init
+
+DESCRIPTION
+   Initialize the AGps interface.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_agps_init(AGpsCallbacks* callbacks)
+{
+    ENTRY_LOG();
+    loc_eng_agps_init(loc_afw_data, callbacks);
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION    loc_agps_open
+
+DESCRIPTION
+   This function is called when on-demand data connection opening is successful.
+It should inform ARM 9 about the data open result.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+#ifdef QCOM_FEATURE_IPV6
+static int loc_agps_open(AGpsType agpsType,
+                         const char* apn, AGpsBearerType bearerType)
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_agps_open(loc_afw_data, agpsType, apn, bearerType);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+#else
+static int loc_agps_open(const char* apn)
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_agps_open(loc_afw_data, apn);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+#endif
+
+/*===========================================================================
+FUNCTION    loc_agps_closed
+
+DESCRIPTION
+   This function is called when on-demand data connection closing is done.
+It should inform ARM 9 about the data close result.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+#ifdef QCOM_FEATURE_IPV6
+static int loc_agps_closed(AGpsType agpsType)
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_agps_closed(loc_afw_data, agpsType);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+#else
+static int loc_agps_closed()
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_agps_closed(loc_afw_data);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+#endif
+
+/*===========================================================================
+FUNCTION    loc_agps_open_failed
+
+DESCRIPTION
+   This function is called when on-demand data connection opening has failed.
+It should inform ARM 9 about the data open result.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+#ifdef QCOM_FEATURE_IPV6
+int loc_agps_open_failed(AGpsType agpsType)
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_agps_open_failed(loc_afw_data, agpsType);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+#else
+int loc_agps_open_failed()
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_agps_open_failed(loc_afw_data);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+#endif
+
+/*===========================================================================
+FUNCTION    loc_agps_set_server
+
+DESCRIPTION
+   If loc_eng_set_server is called before loc_eng_init, it doesn't work. This
+   proxy buffers server settings and calls loc_eng_set_server when the client is
+   open.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_agps_set_server(AGpsType type, const char* hostname, int port)
+{
+    ENTRY_LOG();
+    LocServerType serverType;
+    switch (type) {
+    case AGPS_TYPE_SUPL:
+        serverType = LOC_AGPS_SUPL_SERVER;
+        break;
+    case AGPS_TYPE_C2K:
+        serverType = LOC_AGPS_CDMA_PDE_SERVER;
+        break;
+    }
+    int ret_val = loc_eng_set_server_proxy(loc_afw_data, serverType, hostname, port);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_xtra_init
+
+DESCRIPTION
+   Initialize XTRA module.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_xtra_init(GpsXtraCallbacks* callbacks)
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_xtra_init(loc_afw_data, callbacks);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+
+/*===========================================================================
+FUNCTION    loc_xtra_inject_data
+
+DESCRIPTION
+   Initialize XTRA module.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_xtra_inject_data(char* data, int length)
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_xtra_inject_data(loc_afw_data, data, length);
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_ni_init
+
+DESCRIPTION
+   This function initializes the NI interface
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_ni_init(GpsNiCallbacks *callbacks)
+{
+    ENTRY_LOG();
+    loc_eng_ni_init(loc_afw_data, callbacks);
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION    loc_ni_respond
+
+DESCRIPTION
+   This function sends an NI respond to the modem processor
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_ni_respond(int notif_id, GpsUserResponseType user_response)
+{
+    ENTRY_LOG();
+    loc_eng_ni_respond(loc_afw_data, notif_id, user_response);
+    EXIT_LOG(%s, VOID_RET);
+}
+
+// Below stub functions are members of sLocEngAGpsRilInterface
+static void loc_agps_ril_init( AGpsRilCallbacks* callbacks ) {}
+static void loc_agps_ril_set_ref_location(const AGpsRefLocation *agps_reflocation, size_t sz_struct) {}
+static void loc_agps_ril_set_set_id(AGpsSetIDType type, const char* setid) {}
+static void loc_agps_ril_ni_message(uint8_t *msg, size_t len) {}
+static void loc_agps_ril_update_network_state(int connected, int type, int roaming, const char* extra_info) {}
+
+/*===========================================================================
+FUNCTION    loc_agps_ril_update_network_availability
+
+DESCRIPTION
+   Sets data call allow vs disallow flag to modem
+   This is the only member of sLocEngAGpsRilInterface implemented.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_agps_ril_update_network_availability(int available, const char* apn)
+{
+    ENTRY_LOG();
+    loc_eng_agps_ril_update_network_availability(loc_afw_data, available, apn);
+    EXIT_LOG(%s, VOID_RET);
+}
+
+#ifdef QCOM_FEATURE_ULP
+/*===========================================================================
+FUNCTION    loc_inject_raw_command
+
+DESCRIPTION
+   This is used to send special test modem commands from the applications
+   down into the HAL
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static bool loc_inject_raw_command(char* command, int length)
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_inject_raw_command(loc_afw_data, command, length);
+    EXIT_LOG(%s, loc_logger_boolStr[ret_val!=0]);
+    return ret_val;
+}
+#endif
+
+
+static void loc_cb(GpsLocation* location, void* locExt)
+{
+    ENTRY_LOG();
+    if (NULL != gps_loc_cb && NULL != location) {
+#ifdef QCOM_FEATURE_ULP
+        CALLBACK_LOG_CALLFLOW("location_cb - from", %d, location->position_source);
+#else
+        CALLBACK_LOG_CALLFLOW("location_cb - at", %llu, location->timestamp);
+#endif
+        gps_loc_cb(location);
+    }
+    EXIT_LOG(%s, VOID_RET);
+}
+
+static void sv_cb(GpsSvStatus* sv_status, void* svExt)
+{
+    ENTRY_LOG();
+    if (NULL != gps_sv_cb) {
+        CALLBACK_LOG_CALLFLOW("sv_status_cb -", %d, sv_status->num_svs);
+        gps_sv_cb(sv_status);
+    }
+    EXIT_LOG(%s, VOID_RET);
+}
diff --git a/loc_api/libloc_api_50001/loc.h b/loc_api/libloc_api_50001/loc.h
new file mode 100755
index 0000000..bf94237
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc.h
@@ -0,0 +1,86 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef __LOC_H__
+#define __LOC_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <ctype.h>
+#include <cutils/properties.h>
+#include <hardware/gps.h>
+
+typedef enum loc_server_type {
+    LOC_AGPS_CDMA_PDE_SERVER,
+    LOC_AGPS_CUSTOM_PDE_SERVER,
+    LOC_AGPS_MPC_SERVER,
+    LOC_AGPS_SUPL_SERVER
+} LocServerType;
+
+typedef enum loc_position_mode_type {
+    LOC_POSITION_MODE_STANDALONE,
+    LOC_POSITION_MODE_MS_BASED,
+    LOC_POSITION_MODE_MS_ASSISTED,
+    LOC_POSITION_MODE_RESERVED_1,
+    LOC_POSITION_MODE_RESERVED_2,
+    LOC_POSITION_MODE_RESERVED_3,
+    LOC_POSITION_MODE_RESERVED_4
+} LocPositionMode;
+
+typedef void (*loc_location_cb_ext) (GpsLocation* location, void* locExt);
+typedef void (*loc_sv_status_cb_ext) (GpsSvStatus* sv_status, void* svExt);
+typedef void* (*loc_ext_parser)(void* data);
+
+typedef struct {
+    loc_location_cb_ext location_cb;
+    gps_status_callback status_cb;
+    loc_sv_status_cb_ext sv_status_cb;
+    gps_nmea_callback nmea_cb;
+    gps_set_capabilities set_capabilities_cb;
+    gps_acquire_wakelock acquire_wakelock_cb;
+    gps_release_wakelock release_wakelock_cb;
+    gps_create_thread create_thread_cb;
+    loc_ext_parser location_ext_parser;
+    loc_ext_parser sv_ext_parser;
+} LocCallbacks;
+
+enum loc_sess_status {
+    LOC_SESS_SUCCESS,
+    LOC_SESS_INTERMEDIATE,
+    LOC_SESS_FAILURE
+};
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif //__LOC_H__
diff --git a/loc_api/libloc_api_50001/loc_eng.cpp b/loc_api/libloc_api_50001/loc_eng.cpp
new file mode 100755
index 0000000..4d032dc
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng.cpp
@@ -0,0 +1,1838 @@
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
+#define LOG_TAG "LocSvc_eng"
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <math.h>
+#include <pthread.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>         /* struct sockaddr_in */
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <netdb.h>
+#include <time.h>
+#include <dlfcn.h>
+
+#include "LocApiAdapter.h"
+
+#include <cutils/sched_policy.h>
+#include <utils/SystemClock.h>
+#include <utils/Log.h>
+#include <string.h>
+
+#include <loc_eng.h>
+#include <loc_eng_ni.h>
+#include <loc_eng_dmn_conn.h>
+#include <loc_eng_dmn_conn_handler.h>
+#include <loc_eng_msg.h>
+#include <loc_eng_msg_id.h>
+#include <msg_q.h>
+
+#include "ulp.h"
+
+#include "log_util.h"
+#include "loc_eng_log.h"
+
+#define SUCCESS TRUE
+#define FAILURE FALSE
+
+
+static void loc_eng_deferred_action_thread(void* context);
+static void* loc_eng_create_msg_q();
+static void loc_eng_free_msg(void* msg);
+
+struct LocEngContext {
+    // Data variables used by deferred action thread
+    const void* deferred_q;
+    const pthread_t deferred_action_thread;
+    static LocEngContext* get(gps_create_thread threadCreator);
+    void drop();
+    static pthread_mutex_t lock;
+    static pthread_cond_t cond;
+private:
+    int counter;
+    static LocEngContext *me;
+    LocEngContext(gps_create_thread threadCreator);
+};
+
+pthread_mutex_t LocEngContext::lock = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t LocEngContext::cond = PTHREAD_COND_INITIALIZER;
+LocEngContext* LocEngContext::me = NULL;
+
+LocEngContext::LocEngContext(gps_create_thread threadCreator) :
+    deferred_q((const void*)loc_eng_create_msg_q()),
+    deferred_action_thread(threadCreator("loc_eng",loc_eng_deferred_action_thread, this)),
+    counter(0)
+{
+    LOC_LOGV("LocEngContext %d : %d pthread_id %ld\n",
+             getpid(), gettid(),
+             deferred_action_thread);
+}
+
+LocEngContext* LocEngContext::get(gps_create_thread threadCreator)
+{
+    pthread_mutex_lock(&lock);
+    // gonna need mutex protection here...
+    if (NULL == me) {
+        // gps.conf is not part of the context class. But we only want to parse the conf
+        // file once. This is the only good place to ensure that.
+        // In fact one day the conf file should go into context as well.
+        loc_read_gps_conf();
+
+        me = new LocEngContext(threadCreator);
+    }
+    me->counter++;
+
+    pthread_mutex_unlock(&lock);
+    return me;
+}
+
+void LocEngContext::drop()
+{
+    if (deferred_action_thread != pthread_self()) {
+        pthread_mutex_lock(&lock);
+        counter--;
+        if (counter == 0) {
+            loc_eng_msg *msg(new loc_eng_msg(this, LOC_ENG_MSG_QUIT));
+            msg_q_snd((void*)deferred_q, msg, loc_eng_free_msg);
+
+            // I am not sure if this is going to be hazardous. The calling thread
+            // might be blocked for a while, if the q is loaded.  I am wondering
+            // if we should just dump all the msgs in the q upon QUIT.
+            pthread_cond_wait(&cond, &lock);
+
+            msg_q_destroy((void**)&deferred_q);
+            delete me;
+            me = NULL;
+        }
+        pthread_mutex_unlock(&lock);
+    } else {
+        LOC_LOGE("The HAL thread cannot free itself");
+    }
+}
+
+// 2nd half of init(), singled out for
+// modem restart to use.
+static int loc_eng_reinit(loc_eng_data_s_type &loc_eng_data);
+static void loc_eng_agps_reinit(loc_eng_data_s_type &loc_eng_data);
+
+static int loc_eng_set_server(loc_eng_data_s_type &loc_eng_data,
+                              LocServerType type, const char *hostname, int port);
+// Internal functions
+static void loc_inform_gps_status(loc_eng_data_s_type &loc_eng_data,
+                                  GpsStatusValue status);
+static void loc_eng_report_status(loc_eng_data_s_type &loc_eng_data,
+                                  GpsStatusValue status);
+static void loc_eng_process_conn_request(loc_eng_data_s_type &loc_eng_data,
+                                         int connHandle, AGpsType agps_type);
+static void loc_eng_agps_close_status(loc_eng_data_s_type &loc_eng_data, int is_succ);
+static void loc_eng_handle_engine_down(loc_eng_data_s_type &loc_eng_data) ;
+static void loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data) ;
+
+static char extra_data[100];
+
+#ifdef QCOM_FEATURE_ULP
+// ULP integration
+static const ulpInterface* locEngUlpInf = NULL;
+static int loc_eng_ulp_init(void* handle) ;
+#endif
+
+/*********************************************************************
+ * Initialization checking macros
+ *********************************************************************/
+#define STATE_CHECK(ctx, x, ret) \
+    if (!(ctx))                  \
+  {                              \
+      /* Not intialized, abort */\
+      LOC_LOGE("%s: log_eng state error: %s", __func__, x); \
+      EXIT_LOG(%s, x);                                            \
+      ret;                                                        \
+  }
+#define INIT_CHECK(ctx, ret) STATE_CHECK(ctx, "instance not initialized", ret)
+
+void loc_eng_msg_sender(void* loc_eng_data_p, void* msg)
+{
+    LocEngContext* loc_eng_context = (LocEngContext*)((loc_eng_data_s_type*)loc_eng_data_p)->context;
+    msg_q_snd((void*)loc_eng_context->deferred_q, msg, loc_eng_free_msg);
+}
+
+static void* loc_eng_create_msg_q()
+{
+    void* q = NULL;
+    if (eMSG_Q_SUCCESS != msg_q_init(&q)) {
+        LOC_LOGE("loc_eng_create_msg_q Q init failed.");
+        q = NULL;
+    }
+    return q;
+}
+
+static void loc_eng_free_msg(void* msg)
+{
+    delete (loc_eng_msg*)msg;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_init
+
+DESCRIPTION
+   Initialize the location engine, this include setting up global datas
+   and registers location engien with loc api service.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks,
+                 LOC_API_ADAPTER_EVENT_MASK_T event)
+{
+    ENTRY_LOG_CALLFLOW();
+
+    if (NULL == callbacks || 0 == event) {
+        LOC_LOGE("loc_eng_init: bad parameters cb %p eMask %d", callbacks, event);
+        EXIT_LOG(%d, 0);
+        return 0;
+    }
+
+    STATE_CHECK((NULL == loc_eng_data.context),
+                "instance already initialized", return 0);
+
+    memset(&loc_eng_data, 0, sizeof (loc_eng_data));
+
+    // Create context (msg q + thread) (if not yet created)
+    // This will also parse gps.conf, if not done.
+    loc_eng_data.context = (void*)LocEngContext::get(callbacks->create_thread_cb);
+    if (NULL != callbacks->set_capabilities_cb) {
+        callbacks->set_capabilities_cb(gps_conf.CAPABILITIES);
+    }
+
+    // Save callbacks
+    loc_eng_data.location_cb  = callbacks->location_cb;
+    loc_eng_data.sv_status_cb = callbacks->sv_status_cb;
+    loc_eng_data.status_cb    = callbacks->status_cb;
+    loc_eng_data.nmea_cb      = callbacks->nmea_cb;
+    loc_eng_data.acquire_wakelock_cb = callbacks->acquire_wakelock_cb;
+    loc_eng_data.release_wakelock_cb = callbacks->release_wakelock_cb;
+
+    loc_eng_data.intermediateFix = gps_conf.INTERMEDIATE_POS;
+
+    // initial states taken care of by the memset above
+    // loc_eng_data.engine_status -- GPS_STATUS_NONE;
+    // loc_eng_data.fix_session_status -- GPS_STATUS_NONE;
+    // loc_eng_data.mute_session_state -- LOC_MUTE_SESS_NONE;
+
+#ifdef QCOM_FEATURE_ULP
+    loc_eng_ulp_init(&loc_eng_data);
+#endif
+
+    LocEng locEngHandle(&loc_eng_data, event, loc_eng_data.acquire_wakelock_cb,
+                        loc_eng_data.release_wakelock_cb, loc_eng_msg_sender,
+                        callbacks->location_ext_parser, callbacks->sv_ext_parser);
+    loc_eng_data.client_handle = getLocApiAdapter(locEngHandle);
+
+    int ret_val =-1;
+    if (NULL == loc_eng_data.client_handle) {
+        // drop the context and declare failure
+        ((LocEngContext*)(loc_eng_data.context))->drop();
+        loc_eng_data.context = NULL;
+    } else {
+        LOC_LOGD("loc_eng_init created client, id = %p\n", loc_eng_data.client_handle);
+
+        // call reinit to send initialization messages
+       int tries = 30;
+       while (tries > 0 &&
+              LOC_API_ADAPTER_ERR_SUCCESS != (ret_val = loc_eng_reinit(loc_eng_data))) {
+           tries--;
+           LOC_LOGD("loc_eng_init client open failed, %d more tries", tries);
+           sleep(1);
+       }
+    }
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+static int loc_eng_reinit(loc_eng_data_s_type &loc_eng_data)
+{
+    ENTRY_LOG();
+    int ret_val = loc_eng_data.client_handle->reinit();
+
+    if (LOC_API_ADAPTER_ERR_SUCCESS == ret_val) {
+        LOC_LOGD("loc_eng_reinit reinit() successful");
+
+        loc_eng_msg_suple_version *supl_msg(new loc_eng_msg_suple_version(&loc_eng_data,
+                                                                          gps_conf.SUPL_VER));
+        msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+                  supl_msg, loc_eng_free_msg);
+
+        loc_eng_msg_sensor_control_config *sensor_control_config_msg(
+            new loc_eng_msg_sensor_control_config(&loc_eng_data, gps_conf.SENSOR_USAGE));
+        msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+                  sensor_control_config_msg, loc_eng_free_msg);
+
+        /* Make sure this is specified by the user in the gps.conf file */
+        if(gps_conf.GYRO_BIAS_RANDOM_WALK_VALID)
+        {
+            loc_eng_msg_sensor_properties *sensor_properties_msg(
+                new loc_eng_msg_sensor_properties(&loc_eng_data, gps_conf.GYRO_BIAS_RANDOM_WALK));
+            msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+                      sensor_properties_msg, loc_eng_free_msg);
+        }
+
+        loc_eng_msg_sensor_perf_control_config *sensor_perf_control_conf_msg(
+            new loc_eng_msg_sensor_perf_control_config(&loc_eng_data,
+                                                       gps_conf.SENSOR_CONTROL_MODE,
+                                                       gps_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH,
+                                                       gps_conf.SENSOR_ACCEL_BATCHES_PER_SEC,
+                                                       gps_conf.SENSOR_GYRO_SAMPLES_PER_BATCH,
+                                                       gps_conf.SENSOR_GYRO_BATCHES_PER_SEC));
+        msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+                  sensor_perf_control_conf_msg, loc_eng_free_msg);
+    }
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_cleanup
+
+DESCRIPTION
+   Cleans location engine. The location client handle will be released.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context, return);
+
+    // XTRA has no state, so we are fine with it.
+
+    // we need to check and clear NI
+
+    // we need to check and clear ATL
+    if (NULL != loc_eng_data.agnss_nif) {
+        delete loc_eng_data.agnss_nif;
+        loc_eng_data.agnss_nif = NULL;
+    }
+    if (NULL != loc_eng_data.internet_nif) {
+        delete loc_eng_data.internet_nif;
+        loc_eng_data.internet_nif = NULL;
+    }
+
+    if (loc_eng_data.navigating)
+    {
+        LOC_LOGD("loc_eng_cleanup: fix not stopped. stop it now.");
+        loc_eng_stop(loc_eng_data);
+    }
+
+#if 0 // can't afford to actually clean up, for many reason.
+
+    ((LocEngContext*)(loc_eng_data.context))->drop();
+    loc_eng_data.context = NULL;
+
+    // De-initialize ulp
+    if (locEngUlpInf != NULL)
+    {
+        locEngUlpInf->destroy ();
+        locEngUlpInf = NULL;
+    }
+
+    if (loc_eng_data.client_handle != NULL)
+    {
+        LOC_LOGD("loc_eng_init: client opened. close it now.");
+        delete loc_eng_data.client_handle;
+        loc_eng_data.client_handle = NULL;
+    }
+
+#ifdef FEATURE_GNSS_BIT_API
+    {
+        char baseband[PROPERTY_VALUE_MAX];
+        property_get("ro.baseband", baseband, "msm");
+        if ((strcmp(baseband,"svlte2a") == 0))
+        {
+            loc_eng_dmn_conn_loc_api_server_unblock();
+            loc_eng_dmn_conn_loc_api_server_join();
+        }
+    }
+#endif /* FEATURE_GNSS_BIT_API */
+
+#endif
+
+    EXIT_LOG(%s, VOID_RET);
+}
+
+
+/*===========================================================================
+FUNCTION    loc_eng_start
+
+DESCRIPTION
+   Starts the tracking session
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_start(loc_eng_data_s_type &loc_eng_data)
+{
+   ENTRY_LOG_CALLFLOW();
+   INIT_CHECK(loc_eng_data.context, return -1);
+
+   loc_eng_msg *msg(new loc_eng_msg(&loc_eng_data, LOC_ENG_MSG_START_FIX));
+   msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+             msg, loc_eng_free_msg);
+
+   EXIT_LOG(%d, 0);
+   return 0;
+}
+
+static int loc_eng_start_handler(loc_eng_data_s_type &loc_eng_data)
+{
+   ENTRY_LOG();
+   int ret_val = LOC_API_ADAPTER_ERR_SUCCESS;
+
+   if (!loc_eng_data.navigating) {
+#ifdef QCOM_FEATURE_ULP
+       if (NULL == locEngUlpInf ||
+           locEngUlpInf->start_fix () == 1) {
+           ret_val = loc_eng_data.client_handle->startFix();
+       }
+#else
+       ret_val = loc_eng_data.client_handle->startFix();
+#endif
+
+       if (ret_val == LOC_API_ADAPTER_ERR_SUCCESS ||
+           ret_val == LOC_API_ADAPTER_ERR_ENGINE_DOWN)
+       {
+           loc_eng_data.navigating = TRUE;
+       }
+   }
+
+   EXIT_LOG(%d, ret_val);
+   return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_stop
+
+DESCRIPTION
+   Stops the tracking session
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_stop(loc_eng_data_s_type &loc_eng_data)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context, return -1);
+
+    loc_eng_msg *msg(new loc_eng_msg(&loc_eng_data, LOC_ENG_MSG_STOP_FIX));
+    msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+              msg, loc_eng_free_msg);
+
+    EXIT_LOG(%d, 0);
+    return 0;
+}
+
+static int loc_eng_stop_handler(loc_eng_data_s_type &loc_eng_data)
+{
+   ENTRY_LOG();
+   int ret_val = LOC_API_ADAPTER_ERR_SUCCESS;
+
+   if (loc_eng_data.navigating) {
+#ifdef QCOM_FEATURE_ULP
+       // Stops the ULP
+       if (locEngUlpInf != NULL)
+       {
+           locEngUlpInf->stop_fix ();
+       }
+#endif
+
+       ret_val = loc_eng_data.client_handle->stopFix();
+       if (ret_val == LOC_API_ADAPTER_ERR_SUCCESS &&
+           loc_eng_data.fix_session_status != GPS_STATUS_SESSION_BEGIN)
+       {
+           loc_inform_gps_status(loc_eng_data, GPS_STATUS_SESSION_END);
+       }
+
+       loc_eng_data.navigating = FALSE;
+   }
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_mute_one_session
+
+DESCRIPTION
+   Mutes one session
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: Success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_eng_mute_one_session(loc_eng_data_s_type &loc_eng_data)
+{
+    ENTRY_LOG();
+    loc_eng_data.mute_session_state = LOC_MUTE_SESS_WAIT;
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_set_position_mode
+
+DESCRIPTION
+   Sets the mode and fix frequency for the tracking session.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_set_position_mode(loc_eng_data_s_type &loc_eng_data,
+                              LocPositionMode mode,
+                              GpsPositionRecurrence recurrence,
+                              uint32_t min_interval,
+                              uint32_t preferred_accuracy,
+                              uint32_t preferred_time)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context, return -1);
+    loc_eng_msg_position_mode *msg(
+        new loc_eng_msg_position_mode(&loc_eng_data, mode,
+                                      recurrence, min_interval,
+                                      preferred_accuracy, preferred_time));
+    msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+              msg, loc_eng_free_msg);
+
+    EXIT_LOG(%d, 0);
+    return 0;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_inject_time
+
+DESCRIPTION
+   This is used by Java native function to do time injection.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_inject_time(loc_eng_data_s_type &loc_eng_data, GpsUtcTime time,
+                        int64_t timeReference, int uncertainty)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context, return -1);
+    loc_eng_msg_set_time *msg(
+        new loc_eng_msg_set_time(&loc_eng_data,
+                                 time,
+                                 timeReference,
+                                 uncertainty));
+    msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+              msg, loc_eng_free_msg);
+
+    EXIT_LOG(%d, 0);
+    return 0;
+}
+
+
+/*===========================================================================
+FUNCTION    loc_eng_inject_location
+
+DESCRIPTION
+   This is used by Java native function to do location injection.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0          : Successful
+   error code : Failure
+
+SIDE EFFECTS
+   N/A
+===========================================================================*/
+int loc_eng_inject_location(loc_eng_data_s_type &loc_eng_data, double latitude,
+                            double longitude, float accuracy)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context, return -1);
+    loc_eng_msg_inject_location *msg(
+        new loc_eng_msg_inject_location(&loc_eng_data,
+                                        latitude,
+                                        longitude,
+                                        accuracy));
+    msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+              msg, loc_eng_free_msg);
+
+    EXIT_LOG(%d, 0);
+    return 0;
+}
+
+
+/*===========================================================================
+FUNCTION    loc_eng_delete_aiding_data
+
+DESCRIPTION
+   This is used by Java native function to delete the aiding data. The function
+   updates the global variable for the aiding data to be deleted. If the GPS
+   engine is off, the aiding data will be deleted. Otherwise, the actual action
+   will happen when gps engine is turned off.
+
+DEPENDENCIES
+   Assumes the aiding data type specified in GpsAidingData matches with
+   LOC API specification.
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data, GpsAidingData f)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context, return);
+
+    loc_eng_msg_delete_aiding_data *msg(
+        new loc_eng_msg_delete_aiding_data(&loc_eng_data,
+                                           f));
+    msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+              msg, loc_eng_free_msg);
+
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION    loc_inform_gps_state
+
+DESCRIPTION
+   Informs the GPS Provider about the GPS status
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_inform_gps_status(loc_eng_data_s_type &loc_eng_data, GpsStatusValue status)
+{
+    ENTRY_LOG();
+
+    static GpsStatusValue last_status = GPS_STATUS_NONE;
+
+    GpsStatus gs = { sizeof(gs),status };
+
+
+    if (loc_eng_data.status_cb)
+    {
+        CALLBACK_LOG_CALLFLOW("status_cb", %s, loc_get_gps_status_name(gs.status));
+        loc_eng_data.status_cb(&gs);
+
+        // Restore session begin if needed
+        if (status == GPS_STATUS_ENGINE_ON && last_status == GPS_STATUS_SESSION_BEGIN)
+        {
+            GpsStatus gs_sess_begin = { sizeof(gs_sess_begin),GPS_STATUS_SESSION_BEGIN };
+            CALLBACK_LOG_CALLFLOW("status_cb", %s, loc_get_gps_status_name(gs_sess_begin.status));
+            loc_eng_data.status_cb(&gs_sess_begin);
+        }
+    }
+
+    last_status = status;
+
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_agps_reinit
+
+DESCRIPTION
+   2nd half of loc_eng_agps_init(), singled out for modem restart to use.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_eng_agps_reinit(loc_eng_data_s_type &loc_eng_data)
+{
+    ENTRY_LOG();
+
+    // Set server addresses which came before init
+    if (loc_eng_data.supl_host_set)
+    {
+        loc_eng_set_server(loc_eng_data, LOC_AGPS_SUPL_SERVER,
+                           loc_eng_data.supl_host_buf,
+                           loc_eng_data.supl_port_buf);
+    }
+
+    if (loc_eng_data.c2k_host_set)
+    {
+        loc_eng_set_server(loc_eng_data, LOC_AGPS_CDMA_PDE_SERVER,
+                           loc_eng_data.c2k_host_buf,
+                           loc_eng_data.c2k_port_buf);
+    }
+    EXIT_LOG(%p, VOID_RET);
+}
+/*===========================================================================
+FUNCTION    loc_eng_agps_init
+
+DESCRIPTION
+   Initialize the AGps interface.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data, AGpsCallbacks* callbacks)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context, return);
+    STATE_CHECK((NULL == loc_eng_data.agps_status_cb),
+                "agps instance already initialized",
+                return);
+    loc_eng_data.agps_status_cb = callbacks->status_cb;
+
+    loc_eng_data.agnss_nif = new AgpsStateMachine(loc_eng_data.agps_status_cb,
+                                                  AGPS_TYPE_SUPL);
+#ifdef QCOM_FEATURE_IPV6
+    loc_eng_data.internet_nif = new AgpsStateMachine(loc_eng_data.agps_status_cb,
+                                                     AGPS_TYPE_WWAN_ANY);
+#else
+    loc_eng_data.internet_nif = new AgpsStateMachine(loc_eng_data.agps_status_cb,
+                                                     AGPS_TYPE_SUPL);
+#endif
+
+#ifdef FEATURE_GNSS_BIT_API
+    {
+        char baseband[PROPERTY_VALUE_MAX];
+        property_get("ro.baseband", baseband, "msm");
+        if ((strcmp(baseband,"svlte2a") == 0))
+        {
+            loc_eng_dmn_conn_loc_api_server_launch(callbacks->create_thread_cb,
+                                                   NULL, NULL, &loc_eng_data);
+        }
+    }
+#endif /* FEATURE_GNSS_BIT_API */
+
+    loc_eng_agps_reinit(loc_eng_data);
+    EXIT_LOG(%p, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_agps_open
+
+DESCRIPTION
+   This function is called when on-demand data connection opening is successful.
+It should inform engine about the data open result.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+#ifdef QCOM_FEATURE_IPV6
+int loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsType agpsType,
+                     const char* apn, AGpsBearerType bearerType)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context && loc_eng_data.agps_status_cb,
+               return -1);
+
+    if (apn == NULL)
+    {
+        LOC_LOGE("APN Name NULL\n");
+        return 0;
+    }
+
+    LOC_LOGD("loc_eng_agps_open APN name = [%s]", apn);
+
+    int apn_len = smaller_of(strlen (apn), MAX_APN_LEN);
+    loc_eng_msg_atl_open_success *msg(
+        new loc_eng_msg_atl_open_success(&loc_eng_data, agpsType, apn,
+                                        apn_len, bearerType));
+    msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+              msg, loc_eng_free_msg);
+
+    EXIT_LOG(%d, 0);
+    return 0;
+}
+#else
+int loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data,
+                     const char* apn)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context && loc_eng_data.agps_status_cb,
+               return -1);
+
+    if (apn == NULL)
+    {
+        LOC_LOGE("APN Name NULL\n");
+        return 0;
+    }
+
+    LOC_LOGD("loc_eng_agps_open APN name = [%s]", apn);
+
+    int apn_len = smaller_of(strlen (apn), MAX_APN_LEN);
+    loc_eng_msg_atl_open_success *msg(
+        new loc_eng_msg_atl_open_success(&loc_eng_data, apn,
+                                        apn_len));
+    msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+              msg, loc_eng_free_msg);
+
+    EXIT_LOG(%d, 0);
+    return 0;
+}
+#endif
+
+/*===========================================================================
+FUNCTION    loc_eng_agps_closed
+
+DESCRIPTION
+   This function is called when on-demand data connection closing is done.
+It should inform engine about the data close result.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+#ifdef QCOM_FEATURE_IPV6
+int loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsType agpsType)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context && loc_eng_data.agps_status_cb,
+               return -1);
+
+    loc_eng_msg_atl_closed *msg(new loc_eng_msg_atl_closed(&loc_eng_data, agpsType));
+    msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+              msg, loc_eng_free_msg);
+
+    EXIT_LOG(%d, 0);
+    return 0;
+}
+#else
+int loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context && loc_eng_data.agps_status_cb,
+               return -1);
+
+    loc_eng_msg_atl_closed *msg(new loc_eng_msg_atl_closed(&loc_eng_data));
+    msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+              msg, loc_eng_free_msg);
+
+    EXIT_LOG(%d, 0);
+    return 0;
+}
+#endif
+
+/*===========================================================================
+FUNCTION    loc_eng_agps_open_failed
+
+DESCRIPTION
+   This function is called when on-demand data connection opening has failed.
+It should inform engine about the data open result.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+#ifdef QCOM_FEATURE_IPV6
+int loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data, AGpsType agpsType)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context && loc_eng_data.agps_status_cb,
+               return -1);
+
+    loc_eng_msg_atl_open_failed *msg(new loc_eng_msg_atl_open_failed(&loc_eng_data, agpsType));
+    msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+              msg, loc_eng_free_msg);
+
+    EXIT_LOG(%d, 0);
+    return 0;
+}
+#else
+int loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context && loc_eng_data.agps_status_cb,
+               return -1);
+
+    loc_eng_msg_atl_open_failed *msg(new loc_eng_msg_atl_open_failed(&loc_eng_data));
+    msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+              msg, loc_eng_free_msg);
+
+    EXIT_LOG(%d, 0);
+    return 0;
+}
+#endif
+
+/*===========================================================================
+
+FUNCTION resolve_in_addr
+
+DESCRIPTION
+   Translates a hostname to in_addr struct
+
+DEPENDENCIES
+   n/a
+
+RETURN VALUE
+   TRUE if successful
+
+SIDE EFFECTS
+   n/a
+
+===========================================================================*/
+static boolean resolve_in_addr(const char *host_addr, struct in_addr *in_addr_ptr)
+{
+    ENTRY_LOG();
+    boolean ret_val = TRUE;
+
+    struct hostent             *hp;
+    hp = gethostbyname(host_addr);
+    if (hp != NULL) /* DNS OK */
+    {
+        memcpy(in_addr_ptr, hp->h_addr_list[0], hp->h_length);
+    }
+    else
+    {
+        /* Try IP representation */
+        if (inet_aton(host_addr, in_addr_ptr) == 0)
+        {
+            /* IP not valid */
+            LOC_LOGE("DNS query on '%s' failed\n", host_addr);
+            ret_val = FALSE;
+        }
+    }
+
+    EXIT_LOG(%s, loc_logger_boolStr[ret_val!=0]);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_set_server
+
+DESCRIPTION
+   This is used to set the default AGPS server. Server address is obtained
+   from gps.conf.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_eng_set_server(loc_eng_data_s_type &loc_eng_data,
+                              LocServerType type, const char* hostname, int port)
+{
+    ENTRY_LOG();
+    int ret = 0;
+
+    if (LOC_AGPS_SUPL_SERVER == type) {
+        char url[MAX_URL_LEN];
+        unsigned int len = snprintf(url, sizeof(url), "%s:%u", hostname, (unsigned) port);
+
+        if (sizeof(url) > len) {
+            loc_eng_msg_set_server_url *msg(new loc_eng_msg_set_server_url(&loc_eng_data,
+                                                                           url, len));
+            msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+                      msg, loc_eng_free_msg);
+        }
+    } else if (LOC_AGPS_CDMA_PDE_SERVER == type ||
+               LOC_AGPS_CUSTOM_PDE_SERVER == type ||
+               LOC_AGPS_MPC_SERVER == type) {
+        struct in_addr addr;
+        if (!resolve_in_addr(hostname, &addr))
+        {
+            LOC_LOGE("loc_eng_set_server, hostname %s cannot be resolved.\n", hostname);
+            ret = -2;
+        } else {
+            unsigned int ip = htonl(addr.s_addr);
+            loc_eng_msg_set_server_ipv4 *msg(new loc_eng_msg_set_server_ipv4(&loc_eng_data,
+                                                                             ip,
+                                                                             port,
+                                                                             type));
+            msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+                      msg, loc_eng_free_msg);
+        }
+    } else {
+        LOC_LOGE("loc_eng_set_server, type %d cannot be resolved.\n", type);
+    }
+
+    EXIT_LOG(%d, ret);
+    return ret;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_set_server_proxy
+
+DESCRIPTION
+   If loc_eng_set_server is called before loc_eng_init, it doesn't work. This
+   proxy buffers server settings and calls loc_eng_set_server when the client is
+   open.
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   0
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_set_server_proxy(loc_eng_data_s_type &loc_eng_data,
+                             LocServerType type,
+                             const char* hostname, int port)
+{
+    ENTRY_LOG_CALLFLOW();
+    int ret_val = 0;
+
+    if (NULL != loc_eng_data.context)
+    {
+        ret_val = loc_eng_set_server(loc_eng_data, type, hostname, port);
+    } else {
+        LOC_LOGW("set_server called before init. save the address, type: %d, hostname: %s, port: %d",
+                 (int) type, hostname, port);
+        switch (type)
+        {
+        case LOC_AGPS_SUPL_SERVER:
+            strlcpy(loc_eng_data.supl_host_buf, hostname,
+                    sizeof(loc_eng_data.supl_host_buf));
+            loc_eng_data.supl_port_buf = port;
+            loc_eng_data.supl_host_set = 1;
+            break;
+        case LOC_AGPS_CDMA_PDE_SERVER:
+            strlcpy(loc_eng_data.c2k_host_buf, hostname,
+                    sizeof(loc_eng_data.c2k_host_buf));
+            loc_eng_data.c2k_port_buf = port;
+            loc_eng_data.c2k_host_set = 1;
+            break;
+        default:
+            LOC_LOGE("loc_eng_set_server_proxy, unknown server type = %d", (int) type);
+        }
+    }
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_agps_ril_update_network_availability
+
+DESCRIPTION
+   Sets data call allow vs disallow flag to modem
+   This is the only member of sLocEngAGpsRilInterface implemented.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_eng_agps_ril_update_network_availability(loc_eng_data_s_type &loc_eng_data,
+                                                  int available, const char* apn)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context, return);
+    if (apn != NULL)
+    {
+        LOC_LOGD("loc_eng_agps_ril_update_network_availability: APN Name = [%s]\n", apn);
+        int apn_len = smaller_of(strlen (apn), MAX_APN_LEN);
+        loc_eng_msg_set_data_enable *msg(new loc_eng_msg_set_data_enable(&loc_eng_data, apn,
+                                                                         apn_len, available));
+        msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q,
+                  msg, loc_eng_free_msg);
+    }
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_report_status
+
+DESCRIPTION
+   Reports GPS engine state to Java layer.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   N/A
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_eng_report_status (loc_eng_data_s_type &loc_eng_data, GpsStatusValue status)
+{
+    ENTRY_LOG();
+    // Switch from WAIT to MUTE, for "engine on" or "session begin" event
+    if (status == GPS_STATUS_SESSION_BEGIN || status == GPS_STATUS_ENGINE_ON)
+    {
+        if (loc_eng_data.mute_session_state == LOC_MUTE_SESS_WAIT)
+        {
+            LOC_LOGD("loc_eng_report_status: mute_session_state changed from WAIT to IN SESSION");
+            loc_eng_data.mute_session_state = LOC_MUTE_SESS_IN_SESSION;
+        }
+    }
+
+    // Switch off MUTE session
+    if (loc_eng_data.mute_session_state == LOC_MUTE_SESS_IN_SESSION &&
+        (status == GPS_STATUS_SESSION_END || status == GPS_STATUS_ENGINE_OFF))
+    {
+        LOC_LOGD("loc_eng_report_status: mute_session_state changed from IN SESSION to NONE");
+        loc_eng_data.mute_session_state = LOC_MUTE_SESS_NONE;
+    }
+
+    // Session End is not reported during Android navigating state
+    if (status != GPS_STATUS_NONE &&
+        !(status == GPS_STATUS_SESSION_END && loc_eng_data.navigating) &&
+        !(status == GPS_STATUS_SESSION_BEGIN && !loc_eng_data.navigating))
+    {
+        if (loc_eng_data.mute_session_state != LOC_MUTE_SESS_IN_SESSION)
+        {
+            // Inform GpsLocationProvider about mNavigating status
+            loc_inform_gps_status(loc_eng_data, status);
+        }
+        else {
+            LOC_LOGD("loc_eng_report_status: muting the status report.");
+        }
+    }
+
+    // Only keeps ENGINE ON/OFF in engine_status
+    if (status == GPS_STATUS_ENGINE_ON || status == GPS_STATUS_ENGINE_OFF)
+    {
+        loc_eng_data.engine_status = status;
+    }
+
+    // Only keeps SESSION BEGIN/END in fix_session_status
+    if (status == GPS_STATUS_SESSION_BEGIN || status == GPS_STATUS_SESSION_END)
+    {
+        loc_eng_data.fix_session_status = status;
+    }
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION loc_eng_handle_engine_down
+         loc_eng_handle_engine_up
+
+DESCRIPTION
+   Calls this function when it is detected that modem restart is happening.
+   Either we detected the modem is down or received modem up event.
+   This must be called from the deferred thread to avoid race condition.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_eng_handle_engine_down(loc_eng_data_s_type &loc_eng_data)
+{
+    ENTRY_LOG();
+    loc_eng_ni_reset_on_engine_restart(loc_eng_data);
+    loc_eng_report_status(loc_eng_data, GPS_STATUS_ENGINE_OFF);
+    EXIT_LOG(%s, VOID_RET);
+}
+
+void loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data)
+{
+    ENTRY_LOG();
+    loc_eng_reinit(loc_eng_data);
+
+    if (loc_eng_data.agps_status_cb != NULL) {
+        loc_eng_data.agnss_nif->dropAllSubscribers();
+        loc_eng_data.internet_nif->dropAllSubscribers();
+
+        loc_eng_agps_reinit(loc_eng_data);
+    }
+
+    loc_eng_report_status(loc_eng_data, GPS_STATUS_ENGINE_ON);
+
+    // modem is back up.  If we crashed in the middle of navigating, we restart.
+    if (loc_eng_data.navigating) {
+        loc_eng_data.client_handle->setPositionMode(
+            loc_eng_data.position_mode.pMode,
+            loc_eng_data.position_mode.pRecurrence,
+            loc_eng_data.position_mode.minInterval,
+            loc_eng_data.position_mode.preferredAccuracy,
+            loc_eng_data.position_mode.preferredTime);
+        // not mutex protected, assuming fw won't call start twice without a
+        // stop call in between.
+        loc_eng_start_handler(loc_eng_data);
+    }
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION loc_eng_deferred_action_thread
+
+DESCRIPTION
+   Main routine for the thread to execute loc_eng commands.
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_eng_deferred_action_thread(void* arg)
+{
+    ENTRY_LOG();
+    loc_eng_msg *msg;
+    static int cnt = 0;
+    LocEngContext* context = (LocEngContext*)arg;
+
+    // make sure we do not run in background scheduling group
+    set_sched_policy(gettid(), SP_FOREGROUND);
+
+    while (1)
+    {
+        LOC_LOGD("%s:%d] %d listening ...\n", __func__, __LINE__, cnt++);
+
+        // we are only sending / receiving msg pointers
+        msq_q_err_type result = msg_q_rcv((void*)context->deferred_q, (void **) &msg);
+        if (eMSG_Q_SUCCESS != result) {
+            LOC_LOGE("%s:%d] fail receiving msg: %s\n", __func__, __LINE__,
+                     loc_get_msg_q_status(result));
+            return;
+        }
+
+        loc_eng_data_s_type* loc_eng_data_p = (loc_eng_data_s_type*)msg->owner;
+
+        LOC_LOGD("%s:%d] received msg_id = %s context = %p\n",
+                 __func__, __LINE__, loc_get_msg_name(msg->msgid), loc_eng_data_p->context);
+
+        // need to ensure the instance data is valid
+        STATE_CHECK(NULL != loc_eng_data_p->context,
+                    "instance cleanup happened",
+                    delete msg; return);
+
+        switch(msg->msgid) {
+        case LOC_ENG_MSG_QUIT:
+        {
+            LocEngContext* context = (LocEngContext*)loc_eng_data_p->context;
+            pthread_mutex_lock(&(context->lock));
+            pthread_cond_signal(&(context->cond));
+            pthread_mutex_unlock(&(context->lock));
+            EXIT_LOG(%s, "LOC_ENG_MSG_QUIT, signal the main thread and return");
+        }
+        return;
+
+        case LOC_ENG_MSG_REQUEST_NI:
+        {
+            loc_eng_msg_request_ni *niMsg = (loc_eng_msg_request_ni*)msg;
+            loc_eng_ni_request_handler(*loc_eng_data_p, &niMsg->notify, niMsg->passThroughData);
+        }
+        break;
+
+        case LOC_ENG_MSG_INFORM_NI_RESPONSE:
+        {
+            loc_eng_msg_inform_ni_response *nrMsg = (loc_eng_msg_inform_ni_response*)msg;
+            loc_eng_data_p->client_handle->informNiResponse(nrMsg->response,
+                                                            nrMsg->passThroughData);
+        }
+        break;
+
+        case LOC_ENG_MSG_START_FIX:
+            loc_eng_start_handler(*loc_eng_data_p);
+            break;
+
+        case LOC_ENG_MSG_STOP_FIX:
+            if (loc_eng_data_p->agps_request_pending)
+            {
+                loc_eng_data_p->stop_request_pending = true;
+                LOC_LOGD("loc_eng_stop - deferring stop until AGPS data call is finished\n");
+            } else {
+                loc_eng_stop_handler(*loc_eng_data_p);
+            }
+            break;
+
+        case LOC_ENG_MSG_SET_POSITION_MODE:
+        {
+            loc_eng_msg_position_mode *pmMsg = (loc_eng_msg_position_mode*)msg;
+            loc_eng_data_p->client_handle->setPositionMode(pmMsg->pMode, pmMsg->pRecurrence,
+                                                           pmMsg->minInterval,pmMsg->preferredAccuracy,
+                                                           pmMsg->preferredTime);
+            memcpy((void*)&loc_eng_data_p->position_mode, (void*)pmMsg, sizeof(*pmMsg));
+        }
+        break;
+
+        case LOC_ENG_MSG_SET_TIME:
+        {
+            loc_eng_msg_set_time *tMsg = (loc_eng_msg_set_time*)msg;
+            loc_eng_data_p->client_handle->setTime(tMsg->time, tMsg->timeReference,
+                                                   tMsg->uncertainty);
+        }
+        break;
+
+        case LOC_ENG_MSG_INJECT_LOCATION:
+        {
+            loc_eng_msg_inject_location *ilMsg = (loc_eng_msg_inject_location*) msg;
+            loc_eng_data_p->client_handle->injectPosition(ilMsg->latitude, ilMsg->longitude,
+                                                          ilMsg->accuracy);
+        }
+        break;
+
+        case LOC_ENG_MSG_SET_SERVER_IPV4:
+        {
+            loc_eng_msg_set_server_ipv4 *ssiMsg = (loc_eng_msg_set_server_ipv4*)msg;
+            loc_eng_data_p->client_handle->setServer(ssiMsg->nl_addr,
+                                                     ssiMsg->port,
+                                                     ssiMsg->serverType);
+        }
+        break;
+
+        case LOC_ENG_MSG_SET_SERVER_URL:
+        {
+            loc_eng_msg_set_server_url *ssuMsg = (loc_eng_msg_set_server_url*)msg;
+            loc_eng_data_p->client_handle->setServer(ssuMsg->url, ssuMsg->len);
+        }
+        break;
+
+        case LOC_ENG_MSG_SUPL_VERSION:
+        {
+            loc_eng_msg_suple_version *svMsg = (loc_eng_msg_suple_version*)msg;
+            loc_eng_data_p->client_handle->setSUPLVersion(svMsg->supl_version);
+        }
+        break;
+
+        case LOC_ENG_MSG_SET_SENSOR_CONTROL_CONFIG:
+        {
+            loc_eng_msg_sensor_control_config *sccMsg = (loc_eng_msg_sensor_control_config*)msg;
+            loc_eng_data_p->client_handle->setSensorControlConfig(sccMsg->sensorsDisabled);
+        }
+        break;
+
+        case LOC_ENG_MSG_SET_SENSOR_PROPERTIES:
+        {
+            loc_eng_msg_sensor_properties *spMsg = (loc_eng_msg_sensor_properties*)msg;
+            loc_eng_data_p->client_handle->setSensorProperties(spMsg->gyroBiasVarianceRandomWalk);
+        }
+        break;
+
+        case LOC_ENG_MSG_SET_SENSOR_PERF_CONTROL_CONFIG:
+        {
+            loc_eng_msg_sensor_perf_control_config *spccMsg = (loc_eng_msg_sensor_perf_control_config*)msg;
+            loc_eng_data_p->client_handle->setSensorPerfControlConfig(spccMsg->controlMode, spccMsg->accelSamplesPerBatch, spccMsg->accelBatchesPerSec,
+                                                                      spccMsg->gyroSamplesPerBatch, spccMsg->gyroBatchesPerSec);
+        }
+        break;
+
+        case LOC_ENG_MSG_REPORT_POSITION:
+            if (loc_eng_data_p->mute_session_state != LOC_MUTE_SESS_IN_SESSION)
+            {
+                loc_eng_msg_report_position *rpMsg = (loc_eng_msg_report_position*)msg;
+                if (loc_eng_data_p->location_cb != NULL) {
+                    if (LOC_SESS_FAILURE == rpMsg->status) {
+                        // in case we want to handle the failure case
+                        loc_eng_data_p->location_cb(NULL, NULL);
+                    }
+                    // what's in the else if is... (line by line)
+                    // 1. this is a good fix; or
+                    // 2. (must be intermediate fix... implicit)
+                    //   2.1 we accepte intermediate; and
+                    //   2.2 it is NOT the case that
+                    //   2.2.1 there is inaccuracy; and
+                    //   2.2.2 we care about inaccuracy; and
+                    //   2.2.3 the inaccuracy exceeds our tolerance
+                    else if (LOC_SESS_SUCCESS == rpMsg->status ||
+                             (LOC_SESS_INTERMEDIATE == loc_eng_data_p->intermediateFix &&
+                              !((rpMsg->location.flags & GPS_LOCATION_HAS_ACCURACY) &&
+                                (gps_conf.ACCURACY_THRES != 0) &&
+                                (rpMsg->location.accuracy > gps_conf.ACCURACY_THRES)))) {
+                        loc_eng_data_p->location_cb((GpsLocation*)&(rpMsg->location),
+                                                    (void*)rpMsg->locationExt);
+                    }
+                }
+            }
+
+            break;
+
+        case LOC_ENG_MSG_REPORT_SV:
+            if (loc_eng_data_p->mute_session_state != LOC_MUTE_SESS_IN_SESSION)
+            {
+                loc_eng_msg_report_sv *rsMsg = (loc_eng_msg_report_sv*)msg;
+                if (loc_eng_data_p->sv_status_cb != NULL) {
+                    loc_eng_data_p->sv_status_cb((GpsSvStatus*)&(rsMsg->svStatus),
+                                                 (void*)rsMsg->svExt);
+                }
+            }
+            break;
+
+        case LOC_ENG_MSG_REPORT_STATUS:
+            loc_eng_report_status(*loc_eng_data_p, ((loc_eng_msg_report_status*)msg)->status);
+            break;
+
+        case LOC_ENG_MSG_REPORT_NMEA:
+            if (NULL != loc_eng_data_p->nmea_cb) {
+                loc_eng_msg_report_nmea* nmMsg = (loc_eng_msg_report_nmea*)msg;
+                struct timeval tv;
+                gettimeofday(&tv, (struct timezone *) NULL);
+                int64_t now = tv.tv_sec * 1000LL + tv.tv_usec / 1000;
+                CALLBACK_LOG_CALLFLOW("nmea_cb", %p, nmMsg->nmea);
+            }
+            break;
+
+        case LOC_ENG_MSG_REQUEST_BIT:
+        {
+            loc_eng_msg_request_bit* brqMsg = (loc_eng_msg_request_bit*)msg;
+            AgpsStateMachine* stateMachine = (brqMsg->isSupl) ?
+                                             loc_eng_data_p->agnss_nif :
+                                             loc_eng_data_p->internet_nif;
+            BITSubscriber subscriber(stateMachine, brqMsg->ipv4Addr, brqMsg->ipv6Addr);
+
+            stateMachine->subscribeRsrc((Subscriber*)&subscriber);
+        }
+        break;
+
+        case LOC_ENG_MSG_RELEASE_BIT:
+        {
+            loc_eng_msg_release_bit* brlMsg = (loc_eng_msg_release_bit*)msg;
+            AgpsStateMachine* stateMachine = (brlMsg->isSupl) ?
+                                             loc_eng_data_p->agnss_nif :
+                                             loc_eng_data_p->internet_nif;
+            BITSubscriber subscriber(stateMachine, brlMsg->ipv4Addr, brlMsg->ipv6Addr);
+
+            stateMachine->unsubscribeRsrc((Subscriber*)&subscriber);
+        }
+        break;
+
+        case LOC_ENG_MSG_REQUEST_ATL:
+        {
+            loc_eng_msg_request_atl* arqMsg = (loc_eng_msg_request_atl*)msg;
+            AgpsStateMachine* stateMachine = (AGPS_TYPE_SUPL == arqMsg->type) ?
+                                             loc_eng_data_p->agnss_nif :
+                                             loc_eng_data_p->internet_nif;
+            ATLSubscriber subscriber(arqMsg->handle,
+                                     stateMachine,
+                                     loc_eng_data_p->client_handle);
+
+            stateMachine->subscribeRsrc((Subscriber*)&subscriber);
+        }
+        break;
+
+        case LOC_ENG_MSG_RELEASE_ATL:
+        {
+            loc_eng_msg_release_atl* arlMsg = (loc_eng_msg_release_atl*)msg;
+            ATLSubscriber s1(arlMsg->handle,
+                             loc_eng_data_p->agnss_nif,
+                             loc_eng_data_p->client_handle);
+            // attempt to unsubscribe from agnss_nif first
+            if (! loc_eng_data_p->agnss_nif->unsubscribeRsrc((Subscriber*)&s1)) {
+                ATLSubscriber s2(arlMsg->handle,
+                                 loc_eng_data_p->internet_nif,
+                                 loc_eng_data_p->client_handle);
+                // if unsuccessful, try internet_nif
+                loc_eng_data_p->internet_nif->unsubscribeRsrc((Subscriber*)&s2);
+            }
+        }
+        break;
+
+        case LOC_ENG_MSG_REQUEST_XTRA_DATA:
+            if (loc_eng_data_p->xtra_module_data.download_request_cb != NULL)
+            {
+                loc_eng_data_p->xtra_module_data.download_request_cb();
+            }
+            break;
+
+        case LOC_ENG_MSG_REQUEST_TIME:
+            break;
+
+        case LOC_ENG_MSG_REQUEST_POSITION:
+            break;
+
+        case LOC_ENG_MSG_DELETE_AIDING_DATA:
+            loc_eng_data_p->aiding_data_for_deletion |= ((loc_eng_msg_delete_aiding_data*)msg)->type;
+            break;
+
+        case LOC_ENG_MSG_ENABLE_DATA:
+        {
+            loc_eng_msg_set_data_enable *unaMsg = (loc_eng_msg_set_data_enable*)msg;
+            loc_eng_data_p->client_handle->enableData(unaMsg->enable);
+            loc_eng_data_p->client_handle->setAPN(unaMsg->apn, unaMsg->length);
+        }
+        break;
+
+        case LOC_ENG_MSG_INJECT_XTRA_DATA:
+        {
+            loc_eng_msg_inject_xtra_data *xdMsg = (loc_eng_msg_inject_xtra_data*)msg;
+            loc_eng_data_p->client_handle->setXtraData(xdMsg->data, xdMsg->length);
+        }
+        break;
+
+        case LOC_ENG_MSG_ATL_OPEN_SUCCESS:
+        {
+            loc_eng_msg_atl_open_success *aosMsg = (loc_eng_msg_atl_open_success*)msg;
+#ifdef QCOM_FEATURE_IPV6
+            AgpsStateMachine* stateMachine = (AGPS_TYPE_SUPL == aosMsg->agpsType) ?
+                                             loc_eng_data_p->agnss_nif :
+                                             loc_eng_data_p->internet_nif;
+
+            stateMachine->setBearer(aosMsg->bearerType);
+#else
+            AgpsStateMachine* stateMachine = loc_eng_data_p->agnss_nif;
+#endif
+            stateMachine->setAPN(aosMsg->apn, aosMsg->length);
+            stateMachine->onRsrcEvent(RSRC_GRANTED);
+        }
+        break;
+
+        case LOC_ENG_MSG_ATL_CLOSED:
+        {
+            loc_eng_msg_atl_closed *acsMsg = (loc_eng_msg_atl_closed*)msg;
+#ifdef QCOM_FEATURE_IPV6
+            AgpsStateMachine* stateMachine = (AGPS_TYPE_SUPL == acsMsg->agpsType) ?
+                                             loc_eng_data_p->agnss_nif :
+                                             loc_eng_data_p->internet_nif;
+#else
+            AgpsStateMachine* stateMachine = loc_eng_data_p->agnss_nif;
+#endif
+
+            stateMachine->onRsrcEvent(RSRC_RELEASED);
+        }
+        break;
+
+        case LOC_ENG_MSG_ATL_OPEN_FAILED:
+        {
+            loc_eng_msg_atl_open_failed *aofMsg = (loc_eng_msg_atl_open_failed*)msg;
+#ifdef QCOM_FEATURE_IPV6
+            AgpsStateMachine* stateMachine = (AGPS_TYPE_SUPL == aofMsg->agpsType) ?
+                                             loc_eng_data_p->agnss_nif :
+                                             loc_eng_data_p->internet_nif;
+#else
+            AgpsStateMachine* stateMachine = loc_eng_data_p->agnss_nif;
+#endif
+
+            stateMachine->onRsrcEvent(RSRC_DENIED);
+        }
+        break;
+
+        case LOC_ENG_MSG_ENGINE_DOWN:
+            loc_eng_handle_engine_down(*loc_eng_data_p);
+            break;
+
+        case LOC_ENG_MSG_ENGINE_UP:
+            loc_eng_handle_engine_up(*loc_eng_data_p);
+            break;
+
+        default:
+            LOC_LOGE("unsupported msgid = %d\n", msg->msgid);
+            break;
+        }
+
+        if ( (msg->msgid == LOC_ENG_MSG_ATL_OPEN_FAILED)  |
+             (msg->msgid == LOC_ENG_MSG_ATL_CLOSED)  |
+             (msg->msgid == LOC_ENG_MSG_ATL_OPEN_SUCCESS) )
+        {
+            loc_eng_data_p->agps_request_pending = false;
+            if (loc_eng_data_p->stop_request_pending) {
+                loc_eng_stop_handler(*loc_eng_data_p);
+                loc_eng_data_p->stop_request_pending = false;
+            }
+        }
+        loc_eng_data_p->stop_request_pending = false;
+
+        if (loc_eng_data_p->engine_status != GPS_STATUS_ENGINE_ON &&
+            loc_eng_data_p->aiding_data_for_deletion != 0)
+        {
+            loc_eng_data_p->client_handle->deleteAidingData(loc_eng_data_p->aiding_data_for_deletion);
+            loc_eng_data_p->aiding_data_for_deletion = 0;
+        }
+
+        delete msg;
+    }
+
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION loc_eng_report_position_ulp
+
+DESCRIPTION
+   Report a ULP position
+         p_ulp_pos_absolute, ULP position in absolute coordinates
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: SUCCESS
+   others: error
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_eng_report_position_ulp (void* handle,
+                                        const GpsLocation* location_report_ptr,
+                                        unsigned int   ext_data_length,
+                                        unsigned char* ext_data)
+{
+    ENTRY_LOG();
+    loc_eng_data_s_type* loc_eng_data_p = (loc_eng_data_s_type*)handle;
+
+    INIT_CHECK(loc_eng_data_p->context && loc_eng_data_p->client_handle,
+               return -1);
+
+    if (ext_data_length > sizeof (extra_data))
+    {
+        ext_data_length = sizeof (extra_data);
+    }
+
+    memcpy(extra_data,
+           ext_data,
+           ext_data_length);
+
+    loc_eng_data_p->client_handle->reportPosition((GpsLocation&)*location_report_ptr,
+                                                  NULL, LOC_SESS_SUCCESS);
+
+    EXIT_LOG(%d, 0);
+    return 0;
+}
+
+#ifdef QCOM_FEATURE_ULP
+/*===========================================================================
+FUNCTION loc_eng_ulp_init
+
+DESCRIPTION
+   This function dynamically loads the libulp.so and calls
+   its init function to start up the ulp module
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: no error
+   -1: errors
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_eng_ulp_init(void* owner)
+{
+    ENTRY_LOG();
+    int ret_val;
+    void *handle;
+    const char *error;
+    get_ulp_interface* get_ulp_inf;
+
+    if (!(gps_conf.CAPABILITIES & ULP_CAPABILITY)) {
+       LOC_LOGD ("%s, ULP is not supported\n", __func__);
+       ret_val = -1;
+       goto exit;
+    }
+
+    handle = dlopen ("libulp.so", RTLD_NOW);
+    if (!handle)
+    {
+        LOC_LOGE ("%s, dlopen for libulp.so failed\n", __func__);
+        ret_val = -1;
+        goto exit;
+    }
+    dlerror();    /* Clear any existing error */
+
+    get_ulp_inf = (get_ulp_interface*) dlsym(handle, "ulp_get_interface");
+    if ((error = dlerror()) != NULL)  {
+        LOC_LOGE ("%s, dlsym for ulpInterface failed, error = %s\n", __func__, error);
+        ret_val = -1;
+        goto exit;
+    }
+
+    locEngUlpInf = get_ulp_inf();
+
+    // Initialize the ULP interface
+    locEngUlpInf->init (owner, loc_eng_report_position_ulp);
+
+    ret_val = 0;
+exit:
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_inject_raw_command
+
+DESCRIPTION
+   This is used to send special test modem commands from the applications
+   down into the HAL
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+bool loc_eng_inject_raw_command(loc_eng_data_s_type &loc_eng_data,
+                                char* command, int length)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context, return -1);
+    boolean ret_val;
+    LOC_LOGD("loc_eng_send_extra_command: %s\n", command);
+    ret_val = TRUE;
+
+    EXIT_LOG(%s, loc_logger_boolStr[ret_val!=0]);
+    return ret_val;
+}
+/*===========================================================================
+FUNCTION    loc_eng_update_criteria
+
+DESCRIPTION
+   This is used to inform the ULP module of new unique criteria that are passed
+   in by the applications
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_update_criteria(loc_eng_data_s_type &loc_eng_data,
+                            UlpLocationCriteria criteria)
+{
+    ENTRY_LOG_CALLFLOW();
+    INIT_CHECK(loc_eng_data.context, return -1);
+    int ret_val;
+    ret_val = 0;
+
+    EXIT_LOG(%d, ret_val);
+    return ret_val;
+}
+#endif
diff --git a/loc_api/libloc_api_50001/loc_eng.h b/loc_api/libloc_api_50001/loc_eng.h
new file mode 100755
index 0000000..73578ec
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng.h
@@ -0,0 +1,204 @@
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef LOC_ENG_H
+#define LOC_ENG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+// Uncomment to keep all LOG messages (LOGD, LOGI, LOGV, etc.)
+#define MAX_NUM_ATL_CONNECTIONS  2
+// Define boolean type to be used by libgps on loc api module
+typedef unsigned char boolean;
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#include <loc.h>
+#include <loc_eng_xtra.h>
+#include <loc_eng_ni.h>
+#include <loc_eng_agps.h>
+#include <loc_cfg.h>
+#include <loc_log.h>
+#include <log_util.h>
+#include <loc_eng_msg.h>
+#include <loc_eng_agps.h>
+#include <LocApiAdapter.h>
+
+// The data connection minimal open time
+#define DATA_OPEN_MIN_TIME        1  /* sec */
+
+// The system sees GPS engine turns off after inactive for this period of time
+#define GPS_AUTO_OFF_TIME         2  /* secs */
+#define SUCCESS              TRUE
+#define FAILURE                 FALSE
+#define INVALID_ATL_CONNECTION_HANDLE -1
+
+#define MAX_APN_LEN 100
+#define MAX_URL_LEN 256
+#define smaller_of(a, b) (((a) > (b)) ? (b) : (a))
+
+enum loc_mute_session_e_type {
+   LOC_MUTE_SESS_NONE = 0,
+   LOC_MUTE_SESS_WAIT,
+   LOC_MUTE_SESS_IN_SESSION
+};
+
+// Module data
+typedef struct
+{
+    LocApiAdapter                 *client_handle;
+    loc_location_cb_ext            location_cb;
+    gps_status_callback            status_cb;
+    loc_sv_status_cb_ext           sv_status_cb;
+    agps_status_callback           agps_status_cb;
+    gps_nmea_callback              nmea_cb;
+    gps_ni_notify_callback         ni_notify_cb;
+    gps_acquire_wakelock           acquire_wakelock_cb;
+    gps_release_wakelock           release_wakelock_cb;
+    boolean                        intermediateFix;
+    AGpsStatusValue                agps_status;
+    // used to defer stopping the GPS engine until AGPS data calls are done
+    boolean                        agps_request_pending;
+    boolean                        stop_request_pending;
+    loc_eng_xtra_data_s_type       xtra_module_data;
+    loc_eng_ni_data_s_type         loc_eng_ni_data;
+
+    boolean                        navigating;
+
+    // AGPS state machines
+    AgpsStateMachine*              agnss_nif;
+    AgpsStateMachine*              internet_nif;
+
+    // GPS engine status
+    GpsStatusValue                 engine_status;
+    GpsStatusValue                 fix_session_status;
+
+    // Aiding data information to be deleted, aiding data can only be deleted when GPS engine is off
+    GpsAidingData                  aiding_data_for_deletion;
+
+    void*                          context;
+
+    loc_eng_msg_position_mode      position_mode;
+
+    // For muting session broadcast
+    loc_mute_session_e_type        mute_session_state;
+
+    // Address buffers, for addressing setting before init
+    int    supl_host_set;
+    char   supl_host_buf[101];
+    int    supl_port_buf;
+    int    c2k_host_set;
+    char   c2k_host_buf[101];
+    int    c2k_port_buf;
+    int    mpc_host_set;
+    char   mpc_host_buf[101];
+    int    mpc_port_buf;
+} loc_eng_data_s_type;
+
+
+int  loc_eng_init(loc_eng_data_s_type &loc_eng_data,
+                  LocCallbacks* callbacks,
+                  LOC_API_ADAPTER_EVENT_MASK_T event);
+int  loc_eng_start(loc_eng_data_s_type &loc_eng_data);
+int  loc_eng_stop(loc_eng_data_s_type &loc_eng_data);
+void loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data);
+int  loc_eng_inject_time(loc_eng_data_s_type &loc_eng_data,
+                         GpsUtcTime time, int64_t timeReference,
+                         int uncertainty);
+int  loc_eng_inject_location(loc_eng_data_s_type &loc_eng_data,
+                             double latitude, double longitude,
+                             float accuracy);
+void loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data,
+                                GpsAidingData f);
+int  loc_eng_set_position_mode(loc_eng_data_s_type &loc_eng_data,
+                               LocPositionMode mode, GpsPositionRecurrence recurrence,
+                               uint32_t min_interval, uint32_t preferred_accuracy,
+                               uint32_t preferred_time);
+const void* loc_eng_get_extension(loc_eng_data_s_type &loc_eng_data,
+                                  const char* name);
+#ifdef QCOM_FEATURE_ULP
+int  loc_eng_update_criteria(loc_eng_data_s_type &loc_eng_data,
+                             UlpLocationCriteria criteria);
+#endif
+
+void loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data,
+                       AGpsCallbacks* callbacks);
+#ifdef QCOM_FEATURE_IPV6
+int  loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsType agpsType,
+                      const char* apn, AGpsBearerType bearerType);
+int  loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsType agpsType);
+int  loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data, AGpsType agpsType);
+#else
+int  loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, const char* apn);
+int  loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data);
+int  loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data);
+#endif
+
+int  loc_eng_set_server_proxy(loc_eng_data_s_type &loc_eng_data,
+                              LocServerType type, const char *hostname, int port);
+
+
+void loc_eng_agps_ril_update_network_availability(loc_eng_data_s_type &loc_eng_data,
+                                                  int avaiable, const char* apn);
+
+
+bool loc_eng_inject_raw_command(loc_eng_data_s_type &loc_eng_data,
+                                char* command, int length);
+
+
+void loc_eng_mute_one_session(loc_eng_data_s_type &loc_eng_data);
+
+int loc_eng_xtra_init (loc_eng_data_s_type &loc_eng_data,
+                       GpsXtraCallbacks* callbacks);
+
+int loc_eng_xtra_inject_data(loc_eng_data_s_type &loc_eng_data,
+                             char* data, int length);
+
+extern void loc_eng_ni_init(loc_eng_data_s_type &loc_eng_data,
+                            GpsNiCallbacks *callbacks);
+extern void loc_eng_ni_respond(loc_eng_data_s_type &loc_eng_data,
+                               int notif_id, GpsUserResponseType user_response);
+extern void loc_eng_ni_request_handler(loc_eng_data_s_type &loc_eng_data,
+                                   const GpsNiNotification *notif,
+                                   const void* passThrough);
+extern void loc_eng_ni_reset_on_engine_restart(loc_eng_data_s_type &loc_eng_data);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // LOC_ENG_H
diff --git a/loc_api/libloc_api_50001/loc_eng_agps.cpp b/loc_api/libloc_api_50001/loc_eng_agps.cpp
new file mode 100755
index 0000000..0747568
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_agps.cpp
@@ -0,0 +1,702 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
+#define LOG_TAG "LocSvc_eng"
+
+#include <loc_eng_agps.h>
+#include <loc_eng_log.h>
+#include <log_util.h>
+#include <loc_eng_dmn_conn_handler.h>
+#include <loc_eng_dmn_conn.h>
+
+//======================================================================
+// C callbacks
+//======================================================================
+
+// This is given to linked_list_add as the dealloc callback
+// data -- an instance of Subscriber
+static void deleteObj(void* data)
+{
+    delete (Subscriber*)data;
+}
+
+// This is given to linked_list_search() as the comparison callback
+// when the state manchine needs to process for particular subscriber
+// fromCaller -- caller provides this obj
+// fromList -- linked_list_search() function take this one from list
+static bool hasSubscriber(void* fromCaller, void* fromList)
+{
+    Notification* notification = (Notification*)fromCaller;
+    Subscriber* s1 = (Subscriber*)fromList;
+
+    return s1->forMe(*notification);
+}
+
+// This is gvien to linked_list_search() to notify subscriber objs
+// when the state machine needs to inform all subscribers of resource
+// status changes, e.g. when resource is GRANTED.
+// fromCaller -- caller provides this ptr to a Notification obj.
+// fromList -- linked_list_search() function take this one from list
+static bool notifySubscriber(void* fromCaller, void* fromList)
+{
+    Notification* notification = (Notification*)fromCaller;
+    Subscriber* s1 = (Subscriber*)fromList;
+
+    // we notify every subscriber indiscriminatively
+    // each subscriber decides if this notification is interesting.
+    return s1->notifyRsrcStatus(*notification) &&
+           // if we do not want to delete the subscriber from the
+           // the list, we must set this to false so this function
+           // returns false
+           notification->postNotifyDelete;
+}
+
+//======================================================================
+// Notification
+//======================================================================
+const int Notification::BROADCAST_ALL = 0x80000000;
+const int Notification::BROADCAST_ACTIVE = 0x80000001;
+const int Notification::BROADCAST_INACTIVE = 0x80000002;
+
+
+//======================================================================
+// Subscriber:  BITSubscriber / ATLSubscriber
+//======================================================================
+bool Subscriber::forMe(Notification &notification)
+{
+    if (NULL != notification.rcver) {
+        return equals(notification.rcver);
+    } else {
+        return Notification::BROADCAST_ALL == notification.groupID ||
+            (Notification::BROADCAST_ACTIVE == notification.groupID &&
+             !isInactive()) ||
+            (Notification::BROADCAST_INACTIVE == notification.groupID &&
+             isInactive());
+    }
+}
+bool BITSubscriber::equals(const Subscriber *s) const
+{
+    BITSubscriber* bitS = (BITSubscriber*)s;
+
+    return (ID == bitS->ID &&
+            (INADDR_NONE != (unsigned int)ID ||
+             0 == strncmp(ipv6Addr, bitS->ipv6Addr, sizeof(ipv6Addr))));
+}
+
+bool BITSubscriber::notifyRsrcStatus(Notification &notification)
+{
+    bool notify = forMe(notification);
+
+    if (notify) {
+        switch(notification.rsrcStatus)
+        {
+        case RSRC_UNSUBSCRIBE:
+        case RSRC_RELEASED:
+            loc_eng_dmn_conn_loc_api_server_data_conn(
+                GPSONE_LOC_API_IF_RELEASE_SUCCESS);
+            break;
+        case RSRC_DENIED:
+            loc_eng_dmn_conn_loc_api_server_data_conn(
+                GPSONE_LOC_API_IF_FAILURE);
+            break;
+        case RSRC_GRANTED:
+            loc_eng_dmn_conn_loc_api_server_data_conn(
+                GPSONE_LOC_API_IF_REQUEST_SUCCESS);
+            break;
+        default:
+            notify = false;
+        }
+    }
+
+    return notify;
+}
+
+bool ATLSubscriber::notifyRsrcStatus(Notification &notification)
+{
+    bool notify = forMe(notification);
+
+    if (notify) {
+        switch(notification.rsrcStatus)
+        {
+        case RSRC_UNSUBSCRIBE:
+        case RSRC_RELEASED:
+            ((LocApiAdapter*)mLocAdapter)->atlCloseStatus(ID, 1);
+            break;
+        case RSRC_DENIED:
+            ((LocApiAdapter*)mLocAdapter)->atlOpenStatus(ID, 0,
+                                            (char*)mStateMachine->getAPN(),
+#ifdef QCOM_FEATURE_IPV6
+                                            mStateMachine->getBearer(),
+#endif
+                                            mStateMachine->getType());
+            break;
+        case RSRC_GRANTED:
+            ((LocApiAdapter*)mLocAdapter)->atlOpenStatus(ID, 1,
+                                            (char*)mStateMachine->getAPN(),
+#ifdef QCOM_FEATURE_IPV6
+                                            mStateMachine->getBearer(),
+#endif
+                                            mStateMachine->getType());
+            break;
+        default:
+            notify = false;
+        }
+    }
+
+    return notify;
+}
+
+
+//======================================================================
+// AgpsState:  AgpsReleasedState / AgpsPendingState / AgpsAcquiredState
+//======================================================================
+
+// AgpsReleasedState
+class AgpsReleasedState : public AgpsState
+{
+    friend class AgpsStateMachine;
+
+    inline AgpsReleasedState(AgpsStateMachine* stateMachine) :
+        AgpsState(stateMachine)
+    { mReleasedState = this; }
+
+    inline ~AgpsReleasedState() {}
+public:
+    virtual AgpsState* onRsrcEvent(AgpsRsrcStatus event, void* data);
+    inline virtual char* whoami() {return (char*)"AgpsReleasedState";}
+};
+
+AgpsState* AgpsReleasedState::onRsrcEvent(AgpsRsrcStatus event, void* data)
+{
+    if (mStateMachine->hasSubscribers()) {
+        LOC_LOGE("Error: %s subscriber list not empty!!!", whoami());
+        // I don't know how to recover from it.  I am adding this rather
+        // for debugging purpose.
+    }
+
+    AgpsState* nextState = this;;
+    switch (event)
+    {
+    case RSRC_SUBSCRIBE:
+    {
+        // no notification until we get RSRC_GRANTED
+        // but we need to add subscriber to the list
+        mStateMachine->addSubscriber((Subscriber*)data);
+        // move the state to PENDING
+        nextState = mPendingState;
+
+        // request from connecivity service for NIF
+        mStateMachine->sendRsrcRequest(GPS_REQUEST_AGPS_DATA_CONN);
+    }
+        break;
+
+    case RSRC_UNSUBSCRIBE:
+    {
+        // the list should really be empty, nothing to remove.
+        // but we might as well just tell the client it is
+        // unsubscribed.  False tolerance, right?
+        Subscriber* subscriber = (Subscriber*) data;
+        Notification notification(subscriber, event, false);
+        subscriber->notifyRsrcStatus(notification);
+    }
+        // break;
+    case RSRC_GRANTED:
+    case RSRC_RELEASED:
+    case RSRC_DENIED:
+    default:
+        LOC_LOGW("%s: unrecognized event %d", whoami(), event);
+        // no state change.
+        break;
+    }
+
+    LOC_LOGD("onRsrcEvent, old state %s, new state %s, event %d",
+             whoami(), nextState->whoami(), event);
+    return nextState;
+}
+
+// AgpsPendingState
+class AgpsPendingState : public AgpsState
+{
+    friend class AgpsStateMachine;
+
+    inline AgpsPendingState(AgpsStateMachine* stateMachine) :
+        AgpsState(stateMachine)
+    { mPendingState = this; }
+
+    inline ~AgpsPendingState() {}
+public:
+    virtual AgpsState* onRsrcEvent(AgpsRsrcStatus event, void* data);
+    inline virtual char* whoami() {return (char*)"AgpsPendingState";}
+};
+
+AgpsState* AgpsPendingState::onRsrcEvent(AgpsRsrcStatus event, void* data)
+{
+    AgpsState* nextState = this;;
+    switch (event)
+    {
+    case RSRC_SUBSCRIBE:
+    {
+        // already requested for NIF resource,
+        // do nothing until we get RSRC_GRANTED indication
+        // but we need to add subscriber to the list
+        mStateMachine->addSubscriber((Subscriber*)data);
+        // no state change.
+    }
+        break;
+
+    case RSRC_UNSUBSCRIBE:
+    {
+        Subscriber* subscriber = (Subscriber*) data;
+        if (subscriber->waitForCloseComplete()) {
+            subscriber->setInactive();
+            if (!mStateMachine->hasActiveSubscribers()) {
+                // no more subscribers, move to RELEASED state
+                nextState = mReleasingState;
+            }
+        } else {
+            // auto notify this subscriber of the unsubscribe
+            Notification notification(subscriber, event, true);
+            mStateMachine->notifySubscribers(notification);
+
+            // now check if there is any subscribers left
+            if (!mStateMachine->hasSubscribers()) {
+                // no more subscribers, move to RELEASED state
+                nextState = mReleasedState;
+
+                // tell connecivity service we can release NIF
+                mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN);
+            }
+        }
+    }
+        break;
+
+    case RSRC_GRANTED:
+    {
+        nextState = mAcquiredState;
+        Notification notification(Notification::BROADCAST_ACTIVE, event, false);
+        // notify all subscribers NIF resource GRANTED
+        // by setting false, we keep subscribers on the linked list
+        mStateMachine->notifySubscribers(notification);
+    }
+        break;
+
+    case RSRC_RELEASED:
+        // no state change.
+        // we are expecting either GRANTED or DENIED.  Handling RELEASED
+        // may like break our state machine in race conditions.
+        break;
+
+    case RSRC_DENIED:
+    {
+        nextState = mReleasedState;
+        Notification notification(Notification::BROADCAST_ALL, event, true);
+        // notify all subscribers NIF resource RELEASED or DENIED
+        // by setting true, we remove subscribers from the linked list
+        mStateMachine->notifySubscribers(notification);
+    }
+        break;
+
+    default:
+        LOC_LOGE("%s: unrecognized event %d", whoami(), event);
+        // no state change.
+    }
+
+    LOC_LOGD("onRsrcEvent, old state %s, new state %s, event %d",
+             whoami(), nextState->whoami(), event);
+    return nextState;
+}
+
+
+class AgpsAcquiredState : public AgpsState
+{
+    friend class AgpsStateMachine;
+
+    inline AgpsAcquiredState(AgpsStateMachine* stateMachine) :
+        AgpsState(stateMachine)
+    { mAcquiredState = this; }
+
+    inline ~AgpsAcquiredState() {}
+public:
+    virtual AgpsState* onRsrcEvent(AgpsRsrcStatus event, void* data);
+    inline virtual char* whoami() { return (char*)"AgpsAcquiredState"; }
+};
+
+
+AgpsState* AgpsAcquiredState::onRsrcEvent(AgpsRsrcStatus event, void* data)
+{
+    AgpsState* nextState = this;
+    switch (event)
+    {
+    case RSRC_SUBSCRIBE:
+    {
+        // we already have the NIF resource, simply notify subscriber
+        Subscriber* subscriber = (Subscriber*) data;
+        // we have rsrc in hand, so grant it right away
+        Notification notification(subscriber, RSRC_GRANTED, false);
+        subscriber->notifyRsrcStatus(notification);
+        // add subscriber to the list
+        mStateMachine->addSubscriber(subscriber);
+        // no state change.
+    }
+        break;
+
+    case RSRC_UNSUBSCRIBE:
+    {
+        Subscriber* subscriber = (Subscriber*) data;
+        if (subscriber->waitForCloseComplete()) {
+            subscriber->setInactive();
+        } else {
+            // auto notify this subscriber of the unsubscribe
+            Notification notification(subscriber, event, true);
+            mStateMachine->notifySubscribers(notification);
+        }
+
+        // now check if there is any subscribers left
+        if (!mStateMachine->hasSubscribers()) {
+            // no more subscribers, move to RELEASED state
+            nextState = mReleasingState;
+
+            // tell connecivity service we can release NIF
+            mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN);
+        } else if (!mStateMachine->hasActiveSubscribers()) {
+            // no more subscribers, move to RELEASED state
+            nextState = mReleasedState;
+
+            // tell connecivity service we can release NIF
+            mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN);
+        }
+    }
+        break;
+
+    case RSRC_GRANTED:
+        LOC_LOGW("%s: %d, RSRC_GRANTED already received", whoami(), event);
+        // no state change.
+        break;
+
+    case RSRC_RELEASED:
+    {
+        LOC_LOGW("%s: %d, a force rsrc release", whoami(), event);
+        nextState = mReleasedState;
+        Notification notification(Notification::BROADCAST_ALL, event, true);
+        // by setting true, we remove subscribers from the linked list
+        mStateMachine->notifySubscribers(notification);
+    }
+        break;
+
+    case RSRC_DENIED:
+        // no state change.
+        // we are expecting RELEASED.  Handling DENIED
+        // may like break our state machine in race conditions.
+        break;
+
+    default:
+        LOC_LOGE("%s: unrecognized event %d", whoami(), event);
+        // no state change.
+    }
+
+    LOC_LOGD("onRsrcEvent, old state %s, new state %s, event %d",
+             whoami(), nextState->whoami(), event);
+    return nextState;
+}
+
+// AgpsPendingState
+class AgpsReleasingState : public AgpsState
+{
+    friend class AgpsStateMachine;
+
+    inline AgpsReleasingState(AgpsStateMachine* stateMachine) :
+        AgpsState(stateMachine)
+    { mReleasingState = this; }
+
+    inline ~AgpsReleasingState() {}
+public:
+    virtual AgpsState* onRsrcEvent(AgpsRsrcStatus event, void* data);
+    inline virtual char* whoami() {return (char*)"AgpsReleasingState";}
+};
+
+AgpsState* AgpsReleasingState::onRsrcEvent(AgpsRsrcStatus event, void* data)
+{
+    AgpsState* nextState = this;;
+    switch (event)
+    {
+    case RSRC_SUBSCRIBE:
+    {
+        // already requested for NIF resource,
+        // do nothing until we get RSRC_GRANTED indication
+        // but we need to add subscriber to the list
+        mStateMachine->addSubscriber((Subscriber*)data);
+        // no state change.
+    }
+        break;
+
+    case RSRC_UNSUBSCRIBE:
+    {
+        Subscriber* subscriber = (Subscriber*) data;
+        if (subscriber->waitForCloseComplete()) {
+            subscriber->setInactive();
+        } else {
+            // auto notify this subscriber of the unsubscribe
+            Notification notification(subscriber, event, true);
+            mStateMachine->notifySubscribers(notification);
+        }
+
+        // now check if there is any subscribers left
+        if (!mStateMachine->hasSubscribers()) {
+            // no more subscribers, move to RELEASED state
+            nextState = mReleasingState;
+
+            // tell connecivity service we can release NIF
+            mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN);
+        } else if (!mStateMachine->hasActiveSubscribers()) {
+            // no more subscribers, move to RELEASED state
+            nextState = mReleasedState;
+
+            // tell connecivity service we can release NIF
+            mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN);
+        }
+    }
+        break;
+
+    case RSRC_RELEASED:
+    {
+        nextState = mAcquiredState;
+        Notification notification(Notification::BROADCAST_INACTIVE, event, true);
+        // notify all subscribers that are active NIF resource RELEASE
+        // by setting false, we keep subscribers on the linked list
+        mStateMachine->notifySubscribers(notification);
+
+        if (mStateMachine->hasSubscribers()) {
+            nextState = mPendingState;
+            // request from connecivity service for NIF
+            mStateMachine->sendRsrcRequest(GPS_REQUEST_AGPS_DATA_CONN);
+        } else {
+            nextState = mReleasedState;
+        }
+    }
+        break;
+
+    case RSRC_GRANTED:
+    case RSRC_DENIED:
+    default:
+        LOC_LOGE("%s: unrecognized event %d", whoami(), event);
+        // no state change.
+    }
+
+    LOC_LOGD("onRsrcEvent, old state %s, new state %s, event %d",
+             whoami(), nextState->whoami(), event);
+    return nextState;
+}
+
+
+//======================================================================
+// AgpsStateMachine
+//======================================================================
+
+AgpsStateMachine::AgpsStateMachine(void (*servicer)(AGpsStatus* status),
+                                   AGpsType type) :
+    mServicer(servicer), mType(type),
+    mStatePtr(new AgpsReleasedState(this)),
+    mAPN(NULL),
+    mAPNLen(0)
+{
+    linked_list_init(&mSubscribers);
+
+    // setting up mReleasedState
+    mStatePtr->mPendingState = new AgpsPendingState(this);
+    mStatePtr->mAcquiredState = new AgpsAcquiredState(this);
+    mStatePtr->mReleasingState = new AgpsReleasingState(this);
+
+    // setting up mAcquiredState
+    mStatePtr->mAcquiredState->mReleasedState = mStatePtr;
+    mStatePtr->mAcquiredState->mPendingState = mStatePtr->mPendingState;
+    mStatePtr->mAcquiredState->mReleasingState = mStatePtr->mReleasingState;
+
+    // setting up mPendingState
+    mStatePtr->mPendingState->mAcquiredState = mStatePtr->mAcquiredState;
+    mStatePtr->mPendingState->mReleasedState = mStatePtr;
+    mStatePtr->mPendingState->mReleasingState = mStatePtr->mReleasingState;
+
+    // setting up mReleasingState
+    mStatePtr->mReleasingState->mReleasedState = mStatePtr;
+    mStatePtr->mReleasingState->mPendingState = mStatePtr->mPendingState;
+    mStatePtr->mReleasingState->mAcquiredState = mStatePtr->mAcquiredState;
+}
+
+AgpsStateMachine::~AgpsStateMachine()
+{
+    dropAllSubscribers();
+
+    // free the 3 states.  We must read out all 3 pointers first.
+    // Otherwise we run the risk of getting pointers from already
+    // freed memory.
+    AgpsState* acquiredState = mStatePtr->mAcquiredState;
+    AgpsState* releasedState = mStatePtr->mReleasedState;
+    AgpsState* pendindState = mStatePtr->mPendingState;
+    AgpsState* releasingState = mStatePtr->mReleasingState;
+
+    delete acquiredState;
+    delete releasedState;
+    delete pendindState;
+    delete releasingState;
+    linked_list_destroy(&mSubscribers);
+
+    if (NULL != mAPN) {
+        delete[] mAPN;
+        mAPN = NULL;
+    }
+}
+
+void AgpsStateMachine::setAPN(const char* apn, unsigned int len)
+{
+    if (NULL != mAPN) {
+        delete mAPN;
+    }
+
+    if (NULL != apn) {
+        mAPN = new char[len+1];
+        memcpy(mAPN, apn, len);
+        mAPN[len] = NULL;
+
+        mAPNLen = len;
+    } else {
+        mAPN = NULL;
+        mAPNLen = 0;
+    }
+}
+
+void AgpsStateMachine::onRsrcEvent(AgpsRsrcStatus event)
+{
+    switch (event)
+    {
+    case RSRC_GRANTED:
+    case RSRC_RELEASED:
+    case RSRC_DENIED:
+        mStatePtr = mStatePtr->onRsrcEvent(event, NULL);
+        break;
+    default:
+        LOC_LOGW("AgpsStateMachine: unrecognized event %d", event);
+        break;
+    }
+}
+
+void AgpsStateMachine::notifySubscribers(Notification& notification) const
+{
+    if (notification.postNotifyDelete) {
+        // just any non NULL value to get started
+        Subscriber* s = (Subscriber*)~0;
+        while (NULL != s) {
+            s = NULL;
+            // if the last param sets to true, _search will delete
+            // the node from the list for us.  But the problem is
+            // once that is done, _search returns, leaving the
+            // rest of the list unprocessed.  So we need a loop.
+            linked_list_search(mSubscribers, (void**)&s, notifySubscriber,
+                               (void*)&notification, true);
+        }
+    } else {
+        // no loop needed if it the last param sets to false, which
+        // mean nothing gets deleted from the list.
+        linked_list_search(mSubscribers, NULL, notifySubscriber,
+                           (void*)&notification, false);
+    }
+}
+
+void AgpsStateMachine::addSubscriber(Subscriber* subscriber) const
+{
+    Subscriber* s = NULL;
+    Notification notification((const Subscriber*)subscriber);
+    linked_list_search(mSubscribers, (void**)&s,
+                       hasSubscriber, (void*)&notification, false);
+
+    if (NULL == s) {
+        linked_list_add(mSubscribers, subscriber->clone(), deleteObj);
+    }
+}
+
+void AgpsStateMachine::sendRsrcRequest(AGpsStatusValue action) const
+{
+    Subscriber* s = NULL;
+    Notification notification(Notification::BROADCAST_ALL);
+    linked_list_search(mSubscribers, (void**)&s, hasSubscriber,
+                       (void*)&notification, false);
+
+    if ((NULL == s) == (GPS_RELEASE_AGPS_DATA_CONN == action)) {
+        AGpsStatus nifRequest;
+        nifRequest.size = sizeof(nifRequest);
+        nifRequest.type = mType;
+        nifRequest.status = action;
+
+#ifdef QCOM_FEATURE_IPV6
+        if (s == NULL) {
+            nifRequest.ipv4_addr = INADDR_NONE;
+            nifRequest.ipv6_addr[0] = 0;
+        } else {
+            s->setIPAddresses(nifRequest.ipv4_addr, (char*)nifRequest.ipv6_addr);
+        }
+#else
+        if (s == NULL) {
+            nifRequest.ipaddr = INADDR_NONE;
+        } else {
+            nifRequest.ipaddr = s->ID;
+        }
+#endif
+
+        CALLBACK_LOG_CALLFLOW("agps_cb", %s, loc_get_agps_status_name(action));
+        (*mServicer)(&nifRequest);
+    }
+}
+
+void AgpsStateMachine::subscribeRsrc(Subscriber *subscriber)
+{
+    mStatePtr = mStatePtr->onRsrcEvent(RSRC_SUBSCRIBE, (void*)subscriber);
+}
+
+bool AgpsStateMachine::unsubscribeRsrc(Subscriber *subscriber)
+{
+    Subscriber* s = NULL;
+    Notification notification((const Subscriber*)subscriber);
+    linked_list_search(mSubscribers, (void**)&s,
+                       hasSubscriber, (void*)&notification, false);
+
+    if (NULL != s) {
+        mStatePtr = mStatePtr->onRsrcEvent(RSRC_UNSUBSCRIBE, (void*)s);
+        return true;
+    }
+    return false;
+}
+
+bool AgpsStateMachine::hasActiveSubscribers() const
+{
+    Subscriber* s = NULL;
+    Notification notification(Notification::BROADCAST_ACTIVE);
+    linked_list_search(mSubscribers, (void**)&s,
+                       hasSubscriber, (void*)&notification, false);
+    return NULL != s;
+}
diff --git a/loc_api/libloc_api_50001/loc_eng_agps.h b/loc_api/libloc_api_50001/loc_eng_agps.h
new file mode 100755
index 0000000..1fd0f45
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_agps.h
@@ -0,0 +1,274 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef __LOC_ENG_AGPS_H__
+#define __LOC_ENG_AGPS_H__
+
+#include <stdbool.h>
+#include <ctype.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <hardware/gps.h>
+#include <linked_list.h>
+#include <LocApiAdapter.h>
+
+// forward declaration
+class AgpsStateMachine;
+class Subscriber;
+
+// NIF resource events
+typedef enum {
+    RSRC_SUBSCRIBE,
+    RSRC_UNSUBSCRIBE,
+    RSRC_GRANTED,
+    RSRC_RELEASED,
+    RSRC_DENIED,
+    RSRC_STATUS_MAX
+} AgpsRsrcStatus;
+
+// information bundle for subscribers
+struct Notification {
+    // goes to every subscriber
+    static const int BROADCAST_ALL;
+    // goes to every ACTIVE subscriber
+    static const int BROADCAST_ACTIVE;
+    // goes to every INACTIVE subscriber
+    static const int BROADCAST_INACTIVE;
+
+    // go to a specific subscriber
+    const Subscriber* rcver;
+    // broadcast
+    const int groupID;
+    // the new resource status event
+    const AgpsRsrcStatus rsrcStatus;
+    // should the subscriber be deleted after the notification
+    const bool postNotifyDelete;
+
+    // convenient constructor
+    inline Notification(const int broadcast,
+                        const AgpsRsrcStatus status,
+                        const bool deleteAfterwards) :
+        rcver(NULL), groupID(broadcast), rsrcStatus(status),
+        postNotifyDelete(deleteAfterwards) {}
+
+    // convenient constructor
+    inline Notification(const Subscriber* subscriber,
+                        const AgpsRsrcStatus status,
+                        const bool deleteAfterwards) :
+        rcver(subscriber), groupID(-1), rsrcStatus(status),
+        postNotifyDelete(deleteAfterwards) {}
+
+    // convenient constructor
+    inline Notification(const int broadcast) :
+        rcver(NULL), groupID(broadcast), rsrcStatus(RSRC_STATUS_MAX),
+        postNotifyDelete(false) {}
+
+    // convenient constructor
+    inline Notification(const Subscriber* subscriber) :
+        rcver(subscriber), groupID(-1), rsrcStatus(RSRC_STATUS_MAX),
+        postNotifyDelete(false) {}
+};
+
+class AgpsState {
+    // allows AgpsStateMachine to access private data
+    // no class members are public.  We don't want
+    // anyone but state machine to use state.
+    friend class AgpsStateMachine;
+
+    // state transitions are done here.
+    // Each state implements its own transitions (of course).
+    inline virtual AgpsState* onRsrcEvent(AgpsRsrcStatus event, void* data) = 0;
+
+protected:
+    // handle back to state machine
+    const AgpsStateMachine* mStateMachine;
+    // each state has pointers to all 3 states
+    // one of which is to itself.
+    AgpsState* mReleasedState;
+    AgpsState* mAcquiredState;
+    AgpsState* mPendingState;
+    AgpsState* mReleasingState;
+
+    inline AgpsState(const AgpsStateMachine *stateMachine) :
+        mStateMachine(stateMachine),
+        mReleasedState(NULL),
+        mAcquiredState(NULL),
+        mPendingState(NULL),
+        mReleasingState(NULL) {}
+    virtual ~AgpsState() {}
+
+public:
+    // for logging purpose
+    inline virtual char* whoami() = 0;
+};
+
+class AgpsStateMachine {
+    // allows AgpsState to access private data
+    // each state is really internal data to the
+    // state machine, so it should be able to
+    // access anything within the state machine.
+    friend class AgpsState;
+
+    // handle to whoever provides the service
+    void (* const mServicer)(AGpsStatus* status);
+    // NIF type: AGNSS or INTERNET.
+    const AGpsType mType;
+    // pointer to the current state.
+    AgpsState* mStatePtr;
+    // a linked list of subscribers.
+    void* mSubscribers;
+    // apn to the NIF.  Each state machine tracks
+    // resource state of a particular NIF.  For each
+    // NIF, there is also an active APN.
+    char* mAPN;
+    // for convenience, we don't do strlen each time.
+    unsigned int mAPNLen;
+#ifdef QCOM_FEATURE_IPV6
+    // bear
+    AGpsBearerType mBearer;
+#endif
+    // ipv4 address for routing
+
+public:
+    AgpsStateMachine(void (*servicer)(AGpsStatus* status), AGpsType type);
+    virtual ~AgpsStateMachine();
+
+    // self explanatory methods below
+    void setAPN(const char* apn, unsigned int len);
+    inline const char* getAPN() const { return (const char*)mAPN; }
+#ifdef QCOM_FEATURE_IPV6
+    inline void setBearer(AGpsBearerType bearer) { mBearer = bearer; }
+    inline AGpsBearerType getBearer() const { return mBearer; }
+#endif
+    inline AGpsType getType() const { return (AGpsType)mType; }
+
+    // someone, a ATL client or BIT, is asking for NIF
+    void subscribeRsrc(Subscriber *subscriber);
+
+    // someone, a ATL client or BIT, is done with NIF
+    bool unsubscribeRsrc(Subscriber *subscriber);
+
+    // add a subscriber in the linked list, if not already there.
+    void addSubscriber(Subscriber* subscriber) const;
+
+    void onRsrcEvent(AgpsRsrcStatus event);
+
+    // put the data together and send the FW
+    void sendRsrcRequest(AGpsStatusValue action) const;
+
+    inline bool hasSubscribers() const
+    { return !linked_list_empty(mSubscribers); }
+
+    bool hasActiveSubscribers() const;
+
+    inline void dropAllSubscribers() const
+    { linked_list_flush(mSubscribers); }
+
+    // private. Only a state gets to call this.
+    void notifySubscribers(Notification& notification) const;
+};
+
+// each subscriber is a AGPS client.  In the case of ATL, there could be
+// multiple clients from modem.  In the case of BIT, there is only one
+// cilent from BIT daemon.
+struct Subscriber {
+    const int ID;
+    const AgpsStateMachine* mStateMachine;
+    inline Subscriber(const int id,
+                      const AgpsStateMachine* stateMachine) :
+        ID(id), mStateMachine(stateMachine) {}
+    inline virtual ~Subscriber() {}
+
+    virtual void setIPAddresses(int &v4, char* v6) = 0;
+
+    inline virtual bool equals(const Subscriber *s) const
+    { return ID == s->ID; }
+
+    // notifies a subscriber a new NIF resource status, usually
+    // either GRANTE, DENIED, or RELEASED
+    virtual bool notifyRsrcStatus(Notification &notification) = 0;
+
+    virtual bool waitForCloseComplete() { return false; }
+    virtual void setInactive() {}
+    virtual bool isInactive() { return false; }
+
+    virtual Subscriber* clone() = 0;
+    // checks if this notification is for me, i.e.
+    // either has my id, or has a broadcast id.
+    bool forMe(Notification &notification);
+};
+
+// BITSubscriber, created with requests from BIT daemon
+struct BITSubscriber : public Subscriber {
+    inline BITSubscriber(const AgpsStateMachine* stateMachine,
+                         unsigned int ipv4, char* ipv6) :
+        Subscriber(ipv4, stateMachine)
+    {
+        if (NULL == ipv6) {
+            ipv6Addr[0] = NULL;
+        } else {
+            memcpy(ipv6Addr, ipv6, sizeof(ipv6Addr));
+        }
+    }
+
+    virtual bool notifyRsrcStatus(Notification &notification);
+
+    inline virtual void setIPAddresses(int &v4, char* v6)
+    { v4 = ID; memcpy(v6, ipv6Addr, sizeof(ipv6Addr)); }
+
+    virtual Subscriber* clone()
+    {
+        return new BITSubscriber(mStateMachine, ID, ipv6Addr);
+    }
+
+    virtual bool equals(const Subscriber *s) const;
+
+private:
+    char ipv6Addr[16];
+};
+
+// ATLSubscriber, created with requests from ATL
+struct ATLSubscriber : public Subscriber {
+    const LocApiAdapter* mLocAdapter;
+    inline ATLSubscriber(const int id,
+                         const AgpsStateMachine* stateMachine,
+                         const LocApiAdapter* adapter) :
+        Subscriber(id, stateMachine), mLocAdapter(adapter) {}
+    virtual bool notifyRsrcStatus(Notification &notification);
+
+    inline virtual void setIPAddresses(int &v4, char* v6)
+    { v4 = INADDR_NONE; v6[0] = 0; }
+
+    inline virtual Subscriber* clone()
+    {
+        return new ATLSubscriber(ID, mStateMachine, mLocAdapter);
+    }
+};
+
+#endif //__LOC_ENG_AGPS_H__
diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp b/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp
new file mode 100755
index 0000000..f2f9a50
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp
@@ -0,0 +1,180 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <linux/stat.h>
+#include <fcntl.h>
+#include <linux/types.h>
+#include <unistd.h>
+
+#include "log_util.h"
+
+#include "loc_eng_dmn_conn_glue_msg.h"
+#include "loc_eng_dmn_conn_handler.h"
+#include "loc_eng_dmn_conn.h"
+
+static int loc_api_server_msgqid;
+static int loc_api_resp_msgqid;
+
+static const char * global_loc_api_q_path = GPSONE_LOC_API_Q_PATH;
+static const char * global_loc_api_resp_q_path = GPSONE_LOC_API_RESP_Q_PATH;
+
+static int loc_api_server_proc_init(void *context)
+{
+    loc_api_server_msgqid = loc_eng_dmn_conn_glue_msgget(global_loc_api_q_path, O_RDWR);
+    loc_api_resp_msgqid = loc_eng_dmn_conn_glue_msgget(global_loc_api_resp_q_path, O_RDWR);
+
+    LOC_LOGD("%s:%d] loc_api_server_msgqid = %d\n", __func__, __LINE__, loc_api_server_msgqid);
+    return 0;
+}
+
+static int loc_api_server_proc_pre(void *context)
+{
+    return 0;
+}
+
+static int loc_api_server_proc(void *context)
+{
+    int length, sz;
+    int result = 0;
+    static int cnt = 0;
+    struct ctrl_msgbuf * p_cmsgbuf;
+    struct ctrl_msgbuf cmsg_resp;
+
+    sz = sizeof(struct ctrl_msgbuf) + 256;
+    p_cmsgbuf = (struct ctrl_msgbuf *) malloc(sz);
+
+    if (!p_cmsgbuf) {
+        LOC_LOGE("%s:%d] Out of memory\n", __func__, __LINE__);
+        return -1;
+    }
+
+    cnt ++;
+    LOC_LOGD("%s:%d] %d listening on %s...\n", __func__, __LINE__, cnt, (char *) context);
+    length = loc_eng_dmn_conn_glue_msgrcv(loc_api_server_msgqid, p_cmsgbuf, sz);
+    if (length <= 0) {
+        LOC_LOGE("%s:%d] fail receiving msg from gpsone_daemon, retry later\n", __func__, __LINE__);
+        usleep(1000);
+        return 0;
+    }
+
+    LOC_LOGD("%s:%d] received ctrl_type = %d\n", __func__, __LINE__, p_cmsgbuf->ctrl_type);
+    switch(p_cmsgbuf->ctrl_type) {
+        case GPSONE_LOC_API_IF_REQUEST:
+            result = loc_eng_dmn_conn_loc_api_server_if_request_handler(p_cmsgbuf, length);
+            break;
+
+        case GPSONE_LOC_API_IF_RELEASE:
+            result = loc_eng_dmn_conn_loc_api_server_if_release_handler(p_cmsgbuf, length);
+            break;
+
+        case GPSONE_UNBLOCK:
+            LOC_LOGD("%s:%d] GPSONE_UNBLOCK\n", __func__, __LINE__);
+            break;
+
+        default:
+            LOC_LOGE("%s:%d] unsupported ctrl_type = %d\n",
+                __func__, __LINE__, p_cmsgbuf->ctrl_type);
+            break;
+    }
+
+    free(p_cmsgbuf);
+    return 0;
+}
+
+static int loc_api_server_proc_post(void *context)
+{
+    LOC_LOGD("%s:%d]\n", __func__, __LINE__);
+    loc_eng_dmn_conn_glue_msgremove( global_loc_api_q_path, loc_api_server_msgqid);
+    loc_eng_dmn_conn_glue_msgremove( global_loc_api_resp_q_path, loc_api_resp_msgqid);
+    return 0;
+}
+
+static int loc_eng_dmn_conn_unblock_proc(void)
+{
+    struct ctrl_msgbuf cmsgbuf;
+    cmsgbuf.ctrl_type = GPSONE_UNBLOCK;
+    LOC_LOGD("%s:%d]\n", __func__, __LINE__);
+    loc_eng_dmn_conn_glue_msgsnd(loc_api_server_msgqid, & cmsgbuf, sizeof(cmsgbuf));
+    return 0;
+}
+
+static struct loc_eng_dmn_conn_thelper thelper;
+
+int loc_eng_dmn_conn_loc_api_server_launch(thelper_create_thread   create_thread_cb,
+    const char * loc_api_q_path, const char * resp_q_path, void *agps_handle)
+{
+    int result;
+
+    loc_api_handle = agps_handle;
+
+    if (loc_api_q_path) global_loc_api_q_path = loc_api_q_path;
+    if (resp_q_path)    global_loc_api_resp_q_path = resp_q_path;
+
+    result = loc_eng_dmn_conn_launch_thelper( &thelper,
+        loc_api_server_proc_init,
+        loc_api_server_proc_pre,
+        loc_api_server_proc,
+        loc_api_server_proc_post,
+        create_thread_cb,
+        (char *) global_loc_api_q_path);
+    if (result != 0) {
+        LOC_LOGE("%s:%d]\n", __func__, __LINE__);
+        return -1;
+    }
+    return 0;
+}
+
+int loc_eng_dmn_conn_loc_api_server_unblock(void)
+{
+    loc_eng_dmn_conn_unblock_thelper(&thelper);
+    loc_eng_dmn_conn_unblock_proc();
+    return 0;
+}
+
+int loc_eng_dmn_conn_loc_api_server_join(void)
+{
+    loc_eng_dmn_conn_join_thelper(&thelper);
+    return 0;
+}
+
+int loc_eng_dmn_conn_loc_api_server_data_conn(int status) {
+  struct ctrl_msgbuf cmsgbuf;
+  cmsgbuf.ctrl_type = GPSONE_LOC_API_RESPONSE;
+  cmsgbuf.cmsg.cmsg_response.result = status;
+  LOC_LOGD("%s:%d] status = %d",__func__, __LINE__, status);
+  if (loc_eng_dmn_conn_glue_msgsnd(loc_api_resp_msgqid, & cmsgbuf, sizeof(struct ctrl_msgbuf)) < 0) {
+    LOC_LOGD("%s:%d] error! conn_glue_msgsnd failed\n", __func__, __LINE__);
+    return -1;
+  }
+  return 0;
+
+}
+
diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn.h b/loc_api/libloc_api_50001/loc_eng_dmn_conn.h
new file mode 100755
index 0000000..414fd55
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn.h
@@ -0,0 +1,53 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#ifndef LOC_ENG_DATA_SERVER_H
+#define LOC_ENG_DATA_SERVER_H
+
+#include "loc_eng_dmn_conn_thread_helper.h"
+
+#ifdef _ANDROID_
+
+#define GPSONE_LOC_API_Q_PATH "/data/misc/gpsone_d/gpsone_loc_api_q"
+#define GPSONE_LOC_API_RESP_Q_PATH "/data/misc/gpsone_d/gpsone_loc_api_resp_q"
+
+#else
+
+#define GPSONE_LOC_API_Q_PATH "/tmp/gpsone_loc_api_q"
+#define GPSONE_LOC_API_RESP_Q_PATH "/tmp/gpsone_loc_api_resp_q"
+
+#endif
+
+int loc_eng_dmn_conn_loc_api_server_launch(thelper_create_thread   create_thread_cb,
+    const char * loc_api_q_path, const char * ctrl_q_path, void *agps_handle);
+int loc_eng_dmn_conn_loc_api_server_unblock(void);
+int loc_eng_dmn_conn_loc_api_server_join(void);
+int loc_eng_dmn_conn_loc_api_server_data_conn(int);
+
+#endif /* LOC_ENG_DATA_SERVER_H */
+
diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c
new file mode 100755
index 0000000..9cd1922
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c
@@ -0,0 +1,223 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#include <linux/stat.h>
+#include <fcntl.h>
+
+#include <linux/types.h>
+
+#include "log_util.h"
+
+#include "loc_eng_dmn_conn_glue_msg.h"
+#include "loc_eng_dmn_conn_handler.h"
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_glue_msgget
+
+DESCRIPTION
+   This function get a message queue
+
+   q_path - name path of the message queue
+   mode -
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   message queue id
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_glue_msgget(const char * q_path, int mode)
+{
+    int msgqid;
+    msgqid = loc_eng_dmn_conn_glue_pipeget(q_path, mode);
+    return msgqid;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_glue_msgremove
+
+DESCRIPTION
+   remove a message queue
+
+   q_path - name path of the message queue
+   msgqid - message queue id
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_glue_msgremove(const char * q_path, int msgqid)
+{
+    int result;
+    result = loc_eng_dmn_conn_glue_piperemove(q_path, msgqid);
+    return result;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_glue_msgsnd
+
+DESCRIPTION
+   Send a message
+
+   msgqid - message queue id
+   msgp - pointer to the message to be sent
+   msgsz - size of the message
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   number of bytes sent out or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_glue_msgsnd(int msgqid, const void * msgp, size_t msgsz)
+{
+    int result;
+    struct ctrl_msgbuf *pmsg = (struct ctrl_msgbuf *) msgp;
+    pmsg->msgsz = msgsz;
+
+    result = loc_eng_dmn_conn_glue_pipewrite(msgqid, msgp, msgsz);
+    if (result != (int) msgsz) {
+        LOC_LOGE("%s:%d] pipe broken %d, msgsz = %d\n", __func__, __LINE__, result, (int) msgsz);
+        return -1;
+    }
+
+    return result;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_glue_msgrcv
+
+DESCRIPTION
+   receive a message
+
+   msgqid - message queue id
+   msgp - pointer to the buffer to hold the message
+   msgsz - size of the buffer
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   number of bytes received or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_glue_msgrcv(int msgqid, void *msgp, size_t msgbufsz)
+{
+    int result;
+    struct ctrl_msgbuf *pmsg = (struct ctrl_msgbuf *) msgp;
+
+    result = loc_eng_dmn_conn_glue_piperead(msgqid, &(pmsg->msgsz), sizeof(pmsg->msgsz));
+    if (result != sizeof(pmsg->msgsz)) {
+        LOC_LOGE("%s:%d] pipe broken %d\n", __func__, __LINE__, result);
+        return -1;
+    }
+
+    if (msgbufsz < pmsg->msgsz) {
+        LOC_LOGE("%s:%d] msgbuf is too small %d < %d\n", __func__, __LINE__, (int) msgbufsz, (int) pmsg->msgsz);
+        return -1;
+    }
+
+    result = loc_eng_dmn_conn_glue_piperead(msgqid, (uint8_t *) msgp + sizeof(pmsg->msgsz), pmsg->msgsz - sizeof(pmsg->msgsz));
+    if (result != (int) (pmsg->msgsz - sizeof(pmsg->msgsz))) {
+        LOC_LOGE("%s:%d] pipe broken %d, msgsz = %d\n", __func__, __LINE__, result, (int) pmsg->msgsz);
+        return -1;
+    }
+
+    return pmsg->msgsz;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_glue_msgunblock
+
+DESCRIPTION
+   unblock a message queue
+
+   msgqid - message queue id
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_glue_msgunblock(int msgqid)
+{
+    return loc_eng_dmn_conn_glue_pipeunblock(msgqid);
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_glue_msgflush
+
+DESCRIPTION
+   flush out the message in a queue
+
+   msgqid - message queue id
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   number of bytes that are flushed out.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_glue_msgflush(int msgqid)
+{
+    int length;
+    char buf[128];
+
+    do {
+        length = loc_eng_dmn_conn_glue_piperead(msgqid, buf, 128);
+        LOC_LOGD("%s:%d] %s\n", __func__, __LINE__, buf);
+    } while(length);
+    return length;
+}
+
diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.h b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.h
new file mode 100755
index 0000000..8bc6f2a
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.h
@@ -0,0 +1,51 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#ifndef LOC_ENG_DMN_CONN_GLUE_MSG_H
+#define LOC_ENG_DMN_CONN_GLUE_MSG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+#include <linux/types.h>
+#include "loc_eng_dmn_conn_glue_pipe.h"
+
+int loc_eng_dmn_conn_glue_msgget(const char * q_path, int mode);
+int loc_eng_dmn_conn_glue_msgremove(const char * q_path, int msgqid);
+int loc_eng_dmn_conn_glue_msgsnd(int msgqid, const void * msgp, size_t msgsz);
+int loc_eng_dmn_conn_glue_msgrcv(int msgqid, void *msgp, size_t msgsz);
+int loc_eng_dmn_conn_glue_msgflush(int msgqid);
+int loc_eng_dmn_conn_glue_msgunblock(int msgqid);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LOC_ENG_DMN_CONN_GLUE_MSG_H */
diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c
new file mode 100755
index 0000000..7476908
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c
@@ -0,0 +1,206 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+// #include <linux/stat.h>
+#include <fcntl.h>
+// #include <linux/types.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "loc_eng_dmn_conn_glue_pipe.h"
+#include "log_util.h"
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_glue_pipeget
+
+DESCRIPTION
+   create a named pipe.
+
+   pipe_name - pipe name path
+   mode - mode
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_glue_pipeget(const char * pipe_name, int mode)
+{
+    int fd;
+    int result;
+
+    LOC_LOGD("%s, mode = %d\n", pipe_name, mode);
+    result = mkfifo(pipe_name, 0666);
+
+    if ((result == -1) && (errno != EEXIST)) {
+        LOC_LOGE("failed: %s\n", strerror(errno));
+        return result;
+    }
+
+    fd = open(pipe_name, mode);
+    if (fd <= 0)
+    {
+        LOC_LOGE("failed: %s\n", strerror(errno));
+    }
+    LOC_LOGD("fd = %d, %s\n", fd, pipe_name);
+    return fd;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_glue_piperemove
+
+DESCRIPTION
+   remove a pipe
+
+    pipe_name - pipe name path
+    fd - fd for the pipe
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_glue_piperemove(const char * pipe_name, int fd)
+{
+    close(fd);
+    if (pipe_name) unlink(pipe_name);
+    LOC_LOGD("fd = %d, %s\n", fd, pipe_name);
+    return 0;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_glue_pipewrite
+
+DESCRIPTION
+   write to a pipe
+
+   fd - fd of a pipe
+   buf - buffer for the data to write
+   sz - size of the data in buffer
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   number of bytes written or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_glue_pipewrite(int fd, const void * buf, size_t sz)
+{
+    int result;
+
+    result = write(fd, buf, sz);
+
+    /* @todo check for non EINTR & EAGAIN, shall not do select again, select_tut Law 7) */
+
+    /* LOC_LOGD("fd = %d, buf = 0x%lx, size = %d, result = %d\n", fd, (long) buf, (int) sz, (int) result); */
+    return result;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_glue_piperead
+
+DESCRIPTION
+   read from a pipe
+
+   fd - fd for the pipe
+   buf - buffer to hold the data read from pipe
+   sz - size of the buffer
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   number of bytes read from pipe or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_glue_piperead(int fd, void * buf, size_t sz)
+{
+    int len;
+
+    len = read(fd, buf, sz);
+
+    /* @todo check for non EINTR & EAGAIN, shall not do select again, select_tut Law 7) */
+
+    /* LOC_LOGD("fd = %d, buf = 0x%lx, size = %d, len = %d\n", fd, (long) buf, (int) sz, len); */
+    return len;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_glue_pipeunblock
+
+DESCRIPTION
+   unblock a pipe
+
+   fd - fd for the pipe
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0 for success or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_glue_pipeunblock(int fd)
+{
+    int result;
+    struct flock flock_v;
+    LOC_LOGD("\n");
+//    result = fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NDELAY);
+    flock_v.l_type = F_UNLCK;
+    flock_v.l_len = 32;
+    result = fcntl(fd, F_SETLK, &flock_v);
+    if (result < 0) {
+        LOC_LOGE("fcntl failure, %s\n", strerror(errno));
+    }
+
+    return result;
+}
diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.h b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.h
new file mode 100755
index 0000000..3136e41
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.h
@@ -0,0 +1,50 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#ifndef LOC_ENG_DMN_CONN_GLUE_PIPE_H
+#define LOC_ENG_DMN_CONN_GLUE_PIPE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <linux/types.h>
+
+int loc_eng_dmn_conn_glue_pipeget(const char * pipe_name, int mode);
+int loc_eng_dmn_conn_glue_piperemove(const char * pipe_name, int fd);
+int loc_eng_dmn_conn_glue_pipewrite(int fd, const void * buf, size_t sz);
+int loc_eng_dmn_conn_glue_piperead(int fd, void * buf, size_t sz);
+
+int loc_eng_dmn_conn_glue_pipeflush(int fd);
+int loc_eng_dmn_conn_glue_pipeunblock(int fd);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LOC_ENG_DMN_CONN_GLUE_PIPE_H */
diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp b/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp
new file mode 100755
index 0000000..fd15f00
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp
@@ -0,0 +1,78 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "log_util.h"
+#include "loc_eng_msg.h"
+#include "loc_eng_dmn_conn.h"
+#include "loc_eng_dmn_conn_handler.h"
+
+void* loc_api_handle = NULL;
+
+int loc_eng_dmn_conn_loc_api_server_if_request_handler(struct ctrl_msgbuf *pmsg, int len)
+{
+    LOC_LOGD("%s:%d]\n", __func__, __LINE__);
+#ifndef DEBUG_DMN_LOC_API
+    if (NULL == loc_api_handle) {
+        LOC_LOGE("%s:%d] NO agps data handle\n", __func__, __LINE__);
+        return 1;
+    }
+
+    loc_eng_msg_request_bit *msg(
+        new loc_eng_msg_request_bit(loc_api_handle,
+                                    pmsg->cmsg.cmsg_if_request.is_supl,
+                                    pmsg->cmsg.cmsg_if_request.ipv4_addr,
+                                    (char*)pmsg->cmsg.cmsg_if_request.ipv6_addr));
+    loc_eng_msg_sender(loc_api_handle, msg);
+
+#else
+   loc_eng_dmn_conn_loc_api_server_data_conn(GPSONE_LOC_API_IF_REQUEST_SUCCESS);
+#endif
+    return 0;
+}
+
+int loc_eng_dmn_conn_loc_api_server_if_release_handler(struct ctrl_msgbuf *pmsg, int len)
+{
+    LOC_LOGD("%s:%d]\n", __func__, __LINE__);
+#ifndef DEBUG_DMN_LOC_API
+    loc_eng_msg_release_bit *msg(
+            new loc_eng_msg_release_bit(loc_api_handle,
+                                        pmsg->cmsg.cmsg_if_request.is_supl,
+                                        pmsg->cmsg.cmsg_if_request.ipv4_addr,
+                                        (char*)pmsg->cmsg.cmsg_if_request.ipv6_addr));
+        loc_eng_msg_sender(loc_api_handle, msg);
+#else
+   loc_eng_dmn_conn_loc_api_server_data_conn(GPSONE_LOC_API_IF_RELEASE_SUCCESS);
+#endif
+    return 0;
+}
+
diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.h b/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.h
new file mode 100755
index 0000000..833e971
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.h
@@ -0,0 +1,82 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#ifndef LOC_ENG_DATA_SERVER_HANDLER
+#define LOC_ENG_DATA_SERVER_HANDLER
+
+#include <linux/types.h>
+#include <arpa/inet.h>
+
+enum {
+    /* 0x0 - 0xEF is reserved for daemon internal */
+    GPSONE_LOC_API_IF_REQUEST   = 0xF0,
+    GPSONE_LOC_API_IF_RELEASE,
+    GPSONE_LOC_API_RESPONSE,
+    GPSONE_UNBLOCK,
+};
+
+enum {
+    GPSONE_LOC_API_IF_REQUEST_SUCCESS = 0xF0,
+    GPSONE_LOC_API_IF_RELEASE_SUCCESS,
+    GPSONE_LOC_API_IF_FAILURE,
+};
+
+
+struct ctrl_msg_response {
+    int result;
+};
+
+struct ctrl_msg_unblock {
+    int reserved;
+};
+
+struct ctrl_msg_if_request {
+    unsigned is_supl; /* 1: use Android SUPL connection; 0: use Android default internet connection */
+    unsigned long ipv4_addr;
+    unsigned char ipv6_addr[16];
+};
+
+/* do not change this structure */
+struct ctrl_msgbuf {
+    size_t msgsz;
+    uint16_t reserved1;
+    uint32_t reserved2;
+    uint8_t ctrl_type;
+    union {
+        struct ctrl_msg_response   cmsg_response;
+        struct ctrl_msg_unblock    cmsg_unblock;
+        struct ctrl_msg_if_request cmsg_if_request;
+    } cmsg;
+};
+
+extern void* loc_api_handle;
+
+int loc_eng_dmn_conn_loc_api_server_if_request_handler(struct ctrl_msgbuf *pmsg, int len);
+int loc_eng_dmn_conn_loc_api_server_if_release_handler(struct ctrl_msgbuf *pmsg, int len);
+
+#endif /* LOC_ENG_DATA_SERVER_HANDLER */
diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c b/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c
new file mode 100755
index 0000000..478b686
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c
@@ -0,0 +1,398 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#include <stdio.h>
+
+#include "log_util.h"
+#include "loc_eng_dmn_conn_thread_helper.h"
+
+/*===========================================================================
+FUNCTION    thelper_signal_init
+
+DESCRIPTION
+   This function will initialize the conditional variable resources.
+
+   thelper - thelper instance
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int thelper_signal_init(struct loc_eng_dmn_conn_thelper * thelper)
+{
+    int result;
+    thelper->thread_exit  = 0;
+    thelper->thread_ready = 0;
+    result = pthread_cond_init( &thelper->thread_cond, NULL);
+    if (result) {
+        return result;
+    }
+
+    result = pthread_mutex_init(&thelper->thread_mutex, NULL);
+    if (result) {
+        pthread_cond_destroy(&thelper->thread_cond);
+    }
+    return result;
+}
+
+/*===========================================================================
+FUNCTION
+
+DESCRIPTION
+   This function will destroy the conditional variable resources
+
+    thelper - pointer to thelper instance
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int thelper_signal_destroy(struct loc_eng_dmn_conn_thelper * thelper)
+{
+    int result, ret_result = 0;
+    result = pthread_cond_destroy( &thelper->thread_cond);
+    if (result) {
+        ret_result = result;
+    }
+
+    result = pthread_mutex_destroy(&thelper->thread_mutex);
+    if (result) {
+        ret_result = result;
+    }
+
+    return ret_result;
+}
+
+/*===========================================================================
+FUNCTION    thelper_signal_wait
+
+DESCRIPTION
+   This function will be blocked on the conditional variable until thelper_signal_ready
+   is called
+
+    thelper - pointer to thelper instance
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int thelper_signal_wait(struct loc_eng_dmn_conn_thelper * thelper)
+{
+    int result = 0;
+
+    pthread_mutex_lock(&thelper->thread_mutex);
+    if (!thelper->thread_ready && !thelper->thread_exit) {
+        result = pthread_cond_wait(&thelper->thread_cond, &thelper->thread_mutex);
+    }
+
+    if (thelper->thread_exit) {
+        result = -1;
+    }
+    pthread_mutex_unlock(&thelper->thread_mutex);
+
+    return result;
+}
+
+/*===========================================================================
+FUNCTION     thelper_signal_ready
+
+DESCRIPTION
+   This function will wake up the conditional variable
+
+    thelper - pointer to thelper instance
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int thelper_signal_ready(struct loc_eng_dmn_conn_thelper * thelper)
+{
+    int result;
+
+    LOC_LOGD("%s:%d] 0x%lx\n", __func__, __LINE__, (long) thelper);
+
+    pthread_mutex_lock(&thelper->thread_mutex);
+    thelper->thread_ready = 1;
+    result = pthread_cond_signal(&thelper->thread_cond);
+    pthread_mutex_unlock(&thelper->thread_mutex);
+
+    return result;
+}
+
+/*===========================================================================
+FUNCTION     thelper_signal_block
+
+DESCRIPTION
+   This function will set the thread ready to 0 to block the thelper_signal_wait
+
+    thelper - pointer to thelper instance
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   if thread_ready is set
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int thelper_signal_block(struct loc_eng_dmn_conn_thelper * thelper)
+{
+    int result = thelper->thread_ready;
+
+    LOC_LOGD("%s:%d] 0x%lx\n", __func__, __LINE__, (long) thelper);
+
+    pthread_mutex_lock(&thelper->thread_mutex);
+    thelper->thread_ready = 0;
+    pthread_mutex_unlock(&thelper->thread_mutex);
+
+    return result;
+}
+
+/*===========================================================================
+FUNCTION    thelper_main
+
+DESCRIPTION
+   This function is the main thread. It will be launched as a child thread
+
+    data - pointer to the instance
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   NULL
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void * thelper_main(void *data)
+{
+    int result = 0;
+    struct loc_eng_dmn_conn_thelper * thelper = (struct loc_eng_dmn_conn_thelper *) data;
+
+    if (thelper->thread_proc_init) {
+        result = thelper->thread_proc_init(thelper->thread_context);
+        if (result < 0) {
+            thelper->thread_exit = 1;
+            thelper_signal_ready(thelper);
+            LOC_LOGE("%s:%d] error: 0x%lx\n", __func__, __LINE__, (long) thelper);
+            return NULL;
+        }
+    }
+
+    thelper_signal_ready(thelper);
+
+    if (thelper->thread_proc_pre) {
+        result = thelper->thread_proc_pre(thelper->thread_context);
+        if (result < 0) {
+            thelper->thread_exit = 1;
+            LOC_LOGE("%s:%d] error: 0x%lx\n", __func__, __LINE__, (long) thelper);
+            return NULL;
+        }
+    }
+
+    do {
+        if (thelper->thread_proc) {
+            result = thelper->thread_proc(thelper->thread_context);
+            if (result < 0) {
+                thelper->thread_exit = 1;
+                LOC_LOGE("%s:%d] error: 0x%lx\n", __func__, __LINE__, (long) thelper);
+            }
+        }
+    } while (thelper->thread_exit == 0);
+
+    if (thelper->thread_proc_post) {
+        result = thelper->thread_proc_post(thelper->thread_context);
+    }
+
+    if (result != 0) {
+        LOC_LOGE("%s:%d] error: 0x%lx\n", __func__, __LINE__, (long) thelper);
+    }
+    return NULL;
+}
+
+static void thelper_main_2(void *data)
+{
+    thelper_main(data);
+    return;
+}
+
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_launch_thelper
+
+DESCRIPTION
+   This function will initialize the thread context and launch the thelper_main
+
+    thelper - pointer to thelper instance
+    thread_proc_init - The initialization function pointer
+    thread_proc_pre  - The function to call before task loop and after initialization
+    thread_proc      - The task loop
+    thread_proc_post - The function to call after the task loop
+    context          - the context for the above four functions
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_launch_thelper(struct loc_eng_dmn_conn_thelper * thelper,
+    int (*thread_proc_init) (void * context),
+    int (*thread_proc_pre) (void * context),
+    int (*thread_proc) (void * context),
+    int (*thread_proc_post) (void * context),
+    thelper_create_thread   create_thread_cb,
+    void * context)
+{
+    int result;
+
+    thelper_signal_init(thelper);
+
+    if (context) {
+        thelper->thread_context    = context;
+    }
+
+    thelper->thread_proc_init  = thread_proc_init;
+    thelper->thread_proc_pre   = thread_proc_pre;
+    thelper->thread_proc       = thread_proc;
+    thelper->thread_proc_post  = thread_proc_post;
+
+    LOC_LOGD("%s:%d] 0x%lx call pthread_create\n", __func__, __LINE__, (long) thelper);
+    if (create_thread_cb) {
+        result = 0;
+        thelper->thread_id = create_thread_cb("loc_eng_dmn_conn",
+            thelper_main_2, (void *)thelper);
+    } else {
+        result = pthread_create(&thelper->thread_id, NULL,
+            thelper_main, (void *)thelper);
+    }
+
+    if (result != 0) {
+        LOC_LOGE("%s:%d] 0x%lx\n", __func__, __LINE__, (long) thelper);
+        return -1;
+    }
+
+    LOC_LOGD("%s:%d] 0x%lx pthread_create done\n", __func__, __LINE__, (long) thelper);
+
+    thelper_signal_wait(thelper);
+
+    LOC_LOGD("%s:%d] 0x%lx pthread ready\n", __func__, __LINE__, (long) thelper);
+    return thelper->thread_exit;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_unblock_thelper
+
+DESCRIPTION
+   This function unblocks thelper_main to release the thread
+
+    thelper - pointer to thelper instance
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_unblock_thelper(struct loc_eng_dmn_conn_thelper * thelper)
+{
+    LOC_LOGD("%s:%d] 0x%lx\n", __func__, __LINE__, (long) thelper);
+    thelper->thread_exit = 1;
+    return 0;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_dmn_conn_join_thelper
+
+    thelper - pointer to thelper instance
+
+DESCRIPTION
+   This function will wait for the thread of thelper_main to finish
+
+DEPENDENCIES
+   None
+
+RETURN VALUE
+   0: success or negative value for failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_dmn_conn_join_thelper(struct loc_eng_dmn_conn_thelper * thelper)
+{
+    int result;
+
+    LOC_LOGD("%s:%d] 0x%lx\n", __func__, __LINE__, (long) thelper);
+    result = pthread_join(thelper->thread_id, NULL);
+    if (result != 0) {
+        LOC_LOGE("%s:%d] 0x%lx\n", __func__, __LINE__, (long) thelper);
+    }
+    LOC_LOGD("%s:%d] 0x%lx\n", __func__, __LINE__, (long) thelper);
+
+    thelper_signal_destroy(thelper);
+
+    return result;
+}
+
diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.h b/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.h
new file mode 100755
index 0000000..07869f9
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.h
@@ -0,0 +1,74 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#ifndef __LOC_ENG_DMN_CONN_THREAD_HELPER_H__
+#define __LOC_ENG_DMN_CONN_THREAD_HELPER_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <pthread.h>
+
+struct loc_eng_dmn_conn_thelper {
+    unsigned char   thread_exit;
+    unsigned char   thread_ready;
+    pthread_cond_t  thread_cond;
+    pthread_mutex_t thread_mutex;
+    pthread_t       thread_id;
+    void *          thread_context;
+    int             (*thread_proc_init) (void * context);
+    int             (*thread_proc_pre)  (void * context);
+    int             (*thread_proc)      (void * context);
+    int             (*thread_proc_post) (void * context);
+};
+
+typedef pthread_t (* thelper_create_thread)(const char* name, void (*start)(void *), void* arg);
+int loc_eng_dmn_conn_launch_thelper(struct loc_eng_dmn_conn_thelper * thelper,
+    int (*thread_proc_init) (void * context),
+    int (*thread_proc_pre)  (void * context),
+    int (*thread_proc)      (void * context),
+    int (*thread_proc_post) (void * context),
+    thelper_create_thread   create_thread_cb,
+    void * context);
+
+int loc_eng_dmn_conn_unblock_thelper(struct loc_eng_dmn_conn_thelper * thelper);
+int loc_eng_dmn_conn_join_thelper(struct loc_eng_dmn_conn_thelper * thelper);
+
+/* if only need to use signal */
+int thelper_signal_init(struct loc_eng_dmn_conn_thelper * thelper);
+int thelper_signal_destroy(struct loc_eng_dmn_conn_thelper * thelper);
+int thelper_signal_wait(struct loc_eng_dmn_conn_thelper * thelper);
+int thelper_signal_ready(struct loc_eng_dmn_conn_thelper * thelper);
+int thelper_signal_block(struct loc_eng_dmn_conn_thelper * thelper);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LOC_ENG_DMN_CONN_THREAD_HELPER_H__ */
diff --git a/loc_api/libloc_api_50001/loc_eng_log.cpp b/loc_api/libloc_api_50001/loc_eng_log.cpp
new file mode 100755
index 0000000..d813cd6
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_log.cpp
@@ -0,0 +1,292 @@
+/* Copyright (c) 2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
+#define LOG_TAG "LocSvc_eng"
+
+#include "hardware/gps.h"
+#include "loc.h"
+#include "loc_log.h"
+#include "loc_eng_log.h"
+#include "loc_eng_msg_id.h"
+
+/* GPS status names */
+static loc_name_val_s_type gps_status_name[] =
+{
+    NAME_VAL( GPS_STATUS_NONE ),
+    NAME_VAL( GPS_STATUS_SESSION_BEGIN ),
+    NAME_VAL( GPS_STATUS_SESSION_END ),
+    NAME_VAL( GPS_STATUS_ENGINE_ON ),
+    NAME_VAL( GPS_STATUS_ENGINE_OFF ),
+};
+static int gps_status_num = sizeof(gps_status_name) / sizeof(loc_name_val_s_type);
+
+/* Find Android GPS status name */
+const char* loc_get_gps_status_name(GpsStatusValue gps_status)
+{
+   return loc_get_name_from_val(gps_status_name, gps_status_num,
+         (long) gps_status);
+}
+
+
+
+static loc_name_val_s_type loc_eng_msgs[] =
+{
+    NAME_VAL( LOC_ENG_MSG_QUIT ),
+    NAME_VAL( LOC_ENG_MSG_ENGINE_DOWN ),
+    NAME_VAL( LOC_ENG_MSG_ENGINE_UP ),
+    NAME_VAL( LOC_ENG_MSG_START_FIX ),
+    NAME_VAL( LOC_ENG_MSG_STOP_FIX ),
+    NAME_VAL( LOC_ENG_MSG_SET_POSITION_MODE ),
+    NAME_VAL( LOC_ENG_MSG_SET_TIME ),
+    NAME_VAL( LOC_ENG_MSG_INJECT_XTRA_DATA ),
+    NAME_VAL( LOC_ENG_MSG_INJECT_LOCATION ),
+    NAME_VAL( LOC_ENG_MSG_DELETE_AIDING_DATA ),
+    NAME_VAL( LOC_ENG_MSG_SET_APN ),
+    NAME_VAL( LOC_ENG_MSG_SET_SERVER_URL ),
+    NAME_VAL( LOC_ENG_MSG_SET_SERVER_IPV4 ),
+    NAME_VAL( LOC_ENG_MSG_ENABLE_DATA ),
+    NAME_VAL( LOC_ENG_MSG_SUPL_VERSION ),
+    NAME_VAL( LOC_ENG_MSG_SET_SENSOR_CONTROL_CONFIG ),
+    NAME_VAL( LOC_ENG_MSG_SET_SENSOR_PROPERTIES ),
+    NAME_VAL( LOC_ENG_MSG_SET_SENSOR_PERF_CONTROL_CONFIG ),
+    NAME_VAL( LOC_ENG_MSG_MUTE_SESSION ),
+    NAME_VAL( LOC_ENG_MSG_ATL_OPEN_SUCCESS ),
+    NAME_VAL( LOC_ENG_MSG_ATL_CLOSED ),
+    NAME_VAL( LOC_ENG_MSG_ATL_OPEN_FAILED ),
+    NAME_VAL( LOC_ENG_MSG_REPORT_POSITION ),
+    NAME_VAL( LOC_ENG_MSG_REPORT_SV ),
+    NAME_VAL( LOC_ENG_MSG_REPORT_STATUS ),
+    NAME_VAL( LOC_ENG_MSG_REPORT_NMEA ),
+    NAME_VAL( LOC_ENG_MSG_REQUEST_ATL ),
+    NAME_VAL( LOC_ENG_MSG_RELEASE_ATL ),
+    NAME_VAL( LOC_ENG_MSG_REQUEST_BIT ),
+    NAME_VAL( LOC_ENG_MSG_RELEASE_BIT ),
+    NAME_VAL( LOC_ENG_MSG_REQUEST_NI ),
+    NAME_VAL( LOC_ENG_MSG_INFORM_NI_RESPONSE ),
+    NAME_VAL( LOC_ENG_MSG_REQUEST_XTRA_DATA ),
+    NAME_VAL( LOC_ENG_MSG_REQUEST_TIME )
+};
+static int loc_eng_msgs_num = sizeof(loc_eng_msgs) / sizeof(loc_name_val_s_type);
+
+/* Find Android GPS status name */
+const char* loc_get_msg_name(int id)
+{
+   return loc_get_name_from_val(loc_eng_msgs, loc_eng_msgs_num, (long) id);
+}
+
+
+
+static loc_name_val_s_type loc_eng_position_modes[] =
+{
+    NAME_VAL( LOC_POSITION_MODE_STANDALONE ),
+    NAME_VAL( LOC_POSITION_MODE_MS_BASED ),
+    NAME_VAL( LOC_POSITION_MODE_MS_ASSISTED ),
+    NAME_VAL( LOC_POSITION_MODE_RESERVED_1 ),
+    NAME_VAL( LOC_POSITION_MODE_RESERVED_2 ),
+    NAME_VAL( LOC_POSITION_MODE_RESERVED_3 ),
+    NAME_VAL( LOC_POSITION_MODE_RESERVED_4 )
+};
+static int loc_eng_position_mode_num = sizeof(loc_eng_position_modes) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_position_mode_name(GpsPositionMode mode)
+{
+    return loc_get_name_from_val(loc_eng_position_modes, loc_eng_position_mode_num, (long) mode);
+}
+
+
+
+static loc_name_val_s_type loc_eng_position_recurrences[] =
+{
+    NAME_VAL( GPS_POSITION_RECURRENCE_PERIODIC ),
+    NAME_VAL( GPS_POSITION_RECURRENCE_SINGLE )
+};
+static int loc_eng_position_recurrence_num = sizeof(loc_eng_position_recurrences) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_position_recurrence_name(GpsPositionRecurrence recur)
+{
+    return loc_get_name_from_val(loc_eng_position_recurrences, loc_eng_position_recurrence_num, (long) recur);
+}
+
+
+
+static loc_name_val_s_type loc_eng_aiding_data_bits[] =
+{
+    NAME_VAL( GPS_DELETE_EPHEMERIS ),
+    NAME_VAL( GPS_DELETE_ALMANAC ),
+    NAME_VAL( GPS_DELETE_POSITION ),
+    NAME_VAL( GPS_DELETE_TIME ),
+    NAME_VAL( GPS_DELETE_IONO ),
+    NAME_VAL( GPS_DELETE_UTC ),
+    NAME_VAL( GPS_DELETE_HEALTH ),
+    NAME_VAL( GPS_DELETE_SVDIR ),
+    NAME_VAL( GPS_DELETE_SVSTEER ),
+    NAME_VAL( GPS_DELETE_SADATA ),
+    NAME_VAL( GPS_DELETE_RTI ),
+    NAME_VAL( GPS_DELETE_CELLDB_INFO )
+#ifdef QCOM_FEATURE_DELEXT
+    ,NAME_VAL( GPS_DELETE_ALMANAC_CORR ),
+    NAME_VAL( GPS_DELETE_FREQ_BIAS_EST ),
+    NAME_VAL( GPS_DELETE_EPHEMERIS_GLO ),
+    NAME_VAL( GPS_DELETE_ALMANAC_GLO ),
+    NAME_VAL( GPS_DELETE_SVDIR_GLO ),
+    NAME_VAL( GPS_DELETE_SVSTEER_GLO ),
+    NAME_VAL( GPS_DELETE_ALMANAC_CORR_GLO ),
+    NAME_VAL( GPS_DELETE_TIME_GPS ),
+    NAME_VAL( GPS_DELETE_TIME_GLO )
+#endif
+};
+static int loc_eng_aiding_data_bit_num = sizeof(loc_eng_aiding_data_bits) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_aiding_data_mask_names(GpsAidingData data)
+{
+    return NULL;
+}
+
+
+static loc_name_val_s_type loc_eng_agps_types[] =
+{
+#ifdef QCOM_FEATURE_IPV6
+    NAME_VAL( AGPS_TYPE_INVALID ),
+    NAME_VAL( AGPS_TYPE_ANY ),
+#endif
+    NAME_VAL( AGPS_TYPE_SUPL ),
+    NAME_VAL( AGPS_TYPE_C2K )
+#ifdef QCOM_FEATURE_IPV6
+    ,NAME_VAL( AGPS_TYPE_WWAN_ANY )
+#endif
+};
+static int loc_eng_agps_type_num = sizeof(loc_eng_agps_types) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_agps_type_name(AGpsType type)
+{
+    return loc_get_name_from_val(loc_eng_agps_types, loc_eng_agps_type_num, (long) type);
+}
+
+
+static loc_name_val_s_type loc_eng_ni_types[] =
+{
+    NAME_VAL( GPS_NI_TYPE_VOICE ),
+    NAME_VAL( GPS_NI_TYPE_UMTS_SUPL ),
+    NAME_VAL( GPS_NI_TYPE_UMTS_CTRL_PLANE )
+};
+static int loc_eng_ni_type_num = sizeof(loc_eng_ni_types) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_ni_type_name(GpsNiType type)
+{
+    return loc_get_name_from_val(loc_eng_ni_types, loc_eng_ni_type_num, (long) type);
+}
+
+
+static loc_name_val_s_type loc_eng_ni_responses[] =
+{
+    NAME_VAL( GPS_NI_RESPONSE_ACCEPT ),
+    NAME_VAL( GPS_NI_RESPONSE_DENY ),
+    NAME_VAL( GPS_NI_RESPONSE_DENY )
+};
+static int loc_eng_ni_reponse_num = sizeof(loc_eng_ni_responses) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_ni_response_name(GpsUserResponseType response)
+{
+    return loc_get_name_from_val(loc_eng_ni_responses, loc_eng_ni_reponse_num, (long) response);
+}
+
+
+static loc_name_val_s_type loc_eng_ni_encodings[] =
+{
+    NAME_VAL( GPS_ENC_NONE ),
+    NAME_VAL( GPS_ENC_SUPL_GSM_DEFAULT ),
+    NAME_VAL( GPS_ENC_SUPL_UTF8 ),
+    NAME_VAL( GPS_ENC_SUPL_UCS2 ),
+    NAME_VAL( GPS_ENC_UNKNOWN )
+};
+static int loc_eng_ni_encoding_num = sizeof(loc_eng_ni_encodings) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_ni_encoding_name(GpsNiEncodingType encoding)
+{
+    return loc_get_name_from_val(loc_eng_ni_encodings, loc_eng_ni_encoding_num, (long) encoding);
+}
+
+#ifdef QCOM_FEATURE_IPV6
+static loc_name_val_s_type loc_eng_agps_bears[] =
+{
+    NAME_VAL( AGPS_APN_BEARER_INVALID ),
+    NAME_VAL( AGPS_APN_BEARER_IPV4 ),
+    NAME_VAL( AGPS_APN_BEARER_IPV4 ),
+    NAME_VAL( AGPS_APN_BEARER_IPV4V6 )
+};
+static int loc_eng_agps_bears_num = sizeof(loc_eng_agps_bears) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_agps_bear_name(AGpsBearerType bearer)
+{
+    return loc_get_name_from_val(loc_eng_agps_bears, loc_eng_agps_bears_num, (long) bearer);
+}
+#endif
+
+static loc_name_val_s_type loc_eng_server_types[] =
+{
+    NAME_VAL( LOC_AGPS_CDMA_PDE_SERVER ),
+    NAME_VAL( LOC_AGPS_CUSTOM_PDE_SERVER ),
+    NAME_VAL( LOC_AGPS_MPC_SERVER ),
+    NAME_VAL( LOC_AGPS_SUPL_SERVER )
+};
+static int loc_eng_server_types_num = sizeof(loc_eng_server_types) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_server_type_name(LocServerType type)
+{
+    return loc_get_name_from_val(loc_eng_server_types, loc_eng_server_types_num, (long) type);
+}
+
+static loc_name_val_s_type loc_eng_position_sess_status_types[] =
+{
+    NAME_VAL( LOC_SESS_SUCCESS ),
+    NAME_VAL( LOC_SESS_INTERMEDIATE ),
+    NAME_VAL( LOC_SESS_FAILURE )
+};
+static int loc_eng_position_sess_status_num = sizeof(loc_eng_position_sess_status_types) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_position_sess_status_name(enum loc_sess_status status)
+{
+    return loc_get_name_from_val(loc_eng_position_sess_status_types, loc_eng_position_sess_status_num, (long) status);
+}
+
+static loc_name_val_s_type loc_eng_agps_status_names[] =
+{
+    NAME_VAL( GPS_REQUEST_AGPS_DATA_CONN ),
+    NAME_VAL( GPS_RELEASE_AGPS_DATA_CONN ),
+    NAME_VAL( GPS_AGPS_DATA_CONNECTED ),
+    NAME_VAL( GPS_AGPS_DATA_CONN_DONE ),
+    NAME_VAL( GPS_AGPS_DATA_CONN_FAILED )
+};
+static int loc_eng_agps_status_num = sizeof(loc_eng_agps_status_names) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_agps_status_name(AGpsStatusValue status)
+{
+    return loc_get_name_from_val(loc_eng_agps_status_names, loc_eng_agps_status_num, (long) status);
+}
diff --git a/loc_api/libloc_api_50001/loc_eng_log.h b/loc_api/libloc_api_50001/loc_eng_log.h
new file mode 100755
index 0000000..eff1593
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_log.h
@@ -0,0 +1,62 @@
+/* Copyright (c) 2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef LOC_ENG_LOG_H
+#define LOC_ENG_LOG_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <ctype.h>
+#include <hardware/gps.h>
+#include "loc_eng_msg_id.h"
+
+const char* loc_get_gps_status_name(GpsStatusValue gps_status);
+const char* loc_get_msg_name(int id);
+const char* loc_get_position_mode_name(GpsPositionMode mode);
+const char* loc_get_position_recurrence_name(GpsPositionRecurrence recur);
+const char* loc_get_aiding_data_mask_names(GpsAidingData data);
+const char* loc_get_agps_type_name(AGpsType type);
+const char* loc_get_ni_type_name(GpsNiType type);
+const char* loc_get_ni_response_name(GpsUserResponseType response);
+const char* loc_get_ni_encoding_name(GpsNiEncodingType encoding);
+#ifdef QCOM_FEATURE_IPV6
+const char* loc_get_agps_bear_name(AGpsBearerType bear);
+#endif
+const char* loc_get_server_type_name(LocServerType type);
+const char* loc_get_position_sess_status_name(enum loc_sess_status status);
+const char* loc_get_agps_status_name(AGpsStatusValue status);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_ENG_LOG_H */
diff --git a/loc_api/libloc_api_50001/loc_eng_msg.cpp b/loc_api/libloc_api_50001/loc_eng_msg.cpp
new file mode 100755
index 0000000..97c0457
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_msg.cpp
@@ -0,0 +1,133 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#include <fcntl.h>
+#include "loc_eng_msg.h"
+#include "loc_eng_dmn_conn_glue_msg.h"
+
+#ifdef _ANDROID_
+
+#define LOC_ENG_MSG_REQ_Q_PATH "/data/misc/gpsone_d/loc_eng_msg_req_q"
+
+#else
+
+#define LOC_ENG_MSG_REQ_Q_PATH "/tmp/loc_eng_msg_req_q"
+
+#endif
+
+int loc_eng_msgget(int * p_req_msgq)
+{
+    * p_req_msgq = loc_eng_dmn_conn_glue_msgget(LOC_ENG_MSG_REQ_Q_PATH, O_RDWR);
+    return 0;
+}
+
+int loc_eng_msgremove(int req_msgq)
+{
+    loc_eng_dmn_conn_glue_piperemove(LOC_ENG_MSG_REQ_Q_PATH, req_msgq);
+    return 0;
+}
+
+int loc_eng_msgsnd(int msgqid, void * msgp)
+{
+    int ret = loc_eng_dmn_conn_glue_pipewrite(msgqid, msgp, sizeof(void*));
+    return ret;
+}
+
+int loc_eng_msgsnd_raw(int msgqid, void * msgp, unsigned int msgsz)
+{
+    int result;
+
+    struct msgbuf * pmsg = (struct msgbuf *) msgp;
+
+    if (msgsz < sizeof(struct msgbuf)) {
+        LOC_LOGE("%s:%d] msgbuf is too small %d\n", __func__, __LINE__, msgsz);
+        return -1;
+    }
+
+    pmsg->msgsz = msgsz;
+
+    result = loc_eng_dmn_conn_glue_pipewrite(msgqid, msgp, msgsz);
+    if (result != (int) msgsz) {
+        LOC_LOGE("%s:%d] pipe broken %d, msgsz = %d\n", __func__, __LINE__, result, (int) msgsz);
+        return -1;
+    }
+    return result;
+}
+
+int loc_eng_msgrcv(int msgqid, void ** msgp)
+{
+    int ret = loc_eng_dmn_conn_glue_piperead(msgqid, msgp, sizeof(void*));
+    return ret;
+}
+
+int loc_eng_msgrcv_raw(int msgqid, void *msgp, unsigned int msgsz)
+{
+    int result;
+    struct msgbuf * pmsg = (struct msgbuf *) msgp;
+
+    if (msgsz < sizeof(struct msgbuf)) {
+        LOC_LOGE("%s:%d] msgbuf is too small %d\n", __func__, __LINE__, msgsz);
+        return -1;
+    }
+
+    result = loc_eng_dmn_conn_glue_piperead(msgqid, msgp, sizeof(struct msgbuf));
+    if (result != sizeof(struct msgbuf)) {
+        LOC_LOGE("%s:%d] pipe broken %d\n", __func__, __LINE__, result);
+        return -1;
+    }
+
+    if (msgsz < pmsg->msgsz) {
+        LOC_LOGE("%s:%d] msgbuf is too small %d < %d\n", __func__, __LINE__, (int) msgsz, (int) pmsg->msgsz);
+        return -1;
+    }
+
+    if (pmsg->msgsz > sizeof(struct msgbuf)) {
+        /* there is msg body */
+        msgp += sizeof(struct msgbuf);
+
+        result = loc_eng_dmn_conn_glue_piperead(msgqid, msgp, pmsg->msgsz - sizeof(struct msgbuf));
+
+        if (result != (int) (pmsg->msgsz - sizeof(struct msgbuf))) {
+            LOC_LOGE("%s:%d] pipe broken %d, msgid = %p, msgsz = %d\n", __func__, __LINE__, result,
+                    (pmsg->msgid), (int) pmsg->msgsz);
+            return -1;
+        }
+    }
+
+    return pmsg->msgsz;
+}
+
+int loc_eng_msgflush(int msgqid)
+{
+    return loc_eng_dmn_conn_glue_msgflush(msgqid);
+}
+
+int loc_eng_msgunblock(int msgqid)
+{
+    return loc_eng_dmn_conn_glue_pipeunblock(msgqid);
+}
diff --git a/loc_api/libloc_api_50001/loc_eng_msg.h b/loc_api/libloc_api_50001/loc_eng_msg.h
new file mode 100755
index 0000000..41548f0
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_msg.h
@@ -0,0 +1,584 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#ifndef LOC_ENG_MSG_H
+#define LOC_ENG_MSG_H
+
+
+#include <hardware/gps.h>
+#include <stdlib.h>
+#include <string.h>
+#include "log_util.h"
+#include "loc.h"
+#include "loc_eng_log.h"
+#include "loc_eng_msg_id.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+struct loc_eng_msg {
+    const void* owner;
+    const int msgid;
+    inline loc_eng_msg(void* instance, int id) :
+        owner(instance), msgid(id)
+    {
+        LOC_LOGV("creating msg %s", loc_get_msg_name(msgid));
+    }
+    virtual ~loc_eng_msg()
+    {
+        LOC_LOGV("deleting msg %s", loc_get_msg_name(msgid));
+    }
+};
+
+struct loc_eng_msg_suple_version : public loc_eng_msg {
+    const int supl_version;
+    inline loc_eng_msg_suple_version(void* instance, int version) :
+        loc_eng_msg(instance, LOC_ENG_MSG_SUPL_VERSION),
+        supl_version(version)
+        {
+            LOC_LOGV("SUPL Version: %d", version);
+        }
+};
+
+struct loc_eng_msg_sensor_control_config : public loc_eng_msg {
+    const int sensorsDisabled;
+    inline loc_eng_msg_sensor_control_config(void* instance, int disabled) :
+            loc_eng_msg(instance, LOC_ENG_MSG_SET_SENSOR_CONTROL_CONFIG),
+            sensorsDisabled(disabled)
+        {
+            LOC_LOGV("Sensors Disabled: %d", disabled);
+        }
+};
+
+struct loc_eng_msg_sensor_properties : public loc_eng_msg {
+    const float gyroBiasVarianceRandomWalk;
+    inline loc_eng_msg_sensor_properties(void* instance, float gyroBiasRandomWalk) :
+            loc_eng_msg(instance, LOC_ENG_MSG_SET_SENSOR_PROPERTIES),
+            gyroBiasVarianceRandomWalk(gyroBiasRandomWalk)
+        {
+            LOC_LOGV("Gyro Bias Random Walk: %f", gyroBiasRandomWalk);
+        }
+};
+
+struct loc_eng_msg_sensor_perf_control_config : public loc_eng_msg {
+    const int controlMode;
+    const int accelSamplesPerBatch;
+    const int accelBatchesPerSec;
+    const int gyroSamplesPerBatch;
+    const int gyroBatchesPerSec;
+    inline loc_eng_msg_sensor_perf_control_config(void* instance, int controlMode,
+                                                  int accelSamplesPerBatch, int accelBatchesPerSec,
+                                                  int gyroSamplesPerBatch, int gyroBatchesPerSec) :
+            loc_eng_msg(instance, LOC_ENG_MSG_SET_SENSOR_PERF_CONTROL_CONFIG),
+            controlMode(controlMode),
+            accelSamplesPerBatch(accelSamplesPerBatch),
+            accelBatchesPerSec(accelBatchesPerSec),
+            gyroSamplesPerBatch(gyroSamplesPerBatch),
+            gyroBatchesPerSec(gyroBatchesPerSec)
+        {
+            LOC_LOGV("Sensor Perf Control Config (performanceControlMode)(%u) "
+                "accel(#smp,#batches) (%u,%u) gyro(#smp,#batches) (%u,%u)\n",
+                controlMode,
+                accelSamplesPerBatch,
+                accelBatchesPerSec,
+                gyroSamplesPerBatch,
+                gyroBatchesPerSec
+                );
+        }
+};
+
+
+struct loc_eng_msg_position_mode : public loc_eng_msg {
+    const LocPositionMode pMode;
+    const GpsPositionRecurrence pRecurrence;
+    const uint32_t minInterval;
+    const uint32_t preferredAccuracy;
+    const uint32_t preferredTime;
+    inline loc_eng_msg_position_mode() :
+        loc_eng_msg(NULL, LOC_ENG_MSG_SET_POSITION_MODE),
+        pMode(LOC_POSITION_MODE_STANDALONE),
+        pRecurrence(0), minInterval(0),
+        preferredAccuracy(0), preferredTime(0) {}
+    inline loc_eng_msg_position_mode(void* instance,
+                                     LocPositionMode mode,
+                                     GpsPositionRecurrence recurrence,
+                                     uint32_t min_interval,
+                                     uint32_t preferred_accuracy,
+                                     uint32_t preferred_time) :
+        loc_eng_msg(instance, LOC_ENG_MSG_SET_POSITION_MODE),
+        pMode(mode), pRecurrence(recurrence), minInterval(min_interval),
+        preferredAccuracy(preferred_accuracy), preferredTime(preferred_time)
+    {
+        LOC_LOGV("Position mode: %s\n  Position recurrence: %s\n  min interval: %d\n  preferred accuracy: %d\n  preferred time: %d",
+                 loc_get_position_mode_name(pMode),
+                 loc_get_position_recurrence_name(pRecurrence),
+                 minInterval,
+                 preferredAccuracy,
+                 preferredTime);
+    }
+};
+
+struct loc_eng_msg_set_time : public loc_eng_msg {
+    const GpsUtcTime time;
+    const int64_t timeReference;
+    const int uncertainty;
+    inline loc_eng_msg_set_time(void* instance,
+                                GpsUtcTime t,
+                                int64_t tf,
+                                int unc) :
+        loc_eng_msg(instance, LOC_ENG_MSG_SET_TIME),
+        time(t), timeReference(tf), uncertainty(unc)
+    {
+        LOC_LOGV("time: %lld\n  timeReference: %lld\n  uncertainty: %d",
+                 time, timeReference, uncertainty);
+    }
+};
+
+struct loc_eng_msg_inject_location : public loc_eng_msg {
+    const double latitude;
+    const double longitude;
+    const float accuracy;
+    inline loc_eng_msg_inject_location(void* instance, double lat,
+                                       double longi, float accur) :
+        loc_eng_msg(instance, LOC_ENG_MSG_INJECT_LOCATION),
+        latitude(lat), longitude(longi), accuracy(accur)
+    {
+        LOC_LOGV("latitude: %f\n  longitude: %f\n  accuracy: %f",
+                 latitude, longitude, accuracy);
+    }
+};
+
+struct loc_eng_msg_delete_aiding_data : public loc_eng_msg {
+    const GpsAidingData type;
+    inline loc_eng_msg_delete_aiding_data(void* instance, GpsAidingData data) :
+        loc_eng_msg(instance, LOC_ENG_MSG_DELETE_AIDING_DATA), type(data)
+    {
+        LOC_LOGV("aiding data msak %d", type);
+    }
+};
+
+struct loc_eng_msg_report_position : public loc_eng_msg {
+    const GpsLocation location;
+    const void* locationExt;
+    const enum loc_sess_status status;
+    inline loc_eng_msg_report_position(void* instance, GpsLocation &loc, void* locExt,
+                                       enum loc_sess_status st) :
+        loc_eng_msg(instance, LOC_ENG_MSG_REPORT_POSITION),
+        location(loc), locationExt(locExt), status(st)
+    {
+#ifdef QCOM_FEATURE_ULP
+        LOC_LOGV("flags: %d\n  source: %d\n  latitude: %f\n  longitude: %f\n  altitude: %f\n  speed: %f\n  bearing: %f\n  accuracy: %f\n  timestamp: %lld\n  rawDataSize: %d\n  rawData: %p\n  Session status: %s",
+                 location.flags, location.position_source, location.latitude, location.longitude,
+                 location.altitude, location.speed, location.bearing, location.accuracy,
+                 location.timestamp, location.rawDataSize, location.rawData,
+                 loc_get_position_sess_status_name(status));
+#else
+        LOC_LOGV("flags: %d\n  latitude: %f\n  longitude: %f\n  altitude: %f\n  speed: %f\n  bearing: %f\n  accuracy: %f\n  timestamp: %lld\n  Session status: %s",
+                 location.flags, location.latitude, location.longitude,
+                 location.altitude, location.speed, location.bearing, location.accuracy,
+                 location.timestamp, loc_get_position_sess_status_name(status));
+#endif
+    }
+};
+
+struct loc_eng_msg_report_sv : public loc_eng_msg {
+    const GpsSvStatus svStatus;
+    const void* svExt;
+    inline loc_eng_msg_report_sv(void* instance, GpsSvStatus &sv, void* ext) :
+        loc_eng_msg(instance, LOC_ENG_MSG_REPORT_SV), svStatus(sv), svExt(ext)
+    {
+        LOC_LOGV("num sv: %d\n  ephemeris mask: %dxn  almanac mask: %x\n  used in fix mask: %x\n      sv: prn         snr       elevation      azimuth",
+                 svStatus.num_svs, svStatus.ephemeris_mask, svStatus.almanac_mask, svStatus.used_in_fix_mask);
+        for (int i = 0; i < svStatus.num_svs && i < GPS_MAX_SVS; i++) {
+            LOC_LOGV("   %d:   %d    %f    %f    %f\n  ",
+                     i,
+                     svStatus.sv_list[i].prn,
+                     svStatus.sv_list[i].snr,
+                     svStatus.sv_list[i].elevation,
+                     svStatus.sv_list[i].azimuth);
+        }
+    }
+};
+
+struct loc_eng_msg_report_status : public loc_eng_msg {
+    const GpsStatusValue status;
+    inline loc_eng_msg_report_status(void* instance, GpsStatusValue engineStatus) :
+        loc_eng_msg(instance, LOC_ENG_MSG_REPORT_STATUS), status(engineStatus)
+    {
+        LOC_LOGV("status: %s", loc_get_gps_status_name(status));
+    }
+};
+
+struct loc_eng_msg_report_nmea : public loc_eng_msg {
+    char* const nmea;
+    const int length;
+    inline loc_eng_msg_report_nmea(void* instance,
+                                   const char* data,
+                                   int len) :
+        loc_eng_msg(instance, LOC_ENG_MSG_REPORT_NMEA),
+        nmea(new char[len]), length(len)
+    {
+        memcpy((void*)nmea, (void*)data, len);
+        LOC_LOGV("length: %d\n  nmea: %p - %c%c%c",
+                 length, nmea, nmea[3], nmea[4], nmea[5]);
+    }
+    inline ~loc_eng_msg_report_nmea()
+    {
+        delete[] nmea;
+    }
+};
+
+struct loc_eng_msg_request_bit : public loc_eng_msg {
+    const unsigned int isSupl;
+    const int ipv4Addr;
+    char* const ipv6Addr;
+    inline loc_eng_msg_request_bit(void* instance,
+                                   unsigned int is_supl,
+                                   int ipv4,
+                                   char* ipv6) :
+        loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_BIT),
+        isSupl(is_supl), ipv4Addr(ipv4),
+        ipv6Addr(NULL == ipv6 ? NULL : new char[16])
+    {
+        if (NULL != ipv6Addr)
+            memcpy(ipv6Addr, ipv6, 16);
+        LOC_LOGV("isSupl: %d, ipv4: %d.%d.%d.%d, ipv6: %s", isSupl,
+                 (unsigned char)ipv4>>24,
+                 (unsigned char)ipv4>>16,
+                 (unsigned char)ipv4>>8,
+                 (unsigned char)ipv4,
+                 NULL != ipv6Addr ? ipv6Addr : "");
+    }
+
+    inline ~loc_eng_msg_request_bit()
+    {
+        if (NULL != ipv6Addr) {
+            delete[] ipv6Addr;
+        }
+    }
+};
+
+struct loc_eng_msg_release_bit : public loc_eng_msg {
+    const unsigned int isSupl;
+    const int ipv4Addr;
+    char* const ipv6Addr;
+    inline loc_eng_msg_release_bit(void* instance,
+                                   unsigned int is_supl,
+                                   int ipv4,
+                                   char* ipv6) :
+        loc_eng_msg(instance, LOC_ENG_MSG_RELEASE_BIT),
+        isSupl(is_supl), ipv4Addr(ipv4),
+        ipv6Addr(NULL == ipv6 ? NULL : new char[16])
+    {
+        if (NULL != ipv6Addr)
+            memcpy(ipv6Addr, ipv6, 16);
+        LOC_LOGV("isSupl: %d, ipv4: %d.%d.%d.%d, ipv6: %s", isSupl,
+                 (unsigned char)ipv4>>24,
+                 (unsigned char)ipv4>>16,
+                 (unsigned char)ipv4>>8,
+                 (unsigned char)ipv4,
+                 NULL != ipv6Addr ? ipv6Addr : "");
+    }
+
+    inline ~loc_eng_msg_release_bit()
+    {
+        if (NULL != ipv6Addr) {
+            delete[] ipv6Addr;
+        }
+    }
+};
+
+struct loc_eng_msg_request_atl : public loc_eng_msg {
+    const int handle;
+    const AGpsType type;
+    inline loc_eng_msg_request_atl(void* instance, int hndl,
+                                   AGpsType agps_type) :
+        loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_ATL),
+        handle(hndl), type(agps_type)
+    {
+        LOC_LOGV("handle: %d\n  agps type: %s",
+                 handle,
+                 loc_get_agps_type_name(type));
+    }
+};
+
+struct loc_eng_msg_release_atl : public loc_eng_msg {
+    const int handle;
+    inline loc_eng_msg_release_atl(void* instance, int hndl) :
+        loc_eng_msg(instance, LOC_ENG_MSG_RELEASE_ATL), handle(hndl)
+    {
+        LOC_LOGV("handle: %d", handle);
+    }
+};
+
+struct loc_eng_msg_request_ni : public loc_eng_msg {
+    const GpsNiNotification notify;
+    const void *passThroughData;
+    inline loc_eng_msg_request_ni(void* instance,
+                                  GpsNiNotification &notif, const void* data) :
+        loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_NI),
+        notify(notif), passThroughData(data)
+    {
+        LOC_LOGV("id: %d\n  type: %s\n  flags: %d\n  time out: %d\n  default response: %s\n  requestor id encoding: %s\n  text encoding: %s\n  passThroughData: %p",
+                 notify.notification_id,
+                 loc_get_ni_type_name(notify.ni_type),
+                 notify.notify_flags,
+                 notify.timeout,
+                 loc_get_ni_response_name(notify.default_response),
+                 loc_get_ni_encoding_name(notify.requestor_id_encoding),
+                 loc_get_ni_encoding_name(notify.text_encoding),
+                 passThroughData);
+    }
+};
+
+struct loc_eng_msg_inform_ni_response : public loc_eng_msg {
+    const GpsUserResponseType response;
+    const void *passThroughData;
+    inline loc_eng_msg_inform_ni_response(void* instance,
+                                          GpsUserResponseType resp,
+                                          const void* data) :
+        loc_eng_msg(instance, LOC_ENG_MSG_INFORM_NI_RESPONSE),
+        response(resp), passThroughData(data)
+    {
+        LOC_LOGV("response: %s\n  passThroughData: %p",
+                 loc_get_ni_response_name(response),
+                 passThroughData);
+    }
+    inline ~loc_eng_msg_inform_ni_response()
+    {
+        // this is a bit weird since passThroughData is not
+        // allocated by this class.  But there is no better way.
+        // passThroughData actually won't be NULL here.
+        // But better safer than sorry.
+        if (NULL != passThroughData) {
+            free((void*)passThroughData);
+        }
+    }
+};
+
+struct loc_eng_msg_set_apn : public loc_eng_msg {
+    char* const apn;
+    inline loc_eng_msg_set_apn(void* instance, const char* name, int len) :
+        loc_eng_msg(instance, LOC_ENG_MSG_SET_APN),
+        apn(new char[len+1])
+    {
+        memcpy((void*)apn, (void*)name, len);
+        apn[len] = 0;
+        LOC_LOGV("apn: %s", apn);
+    }
+    inline ~loc_eng_msg_set_apn()
+    {
+        delete[] apn;
+    }
+};
+
+
+
+struct loc_eng_msg_set_server_ipv4 : public loc_eng_msg {
+    const unsigned int nl_addr;
+    const int port;
+    const LocServerType serverType;
+    inline loc_eng_msg_set_server_ipv4(void* instance,
+                                       unsigned int ip,
+                                       int p,
+                                       LocServerType type) :
+        loc_eng_msg(instance, LOC_ENG_MSG_SET_SERVER_IPV4),
+        nl_addr(ip), port(p), serverType(type)
+    {
+        LOC_LOGV("addr: %x\n  , port: %d\n type: %s", nl_addr, port, loc_get_server_type_name(serverType));
+    }
+};
+
+
+struct loc_eng_msg_set_server_url : public loc_eng_msg {
+    const int len;
+    char* const url;
+    inline loc_eng_msg_set_server_url(void* instance,
+                                      const char* urlString,
+                                      int url_len) :
+        loc_eng_msg(instance, LOC_ENG_MSG_SET_SERVER_URL),
+        len(url_len), url(new char[len+1])
+    {
+        memcpy((void*)url, (void*)urlString, url_len);
+        url[len] = 0;
+        LOC_LOGV("url: %s", url);
+    }
+    inline ~loc_eng_msg_set_server_url()
+    {
+        delete[] url;
+    }
+};
+
+struct loc_eng_msg_inject_xtra_data : public loc_eng_msg {
+    char* const data;
+    const int length;
+    inline loc_eng_msg_inject_xtra_data(void* instance, char* d, int l) :
+        loc_eng_msg(instance, LOC_ENG_MSG_INJECT_XTRA_DATA),
+        data(new char[l]), length(l)
+    {
+        memcpy((void*)data, (void*)d, l);
+        LOC_LOGV("length: %d\n  data: %p", length, data);
+    }
+    inline ~loc_eng_msg_inject_xtra_data()
+    {
+        delete[] data;
+    }
+};
+
+#ifdef QCOM_FEATURE_IPV6
+struct loc_eng_msg_atl_open_success : public loc_eng_msg {
+    const AGpsStatusValue agpsType;
+    const int length;
+    char* const apn;
+    const AGpsBearerType bearerType;
+    inline loc_eng_msg_atl_open_success(void* instance,
+                                        AGpsStatusValue atype,
+                                        const char* name,
+                                        int len,
+                                        AGpsBearerType btype) :
+        loc_eng_msg(instance, LOC_ENG_MSG_ATL_OPEN_SUCCESS),
+        agpsType(atype), length(len),
+        apn(new char[len+1]), bearerType(btype)
+    {
+        memcpy((void*)apn, (void*)name, len);
+        apn[len] = 0;
+        LOC_LOGV("agps type: %s\n  apn: %s\n  bearer type: %s",
+                 loc_get_agps_type_name(agpsType),
+                 apn,
+                 loc_get_agps_bear_name(bearerType));
+    }
+    inline ~loc_eng_msg_atl_open_success()
+    {
+        delete[] apn;
+    }
+};
+#else
+struct loc_eng_msg_atl_open_success : public loc_eng_msg {
+    const int length;
+    char* const apn;
+    inline loc_eng_msg_atl_open_success(void* instance,
+                                        const char* name,
+                                        int len) :
+        loc_eng_msg(instance, LOC_ENG_MSG_ATL_OPEN_SUCCESS),
+        length(len),
+        apn(new char[len+1])
+    {
+        memcpy((void*)apn, (void*)name, len);
+        apn[len] = 0;
+        LOC_LOGV("apn: %s\n",
+                 apn);
+    }
+    inline ~loc_eng_msg_atl_open_success()
+    {
+        delete[] apn;
+    }
+};
+#endif
+
+#ifdef QCOM_FEATURE_IPV6
+struct loc_eng_msg_atl_open_failed : public loc_eng_msg {
+    const AGpsStatusValue agpsType;
+    inline loc_eng_msg_atl_open_failed(void* instance,
+                                       AGpsStatusValue atype) :
+        loc_eng_msg(instance, LOC_ENG_MSG_ATL_OPEN_FAILED),
+        agpsType(atype)
+    {
+        LOC_LOGV("agps type %s",
+                 loc_get_agps_type_name(agpsType));
+    }
+};
+#else
+struct loc_eng_msg_atl_open_failed : public loc_eng_msg {
+    inline loc_eng_msg_atl_open_failed(void* instance) :
+        loc_eng_msg(instance, LOC_ENG_MSG_ATL_OPEN_FAILED)
+    {
+        LOC_LOGV("");
+    }
+};
+#endif
+
+#ifdef QCOM_FEATURE_IPV6
+struct loc_eng_msg_atl_closed : public loc_eng_msg {
+    const AGpsStatusValue agpsType;
+    inline loc_eng_msg_atl_closed(void* instance,
+                                  AGpsStatusValue atype) :
+        loc_eng_msg(instance, LOC_ENG_MSG_ATL_CLOSED),
+        agpsType(atype)
+    {
+        LOC_LOGV("agps type %s",
+                 loc_get_agps_type_name(agpsType));
+    }
+};
+#else
+struct loc_eng_msg_atl_closed : public loc_eng_msg {
+    inline loc_eng_msg_atl_closed(void* instance) :
+        loc_eng_msg(instance, LOC_ENG_MSG_ATL_CLOSED)
+    {
+        LOC_LOGV("");
+    }
+};
+#endif
+
+struct loc_eng_msg_set_data_enable : public loc_eng_msg {
+    const int enable;
+    char* const apn;
+    const int length;
+    inline loc_eng_msg_set_data_enable(void* instance,
+                                       const char* name,
+                                       int len,
+                                       int yes) :
+        loc_eng_msg(instance, LOC_ENG_MSG_ENABLE_DATA),
+        enable(yes), apn(new char[len+1]), length(len)
+    {
+        memcpy((void*)apn, (void*)name, len);
+        apn[len] = 0;
+        LOC_LOGV("apn: %s\n  enable: %d", apn, enable);
+    }
+    inline ~loc_eng_msg_set_data_enable()
+    {
+        delete[] apn;
+    }
+};
+
+void loc_eng_msg_sender(void* loc_eng_data_p, void* msg);
+int loc_eng_msgget(int * p_req_msgq);
+int loc_eng_msgremove(int req_msgq);
+int loc_eng_msgsnd(int msgqid, void * msgp);
+int loc_eng_msgrcv(int msgqid, void ** msgp);
+int loc_eng_msgsnd_raw(int msgqid, void * msgp, unsigned int msgsz);
+int loc_eng_msgrcv_raw(int msgqid, void *msgp, unsigned int msgsz);
+int loc_eng_msgflush(int msgqid);
+int loc_eng_msgunblock(int msgqid);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LOC_ENG_MSG_H */
diff --git a/loc_api/libloc_api_50001/loc_eng_msg_id.h b/loc_api/libloc_api_50001/loc_eng_msg_id.h
new file mode 100755
index 0000000..f05f1f4
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_msg_id.h
@@ -0,0 +1,90 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#ifndef LOC_ENG_MSG_ID_H
+#define LOC_ENG_MSG_ID_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+struct msgbuf {
+    unsigned int msgsz;
+    void* msgid;
+};
+
+enum loc_eng_msg_ids_t {
+    /* 0x 0 - 0xEF is reserved for daemon internal */
+    /* 0xF0 - 0x1FF is reserved for daemon & framework communication */
+    LOC_ENG_MSG_QUIT = 0x200,
+
+    LOC_ENG_MSG_ENGINE_DOWN,
+    LOC_ENG_MSG_ENGINE_UP,
+
+    LOC_ENG_MSG_START_FIX,
+    LOC_ENG_MSG_STOP_FIX,
+    LOC_ENG_MSG_SET_POSITION_MODE,
+    LOC_ENG_MSG_SET_TIME,
+    LOC_ENG_MSG_INJECT_XTRA_DATA,
+    LOC_ENG_MSG_INJECT_LOCATION,
+    LOC_ENG_MSG_DELETE_AIDING_DATA,
+    LOC_ENG_MSG_SET_APN,
+    LOC_ENG_MSG_SET_SERVER_URL,
+    LOC_ENG_MSG_SET_SERVER_IPV4,
+    LOC_ENG_MSG_ENABLE_DATA,
+
+    LOC_ENG_MSG_SUPL_VERSION,
+    LOC_ENG_MSG_SET_SENSOR_CONTROL_CONFIG,
+    LOC_ENG_MSG_SET_SENSOR_PROPERTIES,
+    LOC_ENG_MSG_SET_SENSOR_PERF_CONTROL_CONFIG,
+    LOC_ENG_MSG_MUTE_SESSION,
+
+    LOC_ENG_MSG_ATL_OPEN_SUCCESS,
+    LOC_ENG_MSG_ATL_CLOSED,
+    LOC_ENG_MSG_ATL_OPEN_FAILED,
+
+    LOC_ENG_MSG_REPORT_POSITION,
+    LOC_ENG_MSG_REPORT_SV,
+    LOC_ENG_MSG_REPORT_STATUS,
+    LOC_ENG_MSG_REPORT_NMEA,
+    LOC_ENG_MSG_REQUEST_BIT,
+    LOC_ENG_MSG_RELEASE_BIT,
+    LOC_ENG_MSG_REQUEST_ATL,
+    LOC_ENG_MSG_RELEASE_ATL,
+    LOC_ENG_MSG_REQUEST_NI,
+    LOC_ENG_MSG_INFORM_NI_RESPONSE,
+    LOC_ENG_MSG_REQUEST_XTRA_DATA,
+    LOC_ENG_MSG_REQUEST_TIME,
+    LOC_ENG_MSG_REQUEST_POSITION
+};
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LOC_ENG_MSG_ID_H */
diff --git a/loc_api/libloc_api_50001/loc_eng_ni.cpp b/loc_api/libloc_api_50001/loc_eng_ni.cpp
new file mode 100755
index 0000000..c2d78af
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_ni.cpp
@@ -0,0 +1,313 @@
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
+#define LOG_TAG "LocSvc_eng"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#include <pthread.h>
+#include <errno.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <time.h>
+
+#include <loc_eng.h>
+
+#include "log_util.h"
+
+/*=============================================================================
+ *
+ *                             DATA DECLARATION
+ *
+ *============================================================================*/
+
+/*=============================================================================
+ *
+ *                             FUNCTION DECLARATIONS
+ *
+ *============================================================================*/
+static void* ni_thread_proc(void *args);
+
+/*===========================================================================
+
+FUNCTION loc_eng_ni_request_handler
+
+DESCRIPTION
+   Displays the NI request and awaits user input. If a previous request is
+   in session, it is ignored.
+
+RETURN VALUE
+   none
+
+===========================================================================*/
+void loc_eng_ni_request_handler(loc_eng_data_s_type &loc_eng_data,
+                            const GpsNiNotification *notif,
+                            const void* passThrough)
+{
+    ENTRY_LOG();
+    char lcs_addr[32]; // Decoded LCS address for UMTS CP NI
+    loc_eng_ni_data_s_type* loc_eng_ni_data_p = &loc_eng_data.loc_eng_ni_data;
+
+    if (NULL == loc_eng_data.ni_notify_cb) {
+        EXIT_LOG(%s, "loc_eng_ni_init hasn't happened yet.");
+        return;
+    }
+
+    /* If busy, use default or deny */
+    if (NULL != loc_eng_ni_data_p->rawRequest)
+    {
+        /* XXX Consider sending a NO RESPONSE reply or queue the request */
+        LOC_LOGW("loc_eng_ni_request_handler, notification in progress, new NI request ignored, type: %d",
+                 notif->ni_type);
+        if (NULL != passThrough) {
+            free((void*)passThrough);
+        }
+    }
+    else {
+        /* Save request */
+        loc_eng_ni_data_p->rawRequest = (void*)passThrough;
+
+        /* Fill in notification */
+        ((GpsNiNotification*)notif)->notification_id = loc_eng_ni_data_p->reqID;
+
+        if (notif->notify_flags == GPS_NI_PRIVACY_OVERRIDE)
+        {
+            loc_eng_mute_one_session(loc_eng_data);
+        }
+
+        /* Log requestor ID and text for debugging */
+        LOC_LOGI("Notification: notif_type: %d, timeout: %d, default_resp: %d", notif->ni_type, notif->timeout, notif->default_response);
+        LOC_LOGI("              requestor_id: %s (encoding: %d)", notif->requestor_id, notif->requestor_id_encoding);
+        LOC_LOGI("              text: %s text (encoding: %d)", notif->text, notif->text_encoding);
+        if (notif->extras[0])
+        {
+            LOC_LOGI("              extras: %s", notif->extras);
+        }
+
+        /* For robustness, spawn a thread at this point to timeout to clear up the notification status, even though
+         * the OEM layer in java does not do so.
+         **/
+        loc_eng_ni_data_p->respTimeLeft = 5 + (notif->timeout != 0 ? notif->timeout : LOC_NI_NO_RESPONSE_TIME);
+        LOC_LOGI("Automatically sends 'no response' in %d seconds (to clear status)\n", loc_eng_ni_data_p->respTimeLeft);
+
+        int rc = 0;
+        rc = pthread_create(&loc_eng_ni_data_p->thread, NULL, ni_thread_proc, &loc_eng_data);
+        if (rc)
+        {
+            LOC_LOGE("Loc NI thread is not created.\n");
+        }
+        rc = pthread_detach(loc_eng_ni_data_p->thread);
+        if (rc)
+        {
+            LOC_LOGE("Loc NI thread is not detached.\n");
+        }
+
+        CALLBACK_LOG_CALLFLOW("ni_notify_cb - id", %d, notif->notification_id);
+        loc_eng_data.ni_notify_cb((GpsNiNotification*)notif);
+    }
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+
+FUNCTION ni_thread_proc
+
+===========================================================================*/
+static void* ni_thread_proc(void *args)
+{
+    ENTRY_LOG();
+
+    loc_eng_data_s_type* loc_eng_data_p = (loc_eng_data_s_type*)args;
+    loc_eng_ni_data_s_type* loc_eng_ni_data_p = &loc_eng_data_p->loc_eng_ni_data;
+    int rc = 0;          /* return code from pthread calls */
+
+    struct timeval present_time;
+    struct timespec expire_time;
+
+    LOC_LOGD("Starting Loc NI thread...\n");
+    pthread_mutex_lock(&loc_eng_ni_data_p->tLock);
+    /* Calculate absolute expire time */
+    gettimeofday(&present_time, NULL);
+    expire_time.tv_sec  = present_time.tv_sec + loc_eng_ni_data_p->respTimeLeft;
+    expire_time.tv_nsec = present_time.tv_usec * 1000;
+    LOC_LOGD("ni_thread_proc-Time out set for abs time %ld with delay %d sec\n",
+             (long) expire_time.tv_sec, loc_eng_ni_data_p->respTimeLeft );
+
+    while (!loc_eng_ni_data_p->respRecvd)
+    {
+        rc = pthread_cond_timedwait(&loc_eng_ni_data_p->tCond,
+                                    &loc_eng_ni_data_p->tLock,
+                                    &expire_time);
+        if (rc == ETIMEDOUT)
+        {
+            loc_eng_ni_data_p->resp = GPS_NI_RESPONSE_NORESP;
+            LOC_LOGD("ni_thread_proc-Thread time out after valting for specified time. Ret Val %d\n",rc );
+            break;
+        }
+    }
+    LOC_LOGD("ni_thread_proc-Java layer has sent us a user response and return value from "
+             "pthread_cond_timedwait = %d\n",rc );
+    loc_eng_ni_data_p->respRecvd = FALSE; /* Reset the user response flag for the next session*/
+
+    // adding this check to support modem restart, in which case, we need the thread
+    // to exit without calling sending data to loc_eng_msg_q. We made sure that
+    // rawRequest is NULL in loc_eng_ni_reset_on_engine_restart()
+    loc_eng_msg_inform_ni_response *msg = NULL;
+
+    if (NULL != loc_eng_ni_data_p->rawRequest) {
+        loc_eng_data_s_type *loc_eng_data_p = (loc_eng_data_s_type*)args;
+        msg = new loc_eng_msg_inform_ni_response(loc_eng_data_p,
+                                                 loc_eng_ni_data_p->resp,
+                                                 loc_eng_ni_data_p->rawRequest);
+        loc_eng_ni_data_p->rawRequest = NULL;
+    }
+    pthread_mutex_unlock(&loc_eng_ni_data_p->tLock);
+
+    loc_eng_ni_data_p->respTimeLeft = 0;
+    loc_eng_ni_data_p->reqID++;
+
+    if (NULL != msg) {
+        loc_eng_msg_sender(loc_eng_data_p, msg);
+    }
+
+    EXIT_LOG(%s, VOID_RET);
+    return NULL;
+}
+
+void loc_eng_ni_reset_on_engine_restart(loc_eng_data_s_type &loc_eng_data)
+{
+    ENTRY_LOG();
+    loc_eng_ni_data_s_type* loc_eng_ni_data_p = &loc_eng_data.loc_eng_ni_data;
+
+    if (NULL == loc_eng_data.ni_notify_cb) {
+        EXIT_LOG(%s, "loc_eng_ni_init hasn't happened yet.");
+        return;
+    }
+
+    // only if modem has requested but then died.
+    if (NULL != loc_eng_ni_data_p->rawRequest) {
+        free(loc_eng_ni_data_p->rawRequest);
+        loc_eng_ni_data_p->rawRequest = NULL;
+
+        pthread_mutex_lock(&loc_eng_ni_data_p->tLock);
+        // the goal is to wake up ni_thread_proc
+        // and let it exit.
+        loc_eng_ni_data_p->respRecvd = TRUE;
+        pthread_cond_signal(&loc_eng_ni_data_p->tCond);
+        pthread_mutex_unlock(&loc_eng_ni_data_p->tLock);
+    }
+
+    EXIT_LOG(%s, VOID_RET);
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_ni_init
+
+DESCRIPTION
+   This function initializes the NI interface
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_eng_ni_init(loc_eng_data_s_type &loc_eng_data, GpsNiCallbacks *callbacks)
+{
+    ENTRY_LOG_CALLFLOW();
+
+    if (NULL == callbacks->notify_cb) {
+        EXIT_LOG(%s, "loc_eng_ni_init: failed, no cb.");
+    } else if (NULL != loc_eng_data.ni_notify_cb) {
+        EXIT_LOG(%s, "loc_eng_ni_init: already inited.");
+    } else {
+        loc_eng_ni_data_s_type* loc_eng_ni_data_p = &loc_eng_data.loc_eng_ni_data;
+        loc_eng_ni_data_p->respTimeLeft = 0;
+        loc_eng_ni_data_p->respRecvd = FALSE;
+        loc_eng_ni_data_p->rawRequest = NULL;
+        loc_eng_ni_data_p->reqID = 0;
+        pthread_cond_init(&loc_eng_ni_data_p->tCond, NULL);
+        pthread_mutex_init(&loc_eng_ni_data_p->tLock, NULL);
+
+        loc_eng_data.ni_notify_cb = callbacks->notify_cb;
+        EXIT_LOG(%s, VOID_RET);
+    }
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_ni_respond
+
+DESCRIPTION
+   This function receives user response from upper layer framework
+
+DEPENDENCIES
+   NONE
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_eng_ni_respond(loc_eng_data_s_type &loc_eng_data,
+                        int notif_id, GpsUserResponseType user_response)
+{
+    ENTRY_LOG_CALLFLOW();
+    loc_eng_ni_data_s_type* loc_eng_ni_data_p = &loc_eng_data.loc_eng_ni_data;
+
+    if (NULL == loc_eng_data.ni_notify_cb) {
+        EXIT_LOG(%s, "loc_eng_ni_init hasn't happened yet.");
+        return;
+    }
+
+    if (notif_id == loc_eng_ni_data_p->reqID &&
+        NULL != loc_eng_ni_data_p->rawRequest)
+    {
+        LOC_LOGI("loc_eng_ni_respond: send user response %d for notif %d", user_response, notif_id);
+        pthread_mutex_lock(&loc_eng_ni_data_p->tLock);
+        loc_eng_ni_data_p->resp = user_response;
+        loc_eng_ni_data_p->respRecvd = TRUE;
+        pthread_cond_signal(&loc_eng_ni_data_p->tCond);
+        pthread_mutex_unlock(&loc_eng_ni_data_p->tLock);
+    }
+    else {
+        LOC_LOGE("loc_eng_ni_respond: reqID %d and notif_id %d mismatch or rawRequest %p, response: %d",
+                 loc_eng_ni_data_p->reqID, notif_id, loc_eng_ni_data_p->rawRequest, user_response);
+    }
+
+    EXIT_LOG(%s, VOID_RET);
+}
diff --git a/loc_api/libloc_api_50001/loc_eng_ni.h b/loc_api/libloc_api_50001/loc_eng_ni.h
new file mode 100755
index 0000000..9b1c5f3
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_ni.h
@@ -0,0 +1,50 @@
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef LOC_ENG_NI_H
+#define LOC_ENG_NI_H
+
+#include <stdbool.h>
+
+#define LOC_NI_NO_RESPONSE_TIME            20                      /* secs */
+#define LOC_NI_NOTIF_KEY_ADDRESS           "Address"
+
+typedef struct {
+    pthread_t               thread;            /* NI thread */
+    int                     respTimeLeft;       /* examine time for NI response */
+    bool                    respRecvd;   /* NI User reponse received or not from Java layer*/
+    void*                   rawRequest;
+    int                     reqID;         /* ID to check against response */
+    GpsUserResponseType     resp;
+    pthread_cond_t          tCond;
+    pthread_mutex_t         tLock;
+} loc_eng_ni_data_s_type;
+
+
+#endif /* LOC_ENG_NI_H */
diff --git a/loc_api/libloc_api_50001/loc_eng_xtra.cpp b/loc_api/libloc_api_50001/loc_eng_xtra.cpp
new file mode 100755
index 0000000..ebc7c6f
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_xtra.cpp
@@ -0,0 +1,90 @@
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
+#define LOG_TAG "LocSvc_eng"
+
+#include <loc_eng.h>
+#include <loc_eng_msg.h>
+#include "log_util.h"
+
+
+/*===========================================================================
+FUNCTION    loc_eng_xtra_init
+
+DESCRIPTION
+   Initialize XTRA module.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   0: success
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_xtra_init (loc_eng_data_s_type &loc_eng_data,
+                       GpsXtraCallbacks* callbacks)
+{
+   loc_eng_xtra_data_s_type *xtra_module_data_ptr;
+
+   xtra_module_data_ptr = &loc_eng_data.xtra_module_data;
+   xtra_module_data_ptr->download_request_cb = callbacks->download_request_cb;
+
+   return 0;
+}
+
+/*===========================================================================
+FUNCTION    loc_eng_xtra_inject_data
+
+DESCRIPTION
+   Injects XTRA file into the engine but buffers the data if engine is busy.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   0: success
+   >0: failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int loc_eng_xtra_inject_data(loc_eng_data_s_type &loc_eng_data,
+                             char* data, int length)
+{
+    loc_eng_msg_inject_xtra_data *msg(new loc_eng_msg_inject_xtra_data(&loc_eng_data,
+                                                                       data, length));
+    loc_eng_msg_sender(&loc_eng_data, msg);
+
+    return 0;
+}
diff --git a/loc_api/libloc_api_50001/loc_eng_xtra.h b/loc_api/libloc_api_50001/loc_eng_xtra.h
new file mode 100755
index 0000000..7e01e14
--- /dev/null
+++ b/loc_api/libloc_api_50001/loc_eng_xtra.h
@@ -0,0 +1,46 @@
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef LOC_ENG_XTRA_H
+#define LOC_ENG_XTRA_H
+
+#include <hardware/gps.h>
+
+// Module data
+typedef struct
+{
+   // loc_eng_ioctl_cb_data_s_type   ioctl_cb_data;
+   gps_xtra_download_request      download_request_cb;
+
+   // XTRA data buffer
+   char                          *xtra_data_for_injection;  // NULL if no pending data
+   int                            xtra_data_len;
+} loc_eng_xtra_data_s_type;
+
+#endif // LOC_ENG_XTRA_H
diff --git a/loc_api/loc_api_v02/Android.mk b/loc_api/loc_api_v02/Android.mk
new file mode 100755
index 0000000..b6c7a66
--- /dev/null
+++ b/loc_api/loc_api_v02/Android.mk
@@ -0,0 +1,43 @@
+ifneq ($(BUILD_TINY_ANDROID),true)
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libloc_api_v02
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SHARED_LIBRARIES := \
+    libutils \
+    libcutils \
+    libqmi_cci \
+    libqmi_csi \
+    libqmi_common_so \
+    libloc_adapter \
+    libgps.utils
+
+LOCAL_SRC_FILES += \
+    LocApiV02Adapter.cpp \
+    loc_api_v02_log.c \
+    loc_api_v02_client.c \
+    loc_api_sync_req.c \
+    location_service_v02.c
+
+LOCAL_CFLAGS += \
+    -fno-short-enums \
+    -D_ANDROID_
+
+## Includes
+LOCAL_C_INCLUDES := \
+    $(TOP)/vendor/qcom/proprietary/qmi-framework/inc \
+    $(TOP)/vendor/qcom/proprietary/qmi-framework/qcci/inc \
+    $(TOP)/vendor/qcom/proprietary/qmi-framework/common/inc \
+    $(TARGET_OUT_HEADERS)/libloc_eng \
+    $(TARGET_OUT_HEADERS)/gps.utils
+
+LOCAL_PRELINK_MODULE := false
+
+include $(BUILD_SHARED_LIBRARY)
+
+endif # not BUILD_TINY_ANDROID
diff --git a/loc_api/loc_api_v02/LocApiV02Adapter.cpp b/loc_api/loc_api_v02/LocApiV02Adapter.cpp
new file mode 100755
index 0000000..e223983
--- /dev/null
+++ b/loc_api/loc_api_v02/LocApiV02Adapter.cpp
@@ -0,0 +1,2056 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <stdint.h>
+#include <stdbool.h>
+
+#include <hardware/gps.h>
+#include <utils/SystemClock.h>
+#include "LocApiV02Adapter.h"
+#include "loc_api_v02_client.h"
+#include "loc_api_v02_log.h"
+#include "loc_api_sync_req.h"
+#include "LocApiAdapter.h"
+
+#define LOG_NDEBUG 0
+#define LOG_TAG "LocSvc_adapter"
+#include "loc_util_log.h"
+
+
+/* Default session id ; TBD needs incrementing for each */
+#define LOC_API_V02_DEF_SESSION_ID (1)
+
+/* Default minimium interval in ms */
+#define LOC_API_V02_DEF_MIN_INTERVAL (1000)
+
+/* Default horizontal accuracy  in meters*/
+#define LOC_API_V02_DEF_HORZ_ACCURACY (50)
+
+/* Default timeout in ms; TBD: needs implementing */
+#define LOC_API_V02_DEF_TIMEOUT (120000)
+
+/* 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)
+
+
+
+/* static event callbacks that call the LocApiV02Adapter 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));
+  LocApiV02Adapter *locApiV02AdapterInstance =
+      (LocApiV02Adapter *)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 == locApiV02AdapterInstance)
+  {
+    LOC_LOGE ("%s:%d] NULL object passed : client = %p, event id = %d\n",
+                  __func__,  __LINE__,  clientHandle, eventId);
+    return;
+  }
+  locApiV02AdapterInstance->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));
+  LocApiV02Adapter *locApiV02AdapterInstance =
+        (LocApiV02Adapter *)pClientCookie;
+
+
+  LOC_LOGV ("%s:%d] client = %p, resp id = %d, client cookie ptr = %p\n",
+                  __func__,  __LINE__,  clientHandle, respId, pClientCookie);
+
+  if( NULL == locApiV02AdapterInstance)
+  {
+    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)
+{
+  LocApiV02Adapter *locApiV02AdapterInstance =
+          (LocApiV02Adapter *)pClientCookie;
+
+  LOC_LOGV ("%s:%d] client = %p, error id = %d\n, client cookie ptr = %p\n",
+                  __func__,  __LINE__,  clientHandle, errorId, pClientCookie);
+  if( NULL == locApiV02AdapterInstance)
+  {
+    LOC_LOGE ("%s:%d] NULL object passed : client = %p, error id = %d\n",
+                  __func__,  __LINE__,  clientHandle, errorId);
+    return;
+  }
+  locApiV02AdapterInstance->errorCb(clientHandle,
+                                    errorId);
+}
+
+/* global structure containing the callbacks */
+locClientCallbacksType globalCallbacks =
+{
+    sizeof(locClientCallbacksType),
+    globalEventCb,
+    globalRespCb,
+    globalErrorCb
+};
+
+/* Constructor for LocApiV02Adapter */
+LocApiV02Adapter :: LocApiV02Adapter(LocEng &locEng):
+  LocApiAdapter(locEng), clientHandle( LOC_CLIENT_INVALID_HANDLE_VALUE),
+  eventMask(convertMask(locEng.eventMask)), navigating(false),
+   fixCriteria (LOC_POSITION_MODE_MS_BASED, GPS_POSITION_RECURRENCE_PERIODIC,
+                LOC_API_V02_DEF_MIN_INTERVAL, LOC_API_V02_DEF_HORZ_ACCURACY,
+                LOC_API_V02_DEF_TIMEOUT )
+{
+  // initialize loc_sync_req interface
+  loc_sync_req_init();
+}
+
+/* Destructor for LocApiV02Adapter */
+LocApiV02Adapter :: ~LocApiV02Adapter()
+{
+  deInitLocClient();
+}
+
+/* close Loc API V02 client */
+int LocApiV02Adapter :: deInitLocClient()
+{
+  return ( eLOC_CLIENT_SUCCESS == locClientClose(&clientHandle)) ? 0 : -1 ;
+}
+
+/* Initialize a loc api v02 client */
+enum loc_api_adapter_err LocApiV02Adapter :: reinit()
+{
+  locClientStatusEnumType status;
+  /* If the client is already open close it first */
+  if(LOC_CLIENT_INVALID_HANDLE_VALUE != clientHandle)
+  {
+     status = locClientClose(&clientHandle);
+     if( eLOC_CLIENT_SUCCESS != status)
+     {
+        LOC_LOGE ("%s:%d]: locClientClose failed, status = %d\n", __func__,
+                     __LINE__, status);
+        return (LOC_API_ADAPTER_ERR_FAILURE);
+     }
+  }
+
+  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 */
+
+  status = locClientOpen(
+    eventMask, &globalCallbacks, &clientHandle, (void *)this);
+
+  if (eLOC_CLIENT_SUCCESS != status ||
+        clientHandle == LOC_CLIENT_INVALID_HANDLE_VALUE )
+  {
+      LOC_LOGE ("%s:%d]: locClientOpen failed, status = %s\n", __func__,
+                __LINE__, loc_get_v02_client_status_name(status));
+      return (LOC_API_ADAPTER_ERR_FAILURE);
+  }
+
+  // return SUCCESS
+  return (LOC_API_ADAPTER_ERR_SUCCESS);
+}
+
+/* start positioning session */
+enum loc_api_adapter_err LocApiV02Adapter :: startFix()
+{
+  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__);
+
+  // 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;
+
+    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?
+
+  if (status != eLOC_CLIENT_SUCCESS ||
+      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));
+
+    return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; // error
+  }
+
+  if(fixCriteria.min_interval > 0)
+  {
+    start_msg.minInterval_valid = 1;
+    start_msg.minInterval = fixCriteria.min_interval;
+  }
+
+  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;;
+
+  req_union.pStartReq = &start_msg;
+
+  status = locClientSendReq (clientHandle, QMI_LOC_START_REQ_V02,
+                            req_union );
+
+  if( eLOC_CLIENT_SUCCESS == status)
+  {
+    navigating = true;
+    return LOC_API_ADAPTER_ERR_SUCCESS;
+  }
+
+  // start_fix failed so MO fix is not in progress
+  navigating = false;
+
+  return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+}
+
+/* stop a positioning session */
+enum loc_api_adapter_err LocApiV02Adapter :: 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);
+
+  if( eLOC_CLIENT_SUCCESS == status)
+  {
+    navigating = false;
+    return LOC_API_ADAPTER_ERR_SUCCESS;
+  }
+
+  LOC_LOGE("%s:%d]: error = %s\n",__func__, __LINE__,
+           loc_get_v02_client_status_name(status));
+  return (LOC_API_ADAPTER_ERR_GENERAL_FAILURE);
+}
+
+/* set the positioning fix criteria */
+enum loc_api_adapter_err LocApiV02Adapter ::  setPositionMode(
+  LocPositionMode mode, GpsPositionRecurrence recurrence,
+  uint32_t min_interval, uint32_t preferred_accuracy,
+  uint32_t preferred_time)
+{
+
+  LOC_LOGV ("%s:%d]: interval = %d, mode = %d, recurrence = %d, preferred_accuracy = %d\n",__func__, __LINE__,
+                 min_interval, mode, recurrence, preferred_accuracy);
+
+  //store the fix criteria
+  fixCriteria.mode = mode;
+
+  fixCriteria.recurrence = recurrence;
+
+  if(min_interval == 0)
+  {
+    fixCriteria.min_interval = MIN_POSSIBLE_FIX_INTERVAL;
+  }
+  else
+  {
+    fixCriteria.min_interval = min_interval;
+  }
+
+  fixCriteria.preferred_accuracy = preferred_accuracy;
+
+  fixCriteria.preferred_time = preferred_time;
+
+  if(true == navigating)
+  {
+      //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());
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* inject time into the position engine */
+enum loc_api_adapter_err LocApiV02Adapter ::
+    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)(android::elapsedRealtime() - 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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* inject position into the position engine */
+enum loc_api_adapter_err LocApiV02Adapter ::
+    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
+
+  inject_pos_msg.horConfidence_valid = 1;
+
+  inject_pos_msg.horConfidence = 63; // 63% (1 std dev assumed)
+
+    /* Log */
+  LOC_LOGD("%s:%d]: Lat=%lf, Lon=%lf, Acc=%.2lf\n", __func__, __LINE__,
+                inject_pos_msg.latitude, inject_pos_msg.longitude,
+                inject_pos_msg.horUncCircular);
+
+  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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* delete assistance date */
+enum loc_api_adapter_err LocApiV02Adapter ::  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);
+
+      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;
+
+    }
+
+#ifdef QCOM_FEATURE_DELEXT
+    if( f & GPS_DELETE_TIME_GPS )
+    {
+      delete_req.deleteGnssDataMask_valid = 1;
+      delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GPS_TIME_V02;
+    }
+#endif
+    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) ;
+
+    }
+#ifdef QCOM_FEATURE_DELEXT
+    if(f & GPS_DELETE_ALMANAC_CORR )
+    {
+      delete_req.deleteGnssDataMask_valid = 1;
+      delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GPS_ALM_CORR_V02;
+    }
+    if(f & GPS_DELETE_FREQ_BIAS_EST )
+    {
+      delete_req.deleteGnssDataMask_valid = 1;
+      delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_FREQ_BIAS_EST_V02;
+    }
+    if ( (f & GPS_DELETE_EPHEMERIS_GLO ) || (f & GPS_DELETE_ALMANAC_GLO ))
+    {
+      /* do delete for all GLONASS SV's (65 - 96)
+      */
+      curr_sv_len += SV_ID_RANGE;
+
+      sv_id = GLONASS_SV_ID_OFFSET;
+
+      delete_req.deleteSvInfoList_valid = 1;
+
+      delete_req.deleteSvInfoList_len = curr_sv_len;
+
+      LOC_LOGV("%s:%d]: Delete GLO 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);
+
+
+      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_GLONASS_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;
+        }
+      }
+      curr_sv_idx += SV_ID_RANGE;
+    }
+
+    if(f & GPS_DELETE_SVDIR_GLO )
+    {
+      delete_req.deleteGnssDataMask_valid = 1;
+      delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GLO_SVDIR_V02;
+    }
+
+    if(f & GPS_DELETE_SVSTEER_GLO )
+    {
+      delete_req.deleteGnssDataMask_valid = 1;
+      delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GLO_SVSTEER_V02;
+    }
+
+    if(f & GPS_DELETE_ALMANAC_CORR_GLO )
+    {
+      delete_req.deleteGnssDataMask_valid = 1;
+      delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GLO_ALM_CORR_V02;
+    }
+
+    if(f & GPS_DELETE_TIME_GLO )
+    {
+      delete_req.deleteGnssDataMask_valid = 1;
+      delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GLO_TIME_V02;
+    }
+#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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* send NI user repsonse to the engine */
+enum loc_api_adapter_err LocApiV02Adapter ::
+    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));
+  }
+
+  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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* Set UMTs SLP server URL */
+enum loc_api_adapter_err LocApiV02Adapter :: 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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+enum loc_api_adapter_err LocApiV02Adapter ::
+    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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+    }
+
+    return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* Inject XTRA data, this module breaks down the XTRA
+   file into "chunks" and injects them one at a time */
+enum loc_api_adapter_err LocApiV02Adapter :: 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);
+
+      return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+      break;
+    }
+
+    len_injected += inject_xtra.partData_len;
+    LOC_LOGD("%s:%d]: XTRA injected length: %d\n", __func__, __LINE__,
+        len_injected);
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+#ifdef QCOM_FEATURE_IPV6
+enum loc_api_adapter_err LocApiV02Adapter :: 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;
+
+    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;
+        break;
+
+      case AGPS_APN_BEARER_IPV6:
+        conn_status_req.apnProfile.pdnType =
+          eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV6_V02;
+        break;
+
+      case AGPS_APN_BEARER_IPV4V6:
+        conn_status_req.apnProfile.pdnType =
+          eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4V6_V02;
+        break;
+
+      default:
+        LOC_LOGE("%s:%d]:invalid bearer type\n",__func__,__LINE__);
+        return LOC_API_ADAPTER_ERR_INVALID_HANDLE;
+    }
+
+    conn_status_req.apnProfile_valid = 1;
+  }
+  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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+
+}
+#else
+enum loc_api_adapter_err LocApiV02Adapter :: atlOpenStatus(
+  int handle, int is_succ, char* apn, 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] \n",  __func__, __LINE__,
+                handle, is_succ, apn);
+
+  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;
+
+    strlcpy(conn_status_req.apnProfile.apnName, apn,
+            sizeof(conn_status_req.apnProfile.apnName) );
+
+
+    conn_status_req.apnProfile.pdnType =
+      eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4_V02;
+
+    conn_status_req.apnProfile_valid = 1;
+  }
+  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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+
+}
+#endif
+/* close atl connection */
+enum loc_api_adapter_err LocApiV02Adapter :: 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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* set the SUPL version */
+enum loc_api_adapter_err LocApiV02Adapter :: 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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* set the Sensor Configuration */
+enum loc_api_adapter_err LocApiV02Adapter :: setSensorControlConfig(int sensorsDisabled)
+{
+  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;
+
+  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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* set the Sensor Properties */
+enum loc_api_adapter_err LocApiV02Adapter :: setSensorProperties(float gyroBiasVarianceRandomWalk)
+{
+  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\n",
+                 __func__, __LINE__, gyroBiasVarianceRandomWalk);
+
+  memset(&sensor_prop_req, 0, sizeof(sensor_prop_req));
+  memset(&sensor_prop_ind, 0, sizeof(sensor_prop_ind));
+
+  sensor_prop_req.gyroBiasVarianceRandomWalk_valid = 1;
+  sensor_prop_req.gyroBiasVarianceRandomWalk = gyroBiasVarianceRandomWalk;
+
+  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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* set the Sensor Performance Config */
+enum loc_api_adapter_err LocApiV02Adapter :: setSensorPerfControlConfig(int controlMode,
+                                                                        int accelSamplesPerBatch, int accelBatchesPerSec,
+                                                                        int gyroSamplesPerBatch, int gyroBatchesPerSec)
+{
+  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)\n",
+                __FUNCTION__,
+                __LINE__,
+                controlMode,
+                accelSamplesPerBatch,
+                accelBatchesPerSec,
+                gyroSamplesPerBatch,
+                gyroBatchesPerSec
+                );
+
+  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;
+
+  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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+  }
+
+  return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* Convert event mask from loc eng to loc_api_v02 format */
+locClientEventMaskType LocApiV02Adapter :: 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 |
+                  QMI_LOC_EVENT_MASK_FIX_SESSION_STATE_V02);
+  }
+
+  if(mask & LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST)
+    eventMask |= QMI_LOC_EVENT_MASK_LOCATION_SERVER_CONNECTION_REQ_V02;
+
+  return eventMask;
+}
+
+/* Convert error from loc_api_v02 to loc eng format*/
+enum loc_api_adapter_err LocApiV02Adapter :: convertErr(
+  locClientStatusEnumType status)
+{
+  switch( status)
+  {
+    case LOC_API_ADAPTER_ERR_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;
+
+    default:
+      return LOC_API_ADAPTER_ERR_FAILURE;
+  }
+}
+
+/* convert position report to loc eng format and send the converted
+   position to loc eng */
+
+void LocApiV02Adapter :: reportPosition (
+  const qmiLocEventPositionReportIndMsgT_v02 *location_report_ptr)
+{
+    GpsLocation location;
+
+    memset(&location, 0, sizeof (GpsLocation));
+    location.size = sizeof(location);
+    // 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.flags  |= GPS_LOCATION_HAS_LAT_LONG;
+            location.latitude  = location_report_ptr->latitude;
+            location.longitude = location_report_ptr->longitude;
+
+            // Time stamp (UTC)
+            if(location_report_ptr->timestampUtc_valid == 1)
+            {
+                location.timestamp = location_report_ptr->timestampUtc;
+            }
+
+            // Altitude
+            if(location_report_ptr->altitudeWrtEllipsoid_valid == 1  )
+            {
+                location.flags  |= GPS_LOCATION_HAS_ALTITUDE;
+                location.altitude = location_report_ptr->altitudeWrtEllipsoid;
+            }
+
+            // Speed
+            if((location_report_ptr->speedHorizontal_valid == 1) &&
+               (location_report_ptr->speedVertical_valid ==1 ) )
+            {
+                location.flags  |= GPS_LOCATION_HAS_SPEED;
+                location.speed = sqrt(
+                    (location_report_ptr->speedHorizontal *
+                     location_report_ptr->speedHorizontal) +
+                    (location_report_ptr->speedVertical *
+                     location_report_ptr->speedVertical) );
+            }
+
+            // Heading
+            if(location_report_ptr->heading_valid == 1)
+            {
+                location.flags  |= GPS_LOCATION_HAS_BEARING;
+                location.bearing = location_report_ptr->heading;
+            }
+
+            // Uncertainty (circular)
+            if( (location_report_ptr->horUncCircular_valid ) )
+            {
+                location.flags  |= GPS_LOCATION_HAS_ACCURACY;
+                location.accuracy = location_report_ptr->horUncCircular;
+            }
+
+            LocApiAdapter::reportPosition( location,
+                                           locEngHandle.extPosInfo((void*)location_report_ptr),
+                                           (location_report_ptr->sessionStatus
+                                            == eQMI_LOC_SESS_STATUS_IN_PROGRESS_V02 ?
+                                            LOC_SESS_INTERMEDIATE : LOC_SESS_SUCCESS));
+        }
+    }
+    else
+    {
+        LocApiAdapter::reportPosition(location,
+                                      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  LocApiV02Adapter :: reportSv (
+  const qmiLocEventGnssSvInfoIndMsgT_v02 *gnss_report_ptr)
+{
+  GpsSvStatus      SvStatus;
+  int              num_svs_max, i;
+  const qmiLocSvInfoStructT_v02 *sv_info_ptr;
+
+  LOC_LOGV ("%s:%d]: num of sv = %d\n", __func__, __LINE__,
+                 gnss_report_ptr->svList_len);
+
+  num_svs_max = 0;
+  memset (&SvStatus, 0, sizeof (GpsSvStatus));
+  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(GpsSvStatus);
+          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.used_in_fix_mask |= (1 << (sv_info_ptr->gnssSvId-1));
+          }
+        }
+        // SBAS: GPS RPN: 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)
+        {
+          SvStatus.sv_list[SvStatus.num_svs].prn =
+            sv_info_ptr->gnssSvId + (65-1);
+        }
+        // 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__);
+    LocApiAdapter::reportSv(SvStatus,
+                            locEngHandle.extSvInfo((void*)gnss_report_ptr));
+  }
+}
+
+/* convert engine state report to loc eng format and send the converted
+   report to loc eng */
+void LocApiV02Adapter :: reportEngineState (
+    const qmiLocEventEngineStateIndMsgT_v02 *engine_state_ptr)
+{
+  GpsStatusValue status;
+
+  LOC_LOGV("%s:%d]: state = %d\n", __func__, __LINE__,
+                 engine_state_ptr->engineState);
+
+  status = GPS_STATUS_NONE;
+  if (engine_state_ptr->engineState == eQMI_LOC_ENGINE_STATE_ON_V02)
+  {
+    status = GPS_STATUS_ENGINE_ON;
+  }
+  else if (engine_state_ptr->engineState == eQMI_LOC_ENGINE_STATE_OFF_V02)
+  {
+    status = GPS_STATUS_ENGINE_OFF;
+  }
+  LocApiAdapter::reportStatus(status);
+}
+
+/* convert fix session state report to loc eng format and send the converted
+   report to loc eng */
+void LocApiV02Adapter :: 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;
+  }
+  LocApiAdapter::reportStatus(status);
+}
+
+/* convert NMEA report to loc eng format and send the converted
+   report to loc eng */
+void LocApiV02Adapter :: reportNmea (
+  const qmiLocEventNmeaIndMsgT_v02 *nmea_report_ptr)
+{
+
+  LocApiAdapter::reportNmea(nmea_report_ptr->nmea,
+                             strlen(nmea_report_ptr->nmea));
+
+  LOC_LOGD("%s:%d]: $%c%c%c\n", __func__, __LINE__,
+                  nmea_report_ptr->nmea[3], nmea_report_ptr->nmea[4],
+                  nmea_report_ptr->nmea[5]);
+}
+
+/* convert and report an ATL request to loc engine */
+void LocApiV02Adapter :: 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;
+#ifdef QCOM_FEATURE_IPV6
+    switch(server_request_ptr->wwanType)
+    {
+      case eQMI_LOC_WWAN_TYPE_INTERNET_V02:
+        agpsType = AGPS_TYPE_WWAN_ANY;
+        break;
+
+      case eQMI_LOC_WWAN_TYPE_AGNSS_V02:
+        agpsType = AGPS_TYPE_SUPL;
+        break;
+
+      default:
+        agpsType = AGPS_TYPE_WWAN_ANY;
+        break;
+    }
+#else
+    agpsType = AGPS_TYPE_SUPL;
+#endif
+    LocApiAdapter::requestATL(connHandle, agpsType);
+  }
+
+  // service the ATL close request
+  else if (server_request_ptr->requestType == eQMI_LOC_SERVER_REQUEST_CLOSE_V02)
+  {
+    LocApiAdapter::releaseATL(connHandle);
+  }
+}
+
+/* conver the NI report to loc eng format and send t loc engine */
+void LocApiV02Adapter :: 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 LocApiAdapter,
+     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;
+    }
+
+  } //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));
+
+    LocApiAdapter::requestNiNotify(notif, (const void*)ni_req_copy_ptr);
+  }
+  else
+  {
+    LOC_LOGE("%s:%d]: Error copying NI request\n", __func__, __LINE__);
+  }
+
+}
+
+/* convert Ni Encoding type from QMI_LOC to loc eng format */
+GpsNiEncodingType LocApiV02Adapter ::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 LocApiV02Adapter :: 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;
+}
+
+/* event callback registered with the loc_api v02 interface */
+void LocApiV02Adapter :: 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__);
+      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__);
+      //requestPosition();
+      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;
+  }
+}
+
+/* Call the service LocApiAdapter down event*/
+void LocApiV02Adapter :: errorCb(locClientHandleType handle,
+                                 locClientErrorEnumType errorId)
+{
+  if(errorId == eLOC_CLIENT_ERROR_SERVICE_UNAVAILABLE)
+  {
+    LOC_LOGE("%s:%d]: Service unavailable error\n",
+                  __func__, __LINE__);
+
+    LocApiAdapter::handleEngineDownEvent();
+
+    /* immediately send the engine up event so that
+    the loc engine re-initializes the adapter and the
+    loc-api_v02 interface */
+
+    LocApiAdapter::handleEngineUpEvent();
+  }
+}
+
+/* return a Loc API adapter */
+LocApiAdapter* getLocApiAdapter(LocEng &locEng)
+{
+ return(new LocApiV02Adapter(locEng));
+}
diff --git a/loc_api/loc_api_v02/LocApiV02Adapter.h b/loc_api/loc_api_v02/LocApiV02Adapter.h
new file mode 100755
index 0000000..487e98e
--- /dev/null
+++ b/loc_api/loc_api_v02/LocApiV02Adapter.h
@@ -0,0 +1,197 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#ifndef LOC_API_V_0_2_ADAPTER_H
+#define LOC_API_V_0_2_ADAPTER_H
+
+#include <LocApiAdapter.h>
+#include "loc_api_v02_client.h"
+#include <stdint.h>
+#include <stdbool.h>
+
+/* Fix criteria structure*/
+struct LocApiV02FixCriteria
+{
+  LocPositionMode mode;
+  GpsPositionRecurrence recurrence;
+  uint32_t min_interval ;
+  uint32_t preferred_accuracy ;
+  uint32_t preferred_time;
+
+  /* Constructor for the structure  */
+  inline LocApiV02FixCriteria (LocPositionMode mode,
+                               GpsPositionRecurrence recur,
+                               uint32_t min_int,
+                               uint32_t pref_acc,
+                               uint32_t pref_time) :
+    mode(mode), recurrence(recur), min_interval(min_int),
+    preferred_accuracy(pref_acc), preferred_time(pref_time) {}
+};
+
+/* This class derives from the LocApiAdapter class.
+   The members of this class are responsible for converting
+   the Loc API V02 data structures into Loc Engine data structures.
+   This class also implements some of the virtual functions that
+   handle the requests from loc engine. */
+class LocApiV02Adapter : public LocApiAdapter {
+
+  /* loc api v02 handle*/
+  locClientHandleType clientHandle;
+
+  /* events the client is registered for */
+  locClientEventMaskType eventMask;
+
+  /* current session state */
+  bool navigating;
+
+  /* current fix criteria, for Loc aPI V02 this is
+     stored when set_position_mode is called and
+     sent out with Loc aPI V02 start message when the
+     start_fix() is called by loc engine. */
+  LocApiV02FixCriteria fixCriteria;
+
+  /* Convert event mask from loc eng to loc_api_v02 format */
+  locClientEventMaskType convertMask(LOC_API_ADAPTER_EVENT_MASK_T mask);
+
+  /* Convert error from loc_api_v02 to loc eng format*/
+  enum loc_api_adapter_err convertErr(locClientStatusEnumType status);
+
+  /* convert Ni Encoding type from QMI_LOC to loc eng format */
+  GpsNiEncodingType convertNiEncoding(
+    qmiLocNiDataCodingSchemeEnumT_v02 loc_encoding);
+
+  /*convert NI notify verify type from QMI LOC to loc eng format*/
+  bool convertNiNotifyVerifyType (GpsNiNotification *notif,
+      qmiLocNiNotifyVerifyEnumT_v02 notif_priv);
+
+  /* close Loc API V02 client */
+  int deInitLocClient();
+
+  /* convert position report to loc eng format and send the converted
+     position to loc eng */
+  void reportPosition
+    (const qmiLocEventPositionReportIndMsgT_v02 *location_report_ptr);
+
+  /* convert satellite report to loc eng format and  send the converted
+     report to loc eng */
+  void reportSv (const qmiLocEventGnssSvInfoIndMsgT_v02 *gnss_report_ptr);
+
+  /* convert engine state report to loc eng format and send the converted
+     report to loc eng */
+  void reportEngineState (
+    const qmiLocEventEngineStateIndMsgT_v02 *engine_state_ptr);
+
+  /* convert fix session report to loc eng format and send the converted
+     report to loc eng */
+  void reportFixSessionState (
+    const qmiLocEventFixSessionStateIndMsgT_v02 *fix_session_state_ptr);
+
+  /* convert NMEA report to loc eng format and send the converted
+     report to loc eng */
+  void reportNmea (const qmiLocEventNmeaIndMsgT_v02 *nmea_report_ptr);
+
+  /* convert and report an ATL request to loc engine */
+  void reportAtlRequest(
+    const qmiLocEventLocationServerConnectionReqIndMsgT_v02
+    *server_request_ptr);
+
+  /* convert and report NI request to loc eng */
+  void reportNiRequest(
+    const qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *ni_req_ptr);
+
+public:
+  LocApiV02Adapter(LocEng &locEng);
+  ~LocApiV02Adapter();
+
+  /* event callback registered with the loc_api v02 interface */
+  void eventCb(locClientHandleType client_handle,
+               uint32_t loc_event_id,
+               locClientEventIndUnionType loc_event_payload);
+
+  /* error callback, this function handles the  service unavailable
+     error */
+  void errorCb(locClientHandleType handle,
+               locClientErrorEnumType errorId);
+
+  virtual enum loc_api_adapter_err reinit();
+
+  virtual enum loc_api_adapter_err startFix();
+
+  virtual enum loc_api_adapter_err stopFix();
+
+  virtual enum loc_api_adapter_err
+    setPositionMode(LocPositionMode mode, GpsPositionRecurrence recurrence,
+                    uint32_t min_interval, uint32_t preferred_accuracy,
+                    uint32_t preferred_time);
+
+  virtual enum loc_api_adapter_err
+    setTime(GpsUtcTime time, int64_t timeReference, int uncertainty);
+
+  virtual enum loc_api_adapter_err
+    injectPosition(double latitude, double longitude, float accuracy);
+
+  virtual enum loc_api_adapter_err
+    deleteAidingData(GpsAidingData f);
+
+  virtual enum loc_api_adapter_err
+    informNiResponse(GpsUserResponseType userResponse,
+                     const void* passThroughData);
+
+  virtual enum loc_api_adapter_err
+    setServer(const char* url, int len);
+  virtual enum loc_api_adapter_err
+    setServer(unsigned int ip, int port, LocServerType type);
+  virtual enum loc_api_adapter_err
+    setXtraData(char* data, int length);
+#ifdef QCOM_FEATURE_IPV6
+  virtual enum loc_api_adapter_err
+    atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bear,
+                   AGpsType agpsType);
+#else
+  virtual enum loc_api_adapter_err
+    atlOpenStatus(int handle, int is_succ, char* apn,
+                   AGpsType agpsType);
+#endif
+  virtual enum loc_api_adapter_err atlCloseStatus(int handle, int is_succ);
+  virtual enum loc_api_adapter_err setSUPLVersion(uint32_t version);
+
+  virtual enum loc_api_adapter_err
+    setSensorControlConfig(int sensorUsage);
+
+  virtual enum loc_api_adapter_err
+    setSensorProperties(float gyroBiasVarianceRandomWalk);
+
+  virtual enum loc_api_adapter_err
+    setSensorPerfControlConfig(int controlMode,
+                               int accelSamplesPerBatch,
+                               int accelBatchesPerSec,
+                               int gyroSamplesPerBatch,
+                               int gyroBatchesPerSec);
+};
+
+#endif //LOC_API_V_0_2_ADAPTER_H
diff --git a/loc_api/loc_api_v02/loc_api_sync_req.c b/loc_api/loc_api_v02/loc_api_sync_req.c
new file mode 100755
index 0000000..b75f163
--- /dev/null
+++ b/loc_api/loc_api_v02/loc_api_sync_req.c
@@ -0,0 +1,548 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#include <stdio.h>
+#include <assert.h>
+#include <errno.h>
+#include <sys/time.h>
+#include <string.h>
+#include <pthread.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+#include "loc_api_v02_client.h"
+#include "loc_api_v02_log.h"
+#include "loc_api_sync_req.h"
+
+/* Logging */
+// Uncomment to log verbose logs
+#define LOG_NDEBUG 1
+
+// log debug logs
+#define LOG_NDDEBUG 1
+#define LOG_TAG "LocSvc_api_v02"
+#include "loc_util_log.h"
+
+#define LOC_SYNC_REQ_BUFFER_SIZE 8
+
+pthread_mutex_t  loc_sync_call_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+static bool loc_sync_call_initialized = false;
+
+typedef struct {
+   pthread_mutex_t         sync_req_lock;
+
+   /* Client ID */
+   locClientHandleType     client_handle;
+
+   /*  waiting conditional variable */
+   pthread_cond_t          ind_arrived_cond;
+
+   /* Callback waiting data block, protected by loc_cb_data_mutex */
+   bool                    ind_is_selected;              /* is cb selected? */
+   bool                    ind_is_waiting;               /* is waiting?     */
+   bool                    ind_has_arrived;              /* callback has arrived */
+   uint32_t                req_id;                    /*  sync request */
+   void                    *recv_ind_payload_ptr; /* received  payload */
+   uint32_t                recv_ind_id;      /* received  ind   */
+
+} loc_sync_req_data_s_type;
+
+typedef struct {
+   bool                        in_use;  /* at least one sync call is active */
+   bool                        slot_in_use[LOC_SYNC_REQ_BUFFER_SIZE];
+   loc_sync_req_data_s_type    slots[LOC_SYNC_REQ_BUFFER_SIZE];
+} loc_sync_req_array_s_type;
+
+/***************************************************************************
+ *                 DATA FOR ASYNCHRONOUS RPC PROCESSING
+ **************************************************************************/
+loc_sync_req_array_s_type loc_sync_array;
+
+/*===========================================================================
+
+FUNCTION   loc_sync_req_init
+
+DESCRIPTION
+   Initialize this module
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   none
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_sync_req_init()
+{
+   LOC_LOGV(" %s:%d]:\n", __func__, __LINE__);
+   pthread_mutex_lock(&loc_sync_call_mutex);
+   if(true == loc_sync_call_initialized)
+   {
+      LOC_LOGD("%s:%d]:already initialized\n", __func__, __LINE__);
+      pthread_mutex_unlock(&loc_sync_call_mutex);
+      return;
+   }
+
+   loc_sync_array.in_use = false;
+
+   memset(loc_sync_array.slot_in_use, 0, sizeof(loc_sync_array.slot_in_use));
+
+   int i;
+   for (i = 0; i < LOC_SYNC_REQ_BUFFER_SIZE; i++)
+   {
+      loc_sync_req_data_s_type *slot = &loc_sync_array.slots[i];
+
+      pthread_mutex_init(&slot->sync_req_lock, NULL);
+      pthread_cond_init(&slot->ind_arrived_cond, NULL);
+
+      slot->client_handle = LOC_CLIENT_INVALID_HANDLE_VALUE;
+      slot->ind_is_selected = false;       /* is ind selected? */
+      slot->ind_is_waiting  = false;       /* is waiting?     */
+      slot->ind_has_arrived = false;       /* callback has arrived */
+      slot->recv_ind_id = 0;       /* ind to wait for   */
+      slot->recv_ind_payload_ptr = NULL;
+      slot->req_id =  0;   /* req id   */
+   }
+
+   loc_sync_call_initialized = true;
+   pthread_mutex_unlock(&loc_sync_call_mutex);
+}
+
+
+/*===========================================================================
+
+FUNCTION    loc_sync_process_ind
+
+DESCRIPTION
+   Wakes up blocked API calls to check if the needed callback has arrived
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   none
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+void loc_sync_process_ind(
+      locClientHandleType    client_handle, /* handle of the client */
+      uint32_t               ind_id ,      /* ind id */
+      void                   *ind_payload_ptr /* payload              */
+)
+{
+
+   LOC_LOGV("%s:%d]: received indication, handle = %d ind_id = %d \n",
+                 __func__,__LINE__, client_handle, ind_id);
+
+   pthread_mutex_lock(&loc_sync_call_mutex);
+
+   if (!loc_sync_array.in_use)
+   {
+      LOC_LOGD("%s:%d]: loc_sync_array not in use \n",
+                    __func__, __LINE__);
+      pthread_mutex_unlock(&loc_sync_call_mutex);
+      return;
+   }
+
+   bool in_use = false, consumed = false;
+   int i;
+
+   for (i = 0; i < LOC_SYNC_REQ_BUFFER_SIZE && !consumed; i++)
+   {
+      loc_sync_req_data_s_type *slot = &loc_sync_array.slots[i];
+
+      in_use |= loc_sync_array.slot_in_use[i];
+
+      pthread_mutex_lock(&slot->sync_req_lock);
+
+      if ( (loc_sync_array.slot_in_use[i]) && (slot->client_handle == client_handle)
+            && (ind_id == slot->recv_ind_id) && (!slot->ind_has_arrived))
+      {
+         // copy the payload to the slot waiting for this ind
+         size_t payload_size = 0;
+
+         LOC_LOGV("%s:%d]: found slot %d selected for ind %u \n",
+                       __func__, __LINE__, i, ind_id);
+
+         if(true == locClientGetSizeByRespIndId(ind_id, &payload_size) &&
+            NULL != slot->recv_ind_payload_ptr && NULL != ind_payload_ptr)
+         {
+            LOC_LOGV("%s:%d]: copying ind payload size = %u \n",
+                          __func__, __LINE__, payload_size);
+
+            memcpy(slot->recv_ind_payload_ptr, ind_payload_ptr, payload_size);
+
+            consumed = true;
+
+         }
+         /* Received a callback while waiting, wake up thread to check it */
+         if (slot->ind_is_waiting)
+         {
+            slot->recv_ind_id = ind_id;
+
+            pthread_cond_signal(&slot->ind_arrived_cond);
+         }
+         else
+         {
+            /* If callback arrives before wait, remember it */
+            LOC_LOGV("%s:%d]: ind %u arrived before wait was called \n",
+                          __func__, __LINE__, ind_id);
+
+            slot->ind_has_arrived = true;
+         }
+      }
+      pthread_mutex_unlock(&slot->sync_req_lock);
+   }
+
+   if (!in_use) {
+      loc_sync_array.in_use = false;
+   }
+
+   pthread_mutex_unlock(&loc_sync_call_mutex);
+}
+
+/*===========================================================================
+
+FUNCTION    loc_alloc_slot
+
+DESCRIPTION
+   Allocates a buffer slot for the synchronous API call
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Select ID (>=0)     : successful
+   -1                  : buffer full
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_alloc_slot()
+{
+   int i, select_id = -1; /* no free buffer */
+
+   pthread_mutex_lock(&loc_sync_call_mutex);
+
+   for (i = 0; i < LOC_SYNC_REQ_BUFFER_SIZE; i++)
+   {
+      if (!loc_sync_array.slot_in_use[i])
+      {
+         select_id = i;
+         loc_sync_array.slot_in_use[i] = 1;
+         loc_sync_array.in_use = true;
+         break;
+      }
+   }
+
+   pthread_mutex_unlock(&loc_sync_call_mutex);
+   LOC_LOGV("%s:%d]: returning slot %d\n",
+                 __func__, __LINE__, select_id);
+   return select_id;
+}
+
+/*===========================================================================
+
+FUNCTION    loc_free_slot
+
+DESCRIPTION
+   Frees a buffer slot after the synchronous API call
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static void loc_free_slot(int select_id)
+{
+   int i;
+   loc_sync_req_data_s_type *slot;
+
+   pthread_mutex_lock(&loc_sync_call_mutex);
+
+   LOC_LOGD("%s:%d]: freeing slot %d\n", __func__, __LINE__, select_id);
+
+   loc_sync_array.slot_in_use[select_id] = 0;
+
+   slot = &loc_sync_array.slots[select_id];
+
+   slot->client_handle = LOC_CLIENT_INVALID_HANDLE_VALUE;
+   slot->ind_is_selected = false;       /* is ind selected? */
+   slot->ind_is_waiting  = false;       /* is waiting?     */
+   slot->ind_has_arrived = false;       /* callback has arrived */
+   slot->recv_ind_id = 0;       /* ind to wait for   */
+   slot->recv_ind_payload_ptr = NULL;
+   slot->req_id =  0;
+
+   // check if all slots are now free
+   for (i = 0; i < LOC_SYNC_REQ_BUFFER_SIZE; i++)
+   {
+      if (loc_sync_array.slot_in_use[i]) break;
+   }
+
+   if (i >= LOC_SYNC_REQ_BUFFER_SIZE)
+   {
+      loc_sync_array.in_use = false;
+   }
+
+   pthread_mutex_unlock(&loc_sync_call_mutex);
+}
+
+/*===========================================================================
+
+FUNCTION    loc_sync_select_ind
+
+DESCRIPTION
+   Selects which indication to wait for.
+
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Select ID (>=0)     : successful
+   -ENOMEM                  : out of buffer
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_sync_select_ind(
+      locClientHandleType       client_handle,   /* Client handle */
+      uint32_t                  ind_id,  /* ind Id wait for */
+      uint32_t                  req_id,   /* req id */
+      void *                    ind_payload_ptr /* ptr where payload should be copied to*/
+)
+{
+   int select_id = loc_alloc_slot();
+
+   LOC_LOGV("%s:%d]: client handle %d, ind_id %u, req_id %u \n",
+                 __func__, __LINE__, client_handle, ind_id, req_id);
+
+   if (select_id < 0)
+   {
+      LOC_LOGE("%s:%d]: buffer full for this synchronous req %s \n",
+                 __func__, __LINE__, loc_get_v02_event_name(req_id));
+      return -ENOMEM;
+   }
+
+   loc_sync_req_data_s_type *slot = &loc_sync_array.slots[select_id];
+
+   pthread_mutex_lock(&slot->sync_req_lock);
+
+   slot->client_handle = client_handle;
+   slot->ind_is_selected = true;
+   slot->ind_is_waiting = false;
+   slot->ind_has_arrived = false;
+
+   slot->recv_ind_id = ind_id;
+   slot->req_id      = req_id;
+   slot->recv_ind_payload_ptr = ind_payload_ptr; //store the payload ptr
+
+   pthread_mutex_unlock(&slot->sync_req_lock);
+
+   return select_id;
+}
+
+
+/*===========================================================================
+
+FUNCTION    loc_sync_wait_for_ind
+
+DESCRIPTION
+   Waits for a selected indication. The wait expires in timeout_seconds seconds.
+   If the function is called before an existing wait has finished, it will
+   immediately return error.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+  0 on SUCCESS, -ve value on failure
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static int loc_sync_wait_for_ind(
+      int select_id,        /* ID from loc_sync_select_ind() */
+      int timeout_seconds,  /* Timeout in this number of seconds  */
+      uint32_t ind_id
+)
+{
+   if (select_id < 0 || select_id >= LOC_SYNC_REQ_BUFFER_SIZE || !loc_sync_array.slot_in_use[select_id])
+   {
+      LOC_LOGE("%s:%d]: invalid select_id: %d \n",
+                    __func__, __LINE__, select_id);
+
+      return (-EINVAL);
+   }
+
+   loc_sync_req_data_s_type *slot = &loc_sync_array.slots[select_id];
+
+   int ret_val = 0;  /* the return value of this function: 0 = no error */
+   int rc;          /* return code from pthread calls */
+
+   struct timeval present_time;
+   struct timespec expire_time;
+
+   pthread_mutex_lock(&slot->sync_req_lock);
+
+  do
+  {
+      if (slot->ind_has_arrived)
+      {
+         ret_val = 0;    /* success */
+         break;
+      }
+
+      if (slot->ind_is_waiting)
+      {
+         LOC_LOGW("%s:%d]: already waiting in this slot %d\n", __func__,
+                       __LINE__, select_id);
+         ret_val = -EBUSY; // busy
+         break;
+      }
+
+      /* Calculate absolute expire time */
+      gettimeofday(&present_time, NULL);
+      expire_time.tv_sec  = present_time.tv_sec;
+      expire_time.tv_nsec = present_time.tv_usec * 1000;
+      expire_time.tv_sec += timeout_seconds;
+
+      /* Take new wait request */
+      slot->ind_is_waiting = true;
+
+      /* Waiting */
+      rc = pthread_cond_timedwait(&slot->ind_arrived_cond,
+            &slot->sync_req_lock, &expire_time);
+
+      slot->ind_is_waiting = false;
+
+      if(rc == ETIMEDOUT)
+      {
+         LOC_LOGE("%s:%d]: slot %d, timed out for ind_id %s\n",
+                    __func__, __LINE__, select_id, loc_get_v02_event_name(ind_id));
+         ret_val = -ETIMEDOUT; //time out
+      }
+
+  } while (0);
+
+   pthread_mutex_unlock(&slot->sync_req_lock);
+   loc_free_slot(select_id);
+
+   return ret_val;
+}
+
+/*===========================================================================
+
+FUNCTION    loc_sync_send_req
+
+DESCRIPTION
+   Synchronous req call (thread safe)
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Loc API 2.0 status
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+locClientStatusEnumType loc_sync_send_req
+(
+      locClientHandleType       client_handle,
+      uint32_t                  req_id,        /* req id */
+      locClientReqUnionType     req_payload,
+      uint32_t                  timeout_msec,
+      uint32_t                  ind_id,  //ind ID to block for, usually the same as req_id */
+      void                      *ind_payload_ptr /* can be NULL*/
+)
+{
+   locClientStatusEnumType status = eLOC_CLIENT_SUCCESS ;
+   int select_id;
+   int rc = 0;
+
+   // Select the callback we are waiting for
+   select_id = loc_sync_select_ind(client_handle, ind_id, req_id,
+                                   ind_payload_ptr);
+
+   if (select_id >= 0)
+   {
+      status =  locClientSendReq (client_handle, req_id, req_payload);
+      LOC_LOGV("%s:%d]: select_id = %d,locClientSendReq returned %d\n",
+                    __func__, __LINE__, select_id, status);
+
+      if (status != eLOC_CLIENT_SUCCESS )
+      {
+         loc_free_slot(select_id);
+      }
+      else
+      {
+         // Wait for the indication callback
+         if (( rc = loc_sync_wait_for_ind( select_id,
+                                           timeout_msec / 1000,
+                                           ind_id) ) < 0)
+         {
+            if ( rc == -ETIMEDOUT)
+               status = eLOC_CLIENT_FAILURE_TIMEOUT;
+            else
+               status = eLOC_CLIENT_FAILURE_INTERNAL;
+
+            // Callback waiting failed
+            LOC_LOGE("%s:%d]: loc_api_wait_for_ind failed, err %d, "
+                     "select id %d, status %s", __func__, __LINE__, rc ,
+                     select_id, loc_get_v02_client_status_name(status));
+         }
+         else
+         {
+            status =  eLOC_CLIENT_SUCCESS;
+            LOC_LOGV("%s:%d]: success (select id %d)\n",
+                          __func__, __LINE__, select_id);
+         }
+      }
+   } /* select id */
+
+   return status;
+}
+
+
diff --git a/loc_api/loc_api_v02/loc_api_sync_req.h b/loc_api/loc_api_v02/loc_api_sync_req.h
new file mode 100755
index 0000000..8c7f7f1
--- /dev/null
+++ b/loc_api/loc_api_v02/loc_api_sync_req.h
@@ -0,0 +1,68 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#ifndef LOC_SYNC_REQ_H
+#define LOC_SYNC_REQ_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+#include <stdbool.h>
+#include <stdint.h>
+#include "loc_api_v02_client.h"
+
+#define LOC_ENGINE_SYNC_REQUEST_TIMEOUT  (1000) // 1 second
+
+/* Init function */
+extern void loc_sync_req_init();
+
+
+/* Process Loc API indications to wake up blocked user threads */
+extern void loc_sync_process_ind(
+      locClientHandleType     client_handle,     /* handle of the client */
+      uint32_t                ind_id ,      /* respInd id */
+      void                    *ind_payload_ptr /* payload              */
+);
+
+/* Thread safe synchronous request,  using Loc API status return code */
+extern locClientStatusEnumType loc_sync_send_req
+(
+      locClientHandleType       client_handle,
+      uint32_t                  req_id,        /* req id */
+      locClientReqUnionType     req_payload,
+      uint32_t                  timeout_msec,
+      uint32_t                  ind_id,  //ind ID to block for, usually the same as req_id */
+      void                      *ind_payload_ptr /* can be NULL*/
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_SYNC_REQ_H */
diff --git a/loc_api/loc_api_v02/loc_api_v02_client.c b/loc_api/loc_api_v02/loc_api_v02_client.c
new file mode 100755
index 0000000..4d34adc
--- /dev/null
+++ b/loc_api/loc_api_v02/loc_api_v02_client.c
@@ -0,0 +1,1867 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#include "qmi_client.h"
+#include "qmi_idl_lib.h"
+#include "qmi_cci_target_ext.h"
+
+#if defined( _ANDROID_)
+#include "qmi_cci_target.h"
+#include "qmi_cci_common.h"
+#elif defined(LOC_UTIL_TARGET_OFF_TARGET)
+#include <stdlib.h>
+#include <sys/time.h>
+#include <errno.h>
+#endif //_ANDROID_
+
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include "loc_api_v02_client.h"
+#include "loc_api_v02_log.h"
+
+#define LOG_NDEBUG 0
+#define LOG_TAG "LocSvc_api_v02"
+
+#include "loc_util_log.h"
+
+#ifdef LOC_UTIL_TARGET_OFF_TARGET
+
+// timeout in ms before send_msg_sync should return
+#define LOC_CLIENT_ACK_TIMEOUT (5000)
+
+// timeout in ms before a sync request should return
+#define LOC_CLIENT_SYNC_REQ_TIMEOUT (5000)
+
+#else
+
+// timeout in ms before send_msg_sync should return
+#define LOC_CLIENT_ACK_TIMEOUT (1000)
+
+// timeout in ms before a sync request should return
+#define LOC_CLIENT_SYNC_REQ_TIMEOUT (1000)
+
+#endif //LOC_UTIL_TARGET_OFF_TARGET
+
+//timeout in ms to wait for the service to come up
+#define LOC_CLIENT_SERVICE_TIMEOUT  (20000)
+
+/* Table to relate eventId, size and mask value used to enable the event*/
+typedef struct
+{
+  uint32_t               eventId;
+  size_t                 eventSize;
+  locClientEventMaskType eventMask;
+}locClientEventIndTableStructT;
+
+
+static locClientEventIndTableStructT locClientEventIndTable[]= {
+
+  // position report ind
+  { QMI_LOC_EVENT_POSITION_REPORT_IND_V02,
+    sizeof(qmiLocEventPositionReportIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_POSITION_REPORT_V02 },
+
+  // satellite report ind
+  { QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02,
+    sizeof(qmiLocEventGnssSvInfoIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_GNSS_SV_INFO_V02 },
+
+  // NMEA report ind
+  { QMI_LOC_EVENT_NMEA_IND_V02,
+    sizeof(qmiLocEventNmeaIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_NMEA_V02 },
+
+  //NI event ind
+  { QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02,
+    sizeof(qmiLocEventNiNotifyVerifyReqIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_NI_NOTIFY_VERIFY_REQ_V02 },
+
+  //Time Injection Request Ind
+  { QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02,
+    sizeof(qmiLocEventInjectTimeReqIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_INJECT_TIME_REQ_V02 },
+
+  //Predicted Orbits Injection Request
+  { QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02,
+    sizeof(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_INJECT_PREDICTED_ORBITS_REQ_V02 },
+
+  //Position Injection Request Ind
+  { QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02,
+    sizeof(qmiLocEventInjectPositionReqIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_INJECT_POSITION_REQ_V02 } ,
+
+  //Engine State Report Ind
+  { QMI_LOC_EVENT_ENGINE_STATE_IND_V02,
+    sizeof(qmiLocEventEngineStateIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_ENGINE_STATE_V02 },
+
+  //Fix Session State Report Ind
+  { QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02,
+    sizeof(qmiLocEventFixSessionStateIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_FIX_SESSION_STATE_V02 },
+
+  //Wifi Request Indication
+  { QMI_LOC_EVENT_WIFI_REQ_IND_V02,
+    sizeof(qmiLocEventWifiReqIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_WIFI_REQ_V02 },
+
+  //Sensor Streaming Ready Status Ind
+  { QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02,
+    sizeof(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_SENSOR_STREAMING_READY_STATUS_V02 },
+
+  // Time Sync Request Indication
+  { QMI_LOC_EVENT_TIME_SYNC_REQ_IND_V02,
+    sizeof(qmiLocEventTimeSyncReqIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_TIME_SYNC_REQ_V02 },
+
+  //Set Spi Streaming Report Event
+  { QMI_LOC_EVENT_SET_SPI_STREAMING_REPORT_IND_V02,
+    sizeof(qmiLocEventSetSpiStreamingReportIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_SET_SPI_STREAMING_REPORT_V02 },
+
+  //Location Server Connection Request event
+  { QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02,
+    sizeof(qmiLocEventLocationServerConnectionReqIndMsgT_v02),
+    QMI_LOC_EVENT_MASK_LOCATION_SERVER_CONNECTION_REQ_V02 }
+};
+
+/* table to relate the respInd Id with its size */
+typedef struct
+{
+  uint32_t respIndId;
+  size_t   respIndSize;
+}locClientRespIndTableStructT;
+
+static locClientRespIndTableStructT locClientRespIndTable[]= {
+
+  // get service revision ind
+  { QMI_LOC_GET_SERVICE_REVISION_IND_V02,
+    sizeof(qmiLocGetServiceRevisionIndMsgT_v02)},
+
+  // Get Fix Criteria Resp Ind
+  { QMI_LOC_GET_FIX_CRITERIA_IND_V02,
+     sizeof(qmiLocGetFixCriteriaIndMsgT_v02)},
+
+  // NI User Resp In
+  { QMI_LOC_NI_USER_RESPONSE_IND_V02,
+    sizeof(qmiLocNiUserRespIndMsgT_v02)},
+
+  //Inject Predicted Orbits Data Resp Ind
+  { QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02,
+    sizeof(qmiLocInjectPredictedOrbitsDataIndMsgT_v02)},
+
+  //Get Predicted Orbits Data Src Resp Ind
+  { QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02,
+    sizeof(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02)},
+
+  // Get Predicted Orbits Data Validity Resp Ind
+   { QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_IND_V02,
+     sizeof(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02)},
+
+   // Inject UTC Time Resp Ind
+   { QMI_LOC_INJECT_UTC_TIME_IND_V02,
+     sizeof(qmiLocInjectUtcTimeIndMsgT_v02)},
+
+   //Inject Position Resp Ind
+   { QMI_LOC_INJECT_POSITION_IND_V02,
+     sizeof(qmiLocInjectPositionIndMsgT_v02)},
+
+   //Set Engine Lock Resp Ind
+   { QMI_LOC_SET_ENGINE_LOCK_IND_V02,
+     sizeof(qmiLocSetEngineLockIndMsgT_v02)},
+
+   //Get Engine Lock Resp Ind
+   { QMI_LOC_GET_ENGINE_LOCK_IND_V02,
+     sizeof(qmiLocGetEngineLockIndMsgT_v02)},
+
+   //Set SBAS Config Resp Ind
+   { QMI_LOC_SET_SBAS_CONFIG_IND_V02,
+     sizeof(qmiLocSetSbasConfigIndMsgT_v02)},
+
+   //Get SBAS Config Resp Ind
+   { QMI_LOC_GET_SBAS_CONFIG_IND_V02,
+     sizeof(qmiLocGetSbasConfigIndMsgT_v02)},
+
+   //Set NMEA Types Resp Ind
+   { QMI_LOC_SET_NMEA_TYPES_IND_V02,
+     sizeof(qmiLocSetNmeaTypesIndMsgT_v02)},
+
+   //Get NMEA Types Resp Ind
+   { QMI_LOC_GET_NMEA_TYPES_IND_V02,
+     sizeof(qmiLocGetNmeaTypesIndMsgT_v02)},
+
+   //Set Low Power Mode Resp Ind
+   { QMI_LOC_SET_LOW_POWER_MODE_IND_V02,
+     sizeof(qmiLocSetLowPowerModeIndMsgT_v02)},
+
+   //Get Low Power Mode Resp Ind
+   { QMI_LOC_GET_LOW_POWER_MODE_IND_V02,
+     sizeof(qmiLocGetLowPowerModeIndMsgT_v02)},
+
+   //Set Server Resp Ind
+   { QMI_LOC_SET_SERVER_IND_V02,
+     sizeof(qmiLocSetServerIndMsgT_v02)},
+
+   //Get Server Resp Ind
+   { QMI_LOC_GET_SERVER_IND_V02,
+     sizeof(qmiLocGetServerIndMsgT_v02)},
+
+    //Delete Assist Data Resp Ind
+   { QMI_LOC_DELETE_ASSIST_DATA_IND_V02,
+     sizeof(qmiLocDeleteAssistDataIndMsgT_v02)},
+
+   //Set XTRA-T Session Control Resp Ind
+   { QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02,
+     sizeof(qmiLocSetXtraTSessionControlIndMsgT_v02)},
+
+   //Get XTRA-T Session Control Resp Ind
+   { QMI_LOC_GET_XTRA_T_SESSION_CONTROL_IND_V02,
+     sizeof(qmiLocGetXtraTSessionControlIndMsgT_v02)},
+
+   //Inject Wifi Position Resp Ind
+   { QMI_LOC_INJECT_WIFI_POSITION_IND_V02,
+     sizeof(qmiLocInjectWifiPositionIndMsgT_v02)},
+
+   //Notify Wifi Status Resp Ind
+   { QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02,
+     sizeof(qmiLocNotifyWifiStatusIndMsgT_v02)},
+
+   //Get Registered Events Resp Ind
+   { QMI_LOC_GET_REGISTERED_EVENTS_IND_V02,
+     sizeof(qmiLocGetRegisteredEventsIndMsgT_v02)},
+
+   //Set Operation Mode Resp Ind
+   { QMI_LOC_SET_OPERATION_MODE_IND_V02,
+     sizeof(qmiLocSetOperationModeIndMsgT_v02)},
+
+   //Get Operation Mode Resp Ind
+   { QMI_LOC_GET_OPERATION_MODE_IND_V02,
+     sizeof(qmiLocGetOperationModeIndMsgT_v02)},
+
+   //Set SPI Status Resp Ind
+   { QMI_LOC_SET_SPI_STATUS_IND_V02,
+     sizeof(qmiLocSetSpiStatusIndMsgT_v02)},
+
+   //Inject Sensor Data Resp Ind
+   { QMI_LOC_INJECT_SENSOR_DATA_IND_V02,
+     sizeof(qmiLocInjectSensorDataIndMsgT_v02)},
+
+   //Inject Time Sync Data Resp Ind
+   { QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02,
+     sizeof(qmiLocInjectTimeSyncDataIndMsgT_v02)},
+
+   //Set Cradle Mount config Resp Ind
+   { QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02,
+     sizeof(qmiLocSetCradleMountConfigIndMsgT_v02)},
+
+   //Get Cradle Mount config Resp Ind
+   { QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02,
+     sizeof(qmiLocGetCradleMountConfigIndMsgT_v02)},
+
+   //Set External Power config Resp Ind
+   { QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02,
+     sizeof(qmiLocSetExternalPowerConfigIndMsgT_v02)},
+
+   //Get External Power config Resp Ind
+   { QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02,
+     sizeof(qmiLocGetExternalPowerConfigIndMsgT_v02)},
+
+   //Location server connection status
+   { QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02,
+     sizeof(qmiLocInformLocationServerConnStatusIndMsgT_v02)},
+
+   //Set Protocol Config Parameters
+   { QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02,
+     sizeof(qmiLocSetProtocolConfigParametersIndMsgT_v02)},
+
+   //Get Protocol Config Parameters
+   { QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02,
+     sizeof(qmiLocGetProtocolConfigParametersIndMsgT_v02)},
+
+   //Set Sensor Control Config
+   { QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02,
+     sizeof(qmiLocSetSensorControlConfigIndMsgT_v02)},
+
+   //Get Sensor Control Config
+   { QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02,
+     sizeof(qmiLocGetSensorControlConfigIndMsgT_v02)},
+
+   //Set Sensor Properties
+   { QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02,
+     sizeof(qmiLocSetSensorPropertiesIndMsgT_v02)},
+
+   //Get Sensor Properties
+   { QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02,
+     sizeof(qmiLocGetSensorPropertiesIndMsgT_v02)},
+
+   //Set Sensor Performance Control Config
+   { QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02,
+     sizeof(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02)},
+
+   //Get Sensor Performance Control Config
+   { QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02,
+     sizeof(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02)},
+   //Inject SUPL certificate
+   { QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02,
+     sizeof(qmiLocInjectSuplCertificateIndMsgT_v02) },
+
+   //Delete SUPL certificate
+   { QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02,
+     sizeof(qmiLocDeleteSuplCertificateIndMsgT_v02) },
+
+   // Set Position Engine Config
+   { QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02,
+     sizeof(qmiLocSetPositionEngineConfigParametersIndMsgT_v02)},
+
+   // Get Position Engine Config
+   { QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02,
+     sizeof(qmiLocGetPositionEngineConfigParametersIndMsgT_v02)}
+
+};
+
+
+/** whether indication is an event or a response */
+typedef enum { eventIndType =0, respIndType = 1 } locClientIndEnumT;
+
+
+/** @struct locClientInternalState
+ */
+
+typedef struct
+{
+ // client cookie
+  void *pClientCookie;
+  //QCCI handle for this control point
+  qmi_client_type userHandle;
+
+  // callbacks registered by the clients
+  locClientEventIndCbType eventCallback;
+  locClientRespIndCbType respCallback;
+  locClientErrorCbType   errorCallback;
+
+  // the event mask the client has registered for
+  locClientEventMaskType eventRegMask;
+
+}locClientCallbackDataType;
+
+/*===========================================================================
+ *
+ *                          FUNCTION DECLARATION
+ *
+ *==========================================================================*/
+
+/** locClientGetSizeAndTypeByIndId
+ *  @brief this function gets the size and the type (event,
+ *         response)of the indication structure from its ID
+ *  @param [in]  indId  ID of the indication
+ *  @param [out] type   event or response indication
+ *  @param [out] size   size of the indications
+ *
+ *  @return true if the ID was found, false otherwise */
+
+static bool locClientGetSizeAndTypeByIndId (uint32_t indId, size_t *pIndSize,
+                                         locClientIndEnumT *pIndType)
+{
+  // look in the event table
+  if(true == locClientGetSizeByEventIndId(indId, pIndSize))
+  {
+    *pIndType = eventIndType;
+
+    LOC_LOGV("%s:%d]: indId %d is an event size = %d\n", __func__, __LINE__,
+                  indId, (uint32_t)*pIndSize);
+    return true;
+  }
+
+  //else look in response table
+  if(true == locClientGetSizeByRespIndId(indId, pIndSize))
+  {
+    *pIndType = respIndType;
+
+    LOC_LOGV("%s:%d]: indId %d is a resp size = %d\n", __func__, __LINE__,
+                  indId, (uint32_t)*pIndSize);
+    return true;
+  }
+
+  // Id not found
+  LOC_LOGW("%s:%d]: indId %d not found\n", __func__, __LINE__, indId);
+  return false;
+}
+
+/** isClientRegisteredForEvent
+*  @brief checks the mask to identify if the client has
+*         registered for the specified event Id
+*  @param [in] eventIndId
+*  @param [in] eventRegMask
+*  @return true if client regstered for event; else false */
+
+static bool isClientRegisteredForEvent(
+    locClientEventMaskType eventRegMask,
+    uint32_t eventIndId)
+{
+  size_t idx = 0, eventIndTableSize = 0;
+
+  // look in the event table
+  eventIndTableSize =
+    (sizeof(locClientEventIndTable)/sizeof(locClientEventIndTableStructT));
+
+  for(idx=0; idx<eventIndTableSize; idx++ )
+  {
+    if(eventIndId == locClientEventIndTable[idx].eventId)
+    {
+      LOC_LOGV("%s:%d]: eventId %d registered mask = %llu, "
+                    "eventMask = %llu\n", __func__, __LINE__,
+                     eventIndId, eventRegMask,
+                     locClientEventIndTable[idx].eventMask);
+
+      return((
+          eventRegMask & locClientEventIndTable[idx].eventMask)?
+          true:false);
+    }
+  }
+  LOC_LOGW("%s:%d]: eventId %d not found\n", __func__, __LINE__,
+                 eventIndId);
+  return false;
+}
+
+/** convertQmiResponseToLocStatus
+ @brief converts a qmiLocGenRespMsgT to locClientStatusEnumType*
+ @param [in] pResponse; pointer to the response received from
+        QMI_LOC service.
+ @return locClientStatusEnumType corresponding to the
+         response.
+*/
+
+static locClientStatusEnumType convertQmiResponseToLocStatus(
+  qmiLocGenRespMsgT_v02 *pResponse)
+{
+  locClientStatusEnumType status =  eLOC_CLIENT_FAILURE_INTERNAL;
+
+  // if result == SUCCESS don't look at error code
+  if(pResponse->resp.result == QMI_RESULT_SUCCESS )
+  {
+    status  = eLOC_CLIENT_SUCCESS;
+  }
+  else
+  {
+    switch(pResponse->resp.error)
+    {
+      case QMI_ERR_MALFORMED_MSG_V01:
+        status = eLOC_CLIENT_FAILURE_INVALID_PARAMETER;
+        break;
+
+      case QMI_ERR_DEVICE_IN_USE_V01:
+        status = eLOC_CLIENT_FAILURE_ENGINE_BUSY;
+        break;
+
+      default:
+        status = eLOC_CLIENT_FAILURE_INTERNAL;
+        break;
+    }
+  }
+  LOC_LOGV("%s:%d]: result = %d, error = %d, status = %d\n",
+                __func__, __LINE__, pResponse->resp.result,
+                pResponse->resp.error, status);
+  return status;
+}
+
+/** convertQmiErrorToLocError
+ @brief converts a qmi service error type to
+        locClientErrorEnumType
+ @param [in] error received QMI service.
+ @return locClientErrorEnumType corresponding to the error.
+*/
+
+static locClientErrorEnumType convertQmiErrorToLocError(
+  qmi_client_error_type error)
+{
+  locClientErrorEnumType locError ;
+  switch(error)
+  {
+    case QMI_SERVICE_ERR:
+      locError = eLOC_CLIENT_ERROR_SERVICE_UNAVAILABLE;
+      break;
+
+    default:
+      locError = eLOC_CLIENT_ERROR_SERVICE_UNAVAILABLE;
+      break;
+  }
+  LOC_LOGV("%s:%d]: qmi error = %d, loc error = %d\n",
+                __func__, __LINE__, error, locError);
+  return locError;
+}
+
+/** locClienHandlePosReportInd
+ *  @brief Validates a position report ind
+ *  @param [in] msg_id
+ *  @param [in] ind_buf
+ *  @param [in] ind_buf_len
+ *  @return true if pos report is valid, false otherwise
+*/
+static bool locClientHandlePosReportInd
+(
+ uint32_t        msg_id,
+ const void*     ind_buf,
+ uint32_t        ind_buf_len
+)
+{
+  // validate position report
+  qmiLocEventPositionReportIndMsgT_v02 *posReport =
+    (qmiLocEventPositionReportIndMsgT_v02 *)ind_buf;
+
+  LOC_LOGV ("%s:%d]: len = %d lat = %f, lon = %f, alt = %f\n",
+                 __func__, __LINE__, ind_buf_len,
+                 posReport->latitude, posReport->longitude,
+                 posReport->altitudeWrtEllipsoid);
+
+  return true;
+}
+//-----------------------------------------------------------------------------
+
+/** locClientHandleSatReportInd
+ *  @brief Validates a satellite report indication. Dk
+ *  @param [in] msg_id
+ *  @param [in] ind_buf
+ *  @param [in] ind_buf_len
+ *  @return true if sat report is valid, false otherwise
+*/
+static bool locClientHandleSatReportInd
+(
+ uint32_t        msg_id,
+ const void*     ind_buf,
+ uint32_t        ind_buf_len
+)
+{
+  // validate sat reports
+  unsigned int idx = 0;
+  qmiLocEventGnssSvInfoIndMsgT_v02 *satReport =
+    (qmiLocEventGnssSvInfoIndMsgT_v02 *)ind_buf;
+
+  LOC_LOGV ("%s:%d]: len = %u , altitude assumed = %u, num SV's = %u"
+                 " validity = %d \n ", __func__, __LINE__,
+                 ind_buf_len, satReport->altitudeAssumed,
+                 satReport->svList_len, satReport->svList_valid);
+  //Log SV report
+  for( idx = 0; idx <satReport->svList_len; idx++ )
+  {
+    LOC_LOGV("%s:%d]: valid_mask = %x, prn = %u, system = %d, "
+                  "status = %d \n", __func__, __LINE__,
+                  satReport->svList[idx].validMask, satReport->svList[idx].gnssSvId,
+                  satReport->svList[idx].system, satReport->svList[idx].svStatus);
+  }
+
+   return true;
+}
+
+
+/** locClientHandleNmeaReportInd
+ *  @brief Validate a NMEA report indication.
+ *  @param [in] msg_id
+ *  @param [in] ind_buf
+ *  @param [in] ind_buf_len
+ *  @return true if nmea report is valid, false otherwise
+*/
+
+
+static bool locClientHandleNmeaReportInd
+(
+ uint32_t        msg_id,
+ const void*     ind_buf,
+ uint32_t        ind_buf_len
+)
+{
+ // validate NMEA report
+  return true;
+}
+
+/** locClientHandleGetServiceRevisionRespInd
+ *  @brief Handles a Get Service Revision Rresponse indication.
+ *  @param [in] msg_id
+ *  @param [in] ind_buf
+ *  @param [in] ind_buf_len
+ *  @return true if service revision is valid, false otherwise
+*/
+
+static bool locClientHandleGetServiceRevisionRespInd
+(
+ uint32_t        msg_id,
+ const void*     ind_buf,
+ uint32_t        ind_buf_len
+)
+{
+  LOC_LOGV("%s:%d] :\n", __func__, __LINE__);
+  return true;
+}
+
+/** locClientHandleIndication
+ *  @brief looks at each indication and calls the appropriate
+ *         validation handler
+ *  @param [in] indId
+ *  @param [in] indBuffer
+ *  @param [in] indSize
+ *  @return true if indication was validated; else false */
+
+static bool locClientHandleIndication(
+  uint32_t        indId,
+  void*           indBuffer,
+  size_t          indSize
+ )
+{
+  bool status = false;
+  switch(indId)
+  {
+    // handle the event indications
+    //-------------------------------------------------------------------------
+
+    // handle position report
+    case QMI_LOC_EVENT_POSITION_REPORT_IND_V02:
+    {
+      status = locClientHandlePosReportInd(indId, indBuffer, indSize);
+      break;
+    }
+    // handle satellite report
+    case QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02:
+    {
+      status = locClientHandleSatReportInd(indId, indBuffer, indSize);
+      break;
+    }
+
+    // handle NMEA report
+    case QMI_LOC_EVENT_NMEA_IND_V02:
+    {
+      status = locClientHandleNmeaReportInd(indId, indBuffer, indSize);
+      break;
+    }
+
+    // handle NI Notify Verify Request Ind
+    case QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02:
+    {
+     // locClientHandleNiReqInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    // handle Time Inject request Ind
+    case QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02:
+    {
+     // locClientHandleTimeInjectReqInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    // handle XTRA data Inject request Ind
+    case QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02:
+    {
+     // locClientHandleXtraInjectReqInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    // handle position inject request Ind
+    case QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02:
+    {
+     // locClientHandlePositionInjectReqInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    // handle engine state Ind
+    case QMI_LOC_EVENT_ENGINE_STATE_IND_V02:
+    {
+     // locClientHandleEngineStateInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    // handle fix session state Ind
+    case QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02:
+    {
+     // locClientHandleFixSessionStateInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    // handle Wifi request Ind
+    case QMI_LOC_EVENT_WIFI_REQ_IND_V02:
+    {
+     // locClientHandleWifiReqInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    // handle sensor streaming ready status Ind
+    case QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02:
+    {
+     // locClientHandleSensorStreamingReadyInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    // handle time sync  Ind
+    case QMI_LOC_EVENT_TIME_SYNC_REQ_IND_V02:
+    {
+     // locClientHandleTimeSyncReqInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    // handle set streaming report ind
+    case QMI_LOC_EVENT_SET_SPI_STREAMING_REPORT_IND_V02:
+    {
+     // locClientHandleSetSpiStreamingInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02:
+    {
+      //locClientHandleLocServerConnReqInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    //-------------------------------------------------------------------------
+
+    // handle the response indications
+    //-------------------------------------------------------------------------
+
+    // Get service Revision response indication
+    case QMI_LOC_GET_SERVICE_REVISION_IND_V02:
+    {
+      status = locClientHandleGetServiceRevisionRespInd(indId,
+                                                        indBuffer, indSize);
+      break;
+    }
+    // predicted orbits data response indication
+    case QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02:
+    {
+      //locClientHandleInjectPredictedOrbitsDataInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_INJECT_SENSOR_DATA_IND_V02 :
+    {
+      //locClientHandleInjectSensorDataInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02:
+    {
+      //locClientHandleGetProtocolConfigParametersInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02:
+    {
+      //locClientHandleSetProtocolConfigParametersInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02:
+    {
+      //locClientHandleGetExtPowerConfigInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02:
+    {
+      //locClientHandleGetCradleMountConfigInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02:
+    {
+      //locClientHandleGetSensorControlConfigInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02:
+    {
+      //locClientHandleGetSensorPerformanceControlConfigInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02:
+    {
+      //locClientHandleGetSensorPropertiesInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02:
+    {
+      //locClientHandleSetSensorPerformanceControlConfigInd(user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02:
+    {
+    // locClientHandleSetPositionEngineConfigParam(
+    //     user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+
+    case QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02:
+    {
+      // locClientHandleSetPositionEngineConfigParam(
+      //     user_handle, msg_id, ind_buf, ind_buf_len);
+      status = true;
+      break;
+    }
+    // for indications that only have a "status" field
+    case QMI_LOC_NI_USER_RESPONSE_IND_V02:
+    case QMI_LOC_INJECT_UTC_TIME_IND_V02:
+    case QMI_LOC_INJECT_POSITION_IND_V02:
+    case QMI_LOC_SET_ENGINE_LOCK_IND_V02:
+    case QMI_LOC_SET_SBAS_CONFIG_IND_V02:
+    case QMI_LOC_SET_NMEA_TYPES_IND_V02:
+    case QMI_LOC_SET_LOW_POWER_MODE_IND_V02:
+    case QMI_LOC_SET_SERVER_IND_V02:
+    case QMI_LOC_DELETE_ASSIST_DATA_IND_V02:
+    case QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02:
+    case QMI_LOC_INJECT_WIFI_POSITION_IND_V02:
+    case QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02:
+    case QMI_LOC_SET_OPERATION_MODE_IND_V02:
+    case QMI_LOC_SET_SPI_STATUS_IND_V02:
+    case QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02:
+    case QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02:
+    case QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02:
+    case QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02:
+    case QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02:
+    case QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02:
+    case QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02:
+    case QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02:
+    {
+      status = true;
+      break;
+    }
+    default:
+      LOC_LOGW("%s:%d]: unknown ind id %d\n", __func__, __LINE__,
+                   (uint32_t)indId);
+      status = false;
+      break;
+  }
+  return status;
+}
+
+
+/** locClientErrorCb
+ *  @brief handles the QCCI error events, this is called by the
+ *         QCCI infrastructure when the service is no longer
+ *         available.
+ *  @param [in] user handle
+ *  @param [in] error
+ *  @param [in] *err_cb_data
+ */
+
+static void locClientErrorCb
+(
+  qmi_client_type user_handle,
+  qmi_client_error_type error,
+  void *err_cb_data
+)
+{
+  locClientCallbackDataType* pCallbackData =
+        (locClientCallbackDataType *)err_cb_data;
+
+  /* copy the errorCallback function pointer from the callback
+   * data to local variable. This is to protect against the race
+   * condition between open/close and error callback.
+   */
+  locClientErrorCbType localErrorCallback =
+      pCallbackData->errorCallback;
+
+  LOC_LOGD("%s:%d]: Service Error %d received, pCallbackData = %p\n",
+      __func__, __LINE__, error, err_cb_data);
+
+  /* call the error callback
+   * To avoid calling the errorCallback after locClientClose
+   * is called, check pCallbackData->errorCallback again here
+   */
+
+  if( (NULL != pCallbackData) &&
+      (NULL != localErrorCallback) &&
+      (NULL != pCallbackData->errorCallback) )
+  {
+    //invoke the error callback for the corresponding client
+    localErrorCallback(
+        (locClientHandleType)pCallbackData,
+        convertQmiErrorToLocError(error),
+        pCallbackData->pClientCookie);
+  }
+}
+
+
+/** locClientIndCb
+ *  @brief handles the indications sent from the service, if a
+ *         response indication was received then the it is sent
+ *         to the response callback. If a event indication was
+ *         received then it is sent to the event callback
+ *  @param [in] user handle
+ *  @param [in] msg_id
+ *  @param [in] ind_buf
+ *  @param [in] ind_buf_len
+ *  @param [in] ind_cb_data */
+
+static void locClientIndCb
+(
+ qmi_client_type                user_handle,
+ unsigned int                   msg_id,
+ void                           *ind_buf,
+ unsigned int                   ind_buf_len,
+ void                           *ind_cb_data
+)
+{
+  locClientIndEnumT indType;
+  size_t indSize = 0;
+  qmi_client_error_type rc ;
+  locClientCallbackDataType* pCallbackData =
+      (locClientCallbackDataType *)ind_cb_data;
+
+  LOC_LOGV("%s:%d]: Indication: msg_id=%d buf_len=%d pCallbackData = %p\n",
+                __func__, __LINE__, (uint32_t)msg_id, ind_buf_len,
+                pCallbackData);
+
+  // check callback data
+  if(NULL == pCallbackData)
+  {
+    LOC_LOGE("%s:%d]: invalid callback data", __func__, __LINE__);
+    return;
+  }
+
+  // check user handle
+  if(memcmp(&pCallbackData->userHandle, &user_handle, sizeof(user_handle)))
+  {
+    LOC_LOGE("%s:%d]: invalid user_handle got 0x%x expected 0x%x\n",
+        __func__, __LINE__,
+        user_handle, pCallbackData->userHandle);
+    return;
+  }
+  // Get the indication size and type ( eventInd or respInd)
+  if( true == locClientGetSizeAndTypeByIndId(msg_id, &indSize, &indType))
+  {
+    void *indBuffer = NULL;
+
+    // if the client did not register for this event then just drop it
+     if( (eventIndType == indType) &&
+         ( (NULL == pCallbackData->eventCallback) ||
+         (false == isClientRegisteredForEvent(pCallbackData->eventRegMask, msg_id)) ) )
+    {
+       LOC_LOGW("%s:%d]: client is not registered for event %d\n",
+                     __func__, __LINE__, (uint32_t)msg_id);
+       return;
+    }
+
+    // decode the indication
+    indBuffer = malloc(indSize);
+
+    if(NULL == indBuffer)
+    {
+      LOC_LOGE("%s:%d]: memory allocation failed\n", __func__, __LINE__);
+      return;
+    }
+
+    // decode the indication
+    rc = qmi_client_message_decode(
+        user_handle,
+        QMI_IDL_INDICATION,
+        msg_id,
+        ind_buf,
+        ind_buf_len,
+        indBuffer,
+        indSize);
+
+    if( rc == QMI_NO_ERR )
+    {
+      //validate indication
+      if (true == locClientHandleIndication(msg_id, indBuffer, indSize))
+      {
+        if(eventIndType == indType)
+        {
+          locClientEventIndUnionType eventIndUnion;
+
+          /* copy the eventCallback function pointer from the callback
+           * data to local variable. This is to protect against the race
+           * condition between open/close and indication callback.
+           */
+           locClientEventIndCbType localEventCallback =
+               pCallbackData->eventCallback;
+
+          // dummy event
+          eventIndUnion.pPositionReportEvent =
+            (qmiLocEventPositionReportIndMsgT_v02 *)indBuffer;
+
+          /* call the event callback
+           * To avoid calling the eventCallback after locClientClose
+           * is called, check pCallbackData->eventCallback again here
+           */
+          if((NULL != localEventCallback) &&
+              (NULL != pCallbackData->eventCallback))
+          {
+            localEventCallback(
+                (locClientHandleType)pCallbackData,
+                msg_id,
+                eventIndUnion,
+                pCallbackData->pClientCookie);
+          }
+        }
+        else if(respIndType == indType)
+        {
+          locClientRespIndUnionType respIndUnion;
+
+          /* copy the respCallback function pointer from the callback
+           * data to local variable. This is to protect against the race
+           * condition between open/close and indication callback.
+           */
+          locClientRespIndCbType localRespCallback =
+              pCallbackData->respCallback;
+
+          // dummy to suppress compiler warnings
+          respIndUnion.pDeleteAssistDataInd =
+            (qmiLocDeleteAssistDataIndMsgT_v02 *)indBuffer;
+
+          /* call the response callback
+           * To avoid calling the respCallback after locClientClose
+           * is called, check pCallbackData->respCallback again here
+           */
+          if((NULL != localRespCallback) &&
+              (NULL != pCallbackData->respCallback))
+          {
+            localRespCallback(
+                (locClientHandleType)pCallbackData,
+                msg_id,
+                respIndUnion,
+                pCallbackData->pClientCookie);
+          }
+        }
+      }
+      else // error handling indication
+      {
+        LOC_LOGE("%s:%d]: Error handling the indication %d\n",
+                      __func__, __LINE__, (uint32_t)msg_id);
+      }
+    }
+    else
+    {
+      LOC_LOGE("%s:%d]: Error decoding indication %d\n",
+                    __func__, __LINE__, rc);
+    }
+    if(indBuffer)
+    {
+      free (indBuffer);
+    }
+  }
+  else // Id not found
+  {
+    LOC_LOGE("%s:%d]: Error indication not found %d\n",
+                  __func__, __LINE__,(uint32_t)msg_id);
+  }
+  return;
+}
+
+
+/** locClientRegisterEventMask
+ *  @brief registers the event mask with loc service
+ *  @param [in] clientHandle
+ *  @param [in] eventRegMask
+ *  @return true if indication was validated; else false */
+
+static bool locClientRegisterEventMask(
+    locClientHandleType clientHandle,
+    locClientEventMaskType eventRegMask)
+{
+  locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
+  locClientReqUnionType reqUnion;
+  qmiLocRegEventsReqMsgT_v02 regEventsReq;
+
+  memset(&regEventsReq, 0, sizeof(regEventsReq));
+
+  regEventsReq.eventRegMask = eventRegMask;
+  reqUnion.pRegEventsReq = &regEventsReq;
+
+  status = locClientSendReq(clientHandle,
+                            QMI_LOC_REG_EVENTS_REQ_V02,
+                            reqUnion);
+
+  if(eLOC_CLIENT_SUCCESS != status )
+  {
+    LOC_LOGE("%s:%d] status %s\n", __func__, __LINE__,
+             loc_get_v02_client_status_name(status) );
+    return false;
+  }
+
+  return true;
+}
+
+/**  validateRequest
+  @brief validates the input request
+  @param [in] reqId       request ID
+  @param [in] reqPayload  Union of pointers to message payload
+  @param [out] ppOutData  Pointer to void *data if successful
+  @param [out] pOutLen    Pointer to length of data if succesful.
+  @return false on failure, true on Success
+*/
+
+static bool validateRequest(
+  uint32_t                    reqId,
+  const locClientReqUnionType reqPayload,
+  void                        **ppOutData,
+  uint32_t                    *pOutLen )
+
+{
+  bool noPayloadFlag = false;
+
+  LOC_LOGV("%s:%d]: reqId = %d\n", __func__, __LINE__, reqId);
+  switch(reqId)
+  {
+    case QMI_LOC_INFORM_CLIENT_REVISION_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocInformClientRevisionReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_REG_EVENTS_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocRegEventsReqMsgT_v02);
+       break;
+    }
+
+    case QMI_LOC_START_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocStartReqMsgT_v02);
+       break;
+    }
+
+    case QMI_LOC_STOP_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocStopReqMsgT_v02);
+       break;
+    }
+
+    case QMI_LOC_NI_USER_RESPONSE_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocNiUserRespReqMsgT_v02);
+       break;
+    }
+
+    case QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocInjectPredictedOrbitsDataReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_INJECT_UTC_TIME_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocInjectUtcTimeReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_INJECT_POSITION_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocInjectPositionReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_ENGINE_LOCK_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetEngineLockReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_SBAS_CONFIG_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetSbasConfigReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_NMEA_TYPES_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetNmeaTypesReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_LOW_POWER_MODE_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetLowPowerModeReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_SERVER_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetServerReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_DELETE_ASSIST_DATA_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocDeleteAssistDataReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetXtraTSessionControlReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_INJECT_WIFI_POSITION_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocInjectWifiPositionReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocNotifyWifiStatusReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_OPERATION_MODE_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetOperationModeReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_SPI_STATUS_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetSpiStatusReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_INJECT_SENSOR_DATA_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocInjectSensorDataReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocInjectTimeSyncDataReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_CRADLE_MOUNT_CONFIG_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetCradleMountConfigReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetExternalPowerConfigReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocInformLocationServerConnStatusReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetProtocolConfigParametersReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocGetProtocolConfigParametersReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetSensorControlConfigReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetSensorPropertiesReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02);
+      break;
+    }
+
+    case QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocInjectSuplCertificateReqMsgT_v02);
+      break;
+    }
+    case QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocDeleteSuplCertificateReqMsgT_v02);
+      break;
+    }
+    case QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocSetPositionEngineConfigParametersReqMsgT_v02);
+      break;
+    }
+    case QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02:
+    {
+      *pOutLen = sizeof(qmiLocGetPositionEngineConfigParametersReqMsgT_v02);
+      break;
+    }
+
+    // ALL requests with no payload
+    case QMI_LOC_GET_SERVICE_REVISION_REQ_V02:
+    case QMI_LOC_GET_FIX_CRITERIA_REQ_V02:
+    case QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02:
+    case QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_REQ_V02:
+    case QMI_LOC_GET_ENGINE_LOCK_REQ_V02:
+    case QMI_LOC_GET_SBAS_CONFIG_REQ_V02:
+    case QMI_LOC_GET_NMEA_TYPES_REQ_V02:
+    case QMI_LOC_GET_LOW_POWER_MODE_REQ_V02:
+    case QMI_LOC_GET_SERVER_REQ_V02:
+    case QMI_LOC_GET_XTRA_T_SESSION_CONTROL_REQ_V02:
+    case QMI_LOC_GET_REGISTERED_EVENTS_REQ_V02:
+    case QMI_LOC_GET_OPERATION_MODE_REQ_V02:
+    case QMI_LOC_GET_CRADLE_MOUNT_CONFIG_REQ_V02:
+    case QMI_LOC_GET_EXTERNAL_POWER_CONFIG_REQ_V02:
+    case QMI_LOC_GET_SENSOR_CONTROL_CONFIG_REQ_V02:
+    case QMI_LOC_GET_SENSOR_PROPERTIES_REQ_V02:
+    case QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02:
+    {
+      noPayloadFlag = true;
+      break;
+    }
+
+    default:
+      LOC_LOGW("%s:%d]: Error unknown reqId=%d\n", __func__, __LINE__,
+                    reqId);
+      return false;
+  }
+  if(true == noPayloadFlag)
+  {
+    *ppOutData = NULL;
+    *pOutLen = 0;
+  }
+  else
+  {
+    //set dummy pointer for request union
+    *ppOutData = (void*) reqPayload.pInformClientRevisionReq;
+  }
+  LOC_LOGV("%s:%d]: reqId=%d, len = %d\n", __func__, __LINE__,
+                reqId, *pOutLen);
+  return true;
+}
+
+/** locClientQmiCtrlPointInit
+ @brief wait for the service to come up or timeout; when the
+        service comes up initialize the control point and set
+        internal handle and indication callback.
+ @param pQmiClient,
+*/
+
+static locClientStatusEnumType locClientQmiCtrlPointInit(
+    locClientCallbackDataType *pLocClientCbData)
+{
+  uint32_t num_services, num_entries = 10;
+  qmi_client_type clnt, notifier;
+  qmi_client_os_params os_params;
+
+  // num instances of this service
+  qmi_service_info serviceInfo[5];
+
+  qmi_client_error_type rc = QMI_NO_ERR;
+
+  // Get the service object for the qmiLoc Service
+  qmi_idl_service_object_type locClientServiceObject =
+    loc_get_service_object_v02();
+
+  // Verify that qmiLoc_get_service_object did not return NULL
+  if (NULL == locClientServiceObject)
+  {
+      LOC_LOGE("%s:%d]: qmiLoc_get_service_object_v02 failed\n" ,
+                  __func__, __LINE__ );
+    return(eLOC_CLIENT_FAILURE_INTERNAL);
+  }
+
+
+  // register for service notification
+  rc = qmi_client_notifier_init(locClientServiceObject, &os_params, &notifier);
+
+  if(rc != QMI_NO_ERR)
+  {
+    LOC_LOGE("%s:%d]: qmi_client_notifier_init failed\n",
+                  __func__, __LINE__ );
+    return(eLOC_CLIENT_FAILURE_INTERNAL);
+  }
+
+  /* If service is not up wait on a signal until the service is up
+   * or a timeout occurs. */
+
+  QMI_CCI_OS_SIGNAL_WAIT(&os_params, LOC_CLIENT_SERVICE_TIMEOUT);
+
+  if(QMI_CCI_OS_SIGNAL_TIMED_OUT(&os_params))
+  {
+    // timed out, return with error
+    LOC_LOGE("%s:%d]: timed out waiting for service\n",
+                    __func__, __LINE__);
+
+    return(eLOC_CLIENT_FAILURE_TIMEOUT);
+  }
+  else
+  {
+    // get the service addressing information
+    rc = qmi_client_get_service_list( locClientServiceObject, NULL, NULL,
+                                      &num_services);
+    LOC_LOGV("%s:%d]: qmi_client_get_service_list() returned %d "
+                  "num_services = %d\n", __func__, __LINE__, rc,
+                  num_services);
+
+    if(rc != QMI_NO_ERR)
+    {
+      LOC_LOGE("%s:%d]: qmi_client_get_service_list failed even though"
+                    "service is up !!!\n", __func__, __LINE__);
+
+      return(eLOC_CLIENT_FAILURE_INTERNAL);
+    }
+
+  }
+
+  //get service info to be used in qmi_client_init
+  rc = qmi_client_get_service_list( locClientServiceObject, serviceInfo,
+                                    &num_entries, &num_services);
+
+  LOC_LOGV("%s:%d]: qmi_client_get_service_list()"
+                " returned %d num_entries = %d num_services = %d\n",
+                __func__, __LINE__,
+                 rc, num_entries, num_services);
+
+  if(rc != QMI_NO_ERR)
+  {
+    LOC_LOGE("%s:%d]: qmi_client_get_service_list Error %d \n",
+                  __func__, __LINE__, rc);
+
+    return(eLOC_CLIENT_FAILURE_INTERNAL);
+  }
+
+  LOC_LOGV("%s:%d]: passing the pointer %p to qmi_client_init \n",
+                    __func__, __LINE__, pLocClientCbData);
+  // initialize the client
+  rc = qmi_client_init(&serviceInfo[0], locClientServiceObject,
+                       locClientIndCb, (void *) pLocClientCbData,
+                       NULL, &clnt);
+
+  if(rc != QMI_NO_ERR)
+  {
+    LOC_LOGE("%s:%d]: qmi_client_init error %d\n",
+                  __func__, __LINE__, rc);
+    return(eLOC_CLIENT_FAILURE_INTERNAL);
+  }
+
+  LOC_LOGV("%s:%d]: passing the pointer %p to"
+                "qmi_client_register_error_cb \n",
+                 __func__, __LINE__, pLocClientCbData);
+
+  // register error callback
+  rc  = qmi_client_register_error_cb(clnt,
+      locClientErrorCb, (void *) pLocClientCbData);
+
+  if( QMI_NO_ERR != rc)
+  {
+    LOC_LOGE("%s:%d]: could not register QCCI error callback error:%d\n",
+                  __func__, __LINE__, rc);
+    return (eLOC_CLIENT_FAILURE_INTERNAL);
+  }
+
+  // copy the clnt handle returned in qmi_client_init
+  memcpy(&(pLocClientCbData->userHandle), &clnt, sizeof(qmi_client_type));
+
+  return(eLOC_CLIENT_SUCCESS);
+
+}
+//----------------------- END INTERNAL FUNCTIONS ----------------------------------------
+
+/** locClientOpen
+  @brief Connects a location client to the location engine. If the connection
+         is successful, returns a handle that the location client uses for
+         future location operations.
+
+  @param [in] eventRegMask     Mask of asynchronous events the client is
+                               interested in receiving
+  @param [in] eventIndCb       Function to be invoked to handle an event.
+  @param [in] respIndCb        Function to be invoked to handle a response
+                               indication.
+  @param [out] locClientHandle Handle to be used by the client
+                               for any subsequent requests.
+
+  @return
+  One of the following error codes:
+  - eLOC_CLIENT_SUCCESS  -- If the connection is opened.
+  - non-zero error code(see locClientStatusEnumType)--  On failure.
+*/
+
+locClientStatusEnumType locClientOpen (
+  locClientEventMaskType         eventRegMask,
+  const locClientCallbacksType*  pLocClientCallbacks,
+  locClientHandleType*           pLocClientHandle,
+  const void*                    pClientCookie)
+{
+  locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
+  locClientCallbackDataType *pCallbackData = NULL;
+
+  LOC_LOGV("%s:%d] \n", __func__, __LINE__);
+
+  do
+  {
+    // check input parameters
+    if( (NULL == pLocClientCallbacks) || (NULL == pLocClientHandle)
+        || (NULL == pLocClientCallbacks->respIndCb) ||
+        (pLocClientCallbacks->size != sizeof(locClientCallbacksType)))
+    {
+      LOC_LOGE("%s:%d]: Invalid parameters in locClientOpen\n",
+                              __func__, __LINE__);
+      status = eLOC_CLIENT_FAILURE_INVALID_PARAMETER;
+      break;
+    }
+
+    // Allocate memory for the callback data
+    pCallbackData =
+        ( locClientCallbackDataType*)calloc(
+            1, sizeof(locClientCallbackDataType));
+
+    if(NULL == pCallbackData)
+    {
+      LOC_LOGE("%s:%d]: Could not allocate memory for callback data \n",
+                        __func__, __LINE__);
+      status = eLOC_CLIENT_FAILURE_INTERNAL;
+      break;
+    }
+
+    /* Initialize the QMI control point; this function will block
+     * until a service is up or a timeout occurs. If the connection to
+     * the service succeeds the callback data will be filled in with
+     * a qmi_client value.
+     */
+
+
+    EXIT_LOG_CALLFLOW(%s, "loc client open");
+    status = locClientQmiCtrlPointInit(pCallbackData);
+
+    LOC_LOGV ("%s:%d] locClientQmiCtrlPointInit returned %d\n",
+                    __func__, __LINE__, status);
+
+    if(status != eLOC_CLIENT_SUCCESS)
+    {
+      free(pCallbackData);
+      pCallbackData = NULL;
+      break;
+    }
+
+     // set the handle to the callback data
+    *pLocClientHandle = (locClientHandleType)pCallbackData;
+
+    if(true != locClientRegisterEventMask(*pLocClientHandle,eventRegMask))
+    {
+      LOC_LOGE("%s:%d]: Error sending registration mask\n",
+                  __func__, __LINE__);
+
+      // release the client
+      locClientClose(pLocClientHandle);
+
+      status = eLOC_CLIENT_FAILURE_INTERNAL;
+      break;
+    }
+
+    /* Initialize rest of the client structure now that the connection
+     * to the service has been created successfully.
+     */
+
+    //fill in the event callback
+     pCallbackData->eventCallback = pLocClientCallbacks->eventIndCb;
+
+     //fill in the response callback
+     pCallbackData->respCallback = pLocClientCallbacks->respIndCb;
+
+     //fill in the error callback
+     pCallbackData->errorCallback = pLocClientCallbacks->errorCb;
+
+     //set the client event registration mask
+     pCallbackData->eventRegMask = eventRegMask;
+
+     // set the client cookie
+     pCallbackData->pClientCookie = (void *)pClientCookie;
+
+     LOC_LOGD("%s:%d]: returning handle = 0x%x, user_handle=0x%x, status = %d\n",
+              __func__, __LINE__, *pLocClientHandle,
+              pCallbackData->userHandle, status);
+
+  }while(0);
+
+  if(eLOC_CLIENT_SUCCESS != status)
+  {
+    *pLocClientHandle = LOC_CLIENT_INVALID_HANDLE_VALUE;
+  }
+
+  return(status);
+}
+
+/** locClientClose
+  @brief Disconnects a client from the location engine.
+  @param [in] pLocClientHandle  Pointer to the handle returned by the
+                                locClientOpen() function.
+  @return
+  One of the following error codes:
+  - 0 (eLOC_CLIENT_SUCCESS) - On success.
+  - non-zero error code(see locClientStatusEnumType) - On failure.
+*/
+
+locClientStatusEnumType locClientClose(
+  locClientHandleType* pLocClientHandle)
+{
+  qmi_client_error_type rc = QMI_NO_ERR; //No error
+
+  if(NULL == pLocClientHandle)
+  {
+    // invalid handle
+    LOC_LOGE("%s:%d]: invalid pointer to handle \n",
+                  __func__, __LINE__);
+
+    return(eLOC_CLIENT_FAILURE_INVALID_PARAMETER);
+  }
+
+  // convert handle to callback data
+  locClientCallbackDataType *pCallbackData =
+      (locClientCallbackDataType *)(*pLocClientHandle);
+
+  LOC_LOGV("%s:%d]:\n", __func__, __LINE__ );
+
+  // check the input handle for sanity
+  if(NULL == pCallbackData ||
+     NULL == pCallbackData->userHandle)
+  {
+    // invalid handle
+    LOC_LOGE("%s:%d]: invalid handle \n",
+                  __func__, __LINE__);
+
+    return(eLOC_CLIENT_FAILURE_INVALID_HANDLE);
+  }
+
+  LOC_LOGV("locClientClose releasing handle 0x%x, user handle 0x%x\n",
+      *pLocClientHandle, pCallbackData->userHandle );
+
+  // NEXT call goes out to modem. We log the callflow before it
+  // actually happens to ensure the this comes before resp callflow
+  // back from the modem, to avoid confusing log order. We trust
+  // that the QMI framework is robust.
+  EXIT_LOG_CALLFLOW(%s, "loc client close");
+  // release the handle
+  rc = qmi_client_release(pCallbackData->userHandle);
+  if(QMI_NO_ERR != rc )
+  {
+    LOC_LOGW("%s:%d]: qmi_client_release error %d for client %p\n",
+                   __func__, __LINE__, rc, pCallbackData->userHandle);
+    return(eLOC_CLIENT_FAILURE_INTERNAL);
+  }
+
+  /* clear the memory allocated to callback data to minimize the chances
+   *  of a race condition occurring between close and the indication
+   *  callback
+   */
+  memset(pCallbackData, 0, sizeof(*pCallbackData));
+
+  // free the memory assigned in locClientOpen
+  free(pCallbackData);
+  pCallbackData= NULL;
+
+  // set the handle to invalid value
+  *pLocClientHandle = LOC_CLIENT_INVALID_HANDLE_VALUE;
+
+  return eLOC_CLIENT_SUCCESS;
+}
+
+/** locClientSendReq
+  @brief Sends a message to the location engine. If the locClientSendMsg()
+         function is successful, the client should expect an indication
+         (except start, stop, event reg and sensor injection messages),
+         through the registered callback in the locOpen() function. The
+         indication will contain the status of the request and if status is a
+         success, indication also contains the payload
+         associated with response.
+  @param [in] handle Handle returned by the locClientOpen()
+              function.
+  @param [in] reqId         message ID of the request
+  @param [in] reqPayload   Payload of the request, can be NULL
+                            if request has no payload
+
+  @return
+  One of the following error codes:
+  - 0 (eLOC_CLIENT_SUCCESS ) - On success.
+  - non-zero error code (see locClientStatusEnumType) - On failure.
+*/
+
+locClientStatusEnumType locClientSendReq(
+  locClientHandleType      handle,
+  uint32_t                 reqId,
+  locClientReqUnionType    reqPayload )
+{
+  locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
+  qmi_client_error_type rc = QMI_NO_ERR; //No error
+  qmiLocGenRespMsgT_v02 resp;
+  uint32_t reqLen = 0;
+  void *pReqData = NULL;
+  locClientCallbackDataType *pCallbackData =
+        (locClientCallbackDataType *)handle;
+
+  // check the input handle for sanity
+   if(NULL == pCallbackData ||
+      NULL == pCallbackData->userHandle )
+   {
+     // did not find the handle in the client List
+     LOC_LOGE("%s:%d]: invalid handle \n",
+                   __func__, __LINE__);
+
+     return(eLOC_CLIENT_FAILURE_INVALID_HANDLE);
+   }
+
+  // validate that the request is correct
+  if (validateRequest(reqId, reqPayload, &pReqData, &reqLen) == false)
+  {
+
+    LOC_LOGE("%s:%d] error invalid request\n", __func__,
+                __LINE__);
+
+    return(eLOC_CLIENT_FAILURE_INVALID_PARAMETER);
+  }
+
+  LOC_LOGV("%s:%d] sending reqId= %d, len = %d\n", __func__,
+                __LINE__, reqId, reqLen);
+
+  // NEXT call goes out to modem. We log the callflow before it
+  // actually happens to ensure the this comes before resp callflow
+  // back from the modem, to avoid confusing log order. We trust
+  // that the QMI framework is robust.
+  EXIT_LOG_CALLFLOW(%s, loc_get_v02_event_name(reqId));
+
+  rc = qmi_client_send_msg_sync(
+      pCallbackData->userHandle,
+      reqId,
+      pReqData,
+      reqLen,
+      &resp,
+      sizeof(resp),
+      LOC_CLIENT_ACK_TIMEOUT);
+
+  LOC_LOGV("%s:%d] qmi_client_send_msg_sync returned %d\n", __func__,
+                __LINE__, rc);
+
+  if (rc != QMI_NO_ERR)
+  {
+    LOC_LOGE("%s:%d]: send_msg_sync error: %d\n",__func__, __LINE__, rc);
+    return(eLOC_CLIENT_FAILURE_INTERNAL);
+  }
+
+  // map the QCCI response to Loc API v02 status
+  status = convertQmiResponseToLocStatus(&resp);
+
+  return(status);
+}
+
+/** locClientGetSizeByRespIndId
+ *  @brief Get the size of the response indication structure,
+ *         from a specified id
+ *  @param [in]  respIndId
+ *  @param [out] pRespIndSize
+ *  @return true if resp ID was found; else false
+*/
+
+bool locClientGetSizeByRespIndId(uint32_t respIndId, size_t *pRespIndSize)
+{
+  size_t idx = 0, respIndTableSize = 0;
+  respIndTableSize = (sizeof(locClientRespIndTable)/sizeof(locClientRespIndTableStructT));
+  for(idx=0; idx<respIndTableSize; idx++ )
+  {
+    if(respIndId == locClientRespIndTable[idx].respIndId)
+    {
+      // found
+      *pRespIndSize = locClientRespIndTable[idx].respIndSize;
+
+      LOC_LOGV("%s:%d]: resp ind Id %d size = %d\n", __func__, __LINE__,
+                    respIndId, (uint32_t)*pRespIndSize);
+      return true;
+    }
+  }
+
+  //not found
+  return false;
+}
+
+
+/** locClientGetSizeByEventIndId
+ *  @brief Gets the size of the event indication structure, from
+ *         a specified id
+ *  @param [in]  eventIndId
+ *  @param [out] pEventIndSize
+ *  @return true if event ID was found; else false
+*/
+bool locClientGetSizeByEventIndId(uint32_t eventIndId, size_t *pEventIndSize)
+{
+  size_t idx = 0, eventIndTableSize = 0;
+
+  // look in the event table
+  eventIndTableSize =
+    (sizeof(locClientEventIndTable)/sizeof(locClientEventIndTableStructT));
+
+  for(idx=0; idx<eventIndTableSize; idx++ )
+  {
+    if(eventIndId == locClientEventIndTable[idx].eventId)
+    {
+      // found
+      *pEventIndSize = locClientEventIndTable[idx].eventSize;
+
+      LOC_LOGV("%s:%d]: event ind Id %d size = %d\n", __func__, __LINE__,
+                    eventIndId, (uint32_t)*pEventIndSize);
+      return true;
+    }
+  }
+  // not found
+  return false;
+}
+
diff --git a/loc_api/loc_api_v02/loc_api_v02_client.h b/loc_api/loc_api_v02/loc_api_v02_client.h
new file mode 100755
index 0000000..2807ad4
--- /dev/null
+++ b/loc_api/loc_api_v02/loc_api_v02_client.h
@@ -0,0 +1,1255 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+/** @file loc_api_v02_client.h
+*/
+
+#ifndef LOC_API_V02_CLIENT_H
+#define LOC_API_V02_CLIENT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*=============================================================================
+ *
+ *                             DATA DECLARATION
+ *
+ *============================================================================*/
+
+#include <stdint.h>
+#include "location_service_v02.h"  //QMI LOC Service data types definitions
+#include <stdbool.h>
+#include <stddef.h>
+
+/******************************************************************************
+ *  Constants and configuration
+ *****************************************************************************/
+
+/** @addtogroup constants_macros
+@{ */
+
+/** Specific value of #locClientHandleType, indicating an invalid handle. */
+#define LOC_CLIENT_INVALID_HANDLE_VALUE (NULL)
+
+/** @} */ /* end_addtogroup constants_macros */
+
+/** @addtogroup data_types
+@{ */
+
+/** Location client handle used to represent a specific client. Negative values
+    are invalid handles. */
+typedef void* locClientHandleType;
+
+/** Data type for events and event masks.
+    @newpage */
+typedef uint64_t locClientEventMaskType;
+
+/** Location client status values.
+    @vertspace
+*/
+typedef enum
+{
+  eLOC_CLIENT_SUCCESS                              = 0,
+  /**< Request was successful. */
+
+  eLOC_CLIENT_FAILURE_GENERAL                      = 1,
+  /**< Failed because of a general failure. */
+
+  eLOC_CLIENT_FAILURE_UNSUPPORTED                  = 2,
+  /**< Failed because the service does not support the command. */
+
+  eLOC_CLIENT_FAILURE_INVALID_PARAMETER            = 3,
+  /**< Failed because the request contained invalid parameters. */
+
+  eLOC_CLIENT_FAILURE_ENGINE_BUSY                  = 4,
+  /**< Failed because the engine is busy. */
+
+  eLOC_CLIENT_FAILURE_PHONE_OFFLINE                = 5,
+  /**< Failed because the phone is offline. */
+
+  eLOC_CLIENT_FAILURE_TIMEOUT                      = 6,
+  /**< Failed because of a timeout. */
+
+  eLOC_CLIENT_FAILURE_SERVICE_NOT_PRESENT          = 7,
+  /**< Failed because the service is not present. */
+
+  eLOC_CLIENT_FAILURE_SERVICE_VERSION_UNSUPPORTED  = 8,
+  /**< Failed because the service version is unsupported. */
+
+  eLOC_CLIENT_FAILURE_CLIENT_VERSION_UNSUPPORTED  =  9,
+  /**< Failed because the service does not support client version. */
+
+  eLOC_CLIENT_FAILURE_INVALID_HANDLE               = 10,
+  /**< Failed because an invalid handle was specified. */
+
+  eLOC_CLIENT_FAILURE_INTERNAL                     = 11,
+  /**< Failed because of an internal error in the service. */
+
+  eLOC_CLIENT_FAILURE_NOT_INITIALIZED              = 12
+  /**< Failed because the service has not been initialized. */
+
+}locClientStatusEnumType;
+
+/** Loc Client error values
+*/
+
+typedef enum
+{
+  eLOC_CLIENT_ERROR_SERVICE_UNAVAILABLE            = 1
+  /**< Service is no longer available, the client should
+       close the existing connection and reopen the connection
+       upon getting this error.
+       */
+}locClientErrorEnumType;
+
+
+/** @} */ /* end_addtogroup data_types */
+
+/** @addtogroup send_request
+@{ */
+
+/** @brief Request messages the client can send to the location engine.
+
+  The following requests do not have any data associated, so they do not have a
+  payload structure defined:
+
+  - GetServiceRevision
+  - GetFixCriteria
+  - GetPredictedOrbitsDataSource
+  - GetPredictedOrbitsDataValidity
+  - GetEngineLock
+  - GetSbasConfigReq
+  - GetRegisteredEvents
+  - GetNmeaTypes
+  - GetLowPowerMode
+  - GetXtraTSessionControl
+  - GetRegisteredEvents
+  - GetOperationMode
+  - GetCradleMountConfig
+  - GetExternalPowerConfig
+*/
+typedef union
+{
+   const qmiLocInformClientRevisionReqMsgT_v02* pInformClientRevisionReq;
+   /**< Notifies the service about the revision the client is using.
+
+        The client does not receive any indications corresponding to this
+        request.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_INFORM_CLIENT_REVISION_REQ_V02. */
+
+   const qmiLocRegEventsReqMsgT_v02* pRegEventsReq;
+   /**< Changes the events the client is interested in receiving.
+
+        The client does not receive any indications corresponding to this
+        request.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_REG_EVENTS_REQ_V02. */
+
+   const qmiLocStartReqMsgT_v02* pStartReq;
+   /**< Starts a positioning session.
+
+        The client receives the following indications: position report,
+        satellite report, fix session report, and NMEA report (if applicable).
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_START_REQ_V02. */
+
+   const qmiLocStopReqMsgT_v02* pStopReq;
+   /**< Stops a positioning session. The client receives a fix session report
+        denoting that the fix session ended after this message was sent.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_STOP_REQ_V02. */
+
+   const qmiLocNiUserRespReqMsgT_v02* pNiUserRespReq;
+   /**< Informs the service about the user response for a network-initiated call.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_NI_USER_RESPONSE_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_NI_USER_RESPONSE_REQ_V02. */
+
+   const qmiLocInjectPredictedOrbitsDataReqMsgT_v02* pInjectPredictedOrbitsDataReq;
+   /**< Injects the predicted orbits data into the service.
+
+        When all predicted orbits data parts have been injected, the client
+        receives the following indication containing a response:
+        QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02.
+
+        The client injects successive data parts without waiting for this
+        indication as long as locClientSendReq() returns successfully.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02. */
+
+   const qmiLocInjectUtcTimeReqMsgT_v02* pInjectUtcTimeReq;
+   /**< Injects UTC time into the service.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_INJECT_UTC_TIME_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_INJECT_UTC_TIME_REQ_V02. */
+
+   const qmiLocInjectPositionReqMsgT_v02* pInjectPositionReq;
+   /**< Injects a position into the service.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_INJECT_POSITION_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_INJECT_POSITION_REQ_V02. */
+
+   const qmiLocSetEngineLockReqMsgT_v02* pSetEngineLockReq;
+   /**< Sets the location engine lock.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_ENGINE_LOCK_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_ENGINE_LOCK_REQ_V02. */
+
+   const qmiLocSetSbasConfigReqMsgT_v02* pSetSbasConfigReq;
+   /**< Sets the SBAS configuration.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_SBAS_CONFIG_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_SBAS_CONFIG_REQ_V02 . */
+
+   const qmiLocSetNmeaTypesReqMsgT_v02* pSetNmeaTypesReq;
+   /**< Sets the NMEA types configuration.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_NMEA_TYPES_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_NMEA_TYPES_REQ_V02. */
+
+   const qmiLocSetLowPowerModeReqMsgT_v02* pSetLowPowerModeReq;
+   /**< Sets the Low Power mode configuration.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_LOW_POWER_MODE_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_LOW_POWER_MODE_REQ_V02. */
+
+   const qmiLocSetServerReqMsgT_v02* pSetServerReq;
+   /**< Sets the A-GPS server type and address.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_SERVER_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_SERVER_REQ_V02. */
+
+   const qmiLocGetServerReqMsgT_v02* pGetServerReq;
+   /**< Gets the A-GPS server type and address.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_GET_SERVER_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_GET_SERVER_REQ_V02. */
+
+   const qmiLocDeleteAssistDataReqMsgT_v02* pDeleteAssistDataReq;
+   /**< Deletes the aiding data from the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_DELETE_ASSIST_DATA_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_DELETE_ASSIST_DATA_REQ_V02. */
+
+   const qmiLocSetXtraTSessionControlReqMsgT_v02* pSetXtraTSessionControlReq;
+   /**< Sets XTRA-T session control in the engine. If the request is accepted by
+        the service, the client receives the following indication containing a
+        response: QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02. */
+
+   const qmiLocInjectWifiPositionReqMsgT_v02* pInjectWifiPositionReq;
+   /**< Injects a WiFi position into the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_INJECT_WIFI_POSITION_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_INJECT_WIFI_POSITION_REQ_V02. */
+
+   const qmiLocNotifyWifiStatusReqMsgT_v02* pNotifyWifiStatusReq;
+   /**< Notifies the engine about the WiFi status.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02. */
+
+   const qmiLocSetOperationModeReqMsgT_v02* pSetOperationModeReq;
+   /**< Sets the engine Operation mode.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_OPERATION_MODE_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_OPERATION_MODE_REQ_V02. */
+
+   const qmiLocSetSpiStatusReqMsgT_v02* pSetSpiStatusReq;
+   /**< Sends the stationary position status to the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_SPI_STATUS_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_SPI_STATUS_REQ_V02. */
+
+   const qmiLocInjectSensorDataReqMsgT_v02* pInjectSensorDataReq;
+   /**< Injects sensor data into the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_INJECT_SENSOR_DATA_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_INJECT_SENSOR_DATA_REQ_V02. */
+
+   const qmiLocInjectTimeSyncDataReqMsgT_v02* pInjectTimeSyncReq;
+   /**< Injects time synchronization information into the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02. */
+
+   const qmiLocSetCradleMountConfigReqMsgT_v02* pSetCradleMountConfigReq;
+   /**< Sets the cradle mount state information in the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        SET_CRADLE_MOUNT_CONFIG_REQ_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        SET_CRADLE_MOUNT_CONFIG_IND_V02. */
+
+   const qmiLocSetExternalPowerConfigReqMsgT_v02* pSetExternalPowerConfigReq;
+   /**< Sets external power configuration state in the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02. */
+
+   const qmiLocInformLocationServerConnStatusReqMsgT_v02*
+     pInformLocationServerConnStatusReq;
+   /**< Informs the engine about the connection status to the location server.
+
+        This can be sent in response to a
+        QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02 request. The
+        service sends back a QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02
+        response indication for this request.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02.*/
+
+   const qmiLocSetProtocolConfigParametersReqMsgT_v02*
+     pSetProtocolConfigParametersReq;
+   /**< Sets the protocol configuration parameters in the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02. */
+
+   const qmiLocGetProtocolConfigParametersReqMsgT_v02*
+     pGetProtocolConfigParametersReq;
+   /**< Retrieves protocol configuration parameters from the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02.
+        @newpage */
+
+      const qmiLocSetSensorControlConfigReqMsgT_v02*
+     pSetSensorControlConfigReq;
+   /**< Sets the sensor control configuration parameters in the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02.
+        @newpage */
+
+   const qmiLocSetSensorPerformanceControlConfigReqMsgT_v02*
+      pSetSensorPerformanceControlConfigReq;
+   /**< Sets the sensor performance configuration parameters in the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02.
+        @newpage */
+
+   const qmiLocSetSensorPropertiesReqMsgT_v02* pSetSensorPropertiesReq;
+   /**< Sets the sensor properties in the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02.
+        @newpage */
+
+   const qmiLocInjectSuplCertificateReqMsgT_v02* pInjectSuplCertificateReq;
+   /**< Injects a SUPL certificate into the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02.
+        @newpage */
+
+   const qmiLocDeleteSuplCertificateReqMsgT_v02* pDeleteSuplCertificateReq;
+   /**< Deletes a SUPL certificate from the engine.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02.
+        @newpage */
+
+   const qmiLocSetPositionEngineConfigParametersReqMsgT_v02*
+     pSetPositionEngineConfigParametersReq;
+   /**< Sets Position Engine configuration.
+
+        If the request is accepted by the service, the client receives the
+        following indication containing a response:
+        QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND _V02.
+
+        To send this request, set the reqId field in locClientSendReq() to
+        QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02.
+        @newpage */
+
+   const qmiLocGetPositionEngineConfigParametersReqMsgT_v02*
+     pGetPositionEngineConfigParametersReq;
+   /**< Gets Position Engine configuration.
+
+         If the request is accepted by the service, the client receives the
+         following indication containing a response:
+         QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02.
+
+         To send this request, set the reqId field in locClientSendReq() to
+         QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02.
+         @newpage */
+
+}locClientReqUnionType;
+
+
+/** @brief Event indications that are sent by the service.
+*/
+typedef union
+{
+   const qmiLocEventPositionReportIndMsgT_v02* pPositionReportEvent;
+   /**< Contains the position information.
+
+        This event is generated after QMI_LOC_START_REQ_V02 is sent. If
+        periodic fix criteria is specified, this event is generated multiple
+        times periodically at the specified rate until QMI_LOC_STOP_REQ_V02 is
+        sent.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_POSITION_REPORT_IND_V02. */
+
+   const qmiLocEventGnssSvInfoIndMsgT_v02* pGnssSvInfoReportEvent;
+   /**< Contains the GNSS satellite information.
+
+        This event is generated after QMI_LOC_START_REQ_V02 is sent. This event
+        is generated at 1 Hz if the location engine is tracking satellites to
+        make a location fix.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_GNSS_INFO_IND_V02. */
+
+   const qmiLocEventNmeaIndMsgT_v02* pNmeaReportEvent;
+   /**< Contains an NMEA report sentence. The entire NMEA report consisting
+        of multiple sentences is sent at a 1Hz rate.
+        This event is generated after QMI_LOC_START_REQ_V02 is sent.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_NMEA_IND_V02. */
+
+   const qmiLocEventNiNotifyVerifyReqIndMsgT_v02* pNiNotifyVerifyReqEvent;
+   /**< Notifies a location client when the network triggers a positioning request
+        to the mobile.
+
+        Upon getting this event, the location client displays the
+        network-initiated fix request in a dialog and prompts the user to accept
+        or deny the request. The client responds to this request with the message
+        QMI_LOC_NI_USER_RESPONSE_REQ_V02.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02. */
+
+   const qmiLocEventInjectTimeReqIndMsgT_v02* pInjectTimeReqEvent;
+   /**< Asks the client for time assistance.
+
+        The client responds to this request with the message
+        QMI_LOC_INJECT_UTC_TIME_REQ_V02.
+
+        The eventIndId field in the event indication callback is
+        set to QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02. */
+
+   const qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02*
+         pInjectPredictedOrbitsReqEvent;
+   /**< Asks the client for predicted orbits data assistance.
+
+        The client responds to this request with the message
+        QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02. */
+
+   const qmiLocEventInjectPositionReqIndMsgT_v02* pInjectPositionReqEvent;
+   /**< Asks the client for position assistance.
+
+        The client responds to this request with the message
+        QMI_LOC_INJECT_POSITION_REQ_V02.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02. */
+
+   const qmiLocEventEngineStateIndMsgT_v02* pEngineState;
+   /**< Sent by the engine whenever it turns on or off.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_ENGINE_STATE_IND_V02. */
+
+   const qmiLocEventFixSessionStateIndMsgT_v02* pFixSessionState;
+   /**< Sent by the engine when a location session begins or ends.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02. */
+
+   const qmiLocEventWifiReqIndMsgT_v02* pWifiReqEvent;
+   /**< Sent by the engine when it needs WiFi support.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_WIFI_REQ_IND_V02. */
+
+   const qmiLocEventSensorStreamingReadyStatusIndMsgT_v02*
+          pSensorStreamingReadyStatusEvent;
+   /**< Notifies the client that the engine is ready to accept sensor data.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02. */
+
+   const qmiLocEventTimeSyncReqIndMsgT_v02* pTimeSyncReqEvent;
+   /**< Sent by the engine when it needs to synchronize its time with the sensor
+        processor time.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_TIME_SYNC_REQ_IND_V02. */
+
+   const qmiLocEventSetSpiStreamingReportIndMsgT_v02*
+     pSetSpiStreamingReportEvent;
+   /**< Asks the client to start/stop sending a Stationary Position Indicator
+        (SPI) stream.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_SET_SPI_STREAMING_REPORT_IND_V02. */
+
+   const qmiLocEventLocationServerConnectionReqIndMsgT_v02*
+      pLocationServerConnReqEvent;
+   /**< Sent by the engine to ask the client to open or close a connection to
+        a location server.
+
+        The client responds to this request by sending the
+        QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02 message.
+
+        The eventIndId field in the event indication callback is set to
+        QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02.
+        @newpage */
+
+}locClientEventIndUnionType;
+
+
+/** @brief Response indications that are sent by the service. */
+typedef union
+{
+   const qmiLocGetServiceRevisionIndMsgT_v02* pGetServiceRevisionInd;
+   /**< Response to the request, QMI_LOC_GET_SERVICE_REVISION_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_SERVICE_REVISION_IND_V02. */
+
+   const qmiLocGetFixCriteriaIndMsgT_v02* pGetFixCriteriaInd;
+   /**< Response to the request, QMI_LOC_GET_FIX_CRITERIA_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_FIX_CRITERIA_IND_V02. */
+
+   const qmiLocNiUserRespIndMsgT_v02* pNiUserRespInd;
+   /**< Response to the request, QMI_LOC_NI_USER_RESPONSE_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_NI_USER_RESPONSE_IND_V02. */
+
+   const qmiLocInjectPredictedOrbitsDataIndMsgT_v02*
+     pInjectPredictedOrbitsDataInd;
+   /**< Sent after a predicted orbits data part has been successfully injected.
+
+        The client waits for this indication before injecting the next part.
+        This indication is sent in response to
+        QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02. */
+
+   const qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02*
+      pGetPredictedOrbitsDataSourceInd;
+   /**< Response to the request,
+        QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02. */
+
+   const qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02*
+     pGetPredictedOrbitsDataValidityInd;
+   /**< Response to the request,
+        QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_IND_V02. */
+
+   const qmiLocInjectUtcTimeIndMsgT_v02* pInjectUtcTimeInd;
+   /**< Response to the request, QMI_LOC_INJECT_UTC_TIME_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_INJECT_UTC_TIME_IND_V02. */
+
+   const qmiLocInjectPositionIndMsgT_v02* pInjectPositionInd;
+   /**< Response to the request, QMI_LOC_INJECT_POSITION_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_INJECT_POSITION_IND_V02. */
+
+   const qmiLocSetEngineLockIndMsgT_v02* pSetEngineLockInd;
+   /**< Response to the request, QMI_LOC_SET_ENGINE_LOCK_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_ENGINE_LOCK_IND_V02. */
+
+   const qmiLocGetEngineLockIndMsgT_v02* pGetEngineLockInd;
+   /**< Response to the request, QMI_LOC_GET_ENGINE_LOCK_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_ENGINE_LOCK_IND_V02. */
+
+   const qmiLocSetSbasConfigIndMsgT_v02* pSetSbasConfigInd;
+   /**< Response to the request, QMI_LOC_SET_SBAS_CONFIG_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_SBAS_CONFIG_IND_V02. */
+
+   const qmiLocGetSbasConfigIndMsgT_v02* pGetSbasConfigInd;
+   /**< Response to the request, QMI_LOC_GET_SBAS_CONFIG_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_SBAS_CONFIG_IND_V02. */
+
+   const qmiLocSetNmeaTypesIndMsgT_v02* pSetNmeaTypesInd;
+   /**< Response to the request, QMI_LOC_SET_NMEA_TYPES_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_NMEA_TYPES_IND_V02. */
+
+   const qmiLocGetNmeaTypesIndMsgT_v02* pGetNmeaTypesInd;
+   /**< Response to the request, QMI_LOC_GET_NMEA_TYPES_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_NMEA_TYPES_IND_V02. */
+
+   const qmiLocSetLowPowerModeIndMsgT_v02* pSetLowPowerModeInd;
+   /**< Response to the request, QMI_LOC_SET_LOW_POWER_MODE_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_LOW_POWER_MODE_IND_V02. */
+
+   const qmiLocGetLowPowerModeIndMsgT_v02* pGetLowPowerModeInd;
+   /**< Response to the request, QMI_LOC_GET_LOW_POWER_MODE_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_LOW_POWER_MODE_IND_V02. */
+
+   const qmiLocSetServerIndMsgT_v02* pSetServerInd;
+   /**< Response to the request, QMI_LOC_SET_SERVER_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_SERVER_IND_V02. */
+
+   const qmiLocGetServerIndMsgT_v02* pGetServerInd;
+   /**< Response to the request, QMI_LOC_GET_SERVER_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_SERVER_IND_V02. */
+
+   const qmiLocDeleteAssistDataIndMsgT_v02* pDeleteAssistDataInd;
+   /**< Response to the request, QMI_LOC_DELETE_ASSIST_DATA_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_DELETE_ASSIST_DATA_IND_V02. */
+
+   const qmiLocSetXtraTSessionControlIndMsgT_v02* pSetXtraTSessionControlInd;
+   /**< Response to the request, QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02. */
+
+   const qmiLocGetXtraTSessionControlIndMsgT_v02* pGetXtraTSessionControlInd;
+   /**< Response to the request, QMI_LOC_GET_XTRA_T_SESSION_CONTROL_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_XTRA_T_SESSION_CONTROL_IND_V02. */
+
+   const qmiLocInjectWifiPositionIndMsgT_v02* pInjectWifiPositionInd;
+   /**< Response to the request, QMI_LOC_INJECT_WIFI_POSITION_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_INJECT_WIFI_POSITION_IND_V02. */
+
+   const qmiLocNotifyWifiStatusIndMsgT_v02* pNotifyWifiStatusInd;
+   /**< Response to the request, QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02. */
+
+   const qmiLocGetRegisteredEventsIndMsgT_v02* pGetRegisteredEventsInd;
+   /**< Response to the request, QMI_LOC_GET_REGISTERED_EVENTS_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_REGISTERED_EVENTS_IND_V02. */
+
+   const qmiLocSetOperationModeIndMsgT_v02* pSetOperationModeInd;
+   /**< Response to the request, QMI_LOC_SET_OPERATION_MODE_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_OPERATION_MODE_IND_V02. */
+
+   const qmiLocGetOperationModeIndMsgT_v02* pGetOperationModeInd;
+   /**< Response to the request, QMI_LOC_GET_OPERATION_MODE_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_OPERATION_MODE_IND_V02. */
+
+   const qmiLocSetSpiStatusIndMsgT_v02* pSetSpiStatusInd;
+   /**< Response to the request, QMI_LOC_SET_SPI_STATUS_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_SPI_STATUS_IND_V02. */
+
+   const qmiLocInjectSensorDataIndMsgT_v02* pInjectSensorDataInd;
+   /**< Response to the request, QMI_LOC_INJECT_SENSOR_DATA_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_INJECT_SENSOR_DATA_IND_V02. */
+
+   const qmiLocInjectTimeSyncDataIndMsgT_v02* pInjectTimeSyncDataInd;
+   /**< Response to the request,  QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02. */
+
+   const qmiLocSetCradleMountConfigIndMsgT_v02* pSetCradleMountConfigInd;
+   /**< Response to the request, QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_CRADLE_MOUNT_CONFIG_REQ_V02. */
+
+   const qmiLocGetCradleMountConfigIndMsgT_v02* pGetCradleMountConfigInd;
+   /**< Response to the request, QMI_LOC_GET_CRADLE_MOUNT_CONFIG_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02. */
+
+   const qmiLocSetExternalPowerConfigIndMsgT_v02* pSetExternalPowerConfigInd;
+   /**< Response to the request, QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02. */
+
+   const qmiLocGetExternalPowerConfigIndMsgT_v02* pGetExternalPowerConfigInd;
+   /**< Response to the request, QMI_LOC_GET_EXTERNAL_POWER_CONFIG_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02. */
+
+   const qmiLocInformLocationServerConnStatusIndMsgT_v02*
+     pInformLocationServerConnStatusInd;
+   /**< Response to the request,
+        QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02.*/
+
+   const qmiLocSetProtocolConfigParametersIndMsgT_v02*
+     pSetProtocolConfigParametersInd;
+   /**< Response to the request,
+        QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02. */
+
+   const qmiLocGetProtocolConfigParametersIndMsgT_v02*
+     pGetProtocolConfigParametersInd;
+   /**< Response to the request,
+        QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02.
+        @newpage */
+
+   const qmiLocSetSensorControlConfigIndMsgT_v02* pSetSensorControlConfigInd;
+   /**< Response to the request,
+        QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02.
+        @newpage */
+
+   const qmiLocGetSensorControlConfigIndMsgT_v02* pGetSensorControlConfigInd;
+   /**< Response to the request,
+        QMI_LOC_GET_SENSOR_CONTROL_CONFIG_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02.
+        @newpage */
+
+   const qmiLocSetSensorPropertiesIndMsgT_v02* pSetSensorPropertiesInd;
+   /**< Response to the request,
+        QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02.
+        @newpage */
+
+   const qmiLocGetSensorPropertiesIndMsgT_v02* pGetSensorPropertiesInd;
+   /**< Response to the request,
+        QMI_LOC_GET_SENSOR_PROPERTIES_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02.
+        @newpage */
+
+   const qmiLocSetSensorPerformanceControlConfigIndMsgT_v02*
+     pSetSensorPerformanceControlConfigInd;
+   /**< Response to the request,
+        QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02.
+        @newpage */
+
+   const qmiLocGetSensorPerformanceControlConfigIndMsgT_v02*
+     pGetSensorPerformanceControlConfigInd;
+   /**< Response to the request,
+        QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02.
+
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02.
+        @newpage */
+
+   const qmiLocInjectSuplCertificateIndMsgT_v02* pInjectSuplCertificateInd;
+   /**< Response to the request,
+        QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02.
+        @newpage */
+
+   const qmiLocDeleteSuplCertificateIndMsgT_v02* pDeleteSuplCertificateInd;
+   /**< Response to the request,
+        QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02.
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02.
+        @newpage */
+
+   const qmiLocSetPositionEngineConfigParametersIndMsgT_v02*
+     pSetPositionEngineConfigParametersInd;
+   /**< Response to the request,
+        QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02.
+        @newpage */
+
+   const qmiLocGetPositionEngineConfigParametersIndMsgT_v02*
+     pGetPositionEngineConfigParametersInd;
+    /**< Response to the request,
+        QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02
+        The respIndId field in the response indication callback is set to
+        QMI_LOC_ET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02.
+        @newpage */
+
+}locClientRespIndUnionType;
+
+/** @} */ /* end_addtogroup send_request */
+
+/** @addtogroup data_types
+@{ */
+
+/** Location event indication callback function type. The Location service can
+    generate two types of indications:
+
+  - Asynchronous events indications, such as time injection request and satellite
+    reports. The client specifies the asynchronous events it is interested in
+    receiving through the event mask (see locClientOpen()).
+  - Response indications that are generated as a response to a request. For
+    example, the QMI_LOC_GET_FIX_CRITERIA_REQ_V02 request generates the
+    indication, QMI_LOC_GET_FIX_CRITERIA_IND_V02.
+
+  This callback handles the asynchronous event indications.
+
+  @vertspace
+  @param handle            Location client for this event. Only the client who
+                           registered for the corresponding event receives
+                           this callback.
+  @param eventIndId        ID of the event indication.
+  @param eventIndPayload   Event indication payload.
+  @param pClientCookie     Pointer to the cookie the client specified during
+                           registration.
+*/
+typedef void (*locClientEventIndCbType)(
+      locClientHandleType handle,
+      uint32_t eventIndId,
+      const locClientEventIndUnionType eventIndPayload,
+      void *pClientCookie
+);
+
+/** Location response indication callback function type. The Location service can
+    generate two types of indications:
+
+  - Asynchronous events indications, such as time injection request and satellite
+    reports. The client specifies the asynchronous events it is interested in
+    receiving through the event mask (see locClientOpen()).
+  - Response indications that are generated as a response to a request. For
+    example, the QMI_LOC_GET_FIX_CRITERIA_REQ_V02 request generates the
+    indication, QMI_LOC_GET_FIX_CRITERIA_IND_V02.
+
+  This callback handles the response indications.
+
+  @vertspace
+  @param handle           Location client who sent the request for which this
+                          response indication is generated.
+  @param respIndId        ID of the response. It is the same value as the ID
+                          of request sent to the engine.
+  @param respIndPayload   Payload of the response indication.
+  @param pClientCookie    Pointer to the cookie the client specified during
+                          registration.
+
+  @newpage
+*/
+typedef void  (*locClientRespIndCbType)(
+      locClientHandleType handle,
+      uint32_t respIndId,
+      const locClientRespIndUnionType respIndPayload,
+      void *pClientCookie
+);
+
+/** Location error callback function type. This function will be
+    called to inform the client that the service is no longer
+    available. When the client receives this callback it must
+    close the existing connection  and reopen the client connection.
+
+
+  @vertspace
+  @param handle           Location client who sent the request for which this
+                          error indication is generated.
+  @param errorId          Error ID.
+  @param errorCbdata      Payload associated with the error indication.
+
+  @newpage
+*/
+typedef void  (*locClientErrorCbType)(
+      locClientHandleType handle,
+      locClientErrorEnumType errorId,
+      void* pClientCookie
+ );
+
+
+/** Callback functions to be registered during locClientOpen
+*/
+
+typedef struct
+{
+    uint32_t size;
+    /**< Size of the structure */
+    locClientEventIndCbType eventIndCb;
+    /**< Event Indication callback */
+    locClientRespIndCbType respIndCb;
+    /**< Response Indication callback */
+    locClientErrorCbType errorCb;
+    /**< Error Indication callback */
+}locClientCallbacksType;
+
+/** @} */ /* end_addtogroup data_types */
+
+/*===========================================================================
+ *
+ *                          FUNCTION DECLARATION
+ *
+ *==========================================================================*/
+
+/** @addtogroup open_client
+@{ */
+/*==========================================================================
+    locClientOpen */
+/**
+  @latexonly\label{hdr:locClientOpenFunction}@endlatexonly Connects a location
+  client to the location engine. If the connection is successful, this function
+  returns a handle that the location client uses for future location operations.
+
+  @datatype
+  #locClientStatusEnumType\n
+  #locClientEventMaskType\n
+  #locClientCallbacksType *\n
+  #locClientHandleType *\n
+  #void *
+
+  @vertspace
+  @param[in]  eventRegMask          Mask of asynchronous events the client is
+                                    interested in receiving.
+  @param[in]  pLocClientCallbacks   Pointer to structure containing the
+                                    callbacks.
+  @param[out] pLocClientHandle      Pointer to the handle to be used by the
+                                    client for any subsequent requests.
+  @param[in]  pLocClientCookie      Pointer to a "cookie" to be returned to the
+                                    client along with the callbacks.
+
+  @return
+  One of the following error codes:
+  - eLOC_CLIENT_SUCCESS -- If the connection is opened.
+  - Non-zero error code (see \ref locClientStatusEnumType) -- On failure.
+
+  @dependencies
+  None.
+  @newpage
+*/
+extern locClientStatusEnumType locClientOpen (
+      locClientEventMaskType            eventRegMask,
+      const locClientCallbacksType*     pLocClientCallbacks,
+      locClientHandleType*              pLocClientHandle,
+      const void*                       pLocClientCookie
+);
+
+/** @} */ /* end_addtogroup open_client */
+
+/** @addtogroup close_client
+@{ */
+/*==========================================================================
+    locClientClose */
+/**
+  @latexonly\label{hdr:locClientCloseFunction}@endlatexonly Disconnects a client
+  from the location engine and sets the handle to
+  LOC_CLIENT_INVALID_HANDLE_VALUE.
+
+  @datatype
+  #locClientStatusEnumType\n
+  #locClientHandleType
+
+  @vertspace
+  @param[in] pLocClientHandle  Pointer to the handle returned by the
+                               locClientOpen() function.
+
+  @return
+  One of the following error codes:
+  - 0 (eLOC_CLIENT_SUCCESS) -- On success.
+  - Non-zero error code (see \ref locClientStatusEnumType) -- On failure.
+
+  @dependencies
+  None.
+  @newpage
+*/
+extern locClientStatusEnumType locClientClose (
+      locClientHandleType* pLocClientHandle
+);
+
+/** @} */ /* end_addtogroup close_client */
+
+/** @addtogroup send_request
+@{ */
+/*=============================================================================
+    locClientSendReq */
+/**
+  @latexonly\label{hdr:locClientSendReqFunction}@endlatexonly Sends a message to
+  the location engine. If this function is successful, the client expects an
+  indication (except start, stop, event registration, and sensor injection
+  messages) through the registered callback in the locClientOpen() function.
+
+  The indication contains the status of the request. If the status is a success,
+  the indication also contains the payload associated with response.
+
+  @datatype
+  #locClientStatusEnumType\n
+  #locClientHandleType\n
+  #locClientReqUnionType
+
+  @vertspace
+  @param[in] handle        Handle returned by the locClientOpen() function.
+  @param[in] reqId         QMI_LOC service message ID of the request.
+  @param[in] pReqPayload   Payload of the request. This can be NULL if the request
+                           has no payload.
+
+  @return
+  One of the following error codes:
+  - 0 (eLOC_CLIENT_SUCCESS) -- On success.
+  - Non-zero error code (see \ref locClientStatusEnumType) -- On failure.
+
+  @dependencies
+  None.
+
+  @structure
+  locClientReqUnionType
+  @newpage
+*/
+extern locClientStatusEnumType locClientSendReq(
+     locClientHandleType       handle,
+     uint32_t                  reqId,
+     locClientReqUnionType     reqPayload
+);
+
+/** @} */ /* end_addtogroup send_request */
+
+/** @addtogroup get_size_event
+@{ */
+/*=============================================================================
+    locClientGetSizeByEventIndId */
+/**
+  Gets the size of the event indication structure from a specified ID.
+
+  @datatype
+  #locClientGetSizeByEventIndId
+
+  @vertspace
+  @param[in]  eventIndId      Event indicator ID.
+  @param[out] pEventIndSize   Pointer to the size of the structure.
+
+  @return
+  true -- The event ID was found.\n
+  false -- Otherwise.
+
+  @dependencies
+  None.
+
+  @structure
+  locClientEventIndUnionType
+  @newpage
+*/
+extern bool locClientGetSizeByEventIndId(
+  uint32_t eventIndId,
+  size_t *pEventIndSize);
+
+/** @} */ /* end_addtogroup get_size_event */
+
+/** @addtogroup get_size_response
+@{ */
+/*=============================================================================
+    locClientGetSizeByRespIndId */
+
+/**
+  Gets the size of the response indication structure from a specified ID.
+
+  @datatype
+  #locClientGetSizeByRespIndId
+
+  @vertspace
+  @param[in]  respIndId      Response indicator ID.
+  @param[out] pRespIndSize   Pointer to the size of the structure.
+
+  @return
+  true -- The response ID was found.\n
+  false -- Otherwise.
+
+  @dependencies
+  None.
+
+  @structure
+  locClientRespIndUnionType
+  @newpage
+*/
+extern bool locClientGetSizeByRespIndId(
+  uint32_t respIndId,
+  size_t *pRespIndSize);
+
+/*=============================================================================*/
+
+/** @} */ /* end_addtogroup get_size_response */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_API_V02_CLIENT_H*/
diff --git a/loc_api/loc_api_v02/loc_api_v02_log.c b/loc_api/loc_api_v02/loc_api_v02_log.c
new file mode 100755
index 0000000..7879260
--- /dev/null
+++ b/loc_api/loc_api_v02/loc_api_v02_log.c
@@ -0,0 +1,243 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+#include <loc_api_v02_log.h>
+#include <location_service_v02.h>
+
+static loc_name_val_s_type loc_v02_event_name[] =
+{
+    NAME_VAL(QMI_LOC_INFORM_CLIENT_REVISION_REQ_V02),
+    NAME_VAL(QMI_LOC_INFORM_CLIENT_REVISION_RESP_V02),
+    NAME_VAL(QMI_LOC_REG_EVENTS_REQ_V02),
+    NAME_VAL(QMI_LOC_REG_EVENTS_RESP_V02),
+    NAME_VAL(QMI_LOC_START_REQ_V02),
+    NAME_VAL(QMI_LOC_START_RESP_V02),
+    NAME_VAL(QMI_LOC_STOP_REQ_V02),
+    NAME_VAL(QMI_LOC_STOP_RESP_V02),
+    NAME_VAL(QMI_LOC_EVENT_POSITION_REPORT_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_NMEA_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_ENGINE_STATE_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_WIFI_REQ_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_TIME_SYNC_REQ_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_SET_SPI_STREAMING_REPORT_IND_V02),
+    NAME_VAL(QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02),
+    NAME_VAL(QMI_LOC_GET_SERVICE_REVISION_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_SERVICE_REVISION_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_SERVICE_REVISION_IND_V02),
+    NAME_VAL(QMI_LOC_GET_FIX_CRITERIA_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_FIX_CRITERIA_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_FIX_CRITERIA_IND_V02),
+    NAME_VAL(QMI_LOC_NI_USER_RESPONSE_REQ_V02),
+    NAME_VAL(QMI_LOC_NI_USER_RESPONSE_RESP_V02),
+    NAME_VAL(QMI_LOC_NI_USER_RESPONSE_IND_V02),
+    NAME_VAL(QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02),
+    NAME_VAL(QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_RESP_V02),
+    NAME_VAL(QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02),
+    NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02),
+    NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_IND_V02),
+    NAME_VAL(QMI_LOC_INJECT_UTC_TIME_REQ_V02),
+    NAME_VAL(QMI_LOC_INJECT_UTC_TIME_RESP_V02),
+    NAME_VAL(QMI_LOC_INJECT_UTC_TIME_IND_V02),
+    NAME_VAL(QMI_LOC_INJECT_POSITION_REQ_V02),
+    NAME_VAL(QMI_LOC_INJECT_POSITION_RESP_V02),
+    NAME_VAL(QMI_LOC_INJECT_POSITION_IND_V02),
+    NAME_VAL(QMI_LOC_SET_ENGINE_LOCK_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_ENGINE_LOCK_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_ENGINE_LOCK_IND_V02),
+    NAME_VAL(QMI_LOC_GET_ENGINE_LOCK_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_ENGINE_LOCK_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_ENGINE_LOCK_IND_V02),
+    NAME_VAL(QMI_LOC_SET_SBAS_CONFIG_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_SBAS_CONFIG_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_SBAS_CONFIG_IND_V02),
+    NAME_VAL(QMI_LOC_GET_SBAS_CONFIG_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_SBAS_CONFIG_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_SBAS_CONFIG_IND_V02),
+    NAME_VAL(QMI_LOC_SET_NMEA_TYPES_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_NMEA_TYPES_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_NMEA_TYPES_IND_V02),
+    NAME_VAL(QMI_LOC_GET_NMEA_TYPES_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_NMEA_TYPES_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_NMEA_TYPES_IND_V02),
+    NAME_VAL(QMI_LOC_SET_LOW_POWER_MODE_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_LOW_POWER_MODE_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_LOW_POWER_MODE_IND_V02),
+    NAME_VAL(QMI_LOC_GET_LOW_POWER_MODE_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_LOW_POWER_MODE_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_LOW_POWER_MODE_IND_V02),
+    NAME_VAL(QMI_LOC_SET_SERVER_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_SERVER_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_SERVER_IND_V02),
+    NAME_VAL(QMI_LOC_GET_SERVER_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_SERVER_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_SERVER_IND_V02),
+    NAME_VAL(QMI_LOC_DELETE_ASSIST_DATA_REQ_V02),
+    NAME_VAL(QMI_LOC_DELETE_ASSIST_DATA_RESP_V02),
+    NAME_VAL(QMI_LOC_DELETE_ASSIST_DATA_IND_V02),
+    NAME_VAL(QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_XTRA_T_SESSION_CONTROL_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02),
+    NAME_VAL(QMI_LOC_GET_XTRA_T_SESSION_CONTROL_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_XTRA_T_SESSION_CONTROL_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_XTRA_T_SESSION_CONTROL_IND_V02),
+    NAME_VAL(QMI_LOC_INJECT_WIFI_POSITION_REQ_V02),
+    NAME_VAL(QMI_LOC_INJECT_WIFI_POSITION_RESP_V02),
+    NAME_VAL(QMI_LOC_INJECT_WIFI_POSITION_IND_V02),
+    NAME_VAL(QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02),
+    NAME_VAL(QMI_LOC_NOTIFY_WIFI_STATUS_RESP_V02),
+    NAME_VAL(QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02),
+    NAME_VAL(QMI_LOC_GET_REGISTERED_EVENTS_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_REGISTERED_EVENTS_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_REGISTERED_EVENTS_IND_V02),
+    NAME_VAL(QMI_LOC_SET_OPERATION_MODE_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_OPERATION_MODE_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_OPERATION_MODE_IND_V02),
+    NAME_VAL(QMI_LOC_GET_OPERATION_MODE_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_OPERATION_MODE_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_OPERATION_MODE_IND_V02),
+    NAME_VAL(QMI_LOC_SET_SPI_STATUS_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_SPI_STATUS_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_SPI_STATUS_IND_V02),
+    NAME_VAL(QMI_LOC_INJECT_SENSOR_DATA_REQ_V02),
+    NAME_VAL(QMI_LOC_INJECT_SENSOR_DATA_RESP_V02),
+    NAME_VAL(QMI_LOC_INJECT_SENSOR_DATA_IND_V02),
+    NAME_VAL(QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02),
+    NAME_VAL(QMI_LOC_INJECT_TIME_SYNC_DATA_RESP_V02),
+    NAME_VAL(QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02),
+    NAME_VAL(QMI_LOC_SET_CRADLE_MOUNT_CONFIG_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_CRADLE_MOUNT_CONFIG_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02),
+    NAME_VAL(QMI_LOC_GET_CRADLE_MOUNT_CONFIG_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_CRADLE_MOUNT_CONFIG_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02),
+    NAME_VAL(QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_EXTERNAL_POWER_CONFIG_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02),
+    NAME_VAL(QMI_LOC_GET_EXTERNAL_POWER_CONFIG_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_EXTERNAL_POWER_CONFIG_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02),
+    NAME_VAL(QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02),
+    NAME_VAL(QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_RESP_V02),
+    NAME_VAL(QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02),
+    NAME_VAL(QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02),
+    NAME_VAL(QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02),
+    NAME_VAL(QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_SENSOR_CONTROL_CONFIG_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02),
+    NAME_VAL(QMI_LOC_GET_SENSOR_CONTROL_CONFIG_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_SENSOR_CONTROL_CONFIG_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02),
+    NAME_VAL(QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_SENSOR_PROPERTIES_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02),
+    NAME_VAL(QMI_LOC_GET_SENSOR_PROPERTIES_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_SENSOR_PROPERTIES_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02),
+    NAME_VAL(QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02),
+    NAME_VAL(QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02),
+    NAME_VAL(QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02),
+    NAME_VAL(QMI_LOC_INJECT_SUPL_CERTIFICATE_RESP_V02),
+    NAME_VAL(QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02),
+    NAME_VAL(QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02),
+    NAME_VAL(QMI_LOC_DELETE_SUPL_CERTIFICATE_RESP_V02),
+    NAME_VAL(QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02),
+    NAME_VAL(QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02),
+    NAME_VAL(QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02),
+    NAME_VAL(QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02),
+    NAME_VAL(QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02),
+    NAME_VAL(QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02),
+    NAME_VAL(QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02),
+};
+static int loc_v02_event_num = sizeof(loc_v02_event_name) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_v02_event_name(uint32_t event)
+{
+    return loc_get_name_from_val(loc_v02_event_name, loc_v02_event_num, (long) event);
+}
+
+static loc_name_val_s_type loc_v02_client_status_name[] =
+{
+    NAME_VAL(eLOC_CLIENT_SUCCESS),
+    NAME_VAL(eLOC_CLIENT_FAILURE_GENERAL),
+    NAME_VAL(eLOC_CLIENT_FAILURE_UNSUPPORTED),
+    NAME_VAL(eLOC_CLIENT_FAILURE_INVALID_PARAMETER),
+    NAME_VAL(eLOC_CLIENT_FAILURE_ENGINE_BUSY),
+    NAME_VAL(eLOC_CLIENT_FAILURE_PHONE_OFFLINE),
+    NAME_VAL(eLOC_CLIENT_FAILURE_TIMEOUT),
+    NAME_VAL(eLOC_CLIENT_FAILURE_SERVICE_NOT_PRESENT),
+    NAME_VAL(eLOC_CLIENT_FAILURE_SERVICE_VERSION_UNSUPPORTED),
+    NAME_VAL(eLOC_CLIENT_FAILURE_CLIENT_VERSION_UNSUPPORTED),
+    NAME_VAL(eLOC_CLIENT_FAILURE_INVALID_HANDLE),
+    NAME_VAL(eLOC_CLIENT_FAILURE_INTERNAL),
+    NAME_VAL(eLOC_CLIENT_FAILURE_NOT_INITIALIZED),
+};
+static int loc_v02_client_status_num = sizeof(loc_v02_client_status_name) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_v02_client_status_name(locClientStatusEnumType status)
+{
+    return loc_get_name_from_val(loc_v02_client_status_name, loc_v02_client_status_num, (long) status);
+}
+
+
+static loc_name_val_s_type loc_v02_qmi_status_name[] =
+{
+    QMILOCSTATUSENUMT_MIN_ENUM_VAL_V02,
+    eQMI_LOC_SUCCESS_V02,
+    eQMI_LOC_GENERAL_FAILURE_V02,
+    eQMI_LOC_UNSUPPORTED_V02,
+    eQMI_LOC_INVALID_PARAMETER_V02,
+    eQMI_LOC_ENGINE_BUSY_V02,
+    eQMI_LOC_PHONE_OFFLINE_V02,
+    eQMI_LOC_TIMEOUT_V02,
+    QMILOCSTATUSENUMT_MAX_ENUM_VAL_V02
+};
+static int loc_v02_qmi_status_num = sizeof(loc_v02_qmi_status_name) / sizeof(loc_name_val_s_type);
+
+const char* loc_get_v02_qmi_status_name(qmiLocStatusEnumT_v02 status)
+{
+    return loc_get_name_from_val(loc_v02_qmi_status_name, loc_v02_qmi_status_num, (long) status);
+}
diff --git a/loc_api/loc_api_v02/loc_api_v02_log.h b/loc_api/loc_api_v02/loc_api_v02_log.h
new file mode 100755
index 0000000..c63972f
--- /dev/null
+++ b/loc_api/loc_api_v02/loc_api_v02_log.h
@@ -0,0 +1,50 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef LOC_API_V02_LOG_H
+#define LOC_API_V02_LOG_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <loc_log.h>
+#include <loc_api_v02_client.h>
+
+const char* loc_get_v02_event_name(uint32_t event);
+const char* loc_get_v02_client_status_name(locClientStatusEnumType status);
+const char* loc_get_v02_qmi_status_name(qmiLocStatusEnumT_v02 status);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_API_V02_LOG_H */
diff --git a/loc_api/loc_api_v02/loc_util_log.h b/loc_api/loc_api_v02/loc_util_log.h
new file mode 100755
index 0000000..f1b675e
--- /dev/null
+++ b/loc_api/loc_api_v02/loc_util_log.h
@@ -0,0 +1,81 @@
+/* Copyright (c) 2009,2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef LOC_UTIL_LOG_H
+#define LOC_UTIL_LOG_H
+
+#ifdef FEATURE_LOC_API_V02_QNX_MOD
+//error logs
+#define LOC_LOGE(...) printf(__VA_ARGS__)
+//warning logs
+#define LOC_LOGW(...) printf(__VA_ARGS__)
+// debug logs
+#define LOC_LOGD(...) printf(__VA_ARGS__)
+//info logs
+#define LOC_LOGI(...) printf(__VA_ARGS__)
+//verbose logs
+#define LOC_LOGV(...) printf(__VA_ARGS__)
+
+#define MODEM_LOG_CALLFLOW(SPEC, VAL)
+#define EXIT_LOG_CALLFLOW(SPEC, VAL)
+
+#endif //FEATURE_LOC_API_V02_QNX_MOD
+
+#ifdef LOC_UTIL_TARGET_OFF_TARGET
+
+#include <stdio.h>
+
+//error logs
+#define LOC_LOGE(...) printf(__VA_ARGS__)
+//warning logs
+#define LOC_LOGW(...) printf(__VA_ARGS__)
+// debug logs
+#define LOC_LOGD(...) printf(__VA_ARGS__)
+//info logs
+#define LOC_LOGI(...) printf(__VA_ARGS__)
+//verbose logs
+#define LOC_LOGV(...) printf(__VA_ARGS__)
+
+// get around strl*: not found in glibc
+// TBD:look for presence of eglibc other libraries
+// with strlcpy supported.
+#define strlcpy(X,Y,Z) strcpy(X,Y)
+#define strlcat(X,Y,Z) strcat(X,Y)
+
+#define MODEM_LOG_CALLFLOW(SPEC, VAL)
+#define EXIT_LOG_CALLFLOW(SPEC, VAL)
+
+#elif defined(_ANDROID_)
+
+#include <log_util.h>
+
+#endif //LOC_UTIL_TARGET_OFF_TARGET
+
+
+#endif //LOC_UTIL_LOG_H
diff --git a/loc_api/loc_api_v02/location_service_v02.c b/loc_api/loc_api_v02/location_service_v02.c
new file mode 100755
index 0000000..37d93f6
--- /dev/null
+++ b/loc_api/loc_api_v02/location_service_v02.c
@@ -0,0 +1,2223 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#include "stdint.h"
+#include "qmi_idl_lib_internal.h"
+#include "location_service_v02.h"
+#include "common_v01.h"
+
+
+/*Type Definitions*/
+static const uint8_t qmiLocGPSTimeStructT_data_v02[] = {
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGPSTimeStructT_v02, gpsWeek),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGPSTimeStructT_v02, gpsTimeOfWeekMs),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocDOPStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocDOPStructT_v02, PDOP),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocDOPStructT_v02, HDOP),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocDOPStructT_v02, VDOP),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocSensorUsageIndicatorStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSensorUsageIndicatorStructT_v02, usageMask),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSensorUsageIndicatorStructT_v02, aidingIndicatorMask),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocSvInfoStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSvInfoStructT_v02, validMask),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSvInfoStructT_v02, system),
+
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSvInfoStructT_v02, gnssSvId),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSvInfoStructT_v02, healthStatus),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSvInfoStructT_v02, svStatus),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSvInfoStructT_v02, svInfoMask),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSvInfoStructT_v02, elevation),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSvInfoStructT_v02, azimuth),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSvInfoStructT_v02, snr),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocNiVxNotifyVerifyStructT_data_v02[] = {
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiVxNotifyVerifyStructT_v02, posQosIncl),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiVxNotifyVerifyStructT_v02, posQos),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiVxNotifyVerifyStructT_v02, numFixes),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiVxNotifyVerifyStructT_v02, timeBetweenFixes),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiVxNotifyVerifyStructT_v02, posMode),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiVxNotifyVerifyStructT_v02, encodingScheme),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiVxNotifyVerifyStructT_v02, requestorId),
+  QMI_LOC_NI_MAX_REQUESTOR_ID_LENGTH_V02,
+  QMI_IDL_OFFSET8(qmiLocNiVxNotifyVerifyStructT_v02, requestorId) - QMI_IDL_OFFSET8(qmiLocNiVxNotifyVerifyStructT_v02, requestorId_len),
+
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiVxNotifyVerifyStructT_v02, userRespTimerInSeconds),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocNiSuplFormattedStringStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplFormattedStringStructT_v02, formatType),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplFormattedStringStructT_v02, formattedString),
+  QMI_LOC_NI_MAX_CLIENT_NAME_LENGTH_V02,
+  QMI_IDL_OFFSET8(qmiLocNiSuplFormattedStringStructT_v02, formattedString) - QMI_IDL_OFFSET8(qmiLocNiSuplFormattedStringStructT_v02, formattedString_len),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocNiSuplQopStructT_data_v02[] = {
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplQopStructT_v02, validMask),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplQopStructT_v02, horizontalAccuracy),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplQopStructT_v02, verticalAccuracy),
+
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplQopStructT_v02, maxLocAge),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplQopStructT_v02, delay),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocIpV4AddrStructType_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocIpV4AddrStructType_v02, addr),
+
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocIpV4AddrStructType_v02, port),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocIpV6AddrStructType_data_v02[] = {
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocIpV6AddrStructType_v02, addr),
+  QMI_LOC_IPV6_ADDR_LENGTH_V02,
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocIpV6AddrStructType_v02, port),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocNiSuplServerInfoStructT_data_v02[] = {
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplServerInfoStructT_v02, suplServerAddrTypeMask),
+
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplServerInfoStructT_v02, ipv4Addr),
+ 7, 0,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplServerInfoStructT_v02, ipv6Addr),
+ 8, 0,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(qmiLocNiSuplServerInfoStructT_v02, urlAddr),
+  QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02,
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocNiSuplNotifyVerifyStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplNotifyVerifyStructT_v02, valid_flags),
+
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocNiSuplNotifyVerifyStructT_v02, suplServerInfo),
+ 9, 0,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, suplSessionId),
+  QMI_LOC_NI_SUPL_SLP_SESSION_ID_BYTE_LENGTH_V02,
+
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, suplHash),
+  QMI_LOC_NI_SUPL_HASH_LENGTH_V02,
+
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, posMethod),
+
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, dataCodingScheme),
+
+  QMI_IDL_FLAGS_OFFSET_IS_16 |  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, requestorId),
+ 5, 0,
+  QMI_IDL_FLAGS_OFFSET_IS_16 |  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, clientName),
+ 5, 0,
+  QMI_IDL_FLAGS_OFFSET_IS_16 |  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, suplQop),
+ 6, 0,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, userResponseTimer),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocNiUmtsCpCodedStringStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpCodedStringStructT_v02, dataCodingScheme),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpCodedStringStructT_v02, codedString),
+  QMI_LOC_NI_CODEWORD_MAX_LENGTH_V02,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpCodedStringStructT_v02, codedString) - QMI_IDL_OFFSET8(qmiLocNiUmtsCpCodedStringStructT_v02, codedString_len),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocNiUmtsCpNotifyVerifyStructT_data_v02[] = {
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, valid_flags),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, invokeId),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, dataCodingScheme),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, notificationText),
+  QMI_LOC_NI_MAX_CLIENT_NAME_LENGTH_V02,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, notificationText) - QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, notificationText_len),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, clientAddress),
+  QMI_LOC_NI_MAX_EXT_CLIENT_ADDRESS_V02,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, clientAddress) - QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, clientAddress_len),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, locationType),
+
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, requestorId),
+ 11, 0,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, codewordString),
+ 11, 0,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, lcsServiceTypeId),
+
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, userResponseTimer),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocNiVxServiceInteractionStructT_data_v02[] = {
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocNiVxServiceInteractionStructT_v02, niVxReq),
+ 4, 0,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiVxServiceInteractionStructT_v02, serviceInteractionType),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocAssistanceServerUrlStructT_data_v02[] = {
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(qmiLocAssistanceServerUrlStructT_v02, serverUrl),
+  QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02,
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocTimeServerListStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocTimeServerListStructT_v02, delayThreshold),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocTimeServerListStructT_v02, timeServerList),
+  QMI_LOC_MAX_NTP_SERVERS_V02,
+  QMI_IDL_OFFSET8(qmiLocTimeServerListStructT_v02, timeServerList) - QMI_IDL_OFFSET8(qmiLocTimeServerListStructT_v02, timeServerList_len),
+ 14, 0,
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocPredictedOrbitsAllowedSizesStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocPredictedOrbitsAllowedSizesStructT_v02, maxFileSizeInBytes),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocPredictedOrbitsAllowedSizesStructT_v02, maxPartSize),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocPredictedOrbitsServerListStructT_data_v02[] = {
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocPredictedOrbitsServerListStructT_v02, serverList),
+  QMI_LOC_MAX_PREDICTED_ORBITS_SERVERS_V02,
+  QMI_IDL_OFFSET8(qmiLocPredictedOrbitsServerListStructT_v02, serverList) - QMI_IDL_OFFSET8(qmiLocPredictedOrbitsServerListStructT_v02, serverList_len),
+ 14, 0,
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocSensorControlConfigSamplingSpecStructT_data_v02[] = {
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSensorControlConfigSamplingSpecStructT_v02, samplesPerBatch),
+
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSensorControlConfigSamplingSpecStructT_v02, batchesPerSecond),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocSensorReadyStatusStructT_data_v02[] = {
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSensorReadyStatusStructT_v02, injectEnable),
+
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocSensorReadyStatusStructT_v02, dataFrequency),
+ 18, 0,
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocPredictedOrbitsDataValidityStructT_data_v02[] = {
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocPredictedOrbitsDataValidityStructT_v02, startTimeInUTC),
+
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocPredictedOrbitsDataValidityStructT_v02, durationHours),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocAltitudeSrcInfoStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocAltitudeSrcInfoStructT_v02, source),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocAltitudeSrcInfoStructT_v02, linkage),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocAltitudeSrcInfoStructT_v02, coverage),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocDeleteSvInfoStructT_data_v02[] = {
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocDeleteSvInfoStructT_v02, gnssSvId),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocDeleteSvInfoStructT_v02, system),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocDeleteSvInfoStructT_v02, deleteSvInfoMask),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocWifiFixTimeStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocWifiFixTimeStructT_v02, wifiPositionTime),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocWifiFixPosStructT_data_v02[] = {
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocWifiFixPosStructT_v02, lat),
+
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocWifiFixPosStructT_v02, lon),
+
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocWifiFixPosStructT_v02, hepe),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocWifiFixPosStructT_v02, numApsUsed),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocWifiFixPosStructT_v02, fixErrorCode),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocWifiApInfoStructT_data_v02[] = {
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocWifiApInfoStructT_v02, macAddr),
+  QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02,
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocWifiApInfoStructT_v02, rssi),
+
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocWifiApInfoStructT_v02, channel),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocWifiApInfoStructT_v02, apQualifier),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLoc3AxisSensorSampleStructT_data_v02[] = {
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleStructT_v02, timeOffset),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleStructT_v02, xAxis),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleStructT_v02, yAxis),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleStructT_v02, zAxis),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLoc3AxisSensorSampleListStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleListStructT_v02, timeOfFirstSample),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleListStructT_v02, flags),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleListStructT_v02, sensorData),
+  QMI_LOC_SENSOR_DATA_MAX_SAMPLES_V02,
+  QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleListStructT_v02, sensorData) - QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleListStructT_v02, sensorData_len),
+ 26, 0,
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocApnProfilesStructT_data_v02[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocApnProfilesStructT_v02, pdnType),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(qmiLocApnProfilesStructT_v02, apnName),
+  QMI_LOC_MAX_APN_NAME_LENGTH_V02,
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+/*Message Definitions*/
+static const uint8_t qmiLocGenRespMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocGenRespMsgT_v02, resp),
+  0, 1
+};
+
+static const uint8_t qmiLocInformClientRevisionReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInformClientRevisionReqMsgT_v02, revision)
+};
+
+static const uint8_t qmiLocRegEventsReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocRegEventsReqMsgT_v02, eventRegMask)
+};
+
+static const uint8_t qmiLocStartReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, sessionId),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, fixRecurrence) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, fixRecurrence_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, fixRecurrence),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, horizontalAccuracyLevel) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, horizontalAccuracyLevel_valid)),
+  0x11,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, horizontalAccuracyLevel),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, intermediateReportState) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, intermediateReportState_valid)),
+  0x12,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, intermediateReportState),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, minInterval) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, minInterval_valid)),
+  0x13,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, minInterval)
+};
+
+static const uint8_t qmiLocStopReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocStopReqMsgT_v02, sessionId)
+};
+
+static const uint8_t qmiLocEventPositionReportIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, sessionStatus),
+
+  0x02,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, sessionId),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, latitude) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, latitude_valid)),
+  0x10,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, latitude),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, longitude) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, longitude_valid)),
+  0x11,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, longitude),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncCircular) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncCircular_valid)),
+  0x12,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncCircular),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncEllipseSemiMinor) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncEllipseSemiMinor_valid)),
+  0x13,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncEllipseSemiMinor),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncEllipseSemiMajor) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncEllipseSemiMajor_valid)),
+  0x14,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncEllipseSemiMajor),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncEllipseOrientAzimuth) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncEllipseOrientAzimuth_valid)),
+  0x15,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horUncEllipseOrientAzimuth),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horConfidence) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horConfidence_valid)),
+  0x16,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horConfidence),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horReliability) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horReliability_valid)),
+  0x17,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, horReliability),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, speedHorizontal) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, speedHorizontal_valid)),
+  0x18,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, speedHorizontal),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, speedUnc) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, speedUnc_valid)),
+  0x19,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, speedUnc),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, altitudeWrtEllipsoid) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, altitudeWrtEllipsoid_valid)),
+  0x1A,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, altitudeWrtEllipsoid),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, altitudeWrtMeanSeaLevel) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, altitudeWrtMeanSeaLevel_valid)),
+  0x1B,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, altitudeWrtMeanSeaLevel),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, vertUnc) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, vertUnc_valid)),
+  0x1C,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, vertUnc),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, vertConfidence) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, vertConfidence_valid)),
+  0x1D,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, vertConfidence),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, vertReliability) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, vertReliability_valid)),
+  0x1E,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, vertReliability),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, speedVertical) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, speedVertical_valid)),
+  0x1F,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, speedVertical),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, heading) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, heading_valid)),
+  0x20,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, heading),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, headingUnc) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, headingUnc_valid)),
+  0x21,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, headingUnc),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, magneticDeviation) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, magneticDeviation_valid)),
+  0x22,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, magneticDeviation),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, technologyMask) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, technologyMask_valid)),
+  0x23,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, technologyMask),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, DOP) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, DOP_valid)),
+  0x24,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, DOP),
+  1, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timestampUtc) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timestampUtc_valid)),
+  0x25,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timestampUtc),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, leapSeconds) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, leapSeconds_valid)),
+  0x26,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, leapSeconds),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, gpsTime) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, gpsTime_valid)),
+  0x27,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, gpsTime),
+  0, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timeUnc) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timeUnc_valid)),
+  0x28,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timeUnc),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, timeSrc) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, timeSrc_valid)),
+  0x29,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocEventPositionReportIndMsgT_v02, timeSrc),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, sensorDataUsage) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, sensorDataUsage_valid)),
+  0x2A,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocEventPositionReportIndMsgT_v02, sensorDataUsage),
+  2, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, fixId) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, fixId_valid)),
+  0x2B,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocEventPositionReportIndMsgT_v02, fixId)
+};
+
+static const uint8_t qmiLocEventGnssSvInfoIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventGnssSvInfoIndMsgT_v02, altitudeAssumed),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvInfoIndMsgT_v02, svList) - QMI_IDL_OFFSET8(qmiLocEventGnssSvInfoIndMsgT_v02, svList_valid)),
+  0x10,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocEventGnssSvInfoIndMsgT_v02, svList),
+  QMI_LOC_SV_INFO_LIST_MAX_SIZE_V02,
+  QMI_IDL_OFFSET8(qmiLocEventGnssSvInfoIndMsgT_v02, svList) - QMI_IDL_OFFSET8(qmiLocEventGnssSvInfoIndMsgT_v02, svList_len),
+  3, 0
+};
+
+static const uint8_t qmiLocEventNmeaIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |   QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(qmiLocEventNmeaIndMsgT_v02, nmea),
+  QMI_LOC_NMEA_STRING_MAX_LENGTH_V02
+};
+
+static const uint8_t qmiLocEventNiNotifyVerifyReqIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, notificationType),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiVxInd) - QMI_IDL_OFFSET8(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiVxInd_valid)),
+  0x10,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiVxInd),
+  4, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiSuplInd) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiSuplInd_valid)),
+  0x11,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiSuplInd),
+  10, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiUmtsCpInd) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiUmtsCpInd_valid)),
+  0x12,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiUmtsCpInd),
+  12, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiVxServiceInteractionInd) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiVxServiceInteractionInd_valid)),
+  0x13,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiVxServiceInteractionInd),
+  13, 0
+};
+
+static const uint8_t qmiLocEventInjectTimeReqIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventInjectTimeReqIndMsgT_v02, timeServerInfo) - QMI_IDL_OFFSET8(qmiLocEventInjectTimeReqIndMsgT_v02, timeServerInfo_valid)),
+  0x10,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocEventInjectTimeReqIndMsgT_v02, timeServerInfo),
+  15, 0
+};
+
+static const uint8_t qmiLocEventInjectPredictedOrbitsReqIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02, allowedSizes),
+  16, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02, serverList) - QMI_IDL_OFFSET8(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02, serverList_valid)),
+  0x10,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02, serverList),
+  17, 0
+};
+
+static const uint8_t qmiLocEventInjectPositionReqIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventInjectPositionReqIndMsgT_v02, latitude),
+
+  0x02,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventInjectPositionReqIndMsgT_v02, longitude),
+
+  0x03,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventInjectPositionReqIndMsgT_v02, horUncCircular),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x04,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventInjectPositionReqIndMsgT_v02, timestampUtc)
+};
+
+static const uint8_t qmiLocEventEngineStateIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventEngineStateIndMsgT_v02, engineState)
+};
+
+static const uint8_t qmiLocEventFixSessionStateIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventFixSessionStateIndMsgT_v02, sessionState),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventFixSessionStateIndMsgT_v02, sessionId) - QMI_IDL_OFFSET8(qmiLocEventFixSessionStateIndMsgT_v02, sessionId_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventFixSessionStateIndMsgT_v02, sessionId)
+};
+
+static const uint8_t qmiLocEventWifiReqIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventWifiReqIndMsgT_v02, requestType),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventWifiReqIndMsgT_v02, tbfInMs) - QMI_IDL_OFFSET8(qmiLocEventWifiReqIndMsgT_v02, tbfInMs_valid)),
+  0x10,
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventWifiReqIndMsgT_v02, tbfInMs)
+};
+
+static const uint8_t qmiLocEventSensorStreamingReadyStatusIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, accelReady) - QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, accelReady_valid)),
+  0x10,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, accelReady),
+  19, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, gyroReady) - QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, gyroReady_valid)),
+  0x11,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, gyroReady),
+  19, 0
+};
+
+static const uint8_t qmiLocEventTimeSyncReqIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventTimeSyncReqIndMsgT_v02, refCounter)
+};
+
+static const uint8_t qmiLocEventSetSpiStreamingReportIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventSetSpiStreamingReportIndMsgT_v02, enable)
+};
+
+static const uint8_t qmiLocEventLocationServerConnectionReqIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventLocationServerConnectionReqIndMsgT_v02, connHandle),
+
+  0x02,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventLocationServerConnectionReqIndMsgT_v02, requestType),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocEventLocationServerConnectionReqIndMsgT_v02, wwanType)
+};
+
+/*
+ * qmiLocGetServiceRevisionReqMsgT is empty
+ * static const uint8_t qmiLocGetServiceRevisionReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetServiceRevisionIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetServiceRevisionIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetServiceRevisionIndMsgT_v02, revision)
+};
+
+/*
+ * qmiLocGetFixCriteriaReqMsgT is empty
+ * static const uint8_t qmiLocGetFixCriteriaReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetFixCriteriaIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, horizontalAccuracyLevel) - QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, horizontalAccuracyLevel_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, horizontalAccuracyLevel),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, intermediateReportState) - QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, intermediateReportState_valid)),
+  0x11,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, intermediateReportState),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, minInterval) - QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, minInterval_valid)),
+  0x12,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, minInterval)
+};
+
+static const uint8_t qmiLocNiUserRespReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUserRespReqMsgT_v02, userResp),
+
+  0x02,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUserRespReqMsgT_v02, notificationType),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocNiUserRespReqMsgT_v02, NiVxPayload) - QMI_IDL_OFFSET8(qmiLocNiUserRespReqMsgT_v02, NiVxPayload_valid)),
+  0x10,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocNiUserRespReqMsgT_v02, NiVxPayload),
+  4, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiSuplPayload) - QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiSuplPayload_valid)),
+  0x11,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiUserRespReqMsgT_v02, NiSuplPayload),
+  10, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiUmtsCpPayload) - QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiUmtsCpPayload_valid)),
+  0x12,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiUserRespReqMsgT_v02, NiUmtsCpPayload),
+  12, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiVxServiceInteractionPayload) - QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiVxServiceInteractionPayload_valid)),
+  0x13,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocNiUserRespReqMsgT_v02, NiVxServiceInteractionPayload),
+  13, 0
+};
+
+static const uint8_t qmiLocNiUserRespIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNiUserRespIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocInjectPredictedOrbitsDataReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, totalSize),
+
+  0x02,
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, totalParts),
+
+  0x03,
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, partNum),
+
+  0x04,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_SZ_IS_16 |   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, partData),
+  ((QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02) & 0xFF), ((QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02) >> 8),
+  QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, partData) - QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, partData_len),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, formatType) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, formatType_valid)),
+  0x10,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, formatType)
+};
+
+static const uint8_t qmiLocInjectPredictedOrbitsDataIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataIndMsgT_v02, partNum) - QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataIndMsgT_v02, partNum_valid)),
+  0x10,
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataIndMsgT_v02, partNum)
+};
+
+/*
+ * qmiLocGetPredictedOrbitsDataSourceReqMsgT is empty
+ * static const uint8_t qmiLocGetPredictedOrbitsDataSourceReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetPredictedOrbitsDataSourceIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, allowedSizes) - QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, allowedSizes_valid)),
+  0x10,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, allowedSizes),
+  16, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, serverList) - QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, serverList_valid)),
+  0x11,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, serverList),
+  17, 0
+};
+
+/*
+ * qmiLocGetPredictedOrbitsDataValidityReqMsgT is empty
+ * static const uint8_t qmiLocGetPredictedOrbitsDataValidityReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetPredictedOrbitsDataValidityIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02, validityInfo) - QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02, validityInfo_valid)),
+  0x10,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02, validityInfo),
+  20, 0
+};
+
+static const uint8_t qmiLocInjectUtcTimeReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectUtcTimeReqMsgT_v02, timeUtc),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectUtcTimeReqMsgT_v02, timeUnc)
+};
+
+static const uint8_t qmiLocInjectUtcTimeIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectUtcTimeIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocInjectPositionReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, latitude) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, latitude_valid)),
+  0x10,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, latitude),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, longitude) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, longitude_valid)),
+  0x11,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, longitude),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horUncCircular) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horUncCircular_valid)),
+  0x12,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horUncCircular),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horConfidence) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horConfidence_valid)),
+  0x13,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horConfidence),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horReliability) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horReliability_valid)),
+  0x14,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horReliability),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtEllipsoid) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtEllipsoid_valid)),
+  0x15,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtEllipsoid),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtMeanSeaLevel) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtMeanSeaLevel_valid)),
+  0x16,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtMeanSeaLevel),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertUnc) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertUnc_valid)),
+  0x17,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertUnc),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertConfidence) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertConfidence_valid)),
+  0x18,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertConfidence),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertReliability) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertReliability_valid)),
+  0x19,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertReliability),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altSourceInfo) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altSourceInfo_valid)),
+  0x1A,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altSourceInfo),
+  21, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampUtc) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampUtc_valid)),
+  0x1B,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampUtc),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampAge) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampAge_valid)),
+  0x1C,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampAge),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, positionSrc) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, positionSrc_valid)),
+  0x1D,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, positionSrc)
+};
+
+static const uint8_t qmiLocInjectPositionIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectPositionIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocSetEngineLockReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetEngineLockReqMsgT_v02, lockType)
+};
+
+static const uint8_t qmiLocSetEngineLockIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetEngineLockIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetEngineLockReqMsgT is empty
+ * static const uint8_t qmiLocGetEngineLockReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetEngineLockIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetEngineLockIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetEngineLockIndMsgT_v02, lockType) - QMI_IDL_OFFSET8(qmiLocGetEngineLockIndMsgT_v02, lockType_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetEngineLockIndMsgT_v02, lockType)
+};
+
+static const uint8_t qmiLocSetSbasConfigReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSbasConfigReqMsgT_v02, sbasConfig)
+};
+
+static const uint8_t qmiLocSetSbasConfigIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSbasConfigIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetSbasConfigReqMsgT is empty
+ * static const uint8_t qmiLocGetSbasConfigReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetSbasConfigIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetSbasConfigIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSbasConfigIndMsgT_v02, sbasConfig) - QMI_IDL_OFFSET8(qmiLocGetSbasConfigIndMsgT_v02, sbasConfig_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetSbasConfigIndMsgT_v02, sbasConfig)
+};
+
+static const uint8_t qmiLocSetNmeaTypesReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetNmeaTypesReqMsgT_v02, nmeaSentenceType)
+};
+
+static const uint8_t qmiLocSetNmeaTypesIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetNmeaTypesIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetNmeaTypesReqMsgT is empty
+ * static const uint8_t qmiLocGetNmeaTypesReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetNmeaTypesIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetNmeaTypesIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetNmeaTypesIndMsgT_v02, nmeaSentenceType) - QMI_IDL_OFFSET8(qmiLocGetNmeaTypesIndMsgT_v02, nmeaSentenceType_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetNmeaTypesIndMsgT_v02, nmeaSentenceType)
+};
+
+static const uint8_t qmiLocSetLowPowerModeReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetLowPowerModeReqMsgT_v02, lowPowerMode)
+};
+
+static const uint8_t qmiLocSetLowPowerModeIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetLowPowerModeIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetLowPowerModeReqMsgT is empty
+ * static const uint8_t qmiLocGetLowPowerModeReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetLowPowerModeIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetLowPowerModeIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetLowPowerModeIndMsgT_v02, lowPowerMode) - QMI_IDL_OFFSET8(qmiLocGetLowPowerModeIndMsgT_v02, lowPowerMode_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetLowPowerModeIndMsgT_v02, lowPowerMode)
+};
+
+static const uint8_t qmiLocSetServerReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, serverType),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv4Addr) - QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv4Addr_valid)),
+  0x10,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv4Addr),
+  7, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv6Addr) - QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv6Addr_valid)),
+  0x11,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv6Addr),
+  8, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, urlAddr) - QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, urlAddr_valid)),
+  0x12,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |   QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, urlAddr),
+  QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02
+};
+
+static const uint8_t qmiLocSetServerIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetServerIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGetServerReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetServerReqMsgT_v02, serverType),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetServerReqMsgT_v02, serverAddrTypeMask) - QMI_IDL_OFFSET8(qmiLocGetServerReqMsgT_v02, serverAddrTypeMask_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetServerReqMsgT_v02, serverAddrTypeMask)
+};
+
+static const uint8_t qmiLocGetServerIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, status),
+
+  0x02,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, serverType),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv4Addr) - QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv4Addr_valid)),
+  0x10,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv4Addr),
+  7, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv6Addr) - QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv6Addr_valid)),
+  0x11,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv6Addr),
+  8, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, urlAddr) - QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, urlAddr_valid)),
+  0x12,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |   QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, urlAddr),
+  QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02
+};
+
+static const uint8_t qmiLocDeleteAssistDataReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteAllFlag),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteSvInfoList) - QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteSvInfoList_valid)),
+  0x10,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteSvInfoList),
+  QMI_LOC_DELETE_MAX_SV_INFO_LENGTH_V02,
+  QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteSvInfoList) - QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteSvInfoList_len),
+  22, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteGnssDataMask) - QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteGnssDataMask_valid)),
+  0x11,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocDeleteAssistDataReqMsgT_v02, deleteGnssDataMask),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteCellDbDataMask) - QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteCellDbDataMask_valid)),
+  0x12,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocDeleteAssistDataReqMsgT_v02, deleteCellDbDataMask),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteClockInfoMask) - QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteClockInfoMask_valid)),
+  0x13,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocDeleteAssistDataReqMsgT_v02, deleteClockInfoMask)
+};
+
+static const uint8_t qmiLocDeleteAssistDataIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocDeleteAssistDataIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocSetXtraTSessionControlReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetXtraTSessionControlReqMsgT_v02, xtraTSessionControl)
+};
+
+static const uint8_t qmiLocSetXtraTSessionControlIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetXtraTSessionControlIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetXtraTSessionControlReqMsgT is empty
+ * static const uint8_t qmiLocGetXtraTSessionControlReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetXtraTSessionControlIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetXtraTSessionControlIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetXtraTSessionControlIndMsgT_v02, xtraTSessionControl) - QMI_IDL_OFFSET8(qmiLocGetXtraTSessionControlIndMsgT_v02, xtraTSessionControl_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetXtraTSessionControlIndMsgT_v02, xtraTSessionControl)
+};
+
+static const uint8_t qmiLocInjectWifiPositionReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixTime) - QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixTime_valid)),
+  0x10,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixTime),
+  23, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixPosition) - QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixPosition_valid)),
+  0x11,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixPosition),
+  24, 0,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, apInfo) - QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, apInfo_valid)),
+  0x12,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, apInfo),
+  QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02,
+  QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, apInfo) - QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, apInfo_len),
+  25, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiPositionReqMsgT_v02, horizontalReliability) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiPositionReqMsgT_v02, horizontalReliability_valid)),
+  0x13,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocInjectWifiPositionReqMsgT_v02, horizontalReliability)
+};
+
+static const uint8_t qmiLocInjectWifiPositionIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectWifiPositionIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocNotifyWifiStatusReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNotifyWifiStatusReqMsgT_v02, wifiStatus)
+};
+
+static const uint8_t qmiLocNotifyWifiStatusIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocNotifyWifiStatusIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetRegisteredEventsReqMsgT is empty
+ * static const uint8_t qmiLocGetRegisteredEventsReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetRegisteredEventsIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetRegisteredEventsIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetRegisteredEventsIndMsgT_v02, eventRegMask) - QMI_IDL_OFFSET8(qmiLocGetRegisteredEventsIndMsgT_v02, eventRegMask_valid)),
+  0x10,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetRegisteredEventsIndMsgT_v02, eventRegMask)
+};
+
+static const uint8_t qmiLocSetOperationModeReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetOperationModeReqMsgT_v02, operationMode)
+};
+
+static const uint8_t qmiLocSetOperationModeIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetOperationModeIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetOperationModeReqMsgT is empty
+ * static const uint8_t qmiLocGetOperationModeReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetOperationModeIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetOperationModeIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetOperationModeIndMsgT_v02, operationMode) - QMI_IDL_OFFSET8(qmiLocGetOperationModeIndMsgT_v02, operationMode_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetOperationModeIndMsgT_v02, operationMode)
+};
+
+static const uint8_t qmiLocSetSpiStatusReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSpiStatusReqMsgT_v02, stationary),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSpiStatusReqMsgT_v02, confidenceStationary) - QMI_IDL_OFFSET8(qmiLocSetSpiStatusReqMsgT_v02, confidenceStationary_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSpiStatusReqMsgT_v02, confidenceStationary)
+};
+
+static const uint8_t qmiLocSetSpiStatusIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSpiStatusIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocInjectSensorDataReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, opaqueIdentifier) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, opaqueIdentifier_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, opaqueIdentifier),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, threeAxisAccelData) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, threeAxisAccelData_valid)),
+  0x11,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, threeAxisAccelData),
+  27, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, threeAxisGyroData) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, threeAxisGyroData_valid)),
+  0x12,
+  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(qmiLocInjectSensorDataReqMsgT_v02, threeAxisGyroData),
+  27, 0
+};
+
+static const uint8_t qmiLocInjectSensorDataIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, opaqueIdentifier) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, opaqueIdentifier_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, opaqueIdentifier),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisAccelSamplesAccepted) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisAccelSamplesAccepted_valid)),
+  0x11,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisAccelSamplesAccepted),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisGyroSamplesAccepted) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisGyroSamplesAccepted_valid)),
+  0x12,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisGyroSamplesAccepted)
+};
+
+static const uint8_t qmiLocInjectTimeSyncDataReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectTimeSyncDataReqMsgT_v02, refCounter),
+
+  0x02,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectTimeSyncDataReqMsgT_v02, sensorProcRxTime),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectTimeSyncDataReqMsgT_v02, sensorProcTxTime)
+};
+
+static const uint8_t qmiLocInjectTimeSyncDataIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectTimeSyncDataIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetCradleMountConfigReqMsgT is empty
+ * static const uint8_t qmiLocGetCradleMountConfigReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetCradleMountConfigIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetCradleMountConfigIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetCradleMountConfigIndMsgT_v02, cradleMountState) - QMI_IDL_OFFSET8(qmiLocGetCradleMountConfigIndMsgT_v02, cradleMountState_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetCradleMountConfigIndMsgT_v02, cradleMountState),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetCradleMountConfigIndMsgT_v02, confidenceCradleMountState) - QMI_IDL_OFFSET8(qmiLocGetCradleMountConfigIndMsgT_v02, confidenceCradleMountState_valid)),
+  0x11,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetCradleMountConfigIndMsgT_v02, confidenceCradleMountState)
+};
+
+static const uint8_t qmiLocSetCradleMountConfigReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetCradleMountConfigReqMsgT_v02, cradleMountState),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetCradleMountConfigReqMsgT_v02, confidenceCradleMountState) - QMI_IDL_OFFSET8(qmiLocSetCradleMountConfigReqMsgT_v02, confidenceCradleMountState_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetCradleMountConfigReqMsgT_v02, confidenceCradleMountState)
+};
+
+static const uint8_t qmiLocSetCradleMountConfigIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetCradleMountConfigIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetExternalPowerConfigReqMsgT is empty
+ * static const uint8_t qmiLocGetExternalPowerConfigReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetExternalPowerConfigIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetExternalPowerConfigIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetExternalPowerConfigIndMsgT_v02, externalPowerState) - QMI_IDL_OFFSET8(qmiLocGetExternalPowerConfigIndMsgT_v02, externalPowerState_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetExternalPowerConfigIndMsgT_v02, externalPowerState)
+};
+
+static const uint8_t qmiLocSetExternalPowerConfigReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetExternalPowerConfigReqMsgT_v02, externalPowerState)
+};
+
+static const uint8_t qmiLocSetExternalPowerConfigIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetExternalPowerConfigIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocInformLocationServerConnStatusReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInformLocationServerConnStatusReqMsgT_v02, connHandle),
+
+  0x02,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInformLocationServerConnStatusReqMsgT_v02, requestType),
+
+  0x03,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInformLocationServerConnStatusReqMsgT_v02, statusType),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInformLocationServerConnStatusReqMsgT_v02, apnProfile) - QMI_IDL_OFFSET8(qmiLocInformLocationServerConnStatusReqMsgT_v02, apnProfile_valid)),
+  0x10,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocInformLocationServerConnStatusReqMsgT_v02, apnProfile),
+  28, 0
+};
+
+static const uint8_t qmiLocInformLocationServerConnStatusIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInformLocationServerConnStatusIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocSetProtocolConfigParametersReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplSecurity) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplSecurity_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplSecurity),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, vxVersion) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, vxVersion_valid)),
+  0x11,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, vxVersion),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplVersion) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplVersion_valid)),
+  0x12,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplVersion)
+};
+
+static const uint8_t qmiLocSetProtocolConfigParametersIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersIndMsgT_v02, failedProtocolConfigParamMask) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersIndMsgT_v02, failedProtocolConfigParamMask_valid)),
+  0x10,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersIndMsgT_v02, failedProtocolConfigParamMask)
+};
+
+static const uint8_t qmiLocGetProtocolConfigParametersReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersReqMsgT_v02, getProtocolConfigParamMask)
+};
+
+static const uint8_t qmiLocGetProtocolConfigParametersIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplSecurity) - QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplSecurity_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplSecurity),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, vxVersion) - QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, vxVersion_valid)),
+  0x11,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, vxVersion),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplVersion) - QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplVersion_valid)),
+  0x12,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplVersion)
+};
+
+static const uint8_t qmiLocSetSensorControlConfigReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorControlConfigReqMsgT_v02, sensorsUsage) - QMI_IDL_OFFSET8(qmiLocSetSensorControlConfigReqMsgT_v02, sensorsUsage_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSensorControlConfigReqMsgT_v02, sensorsUsage)
+};
+
+static const uint8_t qmiLocSetSensorControlConfigIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSensorControlConfigIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetSensorControlConfigReqMsgT is empty
+ * static const uint8_t qmiLocGetSensorControlConfigReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetSensorControlConfigIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetSensorControlConfigIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorControlConfigIndMsgT_v02, sensorsUsage) - QMI_IDL_OFFSET8(qmiLocGetSensorControlConfigIndMsgT_v02, sensorsUsage_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetSensorControlConfigIndMsgT_v02, sensorsUsage)
+};
+
+static const uint8_t qmiLocSetSensorPropertiesReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, gyroBiasVarianceRandomWalk) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, gyroBiasVarianceRandomWalk_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, gyroBiasVarianceRandomWalk)
+};
+
+static const uint8_t qmiLocSetSensorPropertiesIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetSensorPropertiesReqMsgT is empty
+ * static const uint8_t qmiLocGetSensorPropertiesReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetSensorPropertiesIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, gyroBiasVarianceRandomWalk) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, gyroBiasVarianceRandomWalk_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, gyroBiasVarianceRandomWalk)
+};
+
+static const uint8_t qmiLocSetSensorPerformanceControlConfigReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, performanceControlMode) - QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, performanceControlMode_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, performanceControlMode),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, accelSamplingSpec) - QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, accelSamplingSpec_valid)),
+  0x11,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, accelSamplingSpec),
+  18, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, gyroSamplingSpec) - QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, gyroSamplingSpec_valid)),
+  0x12,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, gyroSamplingSpec),
+  18, 0
+};
+
+static const uint8_t qmiLocSetSensorPerformanceControlConfigIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02, failedConfiguration) - QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02, failedConfiguration_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02, failedConfiguration)
+};
+
+/*
+ * qmiLocGetSensorPerformanceControlConfigReqMsgT is empty
+ * static const uint8_t qmiLocGetSensorPerformanceControlConfigReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetSensorPerformanceControlConfigIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, performanceControlMode) - QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, performanceControlMode_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, performanceControlMode),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, accelSamplingSpec) - QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, accelSamplingSpec_valid)),
+  0x11,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, accelSamplingSpec),
+  18, 0,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, gyroSamplingSpec) - QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, gyroSamplingSpec_valid)),
+  0x12,
+  QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, gyroSamplingSpec),
+  18, 0
+};
+
+static const uint8_t qmiLocInjectSuplCertificateReqMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectSuplCertificateReqMsgT_v02, suplCertId),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_SZ_IS_16 |   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectSuplCertificateReqMsgT_v02, suplCertData),
+  ((QMI_LOC_MAX_SUPL_CERT_LENGTH_V02) & 0xFF), ((QMI_LOC_MAX_SUPL_CERT_LENGTH_V02) >> 8),
+  QMI_IDL_OFFSET8(qmiLocInjectSuplCertificateReqMsgT_v02, suplCertData) - QMI_IDL_OFFSET8(qmiLocInjectSuplCertificateReqMsgT_v02, suplCertData_len)
+};
+
+static const uint8_t qmiLocInjectSuplCertificateIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocInjectSuplCertificateIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocDeleteSuplCertificateReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteSuplCertificateReqMsgT_v02, suplCertId) - QMI_IDL_OFFSET8(qmiLocDeleteSuplCertificateReqMsgT_v02, suplCertId_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocDeleteSuplCertificateReqMsgT_v02, suplCertId)
+};
+
+static const uint8_t qmiLocDeleteSuplCertificateIndMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocDeleteSuplCertificateIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocSetPositionEngineConfigParametersReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, injectedPositionControl) - QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, injectedPositionControl_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, injectedPositionControl),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, filterSvUsage) - QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, filterSvUsage_valid)),
+  0x11,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, filterSvUsage),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, storeAssistData) - QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, storeAssistData_valid)),
+  0x12,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, storeAssistData)
+};
+
+static const uint8_t qmiLocSetPositionEngineConfigParametersIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersIndMsgT_v02, failedPositionEngineConfigParamMask) - QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersIndMsgT_v02, failedPositionEngineConfigParamMask_valid)),
+  0x10,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersIndMsgT_v02, failedPositionEngineConfigParamMask)
+};
+
+static const uint8_t qmiLocGetPositionEngineConfigParametersReqMsgT_data_v02[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersReqMsgT_v02, getPositionEngineConfigParamMask)
+};
+
+static const uint8_t qmiLocGetPositionEngineConfigParametersIndMsgT_data_v02[] = {
+  0x01,
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, status),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, injectedPositionControl) - QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, injectedPositionControl_valid)),
+  0x10,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, injectedPositionControl),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, filterSvUsage) - QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, filterSvUsage_valid)),
+  0x11,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, filterSvUsage),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, storeAssistData) - QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, storeAssistData_valid)),
+  0x12,
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, storeAssistData)
+};
+
+/* Type Table */
+static const qmi_idl_type_table_entry  loc_type_table_v02[] = {
+  {sizeof(qmiLocGPSTimeStructT_v02), qmiLocGPSTimeStructT_data_v02},
+  {sizeof(qmiLocDOPStructT_v02), qmiLocDOPStructT_data_v02},
+  {sizeof(qmiLocSensorUsageIndicatorStructT_v02), qmiLocSensorUsageIndicatorStructT_data_v02},
+  {sizeof(qmiLocSvInfoStructT_v02), qmiLocSvInfoStructT_data_v02},
+  {sizeof(qmiLocNiVxNotifyVerifyStructT_v02), qmiLocNiVxNotifyVerifyStructT_data_v02},
+  {sizeof(qmiLocNiSuplFormattedStringStructT_v02), qmiLocNiSuplFormattedStringStructT_data_v02},
+  {sizeof(qmiLocNiSuplQopStructT_v02), qmiLocNiSuplQopStructT_data_v02},
+  {sizeof(qmiLocIpV4AddrStructType_v02), qmiLocIpV4AddrStructType_data_v02},
+  {sizeof(qmiLocIpV6AddrStructType_v02), qmiLocIpV6AddrStructType_data_v02},
+  {sizeof(qmiLocNiSuplServerInfoStructT_v02), qmiLocNiSuplServerInfoStructT_data_v02},
+  {sizeof(qmiLocNiSuplNotifyVerifyStructT_v02), qmiLocNiSuplNotifyVerifyStructT_data_v02},
+  {sizeof(qmiLocNiUmtsCpCodedStringStructT_v02), qmiLocNiUmtsCpCodedStringStructT_data_v02},
+  {sizeof(qmiLocNiUmtsCpNotifyVerifyStructT_v02), qmiLocNiUmtsCpNotifyVerifyStructT_data_v02},
+  {sizeof(qmiLocNiVxServiceInteractionStructT_v02), qmiLocNiVxServiceInteractionStructT_data_v02},
+  {sizeof(qmiLocAssistanceServerUrlStructT_v02), qmiLocAssistanceServerUrlStructT_data_v02},
+  {sizeof(qmiLocTimeServerListStructT_v02), qmiLocTimeServerListStructT_data_v02},
+  {sizeof(qmiLocPredictedOrbitsAllowedSizesStructT_v02), qmiLocPredictedOrbitsAllowedSizesStructT_data_v02},
+  {sizeof(qmiLocPredictedOrbitsServerListStructT_v02), qmiLocPredictedOrbitsServerListStructT_data_v02},
+  {sizeof(qmiLocSensorControlConfigSamplingSpecStructT_v02), qmiLocSensorControlConfigSamplingSpecStructT_data_v02},
+  {sizeof(qmiLocSensorReadyStatusStructT_v02), qmiLocSensorReadyStatusStructT_data_v02},
+  {sizeof(qmiLocPredictedOrbitsDataValidityStructT_v02), qmiLocPredictedOrbitsDataValidityStructT_data_v02},
+  {sizeof(qmiLocAltitudeSrcInfoStructT_v02), qmiLocAltitudeSrcInfoStructT_data_v02},
+  {sizeof(qmiLocDeleteSvInfoStructT_v02), qmiLocDeleteSvInfoStructT_data_v02},
+  {sizeof(qmiLocWifiFixTimeStructT_v02), qmiLocWifiFixTimeStructT_data_v02},
+  {sizeof(qmiLocWifiFixPosStructT_v02), qmiLocWifiFixPosStructT_data_v02},
+  {sizeof(qmiLocWifiApInfoStructT_v02), qmiLocWifiApInfoStructT_data_v02},
+  {sizeof(qmiLoc3AxisSensorSampleStructT_v02), qmiLoc3AxisSensorSampleStructT_data_v02},
+  {sizeof(qmiLoc3AxisSensorSampleListStructT_v02), qmiLoc3AxisSensorSampleListStructT_data_v02},
+  {sizeof(qmiLocApnProfilesStructT_v02), qmiLocApnProfilesStructT_data_v02}
+};
+
+/* Message Table */
+static const qmi_idl_message_table_entry loc_message_table_v02[] = {
+  {sizeof(qmiLocGenRespMsgT_v02), qmiLocGenRespMsgT_data_v02},
+  {sizeof(qmiLocInformClientRevisionReqMsgT_v02), qmiLocInformClientRevisionReqMsgT_data_v02},
+  {sizeof(qmiLocRegEventsReqMsgT_v02), qmiLocRegEventsReqMsgT_data_v02},
+  {sizeof(qmiLocStartReqMsgT_v02), qmiLocStartReqMsgT_data_v02},
+  {sizeof(qmiLocStopReqMsgT_v02), qmiLocStopReqMsgT_data_v02},
+  {sizeof(qmiLocEventPositionReportIndMsgT_v02), qmiLocEventPositionReportIndMsgT_data_v02},
+  {sizeof(qmiLocEventGnssSvInfoIndMsgT_v02), qmiLocEventGnssSvInfoIndMsgT_data_v02},
+  {sizeof(qmiLocEventNmeaIndMsgT_v02), qmiLocEventNmeaIndMsgT_data_v02},
+  {sizeof(qmiLocEventNiNotifyVerifyReqIndMsgT_v02), qmiLocEventNiNotifyVerifyReqIndMsgT_data_v02},
+  {sizeof(qmiLocEventInjectTimeReqIndMsgT_v02), qmiLocEventInjectTimeReqIndMsgT_data_v02},
+  {sizeof(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02), qmiLocEventInjectPredictedOrbitsReqIndMsgT_data_v02},
+  {sizeof(qmiLocEventInjectPositionReqIndMsgT_v02), qmiLocEventInjectPositionReqIndMsgT_data_v02},
+  {sizeof(qmiLocEventEngineStateIndMsgT_v02), qmiLocEventEngineStateIndMsgT_data_v02},
+  {sizeof(qmiLocEventFixSessionStateIndMsgT_v02), qmiLocEventFixSessionStateIndMsgT_data_v02},
+  {sizeof(qmiLocEventWifiReqIndMsgT_v02), qmiLocEventWifiReqIndMsgT_data_v02},
+  {sizeof(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02), qmiLocEventSensorStreamingReadyStatusIndMsgT_data_v02},
+  {sizeof(qmiLocEventTimeSyncReqIndMsgT_v02), qmiLocEventTimeSyncReqIndMsgT_data_v02},
+  {sizeof(qmiLocEventSetSpiStreamingReportIndMsgT_v02), qmiLocEventSetSpiStreamingReportIndMsgT_data_v02},
+  {sizeof(qmiLocEventLocationServerConnectionReqIndMsgT_v02), qmiLocEventLocationServerConnectionReqIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetServiceRevisionIndMsgT_v02), qmiLocGetServiceRevisionIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetFixCriteriaIndMsgT_v02), qmiLocGetFixCriteriaIndMsgT_data_v02},
+  {sizeof(qmiLocNiUserRespReqMsgT_v02), qmiLocNiUserRespReqMsgT_data_v02},
+  {sizeof(qmiLocNiUserRespIndMsgT_v02), qmiLocNiUserRespIndMsgT_data_v02},
+  {sizeof(qmiLocInjectPredictedOrbitsDataReqMsgT_v02), qmiLocInjectPredictedOrbitsDataReqMsgT_data_v02},
+  {sizeof(qmiLocInjectPredictedOrbitsDataIndMsgT_v02), qmiLocInjectPredictedOrbitsDataIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02), qmiLocGetPredictedOrbitsDataSourceIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02), qmiLocGetPredictedOrbitsDataValidityIndMsgT_data_v02},
+  {sizeof(qmiLocInjectUtcTimeReqMsgT_v02), qmiLocInjectUtcTimeReqMsgT_data_v02},
+  {sizeof(qmiLocInjectUtcTimeIndMsgT_v02), qmiLocInjectUtcTimeIndMsgT_data_v02},
+  {sizeof(qmiLocInjectPositionReqMsgT_v02), qmiLocInjectPositionReqMsgT_data_v02},
+  {sizeof(qmiLocInjectPositionIndMsgT_v02), qmiLocInjectPositionIndMsgT_data_v02},
+  {sizeof(qmiLocSetEngineLockReqMsgT_v02), qmiLocSetEngineLockReqMsgT_data_v02},
+  {sizeof(qmiLocSetEngineLockIndMsgT_v02), qmiLocSetEngineLockIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetEngineLockIndMsgT_v02), qmiLocGetEngineLockIndMsgT_data_v02},
+  {sizeof(qmiLocSetSbasConfigReqMsgT_v02), qmiLocSetSbasConfigReqMsgT_data_v02},
+  {sizeof(qmiLocSetSbasConfigIndMsgT_v02), qmiLocSetSbasConfigIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetSbasConfigIndMsgT_v02), qmiLocGetSbasConfigIndMsgT_data_v02},
+  {sizeof(qmiLocSetNmeaTypesReqMsgT_v02), qmiLocSetNmeaTypesReqMsgT_data_v02},
+  {sizeof(qmiLocSetNmeaTypesIndMsgT_v02), qmiLocSetNmeaTypesIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetNmeaTypesIndMsgT_v02), qmiLocGetNmeaTypesIndMsgT_data_v02},
+  {sizeof(qmiLocSetLowPowerModeReqMsgT_v02), qmiLocSetLowPowerModeReqMsgT_data_v02},
+  {sizeof(qmiLocSetLowPowerModeIndMsgT_v02), qmiLocSetLowPowerModeIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetLowPowerModeIndMsgT_v02), qmiLocGetLowPowerModeIndMsgT_data_v02},
+  {sizeof(qmiLocSetServerReqMsgT_v02), qmiLocSetServerReqMsgT_data_v02},
+  {sizeof(qmiLocSetServerIndMsgT_v02), qmiLocSetServerIndMsgT_data_v02},
+  {sizeof(qmiLocGetServerReqMsgT_v02), qmiLocGetServerReqMsgT_data_v02},
+  {sizeof(qmiLocGetServerIndMsgT_v02), qmiLocGetServerIndMsgT_data_v02},
+  {sizeof(qmiLocDeleteAssistDataReqMsgT_v02), qmiLocDeleteAssistDataReqMsgT_data_v02},
+  {sizeof(qmiLocDeleteAssistDataIndMsgT_v02), qmiLocDeleteAssistDataIndMsgT_data_v02},
+  {sizeof(qmiLocSetXtraTSessionControlReqMsgT_v02), qmiLocSetXtraTSessionControlReqMsgT_data_v02},
+  {sizeof(qmiLocSetXtraTSessionControlIndMsgT_v02), qmiLocSetXtraTSessionControlIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetXtraTSessionControlIndMsgT_v02), qmiLocGetXtraTSessionControlIndMsgT_data_v02},
+  {sizeof(qmiLocInjectWifiPositionReqMsgT_v02), qmiLocInjectWifiPositionReqMsgT_data_v02},
+  {sizeof(qmiLocInjectWifiPositionIndMsgT_v02), qmiLocInjectWifiPositionIndMsgT_data_v02},
+  {sizeof(qmiLocNotifyWifiStatusReqMsgT_v02), qmiLocNotifyWifiStatusReqMsgT_data_v02},
+  {sizeof(qmiLocNotifyWifiStatusIndMsgT_v02), qmiLocNotifyWifiStatusIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetRegisteredEventsIndMsgT_v02), qmiLocGetRegisteredEventsIndMsgT_data_v02},
+  {sizeof(qmiLocSetOperationModeReqMsgT_v02), qmiLocSetOperationModeReqMsgT_data_v02},
+  {sizeof(qmiLocSetOperationModeIndMsgT_v02), qmiLocSetOperationModeIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetOperationModeIndMsgT_v02), qmiLocGetOperationModeIndMsgT_data_v02},
+  {sizeof(qmiLocSetSpiStatusReqMsgT_v02), qmiLocSetSpiStatusReqMsgT_data_v02},
+  {sizeof(qmiLocSetSpiStatusIndMsgT_v02), qmiLocSetSpiStatusIndMsgT_data_v02},
+  {sizeof(qmiLocInjectSensorDataReqMsgT_v02), qmiLocInjectSensorDataReqMsgT_data_v02},
+  {sizeof(qmiLocInjectSensorDataIndMsgT_v02), qmiLocInjectSensorDataIndMsgT_data_v02},
+  {sizeof(qmiLocInjectTimeSyncDataReqMsgT_v02), qmiLocInjectTimeSyncDataReqMsgT_data_v02},
+  {sizeof(qmiLocInjectTimeSyncDataIndMsgT_v02), qmiLocInjectTimeSyncDataIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetCradleMountConfigIndMsgT_v02), qmiLocGetCradleMountConfigIndMsgT_data_v02},
+  {sizeof(qmiLocSetCradleMountConfigReqMsgT_v02), qmiLocSetCradleMountConfigReqMsgT_data_v02},
+  {sizeof(qmiLocSetCradleMountConfigIndMsgT_v02), qmiLocSetCradleMountConfigIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetExternalPowerConfigIndMsgT_v02), qmiLocGetExternalPowerConfigIndMsgT_data_v02},
+  {sizeof(qmiLocSetExternalPowerConfigReqMsgT_v02), qmiLocSetExternalPowerConfigReqMsgT_data_v02},
+  {sizeof(qmiLocSetExternalPowerConfigIndMsgT_v02), qmiLocSetExternalPowerConfigIndMsgT_data_v02},
+  {sizeof(qmiLocInformLocationServerConnStatusReqMsgT_v02), qmiLocInformLocationServerConnStatusReqMsgT_data_v02},
+  {sizeof(qmiLocInformLocationServerConnStatusIndMsgT_v02), qmiLocInformLocationServerConnStatusIndMsgT_data_v02},
+  {sizeof(qmiLocSetProtocolConfigParametersReqMsgT_v02), qmiLocSetProtocolConfigParametersReqMsgT_data_v02},
+  {sizeof(qmiLocSetProtocolConfigParametersIndMsgT_v02), qmiLocSetProtocolConfigParametersIndMsgT_data_v02},
+  {sizeof(qmiLocGetProtocolConfigParametersReqMsgT_v02), qmiLocGetProtocolConfigParametersReqMsgT_data_v02},
+  {sizeof(qmiLocGetProtocolConfigParametersIndMsgT_v02), qmiLocGetProtocolConfigParametersIndMsgT_data_v02},
+  {sizeof(qmiLocSetSensorControlConfigReqMsgT_v02), qmiLocSetSensorControlConfigReqMsgT_data_v02},
+  {sizeof(qmiLocSetSensorControlConfigIndMsgT_v02), qmiLocSetSensorControlConfigIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetSensorControlConfigIndMsgT_v02), qmiLocGetSensorControlConfigIndMsgT_data_v02},
+  {sizeof(qmiLocSetSensorPropertiesReqMsgT_v02), qmiLocSetSensorPropertiesReqMsgT_data_v02},
+  {sizeof(qmiLocSetSensorPropertiesIndMsgT_v02), qmiLocSetSensorPropertiesIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetSensorPropertiesIndMsgT_v02), qmiLocGetSensorPropertiesIndMsgT_data_v02},
+  {sizeof(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02), qmiLocSetSensorPerformanceControlConfigReqMsgT_data_v02},
+  {sizeof(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02), qmiLocSetSensorPerformanceControlConfigIndMsgT_data_v02},
+  {0, 0},
+  {sizeof(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02), qmiLocGetSensorPerformanceControlConfigIndMsgT_data_v02},
+  {sizeof(qmiLocInjectSuplCertificateReqMsgT_v02), qmiLocInjectSuplCertificateReqMsgT_data_v02},
+  {sizeof(qmiLocInjectSuplCertificateIndMsgT_v02), qmiLocInjectSuplCertificateIndMsgT_data_v02},
+  {sizeof(qmiLocDeleteSuplCertificateReqMsgT_v02), qmiLocDeleteSuplCertificateReqMsgT_data_v02},
+  {sizeof(qmiLocDeleteSuplCertificateIndMsgT_v02), qmiLocDeleteSuplCertificateIndMsgT_data_v02},
+  {sizeof(qmiLocSetPositionEngineConfigParametersReqMsgT_v02), qmiLocSetPositionEngineConfigParametersReqMsgT_data_v02},
+  {sizeof(qmiLocSetPositionEngineConfigParametersIndMsgT_v02), qmiLocSetPositionEngineConfigParametersIndMsgT_data_v02},
+  {sizeof(qmiLocGetPositionEngineConfigParametersReqMsgT_v02), qmiLocGetPositionEngineConfigParametersReqMsgT_data_v02},
+  {sizeof(qmiLocGetPositionEngineConfigParametersIndMsgT_v02), qmiLocGetPositionEngineConfigParametersIndMsgT_data_v02}
+};
+
+/* Predefine the Type Table Object */
+static const qmi_idl_type_table_object loc_qmi_idl_type_table_object_v02;
+
+/*Referenced Tables Array*/
+static const qmi_idl_type_table_object *loc_qmi_idl_type_table_object_referenced_tables_v02[] =
+{&loc_qmi_idl_type_table_object_v02, &common_qmi_idl_type_table_object_v01};
+
+/*Type Table Object*/
+static const qmi_idl_type_table_object loc_qmi_idl_type_table_object_v02 = {
+  sizeof(loc_type_table_v02)/sizeof(qmi_idl_type_table_entry ),
+  sizeof(loc_message_table_v02)/sizeof(qmi_idl_message_table_entry),
+  1,
+  loc_type_table_v02,
+  loc_message_table_v02,
+  loc_qmi_idl_type_table_object_referenced_tables_v02
+};
+
+/*Arrays of service_message_table_entries for commands, responses and indications*/
+static const qmi_idl_service_message_table_entry loc_service_command_messages_v02[] = {
+  {QMI_LOC_INFORM_CLIENT_REVISION_REQ_V02, TYPE16(0, 1), 7},
+  {QMI_LOC_REG_EVENTS_REQ_V02, TYPE16(0, 2), 11},
+  {QMI_LOC_START_REQ_V02, TYPE16(0, 3), 32},
+  {QMI_LOC_STOP_REQ_V02, TYPE16(0, 4), 4},
+  {QMI_LOC_GET_SERVICE_REVISION_REQ_V02, TYPE16(0, 19), 0},
+  {QMI_LOC_GET_FIX_CRITERIA_REQ_V02, TYPE16(0, 21), 0},
+  {QMI_LOC_NI_USER_RESPONSE_REQ_V02, TYPE16(0, 23), 1075},
+  {QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02, TYPE16(0, 25), 1053},
+  {QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02, TYPE16(0, 27), 0},
+  {QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_REQ_V02, TYPE16(0, 29), 0},
+  {QMI_LOC_INJECT_UTC_TIME_REQ_V02, TYPE16(0, 31), 18},
+  {QMI_LOC_INJECT_POSITION_REQ_V02, TYPE16(0, 33), 112},
+  {QMI_LOC_SET_ENGINE_LOCK_REQ_V02, TYPE16(0, 35), 7},
+  {QMI_LOC_GET_ENGINE_LOCK_REQ_V02, TYPE16(0, 37), 0},
+  {QMI_LOC_SET_SBAS_CONFIG_REQ_V02, TYPE16(0, 39), 4},
+  {QMI_LOC_GET_SBAS_CONFIG_REQ_V02, TYPE16(0, 41), 0},
+  {QMI_LOC_SET_NMEA_TYPES_REQ_V02, TYPE16(0, 43), 7},
+  {QMI_LOC_GET_NMEA_TYPES_REQ_V02, TYPE16(0, 45), 0},
+  {QMI_LOC_SET_LOW_POWER_MODE_REQ_V02, TYPE16(0, 47), 4},
+  {QMI_LOC_GET_LOW_POWER_MODE_REQ_V02, TYPE16(0, 49), 0},
+  {QMI_LOC_SET_SERVER_REQ_V02, TYPE16(0, 51), 297},
+  {QMI_LOC_GET_SERVER_REQ_V02, TYPE16(0, 53), 11},
+  {QMI_LOC_DELETE_ASSIST_DATA_REQ_V02, TYPE16(0, 55), 929},
+  {QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02, TYPE16(0, 57), 4},
+  {QMI_LOC_GET_XTRA_T_SESSION_CONTROL_REQ_V02, TYPE16(0, 59), 0},
+  {QMI_LOC_INJECT_WIFI_POSITION_REQ_V02, TYPE16(0, 61), 694},
+  {QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02, TYPE16(0, 63), 7},
+  {QMI_LOC_GET_REGISTERED_EVENTS_REQ_V02, TYPE16(0, 65), 0},
+  {QMI_LOC_SET_OPERATION_MODE_REQ_V02, TYPE16(0, 67), 7},
+  {QMI_LOC_GET_OPERATION_MODE_REQ_V02, TYPE16(0, 69), 0},
+  {QMI_LOC_SET_SPI_STATUS_REQ_V02, TYPE16(0, 71), 8},
+  {QMI_LOC_INJECT_SENSOR_DATA_REQ_V02, TYPE16(0, 73), 1425},
+  {QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02, TYPE16(0, 75), 21},
+  {QMI_LOC_SET_CRADLE_MOUNT_CONFIG_REQ_V02, TYPE16(0, 79), 11},
+  {QMI_LOC_GET_CRADLE_MOUNT_CONFIG_REQ_V02, TYPE16(0, 77), 0},
+  {QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02, TYPE16(0, 83), 7},
+  {QMI_LOC_GET_EXTERNAL_POWER_CONFIG_REQ_V02, TYPE16(0, 81), 0},
+  {QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02, TYPE16(0, 85), 129},
+  {QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02, TYPE16(0, 87), 18},
+  {QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02, TYPE16(0, 89), 11},
+  {QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02, TYPE16(0, 91), 7},
+  {QMI_LOC_GET_SENSOR_CONTROL_CONFIG_REQ_V02, TYPE16(0, 93), 0},
+  {QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02, TYPE16(0, 95), 7},
+  {QMI_LOC_GET_SENSOR_PROPERTIES_REQ_V02, TYPE16(0, 97), 0},
+  {QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02, TYPE16(0, 99), 21},
+  {QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02, TYPE16(0, 101), 0},
+  {QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02, TYPE16(0, 103), 2009},
+  {QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02, TYPE16(0, 105), 4},
+  {QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02, TYPE16(0, 107), 12},
+  {QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02, TYPE16(0, 109), 7}
+};
+
+static const qmi_idl_service_message_table_entry loc_service_response_messages_v02[] = {
+  {QMI_LOC_INFORM_CLIENT_REVISION_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_REG_EVENTS_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_START_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_STOP_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_SERVICE_REVISION_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_FIX_CRITERIA_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_NI_USER_RESPONSE_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_INJECT_UTC_TIME_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_INJECT_POSITION_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_ENGINE_LOCK_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_ENGINE_LOCK_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_SBAS_CONFIG_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_SBAS_CONFIG_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_NMEA_TYPES_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_NMEA_TYPES_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_LOW_POWER_MODE_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_LOW_POWER_MODE_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_SERVER_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_SERVER_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_DELETE_ASSIST_DATA_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_XTRA_T_SESSION_CONTROL_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_XTRA_T_SESSION_CONTROL_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_INJECT_WIFI_POSITION_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_NOTIFY_WIFI_STATUS_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_REGISTERED_EVENTS_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_OPERATION_MODE_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_OPERATION_MODE_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_SPI_STATUS_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_INJECT_SENSOR_DATA_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_INJECT_TIME_SYNC_DATA_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_CRADLE_MOUNT_CONFIG_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_CRADLE_MOUNT_CONFIG_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_EXTERNAL_POWER_CONFIG_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_EXTERNAL_POWER_CONFIG_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_SENSOR_CONTROL_CONFIG_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_SENSOR_CONTROL_CONFIG_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_SENSOR_PROPERTIES_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_SENSOR_PROPERTIES_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_INJECT_SUPL_CERTIFICATE_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_DELETE_SUPL_CERTIFICATE_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02, TYPE16(0, 0), 7},
+  {QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02, TYPE16(0, 0), 7}
+};
+
+static const qmi_idl_service_message_table_entry loc_service_indication_messages_v02[] = {
+  {QMI_LOC_EVENT_POSITION_REPORT_IND_V02, TYPE16(0, 5), 224},
+  {QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02, TYPE16(0, 6), 2248},
+  {QMI_LOC_EVENT_NMEA_IND_V02, TYPE16(0, 7), 203},
+  {QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02, TYPE16(0, 8), 1068},
+  {QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02, TYPE16(0, 9), 776},
+  {QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02, TYPE16(0, 10), 783},
+  {QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02, TYPE16(0, 11), 40},
+  {QMI_LOC_EVENT_ENGINE_STATE_IND_V02, TYPE16(0, 12), 7},
+  {QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02, TYPE16(0, 13), 11},
+  {QMI_LOC_EVENT_WIFI_REQ_IND_V02, TYPE16(0, 14), 12},
+  {QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02, TYPE16(0, 15), 16},
+  {QMI_LOC_EVENT_TIME_SYNC_REQ_IND_V02, TYPE16(0, 16), 7},
+  {QMI_LOC_EVENT_SET_SPI_STREAMING_REPORT_IND_V02, TYPE16(0, 17), 4},
+  {QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02, TYPE16(0, 18), 21},
+  {QMI_LOC_GET_SERVICE_REVISION_IND_V02, TYPE16(0, 20), 14},
+  {QMI_LOC_GET_FIX_CRITERIA_IND_V02, TYPE16(0, 22), 28},
+  {QMI_LOC_NI_USER_RESPONSE_IND_V02, TYPE16(0, 24), 7},
+  {QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02, TYPE16(0, 26), 12},
+  {QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02, TYPE16(0, 28), 790},
+  {QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_IND_V02, TYPE16(0, 30), 20},
+  {QMI_LOC_INJECT_UTC_TIME_IND_V02, TYPE16(0, 32), 7},
+  {QMI_LOC_INJECT_POSITION_IND_V02, TYPE16(0, 34), 7},
+  {QMI_LOC_SET_ENGINE_LOCK_IND_V02, TYPE16(0, 36), 7},
+  {QMI_LOC_GET_ENGINE_LOCK_IND_V02, TYPE16(0, 38), 14},
+  {QMI_LOC_SET_SBAS_CONFIG_IND_V02, TYPE16(0, 40), 7},
+  {QMI_LOC_GET_SBAS_CONFIG_IND_V02, TYPE16(0, 42), 11},
+  {QMI_LOC_SET_NMEA_TYPES_IND_V02, TYPE16(0, 44), 7},
+  {QMI_LOC_GET_NMEA_TYPES_IND_V02, TYPE16(0, 46), 14},
+  {QMI_LOC_SET_LOW_POWER_MODE_IND_V02, TYPE16(0, 48), 7},
+  {QMI_LOC_GET_LOW_POWER_MODE_IND_V02, TYPE16(0, 50), 11},
+  {QMI_LOC_SET_SERVER_IND_V02, TYPE16(0, 52), 7},
+  {QMI_LOC_GET_SERVER_IND_V02, TYPE16(0, 54), 304},
+  {QMI_LOC_DELETE_ASSIST_DATA_IND_V02, TYPE16(0, 56), 7},
+  {QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02, TYPE16(0, 58), 7},
+  {QMI_LOC_GET_XTRA_T_SESSION_CONTROL_IND_V02, TYPE16(0, 60), 11},
+  {QMI_LOC_INJECT_WIFI_POSITION_IND_V02, TYPE16(0, 62), 7},
+  {QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02, TYPE16(0, 64), 7},
+  {QMI_LOC_GET_REGISTERED_EVENTS_IND_V02, TYPE16(0, 66), 18},
+  {QMI_LOC_SET_OPERATION_MODE_IND_V02, TYPE16(0, 68), 7},
+  {QMI_LOC_GET_OPERATION_MODE_IND_V02, TYPE16(0, 70), 14},
+  {QMI_LOC_SET_SPI_STATUS_IND_V02, TYPE16(0, 72), 7},
+  {QMI_LOC_INJECT_SENSOR_DATA_IND_V02, TYPE16(0, 74), 22},
+  {QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02, TYPE16(0, 76), 7},
+  {QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02, TYPE16(0, 80), 7},
+  {QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02, TYPE16(0, 78), 18},
+  {QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02, TYPE16(0, 84), 7},
+  {QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02, TYPE16(0, 82), 14},
+  {QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02, TYPE16(0, 86), 7},
+  {QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02, TYPE16(0, 88), 18},
+  {QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02, TYPE16(0, 90), 25},
+  {QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02, TYPE16(0, 92), 7},
+  {QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02, TYPE16(0, 94), 14},
+  {QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02, TYPE16(0, 96), 7},
+  {QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02, TYPE16(0, 98), 14},
+  {QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02, TYPE16(0, 100), 14},
+  {QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02, TYPE16(0, 102), 28},
+  {QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02, TYPE16(0, 104), 7},
+  {QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02, TYPE16(0, 106), 7},
+  {QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02, TYPE16(0, 108), 14},
+  {QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02, TYPE16(0, 110), 19}
+};
+
+/*Service Object*/
+const struct qmi_idl_service_object loc_qmi_idl_service_object_v02 = {
+  0x02,
+  0x02,
+  16,
+  2248,
+  { sizeof(loc_service_command_messages_v02)/sizeof(qmi_idl_service_message_table_entry),
+    sizeof(loc_service_response_messages_v02)/sizeof(qmi_idl_service_message_table_entry),
+    sizeof(loc_service_indication_messages_v02)/sizeof(qmi_idl_service_message_table_entry) },
+  { loc_service_command_messages_v02, loc_service_response_messages_v02, loc_service_indication_messages_v02},
+  &loc_qmi_idl_type_table_object_v02
+};
+
+/* Service Object Accessor */
+qmi_idl_service_object_type loc_get_service_object_internal_v02
+ ( int32_t idl_maj_version, int32_t idl_min_version, int32_t library_version ){
+  if ( LOC_V02_IDL_MAJOR_VERS != idl_maj_version || LOC_V02_IDL_MINOR_VERS != idl_min_version
+       || LOC_V02_IDL_TOOL_VERS != library_version)
+  {
+    return NULL;
+  }
+  return (qmi_idl_service_object_type)&loc_qmi_idl_service_object_v02;
+}
+
diff --git a/loc_api/loc_api_v02/location_service_v02.h b/loc_api/loc_api_v02/location_service_v02.h
new file mode 100755
index 0000000..2f28814
--- /dev/null
+++ b/loc_api/loc_api_v02/location_service_v02.h
@@ -0,0 +1,5914 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+#ifndef LOC_SERVICE_H
+#define LOC_SERVICE_H
+/**
+  @file location_service_v02.h
+
+  @brief This is the public header file which defines the loc service Data structures.
+
+  This header file defines the types and structures that were defined in
+  loc. It contains the constant values defined, enums, structures,
+  messages, and service message IDs (in that order) Structures that were
+  defined in the IDL as messages contain mandatory elements, optional
+  elements, a combination of mandatory and optional elements (mandatory
+  always come before optionals in the structure), or nothing (null message)
+
+  An optional element in a message is preceded by a uint8_t value that must be
+  set to true if the element is going to be included. When decoding a received
+  message, the uint8_t values will be set to true or false by the decode
+  routine, and should be checked before accessing the values that they
+  correspond to.
+
+  Variable sized arrays are defined as static sized arrays with an unsigned
+  integer (32 bit) preceding it that must be set to the number of elements
+  in the array that are valid. For Example:
+
+  uint32_t test_opaque_len;
+  uint8_t test_opaque[16];
+
+  If only 4 elements are added to test_opaque[] then test_opaque_len must be
+  set to 4 before sending the message.  When decoding, the _len value is set
+  by the decode routine and should be checked so that the correct number of
+  elements in the array will be accessed.
+
+*/
+
+/** @defgroup loc_qmi_consts Constant values defined in the IDL */
+/** @defgroup loc_qmi_msg_ids Constant values for QMI message IDs */
+/** @defgroup loc_qmi_enums Enumerated types used in QMI messages */
+/** @defgroup loc_qmi_messages Structures sent as QMI messages */
+/** @defgroup loc_qmi_aggregates Aggregate types used in QMI messages */
+/** @defgroup loc_qmi_accessor Accessor for QMI service object */
+/** @defgroup loc_qmi_version Constant values for versioning information */
+
+#include <stdint.h>
+#include "qmi_idl_lib.h"
+#include "common_v01.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @addtogroup loc_qmi_version
+    @{
+  */
+/** Major Version Number of the IDL used to generate this file */
+#define LOC_V02_IDL_MAJOR_VERS 0x02
+/** Revision Number of the IDL used to generate this file */
+#define LOC_V02_IDL_MINOR_VERS 0x04
+/** Major Version Number of the qmi_idl_compiler used to generate this file */
+#define LOC_V02_IDL_TOOL_VERS 0x02
+/** Maximum Defined Message ID */
+#define LOC_V02_MAX_MESSAGE_ID 0x005F;
+/**
+    @}
+  */
+
+
+/** @addtogroup loc_qmi_consts
+    @{
+  */
+
+/**  Maximum number of satellites in the satellite report.  */
+#define QMI_LOC_SV_INFO_LIST_MAX_SIZE_V02 80
+
+/**  Maximum NMEA string length.  */
+#define QMI_LOC_NMEA_STRING_MAX_LENGTH_V02 200
+
+/**  Maximum length of the requestor ID string.  */
+#define QMI_LOC_NI_MAX_REQUESTOR_ID_LENGTH_V02 200
+
+/**  Session ID byte length.  */
+#define QMI_LOC_NI_SUPL_SLP_SESSION_ID_BYTE_LENGTH_V02 4
+
+/**  Maximum client name length allowed.  */
+#define QMI_LOC_NI_MAX_CLIENT_NAME_LENGTH_V02 64
+
+/**  Maximum URL length accepted by the location engine.  */
+#define QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02 255
+
+/**  IPV6 address length in bytes.  */
+#define QMI_LOC_IPV6_ADDR_LENGTH_V02 8
+
+/**  SUPL hash length.  */
+#define QMI_LOC_NI_SUPL_HASH_LENGTH_V02 8
+
+/**  Maximum client address length allowed.  */
+#define QMI_LOC_NI_MAX_EXT_CLIENT_ADDRESS_V02 20
+
+/**  Maximum codeword length allowed.  */
+#define QMI_LOC_NI_CODEWORD_MAX_LENGTH_V02 20
+
+/**  Maximum number of NTP Servers sent out with this event. */
+#define QMI_LOC_MAX_NTP_SERVERS_V02 3
+
+/**  Maximum number of predicted orbits servers supported in the location
+     engine.  */
+#define QMI_LOC_MAX_PREDICTED_ORBITS_SERVERS_V02 3
+
+/**  Maximum part length that can be injected. The client should
+     also look at the maxPartSize field in the predicted orbits injection
+     request indication and pick the minimum of the two.   */
+#define QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02 1024
+
+/**  Maximum length of the delete SV information list  */
+#define QMI_LOC_DELETE_MAX_SV_INFO_LENGTH_V02 128
+
+/**  MAC address length in bytes.  */
+#define QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02 6
+
+/**  Maximum number of APs that the sender can report.  */
+#define QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02 50
+
+/**  Maximum number of samples that can be injected in a TLV.  */
+#define QMI_LOC_SENSOR_DATA_MAX_SAMPLES_V02 50
+
+/**  Maximum APN string length allowed.  */
+#define QMI_LOC_MAX_APN_NAME_LENGTH_V02 100
+
+/**  Maximum APN profiles supported. */
+#define QMI_LOC_MAX_APN_PROFILES_V02 6
+
+/**  Maximum length of SUPL CERT. */
+#define QMI_LOC_MAX_SUPL_CERT_LENGTH_V02 2000
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Response Message; Generic response definition. This message is used to tell
+                    clients whether their message was accepted for further
+                    processing or rejected. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}qmiLocGenRespMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Informs the service of the minor revision of the interface
+                    definition that the control point implements. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Revision */
+  uint32_t revision;
+  /**<   Revision that the control point is using. \n
+       - Type: Unsigned integer   */
+}qmiLocInformClientRevisionReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+typedef uint64_t qmiLocEventRegMaskT_v02;
+#define QMI_LOC_EVENT_MASK_POSITION_REPORT_V02 ((qmiLocEventRegMaskT_v02)0x00000001) /**<  The control point must enable this mask to receive position report
+       event indications.  */
+#define QMI_LOC_EVENT_MASK_GNSS_SV_INFO_V02 ((qmiLocEventRegMaskT_v02)0x00000002) /**<  The control point must enable this mask to receive satellite report
+       event indications. These reports are sent at a 1 Hz rate.  */
+#define QMI_LOC_EVENT_MASK_NMEA_V02 ((qmiLocEventRegMaskT_v02)0x00000004) /**<  The control point must enable this mask to receive NMEA reports for
+       position and satellites in view. The report is at a 1 Hz rate.  */
+#define QMI_LOC_EVENT_MASK_NI_NOTIFY_VERIFY_REQ_V02 ((qmiLocEventRegMaskT_v02)0x00000008) /**<  The control point must enable this mask to receive NI notify verify request
+       event indications.  */
+#define QMI_LOC_EVENT_MASK_INJECT_TIME_REQ_V02 ((qmiLocEventRegMaskT_v02)0x00000010) /**<  The control point must enable this mask to receive time injection request
+       event indications.  */
+#define QMI_LOC_EVENT_MASK_INJECT_PREDICTED_ORBITS_REQ_V02 ((qmiLocEventRegMaskT_v02)0x00000020) /**<  The control point must enable this mask to receive predicted orbits request
+       event indications.  */
+#define QMI_LOC_EVENT_MASK_INJECT_POSITION_REQ_V02 ((qmiLocEventRegMaskT_v02)0x00000040) /**<  The control point must enable this mask to receive position injection request
+       event indications.  */
+#define QMI_LOC_EVENT_MASK_ENGINE_STATE_V02 ((qmiLocEventRegMaskT_v02)0x00000080) /**<  The control point must enable this mask to receive engine state report
+       event indications.  */
+#define QMI_LOC_EVENT_MASK_FIX_SESSION_STATE_V02 ((qmiLocEventRegMaskT_v02)0x00000100) /**<  The control point must enable this mask to receive fix session status report
+       event indications.  */
+#define QMI_LOC_EVENT_MASK_WIFI_REQ_V02 ((qmiLocEventRegMaskT_v02)0x00000200) /**<  The control point must enable this mask to receive WiFi position request
+       event indications.  */
+#define QMI_LOC_EVENT_MASK_SENSOR_STREAMING_READY_STATUS_V02 ((qmiLocEventRegMaskT_v02)0x00000400) /**<  The control point must enable this mask to receive notifications from the
+       GPS engine indicating its readiness to accept data from the
+       sensors (accelerometer, gyrometer, etc.).  */
+#define QMI_LOC_EVENT_MASK_TIME_SYNC_REQ_V02 ((qmiLocEventRegMaskT_v02)0x00000800) /**<  The control point must enable this mask to receive time-sync requests from
+       the GPS engine. Time sync enables the GPS engine to synchronize
+       its clock with the sensor processor's clock.  */
+#define QMI_LOC_EVENT_MASK_SET_SPI_STREAMING_REPORT_V02 ((qmiLocEventRegMaskT_v02)0x00001000) /**<  The control point must enable this mask to receive Stationary Position
+     Indicator (SPI) streaming report indications.  */
+#define QMI_LOC_EVENT_MASK_LOCATION_SERVER_CONNECTION_REQ_V02 ((qmiLocEventRegMaskT_v02)0x00002000) /**<  The control point must enable this mask to receive location server requests.
+     These requests are generated when the service wishes to establish a
+     connection with a location server. */
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Used by the control point to register for events from the
+                    location subsystem.  */
+typedef struct {
+
+  /* Mandatory */
+  /*  Event Registration Mask */
+  qmiLocEventRegMaskT_v02 eventRegMask;
+  /**<   Specifies the events that the control point is interested in receiving.
+       Refer to the definition of the following bitmasks: \n
+
+       - 0x00000001 -- POSITION_REPORT \n
+       - 0x00000002 -- GNSS_SV_INFO \n
+       - 0x00000004 -- NMEA \n
+       - 0x00000008 -- NI_NOTIFY_VERIFY_REQ \n
+       - 0x00000010 -- INJECT_TIME_REQ \n
+       - 0x00000020 -- INJECT_PREDICTED_ORBITS_REQ \n
+       - 0x00000040 -- INJECT_POSITION_REQ \n
+       - 0x00000080 -- ENGINE_STATE \n
+       - 0x00000100 -- FIX_SESSION_STATE \n
+       - 0x00000200 -- WIFI_REQ \n
+       - 0x00000400 -- SENSOR_STREAMING_READY_STATUS \n
+       - 0x00000800 -- TIME_SYNC_REQ \n
+       - 0x00001000 -- SET_SPI_STREAMING_REPORT \n
+       - 0x00002000 -- LOCATION_SERVER_CONNECTION_REQ
+
+       Multiple events can be registered by ORing the individual masks and
+       sending them in this TLV. All unused bits in this mask must be set to 0.
+   */
+}qmiLocRegEventsReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCFIXRECURRENCEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_RECURRENCE_PERIODIC_V02 = 1, /**<  Request periodic position fixes.
+ Request a single position fix.  */
+  eQMI_LOC_RECURRENCE_SINGLE_V02 = 2,
+  QMILOCFIXRECURRENCEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocFixRecurrenceEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCACCURACYLEVELENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_ACCURACY_LOW_V02 = 1, /**<  Low accuracy.  */
+  eQMI_LOC_ACCURACY_MED_V02 = 2, /**<  Medium accuracy.
+ High accuracy.  */
+  eQMI_LOC_ACCURACY_HIGH_V02 = 3,
+  QMILOCACCURACYLEVELENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocAccuracyLevelEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCINTERMEDIATEREPORTSTATEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_INTERMEDIATE_REPORTS_ON_V02 = 1, /**<  Intermediate reports are turned on.
+ Intermediate reports are turned off.   */
+  eQMI_LOC_INTERMEDIATE_REPORTS_OFF_V02 = 2,
+  QMILOCINTERMEDIATEREPORTSTATEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocIntermediateReportStateEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; The control point sends this message when it wants to
+                    initiate a GPS session. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Session ID  */
+  uint8_t sessionId;
+  /**<   ID of the session as identified by the control point. The session ID
+       is reported back in the position reports. The control point must
+       specify the same session ID in the QMI_LOC_STOP_REQ message. \n
+       - Type: Unsigned integer \n
+       - Range: 0 to 255
+   */
+
+  /* Optional */
+  /*  Recurrence Type */
+  uint8_t fixRecurrence_valid;  /**< Must be set to true if fixRecurrence is being passed */
+  qmiLocFixRecurrenceEnumT_v02 fixRecurrence;
+  /**<   Specifies the type of session in which the control point is interested.
+       If this TLV is not specified, recurrence defaults to SINGLE.
+
+       Valid values: \n
+         - 0x00000001 -- Request periodic fixes \n
+         - 0x00000002 -- Request a single fix
+   */
+
+  /* Optional */
+  /*  Horizontal Accuracy */
+  uint8_t horizontalAccuracyLevel_valid;  /**< Must be set to true if horizontalAccuracyLevel is being passed */
+  qmiLocAccuracyLevelEnumT_v02 horizontalAccuracyLevel;
+  /**<   Specifies the horizontal accuracy level required by the control point.
+       If not specified, accuracy defaults to LOW.
+
+       Valid values: \n
+         - 0x00000001 -- LOW: Client requires low horizontal accuracy.\n
+         - 0x00000002 -- MED: Client requires medium horizontal accuracy.\n
+         - 0x00000003 -- HIGH: Client requires high horizontal accuracy.
+    */
+
+  /* Optional */
+  /*  Enable/Disable Intermediate Reports */
+  uint8_t intermediateReportState_valid;  /**< Must be set to true if intermediateReportState is being passed */
+  qmiLocIntermediateReportStateEnumT_v02 intermediateReportState;
+  /**<   Specifies if the control point is interested in receiving intermediate
+       reports. The control point must explicitly set this field to OFF if it
+       does not wish to receive intermediate position reports. Intermediate
+       position reports are generated at 1 Hz and are ON by default. If
+       intermediate reports are turned ON, the client receives position reports
+       even if the accuracy criteria are not met. The status in such a position
+       report is set to IN_PROGRESS in order for the control point to identify
+       intermediate reports.
+
+       Valid values: \n
+         - 0x00000001 -- ON: Client is interested in receiving intermediate reports \n
+         - 0x00000002 -- OFF: Client is not interested in receiving intermediate reports
+   */
+
+  /* Optional */
+  /*  Minimum Interval Between Position Reports */
+  uint8_t minInterval_valid;  /**< Must be set to true if minInterval is being passed */
+  uint32_t minInterval;
+  /**<   Minimum time interval, specified by the control point, that must elapse between
+       position reports. \n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds \n
+       - Default: 1000 ms
+   */
+}qmiLocStartReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; The control point sends this message when it wants to
+                    stop a GPS session. */
+typedef struct {
+
+  /* Mandatory */
+  /*   Session ID */
+  uint8_t sessionId;
+  /**<   ID of the session that was specified in the Start request
+       (QMI_LOC_START_REQ).\n
+       - Type: Unsigned integer \n
+       - Range: 0 to 255  */
+}qmiLocStopReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+typedef uint32_t qmiLocPosTechMaskT_v02;
+#define QMI_LOC_POS_TECH_MASK_SATELLITE_V02 ((qmiLocPosTechMaskT_v02)0x00000001) /**<  Satellites were used to generate the fix.  */
+#define QMI_LOC_POS_TECH_MASK_CELLID_V02 ((qmiLocPosTechMaskT_v02)0x00000002) /**<  Cell towers were used to generate the fix.  */
+#define QMI_LOC_POS_TECH_MASK_WIFI_V02 ((qmiLocPosTechMaskT_v02)0x00000004) /**<  WiFi access points were used to generate the fix.  */
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCSESSIONSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_SESS_STATUS_SUCCESS_V02 = 0, /**<  Session was successful.       */
+  eQMI_LOC_SESS_STATUS_IN_PROGRESS_V02 = 1, /**<  Session still in progress. Further position reports will be
+       generated until either the fix criteria specified by the client
+       are met or the client response timeout occurs.    */
+  eQMI_LOC_SESS_STATUS_GENERAL_FAILURE_V02 = 2, /**<  Session failed.   */
+  eQMI_LOC_SESS_STATUS_TIMEOUT_V02 = 3, /**<  Fix request failed because the session timed out.       */
+  eQMI_LOC_SESS_STATUS_USER_END_V02 = 4, /**<  Fix request failed because the session was ended by the user.       */
+  eQMI_LOC_SESS_STATUS_BAD_PARAMETER_V02 = 5, /**<  Fix request failed due to bad parameters in the request.  */
+  eQMI_LOC_SESS_STATUS_PHONE_OFFLINE_V02 = 6, /**<  Fix request failed because the phone is offline.
+ Fix request failed because the engine is locked.  */
+  eQMI_LOC_SESS_STATUS_ENGINE_LOCKED_V02 = 7,
+  QMILOCSESSIONSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocSessionStatusEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint16_t gpsWeek;
+  /**<   Current GPS week as calculated from midnight, Jan. 6, 1980. \n
+       - Type: Unsigned integer \n
+       - Units: Weeks  */
+
+  uint32_t gpsTimeOfWeekMs;
+  /**<   Amount of time into the current GPS week. \n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds  */
+}qmiLocGPSTimeStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  float PDOP;
+  /**<   Position dilution of precision.\n
+       - Type: Floating point \n
+       - Range: 1 (highest accuracy) to 50 (lowest accuracy)\n
+       - PDOP = square root of (HDOP^2 + VDOP^2)        */
+
+  float HDOP;
+  /**<   Horizontal dilution of precision.\n
+       - Type: Floating point \n
+       - Range: 1 (highest accuracy) to 50 (lowest accuracy)  */
+
+  float VDOP;
+  /**<   Vertical dilution of precision.\n
+       - Type: Floating point. \n
+       - Range: 1 (highest accuracy) to 50 (lowest accuracy)  */
+}qmiLocDOPStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+typedef uint32_t qmiLocSensorUsageMaskT_v02;
+#define QMI_LOC_SENSOR_MASK_USED_ACCEL_V02 ((qmiLocSensorUsageMaskT_v02)0x00000001) /**<  Bitmask to specify whether an accelerometer was used.  */
+#define QMI_LOC_SENSOR_MASK_USED_GYRO_V02 ((qmiLocSensorUsageMaskT_v02)0x00000002) /**<  Bitmask to specify whether a gyrometer was used.  */
+typedef uint32_t qmiLocSensorAidedMaskT_v02;
+#define QMI_LOC_SENSOR_AIDED_MASK_HEADING_V02 ((qmiLocSensorAidedMaskT_v02)0x00000001) /**<  Bitmask to specify whether a sensor was used to calculate heading.  */
+#define QMI_LOC_SENSOR_AIDED_MASK_SPEED_V02 ((qmiLocSensorAidedMaskT_v02)0x00000002) /**<  Bitmask to specify whether a sensor was used to calculate speed.  */
+#define QMI_LOC_SENSOR_AIDED_MASK_POSITION_V02 ((qmiLocSensorAidedMaskT_v02)0x00000004) /**<  Bitmask to specify whether a sensor was used to calculate position.  */
+#define QMI_LOC_SENSOR_AIDED_MASK_VELOCITY_V02 ((qmiLocSensorAidedMaskT_v02)0x00000008) /**<  Bitmask to specify whether a sensor was used to calculate velocity.  */
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  qmiLocSensorUsageMaskT_v02 usageMask;
+  /**<   Specifies which sensors are used.
+
+       Valid bitmasks are specified by the following constants: \n
+         - 0x00000001 -- SENSOR_USED_ACCEL \n
+         - 0x00000002 -- SENSOR_USED_GYRO  */
+
+  qmiLocSensorAidedMaskT_v02 aidingIndicatorMask;
+  /**<   Specifies which results are aided by sensors.
+
+       Valid bitmasks are specified by the following constants: \n
+         - 0x00000001 -- AIDED_HEADING \n
+         - 0x00000002 -- AIDED_SPEED \n
+         - 0x00000004 -- AIDED_POSITION \n
+         - 0x00000008 -- AIDED_VELOCITY  */
+}qmiLocSensorUsageIndicatorStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCTIMESOURCEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_TIME_SRC_INVALID_V02 = 0, /**<  Invalid time.  */
+  eQMI_LOC_TIME_SRC_NETWORK_TIME_TRANSFER_V02 = 1, /**<  Time is set by the 1x system.  */
+  eQMI_LOC_TIME_SRC_NETWORK_TIME_TAGGING_V02 = 2, /**<  Time is set by WCDMA/GSM time tagging (i.e.,
+       associating network time with GPS time).  */
+  eQMI_LOC_TIME_SRC_EXTERNAL_INPUT_V02 = 3, /**<  Time is set by an external injection.  */
+  eQMI_LOC_TIME_SRC_TOW_DECODE_V02 = 4, /**<  Time is set after decoding over-the-air GPS navigation data
+       from one GPS satellite.  */
+  eQMI_LOC_TIME_SRC_TOW_CONFIRMED_V02 = 5, /**<  Time is set after decoding over-the-air GPS navigation data
+       from multiple satellites.  */
+  eQMI_LOC_TIME_SRC_TOW_AND_WEEK_CONFIRMED_V02 = 6, /**<  Both time of the week and the GPS week number are known.  */
+  eQMI_LOC_TIME_SRC_NAV_SOLUTION_V02 = 7, /**<  Time is set by the position engine after the fix is obtained.  */
+  eQMI_LOC_TIME_SRC_SOLVE_FOR_TIME_V02 = 8, /**<  Time is set by the position engine after performing SFT.
+       This is done when the clock time uncertainty is large.  */
+  eQMI_LOC_TIME_SRC_GLO_TOW_DECODE_V02 = 9, /**<  Time is set after decoding GLO satellites  */
+  eQMI_LOC_TIME_SRC_TIME_TRANSFORM_V02 = 10, /**<  Time is set after transforming the GPS to GLO time  */
+  eQMI_LOC_TIME_SRC_WCDMA_SLEEP_TIME_TAGGING_V02 = 11, /**<  Time is set by the sleep time tag provided by the WCDMA network  */
+  eQMI_LOC_TIME_SRC_GSM_SLEEP_TIME_TAGGING_V02 = 12, /**<  Time is set by the sleep time tag provided by the GSM network
+ Source of the time is unknown  */
+  eQMI_LOC_TIME_SRC_UNKNOWN_V02 = 13,
+  QMILOCTIMESOURCEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocTimeSourceEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCRELIABILITYENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_RELIABILITY_NOT_SET_V02 = 0, /**<  Location reliability is not set  */
+  eQMI_LOC_RELIABILITY_VERY_LOW_V02 = 1, /**<  Location reliability is very low; use it at your own risk  */
+  eQMI_LOC_RELIABILITY_LOW_V02 = 2, /**<  Location reliability is low; little or no cross-checking is possible  */
+  eQMI_LOC_RELIABILITY_MEDIUM_V02 = 3, /**<  Location reliability is medium; limited cross-check passed
+ Location reliability is high; strong cross-check passed  */
+  eQMI_LOC_RELIABILITY_HIGH_V02 = 4,
+  QMILOCRELIABILITYENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocReliabilityEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; This message is used to send the position report to the
+                    control point. */
+typedef struct {
+
+  /* Mandatory */
+  /*   Session Status */
+  qmiLocSessionStatusEnumT_v02 sessionStatus;
+  /**<   Session status.
+
+        Valid values: \n
+          - 0x00000000 -- SESS_STATUS_SUCCESS \n
+          - 0x00000001 -- SESS_STATUS_IN_PROGRESS \n
+          - 0x00000002 -- SESS_STATUS_GENERAL_FAILURE \n
+          - 0x00000003 -- SESS_STATUS_TIMEOUT \n
+          - 0x00000004 -- SESS_STATUS_USER_END \n
+          - 0x00000005 -- SESS_STATUS_BAD_PARAMETER \n
+          - 0x00000006 -- SESS_STATUS_PHONE_OFFLINE \n
+          - 0x00000007 -- SESS_STATUS_ENGINE_LOCKED
+       */
+
+  /* Mandatory */
+  /*   Session ID */
+  uint8_t sessionId;
+  /**<    ID of the session that was specified in the Start request
+        QMI_LOC_START_REQ. \n
+        - Type: Unsigned integer \n
+        - Range: 0 to 255  */
+
+  /* Optional */
+  /*  Latitude */
+  uint8_t latitude_valid;  /**< Must be set to true if latitude is being passed */
+  double latitude;
+  /**<   Latitude (specified in WGS84 datum). \n
+       - Type: Floating point \n
+       - Units: Degrees \n
+       - Range: -90.0 to 90.0 \n
+       - Positive values indicate northern latitude \n
+       - Negative values indicate southern latitude  */
+
+  /* Optional */
+  /*   Longitude */
+  uint8_t longitude_valid;  /**< Must be set to true if longitude is being passed */
+  double longitude;
+  /**<   Longitude (specified in WGS84 datum).\n
+       - Type: Floating point \n
+       - Units: Degrees \n
+       - Range: -180.0 to 180.0 \n
+       - Positive values indicate eastern longitude \n
+       - Negative values indicate western longitude  */
+
+  /* Optional */
+  /*   Circular Horizontal Position Uncertainty */
+  uint8_t horUncCircular_valid;  /**< Must be set to true if horUncCircular is being passed */
+  float horUncCircular;
+  /**<   Horizontal position uncertainty (circular).\n
+       - Type: Floating point \n
+       - Units: Meters  */
+
+  /* Optional */
+  /*  Horizontal Elliptical Uncertainty (Semi-Minor Axis) */
+  uint8_t horUncEllipseSemiMinor_valid;  /**< Must be set to true if horUncEllipseSemiMinor is being passed */
+  float horUncEllipseSemiMinor;
+  /**<   Semi-minor axis of horizontal elliptical uncertainty.\n
+       - Type: Floating point \n
+       - Units: Meters  */
+
+  /* Optional */
+  /*  Horizontal Elliptical Uncertainty (Semi-Major Axis) */
+  uint8_t horUncEllipseSemiMajor_valid;  /**< Must be set to true if horUncEllipseSemiMajor is being passed */
+  float horUncEllipseSemiMajor;
+  /**<   Semi-major axis of horizontal elliptical uncertainty.\n
+       - Type: Floating point \n
+       - Units: Meters  */
+
+  /* Optional */
+  /*  Elliptical Horizontal Uncertainty Azimuth */
+  uint8_t horUncEllipseOrientAzimuth_valid;  /**< Must be set to true if horUncEllipseOrientAzimuth is being passed */
+  float horUncEllipseOrientAzimuth;
+  /**<   Elliptical horizontal uncertainty azimuth of orientation.\n
+       - Type: Floating point \n
+       - Units: Decimal degrees \n
+       - Range: 0 to 180  */
+
+  /* Optional */
+  /*  Horizontal Confidence */
+  uint8_t horConfidence_valid;  /**< Must be set to true if horConfidence is being passed */
+  uint8_t horConfidence;
+  /**<   Horizontal uncertainty confidence.\n
+       - Type: Unsigned integer \n
+       - Units: Percent \n
+       - Range: 0 to 99  */
+
+  /* Optional */
+  /*  Horizontal Reliability */
+  uint8_t horReliability_valid;  /**< Must be set to true if horReliability is being passed */
+  qmiLocReliabilityEnumT_v02 horReliability;
+  /**<   Specifies the reliability of the horizontal position.
+
+       Valid values: \n
+         - 0x00000000 -- RELIABILITY_NOT_SET \n
+         - 0x00000001 -- RELIABILITY_VERY_LOW \n
+         - 0x00000002 -- RELIABILITY_LOW \n
+         - 0x00000003 -- RELIABILITY_MEDIUM \n
+         - 0x00000004 -- RELIABILITY_HIGH
+    */
+
+  /* Optional */
+  /*  Horizontal Speed */
+  uint8_t speedHorizontal_valid;  /**< Must be set to true if speedHorizontal is being passed */
+  float speedHorizontal;
+  /**<   Horizontal speed.\n
+       - Type: Floating point \n
+       - Units: Meters/second  */
+
+  /* Optional */
+  /*  Speed Uncertainty */
+  uint8_t speedUnc_valid;  /**< Must be set to true if speedUnc is being passed */
+  float speedUnc;
+  /**<   Speed uncertainty.\n
+       - Type: Floating point \n
+       - Units: Meters/second  */
+
+  /* Optional */
+  /*  Altitude With Respect to Ellipsoid */
+  uint8_t altitudeWrtEllipsoid_valid;  /**< Must be set to true if altitudeWrtEllipsoid is being passed */
+  float altitudeWrtEllipsoid;
+  /**<   Altitude with respect to the WGS84 ellipsoid.\n
+       - Type: Floating point \n
+       - Units: Meters \n
+       - Range: -500 to 15883  */
+
+  /* Optional */
+  /*  Altitude With Respect to Sea Level */
+  uint8_t altitudeWrtMeanSeaLevel_valid;  /**< Must be set to true if altitudeWrtMeanSeaLevel is being passed */
+  float altitudeWrtMeanSeaLevel;
+  /**<   Altitude with respect to mean sea level.\n
+       - Type: Floating point \n
+       - Units: Meters  */
+
+  /* Optional */
+  /*  Vertical Uncertainty */
+  uint8_t vertUnc_valid;  /**< Must be set to true if vertUnc is being passed */
+  float vertUnc;
+  /**<   Vertical uncertainty.\n
+       - Type: Floating point \n
+       - Units: Meters  */
+
+  /* Optional */
+  /*  Vertical Confidence */
+  uint8_t vertConfidence_valid;  /**< Must be set to true if vertConfidence is being passed */
+  uint8_t vertConfidence;
+  /**<   Vertical uncertainty confidence.\n
+       - Type: Unsigned integer \n
+       - Units: Percent    \n
+       - Range: 0 to 99  */
+
+  /* Optional */
+  /*  Vertical Reliability */
+  uint8_t vertReliability_valid;  /**< Must be set to true if vertReliability is being passed */
+  qmiLocReliabilityEnumT_v02 vertReliability;
+  /**<   Specifies the reliability of the vertical position.
+
+        Valid values: \n
+          - 0x00000000 -- RELIABILITY_NOT_SET \n
+          - 0x00000001 -- RELIABILITY_VERY_LOW \n
+          - 0x00000002 -- RELIABILITY_LOW \n
+          - 0x00000003 -- RELIABILITY_MEDIUM \n
+          - 0x00000004 -- RELIABILITY_HIGH  */
+
+  /* Optional */
+  /*  Vertical Speed */
+  uint8_t speedVertical_valid;  /**< Must be set to true if speedVertical is being passed */
+  float speedVertical;
+  /**<   Vertical speed.\n
+         - Type: Floating point \n
+         - Units: Meters/second  */
+
+  /* Optional */
+  /*  Heading */
+  uint8_t heading_valid;  /**< Must be set to true if heading is being passed */
+  float heading;
+  /**<   Heading.\n
+         - Type: Floating point \n
+         - Units: Degrees \n
+         - Range: 0 to 359.999   */
+
+  /* Optional */
+  /*  Heading Uncertainty */
+  uint8_t headingUnc_valid;  /**< Must be set to true if headingUnc is being passed */
+  float headingUnc;
+  /**<   Heading uncertainty.\n
+       - Type: Floating point \n
+       - Units: Degrees \n
+       - Range: 0 to 359.999  */
+
+  /* Optional */
+  /*  Magnetic Deviation */
+  uint8_t magneticDeviation_valid;  /**< Must be set to true if magneticDeviation is being passed */
+  float magneticDeviation;
+  /**<   Difference between the bearing to true north and the bearing shown
+      on a magnetic compass. The deviation is positive when the magnetic
+      north is east of true north. \n
+      - Type: Floating point  */
+
+  /* Optional */
+  /*  Technology Used */
+  uint8_t technologyMask_valid;  /**< Must be set to true if technologyMask is being passed */
+  qmiLocPosTechMaskT_v02 technologyMask;
+  /**<   Technology used in computing this fix.
+
+       Valid bitmasks: \n
+         - 0x00000001 -- SATELLITE \n
+         - 0x00000002 -- CELLID    \n
+         - 0x00000004 -- WIFI  */
+
+  /* Optional */
+  /*  Dilution of Precision */
+  uint8_t DOP_valid;  /**< Must be set to true if DOP is being passed */
+  qmiLocDOPStructT_v02 DOP;
+  /**<   \n Dilution of precision associated with this position.  */
+
+  /* Optional */
+  /*  UTC Timestamp */
+  uint8_t timestampUtc_valid;  /**< Must be set to true if timestampUtc is being passed */
+  uint64_t timestampUtc;
+  /**<   UTC timestamp. \n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds since Jan. 1, 1970  */
+
+  /* Optional */
+  /*  Leap Seconds */
+  uint8_t leapSeconds_valid;  /**< Must be set to true if leapSeconds is being passed */
+  uint8_t leapSeconds;
+  /**<   Leap second information. If leapSeconds is not available,
+         timestampUtc is calculated based on a hard-coded value
+         for leap seconds. \n
+         - Type: Unsigned integer \n
+         - Units: Seconds  */
+
+  /* Optional */
+  /*  GPS Time \n */
+  uint8_t gpsTime_valid;  /**< Must be set to true if gpsTime is being passed */
+  qmiLocGPSTimeStructT_v02 gpsTime;
+  /**<   \n The number of weeks since Jan. 5, 1980, and
+       milliseconds into the current week.  */
+
+  /* Optional */
+  /*  Time Uncertainty */
+  uint8_t timeUnc_valid;  /**< Must be set to true if timeUnc is being passed */
+  float timeUnc;
+  /**<   Time uncertainty. \n
+       - Type: Floating point \n
+       - Units: Milliseconds   */
+
+  /* Optional */
+  /*  Time Source */
+  uint8_t timeSrc_valid;  /**< Must be set to true if timeSrc is being passed */
+  qmiLocTimeSourceEnumT_v02 timeSrc;
+  /**<   Time source.
+
+        Valid values: \n
+          - 0x00000000 -- TIME_SRC_INVALID \n
+          - 0x00000001 -- TIME_SRC_NETWORK_TIME_TRANSFER \n
+          - 0x00000002 -- TIME_SRC_NETWORK_TIME_TAGGING \n
+          - 0x00000003 -- TIME_SRC_EXTERNAL_ INPUT \n
+          - 0x00000004 -- TIME_SRC_TOW_DECODE \n
+          - 0x00000005 -- TIME_SRC_TOW_CONFIRMED \n
+          - 0x00000006 -- TIME_SRC_TOW_AND_WEEK_CONFIRMED \n
+          - 0x00000007 -- TIME_SRC_NAV_SOLUTION \n
+          - 0x00000008 -- TIME_SRC_SOLVE_FOR_TIME  */
+
+  /* Optional */
+  /*  Sensor Data Usage */
+  uint8_t sensorDataUsage_valid;  /**< Must be set to true if sensorDataUsage is being passed */
+  qmiLocSensorUsageIndicatorStructT_v02 sensorDataUsage;
+  /**<   \n Whether sensor data was used in computing the position in this
+       position report.  */
+
+  /* Optional */
+  /*  Fix Count for This Session */
+  uint8_t fixId_valid;  /**< Must be set to true if fixId is being passed */
+  uint32_t fixId;
+  /**<   Fix count for the session. Starts with 0 and increments by one
+       for each successive position report for a particular session.  */
+}qmiLocEventPositionReportIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCSVSYSTEMENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_SV_SYSTEM_GPS_V02 = 1, /**<  GPS satellite.  */
+  eQMI_LOC_SV_SYSTEM_GALILEO_V02 = 2, /**<  GALILEO satellite.  */
+  eQMI_LOC_SV_SYSTEM_SBAS_V02 = 3, /**<  SBAS satellite.  */
+  eQMI_LOC_SV_SYSTEM_COMPASS_V02 = 4, /**<  COMPASS satellite.
+ GLONASS satellite.  */
+  eQMI_LOC_SV_SYSTEM_GLONASS_V02 = 5,
+  QMILOCSVSYSTEMENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocSvSystemEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCSVSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_SV_STATUS_IDLE_V02 = 1, /**<  SV is not being actively processed.  */
+  eQMI_LOC_SV_STATUS_SEARCH_V02 = 2, /**<  The system is searching for this SV.
+ SV is being tracked.  */
+  eQMI_LOC_SV_STATUS_TRACK_V02 = 3,
+  QMILOCSVSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocSvStatusEnumT_v02;
+/**
+    @}
+  */
+
+typedef uint32_t qmiLocSvInfoValidMaskT_v02;
+#define QMI_LOC_SV_INFO_MASK_VALID_SYSTEM_V02 ((qmiLocSvInfoValidMaskT_v02)0x00000001) /**<  System field is valid in SV information.  */
+#define QMI_LOC_SV_INFO_MASK_VALID_GNSS_SVID_V02 ((qmiLocSvInfoValidMaskT_v02)0x00000002) /**<  gnssSvId field is valid in SV information.  */
+#define QMI_LOC_SV_INFO_MASK_VALID_HEALTH_STATUS_V02 ((qmiLocSvInfoValidMaskT_v02)0x00000004) /**<  healthStatus field is valid in SV information.  */
+#define QMI_LOC_SV_INFO_MASK_VALID_PROCESS_STATUS_V02 ((qmiLocSvInfoValidMaskT_v02)0x00000008) /**<  processStatus field is valid in SV information.  */
+#define QMI_LOC_SV_INFO_MASK_VALID_SVINFO_MASK_V02 ((qmiLocSvInfoValidMaskT_v02)0x00000010) /**<  svInfoMask field is valid in SV information.  */
+#define QMI_LOC_SV_INFO_MASK_VALID_ELEVATION_V02 ((qmiLocSvInfoValidMaskT_v02)0x00000020) /**<  Elevation field is valid in SV information.  */
+#define QMI_LOC_SV_INFO_MASK_VALID_AZIMUTH_V02 ((qmiLocSvInfoValidMaskT_v02)0x00000040) /**<  Azimuth field is valid in SV information.  */
+#define QMI_LOC_SV_INFO_MASK_VALID_SNR_V02 ((qmiLocSvInfoValidMaskT_v02)0x00000080) /**<  SNR field is valid in SV information.  */
+typedef uint8_t qmiLocSvInfoMaskT_v02;
+#define QMI_LOC_SVINFO_MASK_HAS_EPHEMERIS_V02 ((qmiLocSvInfoMaskT_v02)0x01) /**<  Ephemeris is available for this SV.  */
+#define QMI_LOC_SVINFO_MASK_HAS_ALMANAC_V02 ((qmiLocSvInfoMaskT_v02)0x02) /**<  Almanac is available for this SV.     */
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  qmiLocSvInfoValidMaskT_v02 validMask;
+  /**<   Bitmask indicating which of the fields in this TLV are valid.
+
+         Valid bitmasks: \n
+           - 0x00000001 -- VALID_SYSTEM \n
+           - 0x00000002 -- VALID_GNSS_SVID \n
+           - 0x00000004 -- VALID_HEALTH_STATUS \n
+           - 0x00000008 -- VALID_PROCESS_STATUS \n
+           - 0x00000010 -- VALID_SVINFO_MASK \n
+           - 0x00000020 -- VALID_ELEVATION \n
+           - 0x00000040 -- VALID_AZIMUTH \n
+           - 0x00000080 -- VALID_SNR
+
+     */
+
+  qmiLocSvSystemEnumT_v02 system;
+  /**<   Indicates to which constellation this SV belongs.
+
+         Valid values: \n
+           - 0x00000001 -- eQMI_LOC_SV_SYSTEM_GPS \n
+           - 0x00000002 -- eQMI_LOC_SV_SYSTEM_GALILEO \n
+           - 0x00000003 -- eQMI_LOC_SV_SYSTEM_SBAS \n
+           - 0x00000004 -- eQMI_LOC_SV_SYSTEM_COMPASS \n
+           - 0x00000005 -- eQMI_LOC_SV_SYSTEM_GLONASS
+     */
+
+  uint16_t gnssSvId;
+  /**<   GNSS SV ID. \n
+
+         - Type: Unsigned integer \n
+         - Range: \n
+             -- For GPS:     1 to 32 \n
+             -- For SBAS:    33 to 64    \n
+             -- For GLONASS: 65 to 96   */
+
+  uint8_t healthStatus;
+  /**<   Health status. \n
+         - Type: Unsigned integer \n
+         - Range: 0 = unhealthy; 1 = healthy  */
+
+  qmiLocSvStatusEnumT_v02 svStatus;
+  /**<   SV processing status. \n
+         Valid values:\n
+           - 0x00000001 -- SV_STATUS_IDLE \n
+           - 0x00000002 -- SV_STATUS_SEARCH \n
+           - 0x00000003 -- SV_STATUS_TRACK
+     */
+
+  qmiLocSvInfoMaskT_v02 svInfoMask;
+  /**<   Whether almanac and ephemeris information is available. \n
+         Valid bitmasks: \n
+           - 0x01 -- SVINFO_HAS_EPHEMERIS \n
+           - 0x02 -- SVINFO_HAS_ALMANAC
+     */
+
+  float elevation;
+  /**<   SV elevation angle.\n
+         - Type: Floating point \n
+         - Units: Degrees \n
+         - Range: 0 to 90  */
+
+  float azimuth;
+  /**<   SV azimuth angle.\n
+         - Type: Floating point \n
+         - Units: Degrees \n
+         - Range: 0 to 360  */
+
+  float snr;
+  /**<   SV signal-to-noise ratio. \n
+         - Type: Floating point \n
+         - Units: dB-Hz  */
+}qmiLocSvInfoStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used to send a satellite report to the control point. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Altitude Source */
+  uint8_t altitudeAssumed;
+  /**<   Altitude assumed or calculated:\n
+         - 0x00 (FALSE) -- Valid altitude is calculated \n
+         - 0x01 (TRUE) -- Valid altitude is assumed; there may not be enough
+                          satellites to determine precise altitude  */
+
+  /* Optional */
+  /*  Satellite Info */
+  uint8_t svList_valid;  /**< Must be set to true if svList is being passed */
+  uint32_t svList_len;  /**< Must be set to # of elements in svList */
+  qmiLocSvInfoStructT_v02 svList[QMI_LOC_SV_INFO_LIST_MAX_SIZE_V02];
+  /**<   \n SV information list.  */
+}qmiLocEventGnssSvInfoIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used to send NMEA sentences to the control point. */
+typedef struct {
+
+  /* Mandatory */
+  /*  NMEA String */
+  char nmea[QMI_LOC_NMEA_STRING_MAX_LENGTH_V02 + 1];
+  /**<   NMEA string. \n
+       - Type: NULL-terminated string \n
+       - Maximum string length (including NULL terminator): 201   */
+}qmiLocEventNmeaIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCNINOTIFYVERIFYENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_NI_USER_NO_NOTIFY_NO_VERIFY_V02 = 1, /**<  No notification and no verification required.  */
+  eQMI_LOC_NI_USER_NOTIFY_ONLY_V02 = 2, /**<  Notify only; no verification required.  */
+  eQMI_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP_V02 = 3, /**<  Notify and verify, but no response required.  */
+  eQMI_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP_V02 = 4, /**<  Notify and verify, and require a response.
+ Notify and Verify, and require a response.  */
+  eQMI_LOC_NI_USER_NOTIFY_VERIFY_PRIVACY_OVERRIDE_V02 = 5,
+  QMILOCNINOTIFYVERIFYENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocNiNotifyVerifyEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCNIVXPOSMODEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_NI_VX_MS_ASSISTED_ONLY_V02 = 1, /**<  MS-assisted only allowed.  */
+  eQMI_LOC_NI_VX_MS_BASED_ONLY_V02 = 2, /**<  MS-based only allowed.  */
+  eQMI_LOC_NI_VX_MS_ASSISTED_PREFERRED_MS_BASED_ALLOWED_V02 = 3, /**<  MS-assisted preferred, but MS-based allowed.
+ MS-based preferred, but MS-assisted allowed.  */
+  eQMI_LOC_NI_VX_MS_BASED_PREFERRED_MS_ASSISTED_ALLOWED_V02 = 4,
+  QMILOCNIVXPOSMODEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocNiVxPosModeEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCNIVXREQUESTORIDENCODINGSCHEMEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_NI_VX_OCTET_V02 = 0, /**<  Encoding is OCTET.  */
+  eQMI_LOC_NI_VX_EXN_PROTOCOL_MSG_V02 = 1, /**<  Encoding is EXN PROTOCOL MSG.  */
+  eQMI_LOC_NI_VX_ASCII_V02 = 2, /**<  Encoding is ASCII.  */
+  eQMI_LOC_NI_VX_IA5_V02 = 3, /**<  Encoding is IA5.  */
+  eQMI_LOC_NI_VX_UNICODE_V02 = 4, /**<  Encoding is UNICODE.  */
+  eQMI_LOC_NI_VX_SHIFT_JIS_V02 = 5, /**<  Encoding is SHIFT JIS.  */
+  eQMI_LOC_NI_VX_KOREAN_V02 = 6, /**<  Encoding is KOREAN.  */
+  eQMI_LOC_NI_VX_LATIN_HEBREW_V02 = 7, /**<  Encoding is LATIN HEBREW.  */
+  eQMI_LOC_NI_VX_LATIN_V02 = 8, /**<  Encoding is LATIN.
+ Encoding is GSM.  */
+  eQMI_LOC_NI_VX_GSM_V02 = 9,
+  QMILOCNIVXREQUESTORIDENCODINGSCHEMEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocNiVxRequestorIdEncodingSchemeEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint8_t posQosIncl;
+  /**<   Whether quality of service is included:\n
+         - 0x01 (TRUE) --  QoS is included \n
+         - 0x00 (FALSE) -- QoS is not included  */
+
+  uint8_t posQos;
+  /**<   Position QoS timeout. \n
+         - Type: Unsigned integer \n
+         - Units: Seconds \n
+         - Range: 0 to 255  */
+
+  uint32_t numFixes;
+  /**<   Number of fixes allowed. \n
+         - Type: Unsigned integer  */
+
+  uint32_t timeBetweenFixes;
+  /**<   Time between fixes.\n
+         - Type: Unsigned integer \n
+         - Units: Seconds  */
+
+  qmiLocNiVxPosModeEnumT_v02 posMode;
+  /**<   Position mode.
+
+         Valid values: \n
+           - 0x00000001 -- NI_VX_MS_ASSISTED_ONLY \n
+           - 0x00000002 -- NI_VX_MS_BASED_ONLY \n
+           - 0x00000003 -- NI_VX_MS_ASSISTED_PREFERRED_MS_BASED_ALLOWED \n
+           - 0x00000004 -- NI_VX_MS_BASED_PREFERRED_MS_ASSISTED_ALLOWED
+     */
+
+  qmiLocNiVxRequestorIdEncodingSchemeEnumT_v02 encodingScheme;
+  /**<   VX encoding scheme.
+
+         Valid values: \n
+           - 0x00000000 -- NI_VX_OCTET \n
+           - 0x00000001 -- NI_VX_EXN_PROTOCOL_MSG \n
+           - 0x00000002 -- NI_VX_ASCII \n
+           - 0x00000003 -- NI_VX_IA5 \n
+           - 0x00000004 -- NI_VX_UNICODE \n
+           - 0x00000005 -- NI_VX_SHIFT_JIS \n
+           - 0x00000006 -- NI_VX_KOREAN \n
+           - 0x00000007 -- NI_VX_LATIN_HEBREW \n
+           - 0x00000008 -- NI_VX_LATIN \n
+           - 0x00000009 -- NI_VX_GSM
+     */
+
+  uint32_t requestorId_len;  /**< Must be set to # of elements in requestorId */
+  uint8_t requestorId[QMI_LOC_NI_MAX_REQUESTOR_ID_LENGTH_V02];
+  /**<   Requestor ID. \n
+       - Type:  Array of bytes \n
+       - Maximum array length: 200
+   */
+
+  uint16_t userRespTimerInSeconds;
+  /**<   Time to wait for the user to respond. \n
+         - Type: Unsigned integer \n
+         - Units: Seconds  */
+}qmiLocNiVxNotifyVerifyStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCNISUPLPOSMETHODENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_NI_SUPL_POSMETHOD_AGPS_SETASSISTED_V02 = 1, /**<  Set assisted.  */
+  eQMI_LOC_NI_SUPL_POSMETHOD_AGPS_SETBASED_V02 = 2, /**<  Set based.  */
+  eQMI_LOC_NI_SUPL_POSMETHOD_AGPS_SETASSISTED_PREF_V02 = 3, /**<  Set assisted preferred.  */
+  eQMI_LOC_NI_SUPL_POSMETHOD_AGPS_SETBASED_PREF_V02 = 4, /**<  Set based preferred.  */
+  eQMI_LOC_NI_SUPL_POSMETHOD_AUTONOMOUS_GPS_V02 = 5, /**<  Standalone GPS.  */
+  eQMI_LOC_NI_SUPL_POSMETHOD_AFLT_V02 = 6, /**<  Advanced forward link trilateration.  */
+  eQMI_LOC_NI_SUPL_POSMETHOD_ECID_V02 = 7, /**<  Exclusive chip ID.  */
+  eQMI_LOC_NI_SUPL_POSMETHOD_EOTD_V02 = 8, /**<  Enhnaced observed time difference.  */
+  eQMI_LOC_NI_SUPL_POSMETHOD_OTDOA_V02 = 9, /**<  Observed time delay of arrival.
+ No position.  */
+  eQMI_LOC_NI_SUPL_POSMETHOD_NO_POSITION_V02 = 10,
+  QMILOCNISUPLPOSMETHODENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocNiSuplPosMethodEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCNIDATACODINGSCHEMEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_NI_SS_GERMAN_V02 = 12, /**<  Language is German.  */
+  eQMI_LOC_NI_SS_ENGLISH_V02 = 13, /**<  Language is English.  */
+  eQMI_LOC_NI_SS_ITALIAN_V02 = 14, /**<  Language is Italian.  */
+  eQMI_LOC_NI_SS_FRENCH_V02 = 15, /**<  Language is French.  */
+  eQMI_LOC_NI_SS_SPANISH_V02 = 16, /**<  Language is Spanish.  */
+  eQMI_LOC_NI_SS_DUTCH_V02 = 17, /**<  Language is Dutch.   */
+  eQMI_LOC_NI_SS_SWEDISH_V02 = 18, /**<  Language is Swedish.  */
+  eQMI_LOC_NI_SS_DANISH_V02 = 19, /**<  Language is Danish.  */
+  eQMI_LOC_NI_SS_PORTUGUESE_V02 = 20, /**<  Language is Portuguese.  */
+  eQMI_LOC_NI_SS_FINNISH_V02 = 21, /**<  Language is Finnish.  */
+  eQMI_LOC_NI_SS_NORWEGIAN_V02 = 22, /**<  Language is Norwegian.  */
+  eQMI_LOC_NI_SS_GREEK_V02 = 23, /**<  Language is Greek.  */
+  eQMI_LOC_NI_SS_TURKISH_V02 = 24, /**<  Language is Turkish.  */
+  eQMI_LOC_NI_SS_HUNGARIAN_V02 = 25, /**<  Language is Hungarian.  */
+  eQMI_LOC_NI_SS_POLISH_V02 = 26, /**<  Language is Polish.  */
+  eQMI_LOC_NI_SS_LANGUAGE_UNSPEC_V02 = 27, /**<  Language is unspecified.  */
+  eQMI_LOC_NI_SUPL_UTF8_V02 = 28, /**<  Encoding is UTF 8.  */
+  eQMI_LOC_NI_SUPL_UCS2_V02 = 29, /**<  Encoding is UCS 2.
+ Encoding is GSM default.  */
+  eQMI_LOC_NI_SUPL_GSM_DEFAULT_V02 = 30,
+  QMILOCNIDATACODINGSCHEMEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocNiDataCodingSchemeEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCNISUPLFORMATENUMTYPE_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_NI_SUPL_FORMAT_LOGICAL_NAME_V02 = 0, /**<  SUPL logical name format.  */
+  eQMI_LOC_NI_SUPL_FORMAT_EMAIL_ADDRESS_V02 = 1, /**<  SUPL email address format.  */
+  eQMI_LOC_NI_SUPL_FORMAT_MSISDN_V02 = 2, /**<  SUPL logical name format.  */
+  eQMI_LOC_NI_SUPL_FORMAT_URL_V02 = 3, /**<  SUPL URL format.  */
+  eQMI_LOC_NI_SUPL_FORMAT_SIP_URL_V02 = 4, /**<  SUPL SIP URL format.  */
+  eQMI_LOC_NI_SUPL_FORMAT_MIN_V02 = 5, /**<  SUPL MIN format.  */
+  eQMI_LOC_NI_SUPL_FORMAT_MDN_V02 = 6, /**<  SUPL MDN format.  */
+  eQMI_LOC_NI_SUPL_FORMAT_IMSPUBLIC_IDENTITY_V02 = 7, /**<  SUPL IMS public identity
+ SUPL unknown format.  */
+  eQMI_LOC_NI_SUPL_FORMAT_OSS_UNKNOWN_V02 = 2147483647,
+  QMILOCNISUPLFORMATENUMTYPE_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocNiSuplFormatEnumType_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  qmiLocNiSuplFormatEnumType_v02 formatType;
+  /**<   Format of the formatted string.
+
+        Valid values: \n
+          - 0x00000000 -- FORMAT_LOGICAL_NAME \n
+          - 0x00000001 -- FORMAT_EMAIL_ADDRESS \n
+          - 0x00000002 -- FORMAT_MSISDN \n
+          - 0x00000003 -- FORMAT_URL \n
+          - 0x00000004 -- FORMAT_SIP_URL \n
+          - 0x00000005 -- FORMAT_MIN \n
+          - 0x00000006 -- FORMAT_MDN \n
+          - 0x00000007 -- FORMAT_IMSPUBLIC_IDENTITY \n
+          - 0x7FFFFFFF -- FORMAT_OSS_UNKNOWN
+    */
+
+  uint32_t formattedString_len;  /**< Must be set to # of elements in formattedString */
+  uint8_t formattedString[QMI_LOC_NI_MAX_CLIENT_NAME_LENGTH_V02];
+  /**<   Formatted string. \n
+        - Type: Byte array \n
+        - Maximum string length: 64
+         */
+}qmiLocNiSuplFormattedStringStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+typedef uint8_t qmiLocSuplQopValidMaskT_v02;
+#define QMI_LOC_NI_SUPL_MASK_QOP_HORZ_ACC_VALID_V02 ((qmiLocSuplQopValidMaskT_v02)0x01) /**<  Horizontal accuracy is valid in the Quality of Position (QoP).  */
+#define QMI_LOC_NI_SUPL_MASK_QOP_VER_ACC_VALID_V02 ((qmiLocSuplQopValidMaskT_v02)0x02) /**<  Vertical accuracy is valid in the QoP.  */
+#define QMI_LOC_NI_SUPL_MASK_QOP_MAXAGE_VALID_V02 ((qmiLocSuplQopValidMaskT_v02)0x04) /**<  Vertical accuracy is valid in the QoP.  */
+#define QMI_LOC_NI_SUPL_MASK_QOP_DELAY_VALID_V02 ((qmiLocSuplQopValidMaskT_v02)0x08) /**<  Vertical accuracy is valid in the QoP.  */
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  qmiLocSuplQopValidMaskT_v02 validMask;
+  /**<   Bit field indicating which fields are valid in this value.
+
+        Valid bitmasks: \n
+          - 0x01 -- QOP_HORZ_ACC_VALID \n
+          - 0x02 -- QOP_VER_ACC_VALID \n
+          - 0x04 -- QOP_MAXAGE_VALID \n
+          - 0x08 -- QOP_DELAY_VALID */
+
+  uint8_t horizontalAccuracy;
+  /**<   Horizontal accuracy. \n
+        - Type: Unsigned integer \n
+        - Units: Meters  */
+
+  uint8_t verticalAccuracy;
+  /**<   Vertical accuracy. \n
+        - Type: Unsigned integer \n
+        - Units: Meters  */
+
+  uint16_t maxLocAge;
+  /**<   Maximum age of the location if the engine sends a previously
+        computed position. \n
+        - Type: Unsigned integer \n
+        - Units: Seconds  */
+
+  uint8_t delay;
+  /**<   Delay the server is willing to tolerate for the fix. \n
+        - Type: Unsigned integer \n
+        - Units: Seconds  */
+}qmiLocNiSuplQopStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+typedef uint8_t qmiLocServerAddrTypeMaskT_v02;
+#define QMI_LOC_SERVER_ADDR_TYPE_IPV4_MASK_V02 ((qmiLocServerAddrTypeMaskT_v02)0x01) /**<  IPV4 server address type.  */
+#define QMI_LOC_SERVER_ADDR_TYPE_IPV6_MASK_V02 ((qmiLocServerAddrTypeMaskT_v02)0x02) /**<  IPV6 server address type.  */
+#define QMI_LOC_SERVER_ADDR_TYPE_URL_MASK_V02 ((qmiLocServerAddrTypeMaskT_v02)0x04) /**<  URL server address type.  */
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint32_t addr;
+  /**<   IPV4 address. \n
+       - Type: Unsigned integer  */
+
+  uint16_t port;
+  /**<   IPV4 port. \n
+       - Type: Unsigned integer  */
+}qmiLocIpV4AddrStructType_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint16_t addr[QMI_LOC_IPV6_ADDR_LENGTH_V02];
+  /**<   IPV6 address. \n
+       - Type: Array of unsigned integers \n
+       - Maximum length of the array: 8  */
+
+  uint32_t port;
+  /**<   IPV6 port. \n
+       - Type: Unsigned integer  */
+}qmiLocIpV6AddrStructType_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  qmiLocServerAddrTypeMaskT_v02 suplServerAddrTypeMask;
+  /**<   Mask specifying the valid fields in this value.
+
+       Valid bitmasks: \n
+         - 0x01 -- IPV4 \n
+         - 0x02 -- IPV6 \n
+         - 0x04 -- URL
+   */
+
+  qmiLocIpV4AddrStructType_v02 ipv4Addr;
+  /**<   IPV4 address and port.  */
+
+  qmiLocIpV6AddrStructType_v02 ipv6Addr;
+  /**<   IPV6 address and port.  */
+
+  char urlAddr[QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02 + 1];
+  /**<   URL. \n
+       - Type: NULL-terminated string \n
+       - Maximum string length (including NULL terminator): 256
+         */
+}qmiLocNiSuplServerInfoStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+typedef uint32_t qmiLocNiSuplNotifyVerifyValidMaskT_v02;
+#define QMI_LOC_SUPL_SERVER_INFO_MASK_V02 ((qmiLocNiSuplNotifyVerifyValidMaskT_v02)0x00000001) /**<  Mask to denote that the server information
+      is present in an NI SUPL notify verify request event. This mask is set in
+     the valid_flags field of a notify verify structure.  */
+#define QMI_LOC_SUPL_SESSION_ID_MASK_V02 ((qmiLocNiSuplNotifyVerifyValidMaskT_v02)0x00000002) /**<  Mask to denote that the SUPL session ID
+       is present in an NI SUPL notify verify request event.
+      This mask is set in the valid_flags field of a
+      notify verify structure.   */
+#define QMI_LOC_SUPL_HASH_MASK_V02 ((qmiLocNiSuplNotifyVerifyValidMaskT_v02)0x00000004) /**<  Mask to denote that the SUPL hash is present
+       in an NI notify verify request event.
+      This mask is set in the valid_flags field of a
+      notify verify structure.   */
+#define QMI_LOC_SUPL_POS_METHOD_MASK_V02 ((qmiLocNiSuplNotifyVerifyValidMaskT_v02)0x00000008) /**<  Mask to denote that the position method is present
+       in an NI SUPL notify verify request event.
+      This mask is set in the valid_flags field of a
+      notify verify structure.  */
+#define QMI_LOC_SUPL_DATA_CODING_SCHEME_MASK_V02 ((qmiLocNiSuplNotifyVerifyValidMaskT_v02)0x00000010) /**<  Mask to denote that the data coding scheme
+       is present in an NI SUPL notify verify request event.
+      This mask is set in the valid_flags field of a
+      notify verify structure.  */
+#define QMI_LOC_SUPL_REQUESTOR_ID_MASK_V02 ((qmiLocNiSuplNotifyVerifyValidMaskT_v02)0x00000020) /**<  Mask to denote that the requestor ID
+       is present in an NI notify verify request event.
+      This mask is set in the valid_flags field of a
+      notify verify structure.  */
+#define QMI_LOC_SUPL_CLIENT_NAME_MASK_V02 ((qmiLocNiSuplNotifyVerifyValidMaskT_v02)0x00000040) /**<  Mask to denote that the requestor ID
+       is present in an NI notify verify request event.
+       This mask is set in the valid_flags field of a
+       notify verify structure.  */
+#define QMI_LOC_SUPL_QOP_MASK_V02 ((qmiLocNiSuplNotifyVerifyValidMaskT_v02)0x00000080) /**<  Mask to denote that the quality of position
+       is present in an NI notify verify request event.
+       This mask is set in the valid_flags field of a
+       notify verify structure.  */
+#define QMI_LOC_SUPL_USER_RESP_TIMER_MASK_V02 ((qmiLocNiSuplNotifyVerifyValidMaskT_v02)0x00000100) /**<  Mask to denote that the user response timer
+       is present in an NI notify verify request event.
+       This mask is set in the valid_flags field of a
+       notify verify structure.  */
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  qmiLocNiSuplNotifyVerifyValidMaskT_v02 valid_flags;
+  /**<   Indicates which of the following fields are present in this value.
+
+        Valid bitmasks: \n
+          - 0x00000001 -- SUPL_SERVER_INFO \n
+          - 0x00000002 -- SUPL_SESSION_ID \n
+          - 0x00000004 -- SUPL_HASH \n
+          - 0x00000008 -- SUPL_POS_METHOD \n
+          - 0x00000010 -- SUPL_DATA_CODING_SCHEME \n
+          - 0x00000020 -- SUPL_REQUESTOR_ID \n
+          - 0x00000040 -- SUPL_CLIENT_NAME \n
+          - 0x00000080 -- SUPL_QOP \n
+          - 0x00000100 -- SUPL_USER_RESP_TIMER
+   */
+
+  qmiLocNiSuplServerInfoStructT_v02 suplServerInfo;
+  /**<   SUPL server information.  */
+
+  uint8_t suplSessionId[QMI_LOC_NI_SUPL_SLP_SESSION_ID_BYTE_LENGTH_V02];
+  /**<   SUPL session ID. \n
+       - Type: Array of unsigned integers \n
+       - Maximum length of the array: 4  */
+
+  uint8_t suplHash[QMI_LOC_NI_SUPL_HASH_LENGTH_V02];
+  /**<   Hash for SUPL_INIT; used to validate that the message was not
+       corrupted. \n
+       - Type: Array of unsigned integers \n
+       - Length of the array: 8  */
+
+  qmiLocNiSuplPosMethodEnumT_v02 posMethod;
+  /**<   GPS mode to be used for the fix.
+
+       Valid values: \n
+         - 0x00000001 -- AGPS_SETASSISTED \n
+         - 0x00000002 -- AGPS_SETBASED \n
+         - 0x00000003 -- AGPS_SETASSISTED_PREF \n
+         - 0x00000004 -- AGPS_SETBASED_PREF \n
+         - 0x00000005 -- AUTONOMOUS_GPS \n
+         - 0x00000006 -- AFLT \n
+         - 0x00000007 -- ECID \n
+         - 0x00000008 -- EOTD \n
+         - 0x00000009 -- OTDOA \n
+         - 0x0000000A -- NO_POSITION
+   */
+
+  qmiLocNiDataCodingSchemeEnumT_v02 dataCodingScheme;
+  /**<   Data coding scheme applies to both the requestor ID and the client
+       name.
+
+       Valid values: \n
+         - 0x0000000C -- NI_SS_GERMAN \n
+         - 0x0000000D -- NI_SS_ENGLISH \n
+         - 0x0000000E -- NI_SS_ITALIAN \n
+         - 0x0000000F -- NI_SS_FRENCH \n
+         - 0x00000010 -- NI_SS_SPANISH \n
+         - 0x00000011 -- NI_SS_DUTCH \n
+         - 0x00000012 -- NI_SS_SWEDISH \n
+         - 0x00000013 -- NI_SS_DANISH \n
+         - 0x00000014 -- NI_SS_PORTUGUESE \n
+         - 0x00000015 -- NI_SS_FINNISH \n
+         - 0x00000016 -- NI_SS_NORWEGIAN \n
+         - 0x00000017 -- NI_SS_GREEK \n
+         - 0x00000018 -- NI_SS_TURKISH \n
+         - 0x00000019 -- NI_SS_HUNGARIAN \n
+         - 0x0000001A -- NI_SS_POLISH \n
+         - 0x0000001B -- NI_SS_LANGUAGE_UNSPEC \n
+         - 0x0000001C -- NI_SUPL_UTF8 \n
+         - 0x0000001D -- NI_SUPL_UCS2 \n
+         - 0x0000001E -- NI_SUPL_GSM_DEFAULT
+    */
+
+  qmiLocNiSuplFormattedStringStructT_v02 requestorId;
+  /**<   Requestor ID. The encoding scheme for requestor_id is specified in
+       the dataCodingScheme field.  */
+
+  qmiLocNiSuplFormattedStringStructT_v02 clientName;
+  /**<   Client name. The encoding scheme for client_name is specified in
+       the dataCodingScheme field.  */
+
+  qmiLocNiSuplQopStructT_v02 suplQop;
+  /**<   SUPL QoP.  */
+
+  uint16_t userResponseTimer;
+  /**<   Time to wait for the user to respond. \n
+       - Type: Unsigned integer \n
+       - Units: Seconds */
+}qmiLocNiSuplNotifyVerifyStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCNILOCATIONTYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_NI_LOCATIONTYPE_CURRENT_LOCATION_V02 = 1, /**<  Current location.  */
+  eQMI_LOC_NI_LOCATIONTYPE_CURRENT_OR_LAST_KNOWN_LOCATION_V02 = 2, /**<  Last known location; may be current location.
+ Initial location.  */
+  eQMI_LOC_NI_LOCATIONTYPE_INITIAL_LOCATION_V02 = 3,
+  QMILOCNILOCATIONTYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocNiLocationTypeEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  qmiLocNiDataCodingSchemeEnumT_v02 dataCodingScheme;
+  /**<   Identifies the coding scheme of the coded string.
+
+       Valid values: \n
+         - 0x0000000C -- NI_SS_GERMAN \n
+         - 0x0000000D -- NI_SS_ENGLISH \n
+         - 0x0000000E -- NI_SS_ITALIAN \n
+         - 0x0000000F -- NI_SS_FRENCH \n
+         - 0x00000010 -- NI_SS_SPANISH \n
+         - 0x00000011 -- NI_SS_DUTCH \n
+         - 0x00000012 -- NI_SS_SWEDISH \n
+         - 0x00000013 -- NI_SS_DANISH \n
+         - 0x00000014 -- NI_SS_PORTUGUESE \n
+         - 0x00000015 -- NI_SS_FINNISH \n
+         - 0x00000016 -- NI_SS_NORWEGIAN \n
+         - 0x00000017 -- NI_SS_GREEK \n
+         - 0x00000018 -- NI_SS_TURKISH \n
+         - 0x00000019 -- NI_SS_HUNGARIAN \n
+         - 0x0000001A -- NI_SS_POLISH \n
+         - 0x0000001B -- NI_SS_LANGUAGE_UNSPEC \n
+         - 0x0000001C -- NI_SUPL_UTF8 \n
+         - 0x0000001D -- NI_SUPL_UCS2 \n
+         - 0x0000001E -- NI_SUPL_GSM_DEFAULT
+
+   */
+
+  uint32_t codedString_len;  /**< Must be set to # of elements in codedString */
+  uint8_t codedString[QMI_LOC_NI_CODEWORD_MAX_LENGTH_V02];
+  /**<   Coded string. \n
+       - Type: Array of bytes \n
+       - Maximum string length: 20  */
+}qmiLocNiUmtsCpCodedStringStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+typedef uint16_t qmiLocNiUmtsCpNotifyVerifyValidMaskT_v02;
+#define QMI_LOC_UMTS_CP_INVOKE_ID_MASK_V02 ((qmiLocNiUmtsCpNotifyVerifyValidMaskT_v02)0x0001) /**<  Mask to denote that the invoke ID
+       is present in an NI notify verify request event.
+      This mask is set in the valid flags field of a
+      notify verify structure.  */
+#define QMI_LOC_UMTS_CP_DATA_CODING_SCHEME_MASK_V02 ((qmiLocNiUmtsCpNotifyVerifyValidMaskT_v02)0x0002) /**<  Mask to denote that the data coding scheme
+       is present in an NI notify verify request event.
+       This mask is set in the valid flags field of a
+      notify verify structure.  */
+#define QMI_LOC_UMTS_CP_NOTIFICATION_TEXT_MASK_V02 ((qmiLocNiUmtsCpNotifyVerifyValidMaskT_v02)0x0004) /**<  Mask to denote that the notification text
+       is present in an NI notify verify request event.
+      This mask is set in the valid flags field of a
+      notify verify structure.  */
+#define QMI_LOC_UMTS_CP_CLIENT_ADDRESS_MASK_V02 ((qmiLocNiUmtsCpNotifyVerifyValidMaskT_v02)0x0008) /**<  Mask to denote that the client address
+       is present in an NI notify verify request event.
+      This mask is set in the valid flags field of a
+      notify verify structure.  */
+#define QMI_LOC_UMTS_CP_LOCATION_TYPE_MASK_V02 ((qmiLocNiUmtsCpNotifyVerifyValidMaskT_v02)0x0010) /**<  Mask to denote that the location type
+       is present in an NI notify verify request event.
+       This mask is set in the valid flags field of a
+      notify verify structure.  */
+#define QMI_LOC_UMTS_CP_REQUESTOR_ID_MASK_V02 ((qmiLocNiUmtsCpNotifyVerifyValidMaskT_v02)0x0020) /**<  Mask to denote that the requestor ID
+       is present in an NI notify verify request event.
+       This mask is set in the valid flags field of a
+       notify verify structure.  */
+#define QMI_LOC_UMTS_CP_CODEWORD_STRING_MASK_V02 ((qmiLocNiUmtsCpNotifyVerifyValidMaskT_v02)0x0040) /**<  Mask to denote that the code word string
+       is present in an NI notify verify request event.
+       This mask is set in the valid flags field of a
+       notify verify structure.  */
+#define QMI_LOC_UMTS_CP_SERVICE_TYPE_MASK_V02 ((qmiLocNiUmtsCpNotifyVerifyValidMaskT_v02)0x0080) /**<  Mask to denote that the service type
+       is present in an NI notify verify request event.
+       This mask is set in the valid flags field of a
+       notify verify structure.  */
+#define QMI_LOC_UMTS_CP_USER_RESP_TIMER_MASK_V02 ((qmiLocNiUmtsCpNotifyVerifyValidMaskT_v02)0x0100) /**<  Mask to denote that the user response timer
+       is present in an NI notify verify request event.
+       This mask is set in the valid flags field of a
+       notify verify structure.  */
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  qmiLocNiUmtsCpNotifyVerifyValidMaskT_v02 valid_flags;
+  /**<   Fields that are valid in this value.
+
+       Valid bitmasks: \n
+         - 0x0001 -- INVOKE_ID_MASK \n
+         - 0x0002 -- DATA_CODING_SCHEME_MASK \n
+         - 0x0004 -- NOTIFICATION_TEXT_MASK \n
+         - 0x0008 -- CLIENT_ADDRESS_MASK \n
+         - 0x0010 -- LOCATION_TYPE_MASK \n
+         - 0x0020 -- REQUESTOR_ID_MASK \n
+         - 0x0040 -- CODEWORD_STRING_MASK \n
+         - 0x0080 -- SERVICE_TYPE_MASK \n
+         - 0x0100 -- USER_RESP_TIMER_MASK
+   */
+
+  uint8_t invokeId;
+  /**<   Supplementary Services invoke ID. \n
+       - Type: Unsigned integer  */
+
+  qmiLocNiDataCodingSchemeEnumT_v02 dataCodingScheme;
+  /**<   Type of data encoding scheme for the text.
+       Applies to both the notification text and the client address.
+
+       Valid values: \n
+         - 0x0000000C -- NI_SS_GERMAN \n
+         - 0x0000000D -- NI_SS_ENGLISH \n
+         - 0x0000000E -- NI_SS_ITALIAN \n
+         - 0x0000000F -- NI_SS_FRENCH \n
+         - 0x00000010 -- NI_SS_SPANISH \n
+         - 0x00000011 -- NI_SS_DUTCH \n
+         - 0x00000012 -- NI_SS_SWEDISH \n
+         - 0x00000013 -- NI_SS_DANISH \n
+         - 0x00000014 -- NI_SS_PORTUGUESE \n
+         - 0x00000015 -- NI_SS_FINNISH \n
+         - 0x00000016 -- NI_SS_NORWEGIAN \n
+         - 0x00000017 -- NI_SS_GREEK \n
+         - 0x00000018 -- NI_SS_TURKISH \n
+         - 0x00000019 -- NI_SS_HUNGARIAN \n
+         - 0x0000001A -- NI_SS_POLISH \n
+         - 0x0000001B -- NI_SS_LANGUAGE_UNSPEC \n
+         - 0x0000001C -- NI_SUPL_UTF8 \n
+         - 0x0000001D -- NI_SUPL_UCS2 \n
+         - 0x0000001E -- NI_SUPL_GSM_DEFAULT
+  */
+
+  uint32_t notificationText_len;  /**< Must be set to # of elements in notificationText */
+  uint8_t notificationText[QMI_LOC_NI_MAX_CLIENT_NAME_LENGTH_V02];
+  /**<   Notification text; the encoding method is specified in
+       dataCodingScheme. \n
+       - Type: Array of bytes \n
+       - Maximum array length: 64  */
+
+  uint32_t clientAddress_len;  /**< Must be set to # of elements in clientAddress */
+  uint8_t clientAddress[QMI_LOC_NI_MAX_EXT_CLIENT_ADDRESS_V02];
+  /**<   Client address; the encoding method is specified in
+       dataCodingScheme. \n
+       - Maximum array length: 20  */
+
+  qmiLocNiLocationTypeEnumT_v02 locationType;
+  /**<   Location type.
+
+       Valid values: \n
+         - 0x00000001 -- CURRENT_LOCATION \n
+         - 0x00000002 -- CURRENT_OR_LAST_KNOWN_LOCATION \n
+         - 0x00000004 -- INITIAL_LOCATION
+   */
+
+  qmiLocNiUmtsCpCodedStringStructT_v02 requestorId;
+  /**<   Requestor ID; the encoding method is specified in the
+       qmiLocNiUmtsCpCodedStringStructT.dataCodingScheme field.  */
+
+  qmiLocNiUmtsCpCodedStringStructT_v02 codewordString;
+  /**<   Codeword string; the encoding method is specified in the
+       qmiLocNiUmtsCpCodedStringStructT.dataCodingScheme field.  */
+
+  uint8_t lcsServiceTypeId;
+  /**<   Service type ID. \n
+       - Type: Unsigned integer  */
+
+  uint16_t userResponseTimer;
+  /**<   Time to wait for the user to respond. \n
+       - Type: Unsigned integer \n
+       - Units: Seconds  */
+}qmiLocNiUmtsCpNotifyVerifyStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCNISERVICEINTERACTIONENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_NI_SERVICE_INTERACTION_ONGOING_NI_INCOMING_MO_V02 = 1, /**<  Service interaction between ongoing NI and incoming MO sessions.  */
+  QMILOCNISERVICEINTERACTIONENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocNiServiceInteractionEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  qmiLocNiVxNotifyVerifyStructT_v02 niVxReq;
+  /**<   Ongoing NI session request; this information is currently not filled.  */
+
+  qmiLocNiServiceInteractionEnumT_v02 serviceInteractionType;
+  /**<   Service interaction type specified in qmiLocNiServiceInteractionEnumT.
+
+        Valid values: \n
+          - 0x00000001 -- ONGOING_NI_INCOMING_MO
+    */
+}qmiLocNiVxServiceInteractionStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Indicates an NI notify/verify request to the control point. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Notification Type */
+  qmiLocNiNotifyVerifyEnumT_v02 notificationType;
+  /**<   Type of notification/verification performed.
+
+       Valid values: \n
+         - 0x00000001 -- NO_NOTIFY_NO_VERIFY \n
+         - 0x00000002 -- NOTIFY_ONLY \n
+         - 0x00000003 -- ALLOW_NO_RESP \n
+         - 0x00000004 -- NOT_ALLOW_NO_RESP \n
+         - 0x00000005 -- PRIVACY_OVERRIDE
+   */
+
+  /* Optional */
+  /*  Network Initiated Vx Request */
+  uint8_t NiVxInd_valid;  /**< Must be set to true if NiVxInd is being passed */
+  qmiLocNiVxNotifyVerifyStructT_v02 NiVxInd;
+  /**<   \n Optional NI Vx request payload.  */
+
+  /* Optional */
+  /*  Network Initiated SUPL Request */
+  uint8_t NiSuplInd_valid;  /**< Must be set to true if NiSuplInd is being passed */
+  qmiLocNiSuplNotifyVerifyStructT_v02 NiSuplInd;
+  /**<   \n Optional NI SUPL request payload.  */
+
+  /* Optional */
+  /*  Network Initiated UMTS Control Plane Request */
+  uint8_t NiUmtsCpInd_valid;  /**< Must be set to true if NiUmtsCpInd is being passed */
+  qmiLocNiUmtsCpNotifyVerifyStructT_v02 NiUmtsCpInd;
+  /**<   \n Optional NI UMTS-CP request payload.  */
+
+  /* Optional */
+  /*  Network Initiated Service Interaction Request */
+  uint8_t NiVxServiceInteractionInd_valid;  /**< Must be set to true if NiVxServiceInteractionInd is being passed */
+  qmiLocNiVxServiceInteractionStructT_v02 NiVxServiceInteractionInd;
+  /**<   \n Optional NI service interaction payload.  */
+}qmiLocEventNiNotifyVerifyReqIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  char serverUrl[QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02 + 1];
+  /**<   Assistance server URL. \n
+       - Type: NULL-terminated string \n
+       - Maximum string length (including NULL terminator): 256  */
+}qmiLocAssistanceServerUrlStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint32_t delayThreshold;
+  /**<   The time server is to be skipped if a one-way delay to the server
+       exceeds this threshold. \n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds  */
+
+  uint32_t timeServerList_len;  /**< Must be set to # of elements in timeServerList */
+  qmiLocAssistanceServerUrlStructT_v02 timeServerList[QMI_LOC_MAX_NTP_SERVERS_V02];
+  /**<   List of Time Server URL's that are recommended by the service for time
+       information, the list is ordered, the client is to use the first
+       server specified in the list as the primary URL to fetch NTP time,
+       the second one as secondary, and so on. \n
+       - Maximum server list items: 3  */
+}qmiLocTimeServerListStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Requests the control point to inject time information. */
+typedef struct {
+
+  /* Optional */
+  /*  Time Server Info */
+  uint8_t timeServerInfo_valid;  /**< Must be set to true if timeServerInfo is being passed */
+  qmiLocTimeServerListStructT_v02 timeServerInfo;
+  /**<   \n Contains information about the time servers recommended by the
+       location service for NTP time.  */
+}qmiLocEventInjectTimeReqIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint32_t maxFileSizeInBytes;
+  /**<   Maximum allowable predicted orbits file size (in bytes). \n
+         - Type: Unsigned integer  */
+
+  uint32_t maxPartSize;
+  /**<   Maximum allowable predicted orbits file chunk size (in bytes). \n
+         - Type: Unsigned integer  */
+}qmiLocPredictedOrbitsAllowedSizesStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint32_t serverList_len;  /**< Must be set to # of elements in serverList */
+  qmiLocAssistanceServerUrlStructT_v02 serverList[QMI_LOC_MAX_PREDICTED_ORBITS_SERVERS_V02];
+  /**<   List of predicted orbits URLs. The list is ordered, so the client
+       must use the first server specified in the list as the primary URL
+       from which to download predicted orbits data, the second one as
+       secondary, and so on. \n
+       - Maximum number of servers that can be specified: 3  */
+}qmiLocPredictedOrbitsServerListStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Requests the control point to inject predicted orbits data. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Allowed Sizes */
+  qmiLocPredictedOrbitsAllowedSizesStructT_v02 allowedSizes;
+  /**<   \n Maximum part and file size allowed to be injected in the engine.  */
+
+  /* Optional */
+  /*  Server List */
+  uint8_t serverList_valid;  /**< Must be set to true if serverList is being passed */
+  qmiLocPredictedOrbitsServerListStructT_v02 serverList;
+  /**<   \n List of servers that can be used by the client to download
+       predicted orbits data.  */
+}qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Requests the control point to inject a position. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Latitude */
+  double latitude;
+  /**<   Latitude (specified in WGS84 datum).\n
+       - Type: Floating point \n
+       - Units: Degrees \n
+       - Range: -90.0 to 90.0 \n
+       - Positive values indicate northern latitude \n
+       - Negative values indicate southern latitude  */
+
+  /* Mandatory */
+  /*  Longitude */
+  double longitude;
+  /**<   Longitude (specified in WGS84 datum).\n
+       - Type: Floating point \n
+       - Units: Degrees \n
+       - Range: -180.0 to 180.0 \n
+       - Positive values indicate eastern longitude \n
+       - Negative values indicate western longitude  */
+
+  /* Mandatory */
+  /*  Circular Horizontal Uncertainty */
+  float horUncCircular;
+  /**<   Horizontal position uncertainty (circular).\n
+       - Type: Floating point \n
+       - Units: Meters  */
+
+  /* Mandatory */
+  /*  UTC Timestamp */
+  uint64_t timestampUtc;
+  /**<   UTC timestamp.\n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds since Jan. 1, 1970  */
+}qmiLocEventInjectPositionReqIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCENGINESTATEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_ENGINE_STATE_ON_V02 = 1, /**<  Location engine is on.
+ Location engine is off.  */
+  eQMI_LOC_ENGINE_STATE_OFF_V02 = 2,
+  QMILOCENGINESTATEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocEngineStateEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Sends the engine state to the control point. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Engine State */
+  qmiLocEngineStateEnumT_v02 engineState;
+  /**<   Location engine state.
+
+         Valid values: \n
+           - 0x00000001 -- ON \n
+           - 0x00000002 -- OFF
+     */
+}qmiLocEventEngineStateIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCFIXSESSIONSTATEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_FIX_SESSION_STARTED_V02 = 1, /**<  Location fix session has started.
+ Location fix session has ended.  */
+  eQMI_LOC_FIX_SESSION_FINISHED_V02 = 2,
+  QMILOCFIXSESSIONSTATEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocFixSessionStateEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Sends the fix session state to the control point. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Session State */
+  qmiLocFixSessionStateEnumT_v02 sessionState;
+  /**<   LOC fix session state.
+
+         Valid values: \n
+           - 0x00000001 -- STARTED \n
+           - 0x00000002 -- FINISHED
+     */
+
+  /* Optional */
+  /*  Session ID */
+  uint8_t sessionId_valid;  /**< Must be set to true if sessionId is being passed */
+  uint8_t sessionId;
+  /**<   ID of the session that was specified in the Start request.
+    This may not be specified for a fix session corresponding to
+    a network-initiated request. \n
+    - Type: Unsigned integer \n
+    - Range: 0 to 255  */
+}qmiLocEventFixSessionStateIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCWIFIREQUESTENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_WIFI_START_PERIODIC_HI_FREQ_FIXES_V02 = 0, /**<  Start periodic fixes with high frequency.  */
+  eQMI_LOC_WIFI_START_PERIODIC_KEEP_WARM_V02 = 1, /**<  Keep warm for low frequency fixes without data downloads.
+ Stop periodic fixes request.  */
+  eQMI_LOC_WIFI_STOP_PERIODIC_FIXES_V02 = 2,
+  QMILOCWIFIREQUESTENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocWifiRequestEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Sends a WiFi request to the control point. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Request Type */
+  qmiLocWifiRequestEnumT_v02 requestType;
+  /**<   Request type as specified in qmiWifiRequestEnumT.
+
+        Valid values: \n
+          - 0x00000000 -- START_PERIODIC_HI_FREQ_FIXES \n
+          - 0x00000001 -- START_PERIODIC_KEEP_WARM \n
+          - 0x00000002 -- STOP_PERIODIC_FIXES
+    */
+
+  /* Optional */
+  /*  Time Between Fixes */
+  uint8_t tbfInMs_valid;  /**< Must be set to true if tbfInMs is being passed */
+  uint16_t tbfInMs;
+  /**<   Time between fixes for a periodic request.\n
+        - Type: Unsigned integer \n
+        - Units: Milliseconds  */
+}qmiLocEventWifiReqIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint16_t samplesPerBatch;
+  /**<   Specifies the number of samples per batch the GNSS location engine is to
+       receive. The sensor sampling frequency can be computed as follows: \n
+
+       samplingFrequency = samplesPerBatch * batchesPerSecond \n
+
+       samplesPerBatch must be a non-zero positive value.
+   */
+
+  uint16_t batchesPerSecond;
+  /**<   Number of sensor-data batches the GNSS location engine is to receive
+       per second. The rate is specified in integral number of batches per
+       second (Hz). \n
+
+       batchesPerSecond must be a non-zero positive value.
+   */
+}qmiLocSensorControlConfigSamplingSpecStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint8_t injectEnable;
+  /**<   Whether the GNSS location engine is ready to accept data from this
+       sensor.
+
+       Valid values: \n
+       - 0x01 (TRUE)  -- GNSS location engine is ready to accept sensor data \n
+       - 0x00 (FALSE) -- GNSS location engine is not ready to accept sensor
+                         data
+   */
+
+  qmiLocSensorControlConfigSamplingSpecStructT_v02 dataFrequency;
+  /**<   Rate at which the GNSS engine would like the sensor to be sampled. \n
+       The rate is specified in integral number of samples per second (Hz)\n
+       and batches per second.
+   */
+}qmiLocSensorReadyStatusStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Notifies the control point if the GNSS location engine is
+                    ready to accept sensor data. */
+typedef struct {
+
+  /* Optional */
+  /*  Accelerometer Accept Ready */
+  uint8_t accelReady_valid;  /**< Must be set to true if accelReady is being passed */
+  qmiLocSensorReadyStatusStructT_v02 accelReady;
+  /**<   \n Whether the GNSS location engine is ready to accept accelerometer
+         sensor data.
+    */
+
+  /* Optional */
+  /*  Gyrometer Accept Ready */
+  uint8_t gyroReady_valid;  /**< Must be set to true if gyroReady is being passed */
+  qmiLocSensorReadyStatusStructT_v02 gyroReady;
+  /**<   \n Whether the GNSS location engine is ready to accept gyrometer sensor
+         data.
+   */
+}qmiLocEventSensorStreamingReadyStatusIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Notifies the control point to inject time synchronization
+                    data.  */
+typedef struct {
+
+  /* Mandatory */
+  /*  Opaque Time Sync Reference Counter */
+  uint32_t refCounter;
+  /**<   This TLV is sent to registered control points. It is sent by
+        the location engine when it needs to synchronize location engine and
+        control point (sensor processor) times.
+        This TLV must be echoed back in the Time Sync Inject request. \n
+        - Type: Unsigned integer  */
+}qmiLocEventTimeSyncReqIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Requests the control point to enable Stationary Position
+                    Indicator (SPI) streaming reports.  */
+typedef struct {
+
+  /* Mandatory */
+  /*  Enable/Disable SPI Requests */
+  uint8_t enable;
+  /**<   Whether the client is to start or stop sending an SPI status stream.\n
+       - 0x01 (TRUE)  -- Client is to start sending an SPI status stream\n
+       - 0x00 (FALSE) -- Client is to stop sending an SPI status stream  */
+}qmiLocEventSetSpiStreamingReportIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCWWANTYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_WWAN_TYPE_INTERNET_V02 = 0, /**<  Bring up the WWAN type used for an Internet connection.
+ Bring up the WWAN type used for AGNSS connections.  */
+  eQMI_LOC_WWAN_TYPE_AGNSS_V02 = 1,
+  QMILOCWWANTYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocWWANTypeEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCSERVERREQUESTENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_SERVER_REQUEST_OPEN_V02 = 1, /**<  Open a connection to the location server.
+ Close a connection to the location server.  */
+  eQMI_LOC_SERVER_REQUEST_CLOSE_V02 = 2,
+  QMILOCSERVERREQUESTENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocServerRequestEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Requests the client to open or close a connection
+                    to the assisted GPS location server.  */
+typedef struct {
+
+  /* Mandatory */
+  /*  Connection Handle */
+  uint32_t connHandle;
+  /**<   Identifies a connection across Open and Close request events. \n
+       - Type: Unsigned integer  */
+
+  /* Mandatory */
+  /*  Request Type */
+  qmiLocServerRequestEnumT_v02 requestType;
+  /**<   Open or close a connection to the location server.
+
+       Valid values: \n
+         - 0x00000001 -- OPEN \n
+         - 0x00000002 -- CLOSE
+   */
+
+  /* Mandatory */
+  /*  WWAN Type */
+  qmiLocWWANTypeEnumT_v02 wwanType;
+  /**<   Identifies the WWAN type for this request. \n
+       Valid values: \n
+         - 0x00000000 -- WWAN_TYPE_INTERNET \n
+         - 0x00000001 -- WWAN_TYPE_AGNSS
+    */
+}qmiLocEventLocationServerConnectionReqIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_SUCCESS_V02 = 0, /**<  Request was completed successfully.       */
+  eQMI_LOC_GENERAL_FAILURE_V02 = 1, /**<  Request failed because of a general failure.  */
+  eQMI_LOC_UNSUPPORTED_V02 = 2, /**<  Request failed because it is unsupported.  */
+  eQMI_LOC_INVALID_PARAMETER_V02 = 3, /**<  Request failed because it contained invalid parameters.    */
+  eQMI_LOC_ENGINE_BUSY_V02 = 4, /**<  Request failed because the engine is busy.  */
+  eQMI_LOC_PHONE_OFFLINE_V02 = 5, /**<  Request failed because the phone is offline.
+ Request failed because it timed out.  */
+  eQMI_LOC_TIMEOUT_V02 = 6,
+  QMILOCSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocStatusEnumT_v02;
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetServiceRevisionReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetServiceRevisionReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Client can query the service revision using this message. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Revision Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Revision request.
+
+        Valid values: \n
+          - 0x00000000 -- SUCCESS \n
+          - 0x00000001 -- GENERAL_FAILURE \n
+          - 0x00000002 -- UNSUPPORTED \n
+          - 0x00000003 -- INVALID_PARAMETER \n
+          - 0x00000004 -- ENGINE_BUSY \n
+          - 0x00000005 -- PHONE_OFFLINE \n
+          - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Mandatory */
+  /*  Interface Definition Minor Revision */
+  uint32_t revision;
+  /**<   Revision of the service. This is the minor revision of the interface that
+       the service implements. Minor revision updates of the service are always
+       backward compatible. \n
+       - Type: Unsigned integer  */
+}qmiLocGetServiceRevisionIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetFixCriteriaReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetFixCriteriaReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Gets the fix criteria from the location engine. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Fix Criteria Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Fix Criteria request.
+
+        Valid values: \n
+          - 0x00000000 -- SUCCESS \n
+          - 0x00000001 -- GENERAL_FAILURE \n
+          - 0x00000002 -- UNSUPPORTED \n
+          - 0x00000003 -- INVALID_PARAMETER \n
+          - 0x00000004 -- ENGINE_BUSY \n
+          - 0x00000005 -- PHONE_OFFLINE \n
+          - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Horizontal Accuracy */
+  uint8_t horizontalAccuracyLevel_valid;  /**< Must be set to true if horizontalAccuracyLevel is being passed */
+  qmiLocAccuracyLevelEnumT_v02 horizontalAccuracyLevel;
+  /**<   Horizontal accuracy level.
+
+       Valid values: \n
+         - 0x00000001 -- LOW: Client requires low horizontal accuracy. \n
+         - 0x00000002 -- MED: Client requires medium horizontal accuracy. \n
+         - 0x00000003 -- HIGH: Client requires high horizontal accuracy.
+    */
+
+  /* Optional */
+  /*  Enable/Disable Intermediate Fixes */
+  uint8_t intermediateReportState_valid;  /**< Must be set to true if intermediateReportState is being passed */
+  qmiLocIntermediateReportStateEnumT_v02 intermediateReportState;
+  /**<   Intermediate Report state (ON, OFF).\n
+       The client must explicitly set this field to OFF to stop receiving
+       intermediate position reports. Intermediate position reports are
+       generated at \n 1 Hz and are ON by default. If intermediate reports
+       are turned ON, the client receives position reports even if the
+       accuracy criteria is not met. The status in the position report is
+       set to IN_PROGRESS for intermediate reports. \n
+       Valid values: \n
+         - 0x00000001 -- ON: Client is interested in receiving intermediate reports \n
+         - 0x00000002 -- OFF: Client is not interested in receiving intermediate reports
+   */
+
+  /* Optional */
+  /*  Mimimum Interval Between Fixes */
+  uint8_t minInterval_valid;  /**< Must be set to true if minInterval is being passed */
+  uint32_t minInterval;
+  /**<   Time that must elapse before alerting the client. \n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds  */
+}qmiLocGetFixCriteriaIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCNIUSERRESPENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT_V02 = 1, /**<  User accepted notify verify request.  */
+  eQMI_LOC_NI_LCS_NOTIFY_VERIFY_DENY_V02 = 2, /**<  User denied notify verify request.
+ User did not respond to notify verify request.  */
+  eQMI_LOC_NI_LCS_NOTIFY_VERIFY_NORESP_V02 = 3,
+  QMILOCNIUSERRESPENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocNiUserRespEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Sends the NI user response back to the engine; success or
+                      failure is reported in a separate indication. */
+typedef struct {
+
+  /* Mandatory */
+  /*  User Response */
+  qmiLocNiUserRespEnumT_v02 userResp;
+  /**<   User accepted or denied.
+
+       Valid values: \n
+         - 0x00000001 -- NOTIFY_VERIFY_ACCEPT \n
+         - 0x00000002 -- NOTIFY_VERIFY_DENY \n
+         - 0x00000003 -- NOTIFY_VERIFY_NORESP
+   */
+
+  /* Mandatory */
+  /*  Notification Type */
+  qmiLocNiNotifyVerifyEnumT_v02 notificationType;
+  /**<   Type of notification/verification performed.
+
+       Valid values: \n
+         - 0x00000001 -- NO_NOTIFY_NO_VERIFY \n
+         - 0x00000002 -- NOTIFY_ONLY \n
+         - 0x00000003 -- ALLOW_NO_RESP \n
+         - 0x00000004 -- NOT_ALLOW_NO_RESP \n
+         - 0x00000005 -- PRIVACY_OVERRIDE
+   */
+
+  /* Optional */
+  /*  Network Initiated Vx Request */
+  uint8_t NiVxPayload_valid;  /**< Must be set to true if NiVxPayload is being passed */
+  qmiLocNiVxNotifyVerifyStructT_v02 NiVxPayload;
+  /**<   \n Optional NI VX request payload.  */
+
+  /* Optional */
+  /*  Network Initiated SUPL Request */
+  uint8_t NiSuplPayload_valid;  /**< Must be set to true if NiSuplPayload is being passed */
+  qmiLocNiSuplNotifyVerifyStructT_v02 NiSuplPayload;
+  /**<   \n Optional NI SUPL request payload.  */
+
+  /* Optional */
+  /*  Network Initiated UMTS Control Plane Request */
+  uint8_t NiUmtsCpPayload_valid;  /**< Must be set to true if NiUmtsCpPayload is being passed */
+  qmiLocNiUmtsCpNotifyVerifyStructT_v02 NiUmtsCpPayload;
+  /**<   \n Optional NI UMTS-CP request payload.  */
+
+  /* Optional */
+  /*  Network Initiated Service Interaction Request */
+  uint8_t NiVxServiceInteractionPayload_valid;  /**< Must be set to true if NiVxServiceInteractionPayload is being passed */
+  qmiLocNiVxServiceInteractionStructT_v02 NiVxServiceInteractionPayload;
+  /**<   \n Optional NI service interaction payload.          */
+}qmiLocNiUserRespReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Sends the NI user response back to the engine; success or
+                      failure is reported in a separate indication. */
+typedef struct {
+
+  /* Mandatory */
+  /*  NI User Response Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the NI User Response request.
+
+          Valid values: \n
+            - 0x00000000 -- SUCCESS \n
+            - 0x00000001 -- GENERAL_FAILURE \n
+            - 0x00000002 -- UNSUPPORTED \n
+            - 0x00000003 -- INVALID_PARAMETER \n
+            - 0x00000004 -- ENGINE_BUSY \n
+            - 0x00000005 -- PHONE_OFFLINE \n
+            - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocNiUserRespIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCPREDICTEDORBITSDATAFORMATENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_PREDICTED_ORBITS_XTRA_V02 = 0, /**<  Default is QCOM-XTRA format.  */
+  QMILOCPREDICTEDORBITSDATAFORMATENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocPredictedOrbitsDataFormatEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Injects predicted orbits data.  */
+typedef struct {
+
+  /* Mandatory */
+  /*  Total Size */
+  uint32_t totalSize;
+  /**<   Total size of the predicted orbits data to be injected. \n
+        - Type: Unsigned integer \n
+        - Units: Bytes  */
+
+  /* Mandatory */
+  /*  Total Parts */
+  uint16_t totalParts;
+  /**<   Total number of parts into which the predicted orbits data is
+        divided. \n
+        - Type: Unsigned integer  */
+
+  /* Mandatory */
+  /*  Part Number */
+  uint16_t partNum;
+  /**<   Number of the current predicted orbits data part; starts at 1. \n
+        - Type: Unsigned integer  */
+
+  /* Mandatory */
+  /*  Data */
+  uint32_t partData_len;  /**< Must be set to # of elements in partData */
+  char partData[QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02];
+  /**<   Predicted orbits data. \n
+         - Type: Array of bytes \n
+         - Maximum length of the array: 1024
+     */
+
+  /* Optional */
+  /*  Format Type */
+  uint8_t formatType_valid;  /**< Must be set to true if formatType is being passed */
+  qmiLocPredictedOrbitsDataFormatEnumT_v02 formatType;
+  /**<   Predicted orbits data format.
+
+        Valid values: \n
+          - 0x00000000 -- PREDICTED_ORBITS_XTRA
+    */
+}qmiLocInjectPredictedOrbitsDataReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Injects predicted orbits data.  */
+typedef struct {
+
+  /* Mandatory */
+  /*  Data Injection Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Data Injection request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Part Number */
+  uint8_t partNum_valid;  /**< Must be set to true if partNum is being passed */
+  uint16_t partNum;
+  /**<   Number of the predicted orbits data part for which this indication
+      is sent; starts at 1. \n
+      - Type: Unsigned integer  */
+}qmiLocInjectPredictedOrbitsDataIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetPredictedOrbitsDataSourceReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetPredictedOrbitsDataSourceReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Gets the predicted orbits data source. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Predicted Oribits Data Source Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the query request for a predicted orbits data source.
+
+         Valid values: \n
+           - 0x00000000 -- SUCCESS \n
+           - 0x00000001 -- GENERAL_FAILURE \n
+           - 0x00000002 -- UNSUPPORTED \n
+           - 0x00000003 -- INVALID_PARAMETER \n
+           - 0x00000004 -- ENGINE_BUSY \n
+           - 0x00000005 -- PHONE_OFFLINE \n
+           - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Allowed Sizes */
+  uint8_t allowedSizes_valid;  /**< Must be set to true if allowedSizes is being passed */
+  qmiLocPredictedOrbitsAllowedSizesStructT_v02 allowedSizes;
+  /**<   \n Maximum part and file size allowed to be injected in the engine.  */
+
+  /* Optional */
+  /*  Server List */
+  uint8_t serverList_valid;  /**< Must be set to true if serverList is being passed */
+  qmiLocPredictedOrbitsServerListStructT_v02 serverList;
+  /**<   \n List of servers that can be used by the client to download
+       predicted orbits data.  */
+}qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetPredictedOrbitsDataValidityReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetPredictedOrbitsDataValidityReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint64_t startTimeInUTC;
+  /**<   Predicted orbits data is valid starting from this time. \n
+       - Type: Unsigned integer \n
+       - Units: Seconds (since Jan. 1, 1970)
+         */
+
+  uint16_t durationHours;
+  /**<   Duration from the start time for which the data is valid.\n
+       - Type: Unsigned integer \n
+       - Units: Hours
+         */
+}qmiLocPredictedOrbitsDataValidityStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Gets the predicted orbits data validity. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Predicted Orbits Data Validity Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the query request for predicted orbits data validity.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Validity Info */
+  uint8_t validityInfo_valid;  /**< Must be set to true if validityInfo is being passed */
+  qmiLocPredictedOrbitsDataValidityStructT_v02 validityInfo;
+}qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Injects UTC time in the location engine.  */
+typedef struct {
+
+  /* Mandatory */
+  /*  UTC Time */
+  uint64_t timeUtc;
+  /**<   UTC time since Jan. 1, 1970.\n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds
+         */
+
+  /* Mandatory */
+  /*  Time Uncertainty */
+  uint32_t timeUnc;
+  /**<   Time uncertainty.\n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds
+         */
+}qmiLocInjectUtcTimeReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Injects UTC time in the location engine.  */
+typedef struct {
+
+  /* Mandatory */
+  /*  UTC Time Injection Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the UTC Time Injection request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocInjectUtcTimeIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCALTSRCENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_ALT_SRC_UNKNOWN_V02 = 0, /**<  Source is unknown.  */
+  eQMI_LOC_ALT_SRC_GPS_V02 = 1, /**<  GPS is the source.  */
+  eQMI_LOC_ALT_SRC_CELL_ID_V02 = 2, /**<  Cell ID provided the source.  */
+  eQMI_LOC_ALT_SRC_ENHANCED_CELL_ID_V02 = 3, /**<  Source is enhanced cell ID.  */
+  eQMI_LOC_ALT_SRC_WIFI_V02 = 4, /**<  WiFi is the source.  */
+  eQMI_LOC_ALT_SRC_TERRESTRIAL_V02 = 5, /**<  Terrestrial source.  */
+  eQMI_LOC_ALT_SRC_TERRESTRIAL_HYBRID_V02 = 6, /**<  Hybrid terrestrial source.  */
+  eQMI_LOC_ALT_SRC_ALTITUDE_DATABASE_V02 = 7, /**<  Altitude database is the source.  */
+  eQMI_LOC_ALT_SRC_BAROMETRIC_ALTIMETER_V02 = 8, /**<  Barometric altimeter is the source.
+ Other sources.  */
+  eQMI_LOC_ALT_SRC_OTHER_V02 = 9,
+  QMILOCALTSRCENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocAltSrcEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCALTSRCLINKAGEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_ALT_SRC_LINKAGE_NOT_SPECIFIED_V02 = 0, /**<  Not specified.  */
+  eQMI_LOC_ALT_SRC_LINKAGE_FULLY_INTERDEPENDENT_V02 = 1, /**<  Fully interdependent.  */
+  eQMI_LOC_ALT_SRC_LINKAGE_DEPENDS_ON_LAT_LONG_V02 = 2, /**<  Depends on latitude and longitude.
+ Fully independent.  */
+  eQMI_LOC_ALT_SRC_LINKAGE_FULLY_INDEPENDENT_V02 = 3,
+  QMILOCALTSRCLINKAGEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocAltSrcLinkageEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCALTSRCUNCERTAINTYCOVERAGEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_ALT_UNCERTAINTY_NOT_SPECIFIED_V02 = 0, /**<  Not specified.  */
+  eQMI_LOC_ALT_UNCERTAINTY_POINT_V02 = 1, /**<  Altitude uncertainty is valid at the injected horizontal
+       position coordinates only.
+ Altitude uncertainty applies to the position of the device
+       regardless of horizontal position (within the horizontal
+       uncertainty region, if provided).  */
+  eQMI_LOC_ALT_UNCERTAINTY_FULL_V02 = 2,
+  QMILOCALTSRCUNCERTAINTYCOVERAGEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocAltSrcUncertaintyCoverageEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  qmiLocAltSrcEnumT_v02 source;
+  /**<   Specifies the source of the altitude.
+
+       Valid values: \n
+         - 0x00000000 -- ALT_SRC_UNKNOWN \n
+         - 0x00000001 -- ALT_SRC_GPS \n
+         - 0x00000002 -- ALT_SRC_CELL_ID \n
+         - 0x00000003 -- ALT_SRC_ENHANCED_CELL_ID \n
+         - 0x00000004 -- ALT_SRC_WIFI \n
+         - 0x00000005 -- ALT_SRC_TERRESTRIAL \n
+         - 0x00000006 -- ALT_SRC_TERRESTRIAL_HYBRID \n
+         - 0x00000007 -- ALT_SRC_ALTITUDE_DATABASE \n
+         - 0x00000008 -- ALT_SRC_BAROMETRIC_ALTIMETER \n
+         - 0x00000009 -- ALT_SRC_OTHER
+   */
+
+  qmiLocAltSrcLinkageEnumT_v02 linkage;
+  /**<   Specifies the dependency between the horizontal and
+       altitude position components.
+
+       Valid values: \n
+         - 0x00000000 -- SRC_LINKAGE_NOT_SPECIFIED \n
+         - 0x00000001 -- SRC_LINKAGE_FULLY_INTERDEPENDENT \n
+         - 0x00000002 -- SRC_LINKAGE_DEPENDS_ON_LAT_LONG \n
+         - 0x00000003 -- SRC_LINKAGE_FULLY_INDEPENDENT
+   */
+
+  qmiLocAltSrcUncertaintyCoverageEnumT_v02 coverage;
+  /**<   Specifies the region of uncertainty.
+
+        Valid values: \n
+          - 0x00000000 -- UNCERTAINTY_NOT_SPECIFIED \n
+          - 0x00000001 -- UNCERTAINTY_POINT: Altitude uncertainty is valid at the
+                          injected horizontal position coordinates only. \n
+          - 0x00000002 -- UNCERTAINTY_FULL: Altitude uncertainty applies to the
+                          position of the device regardless of horizontal position
+                          (within the horizontal uncertainty region, if provided).
+   */
+}qmiLocAltitudeSrcInfoStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCPOSITIONSRCENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_POSITION_SRC_GNSS_V02 = 0, /**<  Position Source is GNSS.  */
+  eQMI_LOC_POSITION_SRC_CELLID_V02 = 1, /**<  Position Source is Cell ID.  */
+  eQMI_LOC_POSITION_SRC_ENH_CELLID_V02 = 2, /**<  Position Source is Enhanced Cell ID.  */
+  eQMI_LOC_POSITION_SRC_WIFI_V02 = 3, /**<  Position Source is WiFi.  */
+  eQMI_LOC_POSITION_SRC_TERRESTRIAL_V02 = 4, /**<  Position Source is Terrestrial.  */
+  eQMI_LOC_POSITION_SRC_GNSS_TERRESTRIAL_HYBRID_V02 = 5, /**<  Position Source is GNSS Terrestrial Hybrid.
+ Other sources.   */
+  eQMI_LOC_POSITION_SRC_OTHER_V02 = 6,
+  QMILOCPOSITIONSRCENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocPositionSrcEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Injects a position to the location engine. */
+typedef struct {
+
+  /* Optional */
+  /*  Latitude */
+  uint8_t latitude_valid;  /**< Must be set to true if latitude is being passed */
+  double latitude;
+  /**<   Latitude (specified in WGS84 datum).\n
+       - Type: Floating point \n
+       - Units: Degrees \n
+       - Range: -90.0 to 90.0 \n
+       - Positive values indicate northern latitude \n
+       - Negative values indicate southern latitude
+     */
+
+  /* Optional */
+  /*  Longitude */
+  uint8_t longitude_valid;  /**< Must be set to true if longitude is being passed */
+  double longitude;
+  /**<   Longitude (specified in WGS84 datum).\n
+       - Type: Floating point \n
+       - Units: Degrees \n
+       - Range: -180.0 to 180.0 \n
+       - Positive values indicate eastern longitude \n
+       - Negative values indicate western longitude
+    */
+
+  /* Optional */
+  /*  Circular Horizontal Uncertainty */
+  uint8_t horUncCircular_valid;  /**< Must be set to true if horUncCircular is being passed */
+  float horUncCircular;
+  /**<   Horizontal position uncertainty (circular).\n
+        - Type: Floating point \n
+        - Units: Meters  */
+
+  /* Optional */
+  /*  Horizontal Confidence */
+  uint8_t horConfidence_valid;  /**< Must be set to true if horConfidence is being passed */
+  uint8_t horConfidence;
+  /**<   Horizontal confidence, as defined by  ETSI TS 101 109.\n
+        - Type: Unsigned integer \n
+        - Units: Percent (0 to 99) \n
+        - 0 -- invalid value \n
+        - 100 to 256 -- not used \n
+        - If 100 is received, reinterpret to 99 \n
+        This field must be specified together with horizontal uncertainty.
+        If not specified, the default value will be 50.  */
+
+  /* Optional */
+  /*  Horizontal Reliability */
+  uint8_t horReliability_valid;  /**< Must be set to true if horReliability is being passed */
+  qmiLocReliabilityEnumT_v02 horReliability;
+  /**<   Specifies the reliability of the horizontal position.
+
+       Valid values: \n
+         - 0x00000000 -- eQMI_LOC_RELIABILITY_NOT_SET \n
+         - 0x00000001 -- eQMI_LOC_RELIABILITY_VERY_LOW \n
+         - 0x00000002 -- eQMI_LOC_RELIABILITY_LOW \n
+         - 0x00000003 -- eQMI_LOC_RELIABILITY_MEDIUM \n
+         - 0x00000004 -- eQMI_LOC_RELIABILITY_HIGH
+       */
+
+  /* Optional */
+  /*  Altitude With Respect to Ellipsoid */
+  uint8_t altitudeWrtEllipsoid_valid;  /**< Must be set to true if altitudeWrtEllipsoid is being passed */
+  float altitudeWrtEllipsoid;
+  /**<   Altitude with respect to the WGS84 ellipsoid.\n
+        - Type: Floating point \n
+        - Units: Meters; positive = height, negative = depth   */
+
+  /* Optional */
+  /*  Altitude With Respect to Sea Level */
+  uint8_t altitudeWrtMeanSeaLevel_valid;  /**< Must be set to true if altitudeWrtMeanSeaLevel is being passed */
+  float altitudeWrtMeanSeaLevel;
+  /**<   Altitude with respect to mean sea level.\n
+       - Type: Floating point \n
+       - Units: Meters  */
+
+  /* Optional */
+  /*  Vertical Uncertainty */
+  uint8_t vertUnc_valid;  /**< Must be set to true if vertUnc is being passed */
+  float vertUnc;
+  /**<   Vertical uncertainty. This is mandatory if either altitudeWrtEllipsoid
+        or altitudeWrtMeanSeaLevel is specified.\n
+        - Type: Floating point \n
+        - Units: Meters  */
+
+  /* Optional */
+  /*  Vertical Confidence */
+  uint8_t vertConfidence_valid;  /**< Must be set to true if vertConfidence is being passed */
+  uint8_t vertConfidence;
+  /**<   Vertical confidence, as defined by  ETSI TS 101 109.\n
+        - Type: Unsigned integer \n
+        - Units: Percent (0-99) \n
+        - 0 -- invalid value\n
+        - 100 to 256 -- not used \n
+        - If 100 is received, reinterpret to 99\n
+        This field must be specified together with the vertical uncertainty.
+        If not specified, the default value will be 50.  */
+
+  /* Optional */
+  /*  Vertical Reliability */
+  uint8_t vertReliability_valid;  /**< Must be set to true if vertReliability is being passed */
+  qmiLocReliabilityEnumT_v02 vertReliability;
+  /**<   Specifies the reliability of the vertical position.
+
+        Valid values: \n
+          - 0x00000000 -- eQMI_LOC_RELIABILITY_NOT_SET \n
+          - 0x00000001 -- eQMI_LOC_RELIABILITY_VERY_LOW \n
+          - 0x00000002 -- eQMI_LOC_RELIABILITY_LOW \n
+          - 0x00000003 -- eQMI_LOC_RELIABILITY_MEDIUM \n
+          - 0x00000004 -- eQMI_LOC_RELIABILITY_HIGH
+     */
+
+  /* Optional */
+  /*  Altitude Source Info */
+  uint8_t altSourceInfo_valid;  /**< Must be set to true if altSourceInfo is being passed */
+  qmiLocAltitudeSrcInfoStructT_v02 altSourceInfo;
+  /**<   \n Specifies information regarding the altitude source.  */
+
+  /* Optional */
+  /*  UTC Timestamp */
+  uint8_t timestampUtc_valid;  /**< Must be set to true if timestampUtc is being passed */
+  uint64_t timestampUtc;
+  /**<   UTC timestamp. \n
+        - Type: Unsigned integer \n
+        - Units: Milliseconds (since Jan. 1, 1970)  */
+
+  /* Optional */
+  /*  Position Age */
+  uint8_t timestampAge_valid;  /**< Must be set to true if timestampAge is being passed */
+  int32_t timestampAge;
+  /**<   Position age, which is an estimate of how long ago this fix was made. \n
+        - Type: Signed integer \n
+        - Units: Milliseconds  */
+
+  /* Optional */
+  /*  Position Source */
+  uint8_t positionSrc_valid;  /**< Must be set to true if positionSrc is being passed */
+  qmiLocPositionSrcEnumT_v02 positionSrc;
+  /**<   Source from where this position was obtained.
+        Valid values: \n
+          - 0x00000000 -- eQMI_LOC_POSITION_SRC_GNSS \n
+          - 0x00000001 -- eQMI_LOC_POSITION_SRC_CELLID \n
+          - 0x00000002 -- eQMI_LOC_POSITION_SRC_ENH_CELLID  \n
+          - 0x00000003 -- eQMI_LOC_POSITION_SRC_WIFI \n
+          - 0x00000004 -- eQMI_LOC_POSITION_SRC_TERRESTRIAL \n
+          - 0x00000005 -- eQMI_LOC_POSITION_SRC_GNSS_TERRESTRIAL_HYBRID \n
+          - 0x00000006 -- eQMI_LOC_POSITION_SRC_OTHER \n
+
+       If altitude is specified and altitude source is not specified, the engine
+       assumes that altitude was obtained using the specified Position source.
+       If altitude and altitude source both are specified then the engine assumes
+       that only latitude, longitude were obtained using the specified Position
+       Source.
+    */
+}qmiLocInjectPositionReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Injects a position to the location engine. */
+typedef struct {
+
+  /* Mandatory */
+  /*  UTC Position Injection Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the UTC Position Injection request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocInjectPositionIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCLOCKENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_LOCK_NONE_V02 = 1, /**<  Do not lock any position sessions.  */
+  eQMI_LOC_LOCK_MI_V02 = 2, /**<  Lock mobile-initiated position sessions.  */
+  eQMI_LOC_LOCK_MT_V02 = 3, /**<  Lock mobile-terminated position sessions.
+ Lock all position sessions.  */
+  eQMI_LOC_LOCK_ALL_V02 = 4,
+  QMILOCLOCKENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocLockEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Sets the location engine lock. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Lock Type */
+  qmiLocLockEnumT_v02 lockType;
+  /**<   Type of lock.
+
+       Valid values: \n
+         - 0x00000001 -- LOCK_NONE \n
+         - 0x00000002 -- LOCK_MI \n
+         - 0x00000003 -- LOCK_MT \n
+         - 0x00000004 -- LOCK_ALL
+
+   */
+}qmiLocSetEngineLockReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Sets the location engine lock. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set Engine Lock Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set Engine Lock request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetEngineLockIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetEngineLockReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetEngineLockReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Gets the location engine lock. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Engine Lock Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Engine Lock request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Lock Type */
+  uint8_t lockType_valid;  /**< Must be set to true if lockType is being passed */
+  qmiLocLockEnumT_v02 lockType;
+  /**<   Type of lock.
+
+       Valid values: \n
+         - 0x00000001 -- LOCK_NONE \n
+         - 0x00000002 -- LOCK_MI \n
+         - 0x00000003 -- LOCK_MT \n
+         - 0x00000004 -- LOCK_ALL
+   */
+}qmiLocGetEngineLockIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Sets the SBAS configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  SBAS Config */
+  uint8_t sbasConfig;
+  /**<   Whether SBAS configuration is enabled. \n
+       - 0x01 (TRUE) -- SBAS configuration is enabled \n
+       - 0x00 (FALSE) -- SBAS configuration is disabled  */
+}qmiLocSetSbasConfigReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Sets the SBAS configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set SBAS Config Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set SBAS Configuration request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetSbasConfigIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetSbasConfigReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetSbasConfigReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Gets the SBAS configuration from the location engine. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get SBAS Config Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get SBAS Configuration request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  SBAS Config */
+  uint8_t sbasConfig_valid;  /**< Must be set to true if sbasConfig is being passed */
+  uint8_t sbasConfig;
+  /**<   Whether SBAS configuration is enabled. \n
+       - 0x01 (TRUE) -- SBAS configuration is enabled \n
+       - 0x00 (FALSE) -- SBAS configuration is disabled  */
+}qmiLocGetSbasConfigIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+typedef uint32_t qmiLocNmeaSentenceMaskT_v02;
+#define QMI_LOC_NMEA_MASK_GGA_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000001) /**<  Enable GGA type.  */
+#define QMI_LOC_NMEA_MASK_RMC_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000002) /**<  Enable RMC type.  */
+#define QMI_LOC_NMEA_MASK_GSV_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000004) /**<  Enable GSV type.  */
+#define QMI_LOC_NMEA_MASK_GSA_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000008) /**<  Enable GSA type.  */
+#define QMI_LOC_NMEA_MASK_VTG_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000010) /**<  Enable VTG type.  */
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Sets the NMEA types. */
+typedef struct {
+
+  /* Mandatory */
+  /*  NMEA Sentence Types */
+  qmiLocNmeaSentenceMaskT_v02 nmeaSentenceType;
+  /**<   Bitmasks of NMEA types to enable.
+
+       Valid bitmasks: \n
+         - 0x00000001 -- NMEA_MASK_GGA \n
+         - 0x00000002 -- NMEA_MASK_RMC \n
+         - 0x00000004 -- NMEA_MASK_GSV \n
+         - 0x00000008 -- NMEA_MASK_GSA \n
+         - 0x00000010 -- NMEA_MASK_VTG
+          */
+}qmiLocSetNmeaTypesReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Sets the NMEA types. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set NMEA Types Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of Set NMEA Types request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetNmeaTypesIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetNmeaTypesReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetNmeaTypesReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Gets the NMEA types from the location engine. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get NMEA Types Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get NMEA Types request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  NMEA Sentence Types */
+  uint8_t nmeaSentenceType_valid;  /**< Must be set to true if nmeaSentenceType is being passed */
+  qmiLocNmeaSentenceMaskT_v02 nmeaSentenceType;
+  /**<   NMEA types to enable.
+
+       Valid bitmasks: \n
+         - 0x0000ffff -- NMEA_MASK_ALL \n
+         - 0x00000001 -- NMEA_MASK_GGA \n
+         - 0x00000002 -- NMEA_MASK_RMC \n
+         - 0x00000004 -- NMEA_MASK_GSV \n
+         - 0x00000008 -- NMEA_MASK_GSA \n
+         - 0x00000010 -- NMEA_MASK_VTG
+          */
+}qmiLocGetNmeaTypesIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Enables/disables Low Power Mode (LPM) configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Enable Low Power Mode */
+  uint8_t lowPowerMode;
+  /**<   Whether to enable Low Power mode:\n
+       - 0x01 (TRUE) -- Enable LPM \n
+       - 0x00 (FALSE) -- Disable LPM  */
+}qmiLocSetLowPowerModeReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Enables/disables Low Power Mode (LPM) configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set LPM Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set Low Power Mode request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetLowPowerModeIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetLowPowerModeReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetLowPowerModeReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Gets the LPM status from the location engine. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get LPM Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get LPM request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Enable/Disable LPM */
+  uint8_t lowPowerMode_valid;  /**< Must be set to true if lowPowerMode is being passed */
+  uint8_t lowPowerMode;
+  /**<   Whether to enable Low Power mode:\n
+       - 0x01 (TRUE) -- Enable LPM \n
+       - 0x00 (FALSE) -- Disable LPM  */
+}qmiLocGetLowPowerModeIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCSERVERTYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_SERVER_TYPE_CDMA_PDE_V02 = 1, /**<  Server type is CDMA PDE.  */
+  eQMI_LOC_SERVER_TYPE_CDMA_MPC_V02 = 2, /**<  Server type is CDMA MPC.  */
+  eQMI_LOC_SERVER_TYPE_UMTS_SLP_V02 = 3, /**<  Server type is UMTS SLP.
+ Server type is custom PDE.  */
+  eQMI_LOC_SERVER_TYPE_CUSTOM_PDE_V02 = 4,
+  QMILOCSERVERTYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocServerTypeEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Specifies the A-GPS server type and address. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Server Type */
+  qmiLocServerTypeEnumT_v02 serverType;
+  /**<   Type of server.
+
+        Valid values: \n
+          - 0x00000001 -- CDMA_PDE \n
+          - 0x00000002 -- CDMA_MPC \n
+          - 0x00000003 -- UMTS_SLP \n
+          - 0x00000004 -- CUSTOM_PDE
+   */
+
+  /* Optional */
+  /*  IPV4 Address */
+  uint8_t ipv4Addr_valid;  /**< Must be set to true if ipv4Addr is being passed */
+  qmiLocIpV4AddrStructType_v02 ipv4Addr;
+  /**<   \n IPV4 address and port.  */
+
+  /* Optional */
+  /*  IPV6 Address */
+  uint8_t ipv6Addr_valid;  /**< Must be set to true if ipv6Addr is being passed */
+  qmiLocIpV6AddrStructType_v02 ipv6Addr;
+  /**<   \n IPV6 address and port.  */
+
+  /* Optional */
+  /*  Uniform Resource Locator */
+  uint8_t urlAddr_valid;  /**< Must be set to true if urlAddr is being passed */
+  char urlAddr[QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02 + 1];
+  /**<   URL address. \n
+       - Type: NULL-terminated string \n
+       - Maximum string length (including NULL terminator): 256
+   */
+}qmiLocSetServerReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Specifies the A-GPS server type and address. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set Server Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set Server request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetServerIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Gets the location server from the location engine. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Server Type */
+  qmiLocServerTypeEnumT_v02 serverType;
+  /**<   Type of server, as defined in qmiLocServerTypeEnumT.
+
+       Valid values: \n
+         - 0x00000001 -- CDMA_PDE \n
+         - 0x00000002 -- CDMA_MPC \n
+         - 0x00000003 -- UMTS_SLP \n
+         - 0x00000004 -- CUSTOM_PDE
+   */
+
+  /* Optional */
+  /*  Server Address Type */
+  uint8_t serverAddrTypeMask_valid;  /**< Must be set to true if serverAddrTypeMask is being passed */
+  qmiLocServerAddrTypeMaskT_v02 serverAddrTypeMask;
+  /**<   Type of address the client wants. If unspecified, the
+       indication will contain all the types of addresses
+       it has for the specified server type.
+
+       Valid bitmasks: \n
+         - 0x01 -- IPV4 \n
+         - 0x02 -- IPV6 \n
+         - 0x04 -- URL
+   */
+}qmiLocGetServerReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Gets the location server from the location engine. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Server Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Server request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Mandatory */
+  /*  Server Type */
+  qmiLocServerTypeEnumT_v02 serverType;
+  /**<   Type of server, as defined in qmiLocServerTypeEnumT.
+
+       Valid values: \n
+         - 0x00000001 -- CDMA_PDE \n
+         - 0x00000002 -- CDMA_MPC \n
+         - 0x00000003 -- UMTS_SLP \n
+         - 0x00000004 -- CUSTOM_PDE
+   */
+
+  /* Optional */
+  /*  IPV4 Address */
+  uint8_t ipv4Addr_valid;  /**< Must be set to true if ipv4Addr is being passed */
+  qmiLocIpV4AddrStructType_v02 ipv4Addr;
+  /**<   \n IPV4 address and port.  */
+
+  /* Optional */
+  /*  IPV6 Address */
+  uint8_t ipv6Addr_valid;  /**< Must be set to true if ipv6Addr is being passed */
+  qmiLocIpV6AddrStructType_v02 ipv6Addr;
+  /**<   \n IPV6 address and port.  */
+
+  /* Optional */
+  /*  Uniform Resource Locator */
+  uint8_t urlAddr_valid;  /**< Must be set to true if urlAddr is being passed */
+  char urlAddr[QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02 + 1];
+  /**<   URL. \n
+       - Type: NULL-terminated string \n
+       - Maximum string length (including NULL terminator): 256
+   */
+}qmiLocGetServerIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+typedef uint64_t qmiLocDeleteGnssDataMaskT_v02;
+#define QMI_LOC_MASK_DELETE_GPS_SVDIR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000001) /**<  Mask to delete GPS SVDIR.   */
+#define QMI_LOC_MASK_DELETE_GPS_SVSTEER_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000002) /**<  Mask to delete GPS SVSTEER.   */
+#define QMI_LOC_MASK_DELETE_GPS_TIME_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000004) /**<  Mask to delete GPS time.  */
+#define QMI_LOC_MASK_DELETE_GPS_ALM_CORR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000008) /**<  Mask to delete almanac correlation.  */
+#define QMI_LOC_MASK_DELETE_GLO_SVDIR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000010) /**<  Mask to delete GLONASS SVDIR.   */
+#define QMI_LOC_MASK_DELETE_GLO_SVSTEER_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000020) /**<  Mask to delete GLONASS SVSTEER.   */
+#define QMI_LOC_MASK_DELETE_GLO_TIME_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000040) /**<  Mask to delete GLONASS time.  */
+#define QMI_LOC_MASK_DELETE_GLO_ALM_CORR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000080) /**<  Mask to delete GLONASS almanac correlation */
+#define QMI_LOC_MASK_DELETE_SBAS_SVDIR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000100) /**<  Mask to delete SBAS SVDIR  */
+#define QMI_LOC_MASK_DELETE_SBAS_SVSTEER_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000200) /**<  Mask to delete SBAS SVSTEER  */
+#define QMI_LOC_MASK_DELETE_POSITION_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000400) /**<  Mask to delete position estimate  */
+#define QMI_LOC_MASK_DELETE_TIME_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000800) /**<  Mask to delete time estimate  */
+#define QMI_LOC_MASK_DELETE_IONO_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00001000) /**<  Mask to delete IONO  */
+#define QMI_LOC_MASK_DELETE_UTC_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00002000) /**<  Mask to delete UTC estimate  */
+#define QMI_LOC_MASK_DELETE_HEALTH_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00004000) /**<  Mask to delete SV health record  */
+#define QMI_LOC_MASK_DELETE_SADATA_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00008000) /**<  Mask to delete SADATA  */
+#define QMI_LOC_MASK_DELETE_RTI_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00010000) /**<  Mask to delete RTI  */
+#define QMI_LOC_MASK_DELETE_SV_NO_EXIST_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00020000) /**<  Mask to delete SV_NO_EXIST  */
+#define QMI_LOC_MASK_DELETE_FREQ_BIAS_EST_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00040000) /**<  Mask to delete frequency bias estimate  */
+typedef uint32_t qmiLocDeleteCelldbDataMaskT_v02;
+#define QMI_LOC_MASK_DELETE_CELLDB_POS_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000001) /**<  Mask to delete cell database position  */
+#define QMI_LOC_MASK_DELETE_CELLDB_LATEST_GPS_POS_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000002) /**<  Mask to delete cell database latest GPS position  */
+#define QMI_LOC_MASK_DELETE_CELLDB_OTA_POS_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000004) /**<  Mask to delete cell database OTA position  */
+#define QMI_LOC_MASK_DELETE_CELLDB_EXT_REF_POS_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000008) /**<  Mask to delete cell database external reference position  */
+#define QMI_LOC_MASK_DELETE_CELLDB_TIMETAG_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000010) /**<  Mask to delete cell database time tag  */
+#define QMI_LOC_MASK_DELETE_CELLDB_CELLID_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000020) /**<  Mask to delete cell database cell ID  */
+#define QMI_LOC_MASK_DELETE_CELLDB_CACHED_CELLID_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000040) /**<  Mask to delete cell database cached cell ID  */
+#define QMI_LOC_MASK_DELETE_CELLDB_LAST_SRV_CELL_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000080) /**<  Mask to delete cell database last service cell  */
+#define QMI_LOC_MASK_DELETE_CELLDB_CUR_SRV_CELL_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000100) /**<  Mask to delete cell database current service cell  */
+#define QMI_LOC_MASK_DELETE_CELLDB_NEIGHBOR_INFO_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000200) /**<  Mask to delete cell database neighbor information  */
+typedef uint32_t qmiLocDeleteClockInfoMaskT_v02;
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_TIME_EST_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000001) /**<  Mask to delete time estimate from clock information                 */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_FREQ_EST_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000002) /**<  Mask to delete frequency estimate from clock information                */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_WEEK_NUMBER_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000004) /**<  Mask to delete week number from clock information            */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_RTC_TIME_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000008) /**<  Mask to delete RTC time from clock information               */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_TIME_TRANSFER_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000010) /**<  Mask to delete time transfer from clock information        */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GPSTIME_EST_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000020) /**<  Mask to delete GPS time estimate from clock information         */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GLOTIME_EST_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000040) /**<  Mask to delete GLONASS time estimate from clock information   */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GLODAY_NUMBER_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000080) /**<  Mask to delete GLONASS day number from clock information          */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GLO4YEAR_NUMBER_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000100) /**<  Mask to delete GLONASS four year number from clock information   */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GLO_RF_GRP_DELAY_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000200) /**<  Mask to delete GLONASS RF GRP delay from clock information     */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_DISABLE_TT_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000400) /**<  Mask to delete disable TT from clock information   */
+typedef uint8_t qmiLocDeleteSvInfoMaskT_v02;
+#define QMI_LOC_MASK_DELETE_EPHEMERIS_V02 ((qmiLocDeleteSvInfoMaskT_v02)0x01) /**<  Delete ephemeris for the satellite  */
+#define QMI_LOC_MASK_DELETE_ALMANAC_V02 ((qmiLocDeleteSvInfoMaskT_v02)0x02) /**<  Delete almanac for the satellite  */
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint16_t gnssSvId;
+  /**<   SV ID of the satellite whose data is to be deleted. \n
+      - Type: Unsigned integer \n
+      - Range: \n
+          - For GPS:     1 to 32 \n
+          - For SBAS:    33 to 64 \n
+          - For GLONASS: 65 to 96    */
+
+  qmiLocSvSystemEnumT_v02 system;
+  /**<   Indicates to which constellation this SV belongs.
+         Valid values: \n
+           - 0x00000001 -- eQMI_LOC_SV_SYSTEM_GPS \n
+           - 0x00000002 -- eQMI_LOC_SV_SYSTEM_GALILEO \n
+           - 0x00000003 -- eQMI_LOC_SV_SYSTEM_SBAS \n
+           - 0x00000004 -- eQMI_LOC_SV_SYSTEM_COMPASS \n
+           - 0x00000005 -- eQMI_LOC_SV_SYSTEM_GLONASS
+     */
+
+  qmiLocDeleteSvInfoMaskT_v02 deleteSvInfoMask;
+  /**<   Indicates if the ephemeris or almanac for a satellite
+       is to be deleted. \n
+       Valid values: \n
+       - 0x01 -- DELETE_EPHEMERIS \n
+       - 0x02 -- DELETE_ALMANAC
+             */
+}qmiLocDeleteSvInfoStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; This command is used to delete the location engine
+                    assistance data  */
+typedef struct {
+
+  /* Mandatory */
+  /*  Delete All */
+  uint8_t deleteAllFlag;
+  /**<   Whether all assistance data is to be deleted.
+       Valid values: \n
+       - 0x01 (TRUE)  -- All assistance data is to be deleted;
+                         if this flag is set, all the other information
+                         contained in the optional fields for this
+                         message are ignored \n
+       - 0x00 (FALSE) -- The optional fields in the message are to be used
+                         to determine which data is to be deleted  */
+
+  /* Optional */
+  /*  Delete SV Info */
+  uint8_t deleteSvInfoList_valid;  /**< Must be set to true if deleteSvInfoList is being passed */
+  uint32_t deleteSvInfoList_len;  /**< Must be set to # of elements in deleteSvInfoList */
+  qmiLocDeleteSvInfoStructT_v02 deleteSvInfoList[QMI_LOC_DELETE_MAX_SV_INFO_LENGTH_V02];
+  /**<   \n List of satellites for which the assitance data is to be deleted.
+    */
+
+  /* Optional */
+  /*  Delete GNSS Data */
+  uint8_t deleteGnssDataMask_valid;  /**< Must be set to true if deleteGnssDataMask is being passed */
+  qmiLocDeleteGnssDataMaskT_v02 deleteGnssDataMask;
+  /**<   Mask for the GNSS data that is to be deleted.
+       Valid values: \n
+       - 0x00000001 -- DELETE_GPS_SVDIR \n
+       - 0x00000002 -- DELETE_GPS_SVSTEER \n
+       - 0x00000004 -- DELETE_GPS_TIME\n
+       - 0x00000008 -- DELETE_GPS_ALM_CORR \n
+       - 0x00000010 -- DELETE_GLO_SVDIR \n
+       - 0x00000020 -- DELETE_GLO_SVSTEER \n
+       - 0x00000040 -- DELETE_GLO_TIME \n
+       - 0x00000080 -- DELETE_GLO_ALM_CORR \n
+       - 0x00000100 -- DELETE_SBAS_SVDIR \n
+       - 0x00000200 -- DELETE_SBAS_SVSTEER \n
+       - 0x00000400 -- DELETE_POSITION \n
+       - 0x00000800 -- DELETE_TIME \n
+       - 0x00001000 -- DELETE_IONO \n
+       - 0x00002000 -- DELETE_UTC \n
+       - 0x00004000 -- DELETE_HEALTH \n
+       - 0x00008000 -- DELETE_SADATA \n
+       - 0x00010000 -- DELETE_RTI \n
+       - 0x00020000 -- DELETE_SV_NO_EXIST \n
+       - 0x00040000 -- DELETE_FREQ_BIAS_EST
+   */
+
+  /* Optional */
+  /*  Delete Cell Database */
+  uint8_t deleteCellDbDataMask_valid;  /**< Must be set to true if deleteCellDbDataMask is being passed */
+  qmiLocDeleteCelldbDataMaskT_v02 deleteCellDbDataMask;
+  /**<   Mask for the cell database assistance data that is to be deleted. \n
+       Valid values: \n
+       - 0x00000001 -- DELETE_CELLDB_POS \n
+       - 0x00000002 -- DELETE_CELLDB_LATEST_GPS_POS \n
+       - 0x00000004 -- DELETE_CELLDB_OTA_POS \n
+       - 0x00000008 -- DELETE_CELLDB_EXT_REF_POS \n
+       - 0x00000010 -- DELETE_CELLDB_TIMETAG \n
+       - 0x00000020 -- DELETE_CELLDB_CELLID \n
+       - 0x00000040 -- DELETE_CELLDB_CACHED_CELLID \n
+       - 0x00000080 -- DELETE_CELLDB_LAST_SRV_CELL \n
+       - 0x00000100 -- DELETE_CELLDB_CUR_SRV_CELL \n
+       - 0x00000200 -- DELETE_CELLDB_NEIGHBOR_INFO
+   */
+
+  /* Optional */
+  /*  Delete Clock Info */
+  uint8_t deleteClockInfoMask_valid;  /**< Must be set to true if deleteClockInfoMask is being passed */
+  qmiLocDeleteClockInfoMaskT_v02 deleteClockInfoMask;
+  /**<   Mask for the clock information assistance data that is to be deleted. \n
+       Valid values: \n
+       - 0x00000001 -- DELETE_CLOCK_INFO_TIME_EST \n
+       - 0x00000002 -- DELETE_CLOCK_INFO_FREQ_EST \n
+       - 0x00000004 -- DELETE_CLOCK_INFO_WEEK_NUMBER \n
+       - 0x00000008 -- DELETE_CLOCK_INFO_RTC_TIME \n
+       - 0x00000010 -- DELETE_CLOCK_INFO_TIME_TRANSFER \n
+       - 0x00000020 -- DELETE_CLOCK_INFO_GPSTIME_EST \n
+       - 0x00000040 -- DELETE_CLOCK_INFO_GLOTIME_EST \n
+       - 0x00000080 -- DELETE_CLOCK_INFO_GLODAY_NUMBER \n
+       - 0x00000100 -- DELETE_CLOCK_INFO_GLO4YEAR_NUMBER \n
+       - 0x00000200 -- DELETE_CLOCK_INFO_GLO_RF_GRP_DELAY \n
+       - 0x00000400 -- DELETE_CLOCK_INFO_DISABLE_TT
+   */
+}qmiLocDeleteAssistDataReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; This command is used to delete the location engine
+                    assistance data  */
+typedef struct {
+
+  /* Mandatory */
+  /*  Delete Assist Data Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Delete Assist Data request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocDeleteAssistDataIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Enables/disables XTRA-T session control. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Enable XTRA-T */
+  uint8_t xtraTSessionControl;
+  /**<   Whether to enable XTRA-T:\n
+       - 0x01 (TRUE) -- Enable XTRA-T \n
+       - 0x00 (FALSE) -- Disable XTRA-T  */
+}qmiLocSetXtraTSessionControlReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Enables/disables XTRA-T session control. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set XTRA-T Session Control Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set XTRA-T Session Control request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetXtraTSessionControlIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetXtraTSessionControlReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetXtraTSessionControlReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Gets the XTRA-T session control value from the location
+                    engine. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get XTRA-T Session Control Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get XTRA-T Session Control request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Enable/Disable XTRA-T */
+  uint8_t xtraTSessionControl_valid;  /**< Must be set to true if xtraTSessionControl is being passed */
+  uint8_t xtraTSessionControl;
+  /**<   Whether to enable XTRA-T:\n
+       - 0x01 (TRUE) -- Enable XTRA-T \n
+       - 0x00 (FALSE) -- Disable XTRA-T  */
+}qmiLocGetXtraTSessionControlIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint32_t wifiPositionTime;
+  /**<   Common counter (typically, the number of milliseconds since bootup).
+        This field is only to be provided if the modem and host processors are
+        synchronized. \n
+        - Type: Unsigned integer  */
+}qmiLocWifiFixTimeStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCWIFIFIXERRORCODEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_WIFI_FIX_ERROR_SUCCESS_V02 = 0, /**<  WiFi fix is successful. */
+  eQMI_LOC_WIFI_FIX_ERROR_WIFI_NOT_AVAILABLE_V02 = 1, /**<  WiFi fix failed because WiFi is not available on the device.  */
+  eQMI_LOC_WIFI_FIX_ERROR_NO_AP_FOUND_V02 = 2, /**<  WiFi fix failed because no access points were found.  */
+  eQMI_LOC_WIFI_FIX_ERROR_UNAUTHORIZED_V02 = 3, /**<  WiFi fix failed because the server denied access due to bad authorization
+   code.  */
+  eQMI_LOC_WIFI_FIX_ERROR_SERVER_UNAVAILABLE_V02 = 4, /**<  WiFi fix failed because the WiFi server was unavailable.  */
+  eQMI_LOC_WIFI_FIX_ERROR_LOCATION_CANNOT_BE_DETERMINED_V02 = 5, /**<  WiFi fix failed even though APs were found and the server could be reached.
+   This may be because the APs found are not in the database.
+ WiFi fix failed, but the cause could not be determined.  */
+  eQMI_LOC_WIFI_FIX_ERROR_UNKNOWN_V02 = 6,
+  QMILOCWIFIFIXERRORCODEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocWifiFixErrorCodeEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  double lat;
+  /**<   WiFi position latitude. \n
+        - Type: Floating point \n
+        - Units: Degrees  */
+
+  double lon;
+  /**<   WiFi position longitude. \n
+        - Type: Floating point \n
+        - Units: Degrees  */
+
+  uint16_t hepe;
+  /**<   WiFi position HEPE.\n
+        - Type: Unsigned integer \n
+        - Units: Meters  */
+
+  uint8_t numApsUsed;
+  /**<   Number of Access Points (AP) used to generate a fix. \n
+        - Type: Unsigned integer  */
+
+  qmiLocWifiFixErrorCodeEnumT_v02 fixErrorCode;
+  /**<   WiFi position error code; set to 0 if the fix succeeds. This position
+        is only used by a module if the value is 0. If there was a failure,
+        the error code provided by the WiFi positioning system can be provided
+        here.
+
+        Valid values: \n
+          - 0x00000000 -- ERROR_SUCCESS \n
+          - 0x00000001 -- ERROR_WIFI_NOT_AVAILABLE \n
+          - 0x00000002 -- ERROR_NO_AP_FOUND \n
+          - 0x00000003 -- ERROR_UNAUTHORIZED \n
+          - 0x00000004 -- ERROR_SERVER_UNAVAILABLE \n
+          - 0x00000005 -- ERROR_LOCATION_CANNOT_BE_DETERMINED \n
+          - 0x00000006 -- ERROR_UNKNOWN
+    */
+}qmiLocWifiFixPosStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+typedef uint8_t qmiLocWifiApQualifierMaskT_v02;
+#define QMI_LOC_WIFI_AP_QUALIFIER_BEING_USED_V02 ((qmiLocWifiApQualifierMaskT_v02)0x01) /**<  Access point is being used by the WPS.  */
+#define QMI_LOC_WIFI_AP_QUALIFIER_HIDDEN_SSID_V02 ((qmiLocWifiApQualifierMaskT_v02)0x02) /**<  AP does not broadcast SSID.  */
+#define QMI_LOC_WIFI_AP_QUALIFIER_PRIVATE_V02 ((qmiLocWifiApQualifierMaskT_v02)0x04) /**<  AP has encryption turned on.  */
+#define QMI_LOC_WIFI_AP_QUALIFIER_INFRASTRUCTURE_MODE_V02 ((qmiLocWifiApQualifierMaskT_v02)0x08) /**<  AP is in infrastructure mode and not in ad-hoc/unknown mode.  */
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint8_t macAddr[QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02];
+  /**<   Associated MAC address of the AP. \n
+        - Type: Array of unsigned integers \n
+        - Address length: 6
+    */
+
+  int32_t rssi;
+  /**<   Receive signal strength indicator.\n
+        - Type: Signed integer \n
+        - Units: dBm (offset with +100 dB)  */
+
+  uint16_t channel;
+  /**<   WiFi channel on which a beacon was received. \n
+        - Type: Unsigned integer  */
+
+  qmiLocWifiApQualifierMaskT_v02 apQualifier;
+  /**<   A bitmask of Boolean qualifiers for APs.
+        All unused bits in this mask must be set to 0. \n
+        Valid values: \n
+          - 0x01 -- BEING_USED \n
+          - 0x02 -- HIDDEN_SSID \n
+          - 0x04 -- PRIVATE \n
+          - 0x08 -- INFRASTRUCTURE_MODE
+          */
+}qmiLocWifiApInfoStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Injects the WiFi position. */
+typedef struct {
+
+  /* Optional */
+  /*  WiFi Fix Time */
+  uint8_t wifiFixTime_valid;  /**< Must be set to true if wifiFixTime is being passed */
+  qmiLocWifiFixTimeStructT_v02 wifiFixTime;
+  /**<   \n Time of WiFi position fix.  */
+
+  /* Optional */
+  /*  WiFi Position */
+  uint8_t wifiFixPosition_valid;  /**< Must be set to true if wifiFixPosition is being passed */
+  qmiLocWifiFixPosStructT_v02 wifiFixPosition;
+  /**<   \n WiFi position fix.  */
+
+  /* Optional */
+  /*  WiFi Access Point Information */
+  uint8_t apInfo_valid;  /**< Must be set to true if apInfo is being passed */
+  uint32_t apInfo_len;  /**< Must be set to # of elements in apInfo */
+  qmiLocWifiApInfoStructT_v02 apInfo[QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02];
+  /**<   \n AP scan list.  */
+
+  /* Optional */
+  /*  Horizontal Reliability */
+  uint8_t horizontalReliability_valid;  /**< Must be set to true if horizontalReliability is being passed */
+  qmiLocReliabilityEnumT_v02 horizontalReliability;
+  /**<   Specifies the reliability of the horizontal position.
+
+        Valid values: \n
+          - 0x00000000 -- eQMI_LOC_RELIABILITY_NOT_SET \n
+          - 0x00000001 -- eQMI_LOC_RELIABILITY_VERY_LOW \n
+          - 0x00000002 -- eQMI_LOC_RELIABILITY_LOW \n
+          - 0x00000003 -- eQMI_LOC_RELIABILITY_MEDIUM \n
+          - 0x00000004 -- eQMI_LOC_RELIABILITY_HIGH
+       */
+}qmiLocInjectWifiPositionReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Injects the WiFi position. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Inject WiFi Position Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Inject WiFi Position request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocInjectWifiPositionIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCWIFISTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_WIFI_STATUS_AVAILABLE_V02 = 1, /**<  WiFi is available.
+ WiFi is not available.  */
+  eQMI_LOC_WIFI_STATUS_UNAVAILABLE_V02 = 2,
+  QMILOCWIFISTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocWifiStatusEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Notifies the location engine of the WiFi status. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Availablility of WiFi */
+  qmiLocWifiStatusEnumT_v02 wifiStatus;
+  /**<   WiFi status information.
+
+        Valid values: \n
+          - 0x00000001 -- WIFI_STATUS_AVAILABLE \n
+          - 0x00000002 -- WIFI_STATUS_UNAVAILABLE
+   */
+}qmiLocNotifyWifiStatusReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Notifies the location engine of the WiFi status. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Status of Notify WiFi Status Request */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Notify WiFi Status request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocNotifyWifiStatusIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetRegisteredEventsReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetRegisteredEventsReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Gets the mask of the events for which a client has
+                    registered. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Registered Events Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Registered Events request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Event Registration Mask */
+  uint8_t eventRegMask_valid;  /**< Must be set to true if eventRegMask is being passed */
+  qmiLocEventRegMaskT_v02 eventRegMask;
+  /**<   Event registration mask.
+
+       Valid bitmasks: \n
+         - 0x00000001 -- POSITION_REPORT \n
+         - 0x00000002 -- GNSS_SV_INFO \n
+         - 0x00000004 -- NMEA \n
+         - 0x00000008 -- NI_NOTIFY_VERIFY_REQ \n
+         - 0x00000010 -- INJECT_TIME_REQ \n
+         - 0x00000020 -- INJECT_PREDICTED_ORBITS_REQ \n
+         - 0x00000040 -- INJECT_POSITION_REQ \n
+         - 0x00000080 -- ENGINE_STATE \n
+         - 0x00000100 -- FIX_SESSION_STATE \n
+         - 0x00000200 -- WIFI_REQ \n
+         - 0x00000400 -- SENSOR_STREAMING_READY_STATUS \n
+         - 0x00000800 -- TIME_SYNC_REQ \n
+         - 0x00001000 -- SET_SPI_STREAMING_REPORT \n
+         - 0x00002000 -- LOCATION_SERVER__CONNECTION_REQ
+             */
+}qmiLocGetRegisteredEventsIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCOPERATIONMODEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_OPER_MODE_DEFAULT_V02 = 1, /**<  Use the default engine mode.  */
+  eQMI_LOC_OPER_MODE_MSB_V02 = 2, /**<  Use the MS-based mode.  */
+  eQMI_LOC_OPER_MODE_MSA_V02 = 3, /**<  Use the MS-assisted mode.  */
+  eQMI_LOC_OPER_MODE_STANDALONE_V02 = 4, /**<  Use Standalone mode.
+ Use cell ID. For 1x, this mode corresponds to
+       AFLT.  */
+  eQMI_LOC_OPER_MODE_CELL_ID_V02 = 5,
+  QMILOCOPERATIONMODEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocOperationModeEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Tells the engine to use the specified operation mode while
+                    making the position fixes. This command is not to be used
+                    by multiple clients concurrently. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Operation Mode */
+  qmiLocOperationModeEnumT_v02 operationMode;
+  /**<   Preferred operation mode.
+
+       Valid values: \n
+         - 0x00000001 -- OPER_MODE_DEFAULT \n
+         - 0x00000002 -- OPER_MODE_MSB \n
+         - 0x00000003 -- OPER_MODE_MSA \n
+         - 0x00000004 -- OPER_MODE_STANDALONE \n
+         - 0x00000005 -- OPER_MODE_CELL_ID
+   */
+}qmiLocSetOperationModeReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Tells the engine to use the specified operation mode while
+                    making the position fixes. This command is not to be used
+                    by multiple clients concurrently. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set Operation Mode Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set Operation Mode request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetOperationModeIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetOperationModeReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetOperationModeReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Gets the current operation mode from the engine. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Operation Mode Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Operation Mode request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Operation Mode */
+  uint8_t operationMode_valid;  /**< Must be set to true if operationMode is being passed */
+  qmiLocOperationModeEnumT_v02 operationMode;
+  /**<   Current operation mode.
+
+       Valid values: \n
+         - 0x00000001 -- OPER_MODE_DEFAULT \n
+         - 0x00000002 -- OPER_MODE_MSB \n
+         - 0x00000003 -- OPER_MODE_MSA \n
+         - 0x00000004 -- OPER_MODE_STANDALONE \n
+         - 0x00000005 -- OPER_MODE_CELL_ID
+   */
+}qmiLocGetOperationModeIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Used by the control point to set the SPI status, which
+                    indicates whether the device is stationary. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Stationary Status */
+  uint8_t stationary;
+  /**<   Whether the device is stationary:\n
+       - 0x00 (FALSE) -- Device is not stationary \n
+       - 0x01 (TRUE)  -- Device is stationary  */
+
+  /* Optional */
+  /*  Confidence */
+  uint8_t confidenceStationary_valid;  /**< Must be set to true if confidenceStationary is being passed */
+  uint8_t confidenceStationary;
+  /**<   Confidence in the Stationary state expressed as a percentage.\n
+       - Type: Unsigned integer \n
+       - Range: 0 to 100  */
+}qmiLocSetSpiStatusReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to set the SPI status, which
+                    indicates whether the device is stationary. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Status of SPI Status Request */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the SPI Status request. \n
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetSpiStatusIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+typedef uint8_t qmiLocSensorDataFlagMaskT_v02;
+#define QMI_LOC_SENSOR_DATA_FLAG_SIGN_REVERSAL_V02 ((qmiLocSensorDataFlagMaskT_v02)0x01) /**<  Bitmask to specify that a sign reversal is required while interpreting
+     the sensor data.  */
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint16_t timeOffset;
+  /**<   Sample time offset. This time offset must be
+       relative to the sensor time of the first sample.\n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds  */
+
+  float xAxis;
+  /**<   Sensor x-axis sample. \n
+       - Type: Floating point \n
+       - Units Accelerometer: ( (meters)/(seconds^2) ) \n
+       - Units Gyrometer:     ( (rads)/(seconds^2) )  */
+
+  float yAxis;
+  /**<   Sensor y-axis sample. \n
+       - Type: Floating point \n
+       - Units Accelerometer: ( (meters)/(seconds^2) ) \n
+       - Units Gyrometer:     ( (rads)/(seconds^2) )  */
+
+  float zAxis;
+  /**<   Sensor z-axis sample. \n
+       - Type: Floating point \n
+       - Units Accelerometer: ( (meters)/(seconds^2) ) \n
+       - Units Gyrometer:     ( (rads)/(seconds^2) )  */
+}qmiLoc3AxisSensorSampleStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint32_t timeOfFirstSample;
+  /**<   Denotes a full 32-bit time tag of the first (oldest) sample in this
+       message. \n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds  */
+
+  qmiLocSensorDataFlagMaskT_v02 flags;
+  /**<   Flags to indicate any deviation from the default measurement
+       assumptions. All unused bits in this field must be set to 0.
+
+       Valid bitmasks: \n
+         - 0x01 -- SIGN REVERSAL
+         */
+
+  uint32_t sensorData_len;  /**< Must be set to # of elements in sensorData */
+  qmiLoc3AxisSensorSampleStructT_v02 sensorData[QMI_LOC_SENSOR_DATA_MAX_SAMPLES_V02];
+  /**<   Variable length array to specify sensor samples. \n
+       - Maximum length of the array: 50                              */
+}qmiLoc3AxisSensorSampleListStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Used by the control point to inject sensor data into the
+                    GNSS location engine. */
+typedef struct {
+
+  /* Optional */
+  /*  Opaque Identifier */
+  uint8_t opaqueIdentifier_valid;  /**< Must be set to true if opaqueIdentifier is being passed */
+  uint32_t opaqueIdentifier;
+  /**<   An opaque identifier that is sent in by the client that will be echoed
+       in the indication so the client can relate the indication to the
+       request. \n
+       - Type: Unsigned integer  */
+
+  /* Optional */
+  /*  3-Axis Accelerometer Data */
+  uint8_t threeAxisAccelData_valid;  /**< Must be set to true if threeAxisAccelData is being passed */
+  qmiLoc3AxisSensorSampleListStructT_v02 threeAxisAccelData;
+  /**<   \n Accelerometer sensor samples.  */
+
+  /* Optional */
+  /*  3-Axis Gyrometer Data */
+  uint8_t threeAxisGyroData_valid;  /**< Must be set to true if threeAxisGyroData is being passed */
+  qmiLoc3AxisSensorSampleListStructT_v02 threeAxisGyroData;
+  /**<   \n Gyrometer sensor samples.  */
+}qmiLocInjectSensorDataReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to inject sensor data into the
+                    GNSS location engine. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Inject Sensor Data Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Inject Sensor Data request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Opaque Identifier */
+  uint8_t opaqueIdentifier_valid;  /**< Must be set to true if opaqueIdentifier is being passed */
+  uint32_t opaqueIdentifier;
+  /**<   An opaque identifier that was sent in by the client echoed
+       so the client can relate the indication to the request. \n
+       - Type: Unsigned integer  */
+
+  /* Optional */
+  /*  Accelerometer Samples Accepted */
+  uint8_t threeAxisAccelSamplesAccepted_valid;  /**< Must be set to true if threeAxisAccelSamplesAccepted is being passed */
+  uint8_t threeAxisAccelSamplesAccepted;
+  /**<   This field lets the client know how many 3-axis accelerometer samples
+       were accepted.  */
+
+  /* Optional */
+  /*  Gyrometer Samples Accepted */
+  uint8_t threeAxisGyroSamplesAccepted_valid;  /**< Must be set to true if threeAxisGyroSamplesAccepted is being passed */
+  uint8_t threeAxisGyroSamplesAccepted;
+  /**<   This field lets the client know how many 3-axis gyrometer samples were
+       accepted.  */
+}qmiLocInjectSensorDataIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Used by the control point to inject time sync data. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Reference Time Sync Counter */
+  uint32_t refCounter;
+  /**<   Must be set to the value that was sent to the control point when the
+       GNSS location engine requested time sync injection. \n
+       - Type: Unsigned integer  */
+
+  /* Mandatory */
+  /*  Sensor Receive Time */
+  uint32_t sensorProcRxTime;
+  /**<   The value of the sensor time when the control point received the
+       Time Sync Inject request from the GNSS location engine.
+
+       Must be monotonically increasing, jitter @latexonly $\leq$ @endlatexonly 1
+       millisecond, never stopping until the process is rebooted.\n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds  */
+
+  /* Mandatory */
+  /*  Sensor Transmit Time */
+  uint32_t sensorProcTxTime;
+  /**<   The value of the sensor time when the control point injects this message
+       for use by the GNSS location engine.
+
+       Must be monotonically increasing, jitter @latexonly $\leq$ @endlatexonly 1
+       millisecond, never stopping until the process is rebooted.\n
+       - Type: Unsigned integer \n
+       - Units: Milliseconds  */
+}qmiLocInjectTimeSyncDataReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to inject time sync data. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Inject Time Sync Data Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Inject Time Sync Data request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocInjectTimeSyncDataIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCCRADLEMOUNTSTATEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_CRADLE_STATE_NOT_MOUNTED_V02 = 0, /**<  Device is mounted on the cradle */
+  eQMI_LOC_CRADLE_STATE_MOUNTED_V02 = 1, /**<  Device is not mounted on the cradle
+ Unknown cradle mount state */
+  eQMI_LOC_CRADLE_STATE_UNKNOWN_V02 = 2,
+  QMILOCCRADLEMOUNTSTATEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocCradleMountStateEnumT_v02;
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetCradleMountConfigReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetCradleMountConfigReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to get the current
+                    cradle mount configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Cradle Mount Config Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Cradle Mount Configuration request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Cradle Mount State */
+  uint8_t cradleMountState_valid;  /**< Must be set to true if cradleMountState is being passed */
+  qmiLocCradleMountStateEnumT_v02 cradleMountState;
+  /**<   Cradle Mount state set by the control point.
+
+       Valid values: \n
+         - 0x00000000 -- CRADLE_STATE_NOT_MOUNTED \n
+         - 0x00000001 -- CRADLE_STATE_MOUNTED \n
+         - 0x00000002 -- CRADLE_STATE_UNKNOWN
+          */
+
+  /* Optional */
+  /*  Cradle Mount Confidence */
+  uint8_t confidenceCradleMountState_valid;  /**< Must be set to true if confidenceCradleMountState is being passed */
+  uint8_t confidenceCradleMountState;
+  /**<   Confidence of the Cradle Mount state expressed as a percentage.\n
+       - Type: Unsigned integer \n
+       - Range: 0 to 100  */
+}qmiLocGetCradleMountConfigIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Used by the control point to set the current
+                    cradle mount configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Cradle Mount State */
+  qmiLocCradleMountStateEnumT_v02 cradleMountState;
+  /**<   Cradle Mount state set by the control point.
+
+       Valid values: \n
+         - 0x00000000 -- CRADLE_STATE_NOT_MOUNTED \n
+         - 0x00000001 -- CRADLE_STATE_MOUNTED \n
+         - 0x00000002 -- CRADLE_STATE_UNKNOWN          */
+
+  /* Optional */
+  /*  Cradle Mount Confidence */
+  uint8_t confidenceCradleMountState_valid;  /**< Must be set to true if confidenceCradleMountState is being passed */
+  uint8_t confidenceCradleMountState;
+  /**<   Confidence in the Cradle Mount state expressed as a percentage.\n
+       - Type: Unsigned integer \n
+       - Range: 0 to 100  */
+}qmiLocSetCradleMountConfigReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to set the current
+                    cradle mount configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set Cradle Mount Config Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set Cradle Mount Configuration request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetCradleMountConfigIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCEXTERNALPOWERCONFIGENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_EXTERNAL_POWER_NOT_CONNECTED_V02 = 0, /**<  Device is not connected to an external power source.  */
+  eQMI_LOC_EXTERNAL_POWER_CONNECTED_V02 = 1, /**<  Device is connected to an external power source.
+ Unknown external power state.  */
+  eQMI_LOC_EXTERNAL_POWER_UNKNOWN_V02 = 2,
+  QMILOCEXTERNALPOWERCONFIGENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocExternalPowerConfigEnumT_v02;
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetExternalPowerConfigReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetExternalPowerConfigReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to get the current
+                    external power configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Ext Power Config Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get External Power Configuration request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  External Power State */
+  uint8_t externalPowerState_valid;  /**< Must be set to true if externalPowerState is being passed */
+  qmiLocExternalPowerConfigEnumT_v02 externalPowerState;
+  /**<   Power state; injected by the control point.
+
+       Valid values: \n
+         - 0x00000000 -- EXTERNAL_POWER_NOT_CONNECTED \n
+         - 0x00000001 -- EXTERNAL_POWER_CONNECTED \n
+         - 0x00000002 -- EXTERNAL_POWER_UNKNOWN
+     */
+}qmiLocGetExternalPowerConfigIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Used by the control point to set the current
+                    external power configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  External Power State */
+  qmiLocExternalPowerConfigEnumT_v02 externalPowerState;
+  /**<   Power state; injected by the control point.
+
+       Valid values: \n
+         - 0x00000000 -- EXTERNAL_POWER_NOT_CONNECTED \n
+         - 0x00000001 -- EXTERNAL_POWER_CONNECTED \n
+         - 0x00000002 -- EXTERNAL_POWER_UNKNOWN
+     */
+}qmiLocSetExternalPowerConfigReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to set the current
+                    external power configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set Ext Power Config Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set External Power Configuration request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetExternalPowerConfigIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCSERVERPDNENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4_V02 = 0x01, /**<  IPV4 PDN type.  */
+  eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV6_V02 = 0x02, /**<  IPV6 PDN type.  */
+  eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4V6_V02 = 0x03, /**<  IPV4V6 PDN type.
+ PPP PDN type.  */
+  eQMI_LOC_APN_PROFILE_PDN_TYPE_PPP_V02 = 0x04,
+  QMILOCSERVERPDNENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocServerPDNEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  qmiLocServerPDNEnumT_v02 pdnType;
+  /**<   PDN type of the Access Point Name (APN) profile.
+
+       Valid values: \n
+         - 0x00000001 -- PDN_TYPE_IPV4 \n
+         - 0x00000002 -- PDN_TYPE_IPV6 \n
+         - 0x00000003 -- PDN_TYPE_IPV4V6 \n
+         - 0x00000004 -- PDN_TYPE_PPP
+   */
+
+  char apnName[QMI_LOC_MAX_APN_NAME_LENGTH_V02 + 1];
+  /**<   APN name. \n
+       - Type: NULL-terminated string \n
+       - Maximum string length (including NULL terminator): 101
+   */
+}qmiLocApnProfilesStructT_v02;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCSERVERREQSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_SERVER_REQ_STATUS_SUCCESS_V02 = 1, /**<  Location server request was successful.
+ Location server request failed. */
+  eQMI_LOC_SERVER_REQ_STATUS_FAILURE_V02 = 2,
+  QMILOCSERVERREQSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocServerReqStatusEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Used by the control point to inform the service about the
+                    status of the location server connection request that the
+                    service may have sent via the
+                    QMI_LOC_EVENT_LOCATION_SERVER_REQ_IND event. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Connection Handle */
+  uint32_t connHandle;
+  /**<   Connection handle that the service specified in the
+       Location Server Connection request event. \n
+       - Type: Unsigned integer  */
+
+  /* Mandatory */
+  /*  Request Type */
+  qmiLocServerRequestEnumT_v02 requestType;
+  /**<   Type of connection request service that was specified in the
+       Location Server Connection Request event.
+
+       Valid values: \n
+         - 0x00000001 -- OPEN \n
+         - 0x00000002 -- CLOSE
+   */
+
+  /* Mandatory */
+  /*  Connection Status */
+  qmiLocServerReqStatusEnumT_v02 statusType;
+  /**<   Status of the Connection request.
+
+       Valid values: \n
+         - 0x00000001 -- STATUS_SUCCESS = 1 \n
+         - 0x00000002 -- STATUS_FAILURE = 2
+
+   */
+
+  /* Optional */
+  /*  APN Profile */
+  uint8_t apnProfile_valid;  /**< Must be set to true if apnProfile is being passed */
+  qmiLocApnProfilesStructT_v02 apnProfile;
+  /**<   \n APN profile information is present only when requestType
+       is OPEN and statusType is SUCCESS.  */
+}qmiLocInformLocationServerConnStatusReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to inform the service about the
+                    status of the location server connection request that the
+                    service may have sent via the
+                    QMI_LOC_EVENT_LOCATION_SERVER_REQ_IND event. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Status of Inform Loc Server Conn Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Inform Location Server Connection Status request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocInformLocationServerConnStatusIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCVXVERSIONENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_VX_VERSION_V1_ONLY_V02 = 1, /**<  V1 VX version.
+ V2 VX version.  */
+  eQMI_LOC_VX_VERSION_V2_ONLY_V02 = 2,
+  QMILOCVXVERSIONENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocVxVersionEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCSUPLVERSIONENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_SUPL_VERSION_1_0_V02 = 1, /**<  SUPL version 1.0.
+ SUPL version 2.0.  */
+  eQMI_LOC_SUPL_VERSION_2_0_V02 = 2,
+  QMILOCSUPLVERSIONENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocSuplVersionEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Used by the control point to configure parameters stored
+                    in the nonvolatile memory. */
+typedef struct {
+
+  /* Optional */
+  /*  SUPL Security */
+  uint8_t suplSecurity_valid;  /**< Must be set to true if suplSecurity is being passed */
+  uint8_t suplSecurity;
+  /**<   Indicates whether SUPL security is enabled. \n
+       - 0x01 (TRUE) -- SUPL security is enabled \n
+       - 0x00 (FALSE) -- SUPL security is disabled  */
+
+  /* Optional */
+  /*  VX Version */
+  uint8_t vxVersion_valid;  /**< Must be set to true if vxVersion is being passed */
+  qmiLocVxVersionEnumT_v02 vxVersion;
+  /**<   VX version.
+
+       Valid values: \n
+         - 0x00000001 -- VX_VERSION_V1_ONLY \n
+         - 0x00000002 -- VX_VERSION_V2_ONLY
+   */
+
+  /* Optional */
+  /*  SUPL Version */
+  uint8_t suplVersion_valid;  /**< Must be set to true if suplVersion is being passed */
+  qmiLocSuplVersionEnumT_v02 suplVersion;
+  /**<   SUPL version.
+
+        Valid values: \n
+         - 0x00000001 -- SUPL_VERSION_1_0 \n
+         - 0x00000002 -- SUPL_VERSION_2_0
+   */
+}qmiLocSetProtocolConfigParametersReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+typedef uint64_t qmiLocProtocolConfigParamMaskT_v02;
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_SECURITY_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x00000001) /**<  Mask for the SUPL security configuration parameter.  */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_VX_VERSION_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x00000002) /**<  Mask for the VX version configuration parameter.  */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_VERSION_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x00000004) /**<  Mask for the SUPL version configuration parameter.       */
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to configure parameters stored
+                    in the nonvolatile memory. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set Config Params Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set Configuration Parameters request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Failed Parameters */
+  uint8_t failedProtocolConfigParamMask_valid;  /**< Must be set to true if failedProtocolConfigParamMask is being passed */
+  qmiLocProtocolConfigParamMaskT_v02 failedProtocolConfigParamMask;
+  /**<   This field is sent only if the status is not a success. And if it is
+       not successful, this field will identify the parameters that were not
+       set successfully.
+
+       Valid bitmasks: \n
+         - 0x0000000000000001 -- CONFIG_PARAM_MASK_SUPL_SECURITY \n
+         - 0x0000000000000002 -- CONFIG_PARAM_MASK_VX_VERSION \n
+         - 0x0000000000000004 -- CONFIG_PARAM_MASK_SUPL_VERSION
+   */
+}qmiLocSetProtocolConfigParametersIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Used by the control point to get the configuration
+                    parameters stored in the nonvolatile memory. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Config Parameters */
+  qmiLocProtocolConfigParamMaskT_v02 getProtocolConfigParamMask;
+  /**<   Mask denoting the configuration parameters to be retrieved.
+
+       Valid bitmasks: \n
+         - 0x0000000000000001 -- CONFIG_PARAM_MASK_SUPL_SECURITY \n
+         - 0x0000000000000002 -- CONFIG_PARAM_MASK_VX_VERSION \n
+         - 0x0000000000000004 -- CONFIG_PARAM_MASK_SUPL_VERSION
+   */
+}qmiLocGetProtocolConfigParametersReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to get the configuration
+                    parameters stored in the nonvolatile memory. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Config Params Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Configuration Parameters request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+     */
+
+  /* Optional */
+  /*  SUPL Security */
+  uint8_t suplSecurity_valid;  /**< Must be set to true if suplSecurity is being passed */
+  uint8_t suplSecurity;
+  /**<   Indicates whether SUPL security is enabled. \n
+       - 0x01 (TRUE) -- SUPL security is enabled \n
+       - 0x00 (FALSE) -- SUPL security is disabled  */
+
+  /* Optional */
+  /*  VX Version */
+  uint8_t vxVersion_valid;  /**< Must be set to true if vxVersion is being passed */
+  qmiLocVxVersionEnumT_v02 vxVersion;
+  /**<   VX version.
+
+       Valid values: \n
+         - 0x00000001 -- VX_VERSION_V1_ONLY \n
+         - 0x00000002 -- VX_VERSION_V2_ONLY
+   */
+
+  /* Optional */
+  /*  SUPL Version */
+  uint8_t suplVersion_valid;  /**< Must be set to true if suplVersion is being passed */
+  qmiLocSuplVersionEnumT_v02 suplVersion;
+  /**<   SUPL version.
+
+        Valid values: \n
+         - 0x00000001 -- SUPL_VERSION_1_0 \n
+         - 0x00000002 -- SUPL_VERSION_2_0
+   */
+}qmiLocGetProtocolConfigParametersIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCSENSORSCONTROLCONFIGSENSORUSEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_ENABLE_V02 = 0, /**<  Sensors data should be requested whenever a position request is
+       received. If sensor data are injected, the positioning engine
+       attempts to improve the heading and positioning performance using sensors.
+       This is the default.
+
+ Inertial sensors are not to be used to aid heading and position
+       improvement.  */
+  eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_DISABLE_V02 = 1,
+  QMILOCSENSORSCONTROLCONFIGSENSORUSEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocSensorsControlConfigSensorUseEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Sets the sensor control configuration. */
+typedef struct {
+
+  /* Optional */
+  /*  Sensors Usage */
+  uint8_t sensorsUsage_valid;  /**< Must be set to true if sensorsUsage is being passed */
+  qmiLocSensorsControlConfigSensorUseEnumT_v02 sensorsUsage;
+  /**<   Controls how sensors are used to aid heading and positioning
+       performance.
+
+       Valid values:\n
+        - 0x00000000 -- SENSORS USE ENABLED: \n
+            Sensors data is to be requested whenever a position request is
+            received. If sensors data is injected, the GNSS location engine
+            attempts to improve the heading and positioning performance using
+            sensors. This is the default. \n
+        - 0x00000001 -- SENSORS USE DISABLED: \n
+            Inertial sensors are not to be used to aid in heading and
+            position improvement.
+   */
+}qmiLocSetSensorControlConfigReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Sets the sensor control configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set Sensor Control Config Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set Sensor Control Configuration request.
+
+       Valid values: \n
+          - 0x00000000 -- SUCCESS \n
+          - 0x00000001 -- GENERAL_FAILURE \n
+          - 0x00000002 -- UNSUPPORTED \n
+          - 0x00000003 -- INVALID_PARAMETER \n
+          - 0x00000004 -- ENGINE_BUSY \n
+          - 0x00000005 -- PHONE_OFFLINE \n
+          - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetSensorControlConfigIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetSensorControlConfigReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetSensorControlConfigReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Retrieves the current sensor control configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Sensor Control Config Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Sensors Control Configuration request.
+
+       Valid values: \n
+          - 0x00000000 -- SUCCESS \n
+          - 0x00000001 -- GENERAL_FAILURE \n
+          - 0x00000002 -- UNSUPPORTED \n
+          - 0x00000003 -- INVALID_PARAMETER \n
+          - 0x00000004 -- ENGINE_BUSY \n
+          - 0x00000005 -- PHONE_OFFLINE \n
+          - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Sensors Usage */
+  uint8_t sensorsUsage_valid;  /**< Must be set to true if sensorsUsage is being passed */
+  qmiLocSensorsControlConfigSensorUseEnumT_v02 sensorsUsage;
+  /**<   Controls how sensors are used to aid the heading and positioning
+       performance.
+
+       Valid values:\n
+        - 0x00000000 -- SENSORS USE ENABLED: \n
+            Sensors data is to be requested whenever a position request is
+            received. If sensors data is injected, the GNSS location engine
+            attempts to improve the heading and positioning performance using
+            sensors. This is the default. \n
+        - 0x00000001 -- SENSORS USE DISABLED: \n
+            Inertial sensors are not to be used to aid in the heading and
+            position improvement.
+   */
+}qmiLocGetSensorControlConfigIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Sets the properties specific to the type of sensor used.
+                    The control point must set sensor properties before they can be
+                    used to aid in heading and positioning performance improvement.
+   */
+typedef struct {
+
+  /* Optional */
+  /*  Gyro Bias Variance */
+  uint8_t gyroBiasVarianceRandomWalk_valid;  /**< Must be set to true if gyroBiasVarianceRandomWalk is being passed */
+  float gyroBiasVarianceRandomWalk;
+  /**<   Specifies the gyro bias random walk parameter as a positive
+       floating-point value. This value does not have any internal defaults.
+       The gyro bias variance random walk parameter is derived from either the
+       sensors data sheet or a sensors conformance test. \n
+       - Units: radians^2/second^4
+
+   */
+}qmiLocSetSensorPropertiesReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Sets the properties specific to the type of sensor used.
+                    The control point must set sensor properties before they can be
+                    used to aid in heading and positioning performance improvement.
+   */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set Sensor Properties Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set Sensor Properties request.
+
+       Valid values: \n
+          - 0x00000000 -- SUCCESS \n
+          - 0x00000001 -- GENERAL_FAILURE \n
+          - 0x00000002 -- UNSUPPORTED \n
+          - 0x00000003 -- INVALID_PARAMETER \n
+          - 0x00000004 -- ENGINE_BUSY \n
+          - 0x00000005 -- PHONE_OFFLINE \n
+          - 0x00000006 -- LOC_TIMEOUT
+   */
+}qmiLocSetSensorPropertiesIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetSensorPropertiesReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetSensorPropertiesReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Retrieves the current sensor properties. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Sensor Properties Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Sensors Properties request.
+
+       Valid values: \n
+          - 0x00000000 -- SUCCESS \n
+          - 0x00000001 -- GENERAL_FAILURE \n
+          - 0x00000002 -- UNSUPPORTED \n
+          - 0x00000003 -- INVALID_PARAMETER \n
+          - 0x00000004 -- ENGINE_BUSY \n
+          - 0x00000005 -- PHONE_OFFLINE \n
+          - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Gyro Bias Variance */
+  uint8_t gyroBiasVarianceRandomWalk_valid;  /**< Must be set to true if gyroBiasVarianceRandomWalk is being passed */
+  float gyroBiasVarianceRandomWalk;
+  /**<   Specifies the gyro bias random walk parameter as a positive
+       floating-point value. This value does not have any internal defaults.
+       The gyro bias variance random walk parameter is derived from either the
+       sensors data sheet or a sensors conformance test. \n
+       - Units: radians^2/seconds^4
+
+   */
+}qmiLocGetSensorPropertiesIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_enums
+    @{
+  */
+typedef enum {
+  QMILOCSENSORPERFORMANCECONTROLMODEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  eQMI_LOC_SENSOR_PERFORMANCE_CONTROL_MODE_AUTO_V02 = 0, /**<  Sensors usage is to be determined by the GNSS location engine.
+       This mode can optimize power consumption and give a
+       power-balanced positioning and heading enhancement using
+       inertial sensors
+ Sensors usage is to be forced ON.
+       This mode can be requested by the control point when
+       power consumption is not a restriction to the use of
+       inertial sensors.       */
+  eQMI_LOC_SENSOR_PERFORMANCE_CONTROL_MODE_FORCED_V02 = 1,
+  QMILOCSENSORPERFORMANCECONTROLMODEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}qmiLocSensorPerformanceControlModeEnumT_v02;
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Provides fine-grained control of sensor based positioning
+                    performance */
+typedef struct {
+
+  /* Optional */
+  /*  Sensor Performance Control Mode */
+  uint8_t performanceControlMode_valid;  /**< Must be set to true if performanceControlMode is being passed */
+  qmiLocSensorPerformanceControlModeEnumT_v02 performanceControlMode;
+  /**<   Controls when sensors data is requested during GNSS fix processing.
+       This field is relevant only when sensors have been enabled using the
+       sensors control configuration.
+
+       Valid values: \n
+       - 0x00000000 -- AUTO: \n
+         The GNSS location engine can decide when to request sensor data injection
+         based on internal criteria. This is the default. \n
+       - 0x00000001 -- FORCED: \n
+         The GNSS location engine must request use of sensors every time the GNSS
+         location engine turns on.
+   */
+
+  /* Optional */
+  /*  Accelerometer Sampling Specification */
+  uint8_t accelSamplingSpec_valid;  /**< Must be set to true if accelSamplingSpec is being passed */
+  qmiLocSensorControlConfigSamplingSpecStructT_v02 accelSamplingSpec;
+  /**<   \n Sets the nominal rate at which the GNSS location engine is to request
+       acceleration data. The sensor data rate is specified in terms of the nominal
+       number of samples per batch and the number of batches per second.
+       However, the final control of the actual requested rate resides with
+       the Sensors Manager Module/GNSS location engine.
+   */
+
+  /* Optional */
+  /*  Gyrometer Sampling Specification */
+  uint8_t gyroSamplingSpec_valid;  /**< Must be set to true if gyroSamplingSpec is being passed */
+  qmiLocSensorControlConfigSamplingSpecStructT_v02 gyroSamplingSpec;
+  /**<   \n Sets the nominal rate at which the GNSS location engine is to request
+       gyro data. The sensor data rate is specified in terms of the nominal number of
+       samples per batch and the number of batches per second.
+       However, the final control of the actual requested rate resides with
+       the Sensors Manager Module/GNSS location engine.
+   */
+}qmiLocSetSensorPerformanceControlConfigReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+typedef uint32_t qmiLocSensorPerformanceControlConfigFailureMaskT_v02;
+#define QMI_LOC_SENSOR_PERFORMANCE_CONTROL_CONFIG_PARAM_MASK_PERFORMANCE_MODE_V02 ((qmiLocSensorPerformanceControlConfigFailureMaskT_v02)0x00000001) /**<  Failed to set the performance mode.  */
+#define QMI_LOC_SENSOR_PERFORMANCE_CONTROL_CONFIG_PARAM_MASK_ACCEL_SAMPLING_SPEC_V02 ((qmiLocSensorPerformanceControlConfigFailureMaskT_v02)0x00000002) /**<  Failed to set the accelerometer sampling specification.  */
+#define QMI_LOC_SENSOR_PERFORMANCE_CONTROL_CONFIG_PARAM_MASK_GYRO_SAMPLING_SPEC_V02 ((qmiLocSensorPerformanceControlConfigFailureMaskT_v02)0x00000004) /**<  Failed to set the gyroscope sampling specification.  */
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Provides fine-grained control of sensor based positioning
+                    performance */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set Sensor Perf Control Config Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set Sensor Performance Control Configuration request. \n
+       Valid values: \n
+          - 0x00000000 -- SUCCESS \n
+          - 0x00000001 -- GENERAL_FAILURE \n
+          - 0x00000002 -- UNSUPPORTED \n
+          - 0x00000003 -- INVALID_PARAMETER \n
+          - 0x00000004 -- ENGINE_BUSY \n
+          - 0x00000005 -- PHONE_OFFLINE \n
+          - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Failed Configuration */
+  uint8_t failedConfiguration_valid;  /**< Must be set to true if failedConfiguration is being passed */
+  qmiLocSensorPerformanceControlConfigFailureMaskT_v02 failedConfiguration;
+  /**<   This field is sent only if the status is not a success.
+       When sent, this field identifies which configuration failed. \n
+       Valid bitmasks: \n
+       - 0x0000000000000001 -- PERFORMANCE_MODE \n
+       - 0x0000000000000002 -- ACCEL_SAMPLING_SPEC \n
+       - 0x0000000000000004 -- GYRO_SAMPLING_SPEC
+   */
+}qmiLocSetSensorPerformanceControlConfigIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*
+ * qmiLocGetSensorPerformanceControlConfigReqMsgT is empty
+ * typedef struct {
+ * }qmiLocGetSensorPerformanceControlConfigReqMsgT_v02;
+ */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Retrieves the current sensor performance control
+                    configuration. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Sensor Perf Control Config Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Sensor Performance Control Configuration request. \n
+       Valid values: \n
+          - 0x00000000 -- SUCCESS \n
+          - 0x00000001 -- GENERAL_FAILURE \n
+          - 0x00000002 -- UNSUPPORTED \n
+          - 0x00000003 -- INVALID_PARAMETER \n
+          - 0x00000004 -- ENGINE_BUSY \n
+          - 0x00000005 -- PHONE_OFFLINE \n
+          - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Performance Control Mode */
+  uint8_t performanceControlMode_valid;  /**< Must be set to true if performanceControlMode is being passed */
+  qmiLocSensorPerformanceControlModeEnumT_v02 performanceControlMode;
+  /**<   Controls when sensor data is requested during GNSS fix processing.
+       This field is relevant only when sensors have been enabled using the
+       sensor control configuration.
+
+       Valid values: \n
+       - 0x00000000 -- AUTO: \n
+         The GNSS location engine can decide when to request sensor data injection
+         based on internal criteria. This is the default. \n
+       - 0x0000001 -- FORCED: \n
+         The GNSS location engine must request use of the sensors every time the GNSS
+         location engine turns on.
+   */
+
+  /* Optional */
+  /*  Accelerometer Sampling Specification */
+  uint8_t accelSamplingSpec_valid;  /**< Must be set to true if accelSamplingSpec is being passed */
+  qmiLocSensorControlConfigSamplingSpecStructT_v02 accelSamplingSpec;
+  /**<   \n Sets the nominal rate at which the GNSS location engine is to request
+       acceleration data. The sensor data rate is specified in terms of the nominal number of
+       samples per batch and the number of batches per second.
+       However, the final control of the actual requested rate resides with
+       the Sensors Manager Module/GNSS location engine.
+   */
+
+  /* Optional */
+  /*  Gyrometer Sampling Specification */
+  uint8_t gyroSamplingSpec_valid;  /**< Must be set to true if gyroSamplingSpec is being passed */
+  qmiLocSensorControlConfigSamplingSpecStructT_v02 gyroSamplingSpec;
+  /**<   \n Sets the nominal rate at which the GNSS location engine is to request
+       gyro data. The sensor data rate is specified in terms of the nominal number of
+       samples per batch and the number of batches per second.
+       However, the final control of the actual requested rate resides with
+       the Sensors Manager Module/GNSS location engine.
+   */
+}qmiLocGetSensorPerformanceControlConfigIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Inject a SUPL certificate to be used in AGNSS sessions. */
+typedef struct {
+
+  /* Mandatory */
+  /*  SUPL Certificate Id */
+  uint8_t suplCertId;
+  /**<   Certificate Id of the Supl Certificate
+       Type: Unsigned Integer
+       Units: Bytes
+       Range: 0-9   */
+
+  /* Mandatory */
+  /*  SUPL certificate Data */
+  uint32_t suplCertData_len;  /**< Must be set to # of elements in suplCertData */
+  uint8_t suplCertData[QMI_LOC_MAX_SUPL_CERT_LENGTH_V02];
+  /**<   The supl Certificate contents
+       Type: Array of bytes.
+        - Maximum certificate size : 2000 bytes  */
+}qmiLocInjectSuplCertificateReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Inject a SUPL certificate to be used in AGNSS sessions. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Supl Certificate Injection Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the inject SUPL certificate request. \n
+
+       Valid Values:
+          - 0x00000000 -- SUCCESS\n
+          - 0x00000001 -- GENERAL_FAILURE\n
+          - 0x00000002 -- UNSUPPORTED\n
+          - 0x00000003 -- INVALID_PARAMETER\n
+          - 0x00000004 -- ENGINE_BUSY\n
+          - 0x00000005 -- PHONE_OFFLINE\n
+          - 0x00000006 -- LOC_TIMEOUT\n
+   */
+}qmiLocInjectSuplCertificateIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Delete a SUPL certificate.  */
+typedef struct {
+
+  /* Optional */
+  /*  SUPL Certificate Id */
+  uint8_t suplCertId_valid;  /**< Must be set to true if suplCertId is being passed */
+  uint8_t suplCertId;
+  /**<   Certificate Id of the Supl Certificate to be deleted
+       Type: Unsigned Integer \n
+       Units: Bytes \n
+       Range: 0-9 \n
+       If suplCertId is not specified then
+       "all" supl certificates will be deleted.  */
+}qmiLocDeleteSuplCertificateReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Delete a SUPL certificate.  */
+typedef struct {
+
+  /* Mandatory */
+  /*  SUPL certifcate Deletion Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the delete SUPL certificate request. \n
+
+       Valid Values:
+          - 0x00000000 -- SUCCESS\n
+          - 0x00000001 -- GENERAL_FAILURE\n
+          - 0x00000002 -- UNSUPPORTED\n
+          - 0x00000003 -- INVALID_PARAMETER\n
+          - 0x00000004 -- ENGINE_BUSY\n
+          - 0x00000005 -- PHONE_OFFLINE\n
+          - 0x00000006 -- LOC_TIMEOUT\n
+   */
+}qmiLocDeleteSuplCertificateIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+typedef uint32_t qmiLocPositionEngineConfigParamMaskT_v02;
+#define QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_INJECTED_POSITION_CONTROL_V02 ((qmiLocPositionEngineConfigParamMaskT_v02)0x00000001) /**<  This field denotes if the position engine uses the
+       injected position in direct position calculation.  */
+#define QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_FILTER_SV_USAGE_V02 ((qmiLocPositionEngineConfigParamMaskT_v02)0x00000002) /**<  This field denotes if the position engine filters the
+       SV usage in the fix.  */
+#define QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_STORE_ASSIST_DATA_V02 ((qmiLocPositionEngineConfigParamMaskT_v02)0x00000004) /**<  This field denotes if the position engine stores assistance data
+       in the persistent memory.       */
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Used by the control point to configure position engine
+                    functionality. */
+typedef struct {
+
+  /* Optional */
+  /*  Injected Position Control */
+  uint8_t injectedPositionControl_valid;  /**< Must be set to true if injectedPositionControl is being passed */
+  uint8_t injectedPositionControl;
+  /**<   Controls how the injected position will be used in position engine.\n
+       Valid values: \n
+         - 0x01 (TRUE) -- Use the injected position in direct position
+                          calculation. \n
+         - 0x00 (FALSE) -- Do not use the injected position in direct position
+                           calculation. \n
+       The default value is TRUE, the injected position is used in direct
+       position calculation by default.
+   */
+
+  /* Optional */
+  /*  Filter SV Usage */
+  uint8_t filterSvUsage_valid;  /**< Must be set to true if filterSvUsage is being passed */
+  uint8_t filterSvUsage;
+  /**<   Controls if SV usage will be filtered in a position fix.
+       Valid values:\n
+         - 0x01 (TRUE) -- Filter the usage of SV's in the fix. \n
+         - 0x00 (FALSE) -- Do not filter the usage of SV's in the fix. \n
+       The default value is FALSE, the SV usage is not filtered in the
+       fix by default.
+   */
+
+  /* Optional */
+  /*  Store Assist Data */
+  uint8_t storeAssistData_valid;  /**< Must be set to true if storeAssistData is being passed */
+  uint8_t storeAssistData;
+  /**<   Controls whether assistance data should be stored in
+       the persistent memory. \n
+       Valid values:\n
+         - 0x01 (TRUE) -- Store assistance data in persistent memory. \n
+         - 0x00 (FALSE) -- Do not store assistance data in persistent memory. \n
+       The default value is TRUE, the  assistance data  is stored in
+       persistent memory by default.
+   */
+}qmiLocSetPositionEngineConfigParametersReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to configure position engine
+                    functionality. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Set Position Engine Configuration Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Set Configuration Parameters request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+   */
+
+  /* Optional */
+  /*  Failed Parameters */
+  uint8_t failedPositionEngineConfigParamMask_valid;  /**< Must be set to true if failedPositionEngineConfigParamMask is being passed */
+  qmiLocPositionEngineConfigParamMaskT_v02 failedPositionEngineConfigParamMask;
+  /**<   This field will be sent only if the status is not a success.
+       Identifies the parameters that were not set successfully.
+
+       Valid bitmasks: \n
+         - 0x00000001 -- INJECTED_POSITION_CONTROL \n
+         - 0x00000002 -- FILTER_SV_USAGE \n
+         - 0x00000004 -- STORE_ASSIST_DATA
+   */
+}qmiLocSetPositionEngineConfigParametersIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Request Message; Used by the control point to get the position engine
+                    configuration parameters. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Config Parameters */
+  qmiLocPositionEngineConfigParamMaskT_v02 getPositionEngineConfigParamMask;
+  /**<   Mask denoting the configuration parameters to be retrieved.
+       Valid bitmasks: \n
+        - 0x00000001 -- INJECTED_POSITION_CONTROL \n
+        - 0x00000002 -- FILTER_SV_USAGE \n
+        - 0x00000004 -- STORE_ASSIST_DATA
+   */
+}qmiLocGetPositionEngineConfigParametersReqMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup loc_qmi_messages
+    @{
+  */
+/** Indication Message; Used by the control point to get the position engine
+                    configuration parameters. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Get Position Engine Configuration Status */
+  qmiLocStatusEnumT_v02 status;
+  /**<   Status of the Get Configuration Parameters request.
+
+       Valid values: \n
+         - 0x00000000 -- SUCCESS \n
+         - 0x00000001 -- GENERAL_FAILURE \n
+         - 0x00000002 -- UNSUPPORTED \n
+         - 0x00000003 -- INVALID_PARAMETER \n
+         - 0x00000004 -- ENGINE_BUSY \n
+         - 0x00000005 -- PHONE_OFFLINE \n
+         - 0x00000006 -- LOC_TIMEOUT
+     */
+
+  /* Optional */
+  /*  Injected Position Control */
+  uint8_t injectedPositionControl_valid;  /**< Must be set to true if injectedPositionControl is being passed */
+  uint8_t injectedPositionControl;
+  /**<   Specifies if the injected position is used for direct calculation
+       in the position engine.\n
+       Valid values: \n
+         - 0x01 (TRUE) -- The injected position is used in direct position
+                          calculation. \n
+         - 0x00 (FALSE) -- The injected position is not used direct position
+                           calculation. \n
+       The default value is TRUE, the injected position is used in direct
+       position calculation by default.
+   */
+
+  /* Optional */
+  /*  Filter SV Usage */
+  uint8_t filterSvUsage_valid;  /**< Must be set to true if filterSvUsage is being passed */
+  uint8_t filterSvUsage;
+  /**<   Specifies if SV usage is filtered in a position fix.
+       Valid values: \n
+         - 0x01 (TRUE) -- SV usage is filtered in the fix. \n
+         - 0x00 (FALSE) -- SV usage is not filtered in the fix. \n
+       The default value is FALSE, the SV usage is not filtered in the
+       fix by default.
+   */
+
+  /* Optional */
+  /*  Store Assist Data */
+  uint8_t storeAssistData_valid;  /**< Must be set to true if storeAssistData is being passed */
+  uint8_t storeAssistData;
+  /**<   Specifies if assistance data  is stored in the persistent memory. \n
+       Valid values: \n
+       0x01 (TRUE) -- Assistance data is stored in persistent memory. \n
+       0x00 (FALSE) -- Assistance data is not stored in persistent memory. \n
+       The default value is TRUE, the  assistance data  is stored in
+       persistent memory by default.
+   */
+}qmiLocGetPositionEngineConfigParametersIndMsgT_v02;  /* Message */
+/**
+    @}
+  */
+
+/*Service Message Definition*/
+/** @addtogroup loc_qmi_msg_ids
+    @{
+  */
+#define QMI_LOC_INFORM_CLIENT_REVISION_REQ_V02 0x0020
+#define QMI_LOC_INFORM_CLIENT_REVISION_RESP_V02 0x0020
+#define QMI_LOC_REG_EVENTS_REQ_V02 0x0021
+#define QMI_LOC_REG_EVENTS_RESP_V02 0x0021
+#define QMI_LOC_START_REQ_V02 0x0022
+#define QMI_LOC_START_RESP_V02 0x0022
+#define QMI_LOC_STOP_REQ_V02 0x0023
+#define QMI_LOC_STOP_RESP_V02 0x0023
+#define QMI_LOC_EVENT_POSITION_REPORT_IND_V02 0x0024
+#define QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02 0x0025
+#define QMI_LOC_EVENT_NMEA_IND_V02 0x0026
+#define QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02 0x0027
+#define QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02 0x0028
+#define QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02 0x0029
+#define QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02 0x002A
+#define QMI_LOC_EVENT_ENGINE_STATE_IND_V02 0x002B
+#define QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02 0x002C
+#define QMI_LOC_EVENT_WIFI_REQ_IND_V02 0x002D
+#define QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02 0x002E
+#define QMI_LOC_EVENT_TIME_SYNC_REQ_IND_V02 0x002F
+#define QMI_LOC_EVENT_SET_SPI_STREAMING_REPORT_IND_V02 0x0030
+#define QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02 0x0031
+#define QMI_LOC_GET_SERVICE_REVISION_REQ_V02 0x0032
+#define QMI_LOC_GET_SERVICE_REVISION_RESP_V02 0x0032
+#define QMI_LOC_GET_SERVICE_REVISION_IND_V02 0x0032
+#define QMI_LOC_GET_FIX_CRITERIA_REQ_V02 0x0033
+#define QMI_LOC_GET_FIX_CRITERIA_RESP_V02 0x0033
+#define QMI_LOC_GET_FIX_CRITERIA_IND_V02 0x0033
+#define QMI_LOC_NI_USER_RESPONSE_REQ_V02 0x0034
+#define QMI_LOC_NI_USER_RESPONSE_RESP_V02 0x0034
+#define QMI_LOC_NI_USER_RESPONSE_IND_V02 0x0034
+#define QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02 0x0035
+#define QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_RESP_V02 0x0035
+#define QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02 0x0035
+#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02 0x0036
+#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_RESP_V02 0x0036
+#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02 0x0036
+#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_REQ_V02 0x0037
+#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_RESP_V02 0x0037
+#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_IND_V02 0x0037
+#define QMI_LOC_INJECT_UTC_TIME_REQ_V02 0x0038
+#define QMI_LOC_INJECT_UTC_TIME_RESP_V02 0x0038
+#define QMI_LOC_INJECT_UTC_TIME_IND_V02 0x0038
+#define QMI_LOC_INJECT_POSITION_REQ_V02 0x0039
+#define QMI_LOC_INJECT_POSITION_RESP_V02 0x0039
+#define QMI_LOC_INJECT_POSITION_IND_V02 0x0039
+#define QMI_LOC_SET_ENGINE_LOCK_REQ_V02 0x003A
+#define QMI_LOC_SET_ENGINE_LOCK_RESP_V02 0x003A
+#define QMI_LOC_SET_ENGINE_LOCK_IND_V02 0x003A
+#define QMI_LOC_GET_ENGINE_LOCK_REQ_V02 0x003B
+#define QMI_LOC_GET_ENGINE_LOCK_RESP_V02 0x003B
+#define QMI_LOC_GET_ENGINE_LOCK_IND_V02 0x003B
+#define QMI_LOC_SET_SBAS_CONFIG_REQ_V02 0x003C
+#define QMI_LOC_SET_SBAS_CONFIG_RESP_V02 0x003C
+#define QMI_LOC_SET_SBAS_CONFIG_IND_V02 0x003C
+#define QMI_LOC_GET_SBAS_CONFIG_REQ_V02 0x003D
+#define QMI_LOC_GET_SBAS_CONFIG_RESP_V02 0x003D
+#define QMI_LOC_GET_SBAS_CONFIG_IND_V02 0x003D
+#define QMI_LOC_SET_NMEA_TYPES_REQ_V02 0x003E
+#define QMI_LOC_SET_NMEA_TYPES_RESP_V02 0x003E
+#define QMI_LOC_SET_NMEA_TYPES_IND_V02 0x003E
+#define QMI_LOC_GET_NMEA_TYPES_REQ_V02 0x003F
+#define QMI_LOC_GET_NMEA_TYPES_RESP_V02 0x003F
+#define QMI_LOC_GET_NMEA_TYPES_IND_V02 0x003F
+#define QMI_LOC_SET_LOW_POWER_MODE_REQ_V02 0x0040
+#define QMI_LOC_SET_LOW_POWER_MODE_RESP_V02 0x0040
+#define QMI_LOC_SET_LOW_POWER_MODE_IND_V02 0x0040
+#define QMI_LOC_GET_LOW_POWER_MODE_REQ_V02 0x0041
+#define QMI_LOC_GET_LOW_POWER_MODE_RESP_V02 0x0041
+#define QMI_LOC_GET_LOW_POWER_MODE_IND_V02 0x0041
+#define QMI_LOC_SET_SERVER_REQ_V02 0x0042
+#define QMI_LOC_SET_SERVER_RESP_V02 0x0042
+#define QMI_LOC_SET_SERVER_IND_V02 0x0042
+#define QMI_LOC_GET_SERVER_REQ_V02 0x0043
+#define QMI_LOC_GET_SERVER_RESP_V02 0x0043
+#define QMI_LOC_GET_SERVER_IND_V02 0x0043
+#define QMI_LOC_DELETE_ASSIST_DATA_REQ_V02 0x0044
+#define QMI_LOC_DELETE_ASSIST_DATA_RESP_V02 0x0044
+#define QMI_LOC_DELETE_ASSIST_DATA_IND_V02 0x0044
+#define QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02 0x0045
+#define QMI_LOC_SET_XTRA_T_SESSION_CONTROL_RESP_V02 0x0045
+#define QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02 0x0045
+#define QMI_LOC_GET_XTRA_T_SESSION_CONTROL_REQ_V02 0x0046
+#define QMI_LOC_GET_XTRA_T_SESSION_CONTROL_RESP_V02 0x0046
+#define QMI_LOC_GET_XTRA_T_SESSION_CONTROL_IND_V02 0x0046
+#define QMI_LOC_INJECT_WIFI_POSITION_REQ_V02 0x0047
+#define QMI_LOC_INJECT_WIFI_POSITION_RESP_V02 0x0047
+#define QMI_LOC_INJECT_WIFI_POSITION_IND_V02 0x0047
+#define QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02 0x0048
+#define QMI_LOC_NOTIFY_WIFI_STATUS_RESP_V02 0x0048
+#define QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02 0x0048
+#define QMI_LOC_GET_REGISTERED_EVENTS_REQ_V02 0x0049
+#define QMI_LOC_GET_REGISTERED_EVENTS_RESP_V02 0x0049
+#define QMI_LOC_GET_REGISTERED_EVENTS_IND_V02 0x0049
+#define QMI_LOC_SET_OPERATION_MODE_REQ_V02 0x004A
+#define QMI_LOC_SET_OPERATION_MODE_RESP_V02 0x004A
+#define QMI_LOC_SET_OPERATION_MODE_IND_V02 0x004A
+#define QMI_LOC_GET_OPERATION_MODE_REQ_V02 0x004B
+#define QMI_LOC_GET_OPERATION_MODE_RESP_V02 0x004B
+#define QMI_LOC_GET_OPERATION_MODE_IND_V02 0x004B
+#define QMI_LOC_SET_SPI_STATUS_REQ_V02 0x004C
+#define QMI_LOC_SET_SPI_STATUS_RESP_V02 0x004C
+#define QMI_LOC_SET_SPI_STATUS_IND_V02 0x004C
+#define QMI_LOC_INJECT_SENSOR_DATA_REQ_V02 0x004D
+#define QMI_LOC_INJECT_SENSOR_DATA_RESP_V02 0x004D
+#define QMI_LOC_INJECT_SENSOR_DATA_IND_V02 0x004D
+#define QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02 0x004E
+#define QMI_LOC_INJECT_TIME_SYNC_DATA_RESP_V02 0x004E
+#define QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02 0x004E
+#define QMI_LOC_SET_CRADLE_MOUNT_CONFIG_REQ_V02 0x004F
+#define QMI_LOC_SET_CRADLE_MOUNT_CONFIG_RESP_V02 0x004F
+#define QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02 0x004F
+#define QMI_LOC_GET_CRADLE_MOUNT_CONFIG_REQ_V02 0x0050
+#define QMI_LOC_GET_CRADLE_MOUNT_CONFIG_RESP_V02 0x0050
+#define QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02 0x0050
+#define QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02 0x0051
+#define QMI_LOC_SET_EXTERNAL_POWER_CONFIG_RESP_V02 0x0051
+#define QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02 0x0051
+#define QMI_LOC_GET_EXTERNAL_POWER_CONFIG_REQ_V02 0x0052
+#define QMI_LOC_GET_EXTERNAL_POWER_CONFIG_RESP_V02 0x0052
+#define QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02 0x0052
+#define QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02 0x0053
+#define QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_RESP_V02 0x0053
+#define QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02 0x0053
+#define QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02 0x0054
+#define QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02 0x0054
+#define QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02 0x0054
+#define QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02 0x0055
+#define QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02 0x0055
+#define QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02 0x0055
+#define QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02 0x0056
+#define QMI_LOC_SET_SENSOR_CONTROL_CONFIG_RESP_V02 0x0056
+#define QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02 0x0056
+#define QMI_LOC_GET_SENSOR_CONTROL_CONFIG_REQ_V02 0x0057
+#define QMI_LOC_GET_SENSOR_CONTROL_CONFIG_RESP_V02 0x0057
+#define QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02 0x0057
+#define QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02 0x0058
+#define QMI_LOC_SET_SENSOR_PROPERTIES_RESP_V02 0x0058
+#define QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02 0x0058
+#define QMI_LOC_GET_SENSOR_PROPERTIES_REQ_V02 0x0059
+#define QMI_LOC_GET_SENSOR_PROPERTIES_RESP_V02 0x0059
+#define QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02 0x0059
+#define QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02 0x005A
+#define QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02 0x005A
+#define QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02 0x005A
+#define QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02 0x005B
+#define QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02 0x005B
+#define QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02 0x005B
+#define QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02 0x005C
+#define QMI_LOC_INJECT_SUPL_CERTIFICATE_RESP_V02 0x005C
+#define QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02 0x005C
+#define QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02 0x005D
+#define QMI_LOC_DELETE_SUPL_CERTIFICATE_RESP_V02 0x005D
+#define QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02 0x005D
+#define QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02 0x005E
+#define QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02 0x005E
+#define QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02 0x005E
+#define QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02 0x005F
+#define QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02 0x005F
+#define QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02 0x005F
+/**
+    @}
+  */
+
+/* Service Object Accessor */
+/** @addtogroup wms_qmi_accessor
+    @{
+  */
+/** This function is used internally by the autogenerated code.  Clients should use the
+   macro loc_get_service_object_v02( ) that takes in no arguments. */
+qmi_idl_service_object_type loc_get_service_object_internal_v02
+ ( int32_t idl_maj_version, int32_t idl_min_version, int32_t library_version );
+
+/** This macro should be used to get the service object */
+#define loc_get_service_object_v02( ) \
+          loc_get_service_object_internal_v02( \
+            LOC_V02_IDL_MAJOR_VERS, LOC_V02_IDL_MINOR_VERS, \
+            LOC_V02_IDL_TOOL_VERS )
+/**
+    @}
+  */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
diff --git a/loc_api/ulp/inc/ulp.h b/loc_api/ulp/inc/ulp.h
new file mode 100755
index 0000000..6321bb9
--- /dev/null
+++ b/loc_api/ulp/inc/ulp.h
@@ -0,0 +1,76 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef ULP_H
+#define ULP_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <hardware/gps.h>
+
+typedef int (ulp_report_position_cb)
+(
+      void* owner,
+      const GpsLocation* location_report_ptr,
+      unsigned int ext_data_length,
+      unsigned char* ext_data
+);
+
+/** Represents the standard ulp module interface. */
+typedef struct {
+    /** set to sizeof(ulpInterface) */
+    size_t   size;
+
+    /**
+     * Starts the ulp module. 0: success
+     */
+    int   (*init)( void* owner, ulp_report_position_cb* cb);
+
+    /** Starts the ulp engine. 0: success      */
+    int   (*start_fix)( void );
+
+    /** Stops the ulp engine. 0: success */
+    int   (*stop_fix)( void );
+
+    /** Closes the interface */
+    int   (*destroy)( void );
+
+} ulpInterface;
+
+typedef const ulpInterface* (get_ulp_interface) (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* ULP_H */
+
diff --git a/utils/Android.mk b/utils/Android.mk
new file mode 100755
index 0000000..7ce454f
--- /dev/null
+++ b/utils/Android.mk
@@ -0,0 +1,45 @@
+ifneq ($(BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE),)
+ifneq ($(BUILD_TINY_ANDROID),true)
+#Compile this library only for builds with the latest modem image
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+## Libs
+LOCAL_SHARED_LIBRARIES := \
+    libutils \
+    libcutils
+
+LOCAL_SRC_FILES += \
+    loc_log.cpp \
+    loc_cfg.cpp \
+    msg_q.c \
+    linked_list.c
+
+LOCAL_CFLAGS += \
+     -fno-short-enums \
+     -D_ANDROID_
+
+## Includes
+LOCAL_C_INCLUDES:=
+
+LOCAL_COPY_HEADERS_TO:= gps.utils/
+LOCAL_COPY_HEADERS:= \
+   loc_log.h \
+   loc_cfg.h \
+   log_util.h \
+   linked_list.h \
+   msg_q.h
+
+LOCAL_MODULE := libgps.utils
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_PRELINK_MODULE := false
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
+include $(BUILD_SHARED_LIBRARY)
+endif # not BUILD_TINY_ANDROID
+endif # BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE
+
diff --git a/utils/linked_list.c b/utils/linked_list.c
new file mode 100755
index 0000000..16f2aa2
--- /dev/null
+++ b/utils/linked_list.c
@@ -0,0 +1,328 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#include "linked_list.h"
+#include <stdio.h>
+#include <string.h>
+
+#define LOG_TAG "LocSvc_utils_ll"
+#include "log_util.h"
+
+#include <stdlib.h>
+#include <stdint.h>
+
+typedef struct list_element {
+   struct list_element* next;
+   struct list_element* prev;
+   void* data_ptr;
+   void (*dealloc_func)(void*);
+}list_element;
+
+typedef struct list_state {
+   list_element* p_head;
+   list_element* p_tail;
+} list_state;
+
+/* ----------------------- END INTERNAL FUNCTIONS ---------------------------------------- */
+
+/*===========================================================================
+
+  FUNCTION:   linked_list_init
+
+  ===========================================================================*/
+linked_list_err_type linked_list_init(void** list_data)
+{
+   if( list_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
+      return eLINKED_LIST_INVALID_PARAMETER;
+   }
+
+   list_state* tmp_list;
+   tmp_list = (list_state*)calloc(1, sizeof(list_state));
+   if( tmp_list == NULL )
+   {
+      LOC_LOGE("%s: Unable to allocate space for list!\n", __FUNCTION__);
+      return eLINKED_LIST_FAILURE_GENERAL;
+   }
+
+   tmp_list->p_head = NULL;
+   tmp_list->p_tail = NULL;
+
+   *list_data = tmp_list;
+
+   return eLINKED_LIST_SUCCESS;
+}
+
+/*===========================================================================
+
+  FUNCTION:   linked_list_destroy
+
+  ===========================================================================*/
+linked_list_err_type linked_list_destroy(void** list_data)
+{
+   if( list_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
+      return eLINKED_LIST_INVALID_HANDLE;
+   }
+
+   list_state* p_list = (list_state*)*list_data;
+
+   linked_list_flush(p_list);
+
+   free(*list_data);
+   *list_data = NULL;
+
+   return eLINKED_LIST_SUCCESS;
+}
+
+/*===========================================================================
+
+  FUNCTION:   linked_list_add
+
+  ===========================================================================*/
+linked_list_err_type linked_list_add(void* list_data, void *data_obj, void (*dealloc)(void*))
+{
+   LOC_LOGD("%s: Adding to list data_obj = 0x%08X\n", __FUNCTION__, data_obj);
+   if( list_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
+      return eLINKED_LIST_INVALID_HANDLE;
+   }
+
+   if( data_obj == NULL )
+   {
+      LOC_LOGE("%s: Invalid input parameter!\n", __FUNCTION__);
+      return eLINKED_LIST_INVALID_PARAMETER;
+   }
+
+   list_state* p_list = (list_state*)list_data;
+   list_element* elem = (list_element*)malloc(sizeof(list_element));
+   if( elem == NULL )
+   {
+      LOC_LOGE("%s: Memory allocation failed\n", __FUNCTION__);
+      return eLINKED_LIST_FAILURE_GENERAL;
+   }
+
+   /* Copy data to newly created element */
+   elem->data_ptr = data_obj;
+   elem->next = NULL;
+   elem->prev = NULL;
+   elem->dealloc_func = dealloc;
+
+   /* Replace head element */
+   list_element* tmp = p_list->p_head;
+   p_list->p_head = elem;
+   /* Point next to the previous head element */
+   p_list->p_head->next = tmp;
+
+   if( tmp != NULL )
+   {
+      tmp->prev = p_list->p_head;
+   }
+   else
+   {
+      p_list->p_tail = p_list->p_head;
+   }
+
+   return eLINKED_LIST_SUCCESS;
+}
+
+/*===========================================================================
+
+  FUNCTION:   linked_list_remove
+
+  ===========================================================================*/
+linked_list_err_type linked_list_remove(void* list_data, void **data_obj)
+{
+   LOC_LOGD("%s: Removing from list\n", __FUNCTION__);
+   if( list_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
+      return eLINKED_LIST_INVALID_HANDLE;
+   }
+
+   if( data_obj == NULL )
+   {
+      LOC_LOGE("%s: Invalid input parameter!\n", __FUNCTION__);
+      return eLINKED_LIST_INVALID_PARAMETER;
+   }
+
+   list_state* p_list = (list_state*)list_data;
+   if( p_list->p_tail == NULL )
+   {
+      return eLINKED_LIST_UNAVAILABLE_RESOURCE;
+   }
+
+   list_element* tmp = p_list->p_tail;
+
+   /* Replace tail element */
+   p_list->p_tail = tmp->prev;
+
+   if( p_list->p_tail != NULL )
+   {
+      p_list->p_tail->next = NULL;
+   }
+   else
+   {
+      p_list->p_head = p_list->p_tail;
+   }
+
+   /* Copy data to output param */
+   *data_obj = tmp->data_ptr;
+
+   /* Free allocated list element */
+   free(tmp);
+
+   return eLINKED_LIST_SUCCESS;
+}
+
+/*===========================================================================
+
+  FUNCTION:   linked_list_empty
+
+  ===========================================================================*/
+int linked_list_empty(void* list_data)
+{
+   if( list_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
+      return (int)eLINKED_LIST_INVALID_HANDLE;
+   }
+   else
+   {
+      list_state* p_list = (list_state*)list_data;
+      return p_list->p_head == NULL ? 1 : 0;
+   }
+}
+
+/*===========================================================================
+
+  FUNCTION:   linked_list_flush
+
+  ===========================================================================*/
+linked_list_err_type linked_list_flush(void* list_data)
+{
+   if( list_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
+      return eLINKED_LIST_INVALID_HANDLE;
+   }
+
+   list_state* p_list = (list_state*)list_data;
+
+   /* Remove all dynamically allocated elements */
+   while( p_list->p_head != NULL )
+   {
+      list_element* tmp = p_list->p_head->next;
+
+      /* Free data pointer if told to do so. */
+      if( p_list->p_head->dealloc_func != NULL )
+      {
+         p_list->p_head->dealloc_func(p_list->p_head->data_ptr);
+      }
+
+      /* Free list element */
+      free(p_list->p_head);
+
+      p_list->p_head = tmp;
+   }
+
+   p_list->p_tail = NULL;
+
+   return eLINKED_LIST_SUCCESS;
+}
+
+/*===========================================================================
+
+  FUNCTION:   linked_list_search
+
+  ===========================================================================*/
+linked_list_err_type linked_list_search(void* list_data, void **data_p,
+                                        bool (*equal)(void* data_0, void* data),
+                                        void* data_0, bool rm_if_found)
+{
+   LOC_LOGD("%s: Search the list\n", __FUNCTION__);
+   if( list_data == NULL || NULL == equal )
+   {
+      LOC_LOGE("%s: Invalid list parameter! list_data %p equal %p\n",
+               __FUNCTION__, list_data, equal);
+      return eLINKED_LIST_INVALID_HANDLE;
+   }
+
+   list_state* p_list = (list_state*)list_data;
+   if( p_list->p_tail == NULL )
+   {
+      return eLINKED_LIST_UNAVAILABLE_RESOURCE;
+   }
+
+   list_element* tmp = p_list->p_head;
+
+   if (NULL != data_p) {
+     *data_p = NULL;
+   }
+
+   while (NULL != tmp) {
+     if ((*equal)(data_0, tmp->data_ptr)) {
+       if (NULL != data_p) {
+         *data_p = tmp->data_ptr;
+       }
+
+       if (rm_if_found) {
+         if (NULL == tmp->prev) {
+           p_list->p_head = tmp->next;
+         } else {
+           tmp->prev->next = tmp->next;
+         }
+
+         if (NULL == tmp->next) {
+           p_list->p_tail = tmp->prev;
+         } else {
+           tmp->next->prev = tmp->prev;
+         }
+
+         tmp->prev = tmp->next = NULL;
+
+         // dealloc data if it is not copied out && caller
+         // has given us a dealloc function pointer.
+         if (NULL == data_p && NULL != tmp->dealloc_func) {
+             tmp->dealloc_func(tmp->data_ptr);
+         }
+         free(tmp);
+       }
+
+       tmp = NULL;
+     } else {
+       tmp = tmp->next;
+     }
+   }
+
+   return eLINKED_LIST_SUCCESS;
+}
+
diff --git a/utils/linked_list.h b/utils/linked_list.h
new file mode 100755
index 0000000..cfc945a
--- /dev/null
+++ b/utils/linked_list.h
@@ -0,0 +1,217 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+#ifndef __LINKED_LIST_H__
+#define __LINKED_LIST_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <stdbool.h>
+#include <stdlib.h>
+
+/** Linked List Return Codes */
+typedef enum
+{
+  eLINKED_LIST_SUCCESS                             = 0,
+     /**< Request was successful. */
+  eLINKED_LIST_FAILURE_GENERAL                     = -1,
+     /**< Failed because of a general failure. */
+  eLINKED_LIST_INVALID_PARAMETER                   = -2,
+     /**< Failed because the request contained invalid parameters. */
+  eLINKED_LIST_INVALID_HANDLE                      = -3,
+     /**< Failed because an invalid handle was specified. */
+  eLINKED_LIST_UNAVAILABLE_RESOURCE                = -4,
+     /**< Failed because an there were not enough resources. */
+  eLINKED_LIST_INSUFFICIENT_BUFFER                 = -5,
+     /**< Failed because an the supplied buffer was too small. */
+}linked_list_err_type;
+
+/*===========================================================================
+FUNCTION    linked_list_init
+
+DESCRIPTION
+   Initializes internal structures for linked list.
+
+   list_data: State of list to be initialized.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+linked_list_err_type linked_list_init(void** list_data);
+
+/*===========================================================================
+FUNCTION    linked_list_destroy
+
+DESCRIPTION
+   Destroys internal structures for linked list.
+
+   p_list_data: State of list to be destroyed.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+linked_list_err_type linked_list_destroy(void** list_data);
+
+/*===========================================================================
+FUNCTION    linked_list_add
+
+DESCRIPTION
+   Adds an element to the head of the linked list. The passed in data pointer
+   is not modified or freed. Passed in data_obj is expected to live throughout
+   the use of the linked_list (i.e. data is not allocated internally)
+
+   p_list_data:  List to add data to the head of.
+   data_obj:     Pointer to data to add into list
+   dealloc:      Function used to deallocate memory for this element. Pass NULL
+                 if you do not want data deallocated during a flush operation
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+linked_list_err_type linked_list_add(void* list_data, void *data_obj, void (*dealloc)(void*));
+
+/*===========================================================================
+FUNCTION    linked_list_remove
+
+DESCRIPTION
+   Retrieves data from the list tail. data_obj is the tail element from the list
+   passed in by linked_list_add.
+
+   p_list_data:  List to remove the tail from.
+   data_obj:     Pointer to data removed from list
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+linked_list_err_type linked_list_remove(void* list_data, void **data_obj);
+
+/*===========================================================================
+FUNCTION    linked_list_empty
+
+DESCRIPTION
+   Tells whether the list currently contains any elements
+
+   p_list_data:  List to check if empty.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   0/FALSE : List contains elements
+   1/TRUE  : List is Empty
+   Otherwise look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+int linked_list_empty(void* list_data);
+
+/*===========================================================================
+FUNCTION    linked_list_flush
+
+DESCRIPTION
+   Removes all elements from the list and deallocates them using the provided
+   dealloc function while adding elements.
+
+   p_list_data:  List to remove all elements from.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+linked_list_err_type linked_list_flush(void* list_data);
+
+/*===========================================================================
+FUNCTION    linked_list_search
+
+DESCRIPTION
+   Searches for an element in the linked list.
+
+   p_list_data:  List handle.
+   data_p:       to be stored with the data found; NUll if no match.
+                 if data_p passed in as NULL, then no write to it.
+   equal:        Function ptr takes in a list element, and returns
+                 indication if this the one looking for.
+   data_0:       The data being compared against.
+   rm_if_found:  Should data be removed if found?
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+linked_list_err_type linked_list_search(void* list_data, void **data_p,
+                                        bool (*equal)(void* data_0, void* data),
+                                        void* data_0, bool rm_if_found);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LINKED_LIST_H__ */
diff --git a/utils/loc_cfg.cpp b/utils/loc_cfg.cpp
new file mode 100755
index 0000000..de96078
--- /dev/null
+++ b/utils/loc_cfg.cpp
@@ -0,0 +1,272 @@
+/* Copyright (c) 2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
+#define LOG_TAG "LocSvc_utils_cfg"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <time.h>
+#include <loc_cfg.h>
+#include <log_util.h>
+
+/*=============================================================================
+ *
+ *                          GLOBAL DATA DECLARATION
+ *
+ *============================================================================*/
+
+/* Parameter data */
+loc_gps_cfg_s_type gps_conf;
+
+/* Parameter spec table */
+
+loc_param_s_type loc_parameter_table[] =
+{
+  {"INTERMEDIATE_POS",               &gps_conf.INTERMEDIATE_POS,               'n'},
+  {"ACCURACY_THRES",                 &gps_conf.ACCURACY_THRES,                 'n'},
+  {"ENABLE_WIPER",                   &gps_conf.ENABLE_WIPER,                   'n'},
+  /* DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info
+                   4 - Debug, 5 - Verbose  */
+  {"DEBUG_LEVEL",                    &gps_conf.DEBUG_LEVEL,                    'n'},
+  {"SUPL_VER",                       &gps_conf.SUPL_VER,                       'n'},
+  {"CAPABILITIES",                   &gps_conf.CAPABILITIES,                   'n'},
+  {"TIMESTAMP",                      &gps_conf.TIMESTAMP,                      'n'},
+  {"GYRO_BIAS_RANDOM_WALK",          &gps_conf.GYRO_BIAS_RANDOM_WALK,          'f'},
+  {"SENSOR_ACCEL_BATCHES_PER_SEC",   &gps_conf.SENSOR_ACCEL_BATCHES_PER_SEC,   'n'},
+  {"SENSOR_ACCEL_SAMPLES_PER_BATCH", &gps_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH, 'n'},
+  {"SENSOR_GYRO_BATCHES_PER_SEC",    &gps_conf.SENSOR_GYRO_BATCHES_PER_SEC,    'n'},
+  {"SENSOR_GYRO_SAMPLES_PER_BATCH",  &gps_conf.SENSOR_GYRO_SAMPLES_PER_BATCH,  'n'},
+  {"SENSOR_CONTROL_MODE",            &gps_conf.SENSOR_CONTROL_MODE,            'n'},
+  {"SENSOR_USAGE",                   &gps_conf.SENSOR_USAGE,                   'n'},
+};
+
+int loc_param_num = sizeof(loc_parameter_table) / sizeof(loc_param_s_type);
+
+/*===========================================================================
+FUNCTION loc_default_parameters
+
+DESCRIPTION
+   Resets the parameters to default
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+===========================================================================*/
+
+static void loc_default_parameters()
+{
+   /* defaults */
+   gps_conf.INTERMEDIATE_POS = 0;
+   gps_conf.ACCURACY_THRES = 0;
+   gps_conf.ENABLE_WIPER = 0;
+   gps_conf.DEBUG_LEVEL = 3; /* debug level */
+   gps_conf.SUPL_VER = 0x10000;
+   gps_conf.CAPABILITIES = 0x7;
+   gps_conf.TIMESTAMP = 0;
+
+   gps_conf.GYRO_BIAS_RANDOM_WALK = 0;
+
+   gps_conf.SENSOR_ACCEL_BATCHES_PER_SEC = 2;
+   gps_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH = 5;
+   gps_conf.SENSOR_GYRO_BATCHES_PER_SEC = 2;
+   gps_conf.SENSOR_GYRO_SAMPLES_PER_BATCH = 5;
+   gps_conf.SENSOR_CONTROL_MODE = 0; /* AUTO */
+   gps_conf.SENSOR_USAGE = 0; /* Enabled */
+
+   /* Value MUST be set by OEMs in configuration for sensor-assisted
+      navigation to work. There is NO default value */
+   gps_conf.GYRO_BIAS_RANDOM_WALK_VALID = 0;
+
+   /* reset logging mechanism */
+   loc_logger_init(gps_conf.DEBUG_LEVEL, 0);
+}
+
+/*===========================================================================
+FUNCTION trim_space
+
+DESCRIPTION
+   Removes leading and trailing spaces of the string
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+===========================================================================*/
+void trim_space(char *org_string)
+{
+   char *scan_ptr, *write_ptr;
+   char *first_nonspace = NULL, *last_nonspace = NULL;
+
+   scan_ptr = write_ptr = org_string;
+
+   while (*scan_ptr)
+   {
+      if ( !isspace(*scan_ptr) && first_nonspace == NULL)
+      {
+         first_nonspace = scan_ptr;
+      }
+
+      if (first_nonspace != NULL)
+      {
+         *(write_ptr++) = *scan_ptr;
+         if ( !isspace(*scan_ptr))
+         {
+            last_nonspace = write_ptr;
+         }
+      }
+
+      scan_ptr++;
+   }
+
+   if (last_nonspace) { *last_nonspace = '\0'; }
+}
+
+/*===========================================================================
+FUNCTION loc_read_gps_conf
+
+DESCRIPTION
+   Reads the gps.conf file and sets global parameter data
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+===========================================================================*/
+void loc_read_gps_conf(void)
+{
+   FILE *gps_conf_fp = NULL;
+   char input_buf[LOC_MAX_PARAM_LINE];  /* declare a char array */
+   char *lasts;
+   char *param_name, *param_str_value;
+   int     param_int_value = 0;
+   double  param_double_value = 0;
+   int i;
+
+   loc_default_parameters();
+
+   if((gps_conf_fp = fopen(GPS_CONF_FILE, "r")) != NULL)
+   {
+      LOC_LOGD("%s: using %s", __FUNCTION__, GPS_CONF_FILE);
+   }
+   else
+   {
+      LOC_LOGW("%s: no %s file, using defaults", __FUNCTION__, GPS_CONF_FILE);
+      return; /* no parameter file */
+   }
+
+   while(fgets(input_buf, LOC_MAX_PARAM_LINE, gps_conf_fp) != NULL)
+   {
+      /* Separate variable and value */
+      param_name = strtok_r(input_buf, "=", &lasts);
+      if (param_name == NULL) continue;       /* skip lines that do not contain "=" */
+      param_str_value = strtok_r(NULL, "=", &lasts);
+      if (param_str_value == NULL) continue;  /* skip lines that do not contain two operands */
+
+      /* Trim leading and trailing spaces */
+      trim_space(param_name);
+      trim_space(param_str_value);
+
+      // printf("*(%s) = (%s)\n", param_name, param_str_value);
+
+      /* Parse numerical value */
+      if (param_str_value[0] == '0' && tolower(param_str_value[1]) == 'x')
+      {
+         /* hex */
+         param_int_value = (int) strtol(&param_str_value[2], (char**) NULL, 16);
+      }
+      else {
+         param_double_value = (double) atof(param_str_value); /* float */
+         param_int_value = atoi(param_str_value); /* dec */
+      }
+
+      if (strcmp("GYRO_BIAS_RANDOM_WALK", param_name) == 0)
+      {
+         gps_conf.GYRO_BIAS_RANDOM_WALK_VALID = 1;
+      }
+
+      for(i = 0; i < loc_param_num; i++)
+      {
+         if (strcmp(loc_parameter_table[i].param_name, param_name) == 0 &&
+               loc_parameter_table[i].param_ptr)
+         {
+            switch (loc_parameter_table[i].param_type)
+            {
+            case 's':
+               if (strcmp(param_str_value, "NULL") == 0)
+               {
+                  *((char*)loc_parameter_table[i].param_ptr) = '\0';
+               }
+               else {
+                  strlcpy((char*) loc_parameter_table[i].param_ptr,
+                        param_str_value,
+                        LOC_MAX_PARAM_STRING + 1);
+               }
+               /* Log INI values */
+               LOC_LOGD("%s: PARAM %s = %s", __FUNCTION__, param_name, (char*)loc_parameter_table[i].param_ptr);
+               break;
+            case 'n':
+               *((int *)loc_parameter_table[i].param_ptr) = param_int_value;
+               /* Log INI values */
+               LOC_LOGD("%s: PARAM %s = %d", __FUNCTION__, param_name, param_int_value);
+               break;
+            case 'f':
+               *((double *)loc_parameter_table[i].param_ptr) = param_double_value;
+               /* Log INI values */
+               LOC_LOGD("%s: PARAM %s = %f", __FUNCTION__, param_name, param_double_value);
+               break;
+            default:
+               LOC_LOGE("%s: PARAM %s parameter type must be n or n", __FUNCTION__, param_name);
+            }
+         }
+      }
+   }
+
+   fclose(gps_conf_fp);
+
+   /* Initialize logging mechanism with parsed data */
+   loc_logger_init(gps_conf.DEBUG_LEVEL, gps_conf.TIMESTAMP);
+}
diff --git a/utils/loc_cfg.h b/utils/loc_cfg.h
new file mode 100755
index 0000000..ffeb83c
--- /dev/null
+++ b/utils/loc_cfg.h
@@ -0,0 +1,98 @@
+/* Copyright (c) 2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef LOC_CFG_H
+#define LOC_CFG_H
+
+#define LOC_MAX_PARAM_NAME                 36
+#define LOC_MAX_PARAM_STRING               80
+#define LOC_MAX_PARAM_LINE                 80
+
+// Don't want to overwrite the pre-def'ed value
+#ifndef GPS_CONF_FILE
+#define GPS_CONF_FILE            "/etc/gps.conf"   //??? platform independent
+#endif
+
+/*=============================================================================
+ *
+ *                        MODULE TYPE DECLARATION
+ *
+ *============================================================================*/
+typedef struct
+{
+  char                           param_name[LOC_MAX_PARAM_NAME];
+  void                          *param_ptr;
+  char                           param_type;  /* 'n' for number; 's' for string */
+} loc_param_s_type;
+
+/* GPS.conf support */
+typedef struct loc_gps_cfg_s
+{
+  unsigned long  INTERMEDIATE_POS;
+  unsigned long  ACCURACY_THRES;
+  unsigned long  ENABLE_WIPER;
+  unsigned long  DEBUG_LEVEL;
+  unsigned long  SUPL_VER;
+  unsigned long  CAPABILITIES;
+  unsigned long  TIMESTAMP;
+  unsigned long  GYRO_BIAS_RANDOM_WALK_VALID;
+  double         GYRO_BIAS_RANDOM_WALK;
+  unsigned long  SENSOR_ACCEL_BATCHES_PER_SEC;
+  unsigned long  SENSOR_ACCEL_SAMPLES_PER_BATCH;
+  unsigned long  SENSOR_GYRO_BATCHES_PER_SEC;
+  unsigned long  SENSOR_GYRO_SAMPLES_PER_BATCH;
+  unsigned long  SENSOR_CONTROL_MODE;
+  unsigned long  SENSOR_USAGE;
+  // char           string_val[LOC_MAX_PARAM_STRING + 1]; /* An example string value */
+} loc_gps_cfg_s_type;
+
+/*=============================================================================
+ *
+ *                          MODULE EXTERNAL DATA
+ *
+ *============================================================================*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern loc_gps_cfg_s_type gps_conf;
+
+/*=============================================================================
+ *
+ *                       MODULE EXPORTED FUNCTIONS
+ *
+ *============================================================================*/
+extern void loc_read_gps_conf(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_CFG_H */
diff --git a/utils/loc_log.cpp b/utils/loc_log.cpp
new file mode 100755
index 0000000..e4fb76c
--- /dev/null
+++ b/utils/loc_log.cpp
@@ -0,0 +1,183 @@
+/* Copyright (c) 2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_NDDEBUG 0
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#include "loc_log.h"
+#include "msg_q.h"
+
+#include "log_util.h"
+
+// Logging Improvements
+const char *loc_logger_boolStr[]={"False","True"};
+const char VOID_RET[]   = "None";
+const char FROM_AFW[]   = "===>";
+const char TO_MODEM[]   = "--->";
+const char FROM_MODEM[] = "<---";
+const char TO_AFW[]     = "<===";
+const char EXIT_TAG[]   = "Exiting";
+const char ENTRY_TAG[]  = "Entering";
+
+/* Logging Mechanism */
+loc_logger_s_type loc_logger;
+
+/* Get names from value */
+const char* loc_get_name_from_mask(loc_name_val_s_type table[], int table_size, long mask)
+{
+   int i;
+   for (i = 0; i < table_size; i++)
+   {
+      if (table[i].val & (long) mask)
+      {
+         return table[i].name;
+      }
+   }
+   return UNKNOWN_STR;
+}
+
+/* Get names from value */
+const char* loc_get_name_from_val(loc_name_val_s_type table[], int table_size, long value)
+{
+   int i;
+   for (i = 0; i < table_size; i++)
+   {
+      if (table[i].val == (long) value)
+      {
+         return table[i].name;
+      }
+   }
+   return UNKNOWN_STR;
+}
+
+static loc_name_val_s_type loc_msg_q_status[] =
+{
+    NAME_VAL( eMSG_Q_SUCCESS ),
+    NAME_VAL( eMSG_Q_FAILURE_GENERAL ),
+    NAME_VAL( eMSG_Q_INVALID_PARAMETER ),
+    NAME_VAL( eMSG_Q_INVALID_HANDLE ),
+    NAME_VAL( eMSG_Q_UNAVAILABLE_RESOURCE ),
+    NAME_VAL( eMSG_Q_INSUFFICIENT_BUFFER )
+};
+static int loc_msg_q_status_num = sizeof(loc_msg_q_status) / sizeof(loc_name_val_s_type);
+
+/* Find msg_q status name */
+const char* loc_get_msg_q_status(int status)
+{
+   return loc_get_name_from_val(loc_msg_q_status, loc_msg_q_status_num, (long) status);
+}
+
+const char* log_succ_fail_string(int is_succ)
+{
+   return is_succ? "successful" : "failed";
+}
+
+
+/*===========================================================================
+
+FUNCTION loc_get_time
+
+DESCRIPTION
+   Logs a callback event header.
+   The pointer time_string should point to a buffer of at least 13 bytes:
+
+   XX:XX:XX.000\0
+
+RETURN VALUE
+   The time string
+
+===========================================================================*/
+char *loc_get_time(char *time_string, unsigned long buf_size)
+{
+   struct timeval now;     /* sec and usec     */
+   struct tm now_tm;       /* broken-down time */
+   char hms_string[80];    /* HH:MM:SS         */
+
+   gettimeofday(&now, NULL);
+   localtime_r(&now.tv_sec, &now_tm);
+
+   strftime(hms_string, sizeof hms_string, "%H:%M:%S", &now_tm);
+   snprintf(time_string, buf_size, "%s.%03d", hms_string, (int) (now.tv_usec / 1000));
+
+   return time_string;
+}
+
+
+/*===========================================================================
+FUNCTION loc_logger_init
+
+DESCRIPTION
+   Initializes the state of DEBUG_LEVEL and TIMESTAMP
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   None
+
+SIDE EFFECTS
+   N/A
+===========================================================================*/
+void loc_logger_init(unsigned long debug, unsigned long timestamp)
+{
+   loc_logger.DEBUG_LEVEL = debug;
+   loc_logger.TIMESTAMP   = timestamp;
+}
+
+
+/*===========================================================================
+FUNCTION get_timestamp
+
+DESCRIPTION
+   Generates a timestamp using the current system time
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Char pointer to the parameter str
+
+SIDE EFFECTS
+   N/A
+===========================================================================*/
+char * get_timestamp(char *str, unsigned long buf_size)
+{
+  struct timeval tv;
+  struct timezone tz;
+  int hh, mm, ss;
+  gettimeofday(&tv, &tz);
+  hh = tv.tv_sec/3600%24;
+  mm = (tv.tv_sec%3600)/60;
+  ss = tv.tv_sec%60;
+  snprintf(str, buf_size, "%02d:%02d:%02d.%06ld", hh, mm, ss, tv.tv_usec);
+  return str;
+}
+
diff --git a/utils/loc_log.h b/utils/loc_log.h
new file mode 100755
index 0000000..8b071a4
--- /dev/null
+++ b/utils/loc_log.h
@@ -0,0 +1,66 @@
+/* Copyright (c) 2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef LOC_LOG_H
+#define LOC_LOG_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <ctype.h>
+
+typedef struct
+{
+   char                 name[128];
+   long                 val;
+} loc_name_val_s_type;
+
+#define NAME_VAL(x) {"" #x "", x }
+
+#define UNKNOWN_STR "UNKNOWN"
+
+#define CHECK_MASK(type, value, mask_var, mask) \
+   ((mask_var & mask) ? (type) value : (type) (-1))
+
+/* Get names from value */
+const char* loc_get_name_from_mask(loc_name_val_s_type table[], int table_size, long mask);
+const char* loc_get_name_from_val(loc_name_val_s_type table[], int table_size, long value);
+const char* loc_get_msg_q_status(int status);
+
+extern const char* log_succ_fail_string(int is_succ);
+
+extern char *loc_get_time(char *time_string, unsigned long buf_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_LOG_H */
diff --git a/utils/log_util.h b/utils/log_util.h
new file mode 100755
index 0000000..15d0b89
--- /dev/null
+++ b/utils/log_util.h
@@ -0,0 +1,151 @@
+/* Copyright (c) 2011 Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ *
+ */
+
+#ifndef __LOG_UTIL_H__
+#define __LOG_UTIL_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/*=============================================================================
+ *
+ *                         LOC LOGGER TYPE DECLARATION
+ *
+ *============================================================================*/
+/* LOC LOGGER */
+typedef struct loc_logger_s
+{
+  unsigned long  DEBUG_LEVEL;
+  unsigned long  TIMESTAMP;
+} loc_logger_s_type;
+
+/*=============================================================================
+ *
+ *                               EXTERNAL DATA
+ *
+ *============================================================================*/
+extern loc_logger_s_type loc_logger;
+
+// Logging Improvements
+extern const char *loc_logger_boolStr[];
+
+extern const char *boolStr[];
+extern const char VOID_RET[];
+extern const char FROM_AFW[];
+extern const char TO_MODEM[];
+extern const char FROM_MODEM[];
+extern const char TO_AFW[];
+extern const char EXIT_TAG[];
+extern const char ENTRY_TAG[];
+/*=============================================================================
+ *
+ *                        MODULE EXPORTED FUNCTIONS
+ *
+ *============================================================================*/
+extern void loc_logger_init(unsigned long debug, unsigned long timestamp);
+extern char* get_timestamp(char* str, unsigned long buf_size);
+
+
+#include <utils/Log.h>
+
+#ifndef DEBUG_DMN_LOC_API
+
+/* LOGGING MACROS */
+#define LOC_LOGE(...) ALOGE("E/"__VA_ARGS__)
+
+#define LOC_LOGW(...) \
+if (loc_logger.DEBUG_LEVEL >= 2) { ALOGE("W/"__VA_ARGS__); } \
+else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGW("W/"__VA_ARGS__); }
+
+#define LOC_LOGI(...) \
+if (loc_logger.DEBUG_LEVEL >= 3) { ALOGE("I/"__VA_ARGS__); } \
+else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGI("W/"__VA_ARGS__); }
+
+#define LOC_LOGD(...) \
+if (loc_logger.DEBUG_LEVEL >= 4) { ALOGE("D/"__VA_ARGS__); } \
+else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGD("W/"__VA_ARGS__); }
+
+#define LOC_LOGV(...) \
+if (loc_logger.DEBUG_LEVEL >= 5) { ALOGE("V/"__VA_ARGS__); } \
+else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGV("W/"__VA_ARGS__); }
+
+#else /* DEBUG_DMN_LOC_API */
+
+#define LOC_LOGE(...) ALOGE("E/"__VA_ARGS__)
+
+#define LOC_LOGW(...) ALOGW("W/"__VA_ARGS__)
+
+#define LOC_LOGI(...) ALOGI("I/"__VA_ARGS__)
+
+#define LOC_LOGD(...) ALOGD("D/"__VA_ARGS__)
+
+#define LOC_LOGV(...) ALOGV("V/"__VA_ARGS__)
+
+#endif /* DEBUG_DMN_LOC_API */
+
+/*=============================================================================
+ *
+ *                          LOGGING IMPROVEMENT MACROS
+ *
+ *============================================================================*/
+#define LOG_(LOC_LOG, ID, WHAT, SPEC, VAL)                                    \
+    do {                                                                      \
+        if (loc_logger.TIMESTAMP) {                                           \
+            char ts[32];                                                      \
+            LOC_LOG("[%s] %s %s line %d " #SPEC,                              \
+                     get_timestamp(ts, sizeof(ts)), ID, WHAT, __LINE__, VAL); \
+        } else {                                                              \
+            LOC_LOG("%s %s line %d " #SPEC,                                   \
+                     ID, WHAT, __LINE__, VAL);                                \
+        }                                                                     \
+    } while(0)
+
+
+#define LOG_I(ID, WHAT, SPEC, VAL) LOG_(LOC_LOGI, ID, WHAT, SPEC, VAL)
+#define LOG_V(ID, WHAT, SPEC, VAL) LOG_(LOC_LOGV, ID, WHAT, SPEC, VAL)
+
+#define ENTRY_LOG() LOG_V(ENTRY_TAG, __func__, %s, "")
+#define EXIT_LOG(SPEC, VAL) LOG_V(EXIT_TAG, __func__, SPEC, VAL)
+
+
+// Used for logging callflow from Android Framework
+#define ENTRY_LOG_CALLFLOW() LOG_I(FROM_AFW, __func__, %s, "")
+// Used for logging callflow to Modem
+#define EXIT_LOG_CALLFLOW(SPEC, VAL) LOG_I(TO_MODEM, __func__, SPEC, VAL)
+// Used for logging callflow from Modem(TO_MODEM, __func__, %s, "")
+#define MODEM_LOG_CALLFLOW(SPEC, VAL) LOG_I(FROM_MODEM, __func__, SPEC, VAL)
+// Used for logging callflow to Android Framework
+#define CALLBACK_LOG_CALLFLOW(CB, SPEC, VAL) LOG_I(TO_AFW, CB, SPEC, VAL)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __LOG_UTIL_H__
diff --git a/utils/msg_q.c b/utils/msg_q.c
new file mode 100755
index 0000000..252921e
--- /dev/null
+++ b/utils/msg_q.c
@@ -0,0 +1,322 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#include "msg_q.h"
+
+#define LOG_TAG "LocSvc_utils_q"
+#include "log_util.h"
+
+#include "linked_list.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+
+typedef struct msg_q {
+   void* msg_list;                  /* Linked list to store information */
+   pthread_cond_t  list_cond;       /* Condition variable for waiting on msg queue */
+   pthread_mutex_t list_mutex;      /* Mutex for exclusive access to message queue */
+   int unblocked;                   /* Has this message queue been unblocked? */
+} msg_q;
+
+/*===========================================================================
+FUNCTION    convert_linked_list_err_type
+
+DESCRIPTION
+   Converts from one set of enum values to another.
+
+   linked_list_val: Value to convert to msg_q_enum_type
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Corresponding linked_list_enum_type in msg_q_enum_type
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+static msq_q_err_type convert_linked_list_err_type(linked_list_err_type linked_list_val)
+{
+   switch( linked_list_val )
+   {
+   case eLINKED_LIST_SUCCESS:
+      return eMSG_Q_SUCCESS;
+   case eLINKED_LIST_INVALID_PARAMETER:
+      return eMSG_Q_INVALID_PARAMETER;
+   case eLINKED_LIST_INVALID_HANDLE:
+      return eMSG_Q_INVALID_HANDLE;
+   case eLINKED_LIST_UNAVAILABLE_RESOURCE:
+      return eMSG_Q_UNAVAILABLE_RESOURCE;
+   case eLINKED_LIST_INSUFFICIENT_BUFFER:
+      return eMSG_Q_INSUFFICIENT_BUFFER;
+
+   case eLINKED_LIST_FAILURE_GENERAL:
+   default:
+      return eMSG_Q_FAILURE_GENERAL;
+   }
+}
+
+/* ----------------------- END INTERNAL FUNCTIONS ---------------------------------------- */
+
+/*===========================================================================
+
+  FUNCTION:   msg_q_init
+
+  ===========================================================================*/
+msq_q_err_type msg_q_init(void** msg_q_data)
+{
+   if( msg_q_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
+      return eMSG_Q_INVALID_PARAMETER;
+   }
+
+   msg_q* tmp_msg_q;
+   tmp_msg_q = (msg_q*)calloc(1, sizeof(msg_q));
+   if( tmp_msg_q == NULL )
+   {
+      LOC_LOGE("%s: Unable to allocate space for message queue!\n", __FUNCTION__);
+      return eMSG_Q_FAILURE_GENERAL;
+   }
+
+   if( linked_list_init(&tmp_msg_q->msg_list) != 0 )
+   {
+      LOC_LOGE("%s: Unable to initialize storage list!\n", __FUNCTION__);
+      free(tmp_msg_q);
+      return eMSG_Q_FAILURE_GENERAL;
+   }
+
+   if( pthread_mutex_init(&tmp_msg_q->list_mutex, NULL) != 0 )
+   {
+      LOC_LOGE("%s: Unable to initialize list mutex!\n", __FUNCTION__);
+      linked_list_destroy(&tmp_msg_q->msg_list);
+      free(tmp_msg_q);
+      return eMSG_Q_FAILURE_GENERAL;
+   }
+
+   if( pthread_cond_init(&tmp_msg_q->list_cond, NULL) != 0 )
+   {
+      LOC_LOGE("%s: Unable to initialize msg q cond var!\n", __FUNCTION__);
+      linked_list_destroy(&tmp_msg_q->msg_list);
+      pthread_mutex_destroy(&tmp_msg_q->list_mutex);
+      free(tmp_msg_q);
+      return eMSG_Q_FAILURE_GENERAL;
+   }
+
+   tmp_msg_q->unblocked = 0;
+
+   *msg_q_data = tmp_msg_q;
+
+   return eMSG_Q_SUCCESS;
+}
+
+/*===========================================================================
+
+  FUNCTION:   msg_q_destroy
+
+  ===========================================================================*/
+msq_q_err_type msg_q_destroy(void** msg_q_data)
+{
+   if( msg_q_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
+      return eMSG_Q_INVALID_HANDLE;
+   }
+
+   msg_q* p_msg_q = (msg_q*)*msg_q_data;
+
+   linked_list_destroy(&p_msg_q->msg_list);
+   pthread_mutex_destroy(&p_msg_q->list_mutex);
+   pthread_cond_destroy(&p_msg_q->list_cond);
+
+   p_msg_q->unblocked = 0;
+
+   free(*msg_q_data);
+   *msg_q_data = NULL;
+
+   return eMSG_Q_SUCCESS;
+}
+
+/*===========================================================================
+
+  FUNCTION:   msg_q_snd
+
+  ===========================================================================*/
+msq_q_err_type msg_q_snd(void* msg_q_data, void* msg_obj, void (*dealloc)(void*))
+{
+   msq_q_err_type rv;
+   if( msg_q_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
+      return eMSG_Q_INVALID_HANDLE;
+   }
+   if( msg_obj == NULL )
+   {
+      LOC_LOGE("%s: Invalid msg_obj parameter!\n", __FUNCTION__);
+      return eMSG_Q_INVALID_PARAMETER;
+   }
+
+   msg_q* p_msg_q = (msg_q*)msg_q_data;
+
+   pthread_mutex_lock(&p_msg_q->list_mutex);
+   LOC_LOGD("%s: Sending message with handle = 0x%08X\n", __FUNCTION__, msg_obj);
+
+   if( p_msg_q->unblocked )
+   {
+      LOC_LOGE("%s: Message queue has been unblocked.\n", __FUNCTION__);
+      pthread_mutex_unlock(&p_msg_q->list_mutex);
+      return eMSG_Q_UNAVAILABLE_RESOURCE;
+   }
+
+   rv = convert_linked_list_err_type(linked_list_add(p_msg_q->msg_list, msg_obj, dealloc));
+
+   /* Show data is in the message queue. */
+   pthread_cond_signal(&p_msg_q->list_cond);
+
+   pthread_mutex_unlock(&p_msg_q->list_mutex);
+
+   LOC_LOGD("%s: Finished Sending message with handle = 0x%08X\n", __FUNCTION__, msg_obj);
+
+   return rv;
+}
+
+/*===========================================================================
+
+  FUNCTION:   msg_q_rcv
+
+  ===========================================================================*/
+msq_q_err_type msg_q_rcv(void* msg_q_data, void** msg_obj)
+{
+   msq_q_err_type rv;
+   if( msg_q_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
+      return eMSG_Q_INVALID_HANDLE;
+   }
+
+   if( msg_obj == NULL )
+   {
+      LOC_LOGE("%s: Invalid msg_obj parameter!\n", __FUNCTION__);
+      return eMSG_Q_INVALID_PARAMETER;
+   }
+
+   msg_q* p_msg_q = (msg_q*)msg_q_data;
+
+   LOC_LOGD("%s: Waiting on message\n", __FUNCTION__);
+
+   pthread_mutex_lock(&p_msg_q->list_mutex);
+
+   if( p_msg_q->unblocked )
+   {
+      LOC_LOGE("%s: Message queue has been unblocked.\n", __FUNCTION__);
+      pthread_mutex_unlock(&p_msg_q->list_mutex);
+      return eMSG_Q_UNAVAILABLE_RESOURCE;
+   }
+
+   /* Wait for data in the message queue */
+   while( linked_list_empty(p_msg_q->msg_list) && !p_msg_q->unblocked )
+   {
+      pthread_cond_wait(&p_msg_q->list_cond, &p_msg_q->list_mutex);
+   }
+
+   rv = convert_linked_list_err_type(linked_list_remove(p_msg_q->msg_list, msg_obj));
+
+   pthread_mutex_unlock(&p_msg_q->list_mutex);
+
+   LOC_LOGD("%s: Received message %p rv = %d\n", __FUNCTION__, *msg_obj, rv);
+
+   return rv;
+}
+
+/*===========================================================================
+
+  FUNCTION:   msg_q_flush
+
+  ===========================================================================*/
+msq_q_err_type msg_q_flush(void* msg_q_data)
+{
+   msq_q_err_type rv;
+   if ( msg_q_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
+      return eMSG_Q_INVALID_HANDLE;
+   }
+
+   msg_q* p_msg_q = (msg_q*)msg_q_data;
+
+   LOC_LOGD("%s: Flushing Message Queue\n", __FUNCTION__);
+
+   pthread_mutex_lock(&p_msg_q->list_mutex);
+
+   /* Remove all elements from the list */
+   rv = convert_linked_list_err_type(linked_list_flush(p_msg_q->msg_list));
+
+   pthread_mutex_unlock(&p_msg_q->list_mutex);
+
+   LOC_LOGD("%s: Message Queue flushed\n", __FUNCTION__);
+
+   return rv;
+}
+
+/*===========================================================================
+
+  FUNCTION:   msg_q_unblock
+
+  ===========================================================================*/
+msq_q_err_type msg_q_unblock(void* msg_q_data)
+{
+   if ( msg_q_data == NULL )
+   {
+      LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
+      return eMSG_Q_INVALID_HANDLE;
+   }
+
+   msg_q* p_msg_q = (msg_q*)msg_q_data;
+   pthread_mutex_lock(&p_msg_q->list_mutex);
+
+   if( p_msg_q->unblocked )
+   {
+      LOC_LOGE("%s: Message queue has been unblocked.\n", __FUNCTION__);
+      pthread_mutex_unlock(&p_msg_q->list_mutex);
+      return eMSG_Q_UNAVAILABLE_RESOURCE;
+   }
+
+   LOC_LOGD("%s: Unblocking Message Queue\n", __FUNCTION__);
+   /* Unblocking message queue */
+   p_msg_q->unblocked = 1;
+
+   /* Allow all the waiters to wake up */
+   pthread_cond_broadcast(&p_msg_q->list_cond);
+
+   pthread_mutex_unlock(&p_msg_q->list_mutex);
+
+   LOC_LOGD("%s: Message Queue unblocked\n", __FUNCTION__);
+
+   return eMSG_Q_SUCCESS;
+}
diff --git a/utils/msg_q.h b/utils/msg_q.h
new file mode 100755
index 0000000..4171540
--- /dev/null
+++ b/utils/msg_q.h
@@ -0,0 +1,189 @@
+/* Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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.
+ */
+
+#ifndef __MSG_Q_H__
+#define __MSG_Q_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <stdlib.h>
+
+/** Linked List Return Codes */
+typedef enum
+{
+  eMSG_Q_SUCCESS                             = 0,
+     /**< Request was successful. */
+  eMSG_Q_FAILURE_GENERAL                     = -1,
+     /**< Failed because of a general failure. */
+  eMSG_Q_INVALID_PARAMETER                   = -2,
+     /**< Failed because the request contained invalid parameters. */
+  eMSG_Q_INVALID_HANDLE                      = -3,
+     /**< Failed because an invalid handle was specified. */
+  eMSG_Q_UNAVAILABLE_RESOURCE                = -4,
+     /**< Failed because an there were not enough resources. */
+  eMSG_Q_INSUFFICIENT_BUFFER                 = -5,
+     /**< Failed because an the supplied buffer was too small. */
+}msq_q_err_type;
+
+/*===========================================================================
+FUNCTION    msg_q_init
+
+DESCRIPTION
+   Initializes internal structures for message queue.
+
+   msg_q_data: State of message queue to be initialized.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+msq_q_err_type msg_q_init(void** msg_q_data);
+
+/*===========================================================================
+FUNCTION    msg_q_destroy
+
+DESCRIPTION
+   Releases internal structures for message queue.
+
+   msg_q_data: State of message queue to be released.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+msq_q_err_type msg_q_destroy(void** msg_q_data);
+
+/*===========================================================================
+FUNCTION    msg_q_snd
+
+DESCRIPTION
+   Sends data to the message queue. The passed in data pointer
+   is not modified or freed. Passed in msg_obj is expected to live throughout
+   the use of the msg_q (i.e. data is not allocated internally)
+
+   msg_q_data: Message Queue to add the element to.
+   msgp:       Pointer to data to add into message queue.
+   dealloc:    Function used to deallocate memory for this element. Pass NULL
+               if you do not want data deallocated during a flush operation
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+msq_q_err_type msg_q_snd(void* msg_q_data, void* msg_obj, void (*dealloc)(void*));
+
+/*===========================================================================
+FUNCTION    msg_q_rcv
+
+DESCRIPTION
+   Retrieves data from the message queue. msg_obj is the oldest message received
+   and pointer is simply removed from message queue.
+
+   msg_q_data: Message Queue to copy data from into msgp.
+   msg_obj:    Pointer to space to copy msg_q contents to.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+msq_q_err_type msg_q_rcv(void* msg_q_data, void** msg_obj);
+
+/*===========================================================================
+FUNCTION    msg_q_flush
+
+DESCRIPTION
+   Function removes all elements from the message queue.
+
+   msg_q_data: Message Queue to remove elements from.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+msq_q_err_type msg_q_flush(void* msg_q_data);
+
+/*===========================================================================
+FUNCTION    msg_q_unblock
+
+DESCRIPTION
+   This function will stop use of the message queue. All waiters will wake up
+   and likely receive nothing from the queue resulting in a negative return
+   value. The message queue can no longer be used until it is destroyed
+   and initialized again after calling this function.
+
+   msg_q_data: Message queue to unblock.
+
+DEPENDENCIES
+   N/A
+
+RETURN VALUE
+   Look at error codes above.
+
+SIDE EFFECTS
+   N/A
+
+===========================================================================*/
+msq_q_err_type msg_q_unblock(void* msg_q_data);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __MSG_Q_H__ */