aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.mk40
-rwxr-xr-x[-rw-r--r--]BoardConfig.mk64
-rw-r--r--README.md4
-rw-r--r--android_filesystem_config.h44
-rw-r--r--bluetooth/bdroid_buildcfg.h2
-rw-r--r--camera/Android.mk (renamed from org.ifaa.android.manager/Android.mk)13
-rw-r--r--camera/camera_shim.cpp30
-rw-r--r--cm.dependencies12
-rw-r--r--cm.mk20
-rw-r--r--cmhw/org/cyanogenmod/hardware/SunlightEnhancement.java88
-rw-r--r--configs/calib.cfg114
-rw-r--r--configs/capability.xml115
-rw-r--r--configs/media_codecs.xml10
-rw-r--r--configs/media_profiles.xml6
-rw-r--r--data-ipa-cfg-mgr/ipacm/src/Android.mk2
-rw-r--r--data-ipa-cfg-mgr/ipanat/test/Android.mk2
-rw-r--r--device.mk86
-rw-r--r--doze/Android.mk22
-rw-r--r--doze/AndroidManifest.xml25
-rw-r--r--doze/proguard.flags5
-rw-r--r--doze/res/drawable/switchbar_background.xml21
-rw-r--r--doze/res/layout/doze.xml28
-rw-r--r--doze/res/layout/switch_bar.xml48
-rw-r--r--doze/res/values-gl-rES/strings.xml15
-rw-r--r--doze/res/values-iw/strings.xml1
-rw-r--r--doze/res/values-nl/strings.xml2
-rw-r--r--doze/res/values-pl/strings.xml2
-rw-r--r--doze/res/values-sv/strings.xml2
-rw-r--r--doze/res/values/colors.xml23
-rw-r--r--doze/res/values/strings.xml13
-rw-r--r--doze/res/values/styles.xml34
-rw-r--r--doze/res/xml/doze_settings.xml32
-rw-r--r--doze/src/com/cyanogenmod/settings/doze/BootCompletedReceiver.java2
-rw-r--r--doze/src/com/cyanogenmod/settings/doze/DozeReceiver.java54
-rw-r--r--doze/src/com/cyanogenmod/settings/doze/DozeService.java6
-rw-r--r--doze/src/com/cyanogenmod/settings/doze/DozeSettings.java152
-rw-r--r--doze/src/com/cyanogenmod/settings/doze/DozeSettingsFragment.java197
-rw-r--r--doze/src/com/cyanogenmod/settings/doze/Utils.java28
-rwxr-xr-xextract-files.sh2
-rw-r--r--gps/core/Android.mk6
-rw-r--r--gps/core/ContextBase.cpp72
-rw-r--r--gps/core/ContextBase.h70
-rw-r--r--gps/core/LBSProxyBase.h21
-rw-r--r--gps/core/LocAdapterBase.cpp11
-rw-r--r--gps/core/LocAdapterBase.h20
-rw-r--r--gps/core/LocAdapterProxyBase.h11
-rw-r--r--gps/core/LocApiBase.cpp92
-rw-r--r--gps/core/LocApiBase.h37
-rw-r--r--gps/core/LocDualContext.cpp6
-rw-r--r--gps/core/Makefile.am46
-rw-r--r--gps/core/UlpProxyBase.h42
-rw-r--r--gps/core/gps_extended.h26
-rw-r--r--gps/core/gps_extended_c.h727
-rw-r--r--gps/core/loc_core_log.cpp2
-rw-r--r--gps/etc/gps.conf95
-rw-r--r--gps/etc/izat.conf20
-rw-r--r--gps/loc_api/Android.mk6
-rw-r--r--gps/loc_api/Makefile.am133
-rw-r--r--gps/loc_api/ds_api/Android.mk49
-rw-r--r--gps/loc_api/ds_api/ds_client.c834
-rw-r--r--gps/loc_api/ds_api/ds_client.h279
-rw-r--r--gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpc.h4
-rw-r--r--gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpc.cpp14
-rw-r--r--gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c3
-rw-r--r--gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c3
-rw-r--r--gps/loc_api/libloc_api_50001/Android.mk20
-rw-r--r--gps/loc_api/libloc_api_50001/LocEngAdapter.cpp42
-rw-r--r--gps/loc_api/libloc_api_50001/LocEngAdapter.h30
-rw-r--r--gps/loc_api/libloc_api_50001/Makefile.am154
-rw-r--r--gps/loc_api/libloc_api_50001/loc.cpp65
-rw-r--r--gps/loc_api/libloc_api_50001/loc.h3
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng.cpp463
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng.h77
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_agps.cpp3
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_agps.h8
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp5
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c5
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c11
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp5
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c5
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_msg.h14
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_ni.cpp5
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_nmea.cpp182
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_xtra.cpp12
-rw-r--r--gps/loc_api/loc_api_v02/Android.mk62
-rwxr-xr-xgps/loc_api/loc_api_v02/LocApiV02.cpp4452
-rw-r--r--gps/loc_api/loc_api_v02/LocApiV02.h262
-rw-r--r--gps/loc_api/loc_api_v02/Makefile.am42
-rw-r--r--gps/loc_api/loc_api_v02/loc_api_sync_req.c555
-rw-r--r--gps/loc_api/loc_api_v02/loc_api_sync_req.h92
-rw-r--r--gps/loc_api/loc_api_v02/loc_api_v02_client.c2303
-rw-r--r--gps/loc_api/loc_api_v02/loc_api_v02_client.h1762
-rw-r--r--gps/loc_api/loc_api_v02/loc_api_v02_log.c401
-rw-r--r--gps/loc_api/loc_api_v02/loc_api_v02_log.h50
-rw-r--r--gps/loc_api/loc_api_v02/loc_util_log.h86
-rw-r--r--gps/loc_api/loc_api_v02/location_service_v02.c6163
-rw-r--r--gps/loc_api/loc_api_v02/location_service_v02.h16657
-rw-r--r--gps/utils/Android.mk16
-rw-r--r--gps/utils/LocSharedLock.h7
-rw-r--r--gps/utils/LocThread.cpp4
-rw-r--r--gps/utils/LocTimer.cpp7
-rw-r--r--gps/utils/LocTimer.h2
-rw-r--r--gps/utils/Makefile.am45
-rw-r--r--gps/utils/MsgTask.cpp5
-rw-r--r--gps/utils/linked_list.c5
-rw-r--r--gps/utils/loc_cfg.cpp2
-rw-r--r--gps/utils/loc_log.cpp6
-rw-r--r--gps/utils/loc_misc_utils.cpp2
-rw-r--r--gps/utils/loc_target.cpp44
-rw-r--r--gps/utils/loc_target.h6
-rw-r--r--gps/utils/loc_timer.h2
-rw-r--r--gps/utils/log_util.h6
-rw-r--r--gps/utils/msg_q.c5
-rw-r--r--gps/utils/platform_lib_abstractions/Android.mk5
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/Android.mk5
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/Makefile.am10
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/configure.ac61
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_android_runtime.h45
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_gettid.h41
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_includes.h40
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_log_util.h196
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_macros.h (renamed from gps/utils/platform_lib_abstractions/platform_lib_macros.h)46
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_property_service.h44
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_sched_policy.h46
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_time.h (renamed from gps/utils/platform_lib_abstractions/platform_lib_includes.h)12
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/loc-pla.pc.in10
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/src/Android.mk55
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/src/Makefile.am41
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_android_runtime.cpp40
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_gettid.cpp40
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_log_util.cpp42
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_property_service.cpp39
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_sched_policy.cpp41
-rw-r--r--gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_time.cpp47
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/Android.mk5
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/Makefile.am9
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/configure.ac67
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_android_runtime.h45
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_gettid.h44
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_property_service.h42
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_sched_policy.h64
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_time.h (renamed from gps/utils/platform_lib_abstractions/platform_lib_time.h)18
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/loc-stub.pc.in10
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/src/Android.mk49
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/src/Makefile.am40
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_android_runtime.cpp41
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_gettid.cpp37
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_property_service.cpp42
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_sched_policy.cpp50
-rw-r--r--gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_time.cpp46
-rwxr-xr-xhealthd/Android.mk8
-rwxr-xr-xhealthd/healthd_board_msm.cpp140
-rw-r--r--include/camera/CameraParametersExtra.h21
-rw-r--r--init/Android.mk25
-rw-r--r--init/init_z2_plus.cpp108
-rw-r--r--keylayout/fpc1020tp.kl4
-rw-r--r--org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreKeyPairRSAGeneratorSpi.java524
-rw-r--r--org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreProvider.java160
-rw-r--r--org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreSpi.java60
-rw-r--r--org.ifaa.android.manager/src/android/security/keystore/SoterRSAKeyGenParameterSpec.java96
-rw-r--r--org.ifaa.android.manager/src/android/security/keystore/SoterUtil.java166
-rw-r--r--org.ifaa.android.manager/src/org/ifaa/android/manager/IFAAManager.java23
-rw-r--r--org.ifaa.android.manager/src/org/ifaa/android/manager/IFAAManagerFactory.java64
-rwxr-xr-x[-rw-r--r--]overlay/frameworks/base/core/res/res/values/config.xml18
-rw-r--r--overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml2
-rw-r--r--overlay/frameworks/base/packages/SystemUI/res/values/config.xml13
-rw-r--r--overlay/frameworks/opt/telephony/resources/res/values/config.xml34
-rw-r--r--overlay/packages/apps/CarrierConfig/res/xml/vendor.xml4
-rw-r--r--overlay/packages/apps/Snap/res/values/qcomstrings.xml1
-rw-r--r--overlay/vendor/cmsdk/cm/res/res/values/config.xml13
-rw-r--r--proprietary-files.txt696
-rw-r--r--rootdir/Android.mk9
-rw-r--r--rootdir/etc/fstab.qcom3
-rw-r--r--rootdir/etc/init.qcom.bt.sh2
-rwxr-xr-x[-rw-r--r--]rootdir/etc/init.qcom.power.rc23
-rwxr-xr-xrootdir/etc/init.qcom.rc42
-rwxr-xr-xrootdir/etc/init.qcom.sh21
-rwxr-xr-xrootdir/etc/init.qcom.usb.rc163
-rwxr-xr-xrootdir/etc/init.qcom.usb.sh66
-rw-r--r--rootdir/etc/recovery/recovery.fstab21
-rw-r--r--rootdir/etc/ueventd.qcom.rc6
-rw-r--r--sepolicy/alipay_app.te50
-rw-r--r--sepolicy/file_contexts3
-rw-r--r--sepolicy/ifaad.te26
-rwxr-xr-xsepolicy/ifaadaemon.te26
-rw-r--r--sepolicy/platform_app.te2
-rw-r--r--sepolicy/property_contexts6
-rw-r--r--sepolicy/seapp_contexts2
-rw-r--r--sepolicy/service_contexts2
-rw-r--r--sepolicy/servicemanager.te6
-rwxr-xr-xsetup-makefiles.sh369
-rw-r--r--symlinks.mk (renamed from tftp.mk)0
-rw-r--r--system.prop110
-rwxr-xr-xvendor/copyfiles.mk30
-rw-r--r--vendor/system/priv-app/FedorOTA/FedorOTA.apkbin649292 -> 0 bytes
-rw-r--r--vendorsetup.sh1
196 files changed, 38644 insertions, 4195 deletions
diff --git a/Android.mk b/Android.mk
index bbde074..e0ab9cc 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,6 +1,3 @@
-#
-# Copyright (C) 2016 The CyanogenMod Project
-#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
@@ -25,37 +22,20 @@
LOCAL_PATH := $(call my-dir)
-ifeq ($(TARGET_DEVICE),z2_plus)
+ifeq ($(TARGET_DEVICE),z2)
+
+include device/zuk/z2/symlinks.mk
include $(call all-makefiles-under,$(LOCAL_PATH))
include $(CLEAR_VARS)
-LOCAL_MODULE := wifi_symlinks
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := FAKE
-LOCAL_MODULE_SUFFIX := -timestamp
-
-include $(BUILD_SYSTEM)/base_rules.mk
-
-$(LOCAL_BUILT_MODULE): ACTUAL_INI_FILE := /system/etc/wifi/WCNSS_qcom_cfg.ini
-$(LOCAL_BUILT_MODULE): WCNSS_INI_SYMLINK := $(TARGET_OUT)/etc/firmware/wlan/qca_cld/WCNSS_qcom_cfg.ini
-
-$(LOCAL_BUILT_MODULE): ACTUAL_MAC_FILE := /persist/wlan_mac.bin
-$(LOCAL_BUILT_MODULE): WCNSS_MAC_SYMLINK := $(TARGET_OUT)/etc/firmware/wlan/qca_cld/wlan_mac.bin
-
-
-$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/Android.mk
-$(LOCAL_BUILT_MODULE):
- $(hide) echo "Making symlinks for wifi"
- $(hide) mkdir -p $(dir $@)
- $(hide) mkdir -p $(dir $(WCNSS_INI_SYMLINK))
- $(hide) rm -rf $@
- $(hide) rm -rf $(WCNSS_INI_SYMLINK)
- $(hide) ln -sf $(ACTUAL_INI_FILE) $(WCNSS_INI_SYMLINK)
- $(hide) rm -rf $(WCNSS_MAC_SYMLINK)
- $(hide) ln -sf $(ACTUAL_MAC_FILE) $(WCNSS_MAC_SYMLINK)
- $(hide) touch $@
+# END WiFi symlinks
+$(shell mkdir -p $(TARGET_OUT_ETC)/firmware/wlan/qca_cld; \
+ ln -sf /system/etc/wifi/WCNSS_qcom_cfg.ini \
+ $(TARGET_OUT_ETC)/firmware/wlan/qca_cld/WCNSS_qcom_cfg.ini; \
+ ln -sf /persist/wlan_mac.bin \
+ $(TARGET_OUT_ETC)/firmware/wlan/qca_cld/wlan_mac.bin)
include $(call all-makefiles-under,$(LOCAL_PATH))
@@ -70,6 +50,4 @@ $(IMS_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
ALL_DEFAULT_INSTALLED_MODULES += $(IMS_SYMLINKS)
-include device/zuk/z2_plus/tftp.mk
-
endif
diff --git a/BoardConfig.mk b/BoardConfig.mk
index f4e0f71..0f5d44d 100644..100755
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -1,5 +1,3 @@
-# Copyright (C) 2016 The CyanogenMod Project
-#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
@@ -25,16 +23,12 @@ USE_CLANG_PLATFORM_BUILD := true
TARGET_OTA_ASSERT_DEVICE := z2,Z2,z2plus,z2_plus
-PLATFORM_PATH := device/zuk/z2_plus
+PLATFORM_PATH := device/zuk/z2
TARGET_SPECIFIC_HEADER_PATH := $(PLATFORM_PATH)/include
BOARD_VENDOR := zuk
-# CM building options
-CM_DEVELOPER := Fedor917
-CM_BUILDTYPE := UNOFFICIAL
-
# Bootloader
TARGET_BOOTLOADER_BOARD_NAME := msm8996
TARGET_NO_BOOTLOADER := true
@@ -71,7 +65,7 @@ TARGET_KERNEL_APPEND_DTB := true
TARGET_KERNEL_ARCH := arm64
TARGET_KERNEL_HEADER_ARCH := arm64
TARGET_KERNEL_CROSS_COMPILE_PREFIX := aarch64-linux-android-
-TARGET_KERNEL_CONFIG := cyanogenmod_z2_defconfig
+TARGET_KERNEL_CONFIG := cyanogenmod_z2_plus_defconfig
TARGET_KERNEL_SOURCE := kernel/zuk/msm8996
# QCOM hardware
@@ -83,10 +77,10 @@ BLOCK_BASED_OTA := true
BOARD_ANT_WIRELESS_DEVICE := "qualcomm-uart"
# Audio
-USE_CUSTOM_AUDIO_POLICY := 1
-BOARD_USES_ALSA_AUDIO := true
-AUDIO_USE_LL_AS_PRIMARY_OUTPUT := true
+#AUDIO_FEATURE_ENABLED_AAC_ADTS_OFFLOAD := true
AUDIO_FEATURE_ENABLED_ACDB_LICENSE := true
+#AUDIO_FEATURE_ENABLED_APE_OFFLOAD := true
+AUDIO_FEATURE_ENABLED_ALAC_OFFLOAD := true
AUDIO_FEATURE_ENABLED_ANC_HEADSET := true
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_COMPRESS_VOIP := true
@@ -96,11 +90,17 @@ AUDIO_FEATURE_ENABLED_FLAC_OFFLOAD := true
AUDIO_FEATURE_ENABLED_FLUENCE := true
AUDIO_FEATURE_ENABLED_HFP := true
AUDIO_FEATURE_ENABLED_KPI_OPTIMIZE := true
+AUDIO_FEATURE_ENABLED_MULTI_VOICE_SESSIONS := true
AUDIO_FEATURE_ENABLED_NT_PAUSE_TIMEOUT := true
AUDIO_FEATURE_ENABLED_PCM_OFFLOAD := true
AUDIO_FEATURE_ENABLED_PCM_OFFLOAD_24 := true
AUDIO_FEATURE_ENABLED_PROXY_DEVICE := true
-AUDIO_FEATURE_ENABLED_MULTI_VOICE_SESSIONS := true
+#AUDIO_FEATURE_ENABLED_VORBIS_OFFLOAD := true
+#AUDIO_FEATURE_ENABLED_WMA_OFFLOAD := true
+AUDIO_USE_LL_AS_PRIMARY_OUTPUT := true
+BOARD_SUPPORTS_SOUND_TRIGGER := false
+BOARD_USES_ALSA_AUDIO := true
+USE_CUSTOM_AUDIO_POLICY := 1
# Bluetooth
BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := $(PLATFORM_PATH)/bluetooth
@@ -114,10 +114,10 @@ QCOM_BT_USE_SMD_TTY := true
BOARD_QTI_CAMERA_32BIT_ONLY := true
USE_DEVICE_SPECIFIC_CAMERA := true
+
# Charger
BOARD_CHARGER_ENABLE_SUSPEND := true
BOARD_CHARGER_DISABLE_INIT_BLANK := true
-BOARD_HAL_STATIC_LIBRARIES += libhealthd.zuk
# CM Hardware
BOARD_HARDWARE_CLASS += $(PLATFORM_PATH)/cmhw
@@ -145,23 +145,17 @@ MAX_EGL_CACHE_SIZE := 2048*1024
OVERRIDE_RS_DRIVER:= libRSDriver_adreno.so
MAX_VIRTUAL_DISPLAY_DIMENSION := 4096
TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS := true
+VSYNC_EVENT_PHASE_OFFSET_NS := 2000000
+SF_VSYNC_EVENT_PHASE_OFFSET_NS := 6000000
+#TARGET_USES_HWC2 := true
+
-# Enable dexpreopt to speed boot time
-ifeq ($(HOST_OS),linux)
- ifeq ($(call match-word-in-list,$(TARGET_BUILD_VARIANT),user),true)
- ifeq ($(WITH_DEXPREOPT),)
- WITH_DEXPREOPT := true
- endif
- endif
-endif
# GPS
TARGET_NO_RPC := true
USE_DEVICE_SPECIFIC_GPS := true
# Init
-TARGET_INIT_VENDOR_LIB := libinit_z2_plus
-TARGET_RECOVERY_DEVICE_MODULES := libinit_z2_plus
TARGET_PLATFORM_DEVICE_BASE := /devices/soc/
# Keystore
@@ -183,22 +177,15 @@ TARGET_POWERHAL_VARIANT := qcom
# RIL
TARGET_RIL_VARIANT := caf
-PROTOBUF_SUPPORTED := true
# Recovery
-TARGET_RECOVERY_FSTAB := device/zuk/z2_plus/rootdir/etc/recovery/recovery.fstab
+TARGET_RECOVERY_FSTAB := $(PLATFORM_PATH)/rootdir/etc/fstab.qcom
TARGET_RECOVERY_UI_LIB := librecovery_ui_msm
TARGET_RECOVERY_UPDATER_LIBS := librecovery_updater_msm
TARGET_RELEASETOOLS_EXTENSIONS := device/qcom/common
+BOARD_HAS_LARGE_FILESYSTEM := true
TARGET_USERIMAGES_USE_EXT4 := true
TARGET_USERIMAGES_USE_F2FS := true
-TW_INCLUDE_CRYPTO := true
-BOARD_HAS_NO_REAL_SDCARD := true
-RECOVERY_SDCARD_ON_DATA := true
-BOARD_HAS_LARGE_FILESYSTEM := true
-DEVICE_RESOLUTION := 1080x1920
-HAVE_SELINUX := true
-TARGET_RECOVERY_PIXEL_FORMAT := "BGBX_8888"
# SELinux
include device/qcom/sepolicy/sepolicy.mk
@@ -208,15 +195,18 @@ BOARD_SEPOLICY_DIRS += $(PLATFORM_PATH)/sepolicy
# Sensors
USE_SENSOR_MULTI_HAL := true
+# Timeservice
+BOARD_USES_QC_TIME_SERVICES := true
+
# Wifi
BOARD_HAS_QCOM_WLAN := true
BOARD_HAS_QCOM_WLAN_SDK := true
BOARD_WLAN_DEVICE := qcwcn
+BOARD_WPA_SUPPLICANT_DRIVER := NL80211
+BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
BOARD_HOSTAPD_DRIVER := NL80211
BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
HOSTAPD_VERSION := VER_0_8_X
-BOARD_WPA_SUPPLICANT_DRIVER := NL80211
-BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
WIFI_DRIVER_FW_PATH_AP := "ap"
WIFI_DRIVER_FW_PATH_STA := "sta"
WIFI_DRIVER_FW_PATH_P2P := "p2p"
@@ -224,9 +214,5 @@ WIFI_DRIVER_MODULE_PATH := "/system/lib/modules/wlan.ko"
WIFI_DRIVER_MODULE_NAME := "wlan"
WPA_SUPPLICANT_VERSION := VER_0_8_X
-
-# Timeservice
-BOARD_USES_QC_TIME_SERVICES := true
-
# inherit from the proprietary version
--include vendor/zuk/z2_plus/BoardConfigVendor.mk
+-include vendor/zuk/z2/BoardConfigVendor.mk
diff --git a/README.md b/README.md
index 563399b..69ac33d 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1 @@
-Device configuration for ZUK Z2 Plus modified by Fedor917
-
-For CM13
+Device configuration for ZUK Z2.
diff --git a/android_filesystem_config.h b/android_filesystem_config.h
new file mode 100644
index 0000000..8bb29d8
--- /dev/null
+++ b/android_filesystem_config.h
@@ -0,0 +1,44 @@
+/*
+# Copyright (c) 2016, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of The Linux Foundation 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 <private/android_filesystem_config.h>
+
+
+#define NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS
+static const struct fs_path_config android_device_files[] = {
+ // { 00755, AID_UID, AID_GID, (1ULL << CAPABILITY), "PATH_TO_BINARY" },
+ { 00755, AID_BLUETOOTH, AID_BLUETOOTH, (1ULL << CAP_BLOCK_SUSPEND), "system/bin/wcnss_filter" },
+ { 00755, AID_SYSTEM, AID_SYSTEM, (1ULL << CAP_NET_BIND_SERVICE), "system/bin/cnss-daemon"},
+ { 00755, AID_SYSTEM, AID_SYSTEM, (1ULL << CAP_NET_BIND_SERVICE), "system/bin/pm-service"},
+ { 00755, AID_SYSTEM, AID_SYSTEM, (1ULL << CAP_NET_BIND_SERVICE), "system/bin/imsdatadaemon" },
+ { 00755, AID_SYSTEM, AID_RADIO, (1ULL << CAP_NET_BIND_SERVICE), "system/bin/ims_rtp_daemon" },
+#ifdef NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS
+ { 00000, AID_ROOT, AID_ROOT, 0, "system/etc/fs_config_dirs" },
+#endif
+};
diff --git a/bluetooth/bdroid_buildcfg.h b/bluetooth/bdroid_buildcfg.h
index 8a7f266..2175d6d 100644
--- a/bluetooth/bdroid_buildcfg.h
+++ b/bluetooth/bdroid_buildcfg.h
@@ -21,7 +21,7 @@
#ifndef _BDROID_BUILDCFG_H
#define _BDROID_BUILDCFG_H
-#define BTM_DEF_LOCAL_NAME "ZUK Z2 Plus"
+#define BTM_DEF_LOCAL_NAME "Zuk Z2"
// Disables read remote device feature
#define BTA_SKIP_BLE_READ_REMOTE_FEAT FALSE
#define MAX_ACL_CONNECTIONS 7
diff --git a/org.ifaa.android.manager/Android.mk b/camera/Android.mk
index 4847383..b57aa87 100644
--- a/org.ifaa.android.manager/Android.mk
+++ b/camera/Android.mk
@@ -1,4 +1,3 @@
-#
# Copyright (C) 2016 The CyanogenMod Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -12,16 +11,16 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-#
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_MODULE := org.ifaa.android.manager
+LOCAL_SRC_FILES := camera_shim.cpp
+LOCAL_MODULE := libcamera_shim
LOCAL_MODULE_TAGS := optional
-LOCAL_JAVA_LIBRARIES := bouncycastle
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+LOCAL_32_BIT_ONLY := true
+LOCAL_SHARED_LIBRARIES := libgui
-include $(BUILD_JAVA_LIBRARY)
+include $(BUILD_SHARED_LIBRARY)
diff --git a/camera/camera_shim.cpp b/camera/camera_shim.cpp
new file mode 100644
index 0000000..7f2e189
--- /dev/null
+++ b/camera/camera_shim.cpp
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2016 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+
+const char *_ZN7android18gClientPackageNameE;
+const char *_ZN7android16CameraParameters31KEY_SUPPORTED_VIDEO_SIZES_60FPSE = "support-60fps-video-sizes";
+
+extern "C" {
+
+extern ssize_t _ZN7android13SensorManager13getSensorListEPPKPKNS_6SensorE(void*, void*);
+
+ssize_t _ZNK7android13SensorManager13getSensorListEPPKPKNS_6SensorE(void* thiz, void* list) {
+ return _ZN7android13SensorManager13getSensorListEPPKPKNS_6SensorE(thiz, list);
+}
+
+}
diff --git a/cm.dependencies b/cm.dependencies
index 13aeb72..ee6792e 100644
--- a/cm.dependencies
+++ b/cm.dependencies
@@ -1,8 +1,6 @@
-[
- {
- "remote": "cm",
- "repository": "android_device_qcom_common",
- "target_path": "device/qcom/common",
- "revision": "cm-13.0"
- }
+[
+ {
+ "repository": "android_kernel_zuk_msm8996",
+ "target_path": "kernel/zuk/msm8996"
+ }
]
diff --git a/cm.mk b/cm.mk
index 6f941f0..7362056 100644
--- a/cm.mk
+++ b/cm.mk
@@ -1,5 +1,3 @@
-# Copyright (C) 2016 The CyanogenMod Project
-#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
@@ -17,25 +15,21 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
# Inherit from oneplus3 device
-$(call inherit-product, device/zuk/z2_plus/device.mk)
+$(call inherit-product, device/zuk/z2/device.mk)
# Inherit some common CM stuff.
$(call inherit-product, vendor/cm/config/common_full_phone.mk)
-PRODUCT_NAME := cm_z2_plus
-PRODUCT_DEVICE := z2_plus
+PRODUCT_NAME := cm_z2
+PRODUCT_DEVICE := z2
PRODUCT_MANUFACTURER := ZUK
PRODUCT_BRAND := ZUK
-PRODUCT_MODEL := Z2 Plus
+PRODUCT_MODEL := Z2
PRODUCT_GMS_CLIENTID_BASE := android-zuk
-TARGET_VENDOR_PRODUCT_NAME := z2_plus
-TARGET_VENDOR_DEVICE_NAME := z2_plus
-PRODUCT_BUILD_PROP_OVERRIDES += TARGET_DEVICE=z2_plus PRODUCT_NAME=z2_plus
+TARGET_VENDOR_PRODUCT_NAME := z2
+TARGET_VENDOR_DEVICE_NAME := z2
+PRODUCT_BUILD_PROP_OVERRIDES += TARGET_DEVICE=z2 PRODUCT_NAME=z2
-PRODUCT_BUILD_PROP_OVERRIDES += \
- PRODUCT_DEFAULT_LOCALE="ru-RU"
-# BUILD_FINGERPRINT=ZUK/z2_plus/z2_plus:6.0.1/MMB29M/2.1.059_160829:user/release-keys \
-# PRIVATE_BUILD_DESC="z2_plus-user 6.0.1 MMB29M 2.1.059_160829 release-keys"
TARGET_VENDOR := zuk
diff --git a/cmhw/org/cyanogenmod/hardware/SunlightEnhancement.java b/cmhw/org/cyanogenmod/hardware/SunlightEnhancement.java
new file mode 100644
index 0000000..a83e9cd
--- /dev/null
+++ b/cmhw/org/cyanogenmod/hardware/SunlightEnhancement.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2016 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.cyanogenmod.hardware;
+
+import org.cyanogenmod.internal.util.FileUtils;
+
+import android.util.Log;
+
+/**
+ * Facemelt mode!
+ */
+public class SunlightEnhancement {
+
+ private static final String TAG = "SunlightEnhancement";
+
+ private static final String FILE_HBM = "/sys/class/graphics/fb0/hbm";
+
+ /**
+ * Whether device supports HBM
+ *
+ * @return boolean Supported devices must return always true
+ */
+ public static boolean isSupported() {
+ return FileUtils.isFileWritable(FILE_HBM);
+ }
+
+ /**
+ * This method return the current activation status of HBM
+ *
+ * @return boolean Must be false when HBM is not supported or not activated, or
+ * the operation failed while reading the status; true in any other case.
+ */
+ public static boolean isEnabled() {
+ try {
+ return Integer.parseInt(FileUtils.readOneLine(FILE_HBM)) > 0;
+ } catch (Exception e) {
+ Log.e(TAG, e.getMessage(), e);
+ }
+ return false;
+ }
+
+ /**
+ * This method allows to setup HBM
+ *
+ * @param status The new HBM status
+ * @return boolean Must be false if HBM is not supported or the operation
+ * failed; true in any other case.
+ */
+ public static boolean setEnabled(boolean status) {
+ return FileUtils.writeLine(FILE_HBM, status ? "1" : "0");
+ }
+
+ /**
+ * Whether adaptive backlight (CABL / CABC) is required to be enabled
+ *
+ * @return boolean False if adaptive backlight is not a dependency
+ */
+ public static boolean isAdaptiveBacklightRequired() {
+ return false;
+ }
+
+ /**
+ * Set this to true if the implementation is self-managed and does
+ * it's own ambient sensing. In this case, setEnabled is assumed
+ * to toggle the feature on or off, but not activate it. If set
+ * to false, LiveDisplay will call setEnabled when the ambient lux
+ * threshold is crossed.
+ *
+ * @return true if this enhancement is self-managed
+ */
+ public static boolean isSelfManaged() {
+ return false;
+ }
+}
diff --git a/configs/calib.cfg b/configs/calib.cfg
deleted file mode 100644
index 9b9362d..0000000
--- a/configs/calib.cfg
+++ /dev/null
@@ -1,114 +0,0 @@
-# Assertive Display Calibration Output File Format
-# Calibration config file consists of one or more sections. Each section is set
-# of parameter values stored on one line each. Number of parameters (hence number
-# of lines in each section is fixed. Order in which parameters are specified in
-# given section is fixed as well.
-# Comments are supported in configuration file to improve readability of
-# calibration configuration parameters. Any line begining with '#' is considered
-# as comment and will not be processed further.
-# Blank lines are allowed and are ignored. They can be used to improve
-# readability of assertive display calibration output file.
-# Sections: Any line begining with '=' indicates start of new section in
-# calibration output file. Sections, parameters which are part of section and
-# order in which they will appear in calibration output file is kept outside
-# scope of this documentation in order to have flexibility in development of
-# assertive display calibration system. This information can be shared between
-# APICAL and Qualcomm as part of assertive display bring ups on given platforms.
-# There should not be any spaces betweetn '=' and section name.
-# Version 1.0 of calibration output format supports following sections:
-# version - Contains assertive display calibration output file format version
-# init - Contains assertive display parameters which are independent of
-# assertive display mode
-# config - Contains assertive display parameters which are dependent on specific
-# assertive display mode
-# Each parameter for assertive display calibration is stored on new line. If
-# parameter consists of more than one values (set of values), each value is
-# separated by single space (' ') character. In version 1.0 of assertive
-# display calibration output file format, all numerical values are in decimal
-# unsigned integer format, limited by 32 bits. Range for values or valid value
-# for given parameter is outside scope of this documentation. This information
-# can be shared between APICAL and Qualcomm as part of assertive display bring
-# ups on given platforms.
-# Version 1.1 adds two more init parameters (21 in total) to the config file to support the
-# newly added power saving feature, Parameters added are alpha and BL_ATT lut
-# Version 1.2 adds two more init parameters (23 in total) to the config file to support the
-# driver change, Parameters added are ALS_offset and ALS_threshold
-# Version 1.3 changes the parameters BL linearity LUT and BL inverse LUT
-# from 8 bit to 12 bits. This is done to support the precision increase in the AD Driver
-=version
-1.3
-# APICAL mode indepent initialization Params
-=init
-# A
-0 287 511 712 897 1072 1237 1395 1545 1690 1830 1964 2095 2221 2343 2462 2578 2690 2800 2907 3011 3112 3212 3309 3404 3497 3587 3676 3764 3849 3933 4015 4095
-#0 211 414 609 796 975 1148 1315 1475 1630 1779 1922 2061 2195 2325 2451 2572 2690 2804 2915 3022 3126 3227 3325 3420 3513 3603 3691 3776 3859 3940 4019 4095
-# B
-255 278 302 326 350 374 398 422 446 470 494 517 541 565 589 613 637 661 684 708 732 755 779 803 826 850 874 897 921 945 968 992 1016
-# C
-7 134
-# D
-0
-# E
-1023
-# F
-241
-# G
-240
-# H
-0
-# I
-60
-# J
-224
-# dither_control
-5
-# L
-3
-# M
-0
-# frame_width
-720
-# frame_height
-1280
-# P
-0
-# Q
-0
-# BL_linearity_LUT
-0 16 32 48 64 80 96 112 128 145 161 177 193 209 225 241 257 273 289 305 321 337 353 369 385 401 418 434 450 466 482 498 514 530 546 562 578 594 610 626 642 658 674 691 707 723 739 755 771 787 803 819 835 851 867 883 899 915 931 947 964 980 996 1012 1028 1044 1060 1076 1092 1108 1124 1140 1156 1172 1188 1204 1220 1237 1253 1269 1285 1301 1317 1333 1349 1365 1381 1397 1413 1429 1445 1461 1477 1493 1510 1526 1542 1558 1574 1590 1606 1622 1638 1654 1670 1686 1702 1718 1734 1750 1766 1783 1799 1815 1831 1847 1863 1879 1895 1911 1927 1943 1959 1975 1991 2007 2023 2039 2056 2072 2088 2104 2120 2136 2152 2168 2184 2200 2216 2232 2248 2264 2280 2296 2312 2329 2345 2361 2377 2393 2409 2425 2441 2457 2473 2489 2505 2521 2537 2553 2569 2585 2602 2618 2634 2650 2666 2682 2698 2714 2730 2746 2762 2778 2794 2810 2826 2842 2858 2875 2891 2907 2923 2939 2955 2971 2987 3003 3019 3035 3051 3067 3083 3099 3115 3131 3148 3164 3180 3196 3212 3228 3244 3260 3276 3292 3308 3324 3340 3356 3372 3388 3404 3421 3437 3453 3469 3485 3501 3517 3533 3549 3565 3581 3597 3613 3629 3645 3661 3677 3694 3710 3726 3742 3758 3774 3790 3806 3822 3838 3854 3870 3886 3902 3918 3934 3950 3967 3983 3999 4015 4031 4047 4063 4079 4095
-# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
-# BL_linearity_inverse_LUT
-0 16 32 48 64 80 96 112 128 145 161 177 193 209 225 241 257 273 289 305 321 337 353 369 385 401 418 434 450 466 482 498 514 530 546 562 578 594 610 626 642 658 674 691 707 723 739 755 771 787 803 819 835 851 867 883 899 915 931 947 964 980 996 1012 1028 1044 1060 1076 1092 1108 1124 1140 1156 1172 1188 1204 1220 1237 1253 1269 1285 1301 1317 1333 1349 1365 1381 1397 1413 1429 1445 1461 1477 1493 1510 1526 1542 1558 1574 1590 1606 1622 1638 1654 1670 1686 1702 1718 1734 1750 1766 1783 1799 1815 1831 1847 1863 1879 1895 1911 1927 1943 1959 1975 1991 2007 2023 2039 2056 2072 2088 2104 2120 2136 2152 2168 2184 2200 2216 2232 2248 2264 2280 2296 2312 2329 2345 2361 2377 2393 2409 2425 2441 2457 2473 2489 2505 2521 2537 2553 2569 2585 2602 2618 2634 2650 2666 2682 2698 2714 2730 2746 2762 2778 2794 2810 2826 2842 2858 2875 2891 2907 2923 2939 2955 2971 2987 3003 3019 3035 3051 3067 3083 3099 3115 3131 3148 3164 3180 3196 3212 3228 3244 3260 3276 3292 3308 3324 3340 3356 3372 3388 3404 3421 3437 3453 3469 3485 3501 3517 3533 3549 3565 3581 3597 3613 3629 3645 3661 3677 3694 3710 3726 3742 3758 3774 3790 3806 3822 3838 3854 3870 3886 3902 3918 3934 3950 3967 3983 3999 4015 4031 4047 4063 4079 4095
-# power_saving_coeff
-614
-# BL_att_LUT
-0 128 256 384 512 640 768 896 994 1086 1175 1256 1323 1371 1393 1393 1390 1386 1383 1382 1413 1499 1627 1785 1961 2142 2329 2551 2807 3093 3406 3742 4095
-# al_offset
-2000
-# al_tolarance
-0.7
-#APICAL mode specific configuration
-=config
-# mode
-1
-# R
-0 0 4096 6144 8192 10240 12288 14336 16384 18432 20480 22528 24576 26624 28672 30720 32768 34815 36863 38911 40959 43007 45055 47103 49151 51199 53247 55295 57343 59391 61439 63487 65535
-# back_min
-205
-# back_max
-4095
-# back_scale
-4095
-# ambient_light_min
-14
-# S
-1738 6
-# calibration_abcd
-25 95 0 0
-# T
-160
-# U
-5
-# V
-160
-# M_CC 30d89c85748d4ed61aa9c909f176ed07
diff --git a/configs/capability.xml b/configs/capability.xml
deleted file mode 100644
index 2fa70d6..0000000
--- a/configs/capability.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <!--
- Copyright (C) 2012-2013 Qualcomm Technologies, Inc.
- All Rights Reserved. Qualcomm Technologies Proprietary and Confidential.
- -->
-<Capability>
- <AudioLPCM>
- <Name>LPCM</Name>
- <Valid>1</Valid>
- <Channels>2</Channels>
- <SamplingFreq>48000</SamplingFreq>
- <Latency>33</Latency>
- </AudioLPCM>
- <AudioAAC>
- <Name>AAC</Name>
- <Valid>0</Valid>
- <Channels>0</Channels>
- <SamplingFreq>0</SamplingFreq>
- <Latency>0</Latency>
- </AudioAAC>
- <AudioAC3>
- <Name>AC3</Name>
- <Valid>0</Valid>
- <Channels>0</Channels>
- <SamplingFreq>0</SamplingFreq>
- <Latency>0</Latency>
- </AudioAC3>
- <VideoHeader>
- <VideoMethod>1</VideoMethod>
- <PreferredDisplaySupport>0</PreferredDisplaySupport>
- <H264Profiles>2</H264Profiles>
- <Valid>1</Valid>
- </VideoHeader>
- <CBP>
- <VideoCodec>
- <Profile>1</Profile>
- <Level>1</Level>
- <HorizontalResolution>800</HorizontalResolution>
- <VerticalResolution>480</VerticalResolution>
- <Latency>0</Latency>
- <MinimumSliceSize>0</MinimumSliceSize>
- <SliceEncodingParams>0</SliceEncodingParams>
- <FrameRateControlSupp>1</FrameRateControlSupp>
- <VideoFps>30</VideoFps>
- </VideoCodec>
-</CBP>
-<CHP>
- <VideoCodec>
- <Profile>2</Profile>
- <Level>1</Level>
- <HorizontalResolution>800</HorizontalResolution>
- <VerticalResolution>480</VerticalResolution>
- <Latency>0</Latency>
- <MinimumSliceSize>0</MinimumSliceSize>
- <SliceEncodingParams>0</SliceEncodingParams>
- <FrameRateControlSupp>1</FrameRateControlSupp>
- <VideoFps>30</VideoFps>
- </VideoCodec>
-</CHP>
-
- <StandbyResumeCapability>
- <Valid>1</Valid>
- </StandbyResumeCapability>
- <!--
- IDR interval is to trigger an IDR request from sink.
- This can be applcable only to sink. IDRInterval is in msec
- -->
- <IDRRequest>
- <Valid>0</Valid>
- <IDRInterval>0</IDRInterval>
- </IDRRequest>
- <AVFormatChange>
- <Valid>0</Valid>
- <AVInterval>0</AVInterval>
- </AVFormatChange>
- <!--
- Frame skipping interval is in the scale of 500 msec/half second.
- FrameInterval can be between 1 to 7, according to the WFD spec.
- -->
- <FrameSkipping>
- <Valid>0</Valid>
- <FrameInterval>0</FrameInterval>
- </FrameSkipping>
- <ContentProtection>
- <Valid>0</Valid>
- <Version>WFD_HDCP_2_1</Version> <!-- Valid values WFD_HDCP_2_0 and WFD_HDCP_2_1 -->
- <CPPort>6789</CPPort>
- </ContentProtection>
- <RTPPortType>
- <ConnectionType>0</ConnectionType> <!-- 0 - UDP ,1 - TCP -->
- </RTPPortType>
- <RTPDumpEnable>
- <Valid>0</Valid> <!-- Enable RTP Dump Valid = 1 or Valid = 0-->
- </RTPDumpEnable>
- <UIBC>
- <UIBCValid>0</UIBCValid> <!-- 0/1 UIBC supported or not -->
- <InputCategory>
- <Generic>1</Generic> <!-- 0/1 - support generic or not -->
- </InputCategory>
- <InputEvents>
- <GenericInputEvents>
- <Mouse>1</Mouse> <!-- 0/1 for all Input Event Types -->
- <Keyboard>1</Keyboard>
- <SingleTouch>1</SingleTouch>
- <MultiTouch>1</MultiTouch>
- <JoyStick>1</JoyStick>
- <Camera>0</Camera>
- <Gesture>0</Gesture>
- <RemoteControl>1</RemoteControl>
- </GenericInputEvents>
- </InputEvents>
- <TcpPort>4321</TcpPort>
- </UIBC>
- <AudioStreamInSuspend>0</AudioStreamInSuspend>
-</Capability>
diff --git a/configs/media_codecs.xml b/configs/media_codecs.xml
index 78dd159..89a6e66 100644
--- a/configs/media_codecs.xml
+++ b/configs/media_codecs.xml
@@ -91,7 +91,7 @@ Only the three quirks included above are recognized at this point:
| | (4096) (2160) (56) (100) | |
| mpeg4 | 1920 1088 60 60 489600 | N |
| vc1 | 1920 1088 60 60 489600 | Y |
- | vp8 | 3840 2160 30 20 979200 | N |
+ | vp8 | 3840 2160 30 100 979200 | N |
| vp9 | 3840 2160 30 100 979200 | Y |
| divx3 | 720 480 30 2 40500 | N |
| div4/5/6 | 1920 1088 30 10 244800 | N |
@@ -107,7 +107,7 @@ Only the three quirks included above are recognized at this point:
| h264 | 3840 2160 30 100 979200 |
| hevc | 3840 2160 30 100 979200 |
| mpeg4 | 1920 1088 60 60 489600 |
- | vp8 | 3840 2160 30 20 979200 |
+ | vp8 | 3840 2160 30 100 979200 |
| h263 | 864 480 30 2 48600 |
|__________|_________________________________________|
-->
@@ -180,7 +180,7 @@ Only the three quirks included above are recognized at this point:
<Limit name="alignment" value="2x2" />
<Limit name="block-size" value="16x16" />
<Limit name="blocks-per-second" min="1" max="979200" />
- <Limit name="bitrate" range="1-20000000" />
+ <Limit name="bitrate" range="1-100000000" />
<Limit name="frame-rate" range="1-240" />
<Limit name="concurrent-instances" max="16" />
</MediaCodec>
@@ -346,7 +346,7 @@ Only the three quirks included above are recognized at this point:
<Limit name="alignment" value="2x2" />
<Limit name="block-size" value="16x16" />
<Limit name="blocks-per-second" min="1" max="979200" />
- <Limit name="bitrate" range="1-20000000" />
+ <Limit name="bitrate" range="1-100000000" />
<Limit name="frame-rate" range="1-240" />
<Feature name="adaptive-playback" />
<Limit name="concurrent-instances" max="16" />
@@ -370,7 +370,7 @@ Only the three quirks included above are recognized at this point:
<Limit name="alignment" value="2x2" />
<Limit name="block-size" value="16x16" />
<Limit name="blocks-per-second" min="1" max="979200" />
- <Limit name="bitrate" range="1-20000000" />
+ <Limit name="bitrate" range="1-100000000" />
<Limit name="frame-rate" range="1-240" />
<Feature name="adaptive-playback" />
<Feature name="secure-playback" required="true" />
diff --git a/configs/media_profiles.xml b/configs/media_profiles.xml
index 82700dd..d0810b3 100644
--- a/configs/media_profiles.xml
+++ b/configs/media_profiles.xml
@@ -47,7 +47,7 @@
<!ELEMENT EncoderOutputFileFormat EMPTY>
<!ATTLIST EncoderOutputFileFormat name (mp4|3gp) #REQUIRED>
<!ELEMENT VideoEncoderCap EMPTY>
-<!ATTLIST VideoEncoderCap name (h265|h264|h263|m4v|wmv) #REQUIRED>
+<!ATTLIST VideoEncoderCap name (hevc|h264|h263|m4v|wmv) #REQUIRED>
<!ATTLIST VideoEncoderCap enabled (true|false) #REQUIRED>
<!ATTLIST VideoEncoderCap minBitRate CDATA #REQUIRED>
<!ATTLIST VideoEncoderCap maxBitRate CDATA #REQUIRED>
@@ -683,7 +683,7 @@
maxHFRFrameWidth="0" maxHFRFrameHeight="0"
maxHFRMode="0" />
- <VideoEncoderCap name="h265" enabled="true"
+ <VideoEncoderCap name="hevc" enabled="true"
minBitRate="64000" maxBitRate="100000000"
minFrameWidth="176" maxFrameWidth="4096"
minFrameHeight="144" maxFrameHeight="2160"
@@ -692,7 +692,7 @@
maxHFRMode="0" />
<AudioEncoderCap name="aac" enabled="true"
- minBitRate="8000" maxBitRate="96000"
+ minBitRate="8000" maxBitRate="192000"
minSampleRate="8000" maxSampleRate="48000"
minChannels="1" maxChannels="6" />
diff --git a/data-ipa-cfg-mgr/ipacm/src/Android.mk b/data-ipa-cfg-mgr/ipacm/src/Android.mk
index cdfda29..3c57d71 100644
--- a/data-ipa-cfg-mgr/ipacm/src/Android.mk
+++ b/data-ipa-cfg-mgr/ipacm/src/Android.mk
@@ -10,7 +10,6 @@ LOCAL_C_INCLUDES += external/icu/icu4c/source/common
else
LOCAL_C_INCLUDES += external/icu4c/common
endif
-LOCAL_C_INCLUDES += external/dhcpcd
LOCAL_C_INCLUDES += external/libxml2/include
LOCAL_C_INCLUDES += external/libnetfilter_conntrack/include
LOCAL_C_INCLUDES += external/libnfnetlink/include
@@ -62,7 +61,6 @@ LOCAL_SHARED_LIBRARIES := libipanat
LOCAL_SHARED_LIBRARIES += libxml2
LOCAL_SHARED_LIBRARIES += libnfnetlink
LOCAL_SHARED_LIBRARIES += libnetfilter_conntrack
-LOCAL_SHARED_LIBRARIES += libdhcpcd
include $(BUILD_EXECUTABLE)
################################################################################
diff --git a/data-ipa-cfg-mgr/ipanat/test/Android.mk b/data-ipa-cfg-mgr/ipanat/test/Android.mk
index 4c94b56..9757716 100644
--- a/data-ipa-cfg-mgr/ipanat/test/Android.mk
+++ b/data-ipa-cfg-mgr/ipanat/test/Android.mk
@@ -43,7 +43,7 @@ LOCAL_SRC_FILES := ipa_nat_test000.c \
LOCAL_SHARED_LIBRARIES := libipanat
-LOCAL_MODULE_TAGS := debug
+LOCAL_MODULE_TAGS := tests
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/kernel-tests/ip_accelerator
include $(BUILD_EXECUTABLE)
diff --git a/device.mk b/device.mk
index bd5d794..8736181 100644
--- a/device.mk
+++ b/device.mk
@@ -1,5 +1,3 @@
-# Copyright (C) 2016 The CyanogenMod Project
-#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
@@ -20,8 +18,7 @@
# definition file).
#
-$(call inherit-product-if-exists, vendor/zuk/z2_plus/z2_plus-vendor.mk)
-$(call inherit-product-if-exists, device/zuk/z2_plus/vendor/copyfiles.mk)
+$(call inherit-product-if-exists, vendor/zuk/z2/z2-vendor.mk)
# Overlays
DEVICE_PACKAGE_OVERLAYS += $(LOCAL_PATH)/overlay
@@ -29,6 +26,7 @@ DEVICE_PACKAGE_OVERLAYS += $(LOCAL_PATH)/overlay
# Permissions
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.audio.low_latency.xml:system/etc/permissions/android.hardware.audio.low_latency.xml \
+ frameworks/native/data/etc/android.hardware.audio.pro.xml:system/etc/permissions/android.hardware.audio.pro.xml \
frameworks/native/data/etc/android.hardware.bluetooth_le.xml:system/etc/permissions/android.hardware.bluetooth_le.xml \
frameworks/native/data/etc/android.hardware.bluetooth.xml:system/etc/permissions/android.hardware.bluetooth.xml \
frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:system/etc/permissions/android.hardware.camera.flash-autofocus.xml \
@@ -39,14 +37,12 @@ PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.location.gps.xml:system/etc/permissions/android.hardware.location.gps.xml \
frameworks/native/data/etc/android.hardware.opengles.aep.xml:system/etc/permissions/android.hardware.opengles.aep.xml \
frameworks/native/data/etc/android.hardware.sensor.accelerometer.xml:system/etc/permissions/android.hardware.sensor.accelerometer.xml \
- frameworks/native/data/etc/android.hardware.sensor.ambient_temperature.xml:system/etc/permissions/android.hardware.sensor.ambient_temperature.xml \
frameworks/native/data/etc/android.hardware.sensor.barometer.xml:system/etc/permissions/android.hardware.sensor.barometer.xml \
frameworks/native/data/etc/android.hardware.sensor.compass.xml:system/etc/permissions/android.hardware.sensor.compass.xml \
frameworks/native/data/etc/android.hardware.sensor.gyroscope.xml:system/etc/permissions/android.hardware.sensor.gyroscope.xml \
frameworks/native/data/etc/android.hardware.sensor.hifi_sensors.xml:system/etc/permissions/android.hardware.sensor.hifi_sensors.xml \
frameworks/native/data/etc/android.hardware.sensor.light.xml:system/etc/permissions/android.hardware.sensor.light.xml \
frameworks/native/data/etc/android.hardware.sensor.proximity.xml:system/etc/permissions/android.hardware.sensor.proximity.xml \
- frameworks/native/data/etc/android.hardware.sensor.relative_humidity.xml:system/etc/permissions/android.hardware.sensor.relative_humidity.xml \
frameworks/native/data/etc/android.hardware.sensor.stepcounter.xml:system/etc/permissions/android.hardware.sensor.stepcounter.xml \
frameworks/native/data/etc/android.hardware.sensor.stepdetector.xml:system/etc/permissions/android.hardware.sensor.stepdetector.xml \
frameworks/native/data/etc/android.hardware.telephony.cdma.xml:system/etc/permissions/android.hardware.telephony.cdma.xml \
@@ -54,52 +50,51 @@ PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \
frameworks/native/data/etc/android.hardware.usb.accessory.xml:system/etc/permissions/android.hardware.usb.accessory.xml \
frameworks/native/data/etc/android.hardware.usb.host.xml:system/etc/permissions/android.hardware.usb.host.xml \
+ frameworks/native/data/etc/android.hardware.vulkan.level-0.xml:system/etc/permissions/android.hardware.vulkan.level.xml \
+ frameworks/native/data/etc/android.hardware.vulkan.version-1_0_3.xml:system/etc/permissions/android.hardware.vulkan.version.xml \
frameworks/native/data/etc/android.hardware.wifi.direct.xml:system/etc/permissions/android.hardware.wifi.direct.xml \
frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \
frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.midi.xml \
frameworks/native/data/etc/android.software.sip.voip.xml:system/etc/permissions/android.software.sip.voip.xml \
- frameworks/native/data/etc/com.nxp.mifare.xml:system/etc/permissions/com.nxp.mifare.xml \
frameworks/native/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml
# Device uses high-density artwork where available
PRODUCT_AAPT_CONFIG := normal
PRODUCT_AAPT_PREF_CONFIG := xxhdpi
+# Device was launched with M
+PRODUCT_PROPERTY_OVERRIDES += \
+ ro.product.first_api_level=23
+
# Boot animation
TARGET_SCREEN_HEIGHT := 1920
TARGET_SCREEN_WIDTH := 1080
PRODUCT_PROPERTY_OVERRIDES += \
dalvik.vm.heapstartsize=8m \
- dalvik.vm.heapgrowthlimit=256m \
- dalvik.vm.heapsize=512m \
+ dalvik.vm.heapgrowthlimit=288m \
+ dalvik.vm.heapsize=768m \
dalvik.vm.heaptargetutilization=0.75 \
dalvik.vm.heapminfree=512k \
dalvik.vm.heapmaxfree=8m
PRODUCT_PROPERTY_OVERRIDES += \
- ro.hwui.texture_cache_size=96 \
- ro.hwui.layer_cache_size=64 \
- ro.hwui.r_buffer_cache_size=12 \
- ro.hwui.path_cache_size=39 \
+ ro.hwui.texture_cache_size=72 \
+ ro.hwui.layer_cache_size=48 \
+ ro.hwui.path_cache_size=32 \
ro.hwui.gradient_cache_size=1 \
- ro.hwui.drop_shadow_cache_size=7 \
+ ro.hwui.drop_shadow_cache_size=6 \
+ ro.hwui.r_buffer_cache_size=8 \
+ ro.hwui.r_buffer_cache_size=8 \
ro.hwui.texture_cache_flushrate=0.4 \
- ro.hwui.text_small_cache_width=2048 \
- ro.hwui.text_small_cache_height=2048 \
- ro.hwui.text_large_cache_width=3072 \
- ro.hwui.text_large_cache_height=2048
+ ro.hwui.text_small_cache_width=1024 \
+ ro.hwui.text_small_cache_height=1024 \
+ ro.hwui.text_large_cache_width=2048 \
+ ro.hwui.text_large_cache_height=1024
# Haters gonna hate..
PRODUCT_CHARACTERISTICS := nosdcard
-# Alipay
-PRODUCT_PACKAGES += \
- org.ifaa.android.manager
-
-PRODUCT_BOOT_JARS += \
- org.ifaa.android.manager
-
# Audio
PRODUCT_PACKAGES += \
audiod \
@@ -119,7 +114,7 @@ PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/audio/audio_output_policy.conf:system/vendor/etc/audio_output_policy.conf \
$(LOCAL_PATH)/audio/audio_platform_info.xml:system/etc/audio_platform_info.xml \
$(LOCAL_PATH)/audio/audio_policy.conf:system/etc/audio_policy.conf \
- $(LOCAL_PATH)/audio/listen_platform_info.xml:system/etc/listen_platform_info.xml
+ $(LOCAL_PATH)/audio/listen_platform_info.xml:system/etc/listen_platform_info.xml
# ANT+
PRODUCT_PACKAGES += \
@@ -132,15 +127,7 @@ PRODUCT_COPY_FILES += \
# Camera
PRODUCT_PACKAGES += \
- Snap \
-
-# Gestures
-PRODUCT_PACKAGES += \
- com.cyanogenmod.keyhandler
-
-# Charger
-PRODUCT_PACKAGES += \
- charger_res_images
+ Snap
# Connectivity Engine support (CNE)
PRODUCT_PACKAGES += \
@@ -148,10 +135,6 @@ PRODUCT_PACKAGES += \
com.quicinc.cne \
services-ext
-# CNE
-PRODUCT_PACKAGES += \
- libcnefeatureconfig
-
# Display
PRODUCT_PACKAGES += \
copybit.msm8996 \
@@ -163,7 +146,7 @@ PRODUCT_PACKAGES += \
# Doze mode
PRODUCT_PACKAGES += \
- ZukDoze
+ CmDoze
# Fingerprint sensor
PRODUCT_PACKAGES += \
@@ -175,17 +158,20 @@ PRODUCT_PACKAGES += \
# GPS
PRODUCT_PACKAGES += \
- gps.msm8996 \
libcurl
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/gps/etc/flp.conf:system/etc/flp.conf \
$(LOCAL_PATH)/gps/etc/gps.conf:system/etc/gps.conf \
$(LOCAL_PATH)/gps/etc/izat.conf:system/etc/izat.conf \
- $(LOCAL_PATH)/gps/etc/lowi.conf:system/etc/lowi.conf \
$(LOCAL_PATH)/gps/etc/sap.conf:system/etc/sap.conf \
+ $(LOCAL_PATH)/gps/etc/lowi.conf:system/etc/lowi.conf \
$(LOCAL_PATH)/gps/etc/xtwifi.conf:system/etc/xtwifi.conf
+# Graphics
+PRODUCT_PACKAGES += \
+ libsdm-disp-apis
+
# IPv6
PRODUCT_PACKAGES += \
ebtables \
@@ -206,17 +192,17 @@ PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/keylayout/gpio-keys.kl:system/usr/keylayout/gpio-keys.kl \
$(LOCAL_PATH)/keylayout/synaptics_dsx.kl:system/usr/keylayout/synaptics_dsx.kl \
$(LOCAL_PATH)/keylayout/msm8996-tasha-mtp-snd-card_Button_Jack.kl:system/usr/keylayout/msm8996-tasha-mtp-snd-card_Button_Jack.kl \
- $(LOCAL_PATH)/keylayout/qpnp_pon.kl:system/usr/keylayout/qpnp_pon.kl
+ $(LOCAL_PATH)/keylayout/qpnp_pon.kl:system/usr/keylayout/qpnp_pon.kl
# Lights
PRODUCT_PACKAGES += \
lights.msm8996
-# Media
-PRODUCT_COPY_FILES += \
- $(LOCAL_PATH)/configs/calib.cfg:system/etc/calib.cfg \
- $(LOCAL_PATH)/configs/capability.xml:system/etc/capability.xml
+# LiveDisplay native
+PRODUCT_PACKAGES += \
+ libjni_livedisplay
+# Media
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/configs/media_codecs.xml:system/etc/media_codecs.xml \
$(LOCAL_PATH)/configs/media_codecs_performance.xml:system/etc/media_codecs_performance.xml \
@@ -278,18 +264,18 @@ PRODUCT_PACKAGES += \
libQWiFiSoftApCfg \
libwpa_client \
hostapd \
- dhcpcd.conf \
wpa_supplicant \
wpa_supplicant.conf
PRODUCT_COPY_FILES += \
- $(LOCAL_PATH)/wifi/fstman.ini:system/etc/wifi/fstman.ini \
$(LOCAL_PATH)/wifi/hostapd.accept:system/etc/hostapd/hostapd.accept \
$(LOCAL_PATH)/wifi/hostapd.conf:system/etc/hostapd/hostapd_default.conf \
$(LOCAL_PATH)/wifi/hostapd.deny:system/etc/hostapd/hostapd.deny \
$(LOCAL_PATH)/wifi/p2p_supplicant_overlay.conf:system/etc/wifi/p2p_supplicant_overlay.conf \
- $(LOCAL_PATH)/wifi/wpa_supplicant_overlay.conf:system/etc/wifi/wpa_supplicant_overlay.conf
+ $(LOCAL_PATH)/wifi/wpa_supplicant_overlay.conf:system/etc/wifi/wpa_supplicant_overlay.conf \
+ $(LOCAL_PATH)/wifi/fstman.ini:system/etc/wifi/fstman.ini
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/wifi/WCNSS_qcom_cfg.ini:system/etc/wifi/WCNSS_qcom_cfg.ini \
$(LOCAL_PATH)/wifi/WCNSS_cfg.dat:system/etc/firmware/wlan/qca_cld/WCNSS_cfg.dat
+
diff --git a/doze/Android.mk b/doze/Android.mk
index de136ea..9c397b5 100644
--- a/doze/Android.mk
+++ b/doze/Android.mk
@@ -5,12 +5,32 @@ LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_PACKAGE_NAME := ZukDoze
+LOCAL_PACKAGE_NAME := CmDoze
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ android-support-v4 \
+ android-support-v13 \
+ android-support-v7-recyclerview \
+ android-support-v7-preference \
+ android-support-v7-appcompat \
+ android-support-v14-preference \
+ org.cyanogenmod.platform.internal
+
+LOCAL_RESOURCE_DIR := \
+ $(LOCAL_PATH)/res \
+ frameworks/support/v7/preference/res \
+ frameworks/support/v14/preference/res \
+ frameworks/support/v7/appcompat/res \
+ frameworks/support/v7/recyclerview/res
+
+LOCAL_AAPT_FLAGS := --auto-add-overlay \
+ --extra-packages android.support.v7.preference:android.support.v14.preference:android.support.v17.preference:android.support.v7.appcompat:android.support.v7.recyclerview
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
+include frameworks/base/packages/SettingsLib/common.mk
+
include $(BUILD_PACKAGE)
include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/doze/AndroidManifest.xml b/doze/AndroidManifest.xml
index 54783eb..d44a1b2 100644
--- a/doze/AndroidManifest.xml
+++ b/doze/AndroidManifest.xml
@@ -7,39 +7,42 @@
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
+ <uses-permission android:name="cyanogenmod.permission.MANAGE_REMOTE_PREFERENCES" />
<uses-sdk
- android:minSdkVersion="21"
- android:targetSdkVersion="21"/>
+ android:minSdkVersion="24"
+ android:targetSdkVersion="24"/>
<application
- android:label="ZukDoze"
+ android:label="CmDoze"
android:persistent="true">
- <receiver android:name="com.cyanogenmod.settings.doze.BootCompletedReceiver">
+ <receiver android:name="com.cyanogenmod.settings.doze.DozeReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
+ <action android:name="cyanogenmod.intent.action.UPDATE_PREFERENCE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<service android:name="com.cyanogenmod.settings.doze.DozeService"
- android:permission="ZukDozeService">
+ android:permission="OneplusDozeService">
</service>
<activity
android:name=".DozeSettings"
android:label="@string/ambient_display_title"
- android:theme="@android:style/Theme.Material.Settings">
+ android:theme="@style/DozeSettings">
<intent-filter>
- <action android:name="com.android.settings.action.EXTRA_SETTINGS" />
+ <action android:name="org.cyanogenmod.settings.device.DOZE_SETTINGS" />
+ <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
- android:name="com.android.settings.category"
- android:value="com.android.settings.category.device" />
+ android:name="org.cyanogenmod.settings.summary.receiver"
+ android:value="com.cyanogenmod.settings.doze.DozeReceiver" />
<meta-data
- android:name="com.android.settings.icon"
- android:resource="@drawable/ic_settings_doze" />
+ android:name="org.cyanogenmod.settings.summary.key"
+ android:value="doze_device_settings" />
</activity>
</application>
diff --git a/doze/proguard.flags b/doze/proguard.flags
index a21e62f..7f3d4c7 100644
--- a/doze/proguard.flags
+++ b/doze/proguard.flags
@@ -1,3 +1,8 @@
+-keepclasseswithmembers class * {
+ public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+-keep class ** extends android.support.v14.preference.PreferenceFragment
-keep class com.cyanogenmod.settings.doze.* {
*;
}
diff --git a/doze/res/drawable/switchbar_background.xml b/doze/res/drawable/switchbar_background.xml
new file mode 100644
index 0000000..45f1578
--- /dev/null
+++ b/doze/res/drawable/switchbar_background.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:attr/colorControlHighlight">
+ <item android:drawable="@color/switch_bar_background" />
+</ripple>
+
diff --git a/doze/res/layout/doze.xml b/doze/res/layout/doze.xml
new file mode 100644
index 0000000..941cdf6
--- /dev/null
+++ b/doze/res/layout/doze.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent">
+
+ <include layout="@layout/switch_bar" />
+
+</LinearLayout>
+
diff --git a/doze/res/layout/switch_bar.xml b/doze/res/layout/switch_bar.xml
new file mode 100644
index 0000000..f98de96
--- /dev/null
+++ b/doze/res/layout/switch_bar.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/switch_bar"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:background="@drawable/switchbar_background"
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp"
+ android:clickable="true"
+ android:gravity="center">
+
+ <TextView android:id="@+id/switch_text"
+ android:layout_height="wrap_content"
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:layout_gravity="center_vertical"
+ android:paddingStart="48dp"
+ android:maxLines="2"
+ android:ellipsize="end"
+ android:textAppearance="@android:style/TextAppearance.Material.Title"
+ android:textColor="?android:attr/textColorPrimaryInverse"
+ android:textAlignment="viewStart"
+ android:text="@string/switch_bar_on" />
+
+ <Switch
+ android:id="@android:id/switch_widget"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:background="@null"
+ android:theme="@style/ThemeOverlay.SwitchBar" />
+
+</LinearLayout>
diff --git a/doze/res/values-gl-rES/strings.xml b/doze/res/values-gl-rES/strings.xml
index 809934c..c023c08 100644
--- a/doze/res/values-gl-rES/strings.xml
+++ b/doze/res/values-gl-rES/strings.xml
@@ -13,22 +13,7 @@
limitations under the License.
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="ambient_display_title">Visualización ambiente</string>
- <string name="ambient_display_summary">Activar a pantalla ao recibir notificacións</string>
- <string name="always_enabled_title">Sempre activo</string>
- <string name="always_enabled_summary">Atender ao eventos do sensor así que se apague a pantalla</string>
<!-- Tilt sensor -->
- <string name="tilt_sensor_title">Sensor de inclinación</string>
- <string name="pick_up_title">Coller</string>
- <string name="pick_up_summary">Amosar notificacións ao coller o dispositivo</string>
<!-- Proximity sensor -->
- <string name="priximity_sensor_title">Sensor de proximidade</string>
- <string name="hand_wave_gesture_title">Pasar a man</string>
- <string name="hand_wave_gesture_summary">Amosar notificacións ao pasar a man</string>
- <string name="pocket_gesture_title">Peto</string>
- <string name="pocket_gesture_summary">Amosar notificacións ao sacar do peto</string>
<!-- Help text -->
- <string name="dlg_ok">ACEPTAR</string>
- <string name="doze_settings_help_title">Axuda</string>
- <string name="doze_settings_help_text">Estas características usan eventos do sensor para amosar unha notificación latente. O sensor seleccionado habilitarase só cando reciba unha notificación axudando a reducir o consumo da batería. Tamén existe unha opción para activar o sensor así que se apague a pantalla, pero isto causará un maior uso da batería.</string>
</resources>
diff --git a/doze/res/values-iw/strings.xml b/doze/res/values-iw/strings.xml
index b3ba98f..caff68b 100644
--- a/doze/res/values-iw/strings.xml
+++ b/doze/res/values-iw/strings.xml
@@ -27,5 +27,4 @@
<!-- Help text -->
<string name="dlg_ok">×ישור</string>
<string name="doze_settings_help_title">עזרה</string>
- <string name="doze_settings_help_text">התכונות נעזרות בחיישני ××™×¨×•×¢×™× ×›×“×™ להפעיל הדגשת התר×ות ×¢× Doze. החיישן הנבחר מופעל רק ×›×שר המכשיר מקבל התר××”, מה שעוזר להקטין ×ת השימוש בסוללה. בנוסף, יש ×פשרות להפעיל ×ת החיישן הנבחר ברגע שהמסך נכבה, מה שעלול ×œ×’×¨×•× ×œ×©×™×ž×•×© רב יותר בסוללה.</string>
</resources>
diff --git a/doze/res/values-nl/strings.xml b/doze/res/values-nl/strings.xml
index b803eeb..a9db278 100644
--- a/doze/res/values-nl/strings.xml
+++ b/doze/res/values-nl/strings.xml
@@ -30,5 +30,5 @@
<!-- Help text -->
<string name="dlg_ok">OK</string>
<string name="doze_settings_help_title">Help</string>
- <string name="doze_settings_help_text">Deze functies gebruiken sensoren om een Doze-puls te versturen. De gekozen sensor is alleen ingeschakeld als het apparaat een melding ontvangt. Dit helpt het accugebruik te verminderen. Er is ook een optie om de sensor te activeren zodra het scherm uitschakelt, maar dit leidt tot hoger accugebruik.</string>
+ <string name="doze_settings_help_text">Deze functies gebruiken sensoren om een Doze-puls te versturen. De gekozen sensor is alleen ingeschakeld als het apparaat een melding ontvangt. Dit helpt het batterijgebruik te verminderen. Er is ook een optie om de sensor te activeren zodra het scherm uitschakelt, maar dit leidt tot hoger batterijgebruik.</string>
</resources>
diff --git a/doze/res/values-pl/strings.xml b/doze/res/values-pl/strings.xml
index ec0b8c6..aa010bf 100644
--- a/doze/res/values-pl/strings.xml
+++ b/doze/res/values-pl/strings.xml
@@ -15,7 +15,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="ambient_display_title">Aktywny wyświetlacz</string>
<string name="ambient_display_summary">Wybudź ekran po odebraniu powiadomienia</string>
- <string name="always_enabled_title">Zawsze włączone</string>
<string name="always_enabled_summary">Nasłuchiwanie zdarzeń z czujników zaraz po wyłączeniu ekranu</string>
<!-- Tilt sensor -->
<string name="tilt_sensor_title">Czujnik pochylenia</string>
@@ -29,5 +28,4 @@
<!-- Help text -->
<string name="dlg_ok">OK</string>
<string name="doze_settings_help_title">Pomoc</string>
- <string name="doze_settings_help_text">Te funkcje używają czujników, aby pokazywać powiadomienia tylko w odpowiednim momencie. Czujniki są wykorzystywane, kiedy telefon odbierze powiadomienie. Pozwala to w oszczędzaniu baterii. Istnieje również możliwość, aby włączyć wybrany czujnik zaraz po wyłączeniu ekranu, spowoduje to większe zużycie baterii.</string>
</resources>
diff --git a/doze/res/values-sv/strings.xml b/doze/res/values-sv/strings.xml
index 225a2b8..030a831 100644
--- a/doze/res/values-sv/strings.xml
+++ b/doze/res/values-sv/strings.xml
@@ -15,10 +15,8 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Tilt sensor -->
<string name="pick_up_title">Plocka upp</string>
- <string name="pick_up_summary">Pulsera aviseringarna när enheten plockas upp</string>
<!-- Proximity sensor -->
<string name="priximity_sensor_title">Närhetscensor</string>
- <string name="pocket_gesture_summary">Pulsera aviseringar när telefonen tas upp ur fickan</string>
<!-- Help text -->
<string name="dlg_ok">OK</string>
<string name="doze_settings_help_title">Hjälp</string>
diff --git a/doze/res/values/colors.xml b/doze/res/values/colors.xml
new file mode 100644
index 0000000..d598598
--- /dev/null
+++ b/doze/res/values/colors.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<resources>
+ <color name="switch_bar_background">#ff37474f</color>
+ <color name="switch_accent_color">#ff7fcac3</color>
+ <color name="system_secondary_color">#ff37474F</color>
+</resources>
diff --git a/doze/res/values/strings.xml b/doze/res/values/strings.xml
index 9643190..fed5b05 100644
--- a/doze/res/values/strings.xml
+++ b/doze/res/values/strings.xml
@@ -13,11 +13,16 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Label for feature switch [CHAR LIMIT=30] -->
+ <string name="switch_bar_on">On</string>
+
+ <!-- Label for feature switch [CHAR LIMIT=30] -->
+ <string name="switch_bar_off">Off</string>
+
<string name="ambient_display_title">Ambient display</string>
<string name="ambient_display_summary">Wake screen when you receive notifications</string>
-
- <string name="always_enabled_title">Always enable</string>
- <string name="always_enabled_summary">Listen for sensor events as soon as the screen turns off</string>
+ <string name="ambient_display_summary_on">Screen will wake when you receive notifications</string>
+ <string name="ambient_display_summary_off">Screen will not wake when you receive notifications</string>
<!-- Tilt sensor -->
<string name="tilt_sensor_title">Tilt sensor</string>
@@ -34,5 +39,5 @@
<!-- Help text -->
<string name="dlg_ok">OK</string>
<string name="doze_settings_help_title">Help</string>
- <string name="doze_settings_help_text">These features use sensor events to launch a doze notification pulse. The chosen sensor is only enabled when the device receives a notification, this helps to reduce battery usage. There is also an option to enable the chosen sensor as soon as the screen turns off, this will cause higher battery usage.</string>
+ <string name="doze_settings_help_text">These features use sensor events to launch a doze notification pulse, this will cause higher battery usage.</string>
</resources>
diff --git a/doze/res/values/styles.xml b/doze/res/values/styles.xml
new file mode 100644
index 0000000..78d2d59
--- /dev/null
+++ b/doze/res/values/styles.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The CyanogenMod Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+ <style name="DozeSettings" parent="@android:style/Theme.Material.Settings">
+ <item name="android:windowActionBar">false</item>
+ <item name="preferenceTheme">@style/DozePreferenceTheme</item>
+ </style>
+
+ <style name="DozePreferenceTheme" parent="@android:style/Theme.Material.Settings">
+ <item name="dropdownPreferenceStyle">@style/Preference.DropDown.Material</item>
+ </style>
+
+ <style name="ThemeOverlay.SwitchBar" parent="@android:style/ThemeOverlay">
+ <item name="android:colorAccent">@color/switch_accent_color</item>
+ </style>
+
+ <style name="ThemeOverlay.SwitchBar.Secondary" parent="@android:style/ThemeOverlay">
+ <item name="android:colorAccent">@color/system_secondary_color</item>
+ </style>
+
+</resources>
diff --git a/doze/res/xml/doze_settings.xml b/doze/res/xml/doze_settings.xml
index 09e27b5..acc19d2 100644
--- a/doze/res/xml/doze_settings.xml
+++ b/doze/res/xml/doze_settings.xml
@@ -14,13 +14,8 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
- <SwitchPreference
- android:key="ambient_display"
- android:defaultValue="true"
- android:title="@string/ambient_display_title"
- android:summary="@string/ambient_display_summary" />
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:cm="http://schemas.android.com/apk/res/cyanogenmod.platform">
<PreferenceCategory
android:key="tilt_sensor"
@@ -30,15 +25,7 @@
android:key="pick_up"
android:defaultValue="false"
android:title="@string/pick_up_title"
- android:summary="@string/pick_up_summary"
- android:dependency="ambient_display" />
-
- <SwitchPreference
- android:key="tilt_always"
- android:defaultValue="false"
- android:title="@string/always_enabled_title"
- android:summary="@string/always_enabled_summary"
- android:dependency="ambient_display" />
+ android:summary="@string/pick_up_summary" />
</PreferenceCategory>
@@ -50,22 +37,13 @@
android:key="gesture_hand_wave"
android:defaultValue="false"
android:title="@string/hand_wave_gesture_title"
- android:summary="@string/hand_wave_gesture_summary"
- android:dependency="ambient_display" />
+ android:summary="@string/hand_wave_gesture_summary" />
<SwitchPreference
android:key="gesture_pocket"
android:defaultValue="false"
android:title="@string/pocket_gesture_title"
- android:summary="@string/pocket_gesture_summary"
- android:dependency="ambient_display" />
-
- <SwitchPreference
- android:key="proximity_always"
- android:defaultValue="false"
- android:title="@string/always_enabled_title"
- android:summary="@string/always_enabled_summary"
- android:dependency="ambient_display" />
+ android:summary="@string/pocket_gesture_summary" />
</PreferenceCategory>
diff --git a/doze/src/com/cyanogenmod/settings/doze/BootCompletedReceiver.java b/doze/src/com/cyanogenmod/settings/doze/BootCompletedReceiver.java
index e1b2b50..2283575 100644
--- a/doze/src/com/cyanogenmod/settings/doze/BootCompletedReceiver.java
+++ b/doze/src/com/cyanogenmod/settings/doze/BootCompletedReceiver.java
@@ -24,7 +24,7 @@ import android.util.Log;
public class BootCompletedReceiver extends BroadcastReceiver {
private static final boolean DEBUG = false;
- private static final String TAG = "ZukDoze";
+ private static final String TAG = "OneplusDoze";
@Override
public void onReceive(final Context context, Intent intent) {
diff --git a/doze/src/com/cyanogenmod/settings/doze/DozeReceiver.java b/doze/src/com/cyanogenmod/settings/doze/DozeReceiver.java
new file mode 100644
index 0000000..6ab3e0d
--- /dev/null
+++ b/doze/src/com/cyanogenmod/settings/doze/DozeReceiver.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2016 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.cyanogenmod.settings.doze;
+
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+import cyanogenmod.preference.RemotePreferenceUpdater;
+
+public class DozeReceiver extends RemotePreferenceUpdater {
+
+ private static final boolean DEBUG = false;
+ private static final String TAG = "OneplusDoze";
+
+ private static final String DOZE_CATEGORY_KEY = "doze_device_settings";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ super.onReceive(context, intent);
+
+ if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
+ if (Utils.isDozeEnabled(context) && Utils.sensorsEnabled(context)) {
+ if (DEBUG) Log.d(TAG, "Starting service");
+ Utils.startService(context);
+ }
+ }
+ }
+
+ @Override
+ public String getSummary(Context context, String key) {
+ if (DOZE_CATEGORY_KEY.equals(key)) {
+ return DozeSettingsFragment.getDozeSummary(context);
+ }
+ return null;
+ }
+
+ static void notifyChanged(Context context) {
+ notifyChanged(context, DOZE_CATEGORY_KEY);
+ }
+}
diff --git a/doze/src/com/cyanogenmod/settings/doze/DozeService.java b/doze/src/com/cyanogenmod/settings/doze/DozeService.java
index 354d97f..2ee79bf 100644
--- a/doze/src/com/cyanogenmod/settings/doze/DozeService.java
+++ b/doze/src/com/cyanogenmod/settings/doze/DozeService.java
@@ -75,11 +75,11 @@ public class DozeService extends Service {
private void onDisplayOff() {
if (DEBUG) Log.d(TAG, "Display off");
- if (Utils.pickUpEnabled(this) && Utils.tiltAlwaysEnabled(this)) {
+ if (Utils.pickUpEnabled(this)) {
mTiltSensor.enable();
}
- if (Utils.proximityAlwaysEnabled(this) && (Utils.handwaveGestureEnabled(this) ||
- Utils.pocketGestureEnabled(this))) {
+ if (Utils.handwaveGestureEnabled(this) ||
+ Utils.pocketGestureEnabled(this)) {
mProximitySensor.enable();
}
}
diff --git a/doze/src/com/cyanogenmod/settings/doze/DozeSettings.java b/doze/src/com/cyanogenmod/settings/doze/DozeSettings.java
index d2c408a..76ac5fe 100644
--- a/doze/src/com/cyanogenmod/settings/doze/DozeSettings.java
+++ b/doze/src/com/cyanogenmod/settings/doze/DozeSettings.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015 The CyanogenMod Project
+ * Copyright (C) 2016 The CyanogenMod Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,88 +13,30 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package com.cyanogenmod.settings.doze;
-import android.app.ActionBar;
import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.SharedPreferences;
import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceScreen;
-import android.preference.SwitchPreference;
-import android.provider.Settings;
-import android.view.Menu;
import android.view.MenuItem;
-public class DozeSettings extends PreferenceActivity implements OnPreferenceChangeListener {
+import com.android.settingslib.drawer.SettingsDrawerActivity;
+
+/**
+ * Created by shade on 10/14/16.
+ */
- private Context mContext;
- private SharedPreferences mPreferences;
+public class DozeSettings extends SettingsDrawerActivity {
- private SwitchPreference mAmbientDisplayPreference;
- private SwitchPreference mPickUpPreference;
- private SwitchPreference mTiltAlwaysPreference;
- private SwitchPreference mHandwavePreference;
- private SwitchPreference mPocketPreference;
- private SwitchPreference mProximityAlwaysPreference;
+ private static final String TAG_DOZE = "doze";
@Override
- public void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.doze_settings);
- mContext = getApplicationContext();
- boolean dozeEnabled = Utils.isDozeEnabled(mContext);
-
- // get shared preference
- mPreferences = mContext.getSharedPreferences("doze_settings", Activity.MODE_PRIVATE);
- if (savedInstanceState == null && !mPreferences.getBoolean("first_help_shown", false)) {
- showHelp();
- }
-
- mAmbientDisplayPreference =
- (SwitchPreference) findPreference(Utils.AMBIENT_DISPLAY_KEY);
- // Read from DOZE_ENABLED secure setting
- mAmbientDisplayPreference.setChecked(dozeEnabled);
- mAmbientDisplayPreference.setOnPreferenceChangeListener(this);
-
- mTiltAlwaysPreference =
- (SwitchPreference) findPreference(Utils.TILT_ALWAYS_KEY);
- mTiltAlwaysPreference.setOnPreferenceChangeListener(this);
-
- mPickUpPreference =
- (SwitchPreference) findPreference(Utils.PICK_UP_KEY);
- mPickUpPreference.setOnPreferenceChangeListener(this);
-
- mHandwavePreference =
- (SwitchPreference) findPreference(Utils.GESTURE_HAND_WAVE_KEY);
- mHandwavePreference.setOnPreferenceChangeListener(this);
- mPocketPreference =
- (SwitchPreference) findPreference(Utils.GESTURE_POCKET_KEY);
- mPocketPreference.setOnPreferenceChangeListener(this);
+ setContentView(R.layout.doze);
- mProximityAlwaysPreference =
- (SwitchPreference) findPreference(Utils.PROXIMITY_ALWAYS_KEY);
- mProximityAlwaysPreference.setOnPreferenceChangeListener(this);
-
- final ActionBar actionBar = getActionBar();
- actionBar.setDisplayHomeAsUpEnabled(true);
-
- updateAlwaysEnabledPreference();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- updateAlwaysEnabledPreference();
+ getFragmentManager().beginTransaction().replace(R.id.content_frame,
+ new DozeSettingsFragment(), TAG_DOZE).commit();
}
@Override
@@ -105,74 +47,4 @@ public class DozeSettings extends PreferenceActivity implements OnPreferenceChan
}
return false;
}
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final String key = preference.getKey();
- final boolean value = (Boolean) newValue;
- if (Utils.AMBIENT_DISPLAY_KEY.equals(key)) {
- mAmbientDisplayPreference.setChecked(value);
- Utils.enableDoze(value, mContext);
- return true;
- } else if (Utils.PICK_UP_KEY.equals(key)) {
- mPickUpPreference.setChecked(value);
- updateAlwaysEnabledPreference();
- Utils.startService(mContext);
- return true;
- } else if (Utils.TILT_ALWAYS_KEY.equals(key)) {
- mTiltAlwaysPreference.setChecked(value);
- return true;
- } else if (Utils.GESTURE_HAND_WAVE_KEY.equals(key)) {
- mHandwavePreference.setChecked(value);
- updateAlwaysEnabledPreference();
- Utils.startService(mContext);
- return true;
- } else if (Utils.GESTURE_POCKET_KEY.equals(key)) {
- mPocketPreference.setChecked(value);
- updateAlwaysEnabledPreference();
- Utils.startService(mContext);
- return true;
- } else if (Utils.PROXIMITY_ALWAYS_KEY.equals(key)) {
- mProximityAlwaysPreference.setChecked(value);
- return true;
- }
- return false;
- }
-
- public static class HelpDialogFragment extends DialogFragment {
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- return new AlertDialog.Builder(getActivity())
- .setTitle(R.string.doze_settings_help_title)
- .setMessage(R.string.doze_settings_help_text)
- .setNegativeButton(R.string.dlg_ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.cancel();
- }
- })
- .create();
- }
-
- @Override
- public void onCancel(DialogInterface dialog) {
- getActivity().getSharedPreferences("doze_settings", Activity.MODE_PRIVATE)
- .edit()
- .putBoolean("first_help_shown", true)
- .commit();
- }
- }
-
- private void showHelp() {
- HelpDialogFragment fragment = new HelpDialogFragment();
- fragment.show(getFragmentManager(), "help_dialog");
- }
-
- private void updateAlwaysEnabledPreference() {
- boolean tiltEnabled = Utils.pickUpEnabled(mContext);
- boolean proximityEnabled = Utils.handwaveGestureEnabled(mContext)
- || Utils.pocketGestureEnabled(mContext);
- mTiltAlwaysPreference.setEnabled(tiltEnabled);
- mProximityAlwaysPreference.setEnabled(proximityEnabled);
- }
}
diff --git a/doze/src/com/cyanogenmod/settings/doze/DozeSettingsFragment.java b/doze/src/com/cyanogenmod/settings/doze/DozeSettingsFragment.java
new file mode 100644
index 0000000..ec1c9d8
--- /dev/null
+++ b/doze/src/com/cyanogenmod/settings/doze/DozeSettingsFragment.java
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) 2015 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.cyanogenmod.settings.doze;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.SharedPreferences;
+import android.database.ContentObserver;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.v14.preference.PreferenceFragment;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CompoundButton;
+import android.widget.Switch;
+
+public class DozeSettingsFragment extends PreferenceFragment implements OnPreferenceChangeListener,
+ CompoundButton.OnCheckedChangeListener {
+
+ private SharedPreferences mPreferences;
+
+ private Switch mSwitch;
+
+ private SwitchPreference mPickUpPreference;
+ private SwitchPreference mHandwavePreference;
+ private SwitchPreference mPocketPreference;
+
+ private ContentObserver mDozeObserver = new ContentObserver(new Handler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ super.onChange(selfChange);
+
+ boolean enabled = Utils.isDozeEnabled(getActivity());
+
+ updateSwitches(Utils.isDozeEnabled(getActivity()));
+ DozeReceiver.notifyChanged(getActivity());
+ }
+ };
+
+ static String getDozeSummary(Context context) {
+ if (Utils.isDozeEnabled(context)) {
+ return context.getString(R.string.ambient_display_summary_on);
+ }
+ return context.getString(R.string.ambient_display_summary_off);
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final View view = LayoutInflater.from(getContext()).inflate(R.layout.doze, container, false);
+ ((ViewGroup) view).addView(super.onCreateView(inflater, container, savedInstanceState));
+ return view;
+ }
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ addPreferencesFromResource(R.xml.doze_settings);
+
+ // get shared preference
+ mPreferences = getActivity().getSharedPreferences("doze_settings", Activity.MODE_PRIVATE);
+
+ if (savedInstanceState == null && !mPreferences.getBoolean("first_help_shown", false)) {
+ showHelp();
+ }
+
+ mPickUpPreference =
+ (SwitchPreference) findPreference(Utils.PICK_UP_KEY);
+ mPickUpPreference.setOnPreferenceChangeListener(this);
+
+ mHandwavePreference =
+ (SwitchPreference) findPreference(Utils.GESTURE_HAND_WAVE_KEY);
+ mHandwavePreference.setOnPreferenceChangeListener(this);
+
+ mPocketPreference =
+ (SwitchPreference) findPreference(Utils.GESTURE_POCKET_KEY);
+ mPocketPreference.setOnPreferenceChangeListener(this);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ getActivity().getContentResolver().registerContentObserver(
+ Utils.DOZE_ENABLED_URI, false, mDozeObserver);
+ updateSwitches(Utils.isDozeEnabled(getActivity()));
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ getActivity().getContentResolver().unregisterContentObserver(mDozeObserver);
+ }
+
+ private void updateSwitches(boolean enabled) {
+ mPickUpPreference.setEnabled(enabled);
+ mHandwavePreference.setEnabled(enabled);
+ mPocketPreference.setEnabled(enabled);
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ View switchBar = view.findViewById(R.id.switch_bar);
+ mSwitch = (Switch) switchBar.findViewById(android.R.id.switch_widget);
+ mSwitch.setChecked(Utils.isDozeEnabled(getActivity()));
+ mSwitch.setOnCheckedChangeListener(this);
+
+ switchBar.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mSwitch.setChecked(!mSwitch.isChecked());
+ }
+ });
+ }
+
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final String key = preference.getKey();
+ final boolean value = (Boolean) newValue;
+ if (Utils.PICK_UP_KEY.equals(key)) {
+ mPickUpPreference.setChecked(value);
+ } else if (Utils.GESTURE_HAND_WAVE_KEY.equals(key)) {
+ mHandwavePreference.setChecked(value);
+ } else if (Utils.GESTURE_POCKET_KEY.equals(key)) {
+ mPocketPreference.setChecked(value);
+ } else {
+ return false;
+ }
+
+ Utils.startService(getActivity());
+ return true;
+ }
+
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
+ Utils.enableDoze(b, getActivity());
+ }
+
+ public static class HelpDialogFragment extends DialogFragment {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.doze_settings_help_title)
+ .setMessage(R.string.doze_settings_help_text)
+ .setNegativeButton(R.string.dlg_ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.cancel();
+ }
+ })
+ .create();
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ getActivity().getSharedPreferences("doze_settings", Activity.MODE_PRIVATE)
+ .edit()
+ .putBoolean("first_help_shown", true)
+ .commit();
+ }
+ }
+
+ private void showHelp() {
+ HelpDialogFragment fragment = new HelpDialogFragment();
+ fragment.show(getFragmentManager(), "help_dialog");
+ }
+}
diff --git a/doze/src/com/cyanogenmod/settings/doze/Utils.java b/doze/src/com/cyanogenmod/settings/doze/Utils.java
index bdc696b..585ccbf 100644
--- a/doze/src/com/cyanogenmod/settings/doze/Utils.java
+++ b/doze/src/com/cyanogenmod/settings/doze/Utils.java
@@ -16,16 +16,16 @@
package com.cyanogenmod.settings.doze;
-import android.app.ActivityManager;
-import android.app.ActivityManager.RunningServiceInfo;
import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
+import android.net.Uri;
import android.os.UserHandle;
-import android.preference.PreferenceManager;
+import android.support.v7.preference.PreferenceManager;
import android.provider.Settings;
import android.util.Log;
+import static android.provider.Settings.Secure.DOZE_ENABLED;
+
public final class Utils {
private static final String TAG = "DozeUtils";
@@ -33,12 +33,12 @@ public final class Utils {
private static final String DOZE_INTENT = "com.android.systemui.doze.pulse";
- protected static final String AMBIENT_DISPLAY_KEY = "ambient_display";
+ protected static final String AMBIENT_DISPLAY_KEY = "doze_enabled";
protected static final String PICK_UP_KEY = "pick_up";
- protected static final String TILT_ALWAYS_KEY = "tilt_always";
protected static final String GESTURE_HAND_WAVE_KEY = "gesture_hand_wave";
protected static final String GESTURE_POCKET_KEY = "gesture_pocket";
- protected static final String PROXIMITY_ALWAYS_KEY = "proximity_always";
+
+ public static final Uri DOZE_ENABLED_URI = Settings.Secure.getUriFor(DOZE_ENABLED);
protected static void startService(Context context) {
if (DEBUG) Log.d(TAG, "Starting service");
@@ -52,12 +52,12 @@ public final class Utils {
protected static boolean isDozeEnabled(Context context) {
return Settings.Secure.getInt(context.getContentResolver(),
- Settings.Secure.DOZE_ENABLED, 1) != 0;
+ DOZE_ENABLED, 1) != 0;
}
protected static boolean enableDoze(boolean enable, Context context) {
boolean dozeEnabled = Settings.Secure.putInt(context.getContentResolver(),
- Settings.Secure.DOZE_ENABLED, enable ? 1 : 0);
+ DOZE_ENABLED, enable ? 1 : 0);
if (enable) {
startService(context);
} else {
@@ -77,11 +77,6 @@ public final class Utils {
.getBoolean(PICK_UP_KEY, false);
}
- protected static boolean tiltAlwaysEnabled(Context context) {
- return PreferenceManager.getDefaultSharedPreferences(context)
- .getBoolean(TILT_ALWAYS_KEY, false);
- }
-
protected static boolean handwaveGestureEnabled(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean(GESTURE_HAND_WAVE_KEY, false);
@@ -92,11 +87,6 @@ public final class Utils {
.getBoolean(GESTURE_POCKET_KEY, false);
}
- protected static boolean proximityAlwaysEnabled(Context context) {
- return PreferenceManager.getDefaultSharedPreferences(context)
- .getBoolean(PROXIMITY_ALWAYS_KEY, false);
- }
-
protected static boolean sensorsEnabled(Context context) {
return pickUpEnabled(context) || handwaveGestureEnabled(context)
|| pocketGestureEnabled(context);
diff --git a/extract-files.sh b/extract-files.sh
index 2ed934d..6dfc868 100755
--- a/extract-files.sh
+++ b/extract-files.sh
@@ -2,7 +2,7 @@
set -e
-export DEVICE=z2_plus
+export DEVICE=z2
export VENDOR=zuk
function extract() {
diff --git a/gps/core/Android.mk b/gps/core/Android.mk
index 35a267f..9649f00 100644
--- a/gps/core/Android.mk
+++ b/gps/core/Android.mk
@@ -19,7 +19,8 @@ LOCAL_SHARED_LIBRARIES := \
libutils \
libcutils \
libgps.utils \
- libdl
+ libdl \
+ libloc_pla
LOCAL_SRC_FILES += \
LocApiBase.cpp \
@@ -34,7 +35,8 @@ LOCAL_CFLAGS += \
LOCAL_C_INCLUDES:= \
$(TARGET_OUT_HEADERS)/gps.utils \
- $(TARGET_OUT_HEADERS)/libflp
+ $(TARGET_OUT_HEADERS)/libflp \
+ $(TARGET_OUT_HEADERS)/libloc_pla
LOCAL_COPY_HEADERS_TO:= libloc_core/
LOCAL_COPY_HEADERS:= \
diff --git a/gps/core/ContextBase.cpp b/gps/core/ContextBase.cpp
index 9f6c4aa..d2f9070 100644
--- a/gps/core/ContextBase.cpp
+++ b/gps/core/ContextBase.cpp
@@ -35,11 +35,32 @@
#include <ContextBase.h>
#include <msg_q.h>
#include <loc_target.h>
-#include <log_util.h>
+#include <platform_lib_includes.h>
#include <loc_log.h>
namespace loc_core {
+loc_gps_cfg_s_type ContextBase::mGps_conf {0};
+loc_sap_cfg_s_type ContextBase::mSap_conf {0};
+
+uint32_t ContextBase::getCarrierCapabilities() {
+ #define carrierMSA (uint32_t)0x2
+ #define carrierMSB (uint32_t)0x1
+ #define gpsConfMSA (uint32_t)0x4
+ #define gpsConfMSB (uint32_t)0x2
+ uint32_t capabilities = mGps_conf.CAPABILITIES;
+ if ((mGps_conf.SUPL_MODE & carrierMSA) != carrierMSA) {
+ capabilities &= ~gpsConfMSA;
+ }
+ if ((mGps_conf.SUPL_MODE & carrierMSB) != carrierMSB) {
+ capabilities &= ~gpsConfMSB;
+ }
+
+ LOC_LOGV("getCarrierCapabilities: CAPABILITIES %x, SUPL_MODE %x, carrier capabilities %x",
+ mGps_conf.CAPABILITIES, mGps_conf.SUPL_MODE, capabilities);
+ return capabilities;
+}
+
LBSProxyBase* ContextBase::getLBSProxy(const char* libName)
{
LBSProxyBase* proxy = NULL;
@@ -52,6 +73,10 @@ LBSProxyBase* ContextBase::getLBSProxy(const char* libName)
proxy = (*getter)();
}
}
+ else
+ {
+ LOC_LOGW("%s:%d]: FAILED TO LOAD libname: %s\n", __func__, __LINE__, libName);
+ }
if (NULL == proxy) {
proxy = new LBSProxyBase();
}
@@ -63,30 +88,29 @@ LocApiBase* ContextBase::createLocApi(LOC_API_ADAPTER_EVENT_MASK_T exMask)
{
LocApiBase* locApi = NULL;
- // first if can not be MPQ
- if (TARGET_MPQ != loc_get_target()) {
- if (NULL == (locApi = mLBSProxy->getLocApi(mMsgTask, exMask, this))) {
- void *handle = NULL;
- //try to see if LocApiV02 is present
- if((handle = dlopen("libloc_api_v02.so", RTLD_NOW)) != NULL) {
- LOC_LOGD("%s:%d]: libloc_api_v02.so is present", __func__, __LINE__);
- getLocApi_t* getter = (getLocApi_t*)dlsym(handle, "getLocApi");
- if(getter != NULL) {
- LOC_LOGD("%s:%d]: getter is not NULL for LocApiV02", __func__, __LINE__);
- locApi = (*getter)(mMsgTask, exMask, this);
- }
+ if (NULL == (locApi = mLBSProxy->getLocApi(mMsgTask, exMask, this))) {
+ void *handle = NULL;
+ //try to see if LocApiV02 is present
+ if ((handle = dlopen("libloc_api_v02.so", RTLD_NOW)) != NULL) {
+ LOC_LOGD("%s:%d]: libloc_api_v02.so is present", __func__, __LINE__);
+ getLocApi_t* getter = (getLocApi_t*) dlsym(handle, "getLocApi");
+ if (getter != NULL) {
+ LOC_LOGD("%s:%d]: getter is not NULL for LocApiV02", __func__,
+ __LINE__);
+ locApi = (*getter)(mMsgTask, exMask, this);
}
- // only RPC is the option now
- else {
- LOC_LOGD("%s:%d]: libloc_api_v02.so is NOT present. Trying RPC",
- __func__, __LINE__);
- handle = dlopen("libloc_api-rpc-qc.so", RTLD_NOW);
- if (NULL != handle) {
- getLocApi_t* getter = (getLocApi_t*)dlsym(handle, "getLocApi");
- if (NULL != getter) {
- LOC_LOGD("%s:%d]: getter is not NULL in RPC", __func__, __LINE__);
- locApi = (*getter)(mMsgTask, exMask, this);
- }
+ }
+ // only RPC is the option now
+ else {
+ LOC_LOGD("%s:%d]: libloc_api_v02.so is NOT present. Trying RPC",
+ __func__, __LINE__);
+ handle = dlopen("libloc_api-rpc-qc.so", RTLD_NOW);
+ if (NULL != handle) {
+ getLocApi_t* getter = (getLocApi_t*) dlsym(handle, "getLocApi");
+ if (NULL != getter) {
+ LOC_LOGD("%s:%d]: getter is not NULL in RPC", __func__,
+ __LINE__);
+ locApi = (*getter)(mMsgTask, exMask, this);
}
}
}
diff --git a/gps/core/ContextBase.h b/gps/core/ContextBase.h
index fe0b860..87d2acf 100644
--- a/gps/core/ContextBase.h
+++ b/gps/core/ContextBase.h
@@ -35,6 +35,69 @@
#include <LocApiBase.h>
#include <LBSProxyBase.h>
+#define MAX_XTRA_SERVER_URL_LENGTH 256
+
+/* GPS.conf support */
+/* NOTE: the implementaiton of the parser casts number
+ fields to 32 bit. To ensure all 'n' fields working,
+ they must all be 32 bit fields. */
+typedef struct loc_gps_cfg_s
+{
+ uint32_t INTERMEDIATE_POS;
+ uint32_t ACCURACY_THRES;
+ uint32_t SUPL_VER;
+ uint32_t SUPL_MODE;
+ uint32_t SUPL_ES;
+ uint32_t CAPABILITIES;
+ uint32_t LPP_PROFILE;
+ uint32_t XTRA_VERSION_CHECK;
+ char XTRA_SERVER_1[MAX_XTRA_SERVER_URL_LENGTH];
+ char XTRA_SERVER_2[MAX_XTRA_SERVER_URL_LENGTH];
+ char XTRA_SERVER_3[MAX_XTRA_SERVER_URL_LENGTH];
+ uint32_t USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL;
+ uint32_t NMEA_PROVIDER;
+ uint32_t GPS_LOCK;
+ uint32_t A_GLONASS_POS_PROTOCOL_SELECT;
+ uint32_t AGPS_CERT_WRITABLE_MASK;
+ uint32_t AGPS_CONFIG_INJECT;
+ uint32_t LPPE_CP_TECHNOLOGY;
+ uint32_t LPPE_UP_TECHNOLOGY;
+ uint32_t EXTERNAL_DR_ENABLED;
+} loc_gps_cfg_s_type;
+
+/* NOTE: the implementaiton of the parser casts number
+ fields to 32 bit. To ensure all 'n' fields working,
+ they must all be 32 bit fields. */
+/* Meanwhile, *_valid fields are 8 bit fields, and 'f'
+ fields are double. Rigid as they are, it is the
+ the status quo, until the parsing mechanism is
+ change, that is. */
+typedef struct
+{
+ uint8_t GYRO_BIAS_RANDOM_WALK_VALID;
+ double GYRO_BIAS_RANDOM_WALK;
+ uint32_t SENSOR_ACCEL_BATCHES_PER_SEC;
+ uint32_t SENSOR_ACCEL_SAMPLES_PER_BATCH;
+ uint32_t SENSOR_GYRO_BATCHES_PER_SEC;
+ uint32_t SENSOR_GYRO_SAMPLES_PER_BATCH;
+ uint32_t SENSOR_ACCEL_BATCHES_PER_SEC_HIGH;
+ uint32_t SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH;
+ uint32_t SENSOR_GYRO_BATCHES_PER_SEC_HIGH;
+ uint32_t SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH;
+ uint32_t SENSOR_CONTROL_MODE;
+ uint32_t SENSOR_USAGE;
+ uint32_t SENSOR_ALGORITHM_CONFIG_MASK;
+ uint8_t ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
+ double ACCEL_RANDOM_WALK_SPECTRAL_DENSITY;
+ uint8_t ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
+ double ANGLE_RANDOM_WALK_SPECTRAL_DENSITY;
+ uint8_t RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
+ double RATE_RANDOM_WALK_SPECTRAL_DENSITY;
+ uint8_t VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
+ double VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY;
+ uint32_t SENSOR_PROVIDER;
+} loc_sap_cfg_s_type;
+
namespace loc_core {
class LocAdapterBase;
@@ -58,6 +121,7 @@ public:
inline LocApiProxyBase* getLocApiProxy() { return mLocApiProxy; }
inline bool hasAgpsExtendedCapabilities() { return mLBSProxy->hasAgpsExtendedCapabilities(); }
inline bool hasCPIExtendedCapabilities() { return mLBSProxy->hasCPIExtendedCapabilities(); }
+ inline bool hasNativeXtraClient() { return mLBSProxy->hasNativeXtraClient(); }
inline void modemPowerVote(bool power) const { return mLBSProxy->modemPowerVote(power); }
inline void requestUlp(LocAdapterBase* adapter,
unsigned long capabilities) {
@@ -67,6 +131,12 @@ public:
return mLBSProxy->getIzatDevId();
}
inline void sendMsg(const LocMsg *msg) { getMsgTask()->sendMsg(msg); }
+
+ static loc_gps_cfg_s_type mGps_conf;
+ static loc_sap_cfg_s_type mSap_conf;
+
+ static uint32_t getCarrierCapabilities();
+
};
} // namespace loc_core
diff --git a/gps/core/LBSProxyBase.h b/gps/core/LBSProxyBase.h
index 0faf801..94ddd0f 100644
--- a/gps/core/LBSProxyBase.h
+++ b/gps/core/LBSProxyBase.h
@@ -43,6 +43,10 @@ class LBSProxyBase {
getLocApi(const MsgTask* msgTask,
LOC_API_ADAPTER_EVENT_MASK_T exMask,
ContextBase* context) const {
+
+ (void)msgTask;
+ (void)exMask;
+ (void)context;
return NULL;
}
protected:
@@ -50,11 +54,22 @@ protected:
public:
inline virtual ~LBSProxyBase() {}
inline virtual void requestUlp(LocAdapterBase* adapter,
- unsigned long capabilities) const {}
+ unsigned long capabilities) const {
+
+ (void)adapter;
+ (void)capabilities;
+ }
inline virtual bool hasAgpsExtendedCapabilities() const { return false; }
inline virtual bool hasCPIExtendedCapabilities() const { return false; }
- inline virtual void modemPowerVote(bool power) const {}
- virtual void injectFeatureConfig(ContextBase* context) const {}
+ inline virtual void modemPowerVote(bool power) const {
+
+ (void)power;
+ }
+ virtual void injectFeatureConfig(ContextBase* context) const {
+
+ (void)context;
+ }
+ inline virtual bool hasNativeXtraClient() const { return false; }
inline virtual IzatDevId_t getIzatDevId() const { return 0; }
};
diff --git a/gps/core/LocAdapterBase.cpp b/gps/core/LocAdapterBase.cpp
index 8fdb8cb..6a3f969 100644
--- a/gps/core/LocAdapterBase.cpp
+++ b/gps/core/LocAdapterBase.cpp
@@ -32,7 +32,7 @@
#include <dlfcn.h>
#include <LocAdapterBase.h>
#include <loc_target.h>
-#include <log_util.h>
+#include <platform_lib_log_util.h>
#include <LocAdapterProxyBase.h>
namespace loc_core {
@@ -85,6 +85,13 @@ void LocAdapterBase::
void* svExt)
DEFAULT_IMPL()
+void LocAdapterBase::
+ reportSvMeasurement(GnssSvMeasurementSet &svMeasurementSet)
+DEFAULT_IMPL()
+
+void LocAdapterBase::
+ reportSvPolynomial(GnssSvPolynomial &svPolynomial)
+DEFAULT_IMPL()
void LocAdapterBase::
reportStatus(GpsStatusValue status)
@@ -137,6 +144,6 @@ bool LocAdapterBase::
DEFAULT_IMPL(false)
void LocAdapterBase::
- reportGpsMeasurementData(GpsData &gpsMeasurementData)
+ reportGnssMeasurementData(GnssData &gnssMeasurementData)
DEFAULT_IMPL()
} // namespace loc_core
diff --git a/gps/core/LocAdapterBase.h b/gps/core/LocAdapterBase.h
index 5f4660b..af25138 100644
--- a/gps/core/LocAdapterBase.h
+++ b/gps/core/LocAdapterBase.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014,2016 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -78,12 +78,22 @@ public:
mLocApi->updateEvtMask();
}
+ inline bool isFeatureSupported(uint8_t featureVal) {
+ return mLocApi->isFeatureSupported(featureVal);
+ }
+
// This will be overridden by the individual adapters
// if necessary.
- inline virtual void setUlpProxy(UlpProxyBase* ulp) {}
+ inline virtual void setUlpProxy(UlpProxyBase* ulp) {
+
+ (void)ulp;
+ }
virtual void handleEngineUpEvent();
virtual void handleEngineDownEvent();
- inline virtual void setPositionModeInt(LocPosMode& posMode) {}
+ inline virtual void setPositionModeInt(LocPosMode& posMode) {
+
+ (void)posMode;
+ }
virtual void startFixInt() {}
virtual void stopFixInt() {}
virtual void getZppInt() {}
@@ -95,6 +105,8 @@ public:
virtual void reportSv(GnssSvStatus &svStatus,
GpsLocationExtended &locationExtended,
void* svExt);
+ virtual void reportSvMeasurement(GnssSvMeasurementSet &svMeasurementSet);
+ virtual void reportSvPolynomial(GnssSvPolynomial &svPolynomial);
virtual void reportStatus(GpsStatusValue status);
virtual void reportNmea(const char* nmea, int length);
virtual bool reportXtraServer(const char* url1, const char* url2,
@@ -111,7 +123,7 @@ public:
const void* data);
inline virtual bool isInSession() { return false; }
ContextBase* getContext() const { return mContext; }
- virtual void reportGpsMeasurementData(GpsData &gpsMeasurementData);
+ virtual void reportGnssMeasurementData(GnssData &gnssMeasurementData);
};
} // namespace loc_core
diff --git a/gps/core/LocAdapterProxyBase.h b/gps/core/LocAdapterProxyBase.h
index 1ddcca4..82cba6b 100644
--- a/gps/core/LocAdapterProxyBase.h
+++ b/gps/core/LocAdapterProxyBase.h
@@ -46,21 +46,26 @@ protected:
inline virtual ~LocAdapterProxyBase() {
delete mLocAdapterBase;
}
- ContextBase* getContext() const {
- return mLocAdapterBase->getContext();
- }
inline void updateEvtMask(LOC_API_ADAPTER_EVENT_MASK_T event,
loc_registration_mask_status isEnabled) {
mLocAdapterBase->updateEvtMask(event,isEnabled);
}
public:
+ inline ContextBase* getContext() const {
+ return mLocAdapterBase->getContext();
+ }
inline virtual void handleEngineUpEvent() {};
inline virtual void handleEngineDownEvent() {};
inline virtual bool reportPosition(UlpLocation &location,
GpsLocationExtended &locationExtended,
enum loc_sess_status status,
LocPosTechMask loc_technology_mask) {
+
+ (void)location;
+ (void)locationExtended;
+ (void)status;
+ (void)loc_technology_mask;
return false;
}
};
diff --git a/gps/core/LocApiBase.cpp b/gps/core/LocApiBase.cpp
index dcd35fe..fdfc537 100644
--- a/gps/core/LocApiBase.cpp
+++ b/gps/core/LocApiBase.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014,2016 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -32,7 +32,7 @@
#include <dlfcn.h>
#include <LocApiBase.h>
#include <LocAdapterBase.h>
-#include <log_util.h>
+#include <platform_lib_log_util.h>
#include <LocDualContext.h>
namespace loc_core {
@@ -132,6 +132,7 @@ LocApiBase::LocApiBase(const MsgTask* msgTask,
mMask(0), mSupportedMsg(0), mContext(context)
{
memset(mLocAdapters, 0, sizeof(mLocAdapters));
+ memset(mFeaturesSupported, 0, sizeof(mFeaturesSupported));
}
LOC_API_ADAPTER_EVENT_MASK_T LocApiBase::getEvtMask()
@@ -257,25 +258,50 @@ void LocApiBase::reportSv(GnssSvStatus &svStatus,
GpsLocationExtended &locationExtended,
void* svExt)
{
+ const char* constellationString[] = { "Unknown", "GPS", "SBAS", "GLONASS",
+ "QZSS", "BEIDOU", "GALILEO" };
+
// print the SV info before delivering
- LOC_LOGV("num sv: %d\n ephemeris mask: %dxn almanac mask: %x\n gps/glo/bds in use"
- " mask: %x/%x/%x\n sv: prn snr elevation azimuth",
- svStatus.num_svs, svStatus.ephemeris_mask,
- svStatus.almanac_mask, svStatus.gps_used_in_fix_mask,
- svStatus.glo_used_in_fix_mask, svStatus.bds_used_in_fix_mask);
- for (int i = 0; i < svStatus.num_svs && i < GPS_MAX_SVS; i++) {
- LOC_LOGV(" %d: %d %f %f %f",
- i,
- svStatus.sv_list[i].prn,
- svStatus.sv_list[i].snr,
- svStatus.sv_list[i].elevation,
- svStatus.sv_list[i].azimuth);
+ LOC_LOGV("num sv: %d\n"
+ " sv: constellation svid cN0"
+ " elevation azimuth flags",
+ svStatus.num_svs);
+ for (int i = 0; i < svStatus.num_svs && i < GNSS_MAX_SVS; i++) {
+ if (svStatus.gnss_sv_list[i].constellation >
+ sizeof(constellationString) / sizeof(constellationString[0]) - 1) {
+ svStatus.gnss_sv_list[i].constellation = 0;
+ }
+ LOC_LOGV(" %03d: %*s %02d %f %f %f 0x%02X",
+ i,
+ 13,
+ constellationString[svStatus.gnss_sv_list[i].constellation],
+ svStatus.gnss_sv_list[i].svid,
+ svStatus.gnss_sv_list[i].c_n0_dbhz,
+ svStatus.gnss_sv_list[i].elevation,
+ svStatus.gnss_sv_list[i].azimuth,
+ svStatus.gnss_sv_list[i].flags);
}
// loop through adapters, and deliver to all adapters.
TO_ALL_LOCADAPTERS(
mLocAdapters[i]->reportSv(svStatus,
- locationExtended,
- svExt)
+ locationExtended,
+ svExt)
+ );
+}
+
+void LocApiBase::reportSvMeasurement(GnssSvMeasurementSet &svMeasurementSet)
+{
+ // loop through adapters, and deliver to all adapters.
+ TO_ALL_LOCADAPTERS(
+ mLocAdapters[i]->reportSvMeasurement(svMeasurementSet)
+ );
+}
+
+void LocApiBase::reportSvPolynomial(GnssSvPolynomial &svPolynomial)
+{
+ // loop through adapters, and deliver to all adapters.
+ TO_ALL_LOCADAPTERS(
+ mLocAdapters[i]->reportSvPolynomial(svPolynomial)
);
}
@@ -358,16 +384,21 @@ void LocApiBase::saveSupportedMsgList(uint64_t supportedMsgList)
mSupportedMsg = supportedMsgList;
}
+void LocApiBase::saveSupportedFeatureList(uint8_t *featureList)
+{
+ memcpy((void *)mFeaturesSupported, (void *)featureList, sizeof(mFeaturesSupported));
+}
+
void* LocApiBase :: getSibling()
DEFAULT_IMPL(NULL)
LocApiProxyBase* LocApiBase :: getLocApiProxy()
DEFAULT_IMPL(NULL)
-void LocApiBase::reportGpsMeasurementData(GpsData &gpsMeasurementData)
+void LocApiBase::reportGnssMeasurementData(GnssData &gnssMeasurementData)
{
// loop through adapters, and deliver to all adapters.
- TO_ALL_LOCADAPTERS(mLocAdapters[i]->reportGpsMeasurementData(gpsMeasurementData));
+ TO_ALL_LOCADAPTERS(mLocAdapters[i]->reportGnssMeasurementData(gnssMeasurementData));
}
enum loc_api_adapter_err LocApiBase::
@@ -446,6 +477,10 @@ enum loc_api_adapter_err LocApiBase::
DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
enum loc_api_adapter_err LocApiBase::
+ setNMEATypes (uint32_t typesMask)
+DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
+
+enum loc_api_adapter_err LocApiBase::
setLPPConfig(uint32_t profile)
DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
@@ -481,12 +516,12 @@ enum loc_api_adapter_err LocApiBase::
DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
enum loc_api_adapter_err LocApiBase::
- setExtPowerConfig(int isBatteryCharging)
+ setAGLONASSProtocol(unsigned long aGlonassProtocol)
DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
enum loc_api_adapter_err LocApiBase::
- setAGLONASSProtocol(unsigned long aGlonassProtocol)
-DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
+ setLPPeProtocol(unsigned long lppeCP, unsigned long lppeUP)
+ DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
enum loc_api_adapter_err LocApiBase::
getWwanZppFix(GpsLocation& zppLoc)
@@ -541,13 +576,18 @@ enum loc_api_adapter_err LocApiBase::
setXtraVersionCheck(enum xtra_version_check check)
DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
-int LocApiBase::
- updateRegistrationMask(LOC_API_ADAPTER_EVENT_MASK_T event,
- loc_registration_mask_status isEnabled)
-DEFAULT_IMPL(-1)
-
bool LocApiBase::
gnssConstellationConfig()
DEFAULT_IMPL(false)
+bool LocApiBase::
+ isFeatureSupported(uint8_t featureVal)
+{
+ uint8_t arrayIndex = featureVal >> 3;
+ uint8_t bitPos = featureVal & 7;
+
+ if (arrayIndex >= MAX_FEATURE_LENGTH) return false;
+ return ((mFeaturesSupported[arrayIndex] >> bitPos ) & 0x1);
+}
+
} // namespace loc_core
diff --git a/gps/core/LocApiBase.h b/gps/core/LocApiBase.h
index b1c3d30..066695c 100644
--- a/gps/core/LocApiBase.h
+++ b/gps/core/LocApiBase.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014, 2016 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -33,7 +33,7 @@
#include <ctype.h>
#include <gps_extended.h>
#include <MsgTask.h>
-#include <log_util.h>
+#include <platform_lib_log_util.h>
namespace loc_core {
class ContextBase;
@@ -44,6 +44,7 @@ int decodeAddress(char *addr_string, int string_size,
const char *data, int data_size);
#define MAX_ADAPTERS 10
+#define MAX_FEATURE_LENGTH 100
#define TO_ALL_ADAPTERS(adapters, call) \
for (int i = 0; i < MAX_ADAPTERS && NULL != (adapters)[i]; i++) { \
@@ -81,6 +82,7 @@ class LocApiBase {
ContextBase *mContext;
LocAdapterBase* mLocAdapters[MAX_ADAPTERS];
uint64_t mSupportedMsg;
+ uint8_t mFeaturesSupported[MAX_FEATURE_LENGTH];
protected:
virtual enum loc_api_adapter_err
@@ -116,6 +118,8 @@ public:
void reportSv(GnssSvStatus &svStatus,
GpsLocationExtended &locationExtended,
void* svExt);
+ void reportSvMeasurement(GnssSvMeasurementSet &svMeasurementSet);
+ void reportSvPolynomial(GnssSvPolynomial &svPolynomial);
void reportStatus(GpsStatusValue status);
void reportNmea(const char* nmea, int length);
void reportXtraServer(const char* url1, const char* url2,
@@ -130,7 +134,8 @@ public:
void reportDataCallClosed();
void requestNiNotify(GpsNiNotification &notify, const void* data);
void saveSupportedMsgList(uint64_t supportedMsgList);
- void reportGpsMeasurementData(GpsData &gpsMeasurementData);
+ void reportGnssMeasurementData(GnssData &gnssMeasurementData);
+ void saveSupportedFeatureList(uint8_t *featureList);
// downward calls
// All below functions are to be defined by adapter specific modules:
@@ -172,6 +177,8 @@ public:
virtual enum loc_api_adapter_err
setSUPLVersion(uint32_t version);
virtual enum loc_api_adapter_err
+ setNMEATypes (uint32_t typesMask);
+ virtual enum loc_api_adapter_err
setLPPConfig(uint32_t profile);
virtual enum loc_api_adapter_err
setSensorControlConfig(int sensorUsage, int sensorProvider);
@@ -198,10 +205,10 @@ public:
int gyroBatchesPerSecHigh,
int algorithmConfig);
virtual enum loc_api_adapter_err
- setExtPowerConfig(int isBatteryCharging);
- virtual enum loc_api_adapter_err
setAGLONASSProtocol(unsigned long aGlonassProtocol);
virtual enum loc_api_adapter_err
+ setLPPeProtocol(unsigned long lppeCP, unsigned long lppeUP);
+ virtual enum loc_api_adapter_err
getWwanZppFix(GpsLocation & zppLoc);
virtual enum loc_api_adapter_err
getBestAvailableZppFix(GpsLocation & zppLoc);
@@ -214,9 +221,15 @@ public:
virtual void installAGpsCert(const DerEncodedCertificate* pData,
size_t length,
uint32_t slotBitMask);
- inline virtual void setInSession(bool inSession) {}
+ inline virtual void setInSession(bool inSession) {
+
+ (void)inSession;
+ }
inline bool isMessageSupported (LocCheckingMessagesID msgID) const {
- if (msgID > (sizeof(mSupportedMsg) << 3)) {
+
+ // confirm if msgID is not larger than the number of bits in
+ // mSupportedMsg
+ if ((uint64_t)msgID > (sizeof(mSupportedMsg) << 3)) {
return false;
} else {
uint32_t messageChecker = 1 << msgID;
@@ -242,14 +255,14 @@ public:
virtual enum loc_api_adapter_err setXtraVersionCheck(enum xtra_version_check check);
/*
- Update gps reporting events
- */
- virtual int updateRegistrationMask(LOC_API_ADAPTER_EVENT_MASK_T event,
- loc_registration_mask_status isEnabled);
- /*
Check if the modem support the service
*/
virtual bool gnssConstellationConfig();
+
+ /*
+ Check if a feature is supported
+ */
+ bool isFeatureSupported(uint8_t featureVal);
};
typedef LocApiBase* (getLocApi_t)(const MsgTask* msgTask,
diff --git a/gps/core/LocDualContext.cpp b/gps/core/LocDualContext.cpp
index 578421c..74b2903 100644
--- a/gps/core/LocDualContext.cpp
+++ b/gps/core/LocDualContext.cpp
@@ -33,7 +33,7 @@
#include <unistd.h>
#include <LocDualContext.h>
#include <msg_q.h>
-#include <log_util.h>
+#include <platform_lib_log_util.h>
#include <loc_log.h>
namespace loc_core {
@@ -59,7 +59,11 @@ ContextBase* LocDualContext::mBgContext = NULL;
ContextBase* LocDualContext::mInjectContext = NULL;
// the name must be shorter than 15 chars
const char* LocDualContext::mLocationHalName = "Loc_hal_worker";
+#ifndef USE_GLIB
const char* LocDualContext::mLBSLibName = "liblbs_core.so";
+#else
+const char* LocDualContext::mLBSLibName = "liblbs_core.so.1";
+#endif
pthread_mutex_t LocDualContext::mGetLocContextMutex = PTHREAD_MUTEX_INITIALIZER;
diff --git a/gps/core/Makefile.am b/gps/core/Makefile.am
new file mode 100644
index 0000000..341153a
--- /dev/null
+++ b/gps/core/Makefile.am
@@ -0,0 +1,46 @@
+AM_CFLAGS = -I./ \
+ -I../utils \
+ $(LOCPLA_CFLAGS) \
+ -I$(WORKSPACE)/gps-noship/flp \
+ -D__func__=__PRETTY_FUNCTION__ \
+ -fno-short-enums
+
+libloc_core_la_h_sources = \
+ LocApiBase.h \
+ LocAdapterBase.h \
+ ContextBase.h \
+ LocDualContext.h \
+ LBSProxyBase.h \
+ UlpProxyBase.h \
+ gps_extended_c.h \
+ gps_extended.h \
+ loc_core_log.h \
+ LocAdapterProxyBase.h
+
+libloc_core_la_c_sources = \
+ LocApiBase.cpp \
+ LocAdapterBase.cpp \
+ ContextBase.cpp \
+ LocDualContext.cpp \
+ loc_core_log.cpp
+
+library_includedir = $(pkgincludedir)/core
+
+library_include_HEADERS = $(libloc_core_la_h_sources)
+
+libloc_core_la_SOURCES = $(libloc_core_la_c_sources)
+
+if USE_GLIB
+libloc_core_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libloc_core_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libloc_core_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libloc_core_la_CFLAGS = $(AM_CFLAGS)
+libloc_core_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
+libloc_core_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+
+libloc_core_la_LIBADD = -lstdc++ -ldl $(LOCPLA_LIBS) ../utils/libgps_utils_so.la
+
+#Create and Install libraries
+lib_LTLIBRARIES = libloc_core.la
diff --git a/gps/core/UlpProxyBase.h b/gps/core/UlpProxyBase.h
index efcf98a..2e92bed 100644
--- a/gps/core/UlpProxyBase.h
+++ b/gps/core/UlpProxyBase.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -59,26 +59,62 @@ public:
void* locationExt,
enum loc_sess_status status,
LocPosTechMask loc_technology_mask) {
+ (void)location;
+ (void)locationExtended;
+ (void)locationExt;
+ (void)status;
+ (void)loc_technology_mask;
return false;
}
inline virtual bool reportSv(GnssSvStatus &svStatus,
GpsLocationExtended &locationExtended,
void* svExt) {
+ (void)svStatus;
+ (void)locationExtended;
+ (void)svExt;
return false;
}
+ inline virtual bool reportSvMeasurement(GnssSvMeasurementSet &svMeasurementSet) {
+ (void)svMeasurementSet;
+ return false;
+ }
+
+ inline virtual bool reportSvPolynomial(GnssSvPolynomial &svPolynomial)
+ {
+ (void)svPolynomial;
+ return false;
+ }
inline virtual bool reportStatus(GpsStatusValue status) {
+
+ (void)status;
return false;
}
- inline virtual void setAdapter(LocAdapterBase* adapter) {}
- inline virtual void setCapabilities(unsigned long capabilities) {}
+ inline virtual void setAdapter(LocAdapterBase* adapter) {
+
+ (void)adapter;
+ }
+ inline virtual void setCapabilities(unsigned long capabilities) {
+
+ (void)capabilities;
+ }
inline virtual bool reportBatchingSession(FlpExtBatchOptions &options,
bool active) {
+
+ (void)options;
+ (void)active;
return false;
}
inline virtual bool reportPositions(const struct FlpExtLocation_s* locations,
int32_t number_of_locations) {
+ (void)locations;
+ (void)number_of_locations;
return false;
}
+ inline virtual bool reportDeleteAidingData(GpsAidingData aidingData)
+ {
+ (void)aidingData;
+ return false;
+ }
};
} // namespace loc_core
diff --git a/gps/core/gps_extended.h b/gps/core/gps_extended.h
index 88b0415..9460d4e 100644
--- a/gps/core/gps_extended.h
+++ b/gps/core/gps_extended.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -29,11 +29,19 @@
#ifndef GPS_EXTENDED_H
#define GPS_EXTENDED_H
+#include <gps_extended_c.h>
+/**
+ * @file
+ * @brief C++ declarations for GPS types
+ */
+
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
-#include <gps_extended_c.h>
+#if defined(USE_GLIB) || defined(OFF_TARGET)
+#include <string.h>
+#endif
struct LocPosMode
{
@@ -42,14 +50,17 @@ struct LocPosMode
uint32_t min_interval;
uint32_t preferred_accuracy;
uint32_t preferred_time;
+ bool share_position;
char credentials[14];
char provider[8];
LocPosMode(LocPositionMode m, GpsPositionRecurrence recr,
uint32_t gap, uint32_t accu, uint32_t time,
- const char* cred, const char* prov) :
+ bool sp, const char* cred, const char* prov) :
mode(m), recurrence(recr),
- min_interval(gap < MIN_POSSIBLE_FIX_INTERVAL ? MIN_POSSIBLE_FIX_INTERVAL : gap),
- preferred_accuracy(accu), preferred_time(time) {
+ min_interval(gap < GPS_MIN_POSSIBLE_FIX_INTERVAL_MS ?
+ GPS_MIN_POSSIBLE_FIX_INTERVAL_MS : gap),
+ preferred_accuracy(accu), preferred_time(time),
+ share_position(sp) {
memset(credentials, 0, sizeof(credentials));
memset(provider, 0, sizeof(provider));
if (NULL != cred) {
@@ -63,8 +74,9 @@ struct LocPosMode
inline LocPosMode() :
mode(LOC_POSITION_MODE_MS_BASED),
recurrence(GPS_POSITION_RECURRENCE_PERIODIC),
- min_interval(MIN_POSSIBLE_FIX_INTERVAL),
- preferred_accuracy(50), preferred_time(120000) {
+ min_interval(GPS_DEFAULT_FIX_INTERVAL_MS),
+ preferred_accuracy(50), preferred_time(120000),
+ share_position(true) {
memset(credentials, 0, sizeof(credentials));
memset(provider, 0, sizeof(provider));
}
diff --git a/gps/core/gps_extended_c.h b/gps/core/gps_extended_c.h
index 75ee17e..e16d758 100644
--- a/gps/core/gps_extended_c.h
+++ b/gps/core/gps_extended_c.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2015, 2016 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -29,15 +29,21 @@
#ifndef GPS_EXTENDED_C_H
#define GPS_EXTENDED_C_H
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
#include <ctype.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <hardware/gps.h>
+#include <time.h>
+
+/**
+ * @file
+ * @brief C++ declarations for GPS types
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
/** Location has valid source information. */
#define LOCATION_HAS_SOURCE_INFO 0x0020
@@ -68,6 +74,8 @@ extern "C" {
#define ULP_LOCATION_IS_FROM_NLP 0x0020
/** Position is from PIP */
#define ULP_LOCATION_IS_FROM_PIP 0x0040
+/** Position is from external DR solution*/
+#define ULP_LOCATION_IS_FROM_EXT_DR 0X0080
#define ULP_MIN_INTERVAL_INVALID 0xffffffff
@@ -82,6 +90,11 @@ enum loc_registration_mask_status {
LOC_REGISTRATION_MASK_DISABLED
};
+typedef enum {
+ LOC_SUPPORTED_FEATURE_ODCPI_2_V02 = 0, /**< Support ODCPI version 2 feature */
+ LOC_SUPPORTED_FEATURE_WIFI_AP_DATA_INJECT_2_V02 /**< Support Wifi AP data inject version 2 feature */
+} loc_supported_feature_enum;
+
typedef struct {
/** set to sizeof(UlpLocation) */
size_t size;
@@ -165,14 +178,14 @@ typedef struct {
} AGpsExtCallbacks;
+typedef void (*loc_ni_notify_callback)(GpsNiNotification *notification, bool esEnalbed);
/** GPS NI callback structure. */
typedef struct
{
/**
* Sends the notification request from HAL to GPSLocationProvider.
*/
- gps_ni_notify_callback notify_cb;
- gps_create_thread create_thread_cb;
+ loc_ni_notify_callback notify_cb;
} GpsNiExtCallbacks;
typedef enum loc_server_type {
@@ -195,7 +208,24 @@ typedef enum loc_position_mode_type {
} LocPositionMode;
-#define MIN_POSSIBLE_FIX_INTERVAL 1000 /* msec */
+/**
+ * @brief Minimum allowed value for fix interval.
+ *
+ * This value is a sanity limit in GPS framework. The hardware has own internal
+ * limits that may not match this value
+ *
+ * @sa GPS_DEFAULT_FIX_INTERVAL_MS
+ */
+
+#define GPS_MIN_POSSIBLE_FIX_INTERVAL_MS 100
+/**
+ * @brief Default value for fix interval.
+ *
+ * This value is used by default whenever appropriate.
+ *
+ * @sa GPS_MIN_POSSIBLE_FIX_INTERVAL_MS
+ */
+#define GPS_DEFAULT_FIX_INTERVAL_MS 1000
/** Flags to indicate which values are valid in a GpsLocationExtended. */
typedef uint16_t GpsLocationExtendedFlags;
@@ -217,6 +247,12 @@ typedef uint16_t GpsLocationExtendedFlags;
#define GPS_LOCATION_EXTENDED_HAS_HOR_RELIABILITY 0x0080
/** GpsLocationExtended has valid vertical reliability */
#define GPS_LOCATION_EXTENDED_HAS_VERT_RELIABILITY 0x0100
+/** GpsLocationExtended has valid Horizontal Elliptical Uncertainty (Semi-Major Axis) */
+#define GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_MAJOR 0x0200
+/** GpsLocationExtended has valid Horizontal Elliptical Uncertainty (Semi-Minor Axis) */
+#define GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_MINOR 0x0400
+/** GpsLocationExtended has valid Elliptical Horizontal Uncertainty Azimuth */
+#define GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_AZIMUTH 0x0800
typedef enum {
LOC_RELIABILITY_NOT_SET = 0,
@@ -226,6 +262,13 @@ typedef enum {
LOC_RELIABILITY_HIGH = 4
}LocReliability;
+typedef struct {
+ struct timespec apTimeStamp;
+ /*boottime received from pps-ktimer*/
+ float apTimeStampUncertaintyMs;
+ /* timestamp uncertainty in milli seconds */
+}Gnss_ApTimeStampStructType;
+
/** Represents gps location extended. */
typedef struct {
/** set to sizeof(GpsLocationExtended) */
@@ -252,48 +295,15 @@ typedef struct {
LocReliability horizontal_reliability;
/** vertical reliability. */
LocReliability vertical_reliability;
-} GpsLocationExtended;
-
-/** Represents SV status. */
-typedef struct {
- /** set to sizeof(GnssSvStatus) */
- size_t size;
-
- /** Number of SVs currently visible. */
- int num_svs;
-
- /** Contains an array of SV information. */
- GpsSvInfo sv_list[GPS_MAX_SVS];
-
- /** Represents a bit mask indicating which SVs
- * have ephemeris data.
- */
- uint32_t ephemeris_mask;
-
- /** Represents a bit mask indicating which SVs
- * have almanac data.
- */
- uint32_t almanac_mask;
-
- /**
- * Represents a bit mask indicating which GPS SVs
- * were used for computing the most recent position fix.
- */
- uint32_t gps_used_in_fix_mask;
-
- /**
- * Represents a bit mask indicating which GLONASS SVs
- * were used for computing the most recent position fix.
- */
- uint32_t glo_used_in_fix_mask;
+ /* Horizontal Elliptical Uncertainty (Semi-Major Axis) */
+ float horUncEllipseSemiMajor;
+ /* Horizontal Elliptical Uncertainty (Semi-Minor Axis) */
+ float horUncEllipseSemiMinor;
+ /* Elliptical Horizontal Uncertainty Azimuth */
+ float horUncEllipseOrientAzimuth;
- /**
- * Represents a bit mask indicating which BDS SVs
- * were used for computing the most recent position fix.
- */
- uint64_t bds_used_in_fix_mask;
-
-} GnssSvStatus;
+ Gnss_ApTimeStampStructType timeStamp;
+} GpsLocationExtended;
enum loc_sess_status {
LOC_SESS_SUCCESS,
@@ -312,6 +322,34 @@ typedef uint32_t LocPosTechMask;
#define LOC_POS_TECH_MASK_AFLT ((LocPosTechMask)0x00000040)
#define LOC_POS_TECH_MASK_HYBRID ((LocPosTechMask)0x00000080)
+// Nmea sentence types mask
+typedef uint32_t NmeaSentenceTypesMask;
+#define LOC_NMEA_MASK_GGA_V02 ((NmeaSentenceTypesMask)0x00000001) /**< Enable GGA type */
+#define LOC_NMEA_MASK_RMC_V02 ((NmeaSentenceTypesMask)0x00000002) /**< Enable RMC type */
+#define LOC_NMEA_MASK_GSV_V02 ((NmeaSentenceTypesMask)0x00000004) /**< Enable GSV type */
+#define LOC_NMEA_MASK_GSA_V02 ((NmeaSentenceTypesMask)0x00000008) /**< Enable GSA type */
+#define LOC_NMEA_MASK_VTG_V02 ((NmeaSentenceTypesMask)0x00000010) /**< Enable VTG type */
+#define LOC_NMEA_MASK_PQXFI_V02 ((NmeaSentenceTypesMask)0x00000020) /**< Enable PQXFI type */
+#define LOC_NMEA_MASK_PSTIS_V02 ((NmeaSentenceTypesMask)0x00000040) /**< Enable PSTIS type */
+#define LOC_NMEA_MASK_GLGSV_V02 ((NmeaSentenceTypesMask)0x00000080) /**< Enable GLGSV type */
+#define LOC_NMEA_MASK_GNGSA_V02 ((NmeaSentenceTypesMask)0x00000100) /**< Enable GNGSA type */
+#define LOC_NMEA_MASK_GNGNS_V02 ((NmeaSentenceTypesMask)0x00000200) /**< Enable GNGNS type */
+#define LOC_NMEA_MASK_GARMC_V02 ((NmeaSentenceTypesMask)0x00000400) /**< Enable GARMC type */
+#define LOC_NMEA_MASK_GAGSV_V02 ((NmeaSentenceTypesMask)0x00000800) /**< Enable GAGSV type */
+#define LOC_NMEA_MASK_GAGSA_V02 ((NmeaSentenceTypesMask)0x00001000) /**< Enable GAGSA type */
+#define LOC_NMEA_MASK_GAVTG_V02 ((NmeaSentenceTypesMask)0x00002000) /**< Enable GAVTG type */
+#define LOC_NMEA_MASK_GAGGA_V02 ((NmeaSentenceTypesMask)0x00004000) /**< Enable GAGGA type */
+#define LOC_NMEA_MASK_PQGSA_V02 ((NmeaSentenceTypesMask)0x00008000) /**< Enable PQGSA type */
+#define LOC_NMEA_MASK_PQGSV_V02 ((NmeaSentenceTypesMask)0x00010000) /**< Enable PQGSV type */
+#define LOC_NMEA_ALL_SUPPORTED_MASK (LOC_NMEA_MASK_GGA_V02 | LOC_NMEA_MASK_RMC_V02 | \
+ LOC_NMEA_MASK_GSV_V02 | LOC_NMEA_MASK_GSA_V02 | LOC_NMEA_MASK_VTG_V02 | \
+ LOC_NMEA_MASK_PQXFI_V02 | LOC_NMEA_MASK_PSTIS_V02 | LOC_NMEA_MASK_GLGSV_V02 | \
+ LOC_NMEA_MASK_GNGSA_V02 | LOC_NMEA_MASK_GNGNS_V02 | LOC_NMEA_MASK_GARMC_V02 | \
+ LOC_NMEA_MASK_GAGSV_V02 | LOC_NMEA_MASK_GAGSA_V02 | LOC_NMEA_MASK_GAVTG_V02 | \
+ LOC_NMEA_MASK_GAGGA_V02 | LOC_NMEA_MASK_PQGSA_V02 | LOC_NMEA_MASK_PQGSV_V02 )
+
+
+
typedef enum {
LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC = 0,
LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM,
@@ -374,6 +412,8 @@ enum loc_api_adapter_event_index {
LOC_API_ADAPTER_BATCH_FULL, // Batching on full
LOC_API_ADAPTER_BATCHED_POSITION_REPORT, // Batching on fix
LOC_API_ADAPTER_BATCHED_GENFENCE_BREACH_REPORT, //
+ LOC_API_ADAPTER_GNSS_MEASUREMENT_REPORT, //GNSS Measurement Report
+ LOC_API_ADAPTER_GNSS_SV_POLYNOMIAL_REPORT, //GNSS SV Polynomial Report
LOC_API_ADAPTER_GDT_UPLOAD_BEGIN_REQ, // GDT upload start request
LOC_API_ADAPTER_GDT_UPLOAD_END_REQ, // GDT upload end request
LOC_API_ADAPTER_GNSS_MEASUREMENT, // GNSS Measurement report
@@ -404,6 +444,8 @@ enum loc_api_adapter_event_index {
#define LOC_API_ADAPTER_BIT_REQUEST_WIFI_AP_DATA (1<<LOC_API_ADAPTER_REQUEST_WIFI_AP_DATA)
#define LOC_API_ADAPTER_BIT_BATCH_FULL (1<<LOC_API_ADAPTER_BATCH_FULL)
#define LOC_API_ADAPTER_BIT_BATCHED_POSITION_REPORT (1<<LOC_API_ADAPTER_BATCHED_POSITION_REPORT)
+#define LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT_REPORT (1<<LOC_API_ADAPTER_GNSS_MEASUREMENT_REPORT)
+#define LOC_API_ADAPTER_BIT_GNSS_SV_POLYNOMIAL_REPORT (1<<LOC_API_ADAPTER_GNSS_SV_POLYNOMIAL_REPORT)
#define LOC_API_ADAPTER_BIT_GDT_UPLOAD_BEGIN_REQ (1<<LOC_API_ADAPTER_GDT_UPLOAD_BEGIN_REQ)
#define LOC_API_ADAPTER_BIT_GDT_UPLOAD_END_REQ (1<<LOC_API_ADAPTER_GDT_UPLOAD_END_REQ)
#define LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT (1<<LOC_API_ADAPTER_GNSS_MEASUREMENT)
@@ -431,6 +473,593 @@ typedef uint32_t LOC_GPS_LOCK_MASK;
#define isGpsLockMT(lock) ((lock) & ((LOC_GPS_LOCK_MASK)2))
#define isGpsLockAll(lock) (((lock) & ((LOC_GPS_LOCK_MASK)3)) == 3)
+/*++ ***********************************************
+** Satellite Measurement and Satellite Polynomial
+** Structure definitions
+** ***********************************************
+--*/
+#define GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE 12
+#define GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE 3
+#define GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE 9
+#define GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE 4
+#define GNSS_LOC_SV_MEAS_LIST_MAX_SIZE 16
+
+enum ulp_gnss_sv_measurement_valid_flags{
+
+ ULP_GNSS_SV_MEAS_GPS_TIME = 0,
+ ULP_GNSS_SV_MEAS_PSUEDO_RANGE,
+ ULP_GNSS_SV_MEAS_MS_IN_WEEK,
+ ULP_GNSS_SV_MEAS_SUB_MSEC,
+ ULP_GNSS_SV_MEAS_CARRIER_PHASE,
+ ULP_GNSS_SV_MEAS_DOPPLER_SHIFT,
+ ULP_GNSS_SV_MEAS_CNO,
+ ULP_GNSS_SV_MEAS_LOSS_OF_LOCK,
+
+ ULP_GNSS_SV_MEAS_MAX_VALID_FLAGS
+};
+
+#define ULP_GNSS_SV_MEAS_BIT_GPS_TIME (1<<ULP_GNSS_SV_MEAS_GPS_TIME)
+#define ULP_GNSS_SV_MEAS_BIT_PSUEDO_RANGE (1<<ULP_GNSS_SV_MEAS_PSUEDO_RANGE)
+#define ULP_GNSS_SV_MEAS_BIT_MS_IN_WEEK (1<<ULP_GNSS_SV_MEAS_MS_IN_WEEK)
+#define ULP_GNSS_SV_MEAS_BIT_SUB_MSEC (1<<ULP_GNSS_SV_MEAS_SUB_MSEC)
+#define ULP_GNSS_SV_MEAS_BIT_CARRIER_PHASE (1<<ULP_GNSS_SV_MEAS_CARRIER_PHASE)
+#define ULP_GNSS_SV_MEAS_BIT_DOPPLER_SHIFT (1<<ULP_GNSS_SV_MEAS_DOPPLER_SHIFT)
+#define ULP_GNSS_SV_MEAS_BIT_CNO (1<<ULP_GNSS_SV_MEAS_CNO)
+#define ULP_GNSS_SV_MEAS_BIT_LOSS_OF_LOCK (1<<ULP_GNSS_SV_MEAS_LOSS_OF_LOCK)
+
+enum ulp_gnss_sv_poly_valid_flags{
+
+ ULP_GNSS_SV_POLY_GLO_FREQ = 0,
+ ULP_GNSS_SV_POLY_T0,
+ ULP_GNSS_SV_POLY_IODE,
+ ULP_GNSS_SV_POLY_FLAG,
+ ULP_GNSS_SV_POLY_POLYCOEFF_XYZ0,
+ ULP_GNSS_SV_POLY_POLYCOEFF_XYZN,
+ ULP_GNSS_SV_POLY_POLYCOEFF_OTHER,
+ ULP_GNSS_SV_POLY_SV_POSUNC,
+ ULP_GNSS_SV_POLY_IONODELAY,
+ ULP_GNSS_SV_POLY_IONODOT,
+ ULP_GNSS_SV_POLY_SBAS_IONODELAY,
+ ULP_GNSS_SV_POLY_SBAS_IONODOT,
+ ULP_GNSS_SV_POLY_TROPODELAY,
+ ULP_GNSS_SV_POLY_ELEVATION,
+ ULP_GNSS_SV_POLY_ELEVATIONDOT,
+ ULP_GNSS_SV_POLY_ELEVATIONUNC,
+ ULP_GNSS_SV_POLY_VELO_COEFF,
+ ULP_GNSS_SV_POLY_ENHANCED_IOD,
+
+ ULP_GNSS_SV_POLY_VALID_FLAGS
+
+};
+
+#define ULP_GNSS_SV_POLY_BIT_GLO_FREQ (1<<ULP_GNSS_SV_POLY_GLO_FREQ)
+#define ULP_GNSS_SV_POLY_BIT_T0 (1<<ULP_GNSS_SV_POLY_T0)
+#define ULP_GNSS_SV_POLY_BIT_IODE (1<<ULP_GNSS_SV_POLY_IODE)
+#define ULP_GNSS_SV_POLY_BIT_FLAG (1<<ULP_GNSS_SV_POLY_FLAG)
+#define ULP_GNSS_SV_POLY_BIT_POLYCOEFF_XYZ0 (1<<ULP_GNSS_SV_POLY_POLYCOEFF_XYZ0)
+#define ULP_GNSS_SV_POLY_BIT_POLYCOEFF_XYZN (1<<ULP_GNSS_SV_POLY_POLYCOEFF_XYZN)
+#define ULP_GNSS_SV_POLY_BIT_POLYCOEFF_OTHER (1<<ULP_GNSS_SV_POLY_POLYCOEFF_OTHER)
+#define ULP_GNSS_SV_POLY_BIT_SV_POSUNC (1<<ULP_GNSS_SV_POLY_SV_POSUNC)
+#define ULP_GNSS_SV_POLY_BIT_IONODELAY (1<<ULP_GNSS_SV_POLY_IONODELAY)
+#define ULP_GNSS_SV_POLY_BIT_IONODOT (1<<ULP_GNSS_SV_POLY_IONODOT)
+#define ULP_GNSS_SV_POLY_BIT_SBAS_IONODELAY (1<<ULP_GNSS_SV_POLY_SBAS_IONODELAY)
+#define ULP_GNSS_SV_POLY_BIT_SBAS_IONODOT (1<<ULP_GNSS_SV_POLY_SBAS_IONODOT)
+#define ULP_GNSS_SV_POLY_BIT_TROPODELAY (1<<ULP_GNSS_SV_POLY_TROPODELAY)
+#define ULP_GNSS_SV_POLY_BIT_ELEVATION (1<<ULP_GNSS_SV_POLY_ELEVATION)
+#define ULP_GNSS_SV_POLY_BIT_ELEVATIONDOT (1<<ULP_GNSS_SV_POLY_ELEVATIONDOT)
+#define ULP_GNSS_SV_POLY_BIT_ELEVATIONUNC (1<<ULP_GNSS_SV_POLY_ELEVATIONUNC)
+#define ULP_GNSS_SV_POLY_BIT_VELO_COEFF (1<<ULP_GNSS_SV_POLY_VELO_COEFF)
+#define ULP_GNSS_SV_POLY_BIT_ENHANCED_IOD (1<<ULP_GNSS_SV_POLY_ENHANCED_IOD)
+
+
+typedef enum
+{
+ GNSS_LOC_SV_SYSTEM_GPS = 1,
+ /**< GPS satellite. */
+ GNSS_LOC_SV_SYSTEM_GALILEO = 2,
+ /**< GALILEO satellite. */
+ GNSS_LOC_SV_SYSTEM_SBAS = 3,
+ /**< SBAS satellite. */
+ GNSS_LOC_SV_SYSTEM_COMPASS = 4,
+ /**< COMPASS satellite. */
+ GNSS_LOC_SV_SYSTEM_GLONASS = 5,
+ /**< GLONASS satellite. */
+ GNSS_LOC_SV_SYSTEM_BDS = 6
+ /**< BDS satellite. */
+} Gnss_LocSvSystemEnumType;
+
+typedef enum
+{
+ GNSS_LOC_FREQ_SOURCE_INVALID = 0,
+ /**< Source of the frequency is invalid */
+ GNSS_LOC_FREQ_SOURCE_EXTERNAL = 1,
+ /**< Source of the frequency is from external injection */
+ GNSS_LOC_FREQ_SOURCE_PE_CLK_REPORT = 2,
+ /**< Source of the frequency is from Navigation engine */
+ GNSS_LOC_FREQ_SOURCE_UNKNOWN = 3
+ /**< Source of the frequency is unknown */
+} Gnss_LocSourceofFreqEnumType;
+
+typedef struct
+{
+ size_t size;
+ float clockDrift;
+ /**< Receiver clock Drift \n
+ - Units: meter per sec \n
+ */
+ float clockDriftUnc;
+ /**< Receiver clock Drift uncertainty \n
+ - Units: meter per sec \n
+ */
+ Gnss_LocSourceofFreqEnumType sourceOfFreq;
+}Gnss_LocRcvrClockFrequencyInfoStructType;
+
+typedef struct
+{
+ size_t size;
+ uint8_t leapSec;
+ /**< GPS time leap second delta to UTC time \n
+ - Units: sec \n
+ */
+ uint8_t leapSecUnc;
+ /**< Uncertainty for GPS leap second \n
+ - Units: sec \n
+ */
+}Gnss_LeapSecondInfoStructType;
+
+typedef enum
+{
+ GNSS_LOC_SYS_TIME_BIAS_VALID = 0x01,
+ /**< System time bias valid */
+ GNSS_LOC_SYS_TIME_BIAS_UNC_VALID = 0x02,
+ /**< System time bias uncertainty valid */
+}Gnss_LocInterSystemBiasValidMaskType;
+
+typedef struct
+{
+ size_t size;
+ uint32_t validMask;
+ /* Validity mask as per Gnss_LocInterSystemBiasValidMaskType */
+
+ float timeBias;
+ /**< System-1 to System-2 Time Bias \n
+ - Units: msec \n
+ */
+ float timeBiasUnc;
+ /**< System-1 to System-2 Time Bias uncertainty \n
+ - Units: msec \n
+ */
+}Gnss_InterSystemBiasStructType;
+
+
+typedef struct
+{
+ size_t size;
+ uint16_t systemWeek;
+ /**< System week number for GPS, BDS and GAL satellite systems. \n
+ Set to 65535 when invalid or not available. \n
+ Not valid for GLONASS system. \n
+ */
+
+ uint32_t systemMsec;
+ /**< System time msec. Time of Week for GPS, BDS, GAL and
+ Time of Day for GLONASS.
+ - Units: msec \n
+ */
+ float systemClkTimeBias;
+ /**< System clock time bias \n
+ - Units: msec \n
+ System time = systemMsec - systemClkTimeBias \n
+ */
+ float systemClkTimeUncMs;
+ /**< Single sided maximum time bias uncertainty \n
+ - Units: msec \n
+ */
+}Gnss_LocSystemTimeStructType;
+
+typedef struct {
+
+ size_t size;
+ uint8_t gloFourYear;
+ /**< GLONASS four year number from 1996. Refer to GLONASS ICD.\n
+ Applicable only for GLONASS and shall be ignored for other constellations. \n
+ If unknown shall be set to 255
+ */
+
+ uint16_t gloDays;
+ /**< GLONASS day number in four years. Refer to GLONASS ICD.
+ Applicable only for GLONASS and shall be ignored for other constellations. \n
+ If unknown shall be set to 65535
+ */
+
+ uint32_t gloMsec;
+ /**< GLONASS time of day in msec. Refer to GLONASS ICD.
+ - Units: msec \n
+ */
+
+ float gloClkTimeBias;
+ /**< System clock time bias (sub-millisecond) \n
+ - Units: msec \n
+ System time = systemMsec - systemClkTimeBias \n
+ */
+
+ float gloClkTimeUncMs;
+ /**< Single sided maximum time bias uncertainty \n
+ - Units: msec \n
+ */
+}Gnss_LocGloTimeStructType; /* Type */
+
+typedef struct {
+
+ size_t size;
+ uint32_t refFCount;
+ /**< Receiver frame counter value at reference tick */
+
+ uint8_t systemRtc_valid;
+ /**< Validity indicator for System RTC */
+
+ uint64_t systemRtcMs;
+ /**< Platform system RTC value \n
+ - Units: msec \n
+ */
+
+ uint32_t sourceOfTime;
+ /**< Source of time information */
+
+}Gnss_LocGnssTimeExtStructType;
+
+
+
+typedef enum
+{
+ GNSS_LOC_MEAS_STATUS_NULL = 0x00000000,
+ /**< No information state */
+ GNSS_LOC_MEAS_STATUS_SM_VALID = 0x00000001,
+ /**< Code phase is known */
+ GNSS_LOC_MEAS_STATUS_SB_VALID = 0x00000002,
+ /**< Sub-bit time is known */
+ GNSS_LOC_MEAS_STATUS_MS_VALID = 0x00000004,
+ /**< Satellite time is known */
+ GNSS_LOC_MEAS_STATUS_BE_CONFIRM = 0x00000008,
+ /**< Bit edge is confirmed from signal */
+ GNSS_LOC_MEAS_STATUS_VELOCITY_VALID = 0x00000010,
+ /**< Satellite Doppler measured */
+ GNSS_LOC_MEAS_STATUS_VELOCITY_FINE = 0x00000020,
+ /**< TRUE: Fine Doppler measured, FALSE: Coarse Doppler measured */
+ GNSS_LOC_MEAS_STATUS_FROM_RNG_DIFF = 0x00000200,
+ /**< Range update from Satellite differences */
+ GNSS_LOC_MEAS_STATUS_FROM_VE_DIFF = 0x00000400,
+ /**< Doppler update from Satellite differences */
+ GNSS_LOC_MEAS_STATUS_DONT_USE_X = 0x00000800,
+ /**< Don't use measurement if bit is set */
+ GNSS_LOC_MEAS_STATUS_DONT_USE_M = 0x000001000,
+ /**< Don't use measurement if bit is set */
+ GNSS_LOC_MEAS_STATUS_DONT_USE_D = 0x000002000,
+ /**< Don't use measurement if bit is set */
+ GNSS_LOC_MEAS_STATUS_DONT_USE_S = 0x000004000,
+ /**< Don't use measurement if bit is set */
+ GNSS_LOC_MEAS_STATUS_DONT_USE_P = 0x000008000
+ /**< Don't use measurement if bit is set */
+}Gnss_LocSvMeasStatusMaskType;
+
+typedef struct
+{
+ size_t size;
+ uint32_t svMs;
+ /**< Satellite time milisecond.\n
+ For GPS, BDS, GAL range of 0 thru (604800000-1) \n
+ For GLONASS range of 0 thru (86400000-1) \n
+ Valid when PD_LOC_MEAS_STATUS_MS_VALID bit is set in measurement status \n
+ Note: All SV times in the current measurement block are alredy propagated to common reference time epoch. \n
+ - Units: msec \n
+ */
+ float svSubMs;
+ /**<Satellite time sub-millisecond. \n
+ Total SV Time = svMs + svSubMs \n
+ - Units: msec \n
+ */
+ float svTimeUncMs;
+ /**< Satellite Time uncertainty \n
+ - Units: msec \n
+ */
+ float dopplerShift;
+ /**< Satellite Doppler \n
+ - Units: meter per sec \n
+ */
+ float dopplerShiftUnc;
+ /**< Satellite Doppler uncertainty\n
+ - Units: meter per sec \n
+ */
+}Gnss_LocSVTimeSpeedStructType;
+
+typedef enum
+{
+ GNSS_SV_STATE_IDLE = 0,
+ GNSS_SV_STATE_SEARCH = 1,
+ GNSS_SV_STATE_SEARCH_VERIFY = 2,
+ GNSS_SV_STATE_BIT_EDGE = 3,
+ GNSS_SV_STATE_VERIFY_TRACK = 4,
+ GNSS_SV_STATE_TRACK = 5,
+ GNSS_SV_STATE_RESTART = 6,
+ GNSS_SV_STATE_DPO_TRACK = 7
+} Gnss_LocSVStateEnumType;
+
+typedef enum
+{
+ GNSS_LOC_SVINFO_MASK_HAS_EPHEMERIS = 0x01,
+ /**< Ephemeris is available for this SV */
+ GNSS_LOC_SVINFO_MASK_HAS_ALMANAC = 0x02
+ /**< Almanac is available for this SV */
+}Gnss_LocSvInfoMaskT;
+
+typedef enum
+{
+ GNSS_LOC_SV_SRCH_STATUS_IDLE = 1,
+ /**< SV is not being actively processed */
+ GNSS_LOC_SV_SRCH_STATUS_SEARCH = 2,
+ /**< The system is searching for this SV */
+ GNSS_LOC_SV_SRCH_STATUS_TRACK = 3
+ /**< SV is being tracked */
+}Gnss_LocSvSearchStatusEnumT;
+
+
+typedef struct
+{
+ size_t size;
+ uint16_t gnssSvId;
+ /**< GNSS SV ID.
+ \begin{itemize1}
+ \item Range: \begin{itemize1}
+ \item For GPS: 1 to 32
+ \item For GLONASS: 1 to 32
+ \item For SBAS: 120 to 151
+ \item For BDS: 201 to 237
+ \end{itemize1} \end{itemize1}
+ The GPS and GLONASS SVs can be disambiguated using the system field.
+ */
+ uint8_t gloFrequency;
+ /**< GLONASS frequency number + 7 \n
+ Valid only for GLONASS System \n
+ Shall be ignored for all other systems \n
+ - Range: 1 to 14 \n
+ */
+ Gnss_LocSvSearchStatusEnumT svStatus;
+ /**< Satellite search state \n
+ @ENUM()
+ */
+ bool healthStatus_valid;
+ /**< SV Health Status validity flag\n
+ - 0: Not valid \n
+ - 1: Valid \n
+ */
+ uint8_t healthStatus;
+ /**< Health status.
+ \begin{itemize1}
+ \item Range: 0 to 1; 0 = unhealthy, \n 1 = healthy, 2 = unknown
+ \vspace{-0.18in} \end{itemize1}
+ */
+ Gnss_LocSvInfoMaskT svInfoMask;
+ /**< Indicates whether almanac and ephemeris information is available. \n
+ @MASK()
+ */
+ uint64_t measurementStatus;
+ /**< Bitmask indicating SV measurement status.
+ Valid bitmasks: \n
+ @MASK()
+ */
+ uint16_t CNo;
+ /**< Carrier to Noise ratio \n
+ - Units: 0.1 dBHz \n
+ */
+ uint16_t gloRfLoss;
+ /**< GLONASS Rf loss reference to Antenna. \n
+ - Units: dB, Scale: 0.1 \n
+ */
+ bool lossOfLock;
+ /**< Loss of signal lock indicator \n
+ - 0: Signal in continuous track \n
+ - 1: Signal not in track \n
+ */
+ int16_t measLatency;
+ /**< Age of the measurement. Positive value means measurement precedes ref time. \n
+ - Units: msec \n
+ */
+ Gnss_LocSVTimeSpeedStructType svTimeSpeed;
+ /**< Unfiltered SV Time and Speed information
+ */
+ float dopplerAccel;
+ /**< Satellite Doppler Accelertion\n
+ - Units: Hz/s \n
+ */
+ bool multipathEstValid;
+ /**< Multipath estimate validity flag\n
+ - 0: Multipath estimate not valid \n
+ - 1: Multipath estimate valid \n
+ */
+ float multipathEstimate;
+ /**< Estimate of multipath in measurement\n
+ - Units: Meters \n
+ */
+ bool fineSpeedValid;
+ /**< Fine speed validity flag\n
+ - 0: Fine speed not valid \n
+ - 1: Fine speed valid \n
+ */
+ float fineSpeed;
+ /**< Carrier phase derived speed \n
+ - Units: m/s \n
+ */
+ bool fineSpeedUncValid;
+ /**< Fine speed uncertainty validity flag\n
+ - 0: Fine speed uncertainty not valid \n
+ - 1: Fine speed uncertainty valid \n
+ */
+ float fineSpeedUnc;
+ /**< Carrier phase derived speed \n
+ - Units: m/s \n
+ */
+ bool carrierPhaseValid;
+ /**< Carrier Phase measurement validity flag\n
+ - 0: Carrier Phase not valid \n
+ - 1: Carrier Phase valid \n
+ */
+ double carrierPhase;
+ /**< Carrier phase measurement [L1 cycles] \n
+ */
+ bool cycleSlipCountValid;
+ /**< Cycle slup count validity flag\n
+ - 0: Not valid \n
+ - 1: Valid \n
+ */
+ uint8_t cycleSlipCount;
+ /**< Increments when a CSlip is detected */
+
+ bool svDirectionValid;
+ /**< Validity flag for SV direction */
+
+ float svAzimuth;
+ /**< Satellite Azimuth
+ - Units: radians \n
+ */
+ float svElevation;
+ /**< Satellite Elevation
+ - Units: radians \n
+ */
+} Gnss_SVMeasurementStructType;
+
+/**< Maximum number of satellites in measurement block for given system. */
+
+typedef struct
+{
+ size_t size;
+ Gnss_LocSvSystemEnumType system;
+ /**< Specifies the Satellite System Type
+ */
+ bool isSystemTimeValid;
+ /**< Indicates whether System Time is Valid:\n
+ - 0x01 (TRUE) -- System Time is valid \n
+ - 0x00 (FALSE) -- System Time is not valid
+ */
+ Gnss_LocSystemTimeStructType systemTime;
+ /**< System Time Information \n
+ */
+ bool isGloTime_valid;
+ Gnss_LocGloTimeStructType gloTime;
+
+ bool isSystemTimeExt_valid;
+ Gnss_LocGnssTimeExtStructType systemTimeExt;
+
+ uint8_t numSvs;
+ /* Number of SVs in this report block */
+
+ Gnss_SVMeasurementStructType svMeasurement[GNSS_LOC_SV_MEAS_LIST_MAX_SIZE];
+ /**< Satellite measurement Information \n
+ */
+} Gnss_ClockMeasurementStructType;
+
+
+typedef struct
+{
+ size_t size;
+ uint8_t seqNum;
+ /**< Current message Number */
+ uint8_t maxMessageNum;
+ /**< Maximum number of message that will be sent for present time epoch. */
+
+ bool leapSecValid;
+ Gnss_LeapSecondInfoStructType leapSec;
+
+ Gnss_InterSystemBiasStructType gpsGloInterSystemBias;
+
+ Gnss_InterSystemBiasStructType gpsBdsInterSystemBias;
+
+ Gnss_InterSystemBiasStructType gpsGalInterSystemBias;
+
+ Gnss_InterSystemBiasStructType bdsGloInterSystemBias;
+
+ Gnss_InterSystemBiasStructType galGloInterSystemBias;
+
+ Gnss_InterSystemBiasStructType galBdsInterSystemBias;
+
+ bool clockFreqValid;
+ Gnss_LocRcvrClockFrequencyInfoStructType clockFreq; /* Freq */
+ bool gnssMeasValid;
+ Gnss_ClockMeasurementStructType gnssMeas;
+ Gnss_ApTimeStampStructType timeStamp;
+
+} GnssSvMeasurementSet;
+
+typedef enum
+{
+ GNSS_SV_POLY_COEFF_VALID = 0x01,
+ /**< SV position in orbit coefficients are valid */
+ GNSS_SV_POLY_IONO_VALID = 0x02,
+ /**< Iono estimates are valid */
+
+ GNSS_SV_POLY_TROPO_VALID = 0x04,
+ /**< Tropo estimates are valid */
+
+ GNSS_SV_POLY_ELEV_VALID = 0x08,
+ /**< Elevation, rate, uncertainty are valid */
+
+ GNSS_SV_POLY_SRC_ALM_CORR = 0x10,
+ /**< Polynomials based on XTRA */
+
+ GNSS_SV_POLY_SBAS_IONO_VALID = 0x20,
+ /**< SBAS IONO and rate are valid */
+
+ GNSS_SV_POLY_GLO_STR4 = 0x40
+ /**< GLONASS String 4 has been received */
+}Gnss_SvPolyStatusMaskType;
+
+
+typedef struct
+{
+ size_t size;
+ uint8_t gnssSvId;
+ /* GPS: 1-32, GLO: 65-96, 0: Invalid
+ All others are reserved
+ */
+ int8_t freqNum;
+ /* Freq index, only valid if u_SysInd is GLO */
+
+ uint8_t svPolyFlags;
+ /* Indicate the validity of the elements
+ as per Gnss_SvPolyStatusMaskType
+ */
+
+ uint32_t is_valid;
+
+ uint16_t iode;
+ /* Ephemeris reference time
+ GPS:Issue of Data Ephemeris used [unitless].
+ GLO: Tb 7-bit, refer to ICD02
+ */
+ double T0;
+ /* Reference time for polynominal calculations
+ GPS: Secs in week.
+ GLO: Full secs since Jan/01/96
+ */
+ double polyCoeffXYZ0[GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE];
+ /* C0X, C0Y, C0Z */
+ double polyCoefXYZN[GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE];
+ /* C1X, C2X ... C2Z, C3Z */
+ float polyCoefOther[GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE];
+ /* C0T, C1T, C2T, C3T */
+ float svPosUnc; /* SV position uncertainty [m]. */
+ float ionoDelay; /* Ionospheric delay at d_T0 [m]. */
+ float ionoDot; /* Iono delay rate [m/s]. */
+ float sbasIonoDelay;/* SBAS Ionospheric delay at d_T0 [m]. */
+ float sbasIonoDot; /* SBAS Iono delay rate [m/s]. */
+ float tropoDelay; /* Tropospheric delay [m]. */
+ float elevation; /* Elevation [rad] at d_T0 */
+ float elevationDot; /* Elevation rate [rad/s] */
+ float elevationUnc; /* SV elevation [rad] uncertainty */
+ double velCoef[GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE];
+ /* Coefficients of velocity poly */
+ uint32_t enhancedIOD; /* Enhanced Reference Time */
+} GnssSvPolynomial;
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/gps/core/loc_core_log.cpp b/gps/core/loc_core_log.cpp
index 3ca6c0a..4556fae 100644
--- a/gps/core/loc_core_log.cpp
+++ b/gps/core/loc_core_log.cpp
@@ -31,8 +31,8 @@
#define LOG_TAG "LocSvc_core_log"
#include <loc_log.h>
-#include <log_util.h>
#include <loc_core_log.h>
+#include <platform_lib_includes.h>
void LocPosMode::logv() const
{
diff --git a/gps/etc/gps.conf b/gps/etc/gps.conf
index ea1b9ac..c74e826 100644
--- a/gps/etc/gps.conf
+++ b/gps/etc/gps.conf
@@ -4,12 +4,6 @@
#XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra2.bin
#XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra2.bin
-#ifdef VENDOR_EDIT
-XTRA_SERVER_1=http://xtrapath1.izatcloud.net/xtra3grc.bin
-XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra3grc.bin
-XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra3grc.bin
-#endif
-
#Version check for XTRA
#DISABLE = 0
#AUTO = 1
@@ -22,19 +16,13 @@ XTRA_VERSION_CHECK=0
# _CLEAR = 0
ERR_ESTIMATE=0
-#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
+#NTP server
+NTP_SERVER=time.izatcloud.net
# DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info
# 4 - Debug, 5 - Verbose
# If DEBUG_LEVEL is commented, Android's logging levels will be used
-DEBUG_LEVEL = 2
+DEBUG_LEVEL = 3
# Intermediate position report, 1=enable, 0=disable
INTERMEDIATE_POS=0
@@ -55,7 +43,7 @@ SUPL_ES=0
#Choose PDN for Emergency SUPL
#1 - Use emergency PDN
#0 - Use regular SUPL PDN for Emergency SUPL
-USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL=1
+USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL=0
#SUPL_MODE is a bit mask set in config.xml per carrier by default.
#If it is uncommented here, this value will overwrite the value from
@@ -120,8 +108,73 @@ SGLTE_TARGET=0
# 0x1: RRC CPlane
# 0x2: RRLP UPlane
# 0x4: LLP Uplane
-#ifndef zuoyonghua@oneplus.cn enable all bit mask for GLONASS
-#A_GLONASS_POS_PROTOCOL_SELECT = 0
-#else
-A_GLONASS_POS_PROTOCOL_SELECT = 15
-#endif
+A_GLONASS_POS_PROTOCOL_SELECT = 0
+
+##################################################
+# Select technology for LPPe Control Plane
+##################################################
+# 0x1: DBH for LPPe CP
+# 0x2: WLAN AP Measurements for LPPe CP
+LPPE_CP_TECHNOLOGY = 0
+
+##################################################
+# Select technology for LPPe User Plane
+##################################################
+# 0x1: DBH for LPPe UP
+# 0x2: WLAN AP Measurements for LPPe UP
+LPPE_UP_TECHNOLOGY = 0
+
+##################################################
+# AGPS_CONFIG_INJECT
+##################################################
+# enable/disable injection of AGPS configurations:
+# SUPL_VER
+# SUPL_HOST
+# SUPL_PORT
+# C2K_HOST
+# C2K_PORT
+# LPP_PROFILE
+# A_GLONASS_POS_PROTOCOL_SELECT
+# 0: disable
+# 1: enable
+AGPS_CONFIG_INJECT = 1
+# AP Coarse Timestamp Uncertainty
+##################################################
+# default : 10
+# or as per clock uncertainty of product
+AP_TIMESTAMP_UNCERTAINTY = 10
+
+#####################################
+# GNSS PPS settings
+#####################################
+#AP DR engine availability status
+# 0 : NO AP DR (default)
+# 1 : AP DR enabled
+#EXTERNAL_DR_ENABLED = 0
+
+#####################################
+#DR_SYNC Pulse Availability
+#####################################
+# 0 : DR_SYNC pulse not available (default)
+# 1 : DR_SYNC pulse available
+DR_SYNC_ENABLED = 0
+
+#####################################
+#PPS Device name
+#####################################
+PPS_DEVICENAME = /dev/pps0
+
+#####################################
+#AP Clock Accuracy
+#####################################
+AP_CLOCK_PPM = 100
+
+#####################################
+#MAX ms difference to detect missing pulse
+#####################################
+MISSING_PULSE_TIME_DELTA = 900
+
+#####################################
+#Propagation time uncertainty
+#####################################
+PROPAGATION_TIME_UNCERTAINTY = 1
diff --git a/gps/etc/izat.conf b/gps/etc/izat.conf
index 1877099..d9fc913 100644
--- a/gps/etc/izat.conf
+++ b/gps/etc/izat.conf
@@ -83,27 +83,27 @@ GTP_WAA=DISABLED
# DISABLED
# BASIC
# PREMIUM
-SAP=BASIC
+SAP=PREMIUM
#ODCPI valid modes:
#DISABLED
#BASIC
-ODCPI=DISABLED
+ODCPI=BASIC
#FREE_WIFI_SCAN_INJECT valid modes:
#DISABLED
#BASIC
-FREE_WIFI_SCAN_INJECT=DISABLED
+FREE_WIFI_SCAN_INJECT=BASIC
#SUPL_WIFI valid modes:
#DISABLED
#BASIC
-SUPL_WIFI=DISABLED
+SUPL_WIFI=BASIC
#WIFI_SUPPLICANT_INFO valid modes:
#DISABLED
#BASIC
-WIFI_SUPPLICANT_INFO=DISABLED
+WIFI_SUPPLICANT_INFO=BASIC
#####################################
# Location process launcher settings
@@ -139,7 +139,7 @@ WIFI_SUPPLICANT_INFO=DISABLED
#DISABLED -> if this process is to be disabled on lean and mean targets
PROCESS_NAME=/system/bin/garden_app
PROCESS_ARGUMENT=-u 0 -q 0 -j 0 -g 0 -l 0 -Z 0 -T 1
-PROCESS_STATE=DISABLED
+PROCESS_STATE=ENABLED
PROCESS_GROUPS=gps net_raw
PREMIUM_FEATURE=0
IZAT_FEATURE_MASK=0
@@ -149,7 +149,7 @@ LEAN_TARGETS=DISABLED
PROCESS_NAME=/system/bin/gpsone_daemon
PROCESS_ARGUMENT=
-PROCESS_STATE=DISABLED
+PROCESS_STATE=ENABLED
PROCESS_GROUPS=inet net_raw
PREMIUM_FEATURE=0
IZAT_FEATURE_MASK=0
@@ -159,7 +159,7 @@ LEAN_TARGETS=DISABLED
PROCESS_NAME=/system/bin/lowi-server
PROCESS_ARGUMENT=
-PROCESS_STATE=DISABLED
+PROCESS_STATE=ENABLED
PROCESS_GROUPS=gps net_admin wifi inet qcom_diag net_raw
PREMIUM_FEATURE=0
IZAT_FEATURE_MASK=0xf303
@@ -169,7 +169,7 @@ LEAN_TARGETS=DISABLED
PROCESS_NAME=/system/bin/xtwifi-inet-agent
PROCESS_ARGUMENT=
-PROCESS_STATE=DISABLED
+PROCESS_STATE=ENABLED
PROCESS_GROUPS=inet gps
PREMIUM_FEATURE=1
IZAT_FEATURE_MASK=0xc0f
@@ -179,7 +179,7 @@ LEAN_TARGETS=DISABLED
PROCESS_NAME=/system/bin/xtwifi-client
PROCESS_ARGUMENT=
-PROCESS_STATE=DISABLED
+PROCESS_STATE=ENABLED
PROCESS_GROUPS=net_admin wifi inet gps net_raw rfs_shared
PREMIUM_FEATURE=1
IZAT_FEATURE_MASK=0xf0f
diff --git a/gps/loc_api/Android.mk b/gps/loc_api/Android.mk
index 8bfdd1b..0a16f68 100644
--- a/gps/loc_api/Android.mk
+++ b/gps/loc_api/Android.mk
@@ -9,5 +9,11 @@ endif #TARGET_NO_RPC
GPS_DIR_LIST += $(LOCAL_PATH)/libloc_api_50001/
+ifneq ($(QCPATH),)
+GPS_DIR_LIST += \
+ $(LOCAL_PATH)/ds_api/ \
+ $(LOCAL_PATH)/loc_api_v02/
+endif
+
#call the subfolders
include $(addsuffix Android.mk, $(GPS_DIR_LIST))
diff --git a/gps/loc_api/Makefile.am b/gps/loc_api/Makefile.am
new file mode 100644
index 0000000..a5f529b
--- /dev/null
+++ b/gps/loc_api/Makefile.am
@@ -0,0 +1,133 @@
+AM_CFLAGS = \
+ -I./ \
+ -I../core \
+ -I./libloc_api_50001 \
+ -I../utils \
+ $(LOCPLA_CFLAGS) \
+ -fno-short-enums \
+ -D__func__=__PRETTY_FUNCTION__ \
+ -DTARGET_USES_QCOM_BSP
+
+libloc_eng_so_la_h_sources = \
+ loc_eng_dmn_conn_glue_msg.h \
+ loc_eng_dmn_conn_glue_pipe.h \
+ loc_eng_dmn_conn.h \
+ loc_eng_dmn_conn_handler.h \
+ loc_eng_dmn_conn_thread_helper.h
+
+libloc_eng_so_la_SOURCES = \
+ libloc_api_50001/loc_eng.cpp \
+ libloc_api_50001/loc_eng_agps.cpp \
+ libloc_api_50001/loc_eng_xtra.cpp \
+ libloc_api_50001/loc_eng_ni.cpp \
+ libloc_api_50001/loc_eng_log.cpp \
+ libloc_api_50001/loc_eng_nmea.cpp \
+ libloc_api_50001/LocEngAdapter.cpp \
+ libloc_api_50001/loc_eng_dmn_conn.cpp \
+ libloc_api_50001/loc_eng_dmn_conn_handler.cpp \
+ libloc_api_50001/loc_eng_dmn_conn_thread_helper.c \
+ libloc_api_50001/loc_eng_dmn_conn_glue_msg.c \
+ libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c
+
+libloc_eng_so_la_SOURCES += libloc_eng_so_la_h_sources
+
+if USE_GLIB
+libloc_eng_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libloc_eng_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libloc_eng_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libloc_eng_so_la_CFLAGS = $(AM_CFLAGS)
+libloc_eng_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
+libloc_eng_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+
+libloc_eng_so_la_LIBADD = -lstdc++ -ldl -llog $(LOCPLA_LIBS) ../utils/libgps_utils_so.la ../core/libloc_core.la
+
+
+libgps_default_so_la_SOURCES = \
+ libloc_api_50001/loc.cpp \
+ libloc_api_50001/gps.c
+
+if USE_GLIB
+libgps_default_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libgps_default_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libgps_default_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libgps_default_so_la_CFLAGS = $(AM_CFLAGS)
+libgps_default_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
+libgps_default_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+
+libgps_default_so_la_LIBADD = -lstdc++ -llog $(LOCPLA_LIBS) ../utils/libgps_utils_so.la ../core/libloc_core.la -ldl libloc_eng_so.la
+
+
+libloc_ds_api_CFLAGS = \
+ $(QMIF_CFLAGS) \
+ $(QMI_CFLAGS) \
+ $(DATA_CFLAGS) \
+ -I$(WORKSPACE)/qcom-opensource/location/loc_api/ds_api
+
+libloc_ds_api_la_SOURCES = \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/ds_api/ds_client.c
+
+if USE_GLIB
+libloc_ds_api_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(libloc_ds_api_CFLAGS) @GLIB_CFLAGS@
+libloc_ds_api_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libloc_ds_api_la_LDFLAGS += -Wl,--export-dynamic
+libloc_ds_api_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(libloc_ds_api_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libloc_ds_api_la_CFLAGS = $(AM_CFLAGS) $(libloc_ds_api_CFLAGS)
+libloc_ds_api_la_LDFLAGS = -lstdc++ -lpthread -Wl,--export-dynamic -shared -version-info 1:0:0
+libloc_ds_api_la_LDFLAGS += -Wl,--export-dynamic
+libloc_ds_api_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS) $(libloc_ds_api_CFLAGS)
+endif
+
+libloc_ds_api_la_LIBADD = -lstdc++ $(QMIF_LIBS) -lqmiservices -ldsi_netctrl $(LOCPLA_LIBS) ../utils/libgps_utils_so.la
+#libloc_ds_api_la_LIBADD = -lstdc++ $(QMIF_LIBS) -lqmiservices $(LOCPLA_LIBS) ../utils/libgps_utils_so.la
+
+libloc_api_v02_CFLAGS = \
+ $(QMIF_CFLAGS) \
+ -I$(WORKSPACE)/qcom-opensource/location/loc_api/ds_api \
+ -I$(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02
+
+libloc_api_v02_la_SOURCES = \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02/LocApiV02.cpp \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02/loc_api_v02_log.c \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02/loc_api_v02_client.c \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02/loc_api_sync_req.c \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02/location_service_v02.c
+
+if USE_GLIB
+libloc_api_v02_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(libloc_api_v02_CFLAGS) @GLIB_CFLAGS@
+libloc_api_v02_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libloc_api_v02_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(libloc_api_v02_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libloc_api_v02_la_CFLAGS = $(AM_CFLAGS) $(libloc_api_v02_CFLAGS)
+libloc_api_v02_la_LDFLAGS = -lstdc++ -lpthread -shared -version-info 1:0:0
+libloc_api_v02_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS) $(libloc_api_v02_CFLAGS)
+endif
+
+libloc_api_v02_la_CXXFLAGS = -std=c++0x
+libloc_api_v02_la_LIBADD = -lstdc++ -lqmi_cci -lqmi_common_so $(QMIF_LIBS) $(LOCPLA_LIBS) ../core/libloc_core.la ../utils/libgps_utils_so.la libloc_ds_api.la
+
+library_include_HEADERS = \
+ libloc_api_50001/LocEngAdapter.h \
+ libloc_api_50001/loc.h \
+ libloc_api_50001/loc_eng.h \
+ libloc_api_50001/loc_eng_xtra.h \
+ libloc_api_50001/loc_eng_ni.h \
+ libloc_api_50001/loc_eng_agps.h \
+ libloc_api_50001/loc_eng_msg.h \
+ libloc_api_50001/loc_eng_log.h \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/ds_api/ds_client.h \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02/location_service_v02.h \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02/loc_api_v02_log.h \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02/loc_api_v02_client.h \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02/loc_api_sync_req.h \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02/LocApiV02.h \
+ $(WORKSPACE)/qcom-opensource/location/loc_api/loc_api_v02/loc_util_log.h
+
+library_includedir = $(pkgincludedir)
+
+#Create and Install libraries
+lib_LTLIBRARIES = libloc_eng_so.la libgps_default_so.la libloc_ds_api.la libloc_api_v02.la
diff --git a/gps/loc_api/ds_api/Android.mk b/gps/loc_api/ds_api/Android.mk
new file mode 100644
index 0000000..3bc94f2
--- /dev/null
+++ b/gps/loc_api/ds_api/Android.mk
@@ -0,0 +1,49 @@
+ifneq ($(BUILD_TINY_ANDROID),true)
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libloc_ds_api
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SHARED_LIBRARIES := \
+ libutils \
+ libcutils \
+ libqmi_cci \
+ libqmi_common_so \
+ libgps.utils \
+ libdsi_netctrl \
+ libqmiservices \
+ libloc_pla
+
+LOCAL_SRC_FILES += \
+ ds_client.c
+
+LOCAL_CFLAGS += \
+ -fno-short-enums \
+ -D_ANDROID_
+
+LOCAL_COPY_HEADERS_TO:= libloc_ds_api/
+
+LOCAL_COPY_HEADERS:= \
+ ds_client.h
+
+LOCAL_LDFLAGS += -Wl,--export-dynamic
+
+## Includes
+LOCAL_C_INCLUDES := \
+ $(TARGET_OUT_HEADERS)/libloc_eng \
+ $(TARGET_OUT_HEADERS)/qmi-framework/inc \
+ $(TARGET_OUT_HEADERS)/qmi/inc \
+ $(TARGET_OUT_HEADERS)/gps.utils \
+ $(TARGET_OUT_HEADERS)/data/inc \
+ $(TARGET_OUT_HEADERS)/libloc_pla
+
+
+LOCAL_PRELINK_MODULE := false
+
+include $(BUILD_SHARED_LIBRARY)
+
+endif # not BUILD_TINY_ANDROID
diff --git a/gps/loc_api/ds_api/ds_client.c b/gps/loc_api/ds_api/ds_client.c
new file mode 100644
index 0000000..c8250bd
--- /dev/null
+++ b/gps/loc_api/ds_api/ds_client.c
@@ -0,0 +1,834 @@
+/* Copyright (c) 2013, 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation, nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define LOG_NDEBUG 0
+#define LOG_TAG "LocSvc_ds_client"
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <wireless_data_service_v01.h>
+#include <loc_log.h>
+#include <qmi_client.h>
+#include <qmi_idl_lib.h>
+#include <qmi_cci_target_ext.h>
+#include <qmi_cci_target.h>
+#include <qmi_cci_common.h>
+#include <dsi_netctrl.h>
+#include <ds_client.h>
+#include <sys/time.h>
+#include <platform_lib_includes.h>
+
+/**
+ * @file
+ * @brief DS client API declaration.
+ *
+ * @ingroup loc_ds_api
+ */
+
+/**
+ * @addtogroup loc_ds_api DS client support for location
+ * @{
+ */
+
+//Timeout to wait for wds service notification from qmi
+#define DS_CLIENT_SERVICE_TIMEOUT (4000)
+//Max timeout for the service to come up
+#define DS_CLIENT_SERVICE_TIMEOUT_TOTAL (40000)
+//Timeout for the service to respond to sync msg
+#define DS_CLIENT_SYNC_MSG_TIMEOUT (5000)
+/*Request messages the WDS client can send to the WDS service*/
+typedef union
+{
+ /*Requests the service for a list of all profiles present*/
+ wds_get_profile_list_req_msg_v01 *p_get_profile_list_req;
+ /*Requests the service for a profile's settings*/
+ wds_get_profile_settings_req_msg_v01 *p_get_profile_settings_req;
+}ds_client_req_union_type;
+
+/*Response indications that are sent by the WDS service*/
+typedef union
+{
+ wds_get_profile_list_resp_msg_v01 *p_get_profile_list_resp;
+ wds_get_profile_settings_resp_msg_v01 *p_get_profile_setting_resp;
+}ds_client_resp_union_type;
+
+static const loc_name_val_s_type event_string_tbl[DSI_EVT_MAX] =
+{
+ NAME_VAL(DSI_EVT_INVALID),
+ NAME_VAL(DSI_EVT_NET_IS_CONN),
+ NAME_VAL(DSI_EVT_NET_NO_NET),
+ NAME_VAL(DSI_EVT_PHYSLINK_DOWN_STATE),
+ NAME_VAL(DSI_EVT_PHYSLINK_UP_STATE),
+ NAME_VAL(DSI_EVT_NET_RECONFIGURED),
+ NAME_VAL(DSI_EVT_WDS_CONNECTED)
+};
+
+typedef struct
+{
+ ds_client_event_ind_cb_type *event_cb;
+ void *caller_cookie;
+}ds_caller_data;
+
+typedef struct {
+ //Global dsi handle
+ dsi_hndl_t dsi_net_handle;
+ //Handle to caller's data
+ ds_caller_data caller_data;
+} ds_client_session_data;
+
+static void net_ev_cb
+(
+ dsi_hndl_t handle,
+ void* user_data,
+ dsi_net_evt_t evt,
+ dsi_evt_payload_t *payload_ptr
+)
+{
+ int i;
+ (void)handle;
+ (void)user_data;
+ (void)payload_ptr;
+ ds_caller_data *callback_data = (ds_caller_data *)user_data;
+
+ LOC_LOGD("%s:%d]: Enter. Callback data: %p\n", __func__, __LINE__, callback_data);
+ if(evt > DSI_EVT_INVALID && evt < DSI_EVT_MAX)
+ {
+ LOC_LOGE("%s:%d]: Callback received: %s",
+ __func__, __LINE__,
+ loc_get_name_from_val(event_string_tbl,
+ sizeof(event_string_tbl)/sizeof(event_string_tbl[0]), evt));
+
+ switch(evt) {
+ case DSI_EVT_NET_IS_CONN:
+ case DSI_EVT_WDS_CONNECTED:
+ {
+ LOC_LOGD("%s:%d]: Emergency call started\n", __func__, __LINE__);
+ callback_data->event_cb(E_DS_CLIENT_DATA_CALL_CONNECTED,
+ callback_data->caller_cookie);
+ break;
+ }
+ case DSI_EVT_NET_NO_NET:
+ {
+ LOC_LOGD("%s:%d]: Emergency call stopped\n", __func__, __LINE__);
+ callback_data->event_cb(E_DS_CLIENT_DATA_CALL_DISCONNECTED,
+ callback_data->caller_cookie);
+ break;
+ }
+ default:
+ LOC_LOGD("%s:%d]: uninteresting event\n", __func__, __LINE__);
+ }
+ }
+ LOC_LOGD("%s:%d]:Exit\n", __func__, __LINE__);
+}
+
+/*This function is called to obtain a handle to the QMI WDS service*/
+static ds_client_status_enum_type
+ds_client_qmi_ctrl_point_init(qmi_client_type *p_wds_qmi_client)
+{
+ qmi_client_type wds_qmi_client, notifier = NULL;
+ ds_client_status_enum_type status = E_DS_CLIENT_SUCCESS;
+ qmi_service_info *p_service_info = NULL;
+ uint32_t num_services = 0, num_entries = 0;
+ qmi_client_error_type ret = QMI_NO_ERR;
+ unsigned char no_signal = 0;
+ qmi_client_os_params os_params;
+ int timeout = 0;
+
+ LOC_LOGD("%s:%d]:Enter\n", __func__, __LINE__);
+
+ //Get service object for QMI_WDS service
+ qmi_idl_service_object_type ds_client_service_object =
+ wds_get_service_object_v01();
+ if(ds_client_service_object == NULL) {
+ LOC_LOGE("%s:%d]: wds_get_service_object_v01 failed\n" ,
+ __func__, __LINE__);
+ status = E_DS_CLIENT_FAILURE_INTERNAL;
+ goto err;
+ }
+
+ //get service addressing information
+ ret = qmi_client_get_service_list(ds_client_service_object, NULL, NULL,
+ &num_services);
+ LOC_LOGD("%s:%d]: qmi_client_get_service_list() first try ret %d, "
+ "num_services %d]\n", __func__, __LINE__, ret, num_services);
+ if(ret != QMI_NO_ERR) {
+ //Register for service notification
+ ret = qmi_client_notifier_init(ds_client_service_object, &os_params, &notifier);
+ if (ret != QMI_NO_ERR) {
+ LOC_LOGE("%s:%d]: qmi_client_notifier_init failed %d\n",
+ __func__, __LINE__, ret);
+ status = E_DS_CLIENT_FAILURE_INTERNAL;
+ goto err;
+ }
+
+ do {
+ QMI_CCI_OS_SIGNAL_CLEAR(&os_params);
+ ret = qmi_client_get_service_list(ds_client_service_object, NULL,
+ NULL, &num_services);
+ if(ret != QMI_NO_ERR) {
+ QMI_CCI_OS_SIGNAL_WAIT(&os_params, DS_CLIENT_SERVICE_TIMEOUT);
+ no_signal = QMI_CCI_OS_SIGNAL_TIMED_OUT(&os_params);
+ if(!no_signal)
+ ret = qmi_client_get_service_list(ds_client_service_object, NULL,
+ NULL, &num_services);
+ }
+ timeout += DS_CLIENT_SERVICE_TIMEOUT;
+ LOC_LOGV("%s:%d]: qmi_client_get_service_list() returned ret: %d,"
+ "no_signal: %d, total timeout: %d\n", __func__, __LINE__,
+ ret, no_signal, timeout);
+ } while( (timeout < DS_CLIENT_SERVICE_TIMEOUT_TOTAL) &&
+ no_signal &&
+ (ret != QMI_NO_ERR) );
+ }
+
+ //Handle failure cases
+ if(num_services == 0 || ret != QMI_NO_ERR) {
+ if(!no_signal) {
+ LOC_LOGE("%s:%d]: qmi_client_get_service_list failed even though"
+ "service is up! Error: %d \n", __func__, __LINE__, ret);
+ status = E_DS_CLIENT_FAILURE_INTERNAL;
+ }
+ else {
+ LOC_LOGE("%s:%d]: qmi_client_get_service_list failed after retries"
+ "Error: %d \n", __func__, __LINE__, ret);
+ status = E_DS_CLIENT_FAILURE_TIMEOUT;
+ }
+ goto err;
+ }
+
+ LOC_LOGD("%s:%d]: qmi_client_get_service_list succeeded\n", __func__, __LINE__);
+
+ //Success
+ p_service_info = (qmi_service_info *)malloc(num_services * sizeof(qmi_service_info));
+ if(p_service_info == NULL) {
+ LOC_LOGE("%s:%d]: could not allocate memory for serviceInfo !!\n",
+ __func__, __LINE__);
+ status = E_DS_CLIENT_FAILURE_INTERNAL;
+ goto err;
+ }
+ num_entries = num_services;
+
+ //Populate service info
+ ret = qmi_client_get_service_list(ds_client_service_object, p_service_info,
+ &num_entries, &num_services);
+ if(ret != QMI_NO_ERR) {
+ LOC_LOGE("%s:%d]: qmi_client_get_service_list failed. ret: %d \n",
+ __func__, __LINE__, ret);
+ status = E_DS_CLIENT_FAILURE_INTERNAL;
+ goto err;
+ }
+
+ //Initialize wds_qmi_client
+ LOC_LOGD("%s:%d]: Initializing WDS client with qmi_client_init\n", __func__,
+ __LINE__);
+ ret = qmi_client_init(&p_service_info[0], ds_client_service_object,
+ NULL, NULL, NULL, &wds_qmi_client);
+ if(ret != QMI_NO_ERR) {
+ LOC_LOGE("%s:%d]: qmi_client_init Error. ret: %d\n", __func__, __LINE__, ret);
+ status = E_DS_CLIENT_FAILURE_INTERNAL;
+ goto err;
+ }
+ LOC_LOGD("%s:%d]: WDS client initialized with qmi_client_init\n", __func__,
+ __LINE__);
+
+ //Store WDS QMI client handle in the parameter passed in
+ *p_wds_qmi_client = wds_qmi_client;
+
+ status = E_DS_CLIENT_SUCCESS;
+ LOC_LOGD("%s:%d]: init success\n", __func__, __LINE__);
+
+ if(notifier)
+ qmi_client_release(notifier);
+
+err:
+ if(p_service_info)
+ free(p_service_info);
+
+ LOC_LOGD("%s:%d]:Exit\n", __func__, __LINE__);
+ return status;
+}
+
+/*This function reads the error code from within the response struct*/
+static ds_client_status_enum_type ds_client_convert_qmi_response(
+ uint32_t req_id,
+ ds_client_resp_union_type *resp_union)
+{
+ ds_client_status_enum_type ret = E_DS_CLIENT_FAILURE_GENERAL;
+ LOC_LOGD("%s:%d]:Enter\n", __func__, __LINE__);
+ switch(req_id)
+ {
+ case QMI_WDS_GET_PROFILE_LIST_REQ_V01 :
+ {
+ if(resp_union->p_get_profile_list_resp->resp.error !=
+ QMI_ERR_NONE_V01) {
+ LOC_LOGE("%s:%d]: Response error: %d", __func__, __LINE__,
+ resp_union->p_get_profile_list_resp->resp.error);
+ }
+ else
+ ret = E_DS_CLIENT_SUCCESS;
+ }
+ break;
+
+ case QMI_WDS_GET_PROFILE_SETTINGS_REQ_V01 :
+ {
+ if(resp_union->p_get_profile_setting_resp->resp.error !=
+ QMI_ERR_NONE_V01) {
+ LOC_LOGE("%s:%d]: Response error: %d", __func__, __LINE__,
+ resp_union->p_get_profile_setting_resp->resp.error);
+ }
+ else
+ ret = E_DS_CLIENT_SUCCESS;
+ }
+ break;
+
+ default:
+ LOC_LOGE("%s:%d]: Unknown request ID\n", __func__, __LINE__);
+ }
+ LOC_LOGD("%s:%d]:Exit\n", __func__, __LINE__);
+ return ret;
+}
+
+
+static ds_client_status_enum_type ds_client_send_qmi_sync_req(
+ qmi_client_type *ds_client_handle,
+ uint32_t req_id,
+ ds_client_resp_union_type *resp_union,
+ ds_client_req_union_type *req_union)
+{
+ uint32_t req_len = 0;
+ uint32_t resp_len = 0;
+ ds_client_status_enum_type ret = E_DS_CLIENT_SUCCESS;
+ qmi_client_error_type qmi_ret = QMI_NO_ERR;
+ LOC_LOGD("%s:%d]:Enter\n", __func__, __LINE__);
+ switch(req_id)
+ {
+ case QMI_WDS_GET_PROFILE_LIST_REQ_V01 :
+ {
+ req_len = sizeof(wds_get_profile_list_req_msg_v01);
+ resp_len = sizeof(wds_get_profile_list_resp_msg_v01);
+ LOC_LOGD("%s:%d]: req_id = GET_PROFILE_LIST_REQ\n",
+ __func__, __LINE__);
+ }
+ break;
+
+ case QMI_WDS_GET_PROFILE_SETTINGS_REQ_V01 :
+ {
+ req_len = sizeof(wds_get_profile_settings_req_msg_v01);
+ resp_len = sizeof(wds_get_profile_settings_resp_msg_v01);
+ LOC_LOGD("%s:%d]: req_id = GET_PROFILE_SETTINGS_REQ\n",
+ __func__, __LINE__);
+ }
+ break;
+
+ default:
+ LOC_LOGE("%s:%d]: Error unknown req_id=%d\n", __func__, __LINE__,
+ req_id);
+ ret = E_DS_CLIENT_FAILURE_INVALID_PARAMETER;
+ goto err;
+ }
+
+ LOC_LOGD("%s:%d]: req_id=%d, len = %d; resp_len= %d\n", __func__, __LINE__,
+ req_id, req_len, resp_len);
+ //Send msg through QCCI
+ qmi_ret = qmi_client_send_msg_sync(
+ *ds_client_handle,
+ req_id,
+ (void *)req_union->p_get_profile_list_req,
+ req_len,
+ (void *)resp_union->p_get_profile_list_resp,
+ resp_len,
+ DS_CLIENT_SYNC_MSG_TIMEOUT);
+ LOC_LOGD("%s:%d]: qmi_client_send_msg_sync returned: %d", __func__, __LINE__, qmi_ret);
+
+ if(qmi_ret != QMI_NO_ERR) {
+ ret = E_DS_CLIENT_FAILURE_INTERNAL;
+ goto err;
+ }
+
+ ret = ds_client_convert_qmi_response(req_id, resp_union);
+
+err:
+ LOC_LOGD("%s:%d]:Exit\n", __func__, __LINE__);
+ return ret;
+}
+
+/*This function obtains the list of supported profiles*/
+static ds_client_status_enum_type ds_client_get_profile_list(
+ qmi_client_type *ds_client_handle,
+ ds_client_resp_union_type *profile_list_resp_msg,
+ wds_profile_type_enum_v01 profile_type)
+{
+ ds_client_status_enum_type ret = E_DS_CLIENT_SUCCESS;
+ ds_client_req_union_type req_union;
+ LOC_LOGD("%s:%d]:Enter\n", __func__, __LINE__);
+
+ req_union.p_get_profile_list_req = NULL;
+ req_union.p_get_profile_list_req = (wds_get_profile_list_req_msg_v01 *)
+ calloc(1, sizeof(wds_get_profile_list_req_msg_v01));
+ if(req_union.p_get_profile_list_req == NULL) {
+ LOC_LOGE("%s:%d]: Could not allocate memory for"
+ "wds_get_profile_list_req_msg_v01\n", __func__, __LINE__);
+ goto err;
+ }
+ //Populate required members of the request structure
+ req_union.p_get_profile_list_req->profile_type_valid = 1;
+ req_union.p_get_profile_list_req->profile_type = profile_type;
+ ret = ds_client_send_qmi_sync_req(ds_client_handle,
+ QMI_WDS_GET_PROFILE_LIST_REQ_V01,
+ profile_list_resp_msg, &req_union);
+ if(ret != E_DS_CLIENT_SUCCESS) {
+ LOC_LOGE("%s:%d]: ds_client_send_qmi_req failed. ret: %d\n",
+ __func__, __LINE__, ret);
+ goto err;
+ }
+err:
+ LOC_LOGD("%s:%d]:Exit\n", __func__, __LINE__);
+ if(req_union.p_get_profile_list_req)
+ free(req_union.p_get_profile_list_req);
+ return ret;
+}
+
+/*This function obtains settings for the profile specified by
+ the profile_identifier*/
+static ds_client_status_enum_type ds_client_get_profile_settings(
+ qmi_client_type *ds_client_handle,
+ ds_client_resp_union_type *profile_settings_resp_msg,
+ wds_profile_identifier_type_v01 *profile_identifier)
+{
+ ds_client_status_enum_type ret = E_DS_CLIENT_SUCCESS;
+ ds_client_req_union_type req_union;
+
+ LOC_LOGD("%s:%d]:Enter\n", __func__, __LINE__);
+ //Since it's a union containing a pointer to a structure,
+ //following entities have the same address
+ //- req_union
+ //- req_union.p_get_profile_settings_req
+ //- req_union.p_get_profile_settings_req->profile
+ //so we can very well assign req_union = profile_identifier
+ req_union.p_get_profile_settings_req =
+ (wds_get_profile_settings_req_msg_v01 *)profile_identifier;
+ ret = ds_client_send_qmi_sync_req(ds_client_handle,
+ QMI_WDS_GET_PROFILE_SETTINGS_REQ_V01,
+ profile_settings_resp_msg, &req_union);
+ if(ret != E_DS_CLIENT_SUCCESS) {
+ LOC_LOGE("%s:%d]: ds_client_send_qmi_req failed. ret: %d\n",
+ __func__, __LINE__, ret);
+ goto err;
+ }
+err:
+ LOC_LOGD("%s:%d]:Exit\n", __func__, __LINE__);
+ return ret;
+}
+
+/**
+ * @brief Starts a data call using the profile number provided
+ *
+ * The function uses parameters provided from @a ds_client_open_call_type
+ * call result.
+ *
+ * @param[in] client_handle Client handle
+ * @param[in] profile_index Profile index
+ * @param[in] pdp_type PDP type
+ *
+ * @return Operation result
+ * @retval E_DS_CLIENT_SUCCESS On success.
+ * @retval E_DS_CLIENT_FAILURE... On error.
+ */
+static ds_client_status_enum_type ds_client_start_call
+(
+ dsClientHandleType client_handle,
+ int profile_index,
+ int pdp_type
+)
+{
+ ds_client_status_enum_type ret = E_DS_CLIENT_FAILURE_GENERAL;
+ dsi_call_param_value_t param_info;
+ dsi_hndl_t dsi_handle;
+ ds_client_session_data *ds_global_data = (ds_client_session_data *)client_handle;
+ LOC_LOGD("%s:%d]:Enter\n", __func__, __LINE__);
+ if(ds_global_data == NULL) {
+ LOC_LOGE("%s:%d]: Null callback parameter\n", __func__, __LINE__);
+ goto err;
+ }
+ dsi_handle = ds_global_data->dsi_net_handle;
+ //Set profile index as call parameter
+ param_info.buf_val = NULL;
+ param_info.num_val = profile_index;
+ dsi_set_data_call_param(dsi_handle,
+ DSI_CALL_INFO_UMTS_PROFILE_IDX,
+ &param_info);
+
+ //Set IP Version as call parameter
+ param_info.buf_val = NULL;
+ param_info.num_val = pdp_type;
+ dsi_set_data_call_param(dsi_handle,
+ DSI_CALL_INFO_IP_VERSION,
+ &param_info);
+ LOC_LOGD("%s:%d]: Starting emergency call with profile index %d; pdp_type:%d\n",
+ __func__, __LINE__, profile_index, pdp_type);
+ if(dsi_start_data_call(dsi_handle) == DSI_SUCCESS) {
+ LOC_LOGD("%s:%d]: Sent request to start data call\n",
+ __func__, __LINE__);
+ ret = E_DS_CLIENT_SUCCESS;
+ }
+ else {
+ LOC_LOGE("%s:%d]: Could not send req to start data call \n", __func__, __LINE__);
+ ret = E_DS_CLIENT_FAILURE_GENERAL;
+ goto err;
+ }
+
+err:
+ LOC_LOGD("%s:%d]:Exit\n", __func__, __LINE__);
+ return ret;
+
+}
+
+/**
+ * @brief Prepares for call.
+ *
+ * Obtains a handle to the dsi_netctrl layer and looks up the profile
+ * to make the call. As of now. It only searches for profiles that
+ * support emergency calls.
+ *
+ * Function to open an emergency call. Does the following things:
+ * - Obtains a handle to the WDS service
+ * - Obtains a list of profiles configured in the modem
+ * - Queries each profile and obtains settings to check if emergency calls
+ * are supported
+ * - Returns the profile index that supports emergency calls
+ * - Returns handle to dsi_netctrl
+ *
+ * @param[out] client_handle Client handle to initialize.
+ * @param[in] callback Pointer to callback function table.
+ * @param[in] cookie Client's cookie for using with callback calls.
+ * @param[out] profile_index Pointer to profile index number.
+ * @param[out] pdp_type Pointer to PDP type.
+ *
+ * @return Operation result
+ * @retval E_DS_CLIENT_SUCCESS On success. Output parameters are initialized.
+ * @retval E_DS_CLIENT_FAILURE... On error.
+ */
+static ds_client_status_enum_type ds_client_open_call
+(
+ dsClientHandleType *client_handle,
+ const ds_client_cb_data *callback,
+ void *cookie,
+ int *profile_index,
+ int *pdp_type
+)
+{
+ ds_client_status_enum_type ret = E_DS_CLIENT_FAILURE_GENERAL;
+ ds_client_resp_union_type profile_list_resp_msg;
+ ds_client_resp_union_type profile_settings_resp_msg;
+ wds_profile_identifier_type_v01 profile_identifier;
+ uint32_t i=0;
+ dsi_hndl_t dsi_handle;
+ ds_client_session_data **ds_global_data = (ds_client_session_data **)client_handle;
+ unsigned char call_profile_index_found = 0;
+ uint32_t emergency_profile_index=0;
+ qmi_client_type wds_qmi_client;
+
+ profile_list_resp_msg.p_get_profile_list_resp = NULL;
+ profile_settings_resp_msg.p_get_profile_setting_resp = NULL;
+
+ LOC_LOGD("%s:%d]:Enter\n", __func__, __LINE__);
+ if(callback == NULL || ds_global_data == NULL) {
+ LOC_LOGE("%s:%d]: Null callback parameter\n", __func__, __LINE__);
+ goto err;
+ }
+
+ ret = ds_client_qmi_ctrl_point_init(&wds_qmi_client);
+ if(ret != E_DS_CLIENT_SUCCESS) {
+ LOC_LOGE("%s:%d]: ds_client_qmi_ctrl_point_init failed. ret: %d\n",
+ __func__, __LINE__, ret);
+ goto err;
+ }
+
+ //Allocate memory for the response msg to obtain a list of profiles
+ profile_list_resp_msg.p_get_profile_list_resp = (wds_get_profile_list_resp_msg_v01 *)
+ calloc(1, sizeof(wds_get_profile_list_resp_msg_v01));
+ if(profile_list_resp_msg.p_get_profile_list_resp == NULL) {
+ LOC_LOGE("%s:%d]: Could not allocate memory for"
+ "p_get_profile_list_resp\n", __func__, __LINE__);
+ ret = E_DS_CLIENT_FAILURE_NOT_ENOUGH_MEMORY;
+ goto err;
+ }
+
+ LOC_LOGD("%s:%d]: Getting profile list\n", __func__, __LINE__);
+ ret = ds_client_get_profile_list(&wds_qmi_client,
+ &profile_list_resp_msg,
+ WDS_PROFILE_TYPE_3GPP_V01);
+ if(ret != E_DS_CLIENT_SUCCESS) {
+ LOC_LOGE("%s:%d]: ds_client_get_profile_list failed. ret: %d\n",
+ __func__, __LINE__, ret);
+ goto err;
+ }
+ LOC_LOGD("%s:%d]: Got profile list; length = %d\n", __func__, __LINE__,
+ profile_list_resp_msg.p_get_profile_list_resp->profile_list_len);
+
+ //Allocate memory for the response msg to obtain profile settings
+ //We allocate memory for only one response msg and keep re-using it
+ profile_settings_resp_msg.p_get_profile_setting_resp =
+ (wds_get_profile_settings_resp_msg_v01 *)
+ calloc(1, sizeof(wds_get_profile_settings_resp_msg_v01));
+ if(profile_settings_resp_msg.p_get_profile_setting_resp == NULL) {
+ LOC_LOGE("%s:%d]: Could not allocate memory for"
+ "p_get_profile_setting_resp\n", __func__, __LINE__);
+ ret = E_DS_CLIENT_FAILURE_NOT_ENOUGH_MEMORY;
+ goto err;
+ }
+
+ //Loop over the list of profiles to find a profile that supports
+ //emergency calls
+ for(i=0; i < profile_list_resp_msg.p_get_profile_list_resp->profile_list_len; i++) {
+ /*QMI_WDS_GET_PROFILE_SETTINGS_REQ requires an input data
+ structure that is of type wds_profile_identifier_type_v01
+ We have to fill that structure for each profile from the
+ info obtained from the profile list*/
+ //copy profile type
+ profile_identifier.profile_type =
+ profile_list_resp_msg.p_get_profile_list_resp->profile_list[i].profile_type;
+ //copy profile index
+ profile_identifier.profile_index =
+ profile_list_resp_msg.p_get_profile_list_resp->profile_list[i].profile_index;
+
+ ret = ds_client_get_profile_settings(&wds_qmi_client,
+ &profile_settings_resp_msg,
+ &profile_identifier);
+ if(ret != E_DS_CLIENT_SUCCESS) {
+ LOC_LOGE("%s:%d]: ds_client_get_profile_settings failed. ret: %d\n",
+ __func__, __LINE__, ret);
+ goto err;
+ }
+ LOC_LOGD("%s:%d]: Got profile setting for profile %d; name: %s\n",
+ __func__, __LINE__, i,
+ profile_settings_resp_msg.p_get_profile_setting_resp->profile_name);
+
+ if(profile_settings_resp_msg.p_get_profile_setting_resp->support_emergency_calls_valid) {
+ if(profile_settings_resp_msg.p_get_profile_setting_resp->support_emergency_calls) {
+ LOC_LOGD("%s:%d]: Found emergency profile in profile %d"
+ , __func__, __LINE__, i);
+ call_profile_index_found = 1;
+ emergency_profile_index = profile_identifier.profile_index;
+
+ if(profile_settings_resp_msg.p_get_profile_setting_resp->pdp_type_valid) {
+ *pdp_type = (int)profile_settings_resp_msg.p_get_profile_setting_resp->pdp_type;
+ LOC_LOGD("%s:%d]: pdp_type: %d\n", __func__, __LINE__, *pdp_type);
+ switch(*pdp_type) {
+ case WDS_PDP_TYPE_PDP_IPV4_V01:
+ *pdp_type = DSI_IP_VERSION_4;
+ break;
+ case WDS_PDP_TYPE_PDP_IPV6_V01:
+ *pdp_type = DSI_IP_VERSION_6;
+ break;
+ case WDS_PDP_TYPE_PDP_IPV4V6_V01:
+ *pdp_type = DSI_IP_VERSION_4_6;
+ break;
+ default:
+ LOC_LOGE("%s:%d]: pdp_type unknown. Setting default as ipv4/v6\n",
+ __func__, __LINE__);
+ *pdp_type = DSI_IP_VERSION_4;
+
+ }
+ }
+ else {
+ LOC_LOGD("%s:%d]: pdp type not valid in profile setting. Default ipv4\n",
+ __func__, __LINE__);
+ *pdp_type = DSI_IP_VERSION_4;
+ }
+ //Break out of for loop since we found the emergency profile
+ break;
+ }
+ else
+ LOC_LOGE("%s:%d]: Emergency profile valid but not supported in profile: %d "
+ , __func__, __LINE__, i);
+ }
+ //Since this struct is loaded with settings for the next profile,
+ //it is important to clear out the memory to avoid values/flags
+ //from being carried over
+ memset((void *)profile_settings_resp_msg.p_get_profile_setting_resp,
+ 0, sizeof(wds_get_profile_settings_resp_msg_v01));
+ }
+
+ //Release qmi client handle
+ if(qmi_client_release(wds_qmi_client) != QMI_NO_ERR) {
+ LOC_LOGE("%s:%d]: Could not release qmi client handle\n",
+ __func__, __LINE__);
+ ret = E_DS_CLIENT_FAILURE_GENERAL;
+ }
+
+ if(call_profile_index_found) {
+ *profile_index = emergency_profile_index;
+ *ds_global_data = (ds_client_session_data *)calloc(1, sizeof(ds_client_session_data));
+ if(*ds_global_data == NULL) {
+ LOC_LOGE("%s:%d]: Could not allocate memory for ds_global_data. Failing\n",
+ __func__, __LINE__);
+ ret = E_DS_CLIENT_FAILURE_NOT_ENOUGH_MEMORY;
+ goto err;
+ }
+
+ (*ds_global_data)->caller_data.event_cb = callback->event_cb;
+ (*ds_global_data)->caller_data.caller_cookie = cookie;
+ dsi_handle = dsi_get_data_srvc_hndl(net_ev_cb, &(*ds_global_data)->caller_data);
+ if(dsi_handle == NULL) {
+ LOC_LOGE("%s:%d]: Could not get data handle. Retry Later\n",
+ __func__, __LINE__);
+ ret = E_DS_CLIENT_RETRY_LATER;
+ goto err;
+ }
+ else
+ (*ds_global_data)->dsi_net_handle = dsi_handle;
+ }
+ else {
+ LOC_LOGE("%s:%d]: Could not find a profile that supports emergency calls",
+ __func__, __LINE__);
+ ret = E_DS_CLIENT_FAILURE_GENERAL;
+ }
+err:
+ if(profile_list_resp_msg.p_get_profile_list_resp)
+ free(profile_list_resp_msg.p_get_profile_list_resp);
+ if(profile_settings_resp_msg.p_get_profile_setting_resp)
+ free(profile_settings_resp_msg.p_get_profile_setting_resp);
+ LOC_LOGD("%s:%d]:Exit\n", __func__, __LINE__);
+ return ret;
+}
+
+/**
+ * @brief Stops a data call associated with the handle
+ *
+ * @param[in] client_handle Client handle
+ *
+ * @return Operation result
+ * @retval E_DS_CLIENT_SUCCESS On success.
+ * @retval E_DS_CLIENT_FAILURE... On error.
+ */
+static ds_client_status_enum_type ds_client_stop_call(dsClientHandleType client_handle)
+{
+ ds_client_status_enum_type ret = E_DS_CLIENT_SUCCESS;
+ ds_client_session_data *p_ds_global_data = (ds_client_session_data *)client_handle;
+ LOC_LOGD("%s:%d]:Enter\n", __func__, __LINE__);
+
+ if(client_handle == NULL) {
+ LOC_LOGE("%s:%d]: Null argument received. Failing\n", __func__, __LINE__);
+ ret = E_DS_CLIENT_FAILURE_GENERAL;
+ goto err;
+ }
+
+ if(dsi_stop_data_call(p_ds_global_data->dsi_net_handle) == DSI_SUCCESS) {
+ LOC_LOGD("%s:%d]: Sent request to stop data call\n", __func__, __LINE__);
+ }
+ else {
+ LOC_LOGE("%s:%d]: Could not send request to stop data call\n",
+ __func__, __LINE__);
+ ret = E_DS_CLIENT_FAILURE_GENERAL;
+ goto err;
+ }
+
+err:
+ LOC_LOGD("%s:%d]:Exit\n", __func__, __LINE__);
+ return ret;
+}
+
+/**
+ * @brief Releases the handle used for making data calls
+ *
+ * @param[in,out] client_handle Client handle pointer
+ *
+ * @return None
+ */
+static void ds_client_close_call(dsClientHandleType *client_handle)
+{
+ ds_client_session_data **ds_global_data = (ds_client_session_data **)client_handle;
+ LOC_LOGD("%s:%d]:Enter\n", __func__, __LINE__);
+ if(client_handle == NULL || *client_handle == NULL) {
+ LOC_LOGE("%s:%d]: Null argument received. Failing\n", __func__, __LINE__);
+ goto err;
+ }
+ dsi_rel_data_srvc_hndl((*ds_global_data)->dsi_net_handle);
+ (*ds_global_data)->dsi_net_handle = NULL;
+ free(*ds_global_data);
+ *ds_global_data = NULL;
+ LOC_LOGD("%s:%d]: Released Data handle\n", __func__, __LINE__);
+err:
+ LOC_LOGD("%s:%d]:Exit\n", __func__, __LINE__);
+ return;
+}
+
+/**
+ * @brief Initialize the DS client service
+ *
+ * This function is to be called as a first step by each process that
+ * needs to use data services. This call internally calls dsi_init()
+ * and prepares the module for making data calls.
+ * Needs to be called once for every process
+ *
+ * @return Operation result
+ * @retval E_DS_CLIENT_SUCCESS On success.
+ * @retval E_DS_CLIENT_FAILURE... On error.
+ */
+static ds_client_status_enum_type ds_client_init()
+{
+ ds_client_status_enum_type ret = E_DS_CLIENT_SUCCESS;
+ LOC_LOGD("%s:%d]:Enter", __func__, __LINE__);
+ if(DSI_SUCCESS != dsi_init(DSI_MODE_GENERAL))
+ {
+ LOC_LOGE("%s:%d]:dsi_init failed", __func__, __LINE__);
+ ret = E_DS_CLIENT_FAILURE_GENERAL;
+ }
+ LOC_LOGD("%s:%d]:Exit", __func__, __LINE__);
+ return ret;
+}
+
+/**
+ * @brief DS client function interface table definition.
+ */
+static const ds_client_iface_type iface =
+{
+ .pfn_init = ds_client_init,
+ .pfn_open_call = ds_client_open_call,
+ .pfn_start_call = ds_client_start_call,
+ .pfn_stop_call = ds_client_stop_call,
+ .pfn_close_call = ds_client_close_call
+};
+
+/**
+ * @brief Function for accessing DS client functional interface
+ *
+ * @return Pointer to interface structure.
+ */
+const ds_client_iface_type *ds_client_get_interface()
+{
+ return &iface;
+}
+
+/**
+ * @}
+ */
diff --git a/gps/loc_api/ds_api/ds_client.h b/gps/loc_api/ds_api/ds_client.h
new file mode 100644
index 0000000..ae97077
--- /dev/null
+++ b/gps/loc_api/ds_api/ds_client.h
@@ -0,0 +1,279 @@
+/* Copyright (c) 2013, 2015 The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation, 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 _DS_CLIENT_H_
+#define _DS_CLIENT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file
+ * @brief DS client API declaration.
+ *
+ * @ingroup loc_ds_api
+ */
+
+/**
+ * @addtogroup loc_ds_api DS client support for location
+ * @{
+ */
+
+/**
+ * @brief Function name for DS client interface query.
+ *
+ * @sa ds_client_get_interface
+ */
+#define DS_CLIENT_GET_INTERFACE_FN "ds_client_get_interface"
+/**
+ * @brief Library name for loading DS client
+ */
+#ifdef USE_GLIB
+#define DS_CLIENT_LIB_NAME "libloc_ds_api.so.1"
+#else
+#define DS_CLIENT_LIB_NAME "libloc_ds_api.so"
+#endif
+
+typedef void* dsClientHandleType;
+
+typedef enum
+{
+ E_DS_CLIENT_SUCCESS = 0,
+ /**< Request was successful. */
+
+ E_DS_CLIENT_FAILURE_GENERAL = 1,
+ /**< Failed because of a general failure. */
+
+ E_DS_CLIENT_FAILURE_UNSUPPORTED = 2,
+ /**< Failed because the service does not support the command. */
+
+ E_DS_CLIENT_FAILURE_INVALID_PARAMETER = 3,
+ /**< Failed because the request contained invalid parameters. */
+
+ E_DS_CLIENT_FAILURE_ENGINE_BUSY = 4,
+ /**< Failed because the engine is busy. */
+
+ E_DS_CLIENT_FAILURE_PHONE_OFFLINE = 5,
+ /**< Failed because the phone is offline. */
+
+ E_DS_CLIENT_FAILURE_TIMEOUT = 6,
+ /**< Failed because of a timeout. */
+
+ E_DS_CLIENT_FAILURE_SERVICE_NOT_PRESENT = 7,
+ /**< Failed because the service is not present. */
+
+ E_DS_CLIENT_FAILURE_SERVICE_VERSION_UNSUPPORTED = 8,
+ /**< Failed because the service version is unsupported. */
+
+ E_DS_CLIENT_FAILURE_CLIENT_VERSION_UNSUPPORTED = 9,
+ /**< Failed because the service does not support client version. */
+
+ E_DS_CLIENT_FAILURE_INVALID_HANDLE = 10,
+ /**< Failed because an invalid handle was specified. */
+
+ E_DS_CLIENT_FAILURE_INTERNAL = 11,
+ /**< Failed because of an internal error in the service. */
+
+ E_DS_CLIENT_FAILURE_NOT_INITIALIZED = 12,
+ /**< Failed because the service has not been initialized. */
+
+ E_DS_CLIENT_FAILURE_NOT_ENOUGH_MEMORY = 13,
+ /**< Failed because not rnough memory to do the operation.*/
+
+ E_DS_CLIENT_SERVICE_ALREADY_STARTED = 14,
+ /*Service is already started*/
+
+ E_DS_CLIENT_DATA_CALL_CONNECTED = 15,
+
+ E_DS_CLIENT_DATA_CALL_DISCONNECTED = 16,
+
+ E_DS_CLIENT_RETRY_LATER = 17
+} ds_client_status_enum_type;
+
+/**
+ * @brief Callback function interface for handling DS service indications
+ *
+ * @param[in] result Operation result (error code).
+ * @param[in] cookie Client cookie provided when call is opened.
+ *
+ * @sa ds_client_cb_data
+ */
+typedef void ds_client_event_ind_cb_type
+(
+ ds_client_status_enum_type result,
+ void* loc_adapter_cookie
+);
+
+/**
+ * @brief Client callback function table
+ *
+ * This structure contains callback functions provided by client of DS client
+ * API for delivering event notifications.
+ *
+ * @sa ds_client_open_call_type
+ */
+typedef struct {
+ ds_client_event_ind_cb_type *event_cb;
+} ds_client_cb_data;
+
+/**
+ * @brief Initialize the DS client service
+ *
+ * This function is to be called as a first step by each process that
+ * needs to use data services. This call internally calls dsi_init()
+ * and prepares the module for making data calls.
+ * Needs to be called once for every process
+ *
+ * @return Operation result
+ * @retval E_DS_CLIENT_SUCCESS On success.
+ * @retval E_DS_CLIENT_FAILURE... On error.
+ */
+typedef ds_client_status_enum_type ds_client_init_type();
+
+/**
+ * @brief Prepares for call.
+ *
+ * Obtains a handle to the dsi_netctrl layer and looks up the profile
+ * to make the call. As of now. It only searches for profiles that
+ * support emergency calls.
+ *
+ * Function to open an emergency call. Does the following things:
+ * - Obtains a handle to the WDS service
+ * - Obtains a list of profiles configured in the modem
+ * - Queries each profile and obtains settings to check if emergency calls
+ * are supported
+ * - Returns the profile index that supports emergency calls
+ * - Returns handle to dsi_netctrl
+ *
+ * @param[out] client_handle Client handle to initialize.
+ * @param[in] callback Pointer to callback function table.
+ * @param[in] cookie Client's cookie for using with callback calls.
+ * @param[out] profile_index Pointer to profile index number.
+ * @param[out] pdp_type Pointer to PDP type.
+ *
+ * @return Operation result
+ * @retval E_DS_CLIENT_SUCCESS On success. Output parameters are initialized.
+ * @retval E_DS_CLIENT_FAILURE... On error.
+ */
+typedef ds_client_status_enum_type ds_client_open_call_type
+(
+ dsClientHandleType *client_handle,
+ const ds_client_cb_data *callback,
+ void *cookie,
+ int *profile_index,
+ int *pdp_type
+);
+
+/**
+ * @brief Starts a data call using the profile number provided
+ *
+ * The function uses parameters provided from @a ds_client_open_call_type
+ * call result.
+ *
+ * @param[in] client_handle Client handle
+ * @param[in] profile_index Profile index
+ * @param[in] pdp_type PDP type
+ *
+ * @return Operation result
+ * @retval E_DS_CLIENT_SUCCESS On success.
+ * @retval E_DS_CLIENT_FAILURE... On error.
+ */
+typedef ds_client_status_enum_type ds_client_start_call_type
+(
+ dsClientHandleType client_handle,
+ int profile_index,
+ int pdp_type
+);
+
+/**
+ * @brief Stops a data call associated with the handle
+ *
+ * @param[in] client_handle Client handle
+ *
+ * @return Operation result
+ * @retval E_DS_CLIENT_SUCCESS On success.
+ * @retval E_DS_CLIENT_FAILURE... On error.
+ */
+typedef ds_client_status_enum_type ds_client_stop_call_type
+(
+ dsClientHandleType client_handle
+);
+
+/**
+ * @brief Releases the handle used for making data calls
+ *
+ * @param[in,out] client_handle Client handle pointer
+ *
+ * @return None
+ */
+typedef void ds_client_close_call_type
+(
+ dsClientHandleType *client_handle
+);
+
+/**
+ * @brief DS client functional interface table
+ *
+ * This table contains all supported DS client operations. If the operation
+ * is not supported, the corresponding entry is NULL.
+ *
+ * @sa ds_client_get_interface
+ */
+typedef struct
+{
+ ds_client_init_type *pfn_init;
+ ds_client_open_call_type *pfn_open_call;
+ ds_client_start_call_type *pfn_start_call;
+ ds_client_stop_call_type *pfn_stop_call;
+ ds_client_close_call_type *pfn_close_call;
+} ds_client_iface_type;
+
+/**
+ * @brief Function for accessing DS client functional interface
+ *
+ * @return Pointer to interface structure.
+ */
+typedef const ds_client_iface_type *ds_client_get_iface_fn();
+
+/**
+ * @brief Function for accessing DS client functional interface
+ *
+ * @return Pointer to interface structure.
+ */
+ds_client_get_iface_fn ds_client_get_interface;
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif /* _DS_CLIENT_H_ */
diff --git a/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpc.h b/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpc.h
index 01d67f4..13557c9 100644
--- a/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpc.h
+++ b/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpc.h
@@ -67,9 +67,11 @@ protected:
open(LOC_API_ADAPTER_EVENT_MASK_T mask);
virtual enum loc_api_adapter_err
close();
+ LocApiRpc(const MsgTask* msgTask,
+ LOC_API_ADAPTER_EVENT_MASK_T exMask);
public:
- LocApiRpc(const MsgTask* msgTask,
+ static LocApiRpc* createLocApiRpc(const MsgTask* msgTask,
LOC_API_ADAPTER_EVENT_MASK_T exMask);
~LocApiRpc();
diff --git a/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpc.cpp b/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpc.cpp
index c744754..f4b0ebf 100644
--- a/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpc.cpp
+++ b/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpc.cpp
@@ -38,7 +38,6 @@
#include <LocAdapterBase.h>
#include <loc_api_fixup.h>
#include <loc_api_rpc_glue.h>
-#include <log_util.h>
#include <loc_log.h>
#include <loc_api_log.h>
#ifdef USE_GLIB
@@ -132,6 +131,17 @@ const rpc_loc_event_mask_type LocApiRpc::locBits[] =
RPC_LOC_EVENT_WPS_NEEDED_REQUEST
};
+LocApiRpc*
+LocApiRpc::createLocApiRpc(const MsgTask* msgTask,
+ LOC_API_ADAPTER_EVENT_MASK_T exMask,
+ ContextBase* context)
+{
+ if (NULL == msgTask) {
+ return NULL;
+ }
+ return new LocApiRpc(msgTask, exMask, context);
+}
+
// constructor
LocApiRpc::LocApiRpc(const MsgTask* msgTask,
LOC_API_ADAPTER_EVENT_MASK_T exMask,
@@ -797,7 +807,7 @@ void LocApiRpc::reportPosition(const rpc_loc_parsed_position_s_type *location_re
void LocApiRpc::reportSv(const rpc_loc_gnss_info_s_type *gnss_report_ptr)
{
- GnssSvStatus SvStatus = {0};
+ QtiGnssSvStatus SvStatus = {0};
GpsLocationExtended locationExtended = {0};
locationExtended.size = sizeof(locationExtended);
int num_svs_max = 0;
diff --git a/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c b/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c
index 1c48232..eb685fd 100644
--- a/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c
+++ b/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011 The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011, 2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -32,7 +32,6 @@
#include "loc_api_log.h"
#include "loc_log.h"
-#include "log_util.h"
#include "platform_lib_includes.h"
#include "rpc/rpc.h"
#include "loc_api_fixup.h"
diff --git a/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c b/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c
index e0f400c..8c12426 100644
--- a/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c
+++ b/gps/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2012,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -62,7 +62,6 @@
#endif /* USE_GLIB */
/* Logging Improvement */
-#include "log_util.h"
#include "platform_lib_includes.h"
/*Maximum number of Modem init*/
#define RPC_TRY_NUM 10
diff --git a/gps/loc_api/libloc_api_50001/Android.mk b/gps/loc_api/libloc_api_50001/Android.mk
index a6d04f9..2be0ee2 100644
--- a/gps/loc_api/libloc_api_50001/Android.mk
+++ b/gps/loc_api/libloc_api_50001/Android.mk
@@ -16,7 +16,8 @@ LOCAL_SHARED_LIBRARIES := \
libdl \
liblog \
libloc_core \
- libgps.utils
+ libgps.utils \
+ libloc_pla
LOCAL_SRC_FILES += \
loc_eng.cpp \
@@ -41,8 +42,9 @@ LOCAL_CFLAGS += \
LOCAL_C_INCLUDES:= \
$(TARGET_OUT_HEADERS)/gps.utils \
$(TARGET_OUT_HEADERS)/libloc_core \
- $(LOCAL_PATH) \
- $(TARGET_OUT_HEADERS)/libflp
+ $(call project-path-for,qcom-gps) \
+ $(TARGET_OUT_HEADERS)/libflp \
+ $(TARGET_OUT_HEADERS)/libloc_pla
LOCAL_COPY_HEADERS_TO:= libloc_eng/
LOCAL_COPY_HEADERS:= \
@@ -61,7 +63,7 @@ include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_MODULE := gps.$(TARGET_BOARD_PLATFORM)
+LOCAL_MODULE := gps.msm8996
LOCAL_MODULE_OWNER := qcom
LOCAL_MODULE_TAGS := optional
@@ -75,7 +77,8 @@ LOCAL_SHARED_LIBRARIES := \
libloc_eng \
libloc_core \
libgps.utils \
- libdl
+ libdl \
+ libloc_pla
ifneq ($(filter $(TARGET_DEVICE), apq8084 msm8960), false)
endif
@@ -88,6 +91,10 @@ LOCAL_CFLAGS += \
-fno-short-enums \
-D_ANDROID_ \
+ifeq ($(TARGET_BUILD_VARIANT),user)
+ LOCAL_CFLAGS += -DTARGET_BUILD_VARIANT_USER
+endif
+
ifeq ($(TARGET_USES_QCOM_BSP), true)
LOCAL_CFLAGS += -DTARGET_USES_QCOM_BSP
endif
@@ -96,7 +103,8 @@ endif
LOCAL_C_INCLUDES:= \
$(TARGET_OUT_HEADERS)/gps.utils \
$(TARGET_OUT_HEADERS)/libloc_core \
- $(TARGET_OUT_HEADERS)/libflp
+ $(TARGET_OUT_HEADERS)/libflp \
+ $(TARGET_OUT_HEADERS)/libloc_pla
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_RELATIVE_PATH := hw
diff --git a/gps/loc_api/libloc_api_50001/LocEngAdapter.cpp b/gps/loc_api/libloc_api_50001/LocEngAdapter.cpp
index e0f21ec..3af4fb7 100644
--- a/gps/loc_api/libloc_api_50001/LocEngAdapter.cpp
+++ b/gps/loc_api/libloc_api_50001/LocEngAdapter.cpp
@@ -397,6 +397,23 @@ void LocEngAdapter::reportSv(GnssSvStatus &svStatus,
}
}
+
+void LocEngAdapter::reportSvMeasurement(GnssSvMeasurementSet &svMeasurementSet)
+{
+ // We send SvMeasurementSet to AmtProxy/ULPProxy to be forwarded as necessary.
+ if (! mUlp->reportSvMeasurement(svMeasurementSet)) {
+ //Send to Internal Adapter later if needed by LA
+ }
+}
+
+void LocEngAdapter::reportSvPolynomial(GnssSvPolynomial &svPolynomial)
+{
+ // We send SvMeasurementSet to AmtProxy/ULPProxy to be forwarded as necessary.
+ if (! mUlp->reportSvPolynomial(svPolynomial)) {
+ //Send to Internal Adapter later if needed by LA
+ }
+}
+
void LocEngAdapter::setInSession(bool inSession)
{
mNavigating = inSession;
@@ -534,9 +551,8 @@ enum loc_api_adapter_err LocEngAdapter::setTime(GpsUtcTime time,
if (mSupportsTimeInjection) {
LOC_LOGD("%s:%d]: Injecting time", __func__, __LINE__);
result = mLocApi->setTime(time, timeReference, uncertainty);
- } else {
- mSupportsTimeInjection = true;
}
+
return result;
}
@@ -566,26 +582,10 @@ enum loc_api_adapter_err LocEngAdapter::setXtraVersionCheck(int check)
return ret;
}
-void LocEngAdapter::reportGpsMeasurementData(GpsData &gpsMeasurementData)
-{
- sendMsg(new LocEngReportGpsMeasurement(mOwner,
- gpsMeasurementData));
-}
-
-/*
- Update Registration Mask
- */
-void LocEngAdapter::updateRegistrationMask(LOC_API_ADAPTER_EVENT_MASK_T event,
- loc_registration_mask_status isEnabled)
+void LocEngAdapter::reportGnssMeasurementData(GnssData &gnssMeasurementData)
{
- LOC_LOGD("entering %s", __func__);
- int result = LOC_API_ADAPTER_ERR_FAILURE;
- result = mLocApi->updateRegistrationMask(event, isEnabled);
- if (result == LOC_API_ADAPTER_ERR_SUCCESS) {
- LOC_LOGD("%s] update registration mask succeed.", __func__);
- } else {
- LOC_LOGE("%s] update registration mask failed.", __func__);
- }
+ sendMsg(new LocEngReportGnssMeasurement(mOwner,
+ gnssMeasurementData));
}
/*
diff --git a/gps/loc_api/libloc_api_50001/LocEngAdapter.h b/gps/loc_api/libloc_api_50001/LocEngAdapter.h
index a193e81..416e4b7 100644
--- a/gps/loc_api/libloc_api_50001/LocEngAdapter.h
+++ b/gps/loc_api/libloc_api_50001/LocEngAdapter.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -33,7 +33,6 @@
#include <hardware/gps.h>
#include <loc.h>
#include <loc_eng_log.h>
-#include <log_util.h>
#include <LocAdapterBase.h>
#include <LocDualContext.h>
#include <UlpProxyBase.h>
@@ -85,6 +84,7 @@ public:
bool mSupportsAgpsRequests;
bool mSupportsPositionInjection;
bool mSupportsTimeInjection;
+ GnssSystemInfo mGnssInfo;
LocEngAdapter(LOC_API_ADAPTER_EVENT_MASK_T mask,
void* owner, ContextBase* context,
@@ -105,6 +105,9 @@ public:
inline bool hasCPIExtendedCapabilities() {
return mContext->hasCPIExtendedCapabilities();
}
+ inline bool hasNativeXtraClient() {
+ return mContext->hasNativeXtraClient();
+ }
inline const MsgTask* getMsgTask() { return mMsgTask; }
inline enum loc_api_adapter_err
@@ -187,6 +190,11 @@ public:
return mLocApi->setSUPLVersion(version);
}
inline enum loc_api_adapter_err
+ setNMEATypes (uint32_t typesMask)
+ {
+ return mLocApi->setNMEATypes(typesMask);
+ }
+ inline enum loc_api_adapter_err
setLPPConfig(uint32_t profile)
{
return mLocApi->setLPPConfig(profile);
@@ -222,14 +230,14 @@ public:
algorithmConfig);
}
inline virtual enum loc_api_adapter_err
- setExtPowerConfig(int isBatteryCharging)
+ setAGLONASSProtocol(unsigned long aGlonassProtocol)
{
- return mLocApi->setExtPowerConfig(isBatteryCharging);
+ return mLocApi->setAGLONASSProtocol(aGlonassProtocol);
}
inline virtual enum loc_api_adapter_err
- setAGLONASSProtocol(unsigned long aGlonassProtocol)
+ setLPPeProtocol(unsigned long lppeCP, unsigned long lppeUP)
{
- return mLocApi->setAGLONASSProtocol(aGlonassProtocol);
+ return mLocApi->setLPPeProtocol(lppeCP, lppeUP);
}
inline virtual int initDataServiceClient()
{
@@ -272,6 +280,8 @@ public:
virtual void reportSv(GnssSvStatus &svStatus,
GpsLocationExtended &locationExtended,
void* svExt);
+ virtual void reportSvMeasurement(GnssSvMeasurementSet &svMeasurementSet);
+ virtual void reportSvPolynomial(GnssSvPolynomial &svPolynomial);
virtual void reportStatus(GpsStatusValue status);
virtual void reportNmea(const char* nmea, int length);
virtual bool reportXtraServer(const char* url1, const char* url2,
@@ -284,7 +294,7 @@ public:
virtual bool requestSuplES(int connHandle);
virtual bool reportDataCallOpened();
virtual bool reportDataCallClosed();
- virtual void reportGpsMeasurementData(GpsData &gpsMeasurementData);
+ virtual void reportGnssMeasurementData(GnssData &gnssMeasurementData);
inline const LocPosMode& getPositionMode() const
{return mFixCriteria;}
@@ -337,12 +347,6 @@ public:
}
/*
- Update Registration Mask
- */
- void updateRegistrationMask(LOC_API_ADAPTER_EVENT_MASK_T event,
- loc_registration_mask_status isEnabled);
-
- /*
Set Gnss Constellation Config
*/
bool gnssConstellationConfig();
diff --git a/gps/loc_api/libloc_api_50001/Makefile.am b/gps/loc_api/libloc_api_50001/Makefile.am
index 2374357..c762427 100644
--- a/gps/loc_api/libloc_api_50001/Makefile.am
+++ b/gps/loc_api/libloc_api_50001/Makefile.am
@@ -1,76 +1,78 @@
-AM_CFLAGS = \
- -I../../utils \
- -I../../platform_lib_abstractions \
- -fno-short-enums \
- -DFEATURE_GNSS_BIT_API
-
-libloc_adapter_so_la_SOURCES = loc_eng_log.cpp LocEngAdapter.cpp
-
-if USE_GLIB
-libloc_adapter_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
-libloc_adapter_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
-libloc_adapter_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
-else
-libloc_adapter_so_la_CFLAGS = $(AM_CFLAGS)
-libloc_adapter_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
-libloc_adapter_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
-endif
-libloc_adapter_so_la_LIBADD = -lstdc++ -lcutils ../../utils/libgps_utils_so.la
-
-
-libloc_eng_so_la_SOURCES = \
- loc_eng.cpp \
- loc_eng_agps.cpp \
- loc_eng_xtra.cpp \
- loc_eng_ni.cpp \
- loc_eng_log.cpp \
- 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
-
-
-if USE_GLIB
-libloc_eng_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
-libloc_eng_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
-libloc_eng_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
-else
-libloc_eng_so_la_CFLAGS = $(AM_CFLAGS)
-libloc_eng_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
-libloc_eng_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
-endif
-
-libloc_eng_so_la_LIBADD = -lstdc++ -lcutils -ldl ../../utils/libgps_utils_so.la libloc_adapter_so.la
-
-
-libgps_default_so_la_SOURCES = \
- loc.cpp \
- gps.c
-
-if USE_GLIB
-libgps_default_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
-libgps_default_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
-libgps_default_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
-else
-libgps_default_so_la_CFLAGS = $(AM_CFLAGS)
-libgps_default_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
-libgps_default_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
-endif
-
-libgps_default_so_la_LIBADD = -lstdc++ -lcutils ../../utils/libgps_utils_so.la -ldl libloc_eng_so.la
-
-library_include_HEADERS = \
- LocEngAdapter.h \
- loc.h \
- loc_eng.h \
- loc_eng_xtra.h \
- loc_eng_ni.h \
- loc_eng_agps.h \
- loc_eng_msg.h \
- loc_eng_log.h
-
-library_includedir = $(pkgincludedir)/libloc_api_50001
-
-#Create and Install libraries
-lib_LTLIBRARIES = libloc_adapter_so.la libloc_eng_so.la libgps_default_so.la
+AM_CFLAGS = \
+ -I../../utils \
+ -I../../platform_lib_abstractions \
+ -I$(WORKSPACE)/gps-noship/flp \
+ -fno-short-enums \
+ -D__func__=__PRETTY_FUNCTION__ \
+ -DFEATURE_GNSS_BIT_API
+
+libloc_adapter_so_la_SOURCES = loc_eng_log.cpp LocEngAdapter.cpp
+
+if USE_GLIB
+libloc_adapter_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libloc_adapter_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libloc_adapter_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libloc_adapter_so_la_CFLAGS = $(AM_CFLAGS)
+libloc_adapter_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
+libloc_adapter_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+libloc_adapter_so_la_LIBADD = -lstdc++ -lcutils ../../utils/libgps_utils_so.la
+
+
+libloc_eng_so_la_SOURCES = \
+ loc_eng.cpp \
+ loc_eng_agps.cpp \
+ loc_eng_xtra.cpp \
+ loc_eng_ni.cpp \
+ loc_eng_log.cpp \
+ 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
+
+
+if USE_GLIB
+libloc_eng_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libloc_eng_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libloc_eng_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libloc_eng_so_la_CFLAGS = $(AM_CFLAGS)
+libloc_eng_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
+libloc_eng_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+
+libloc_eng_so_la_LIBADD = -lstdc++ -lcutils -ldl ../../utils/libgps_utils_so.la libloc_adapter_so.la
+
+
+libgps_default_so_la_SOURCES = \
+ loc.cpp \
+ gps.c
+
+if USE_GLIB
+libgps_default_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libgps_default_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libgps_default_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libgps_default_so_la_CFLAGS = $(AM_CFLAGS)
+libgps_default_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
+libgps_default_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+
+libgps_default_so_la_LIBADD = -lstdc++ -lcutils ../../utils/libgps_utils_so.la -ldl libloc_eng_so.la
+
+library_include_HEADERS = \
+ LocEngAdapter.h \
+ loc.h \
+ loc_eng.h \
+ loc_eng_xtra.h \
+ loc_eng_ni.h \
+ loc_eng_agps.h \
+ loc_eng_msg.h \
+ loc_eng_log.h
+
+library_includedir = $(pkgincludedir)/libloc_api_50001
+
+#Create and Install libraries
+lib_LTLIBRARIES = libloc_adapter_so.la libloc_eng_so.la libgps_default_so.la
diff --git a/gps/loc_api/libloc_api_50001/loc.cpp b/gps/loc_api/libloc_api_50001/loc.cpp
index 505fc94..222d5da 100644
--- a/gps/loc_api/libloc_api_50001/loc.cpp
+++ b/gps/loc_api/libloc_api_50001/loc.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -43,6 +43,7 @@
#include <fcntl.h>
#include <errno.h>
#include <LocDualContext.h>
+#include <platform_lib_includes.h>
#include <cutils/properties.h>
using namespace loc_core;
@@ -52,9 +53,15 @@ using namespace loc_core;
//Globals defns
static gps_location_callback gps_loc_cb = NULL;
static gps_sv_status_callback gps_sv_cb = NULL;
+static gps_ni_notify_callback gps_ni_cb = NULL;
static void local_loc_cb(UlpLocation* location, void* locExt);
static void local_sv_cb(GpsSvStatus* sv_status, void* svExt);
+static void local_ni_cb(GpsNiNotification *notification, bool esEnalbed);
+
+GpsNiExtCallbacks sGpsNiExtCallbacks = {
+ local_ni_cb
+};
static const GpsGeofencingInterface* get_geofence_interface(void);
@@ -192,17 +199,18 @@ SIDE EFFECTS
N/A
===========================================================================*/
-const GpsInterface* gps_get_hardware_interface ()
+extern "C" const GpsInterface* gps_get_hardware_interface ()
{
ENTRY_LOG_CALLFLOW();
const GpsInterface* ret_val;
char propBuf[PROPERTY_VALUE_MAX];
+ memset(propBuf, 0, sizeof(propBuf));
loc_eng_read_config();
// check to see if GPS should be disabled
- property_get("gps.disable", propBuf, "");
+ platform_lib_abstraction_property_get("gps.disable", propBuf, "");
if (propBuf[0] == '1')
{
LOC_LOGD("gps_get_interface returning NULL because gps.disable=1\n");
@@ -275,6 +283,7 @@ SIDE EFFECTS
static int loc_init(GpsCallbacks* callbacks)
{
int retVal = -1;
+ unsigned int target = (unsigned int) -1;
ENTRY_LOG();
LOC_API_ADAPTER_EVENT_MASK_T event;
@@ -285,6 +294,7 @@ static int loc_init(GpsCallbacks* callbacks)
}
event = LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT |
+ LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT |
LOC_API_ADAPTER_BIT_SATELLITE_REPORT |
LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST |
LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST |
@@ -293,6 +303,17 @@ static int loc_init(GpsCallbacks* callbacks)
LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT |
LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST;
+ target = loc_get_target();
+
+ /* If platform is "auto" and external dr enabled then enable
+ ** Measurement report and SV Polynomial report
+ */
+ if((1 == gps_conf.EXTERNAL_DR_ENABLED))
+ {
+ event |= LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT_REPORT |
+ LOC_API_ADAPTER_BIT_GNSS_SV_POLYNOMIAL_REPORT;
+ }
+
LocCallbacks clientCallbacks = {local_loc_cb, /* location_cb */
callbacks->status_cb, /* status_cb */
local_sv_cb, /* sv_status_cb */
@@ -304,6 +325,8 @@ static int loc_init(GpsCallbacks* callbacks)
NULL, /* location_ext_parser */
NULL, /* sv_ext_parser */
callbacks->request_utc_time_cb, /* request_utc_time_cb */
+ callbacks->set_system_info_cb, /* set_system_info_cb */
+ callbacks->gnss_sv_status_cb, /* gnss_sv_status_cb */
};
gps_loc_cb = callbacks->location_cb;
@@ -312,9 +335,10 @@ static int loc_init(GpsCallbacks* callbacks)
retVal = loc_eng_init(loc_afw_data, &clientCallbacks, event, NULL);
loc_afw_data.adapter->mSupportsAgpsRequests = !loc_afw_data.adapter->hasAgpsExtendedCapabilities();
loc_afw_data.adapter->mSupportsPositionInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities();
- loc_afw_data.adapter->mSupportsTimeInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities();
+ loc_afw_data.adapter->mSupportsTimeInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities()
+ && !loc_afw_data.adapter->hasNativeXtraClient();
loc_afw_data.adapter->setGpsLockMsg(0);
- loc_afw_data.adapter->requestUlp(getCarrierCapabilities());
+ loc_afw_data.adapter->requestUlp(ContextBase::getCarrierCapabilities());
loc_afw_data.adapter->setXtraUserAgent();
if(retVal) {
@@ -450,8 +474,12 @@ static int loc_set_position_mode(GpsPositionMode mode,
break;
}
+ // set position sharing option to true
+ bool sharePosition = true;
+
LocPosMode params(locMode, recurrence, min_interval,
- preferred_accuracy, preferred_time, NULL, NULL);
+ preferred_accuracy, preferred_time,
+ sharePosition, NULL, NULL);
ret_val = loc_eng_set_position_mode(loc_afw_data, params);
EXIT_LOG(%d, ret_val);
@@ -538,7 +566,10 @@ SIDE EFFECTS
static void loc_delete_aiding_data(GpsAidingData f)
{
ENTRY_LOG();
+
+#ifndef TARGET_BUILD_VARIANT_USER
loc_eng_delete_aiding_data(loc_afw_data, f);
+#endif
EXIT_LOG(%s, VOID_RET);
}
@@ -565,10 +596,14 @@ const GpsGeofencingInterface* get_geofence_interface(void)
}
dlerror(); /* Clear any existing error */
get_gps_geofence_interface = (get_gps_geofence_interface_function)dlsym(handle, "gps_geofence_get_interface");
- if ((error = dlerror()) != NULL || NULL == get_gps_geofence_interface) {
+ if ((error = dlerror()) != NULL) {
LOC_LOGE ("%s, dlsym for get_gps_geofence_interface failed, error = %s\n", __func__, error);
goto exit;
- }
+ }
+ if (NULL == get_gps_geofence_interface) {
+ LOC_LOGE ("%s, get_gps_geofence_interface is NULL\n", __func__);
+ goto exit;
+ }
geofence_interface = get_gps_geofence_interface();
@@ -613,7 +648,7 @@ const void* loc_get_extension(const char* name)
else if (strcmp(name, AGPS_RIL_INTERFACE) == 0)
{
char baseband[PROPERTY_VALUE_MAX];
- property_get("ro.baseband", baseband, "msm");
+ platform_lib_abstraction_property_get("ro.baseband", baseband, "msm");
if (strcmp(baseband, "csfb") == 0)
{
ret_val = &sLocEngAGpsRilInterface;
@@ -730,7 +765,7 @@ static int loc_agps_open_with_apniptype(const char* apn, ApnIpType apnIpType)
bearerType = AGPS_APN_BEARER_IPV4V6;
break;
default:
- bearerType = AGPS_APN_BEARER_INVALID;
+ bearerType = AGPS_APN_BEARER_IPV4;
break;
}
@@ -960,7 +995,8 @@ SIDE EFFECTS
void loc_ni_init(GpsNiCallbacks *callbacks)
{
ENTRY_LOG();
- loc_eng_ni_init(loc_afw_data,(GpsNiExtCallbacks*) callbacks);
+ gps_ni_cb = callbacks->notify_cb;
+ loc_eng_ni_init(loc_afw_data, &sGpsNiExtCallbacks);
EXIT_LOG(%s, VOID_RET);
}
@@ -1075,3 +1111,10 @@ static void local_sv_cb(GpsSvStatus* sv_status, void* svExt)
EXIT_LOG(%s, VOID_RET);
}
+static void local_ni_cb(GpsNiNotification *notification, bool esEnalbed)
+{
+ if (NULL != gps_ni_cb) {
+ gps_ni_cb(notification);
+ }
+}
+
diff --git a/gps/loc_api/libloc_api_50001/loc.h b/gps/loc_api/libloc_api_50001/loc.h
index e56fdcf..8cf77fc 100644
--- a/gps/loc_api/libloc_api_50001/loc.h
+++ b/gps/loc_api/libloc_api_50001/loc.h
@@ -35,7 +35,6 @@ extern "C" {
#endif /* __cplusplus */
#include <ctype.h>
-#include <cutils/properties.h>
#include <hardware/gps.h>
#include <gps_extended.h>
@@ -57,6 +56,8 @@ typedef struct {
loc_ext_parser location_ext_parser;
loc_ext_parser sv_ext_parser;
gps_request_utc_time request_utc_time_cb;
+ gnss_set_system_info set_system_info_cb;
+ gnss_sv_status_callback gnss_sv_status_cb;
} LocCallbacks;
#ifdef __cplusplus
diff --git a/gps/loc_api/libloc_api_50001/loc_eng.cpp b/gps/loc_api/libloc_api_50001/loc_eng.cpp
index 2ba6f98..c1cc640 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2009-2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -47,19 +47,8 @@
#include <new>
#include <LocEngAdapter.h>
-#include <cutils/sched_policy.h>
-#ifndef USE_GLIB
-#include <utils/SystemClock.h>
-#include <utils/Log.h>
-#endif /* USE_GLIB */
-
-#ifdef USE_GLIB
-#include <glib.h>
-#include <sys/syscall.h>
-#endif /* USE_GLIB */
#include <string.h>
-
#include <loc_eng.h>
#include <loc_eng_ni.h>
#include <loc_eng_dmn_conn.h>
@@ -68,8 +57,7 @@
#include <loc_eng_nmea.h>
#include <msg_q.h>
#include <loc.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include "loc_core_log.h"
#include "loc_eng_log.h"
@@ -90,8 +78,6 @@ using namespace loc_core;
boolean configAlreadyRead = false;
unsigned int agpsStatus = 0;
-loc_gps_cfg_s_type gps_conf;
-loc_sap_cfg_s_type sap_conf;
/* Parameter spec table */
static const loc_param_s_type gps_conf_table[] =
@@ -100,8 +86,11 @@ static const loc_param_s_type gps_conf_table[] =
{"SUPL_VER", &gps_conf.SUPL_VER, NULL, 'n'},
{"LPP_PROFILE", &gps_conf.LPP_PROFILE, NULL, 'n'},
{"A_GLONASS_POS_PROTOCOL_SELECT", &gps_conf.A_GLONASS_POS_PROTOCOL_SELECT, NULL, 'n'},
+ {"LPPE_CP_TECHNOLOGY", &gps_conf.LPPE_CP_TECHNOLOGY, NULL, 'n'},
+ {"LPPE_UP_TECHNOLOGY", &gps_conf.LPPE_UP_TECHNOLOGY, NULL, 'n'},
{"AGPS_CERT_WRITABLE_MASK", &gps_conf.AGPS_CERT_WRITABLE_MASK, NULL, 'n'},
{"SUPL_MODE", &gps_conf.SUPL_MODE, NULL, 'n'},
+ {"SUPL_ES", &gps_conf.SUPL_ES, NULL, 'n'},
{"INTERMEDIATE_POS", &gps_conf.INTERMEDIATE_POS, NULL, 'n'},
{"ACCURACY_THRES", &gps_conf.ACCURACY_THRES, NULL, 'n'},
{"NMEA_PROVIDER", &gps_conf.NMEA_PROVIDER, NULL, 'n'},
@@ -111,6 +100,8 @@ static const loc_param_s_type gps_conf_table[] =
{"XTRA_SERVER_2", &gps_conf.XTRA_SERVER_2, NULL, 's'},
{"XTRA_SERVER_3", &gps_conf.XTRA_SERVER_3, NULL, 's'},
{"USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL", &gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL, NULL, 'n'},
+ {"AGPS_CONFIG_INJECT", &gps_conf.AGPS_CONFIG_INJECT, NULL, 'n'},
+ {"EXTERNAL_DR_ENABLED", &gps_conf.EXTERNAL_DR_ENABLED, NULL, 'n'},
};
static const loc_param_s_type sap_conf_table[] =
@@ -143,6 +134,7 @@ static void loc_default_parameters(void)
gps_conf.GPS_LOCK = 0;
gps_conf.SUPL_VER = 0x10000;
gps_conf.SUPL_MODE = 0x3;
+ gps_conf.SUPL_ES = 0;
gps_conf.CAPABILITIES = 0x7;
/* LTE Positioning Profile configuration is disable by default*/
gps_conf.LPP_PROFILE = 0;
@@ -152,6 +144,10 @@ static void loc_default_parameters(void)
gps_conf.XTRA_VERSION_CHECK=0;
/*Use emergency PDN by default*/
gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL = 1;
+ /* By default no LPPe CP technology is enabled*/
+ gps_conf.LPPE_CP_TECHNOLOGY = 0;
+ /* By default no LPPe UP technology is enabled*/
+ gps_conf.LPPE_UP_TECHNOLOGY = 0;
/*Defaults for sap.conf*/
sap_conf.GYRO_BIAS_RANDOM_WALK = 0;
@@ -182,6 +178,9 @@ static void loc_default_parameters(void)
/* None of the 10 slots for agps certificates are writable by default */
gps_conf.AGPS_CERT_WRITABLE_MASK = 0;
+
+ /* inject supl config to modem with config values from config.xml or gps.conf, default 1 */
+ gps_conf.AGPS_CONFIG_INJECT = 1;
}
// 2nd half of init(), singled out for
@@ -208,6 +207,7 @@ static int loc_eng_get_zpp_handler(loc_eng_data_s_type &loc_eng_data);
static void deleteAidingData(loc_eng_data_s_type &logEng);
static AgpsStateMachine*
getAgpsStateMachine(loc_eng_data_s_type& logEng, AGpsExtType agpsType);
+static void createAgnssNifs(loc_eng_data_s_type& locEng);
static int dataCallCb(void *cb_data);
static void update_aiding_data_for_deletion(loc_eng_data_s_type& loc_eng_data) {
if (loc_eng_data.engine_status != GPS_STATUS_ENGINE_ON &&
@@ -408,7 +408,9 @@ struct LocEngSetServerIpv4 : public LocMsg {
locallog();
}
inline virtual void proc() const {
- mAdapter->setServer(mNlAddr, mPort, mServerType);
+ if (gps_conf.AGPS_CONFIG_INJECT) {
+ mAdapter->setServer(mNlAddr, mPort, mServerType);
+ }
}
inline void locallog() const {
LOC_LOGV("LocEngSetServerIpv4 - addr: %x, port: %d, type: %s",
@@ -439,7 +441,9 @@ struct LocEngSetServerUrl : public LocMsg {
delete[] mUrl;
}
inline virtual void proc() const {
- mAdapter->setServer(mUrl, mLen);
+ if (gps_conf.AGPS_CONFIG_INJECT) {
+ mAdapter->setServer(mUrl, mLen);
+ }
}
inline void locallog() const {
LOC_LOGV("LocEngSetServerUrl - url: %s", mUrl);
@@ -460,7 +464,9 @@ struct LocEngAGlonassProtocol : public LocMsg {
locallog();
}
inline virtual void proc() const {
- mAdapter->setAGLONASSProtocol(mAGlonassProtocl);
+ if (gps_conf.AGPS_CONFIG_INJECT) {
+ mAdapter->setAGLONASSProtocol(mAGlonassProtocl);
+ }
}
inline void locallog() const {
LOC_LOGV("A-GLONASS protocol: 0x%lx", mAGlonassProtocl);
@@ -470,6 +476,29 @@ struct LocEngAGlonassProtocol : public LocMsg {
}
};
+
+struct LocEngLPPeProtocol : public LocMsg {
+ LocEngAdapter* mAdapter;
+ const unsigned long mLPPeCP;
+ const unsigned long mLPPeUP;
+ inline LocEngLPPeProtocol(LocEngAdapter* adapter,
+ unsigned long lppeCP, unsigned long lppeUP) :
+ LocMsg(), mAdapter(adapter), mLPPeCP(lppeCP), mLPPeUP(lppeUP)
+ {
+ locallog();
+ }
+ inline virtual void proc() const {
+ mAdapter->setLPPeProtocol(mLPPeCP, mLPPeUP);
+ }
+ inline void locallog() const {
+ LOC_LOGV("LPPe CP: 0x%lx LPPe UP: 0x%1x", mLPPeCP, mLPPeUP);
+ }
+ inline virtual void log() const {
+ locallog();
+ }
+};
+
+
// case LOC_ENG_MSG_SUPL_VERSION:
struct LocEngSuplVer : public LocMsg {
LocEngAdapter* mAdapter;
@@ -481,7 +510,9 @@ struct LocEngSuplVer : public LocMsg {
locallog();
}
inline virtual void proc() const {
- mAdapter->setSUPLVersion(mSuplVer);
+ if (gps_conf.AGPS_CONFIG_INJECT) {
+ mAdapter->setSUPLVersion(mSuplVer);
+ }
}
inline void locallog() const {
LOC_LOGV("SUPL Version: %d", mSuplVer);
@@ -500,7 +531,7 @@ struct LocEngSuplMode : public LocMsg {
locallog();
}
inline virtual void proc() const {
- mUlp->setCapabilities(getCarrierCapabilities());
+ mUlp->setCapabilities(ContextBase::getCarrierCapabilities());
}
inline void locallog() const {
}
@@ -509,6 +540,31 @@ struct LocEngSuplMode : public LocMsg {
}
};
+// case LOC_ENG_MSG_SET_NMEA_TYPE:
+struct LocEngSetNmeaTypes : public LocMsg {
+ LocEngAdapter* mAdapter;
+ uint32_t nmeaTypesMask;
+ inline LocEngSetNmeaTypes(LocEngAdapter* adapter,
+ uint32_t typesMask) :
+ LocMsg(), mAdapter(adapter), nmeaTypesMask(typesMask)
+ {
+ locallog();
+ }
+ inline virtual void proc() const {
+ // set the nmea types
+ mAdapter->setNMEATypes(nmeaTypesMask);
+ }
+ inline void locallog() const
+ {
+ LOC_LOGV("LocEngSetNmeaTypes %u\n",nmeaTypesMask);
+ }
+ inline virtual void log() const
+ {
+ locallog();
+ }
+};
+
+
// case LOC_ENG_MSG_LPP_CONFIG:
struct LocEngLppConfig : public LocMsg {
LocEngAdapter* mAdapter;
@@ -520,7 +576,9 @@ struct LocEngLppConfig : public LocMsg {
locallog();
}
inline virtual void proc() const {
- mAdapter->setLPPConfig(mLppConfig);
+ if (gps_conf.AGPS_CONFIG_INJECT) {
+ mAdapter->setLPPConfig(mLppConfig);
+ }
}
inline void locallog() const {
LOC_LOGV("LocEngLppConfig - profile: %d", mLppConfig);
@@ -699,29 +757,6 @@ struct LocEngSensorPerfControlConfig : public LocMsg {
}
};
-// case LOC_ENG_MSG_EXT_POWER_CONFIG:
-struct LocEngExtPowerConfig : public LocMsg {
- LocEngAdapter* mAdapter;
- const int mIsBatteryCharging;
- inline LocEngExtPowerConfig(LocEngAdapter* adapter,
- int isBatteryCharging) :
- LocMsg(), mAdapter(adapter),
- mIsBatteryCharging(isBatteryCharging)
- {
- locallog();
- }
- inline virtual void proc() const {
- mAdapter->setExtPowerConfig(mIsBatteryCharging);
- }
- inline void locallog() const {
- LOC_LOGV("LocEngExtPowerConfig - isBatteryCharging: %d",
- mIsBatteryCharging);
- }
- inline virtual void log() const {
- locallog();
- }
-};
-
// case LOC_ENG_MSG_REPORT_POSITION:
LocEngReportPosition::LocEngReportPosition(LocAdapterBase* adapter,
UlpLocation &loc,
@@ -845,9 +880,9 @@ void LocEngReportSv::proc() const {
if (locEng->mute_session_state != LOC_MUTE_SESS_IN_SESSION)
{
- if (locEng->sv_status_cb != NULL) {
- locEng->sv_status_cb((GpsSvStatus*)&(mSvStatus),
- (void*)mSvExt);
+ if (locEng->gnss_sv_status_cb != NULL) {
+ LOC_LOGE("Calling gnss_sv_status_cb");
+ locEng->gnss_sv_status_cb((GnssSvStatus*)&(mSvStatus));
}
if (locEng->generateNmea)
@@ -902,7 +937,6 @@ void LocEngReportNmea::proc() const {
struct timeval tv;
gettimeofday(&tv, (struct timezone *) NULL);
int64_t now = tv.tv_sec * 1000LL + tv.tv_usec / 1000;
- CALLBACK_LOG_CALLFLOW("nmea_cb", %d, mLen);
if (locEng->nmea_cb != NULL)
locEng->nmea_cb(now, mNmea, mLen);
@@ -1090,7 +1124,7 @@ LocEngRequestSuplEs::LocEngRequestSuplEs(void* locEng, int id) :
}
void LocEngRequestSuplEs::proc() const {
loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng;
- if (locEng->ds_nif) {
+ if (locEng->ds_nif && gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL) {
AgpsStateMachine* sm = locEng->ds_nif;
DSSubscriber s(sm, mID);
sm->subscribeRsrc((Subscriber*)&s);
@@ -1377,6 +1411,32 @@ struct LocEngSetCapabilities : public LocMsg {
}
};
+struct LocEngSetSystemInfo : public LocMsg {
+ loc_eng_data_s_type* mLocEng;
+ inline LocEngSetSystemInfo(loc_eng_data_s_type* locEng) :
+ LocMsg(), mLocEng(locEng)
+ {
+ locallog();
+ }
+ inline virtual void proc() const {
+ if (NULL != mLocEng->set_system_info_cb) {
+ LOC_LOGV("calling set_system_info_cb 0x%x",
+ mLocEng->adapter->mGnssInfo.year_of_hw);
+ mLocEng->set_system_info_cb(&(mLocEng->adapter->mGnssInfo));
+ }
+ else {
+ LOC_LOGV("set_system_info_cb is NULL.\n");
+ }
+ }
+ inline void locallog() const
+ {
+ LOC_LOGV("LocEngSetSystemInfo");
+ }
+ inline virtual void log() const
+ {
+ locallog();
+ }
+};
// case LOC_ENG_MSG_LOC_INIT:
struct LocEngInit : public LocMsg {
loc_eng_data_s_type* mLocEng;
@@ -1389,6 +1449,7 @@ struct LocEngInit : public LocMsg {
loc_eng_reinit(*mLocEng);
// set the capabilities
mLocEng->adapter->sendMsg(new LocEngSetCapabilities(mLocEng));
+ mLocEng->adapter->sendMsg(new LocEngSetSystemInfo(mLocEng));
}
inline void locallog() const
{
@@ -1405,16 +1466,18 @@ struct LocEngInit : public LocMsg {
// case LOC_ENG_MSG_ATL_OPEN_SUCCESS:
struct LocEngAtlOpenSuccess : public LocMsg {
- AgpsStateMachine* mStateMachine;
+ loc_eng_data_s_type* mLocEng;
+ const AGpsExtType mAgpsType;
const int mLen;
char* mAPN;
const AGpsBearerType mBearerType;
- inline LocEngAtlOpenSuccess(AgpsStateMachine* statemachine,
+ inline LocEngAtlOpenSuccess(loc_eng_data_s_type* locEng,
+ const AGpsExtType agpsType,
const char* name,
int len,
AGpsBearerType btype) :
LocMsg(),
- mStateMachine(statemachine), mLen(len),
+ mLocEng(locEng), mAgpsType(agpsType), mLen(len),
mAPN(new char[len+1]), mBearerType(btype)
{
memcpy((void*)mAPN, (void*)name, len);
@@ -1426,14 +1489,15 @@ struct LocEngAtlOpenSuccess : public LocMsg {
delete[] mAPN;
}
inline virtual void proc() const {
- mStateMachine->setBearer(mBearerType);
- mStateMachine->setAPN(mAPN, mLen);
- mStateMachine->onRsrcEvent(RSRC_GRANTED);
+ AgpsStateMachine* sm = getAgpsStateMachine(*mLocEng, mAgpsType);
+ sm->setBearer(mBearerType);
+ sm->setAPN(mAPN, mLen);
+ sm->onRsrcEvent(RSRC_GRANTED);
}
inline void locallog() const {
LOC_LOGV("LocEngAtlOpenSuccess agps type: %s\n apn: %s\n"
" bearer type: %s",
- loc_get_agps_type_name(mStateMachine->getType()),
+ loc_get_agps_type_name(mAgpsType),
mAPN,
loc_get_agps_bear_name(mBearerType));
}
@@ -1444,13 +1508,16 @@ struct LocEngAtlOpenSuccess : public LocMsg {
// case LOC_ENG_MSG_ATL_CLOSED:
struct LocEngAtlClosed : public LocMsg {
- AgpsStateMachine* mStateMachine;
- inline LocEngAtlClosed(AgpsStateMachine* statemachine) :
- LocMsg(), mStateMachine(statemachine) {
+ loc_eng_data_s_type* mLocEng;
+ const AGpsExtType mAgpsType;
+ inline LocEngAtlClosed(loc_eng_data_s_type* locEng,
+ const AGpsExtType agpsType) :
+ LocMsg(), mLocEng(locEng), mAgpsType(agpsType) {
locallog();
}
inline virtual void proc() const {
- mStateMachine->onRsrcEvent(RSRC_RELEASED);
+ AgpsStateMachine* sm = getAgpsStateMachine(*mLocEng, mAgpsType);
+ sm->onRsrcEvent(RSRC_RELEASED);
}
inline void locallog() const {
LOC_LOGV("LocEngAtlClosed");
@@ -1462,13 +1529,16 @@ struct LocEngAtlClosed : public LocMsg {
// case LOC_ENG_MSG_ATL_OPEN_FAILED:
struct LocEngAtlOpenFailed : public LocMsg {
- AgpsStateMachine* mStateMachine;
- inline LocEngAtlOpenFailed(AgpsStateMachine* statemachine) :
- LocMsg(), mStateMachine(statemachine) {
+ loc_eng_data_s_type* mLocEng;
+ const AGpsExtType mAgpsType;
+ inline LocEngAtlOpenFailed(loc_eng_data_s_type* locEng,
+ const AGpsExtType agpsType) :
+ LocMsg(), mLocEng(locEng), mAgpsType(agpsType) {
locallog();
}
inline virtual void proc() const {
- mStateMachine->onRsrcEvent(RSRC_DENIED);
+ AgpsStateMachine* sm = getAgpsStateMachine(*mLocEng, mAgpsType);
+ sm->onRsrcEvent(RSRC_DENIED);
}
inline void locallog() const {
LOC_LOGV("LocEngAtlOpenFailed");
@@ -1510,22 +1580,17 @@ inline void LocEngUp::log() const {
locallog();
}
-struct LocEngDataClientInit : public LocMsg {
+struct LocEngAgnssNifInit : public LocMsg {
loc_eng_data_s_type* mLocEng;
- inline LocEngDataClientInit(loc_eng_data_s_type* locEng) :
+ inline LocEngAgnssNifInit(loc_eng_data_s_type* locEng) :
LocMsg(), mLocEng(locEng) {
locallog();
}
virtual void proc() const {
- loc_eng_data_s_type *locEng = (loc_eng_data_s_type *)mLocEng;
- if(!locEng->adapter->initDataServiceClient()) {
- locEng->ds_nif = new DSStateMachine(servicerTypeExt,
- (void *)dataCallCb,
- locEng->adapter);
- }
+ createAgnssNifs(*mLocEng);
}
void locallog() const {
- LOC_LOGV("LocEngDataClientInit\n");
+ LOC_LOGV("LocEngAgnssNifInit\n");
}
virtual void log() const {
locallog();
@@ -1578,29 +1643,6 @@ struct LocEngInstallAGpsCert : public LocMsg {
}
};
-struct LocEngUpdateRegistrationMask : public LocMsg {
- loc_eng_data_s_type* mLocEng;
- LOC_API_ADAPTER_EVENT_MASK_T mMask;
- loc_registration_mask_status mIsEnabled;
- inline LocEngUpdateRegistrationMask(loc_eng_data_s_type* locEng,
- LOC_API_ADAPTER_EVENT_MASK_T mask,
- loc_registration_mask_status isEnabled) :
- LocMsg(), mLocEng(locEng), mMask(mask), mIsEnabled(isEnabled) {
- locallog();
- }
- inline virtual void proc() const {
- loc_eng_data_s_type *locEng = (loc_eng_data_s_type *)mLocEng;
- locEng->adapter->updateRegistrationMask(mMask,
- mIsEnabled);
- }
- void locallog() const {
- LOC_LOGV("LocEngUpdateRegistrationMask\n");
- }
- virtual void log() const {
- locallog();
- }
-};
-
struct LocEngGnssConstellationConfig : public LocMsg {
LocEngAdapter* mAdapter;
inline LocEngGnssConstellationConfig(LocEngAdapter* adapter) :
@@ -1608,10 +1650,13 @@ struct LocEngGnssConstellationConfig : public LocMsg {
locallog();
}
inline virtual void proc() const {
+ mAdapter->mGnssInfo.size = sizeof(GnssSystemInfo);
if (mAdapter->gnssConstellationConfig()) {
LOC_LOGV("Modem supports GNSS measurements\n");
gps_conf.CAPABILITIES |= GPS_CAPABILITY_MEASUREMENTS;
+ mAdapter->mGnssInfo.year_of_hw = 2016;
} else {
+ mAdapter->mGnssInfo.year_of_hw = 2015;
LOC_LOGV("Modem does not support GNSS measurements\n");
}
}
@@ -1624,50 +1669,59 @@ struct LocEngGnssConstellationConfig : public LocMsg {
};
// case LOC_ENG_MSG_REPORT_GNSS_MEASUREMENT:
-LocEngReportGpsMeasurement::LocEngReportGpsMeasurement(void* locEng,
- GpsData &gpsData) :
- LocMsg(), mLocEng(locEng), mGpsData(gpsData)
+LocEngReportGnssMeasurement::LocEngReportGnssMeasurement(void* locEng,
+ GnssData &gnssData) :
+ LocMsg(), mLocEng(locEng), mGnssData(gnssData)
{
locallog();
}
-void LocEngReportGpsMeasurement::proc() const {
+void LocEngReportGnssMeasurement::proc() const {
loc_eng_data_s_type* locEng = (loc_eng_data_s_type*) mLocEng;
if (locEng->mute_session_state != LOC_MUTE_SESS_IN_SESSION)
{
- if (locEng->gps_measurement_cb != NULL) {
- locEng->gps_measurement_cb((GpsData*)&(mGpsData));
+ if (locEng->gnss_measurement_cb != NULL) {
+ LOC_LOGV("Calling gnss_measurement_cb");
+ locEng->gnss_measurement_cb((GnssData*)&(mGnssData));
}
}
}
-void LocEngReportGpsMeasurement::locallog() const {
+void LocEngReportGnssMeasurement::locallog() const {
IF_LOC_LOGV {
LOC_LOGV("%s:%d]: Received in GPS HAL."
"GNSS Measurements count: %d \n",
- __func__, __LINE__, mGpsData.measurement_count);
- for (int i =0; i< mGpsData.measurement_count && i < GPS_MAX_SVS; i++) {
+ __func__, __LINE__, mGnssData.measurement_count);
+ for (int i =0; i< mGnssData.measurement_count && i < GNSS_MAX_SVS; i++) {
LOC_LOGV(" GNSS measurement data in GPS HAL: \n"
- " GPS_HAL => Measurement ID | prn | time_offset_ns | state |"
- " received_gps_tow_ns| c_n0_dbhz | pseudorange_rate_mps |"
+ " GPS_HAL => Measurement ID | svid | time_offset_ns | state |"
+ " c_n0_dbhz | pseudorange_rate_mps |"
" pseudorange_rate_uncertainty_mps |"
" accumulated_delta_range_state | flags \n"
- " GPS_HAL => %d | %d | %f | %d | %lld | %f | %f | %f | %d | %d \n",
+ " GPS_HAL => %d | %d | %f | %d | %f | %f | %f | %d | %d \n",
i,
- mGpsData.measurements[i].prn,
- mGpsData.measurements[i].time_offset_ns,
- mGpsData.measurements[i].state,
- mGpsData.measurements[i].received_gps_tow_ns,
- mGpsData.measurements[i].c_n0_dbhz,
- mGpsData.measurements[i].pseudorange_rate_mps,
- mGpsData.measurements[i].pseudorange_rate_uncertainty_mps,
- mGpsData.measurements[i].accumulated_delta_range_state,
- mGpsData.measurements[i].flags);
+ mGnssData.measurements[i].svid,
+ mGnssData.measurements[i].time_offset_ns,
+ mGnssData.measurements[i].state,
+ mGnssData.measurements[i].c_n0_dbhz,
+ mGnssData.measurements[i].pseudorange_rate_mps,
+ mGnssData.measurements[i].pseudorange_rate_uncertainty_mps,
+ mGnssData.measurements[i].accumulated_delta_range_state,
+ mGnssData.measurements[i].flags);
}
- LOC_LOGV(" GPS_HAL => Clocks Info: type | time_ns \n"
- " GPS_HAL => Clocks Info: %d | %lld", mGpsData.clock.type,
- mGpsData.clock.time_ns);
- }
-}
-inline void LocEngReportGpsMeasurement::log() const {
+ LOC_LOGV(" GPS_HAL => Clocks Info: \n"
+ " time_ns | full_bias_ns | bias_ns | bias_uncertainty_ns | "
+ " drift_nsps | drift_uncertainty_nsps | hw_clock_discontinuity_count | flags"
+ " GPS_HAL => Clocks Info: %lld | %lld | %g | %g | %g | %g | %d | 0x%04x\n",
+ mGnssData.clock.time_ns,
+ mGnssData.clock.full_bias_ns,
+ mGnssData.clock.bias_ns,
+ mGnssData.clock.bias_uncertainty_ns,
+ mGnssData.clock.drift_nsps,
+ mGnssData.clock.drift_uncertainty_nsps,
+ mGnssData.clock.hw_clock_discontinuity_count,
+ mGnssData.clock.flags);
+ }
+}
+inline void LocEngReportGnssMeasurement::log() const {
locallog();
}
@@ -1684,24 +1738,6 @@ inline void LocEngReportGpsMeasurement::log() const {
}
#define INIT_CHECK(ctx, ret) STATE_CHECK(ctx, "instance not initialized", ret)
-uint32_t getCarrierCapabilities() {
- #define carrierMSA (uint32_t)0x2
- #define carrierMSB (uint32_t)0x1
- #define gpsConfMSA (uint32_t)0x4
- #define gpsConfMSB (uint32_t)0x2
- uint32_t capabilities = gps_conf.CAPABILITIES;
- if ((gps_conf.SUPL_MODE & carrierMSA) != carrierMSA) {
- capabilities &= ~gpsConfMSA;
- }
- if ((gps_conf.SUPL_MODE & carrierMSB) != carrierMSB) {
- capabilities &= ~gpsConfMSB;
- }
-
- LOC_LOGV("getCarrierCapabilities: CAPABILITIES %x, SUPL_MODE %x, carrier capabilities %x",
- gps_conf.CAPABILITIES, gps_conf.SUPL_MODE, capabilities);
- return capabilities;
-}
-
/*===========================================================================
FUNCTION loc_eng_init
@@ -1747,6 +1783,8 @@ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks,
loc_eng_data.acquire_wakelock_cb = callbacks->acquire_wakelock_cb;
loc_eng_data.release_wakelock_cb = callbacks->release_wakelock_cb;
loc_eng_data.request_utc_time_cb = callbacks->request_utc_time_cb;
+ loc_eng_data.set_system_info_cb = callbacks->set_system_info_cb;
+ loc_eng_data.gnss_sv_status_cb = callbacks->gnss_sv_status_cb;
loc_eng_data.location_ext_parser = callbacks->location_ext_parser ?
callbacks->location_ext_parser : noProc;
loc_eng_data.sv_ext_parser = callbacks->sv_ext_parser ?
@@ -1762,7 +1800,7 @@ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks,
event = event ^ LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT; // unregister for modem NMEA report
loc_eng_data.generateNmea = true;
}
- else
+ else if (gps_conf.NMEA_PROVIDER == NMEA_PROVIDER_MP)
{
loc_eng_data.generateNmea = false;
}
@@ -1771,6 +1809,8 @@ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks,
new LocEngAdapter(event, &loc_eng_data, context,
(LocThread::tCreate)callbacks->create_thread_cb);
+ loc_eng_data.adapter->mGnssInfo.size = sizeof(GnssSystemInfo);
+ loc_eng_data.adapter->mGnssInfo.year_of_hw = 2015;
LOC_LOGD("loc_eng_init created client, id = %p\n",
loc_eng_data.adapter);
loc_eng_data.adapter->sendMsg(new LocEngInit(&loc_eng_data));
@@ -1791,6 +1831,15 @@ static int loc_eng_reinit(loc_eng_data_s_type &loc_eng_data)
adapter->sendMsg(new LocEngSensorControlConfig(adapter, sap_conf.SENSOR_USAGE,
sap_conf.SENSOR_PROVIDER));
adapter->sendMsg(new LocEngAGlonassProtocol(adapter, gps_conf.A_GLONASS_POS_PROTOCOL_SELECT));
+ adapter->sendMsg(new LocEngLPPeProtocol(adapter, gps_conf.LPPE_CP_TECHNOLOGY,
+ gps_conf.LPPE_UP_TECHNOLOGY));
+
+ if (!loc_eng_data.generateNmea)
+ {
+ NmeaSentenceTypesMask typesMask = LOC_NMEA_ALL_SUPPORTED_MASK;
+ LOC_LOGD("loc_eng_init setting nmea types, mask = %u\n",typesMask);
+ adapter->sendMsg(new LocEngSetNmeaTypes(adapter,typesMask));
+ }
/* Make sure at least one of the sensor property is specified by the user in the gps.conf file. */
if( sap_conf.GYRO_BIAS_RANDOM_WALK_VALID ||
@@ -2136,6 +2185,9 @@ void loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data, GpsAidingData
ENTRY_LOG_CALLFLOW();
INIT_CHECK(loc_eng_data.adapter, return);
+ //report delete aiding data to ULP to send to DRPlugin
+ loc_eng_data.adapter->getUlpProxy()->reportDeleteAidingData(f);
+
loc_eng_data.adapter->sendMsg(new LocEngDelAidData(&loc_eng_data, f));
EXIT_LOG(%s, VOID_RET);
@@ -2294,31 +2346,14 @@ void loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data, AGpsExtCallbacks* call
EXIT_LOG(%s, VOID_RET);
return;
}
+ bool agpsCapable = ((gps_conf.CAPABILITIES & GPS_CAPABILITY_MSA) ||
+ (gps_conf.CAPABILITIES & GPS_CAPABILITY_MSB));
LocEngAdapter* adapter = loc_eng_data.adapter;
loc_eng_data.agps_status_cb = callbacks->status_cb;
- loc_eng_data.internet_nif = new AgpsStateMachine(servicerTypeAgps,
- (void *)loc_eng_data.agps_status_cb,
- AGPS_TYPE_WWAN_ANY,
- false);
- loc_eng_data.wifi_nif = new AgpsStateMachine(servicerTypeAgps,
- (void *)loc_eng_data.agps_status_cb,
- AGPS_TYPE_WIFI,
- true);
-
- if ((gps_conf.CAPABILITIES & GPS_CAPABILITY_MSA) ||
- (gps_conf.CAPABILITIES & GPS_CAPABILITY_MSB)) {
- loc_eng_data.agnss_nif = new AgpsStateMachine(servicerTypeAgps,
- (void *)loc_eng_data.agps_status_cb,
- AGPS_TYPE_SUPL,
- false);
-
+ if (agpsCapable && NULL != adapter) {
if (adapter->mSupportsAgpsRequests) {
- if(gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL) {
- loc_eng_data.adapter->sendMsg(new LocEngDataClientInit(&loc_eng_data));
- }
- loc_eng_dmn_conn_loc_api_server_launch(callbacks->create_thread_cb,
- NULL, NULL, &loc_eng_data);
+ adapter->sendMsg(new LocEngAgnssNifInit(&loc_eng_data));
}
loc_eng_agps_reinit(loc_eng_data);
}
@@ -2334,6 +2369,35 @@ static void deleteAidingData(loc_eng_data_s_type &logEng) {
}
}
+// must be called under msg handler context
+static void createAgnssNifs(loc_eng_data_s_type& locEng) {
+ bool agpsCapable = ((gps_conf.CAPABILITIES & GPS_CAPABILITY_MSA) ||
+ (gps_conf.CAPABILITIES & GPS_CAPABILITY_MSB));
+ LocEngAdapter* adapter = locEng.adapter;
+ if (agpsCapable && NULL != adapter && adapter->mSupportsAgpsRequests) {
+ if (NULL == locEng.internet_nif) {
+ locEng.internet_nif= new AgpsStateMachine(servicerTypeAgps,
+ (void *)locEng.agps_status_cb,
+ AGPS_TYPE_WWAN_ANY,
+ false);
+ }
+ if (NULL == locEng.agnss_nif) {
+ locEng.agnss_nif = new AgpsStateMachine(servicerTypeAgps,
+ (void *)locEng.agps_status_cb,
+ AGPS_TYPE_SUPL,
+ false);
+ }
+ if (NULL == locEng.ds_nif &&
+ gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL &&
+ 0 == adapter->initDataServiceClient()) {
+ locEng.ds_nif = new DSStateMachine(servicerTypeExt,
+ (void *)dataCallCb,
+ locEng.adapter);
+ }
+ }
+}
+
+// must be called under msg handler context
static AgpsStateMachine*
getAgpsStateMachine(loc_eng_data_s_type &locEng, AGpsExtType agpsType) {
AgpsStateMachine* stateMachine;
@@ -2348,9 +2412,14 @@ getAgpsStateMachine(loc_eng_data_s_type &locEng, AGpsExtType agpsType) {
break;
}
case AGPS_TYPE_SUPL_ES: {
- locEng.ds_nif ?
- stateMachine = locEng.ds_nif:
+ if (gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL) {
+ if (NULL == locEng.ds_nif) {
+ createAgnssNifs(locEng);
+ }
+ stateMachine = locEng.ds_nif;
+ } else {
stateMachine = locEng.agnss_nif;
+ }
break;
}
default:
@@ -2392,10 +2461,9 @@ int loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType,
LOC_LOGD("loc_eng_agps_open APN name = [%s]", apn);
int apn_len = smaller_of(strlen (apn), MAX_APN_LEN);
- AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType);
-
loc_eng_data.adapter->sendMsg(
- new LocEngAtlOpenSuccess(sm, apn, apn_len, bearerType));
+ new LocEngAtlOpenSuccess(&loc_eng_data, agpsType,
+ apn, apn_len, bearerType));
EXIT_LOG(%d, 0);
return 0;
@@ -2424,8 +2492,8 @@ int loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType)
INIT_CHECK(loc_eng_data.adapter && loc_eng_data.agps_status_cb,
return -1);
- AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType);
- loc_eng_data.adapter->sendMsg(new LocEngAtlClosed(sm));
+ loc_eng_data.adapter->sendMsg(new LocEngAtlClosed(&loc_eng_data,
+ agpsType));
EXIT_LOG(%d, 0);
return 0;
@@ -2454,8 +2522,8 @@ int loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agps
INIT_CHECK(loc_eng_data.adapter && loc_eng_data.agps_status_cb,
return -1);
- AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType);
- loc_eng_data.adapter->sendMsg(new LocEngAtlOpenFailed(sm));
+ loc_eng_data.adapter->sendMsg(new LocEngAtlOpenFailed(&loc_eng_data,
+ agpsType));
EXIT_LOG(%d, 0);
return 0;
@@ -2731,12 +2799,20 @@ void loc_eng_configuration_update (loc_eng_data_s_type &loc_eng_data,
if (gps_conf_tmp.SUPL_MODE != gps_conf.SUPL_MODE) {
adapter->sendMsg(new LocEngSuplMode(adapter->getUlpProxy()));
}
+ // we always update lock mask, this is because if this is dsds device, we would not
+ // know if modem has switched dds, if so, lock mask may also need to be updated.
+ // if we have power vote, HAL is on, lock mask 0; else gps_conf.GPS_LOCK.
+ adapter->setGpsLockMsg(adapter->getPowerVote() ? 0 : gps_conf.GPS_LOCK);
}
gps_conf_tmp.SUPL_VER = gps_conf.SUPL_VER;
gps_conf_tmp.LPP_PROFILE = gps_conf.LPP_PROFILE;
gps_conf_tmp.A_GLONASS_POS_PROTOCOL_SELECT = gps_conf.A_GLONASS_POS_PROTOCOL_SELECT;
+ gps_conf_tmp.SUPL_MODE = gps_conf.SUPL_MODE;
+ gps_conf_tmp.SUPL_ES = gps_conf.SUPL_ES;
gps_conf_tmp.GPS_LOCK = gps_conf.GPS_LOCK;
+ gps_conf_tmp.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL =
+ gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL;
gps_conf = gps_conf_tmp;
}
@@ -2862,29 +2938,6 @@ void loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data)
EXIT_LOG(%s, VOID_RET);
}
-#ifdef USE_GLIB
-/*===========================================================================
-FUNCTION set_sched_policy
-
-DESCRIPTION
- Local copy of this function which bypasses android set_sched_policy
-
-DEPENDENCIES
- None
-
-RETURN VALUE
- 0
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-static int set_sched_policy(int tid, SchedPolicy policy)
-{
- return 0;
-}
-#endif /* USE_GLIB */
-
/*===========================================================================
FUNCTION loc_eng_read_config
@@ -2942,8 +2995,8 @@ int loc_eng_gps_measurement_init(loc_eng_data_s_type &loc_eng_data,
{
ENTRY_LOG_CALLFLOW();
- STATE_CHECK((NULL == loc_eng_data.gps_measurement_cb),
- "gps measurement already initialized",
+ STATE_CHECK((NULL == loc_eng_data.gnss_measurement_cb),
+ "gnss measurement already initialized",
return GPS_MEASUREMENT_ERROR_ALREADY_INIT);
STATE_CHECK((callbacks != NULL),
"callbacks can not be NULL",
@@ -2954,12 +3007,9 @@ int loc_eng_gps_measurement_init(loc_eng_data_s_type &loc_eng_data,
// updated the mask
LOC_API_ADAPTER_EVENT_MASK_T event = LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT;
- loc_eng_data.adapter->sendMsg(new LocEngUpdateRegistrationMask(
- &loc_eng_data,
- event,
- LOC_REGISTRATION_MASK_ENABLED));
+ loc_eng_data.adapter->updateEvtMask(event, LOC_REGISTRATION_MASK_ENABLED);
// set up the callback
- loc_eng_data.gps_measurement_cb = callbacks->measurement_callback;
+ loc_eng_data.gnss_measurement_cb = callbacks->gnss_measurement_callback;
LOC_LOGD ("%s, event masks updated successfully", __func__);
return GPS_MEASUREMENT_OPERATION_SUCCESS;
@@ -2989,11 +3039,8 @@ void loc_eng_gps_measurement_close(loc_eng_data_s_type &loc_eng_data)
// updated the mask
LOC_API_ADAPTER_EVENT_MASK_T event = LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT;
- loc_eng_data.adapter->sendMsg(new LocEngUpdateRegistrationMask(
- &loc_eng_data,
- event,
- LOC_REGISTRATION_MASK_DISABLED));
+ loc_eng_data.adapter->updateEvtMask(event, LOC_REGISTRATION_MASK_DISABLED);
// set up the callback
- loc_eng_data.gps_measurement_cb = NULL;
+ loc_eng_data.gnss_measurement_cb = NULL;
EXIT_LOG(%d, 0);
}
diff --git a/gps/loc_api/libloc_api_50001/loc_eng.h b/gps/loc_api/libloc_api_50001/loc_eng.h
index a203e6b..1ff391a 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng.h
+++ b/gps/loc_api/libloc_api_50001/loc_eng.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2009-2014, 2016 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -54,7 +54,6 @@ typedef unsigned char boolean;
#include <loc_eng_agps.h>
#include <loc_cfg.h>
#include <loc_log.h>
-#include <log_util.h>
#include <loc_eng_agps.h>
#include <LocEngAdapter.h>
@@ -67,7 +66,8 @@ typedef unsigned char boolean;
#define FAILURE FALSE
#define INVALID_ATL_CONNECTION_HANDLE -1
-#define MAX_XTRA_SERVER_URL_LENGTH 256
+#define gps_conf ContextBase::mGps_conf
+#define sap_conf ContextBase::mSap_conf
enum loc_nmea_provider_e_type {
NMEA_PROVIDER_AP = 0, // Application Processor Provider of NMEA
@@ -89,12 +89,14 @@ typedef struct loc_eng_data_s
loc_sv_status_cb_ext sv_status_cb;
agps_status_extended agps_status_cb;
gps_nmea_callback nmea_cb;
- gps_ni_notify_callback ni_notify_cb;
+ loc_ni_notify_callback ni_notify_cb;
gps_set_capabilities set_capabilities_cb;
gps_acquire_wakelock acquire_wakelock_cb;
gps_release_wakelock release_wakelock_cb;
gps_request_utc_time request_utc_time_cb;
- gps_measurement_callback gps_measurement_cb;
+ gnss_set_system_info set_system_info_cb;
+ gnss_sv_status_callback gnss_sv_status_cb;
+ gnss_measurement_callback gnss_measurement_cb;
boolean intermediateFix;
AGpsStatusValue agps_status;
loc_eng_xtra_data_s_type xtra_module_data;
@@ -119,7 +121,8 @@ typedef struct loc_eng_data_s
// For nmea generation
boolean generateNmea;
- uint32_t sv_used_mask;
+ uint32_t gps_used_mask;
+ uint32_t glo_used_mask;
float hdop;
float pdop;
float vdop;
@@ -139,68 +142,6 @@ typedef struct loc_eng_data_s
loc_ext_parser sv_ext_parser;
} loc_eng_data_s_type;
-/* GPS.conf support */
-/* NOTE: the implementaiton of the parser casts number
- fields to 32 bit. To ensure all 'n' fields working,
- they must all be 32 bit fields. */
-typedef struct loc_gps_cfg_s
-{
- uint32_t INTERMEDIATE_POS;
- uint32_t ACCURACY_THRES;
- uint32_t SUPL_VER;
- uint32_t SUPL_MODE;
- uint32_t CAPABILITIES;
- uint32_t LPP_PROFILE;
- uint32_t XTRA_VERSION_CHECK;
- char XTRA_SERVER_1[MAX_XTRA_SERVER_URL_LENGTH];
- char XTRA_SERVER_2[MAX_XTRA_SERVER_URL_LENGTH];
- char XTRA_SERVER_3[MAX_XTRA_SERVER_URL_LENGTH];
- uint32_t USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL;
- uint32_t NMEA_PROVIDER;
- uint32_t GPS_LOCK;
- uint32_t A_GLONASS_POS_PROTOCOL_SELECT;
- uint32_t AGPS_CERT_WRITABLE_MASK;
-} loc_gps_cfg_s_type;
-
-/* NOTE: the implementaiton of the parser casts number
- fields to 32 bit. To ensure all 'n' fields working,
- they must all be 32 bit fields. */
-/* Meanwhile, *_valid fields are 8 bit fields, and 'f'
- fields are double. Rigid as they are, it is the
- the status quo, until the parsing mechanism is
- change, that is. */
-typedef struct
-{
- uint8_t GYRO_BIAS_RANDOM_WALK_VALID;
- double GYRO_BIAS_RANDOM_WALK;
- uint32_t SENSOR_ACCEL_BATCHES_PER_SEC;
- uint32_t SENSOR_ACCEL_SAMPLES_PER_BATCH;
- uint32_t SENSOR_GYRO_BATCHES_PER_SEC;
- uint32_t SENSOR_GYRO_SAMPLES_PER_BATCH;
- uint32_t SENSOR_ACCEL_BATCHES_PER_SEC_HIGH;
- uint32_t SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH;
- uint32_t SENSOR_GYRO_BATCHES_PER_SEC_HIGH;
- uint32_t SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH;
- uint32_t SENSOR_CONTROL_MODE;
- uint32_t SENSOR_USAGE;
- uint32_t SENSOR_ALGORITHM_CONFIG_MASK;
- uint8_t ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
- double ACCEL_RANDOM_WALK_SPECTRAL_DENSITY;
- uint8_t ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
- double ANGLE_RANDOM_WALK_SPECTRAL_DENSITY;
- uint8_t RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
- double RATE_RANDOM_WALK_SPECTRAL_DENSITY;
- uint8_t VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
- double VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY;
- uint32_t SENSOR_PROVIDER;
-} loc_sap_cfg_s_type;
-
-extern loc_gps_cfg_s_type gps_conf;
-extern loc_sap_cfg_s_type sap_conf;
-
-
-uint32_t getCarrierCapabilities();
-
//loc_eng functions
int loc_eng_init(loc_eng_data_s_type &loc_eng_data,
LocCallbacks* callbacks,
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_agps.cpp b/gps/loc_api/libloc_api_50001/loc_eng_agps.cpp
index 5016b5c..43af70f 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_agps.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_agps.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -32,7 +32,6 @@
#include <loc_eng_agps.h>
#include <loc_eng_log.h>
-#include <log_util.h>
#include <platform_lib_includes.h>
#include <loc_eng_dmn_conn_handler.h>
#include <loc_eng_dmn_conn.h>
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_agps.h b/gps/loc_api/libloc_api_50001/loc_eng_agps.h
index 2d689ce..58ce084 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_agps.h
+++ b/gps/loc_api/libloc_api_50001/loc_eng_agps.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -40,10 +40,14 @@
#include <linked_list.h>
#include <loc_timer.h>
#include <LocEngAdapter.h>
+#include <platform_lib_includes.h>
+#if defined(USE_GLIB) && !defined(OFF_TARGET)
+#include <glib.h>
+#endif /* USE_GLIB */
// forward declaration
class AgpsStateMachine;
-class Subscriber;
+struct Subscriber;
// NIF resource events
typedef enum {
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp
index c257dff..5510fc5 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2012,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -37,8 +37,7 @@
#include <grp.h>
#include <sys/stat.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include "loc_eng_dmn_conn_glue_msg.h"
#include "loc_eng_dmn_conn_handler.h"
#include "loc_eng_dmn_conn.h"
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c
index a1076ff..e947fa1 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c
+++ b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -31,8 +31,7 @@
#include <linux/types.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include "loc_eng_dmn_conn_glue_msg.h"
#include "loc_eng_dmn_conn_handler.h"
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c
index dffcad0..cbc4ea6 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c
+++ b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2012,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -37,8 +37,7 @@
#include <sys/stat.h>
#include "loc_eng_dmn_conn_glue_pipe.h"
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
/*===========================================================================
FUNCTION loc_eng_dmn_conn_glue_pipeget
@@ -110,8 +109,10 @@ SIDE EFFECTS
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);
+ if (pipe_name != NULL) {
+ unlink(pipe_name);
+ LOC_LOGD("fd = %d, %s\n", fd, pipe_name);
+ }
return 0;
}
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp
index edd53f2..137f686 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2012,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -31,8 +31,7 @@
#include <string.h>
#include <unistd.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include "loc_eng_msg.h"
#include "loc_eng_dmn_conn.h"
#include "loc_eng_dmn_conn_handler.h"
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c
index 9fed9d4..b30f6d7 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c
+++ b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -28,8 +28,7 @@
*/
#include <stdio.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include "loc_eng_dmn_conn_thread_helper.h"
/*===========================================================================
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_msg.h b/gps/loc_api/libloc_api_50001/loc_eng_msg.h
index 9c7b9bc..2fa9b42 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_msg.h
+++ b/gps/loc_api/libloc_api_50001/loc_eng_msg.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -34,16 +34,16 @@
#include <gps_extended.h>
#include <stdlib.h>
#include <string.h>
-#include <log_util.h>
#include <loc_eng_log.h>
#include <loc_eng.h>
#include <MsgTask.h>
#include <LocEngAdapter.h>
+#include <platform_lib_includes.h>
#ifndef SSID_BUF_SIZE
#define SSID_BUF_SIZE (32+1)
#endif
-#ifdef USE_GLIB
+#if defined(USE_GLIB) && !defined(OFF_TARGET)
#include <glib.h>
@@ -289,11 +289,11 @@ struct LocEngGetZpp : public LocMsg {
void send() const;
};
-struct LocEngReportGpsMeasurement : public LocMsg {
+struct LocEngReportGnssMeasurement : public LocMsg {
void* mLocEng;
- const GpsData mGpsData;
- LocEngReportGpsMeasurement(void* locEng,
- GpsData &gpsData);
+ const GnssData mGnssData;
+ LocEngReportGnssMeasurement(void* locEng,
+ GnssData &gnssData);
virtual void proc() const;
void locallog() const;
virtual void log() const;
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_ni.cpp b/gps/loc_api/libloc_api_50001/loc_eng_ni.cpp
index 4597b98..9b454c6 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_ni.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_ni.cpp
@@ -43,8 +43,7 @@
#include <loc_eng.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
using namespace loc_core;
@@ -189,7 +188,7 @@ void loc_eng_ni_request_handler(loc_eng_data_s_type &loc_eng_data,
}
CALLBACK_LOG_CALLFLOW("ni_notify_cb - id", %d, notif->notification_id);
- loc_eng_data.ni_notify_cb((GpsNiNotification*)notif);
+ loc_eng_data.ni_notify_cb((GpsNiNotification*)notif, gps_conf.SUPL_ES != 0);
}
EXIT_LOG(%s, VOID_RET);
}
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_nmea.cpp b/gps/loc_api/libloc_api_50001/loc_eng_nmea.cpp
index 126a97f..3d2336f 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_nmea.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_nmea.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012, 2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -29,14 +29,10 @@
#define LOG_NDDEBUG 0
#define LOG_TAG "LocSvc_eng_nmea"
-#define GPS_PRN_START 1
-#define GPS_PRN_END 32
-#define GLONASS_PRN_START 65
-#define GLONASS_PRN_END 96
#include <loc_eng.h>
#include <loc_eng_nmea.h>
#include <math.h>
-#include "log_util.h"
+#include <platform_lib_includes.h>
/*===========================================================================
FUNCTION loc_eng_nmea_send
@@ -59,7 +55,6 @@ void loc_eng_nmea_send(char *pNmea, int length, loc_eng_data_s_type *loc_eng_dat
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, pNmea);
if (loc_eng_data_p->nmea_cb != NULL)
loc_eng_data_p->nmea_cb(now, pNmea, length);
LOC_LOGD("NMEA <%s", pNmea);
@@ -93,8 +88,12 @@ int loc_eng_nmea_put_checksum(char *pNmea, int maxSize)
length++;
}
+ // length now contains nmea sentence string length not including $ sign.
int checksumLength = snprintf(pNmea,(maxSize-length-1),"*%02X\r\n", checksum);
- return (length + checksumLength);
+
+ // total length of nmea sentence is length of nmea sentence inc $ sign plus
+ // length of checksum (+1 is to cover the $ character in the length).
+ return (length + checksumLength + 1);
}
/*===========================================================================
@@ -102,6 +101,12 @@ FUNCTION loc_eng_nmea_generate_pos
DESCRIPTION
Generate NMEA sentences generated based on position report
+ Currently below sentences are generated within this function:
+ - $GPGSA : GPS DOP and active SVs
+ - $GNGSA : GLONASS DOP and active SVs
+ - $GPVTG : Track made good and ground speed
+ - $GPRMC : Recommended minimum navigation information
+ - $GPGGA : Time, position and fix related data
DEPENDENCIES
NONE
@@ -136,6 +141,7 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
int utcHours = pTm->tm_hour;
int utcMinutes = pTm->tm_min;
int utcSeconds = pTm->tm_sec;
+ int utcMSeconds = (location.gpsLocation.timestamp)%1000;
if (generate_nmea) {
// ------------------
@@ -144,7 +150,7 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
uint32_t svUsedCount = 0;
uint32_t svUsedList[32] = {0};
- uint32_t mask = loc_eng_data_p->sv_used_mask;
+ uint32_t mask = loc_eng_data_p->gps_used_mask;
for (uint8_t i = 1; mask > 0 && svUsedCount < 32; i++)
{
if (mask & 1)
@@ -152,7 +158,7 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
mask = mask >> 1;
}
// clear the cache so they can't be used again
- loc_eng_data_p->sv_used_mask = 0;
+ loc_eng_data_p->gps_used_mask = 0;
char fixType;
if (svUsedCount == 0)
@@ -211,6 +217,99 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
loc_eng_nmea_send(sentence, length, loc_eng_data_p);
// ------------------
+ // ------$GNGSA------
+ // ------------------
+ uint32_t gloUsedCount = 0;
+ uint32_t gloUsedList[32] = {0};
+
+ // Reset locals for GNGSA sentence generation
+ pMarker = sentence;
+ lengthRemaining = sizeof(sentence);
+ mask = loc_eng_data_p->glo_used_mask;
+ fixType = '\0';
+
+ // Parse the glonass sv mask, and fetch glo sv ids
+ // Mask corresponds to the offset.
+ // GLONASS SV ids are from 65-96
+ const int GLONASS_SV_ID_OFFSET = 64;
+ for (uint8_t i = 1; mask > 0 && gloUsedCount < 32; i++)
+ {
+ if (mask & 1)
+ gloUsedList[gloUsedCount++] = i + GLONASS_SV_ID_OFFSET;
+ mask = mask >> 1;
+ }
+ // clear the cache so they can't be used again
+ loc_eng_data_p->glo_used_mask = 0;
+
+ if (gloUsedCount == 0)
+ fixType = '1'; // no fix
+ else if (gloUsedCount <= 3)
+ fixType = '2'; // 2D fix
+ else
+ fixType = '3'; // 3D fix
+
+ // Start printing the sentence
+ // Format: $--GSA,a,x,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,p.p,h.h,v.v*cc
+ // GNGSA : for glonass SVs
+ // a : Mode : A : Automatic, allowed to automatically switch 2D/3D
+ // x : Fixtype : 1 (no fix), 2 (2D fix), 3 (3D fix)
+ // xx : 12 SV ID
+ // p.p : Position DOP (Dilution of Precision)
+ // h.h : Horizontal DOP
+ // v.v : Vertical DOP
+ // cc : Checksum value
+ length = snprintf(pMarker, lengthRemaining, "$GNGSA,A,%c,", fixType);
+
+ if (length < 0 || length >= lengthRemaining)
+ {
+ LOC_LOGE("NMEA Error in string formatting");
+ return;
+ }
+ pMarker += length;
+ lengthRemaining -= length;
+
+ // Add first 12 GLONASS satellite IDs
+ for (uint8_t i = 0; i < 12; i++)
+ {
+ if (i < gloUsedCount)
+ length = snprintf(pMarker, lengthRemaining, "%02d,", gloUsedList[i]);
+ else
+ length = snprintf(pMarker, lengthRemaining, ",");
+
+ if (length < 0 || length >= lengthRemaining)
+ {
+ LOC_LOGE("NMEA Error in string formatting");
+ return;
+ }
+ pMarker += length;
+ lengthRemaining -= length;
+ }
+
+ // Add the position/horizontal/vertical DOP values
+ if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_DOP)
+ { // dop is in locationExtended, (QMI)
+ length = snprintf(pMarker, lengthRemaining, "%.1f,%.1f,%.1f",
+ locationExtended.pdop,
+ locationExtended.hdop,
+ locationExtended.vdop);
+ }
+ else if (loc_eng_data_p->pdop > 0 && loc_eng_data_p->hdop > 0 && loc_eng_data_p->vdop > 0)
+ { // dop was cached from sv report (RPC)
+ length = snprintf(pMarker, lengthRemaining, "%.1f,%.1f,%.1f",
+ loc_eng_data_p->pdop,
+ loc_eng_data_p->hdop,
+ loc_eng_data_p->vdop);
+ }
+ else
+ { // no dop
+ length = snprintf(pMarker, lengthRemaining, ",,");
+ }
+
+ /* Sentence is ready, add checksum and broadcast */
+ length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence));
+ loc_eng_nmea_send(sentence, length, loc_eng_data_p);
+
+ // ------------------
// ------$GPVTG------
// ------------------
@@ -281,8 +380,8 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
pMarker = sentence;
lengthRemaining = sizeof(sentence);
- length = snprintf(pMarker, lengthRemaining, "$GPRMC,%02d%02d%02d,A," ,
- utcHours, utcMinutes, utcSeconds);
+ length = snprintf(pMarker, lengthRemaining, "$GPRMC,%02d%02d%02d.%02d,A," ,
+ utcHours, utcMinutes, utcSeconds,utcMSeconds/10);
if (length < 0 || length >= lengthRemaining)
{
@@ -434,8 +533,8 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
pMarker = sentence;
lengthRemaining = sizeof(sentence);
- length = snprintf(pMarker, lengthRemaining, "$GPGGA,%02d%02d%02d," ,
- utcHours, utcMinutes, utcSeconds);
+ length = snprintf(pMarker, lengthRemaining, "$GPGGA,%02d%02d%02d.%02d," ,
+ utcHours, utcMinutes, utcSeconds, utcMSeconds/10);
if (length < 0 || length >= lengthRemaining)
{
@@ -565,6 +664,10 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence));
loc_eng_nmea_send(sentence, length, loc_eng_data_p);
+ strlcpy(sentence, "$GNGSA,A,1,,,,,,,,,,,,,,,", sizeof(sentence));
+ length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence));
+ loc_eng_nmea_send(sentence, length, loc_eng_data_p);
+
strlcpy(sentence, "$GPVTG,,T,,M,,N,,K,N", sizeof(sentence));
length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence));
loc_eng_nmea_send(sentence, length, loc_eng_data_p);
@@ -621,15 +724,27 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
//Count GPS SVs for saparating GPS from GLONASS and throw others
+ loc_eng_data_p->gps_used_mask = 0;
+ loc_eng_data_p->glo_used_mask = 0;
for(svNumber=1; svNumber <= svCount; svNumber++) {
- if( (svStatus.sv_list[svNumber-1].prn >= GPS_PRN_START)&&
- (svStatus.sv_list[svNumber-1].prn <= GPS_PRN_END) )
+ if (GNSS_CONSTELLATION_GPS == svStatus.gnss_sv_list[svNumber - 1].constellation)
{
+ // cache the used in fix mask, as it will be needed to send $GPGSA
+ // during the position report
+ if (GNSS_SV_FLAGS_USED_IN_FIX == (svStatus.gnss_sv_list[svNumber - 1].flags & GNSS_SV_FLAGS_USED_IN_FIX))
+ {
+ loc_eng_data_p->gps_used_mask |= (1 << (svStatus.gnss_sv_list[svNumber - 1].svid - 1));
+ }
gpsCount++;
}
- else if( (svStatus.sv_list[svNumber-1].prn >= GLONASS_PRN_START) &&
- (svStatus.sv_list[svNumber-1].prn <= GLONASS_PRN_END) )
+ else if (GNSS_CONSTELLATION_GLONASS == svStatus.gnss_sv_list[svNumber - 1].constellation)
{
+ // cache the used in fix mask, as it will be needed to send $GNGSA
+ // during the position report
+ if (GNSS_SV_FLAGS_USED_IN_FIX == (svStatus.gnss_sv_list[svNumber - 1].flags & GNSS_SV_FLAGS_USED_IN_FIX))
+ {
+ loc_eng_data_p->glo_used_mask |= (1 << (svStatus.gnss_sv_list[svNumber - 1].svid - 1));
+ }
glnCount++;
}
}
@@ -669,13 +784,12 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
for (int i=0; (svNumber <= svCount) && (i < 4); svNumber++)
{
- if( (svStatus.sv_list[svNumber-1].prn >= GPS_PRN_START) &&
- (svStatus.sv_list[svNumber-1].prn <= GPS_PRN_END) )
+ if (GNSS_CONSTELLATION_GPS == svStatus.gnss_sv_list[svNumber - 1].constellation)
{
length = snprintf(pMarker, lengthRemaining,",%02d,%02d,%03d,",
- svStatus.sv_list[svNumber-1].prn,
- (int)(0.5 + svStatus.sv_list[svNumber-1].elevation), //float to int
- (int)(0.5 + svStatus.sv_list[svNumber-1].azimuth)); //float to int
+ svStatus.gnss_sv_list[svNumber-1].svid,
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber-1].elevation), //float to int
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber-1].azimuth)); //float to int
if (length < 0 || length >= lengthRemaining)
{
@@ -685,10 +799,10 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
pMarker += length;
lengthRemaining -= length;
- if (svStatus.sv_list[svNumber-1].snr > 0)
+ if (svStatus.gnss_sv_list[svNumber-1].c_n0_dbhz > 0)
{
length = snprintf(pMarker, lengthRemaining,"%02d",
- (int)(0.5 + svStatus.sv_list[svNumber-1].snr)); //float to int
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber-1].c_n0_dbhz)); //float to int
if (length < 0 || length >= lengthRemaining)
{
@@ -747,13 +861,13 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
for (int i=0; (svNumber <= svCount) && (i < 4); svNumber++)
{
- if( (svStatus.sv_list[svNumber-1].prn >= GLONASS_PRN_START) &&
- (svStatus.sv_list[svNumber-1].prn <= GLONASS_PRN_END) ) {
+ if (GNSS_CONSTELLATION_GLONASS == svStatus.gnss_sv_list[svNumber - 1].constellation)
+ {
length = snprintf(pMarker, lengthRemaining,",%02d,%02d,%03d,",
- svStatus.sv_list[svNumber-1].prn,
- (int)(0.5 + svStatus.sv_list[svNumber-1].elevation), //float to int
- (int)(0.5 + svStatus.sv_list[svNumber-1].azimuth)); //float to int
+ svStatus.gnss_sv_list[svNumber - 1].svid,
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber - 1].elevation), //float to int
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber - 1].azimuth)); //float to int
if (length < 0 || length >= lengthRemaining)
{
@@ -763,10 +877,10 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
pMarker += length;
lengthRemaining -= length;
- if (svStatus.sv_list[svNumber-1].snr > 0)
+ if (svStatus.gnss_sv_list[svNumber - 1].c_n0_dbhz > 0)
{
length = snprintf(pMarker, lengthRemaining,"%02d",
- (int)(0.5 + svStatus.sv_list[svNumber-1].snr)); //float to int
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber - 1].c_n0_dbhz)); //float to int
if (length < 0 || length >= lengthRemaining)
{
@@ -790,10 +904,6 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
}//if
- // cache the used in fix mask, as it will be needed to send $GPGSA
- // during the position report
- loc_eng_data_p->sv_used_mask = svStatus.gps_used_in_fix_mask;
-
// For RPC, the DOP are sent during sv report, so cache them
// now to be sent during position report.
// For QMI, the DOP will be in position report.
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_xtra.cpp b/gps/loc_api/libloc_api_50001/loc_eng_xtra.cpp
index 7bb8083..b5bf4e7 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_xtra.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_xtra.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2009-2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -32,8 +32,7 @@
#include <loc_eng.h>
#include <MsgTask.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
using namespace loc_core;
@@ -124,6 +123,13 @@ int loc_eng_xtra_init (loc_eng_data_s_type &loc_eng_data,
loc_eng_xtra_data_s_type *xtra_module_data_ptr;
ENTRY_LOG();
+ if(!loc_eng_data.adapter->mSupportsTimeInjection
+ || loc_eng_data.adapter->hasNativeXtraClient()) {
+ LOC_LOGD("XTRA is already supported. disable it here.\n");
+ EXIT_LOG(%d, 1); // return 1 denote failure
+ return 1;
+ }
+
if(callbacks == NULL) {
LOC_LOGE("loc_eng_xtra_init: failed, cb is NULL");
} else {
diff --git a/gps/loc_api/loc_api_v02/Android.mk b/gps/loc_api/loc_api_v02/Android.mk
new file mode 100644
index 0000000..238e6d2
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/Android.mk
@@ -0,0 +1,62 @@
+ifneq ($(BUILD_TINY_ANDROID),true)
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libloc_api_v02
+
+LOCAL_MODULE_TAGS := optional
+
+ifeq ($(TARGET_DEVICE),apq8026_lw)
+LOCAL_CFLAGS += -DPDK_FEATURE_SET
+else ifeq ($(BOARD_VENDOR_QCOM_LOC_PDK_FEATURE_SET),true)
+LOCAL_CFLAGS += -DPDK_FEATURE_SET
+endif
+
+LOCAL_SHARED_LIBRARIES := \
+ libutils \
+ libcutils \
+ libqmi_cci \
+ libqmi_common_so \
+ libloc_core \
+ libgps.utils \
+ libdl \
+ libloc_pla
+
+LOCAL_SRC_FILES = \
+ LocApiV02.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_
+
+LOCAL_COPY_HEADERS_TO:= libloc_api_v02/
+
+LOCAL_COPY_HEADERS:= \
+ location_service_v02.h \
+ loc_api_v02_log.h \
+ loc_api_v02_client.h \
+ loc_api_sync_req.h \
+ LocApiV02.h \
+ loc_util_log.h
+
+
+## Includes
+LOCAL_C_INCLUDES := \
+ $(TARGET_OUT_HEADERS)/libloc_core \
+ $(TARGET_OUT_HEADERS)/qmi-framework/inc \
+ $(TARGET_OUT_HEADERS)/qmi/inc \
+ $(TARGET_OUT_HEADERS)/gps.utils \
+ $(TARGET_OUT_HEADERS)/libloc_ds_api \
+ $(TARGET_OUT_HEADERS)/libloc_pla
+
+LOCAL_PRELINK_MODULE := false
+
+include $(BUILD_SHARED_LIBRARY)
+
+endif # not BUILD_TINY_ANDROID
diff --git a/gps/loc_api/loc_api_v02/LocApiV02.cpp b/gps/loc_api/loc_api_v02/LocApiV02.cpp
new file mode 100755
index 0000000..0c4ceed
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/LocApiV02.cpp
@@ -0,0 +1,4452 @@
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundatoin, nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define LOG_NDEBUG 0
+#define LOG_TAG "LocSvc_ApiV02"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <dlfcn.h>
+
+#include <hardware/gps.h>
+
+#include <LocApiV02.h>
+#include <loc_api_v02_log.h>
+#include <loc_api_sync_req.h>
+#include <loc_api_v02_client.h>
+#include <loc_util_log.h>
+#include <gps_extended.h>
+#include "platform_lib_includes.h"
+#include <loc_cfg.h>
+
+using namespace loc_core;
+
+/* Doppler Conversion from M/S to NS/S */
+#define MPS_TO_NSPS (1.0/0.299792458)
+
+/* Default session id ; TBD needs incrementing for each */
+#define LOC_API_V02_DEF_SESSION_ID (1)
+
+/* UMTS CP Address key*/
+#define LOC_NI_NOTIF_KEY_ADDRESS "Address"
+
+/* GPS SV Id offset */
+#define GPS_SV_ID_OFFSET (1)
+
+/* GLONASS SV Id offset */
+#define GLONASS_SV_ID_OFFSET (65)
+
+/* SV ID range */
+#define SV_ID_RANGE (32)
+
+#define BDS_SV_ID_OFFSET (201)
+
+/* BeiDou SV ID RANGE*/
+#define BDS_SV_ID_RANGE QMI_LOC_DELETE_MAX_BDS_SV_INFO_LENGTH_V02
+
+/* GPS week unknown*/
+#define C_GPS_WEEK_UNKNOWN (65535)
+
+/* seconds per week*/
+#define WEEK_MSECS (60*60*24*7*1000)
+
+/* number of QMI_LOC messages that need to be checked*/
+#define NUMBER_OF_MSG_TO_BE_CHECKED (3)
+
+/* Gaussian 2D scaling table - scale from x% to 68% confidence */
+struct conf_scaler_to_68_pair {
+ uint8_t confidence;
+ float scaler_to_68;
+};
+/* length of confScalers array */
+#define CONF_SCALER_ARRAY_MAX (3)
+const struct conf_scaler_to_68_pair confScalers[CONF_SCALER_ARRAY_MAX] = {
+ {39, 1.517}, // 0 - 39 . Index 0
+ {50, 1.287}, // 40 - 50. Index 1
+ {63, 1.072}, // 51 - 63. Index 2
+};
+
+#define GPS_CONF_FILE "/etc/gps.conf"
+
+/*fixed timestamp uncertainty 10 milli second */
+static int ap_timestamp_uncertainty = 0;
+static loc_param_s_type gps_conf_param_table[] =
+{
+ {"AP_TIMESTAMP_UNCERTAINTY",&ap_timestamp_uncertainty,NULL,'n'}
+};
+
+/* static event callbacks that call the LocApiV02 callbacks*/
+
+/* global event callback, call the eventCb function in loc api adapter v02
+ instance */
+static void globalEventCb(locClientHandleType clientHandle,
+ uint32_t eventId,
+ const locClientEventIndUnionType eventPayload,
+ void* pClientCookie)
+{
+ MODEM_LOG_CALLFLOW(%s, loc_get_v02_event_name(eventId));
+ LocApiV02 *locApiV02Instance =
+ (LocApiV02 *)pClientCookie;
+
+ LOC_LOGV ("%s:%d] client = %p, event id = %d, client cookie ptr = %p\n",
+ __func__, __LINE__, clientHandle, eventId, pClientCookie);
+
+ // return if null is passed
+ if( NULL == locApiV02Instance)
+ {
+ LOC_LOGE ("%s:%d] NULL object passed : client = %p, event id = %d\n",
+ __func__, __LINE__, clientHandle, eventId);
+ return;
+ }
+ locApiV02Instance->eventCb(clientHandle, eventId, eventPayload);
+}
+
+/* global response callback, it calls the sync request process
+ indication function to unblock the request that is waiting on this
+ response indication*/
+static void globalRespCb(locClientHandleType clientHandle,
+ uint32_t respId,
+ const locClientRespIndUnionType respPayload,
+ uint32_t respPayloadSize,
+ void* pClientCookie)
+{
+ MODEM_LOG_CALLFLOW(%s, loc_get_v02_event_name(respId));
+ LocApiV02 *locApiV02Instance =
+ (LocApiV02 *)pClientCookie;
+
+ LOC_LOGV ("%s:%d] client = %p, resp id = %d, client cookie ptr = %p\n",
+ __func__, __LINE__, clientHandle, respId, pClientCookie);
+
+ if( NULL == locApiV02Instance)
+ {
+ LOC_LOGE ("%s:%d] NULL object passed : client = %p, resp id = %d\n",
+ __func__, __LINE__, clientHandle, respId);
+ return;
+ }
+
+ // process the sync call
+ // use pDeleteAssistDataInd as a dummy pointer
+ loc_sync_process_ind(clientHandle, respId,
+ (void *)respPayload.pDeleteAssistDataInd, respPayloadSize);
+}
+
+/* global error callback, it will call the handle service down
+ function in the loc api adapter instance. */
+static void globalErrorCb (locClientHandleType clientHandle,
+ locClientErrorEnumType errorId,
+ void *pClientCookie)
+{
+ LocApiV02 *locApiV02Instance =
+ (LocApiV02 *)pClientCookie;
+
+ LOC_LOGV ("%s:%d] client = %p, error id = %d\n, client cookie ptr = %p\n",
+ __func__, __LINE__, clientHandle, errorId, pClientCookie);
+ if( NULL == locApiV02Instance)
+ {
+ LOC_LOGE ("%s:%d] NULL object passed : client = %p, error id = %d\n",
+ __func__, __LINE__, clientHandle, errorId);
+ return;
+ }
+ locApiV02Instance->errorCb(clientHandle, errorId);
+}
+
+/* global structure containing the callbacks */
+locClientCallbacksType globalCallbacks =
+{
+ sizeof(locClientCallbacksType),
+ globalEventCb,
+ globalRespCb,
+ globalErrorCb
+};
+
+static void getInterSystemTimeBias(const char* interSystem,
+ Gnss_InterSystemBiasStructType &interSystemBias,
+ const qmiLocInterSystemBiasStructT_v02* pInterSysBias)
+{
+ LOC_LOGV("%s] Mask:%d, TimeBias:%f, TimeBiasUnc:%f,\n",
+ interSystem, pInterSysBias->validMask, pInterSysBias->timeBias,
+ pInterSysBias->timeBiasUnc);
+
+ interSystemBias.validMask = pInterSysBias->validMask;
+ interSystemBias.timeBias = pInterSysBias->timeBias;
+ interSystemBias.timeBiasUnc = pInterSysBias->timeBiasUnc;
+}
+
+/* Constructor for LocApiV02 */
+LocApiV02 :: LocApiV02(const MsgTask* msgTask,
+ LOC_API_ADAPTER_EVENT_MASK_T exMask,
+ ContextBase* context):
+ LocApiBase(msgTask, exMask, context),
+ clientHandle(LOC_CLIENT_INVALID_HANDLE_VALUE),
+ dsClientIface(NULL),
+ dsClientHandle(NULL),
+ dsLibraryHandle(NULL),
+ mGnssMeasurementSupported(sup_unknown),
+ mQmiMask(0), mInSession(false),
+ mEngineOn(false), mMeasurementsStarted(false)
+{
+ // initialize loc_sync_req interface
+ loc_sync_req_init();
+
+ UTIL_READ_CONF(GPS_CONF_FILE,gps_conf_param_table);
+}
+
+/* Destructor for LocApiV02 */
+LocApiV02 :: ~LocApiV02()
+{
+ close();
+}
+
+LocApiBase* getLocApi(const MsgTask *msgTask,
+ LOC_API_ADAPTER_EVENT_MASK_T exMask,
+ ContextBase* context)
+{
+ return (LocApiBase*)LocApiV02::createLocApiV02(msgTask, exMask, context);
+}
+
+LocApiBase* LocApiV02::createLocApiV02(const MsgTask *msgTask,
+ LOC_API_ADAPTER_EVENT_MASK_T exMask,
+ ContextBase* context)
+{
+ if (NULL != msgTask) {
+ LOC_LOGE("%s:%d]: msgTask can not be NULL", __func__, __LINE__);
+ return NULL;
+ }
+ LOC_LOGD("%s:%d]: Creating new LocApiV02", __func__, __LINE__);
+ return new LocApiV02(msgTask, exMask, context);
+}
+
+/* Initialize a loc api v02 client AND
+ check which loc message are supported by modem */
+enum loc_api_adapter_err
+LocApiV02 :: open(LOC_API_ADAPTER_EVENT_MASK_T mask)
+{
+ enum loc_api_adapter_err rtv = LOC_API_ADAPTER_ERR_SUCCESS;
+ LOC_API_ADAPTER_EVENT_MASK_T newMask = mMask | (mask & ~mExcludedMask);
+ locClientEventMaskType qmiMask = convertMask(newMask);
+ LOC_LOGD("%s:%d]: Enter mMask: %x; mask: %x; newMask: %x mQmiMask: %lld qmiMask: %lld",
+ __func__, __LINE__, mMask, mask, newMask, mQmiMask, qmiMask);
+ /* If the client is already open close it first */
+ if(LOC_CLIENT_INVALID_HANDLE_VALUE == clientHandle)
+ {
+ locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
+
+ LOC_LOGV ("%s:%d]: reference to this = %p passed in \n",
+ __func__, __LINE__, this);
+ /* initialize the loc api v02 interface, note that
+ the locClientOpen() function will block if the
+ service is unavailable for a fixed time out */
+
+ // it is important to cap the mask here, because not all LocApi's
+ // can enable the same bits, e.g. foreground and bckground.
+ status = locClientOpen(adjustMaskForNoSession(qmiMask), &globalCallbacks,
+ &clientHandle, (void *)this);
+ mMask = newMask;
+ mQmiMask = qmiMask;
+ if (eLOC_CLIENT_SUCCESS != status ||
+ clientHandle == LOC_CLIENT_INVALID_HANDLE_VALUE )
+ {
+ mMask = 0;
+ mQmiMask = 0;
+ LOC_LOGE ("%s:%d]: locClientOpen failed, status = %s\n", __func__,
+ __LINE__, loc_get_v02_client_status_name(status));
+ rtv = LOC_API_ADAPTER_ERR_FAILURE;
+ } else {
+ uint64_t supportedMsgList = 0;
+ const uint32_t msgArray[NUMBER_OF_MSG_TO_BE_CHECKED] =
+ {
+ // For - LOC_API_ADAPTER_MESSAGE_LOCATION_BATCHING
+ QMI_LOC_GET_BATCH_SIZE_REQ_V02,
+
+ // For - LOC_API_ADAPTER_MESSAGE_BATCHED_GENFENCE_BREACH
+ QMI_LOC_EVENT_GEOFENCE_BATCHED_BREACH_NOTIFICATION_IND_V02,
+
+ // For - LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_TRACKING
+ QMI_LOC_START_DBT_REQ_V02
+ };
+
+ // check the modem
+ status = locClientSupportMsgCheck(clientHandle,
+ msgArray,
+ NUMBER_OF_MSG_TO_BE_CHECKED,
+ &supportedMsgList);
+ if (eLOC_CLIENT_SUCCESS != status) {
+ LOC_LOGE("%s:%d]: Failed to checking QMI_LOC message supported. \n",
+ __func__, __LINE__);
+ }
+
+ /** if batching is supported , check if the adaptive batching or
+ distance-based batching is supported. */
+ uint32_t messageChecker = 1 << LOC_API_ADAPTER_MESSAGE_LOCATION_BATCHING;
+ if ((messageChecker & supportedMsgList) == messageChecker) {
+ locClientReqUnionType req_union;
+ locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
+ qmiLocQueryAonConfigReqMsgT_v02 queryAonConfigReq;
+ qmiLocQueryAonConfigIndMsgT_v02 queryAonConfigInd;
+
+ memset(&queryAonConfigReq, 0, sizeof(queryAonConfigReq));
+ memset(&queryAonConfigInd, 0, sizeof(queryAonConfigInd));
+ queryAonConfigReq.transactionId = LOC_API_V02_DEF_SESSION_ID;
+
+ req_union.pQueryAonConfigReq = &queryAonConfigReq;
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_QUERY_AON_CONFIG_REQ_V02,
+ req_union,
+ LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_QUERY_AON_CONFIG_IND_V02,
+ &queryAonConfigInd);
+
+ if (status == eLOC_CLIENT_FAILURE_UNSUPPORTED) {
+ LOC_LOGE("%s:%d]: Query AON config is not supported.\n", __func__, __LINE__);
+ } else {
+ if (status != eLOC_CLIENT_SUCCESS ||
+ queryAonConfigInd.status != eQMI_LOC_SUCCESS_V02) {
+ LOC_LOGE("%s:%d]: Query AON config failed."
+ " status: %s, ind status:%s\n",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(queryAonConfigInd.status));
+ } else {
+ LOC_LOGD("%s:%d]: Query AON config succeeded. aonCapability is %d.\n",
+ __func__, __LINE__, queryAonConfigInd.aonCapability);
+ if (queryAonConfigInd.aonCapability_valid) {
+ if (queryAonConfigInd.aonCapability |
+ QMI_LOC_MASK_AON_TIME_BASED_BATCHING_SUPPORTED_V02) {
+ LOC_LOGD("%s:%d]: LB 1.0 is supported.\n", __func__, __LINE__);
+ }
+ if (queryAonConfigInd.aonCapability |
+ QMI_LOC_MASK_AON_AUTO_BATCHING_SUPPORTED_V02) {
+ LOC_LOGD("%s:%d]: LB 1.5 is supported.\n", __func__, __LINE__);
+ supportedMsgList |=
+ (1 << LOC_API_ADAPTER_MESSAGE_ADAPTIVE_LOCATION_BATCHING);
+ }
+ if (queryAonConfigInd.aonCapability |
+ QMI_LOC_MASK_AON_DISTANCE_BASED_BATCHING_SUPPORTED_V02) {
+ LOC_LOGD("%s:%d]: LB 2.0 is supported.\n", __func__, __LINE__);
+ supportedMsgList |=
+ (1 << LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_LOCATION_BATCHING);
+ }
+ if (queryAonConfigInd.aonCapability |
+ QMI_LOC_MASK_AON_DISTANCE_BASED_TRACKING_SUPPORTED_V02) {
+ LOC_LOGD("%s:%d]: DBT 2.0 is supported.\n", __func__, __LINE__);
+ }
+ if (queryAonConfigInd.aonCapability |
+ QMI_LOC_MASK_AON_UPDATE_TBF_SUPPORTED_V02) {
+ LOC_LOGD("%s:%d]: Updating tracking TBF on the fly is supported.\n",
+ __func__, __LINE__);
+ supportedMsgList |=
+ (1 << LOC_API_ADAPTER_MESSAGE_UPDATE_TBF_ON_THE_FLY);
+ }
+ } else {
+ LOC_LOGE("%s:%d]: AON capability is invalid.\n", __func__, __LINE__);
+ }
+ }
+ }
+ }
+ LOC_LOGV("%s:%d]: supportedMsgList is %lld. \n",
+ __func__, __LINE__, supportedMsgList);
+ // save the supported message list
+ saveSupportedMsgList(supportedMsgList);
+
+ // Query for supported feature list
+ locClientReqUnionType req_union;
+ locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
+ qmiLocGetSupportedFeatureReqMsgT_v02 getSupportedFeatureList_req;
+ qmiLocGetSupportedFeatureIndMsgT_v02 getSupportedFeatureList_ind;
+
+ memset(&getSupportedFeatureList_req, 0, sizeof(getSupportedFeatureList_req));
+ memset(&getSupportedFeatureList_ind, 0, sizeof(getSupportedFeatureList_ind));
+
+ req_union.pGetSupportedFeatureReq = &getSupportedFeatureList_req;
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_GET_SUPPORTED_FEATURE_REQ_V02,
+ req_union,
+ LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_GET_SUPPORTED_FEATURE_IND_V02,
+ &getSupportedFeatureList_ind);
+ if (eLOC_CLIENT_SUCCESS != status) {
+ LOC_LOGE("%s:%d:%d]: Failed to get features supported from "
+ "QMI_LOC_GET_SUPPORTED_FEATURE_REQ_V02. \n", __func__, __LINE__, status);
+ } else {
+ LOC_LOGD("%s:%d:%d]: Got list of features supported of length:%d ",
+ __func__, __LINE__, getSupportedFeatureList_ind.feature_len);
+ for (int i = 0; i < getSupportedFeatureList_ind.feature_len; i++) {
+ LOC_LOGD("Bit-mask of supported features at index:%d is %d",i,
+ getSupportedFeatureList_ind.feature[i]);
+ }
+ if (getSupportedFeatureList_ind.feature_len > 0) {
+ saveSupportedFeatureList(getSupportedFeatureList_ind.feature);
+ }
+ }
+ }
+ } else if (newMask != mMask) {
+ // it is important to cap the mask here, because not all LocApi's
+ // can enable the same bits, e.g. foreground and background.
+ if (!registerEventMask(qmiMask)) {
+ // we do not update mMask here, because it did not change
+ // as the mask update has failed.
+ rtv = LOC_API_ADAPTER_ERR_FAILURE;
+ }
+ else {
+ mMask = newMask;
+ mQmiMask = qmiMask;
+ }
+ }
+ /*Set the SV Measurement Constellation when Measurement Report or Polynomial report is set*/
+ if( (qmiMask & QMI_LOC_EVENT_MASK_GNSS_MEASUREMENT_REPORT_V02) ||
+ (qmiMask & QMI_LOC_EVENT_MASK_GNSS_SV_POLYNOMIAL_REPORT_V02) )
+ {
+ setSvMeasurementConstellation(eQMI_SYSTEM_GPS_V02|eQMI_SYSTEM_GLO_V02);
+ }
+ LOC_LOGD("%s:%d]: Exit mMask: %x; mask: %x mQmiMask: %lld qmiMask: %lld",
+ __func__, __LINE__, mMask, mask, mQmiMask, qmiMask);
+
+ if (LOC_API_ADAPTER_ERR_SUCCESS == rtv) {
+ cacheGnssMeasurementSupport();
+ }
+
+ return rtv;
+}
+
+bool LocApiV02 :: registerEventMask(locClientEventMaskType qmiMask)
+{
+ if (!mInSession) {
+ qmiMask = adjustMaskForNoSession(qmiMask);
+ }
+ LOC_LOGD("%s:%d]: mQmiMask=%lld qmiMask=%lld",
+ __func__, __LINE__, mQmiMask, qmiMask);
+ return locClientRegisterEventMask(clientHandle, qmiMask);
+}
+
+locClientEventMaskType LocApiV02 :: adjustMaskForNoSession(locClientEventMaskType qmiMask)
+{
+ LOC_LOGD("%s:%d]: before qmiMask=%lld",
+ __func__, __LINE__, qmiMask);
+ locClientEventMaskType clearMask = QMI_LOC_EVENT_MASK_POSITION_REPORT_V02 |
+ QMI_LOC_EVENT_MASK_GNSS_SV_INFO_V02 |
+ QMI_LOC_EVENT_MASK_NMEA_V02 |
+ QMI_LOC_EVENT_MASK_ENGINE_STATE_V02 |
+ QMI_LOC_EVENT_MASK_GNSS_MEASUREMENT_REPORT_V02;
+
+ qmiMask = qmiMask & ~clearMask;
+ LOC_LOGD("%s:%d]: after qmiMask=%lld",
+ __func__, __LINE__, qmiMask);
+ return qmiMask;
+}
+
+enum loc_api_adapter_err LocApiV02 :: close()
+{
+ enum loc_api_adapter_err rtv =
+ // success if either client is already invalid, or
+ // we successfully close the handle
+ (LOC_CLIENT_INVALID_HANDLE_VALUE == clientHandle ||
+ eLOC_CLIENT_SUCCESS == locClientClose(&clientHandle)) ?
+ LOC_API_ADAPTER_ERR_SUCCESS : LOC_API_ADAPTER_ERR_FAILURE;
+
+ mMask = 0;
+ clientHandle = LOC_CLIENT_INVALID_HANDLE_VALUE;
+
+ return rtv;
+}
+
+/* start positioning session */
+enum loc_api_adapter_err LocApiV02 :: startFix(const LocPosMode& fixCriteria)
+{
+ locClientStatusEnumType status;
+ locClientReqUnionType req_union;
+
+ qmiLocStartReqMsgT_v02 start_msg;
+
+ qmiLocSetOperationModeReqMsgT_v02 set_mode_msg;
+ qmiLocSetOperationModeIndMsgT_v02 set_mode_ind;
+
+ // clear all fields, validity masks
+ memset (&start_msg, 0, sizeof(start_msg));
+ memset (&set_mode_msg, 0, sizeof(set_mode_msg));
+ memset (&set_mode_ind, 0, sizeof(set_mode_ind));
+
+ LOC_LOGV("%s:%d]: start \n", __func__, __LINE__);
+ fixCriteria.logv();
+
+ mInSession = true;
+ mMeasurementsStarted = true;
+ registerEventMask(mQmiMask);
+
+ // fill in the start request
+ switch(fixCriteria.mode)
+ {
+ case LOC_POSITION_MODE_MS_BASED:
+ set_mode_msg.operationMode = eQMI_LOC_OPER_MODE_MSB_V02;
+ break;
+
+ case LOC_POSITION_MODE_MS_ASSISTED:
+ set_mode_msg.operationMode = eQMI_LOC_OPER_MODE_MSA_V02;
+ break;
+
+ case LOC_POSITION_MODE_RESERVED_4:
+ set_mode_msg.operationMode = eQMI_LOC_OPER_MODE_CELL_ID_V02;
+ break;
+
+ case LOC_POSITION_MODE_RESERVED_5:
+ set_mode_msg.operationMode = eQMI_LOC_OPER_MODE_WWAN_V02;
+ break;
+
+ default:
+ set_mode_msg.operationMode = eQMI_LOC_OPER_MODE_STANDALONE_V02;
+ break;
+ }
+
+ req_union.pSetOperationModeReq = &set_mode_msg;
+
+ // send the mode first, before the start message.
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_OPERATION_MODE_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_OPERATION_MODE_IND_V02,
+ &set_mode_ind); // NULL?
+ //When loc_sync_send_req status is time out, more likely the response was lost.
+ //startFix will continue as though it is succeeded.
+ if ((status != eLOC_CLIENT_SUCCESS && status != eLOC_CLIENT_FAILURE_TIMEOUT) ||
+ eQMI_LOC_SUCCESS_V02 != set_mode_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: set opertion mode failed status = %s, "
+ "ind..status = %s\n", __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(set_mode_ind.status));
+ } else {
+ if (status == eLOC_CLIENT_FAILURE_TIMEOUT)
+ {
+ LOC_LOGE ("%s:%d]: set operation mode timed out\n", __func__, __LINE__);
+ }
+ start_msg.minInterval_valid = 1;
+ start_msg.minInterval = fixCriteria.min_interval;
+
+ if (fixCriteria.preferred_accuracy >= 0) {
+ start_msg.horizontalAccuracyLevel_valid = 1;
+
+ if (fixCriteria.preferred_accuracy <= 100)
+ {
+ // fix needs high accuracy
+ start_msg.horizontalAccuracyLevel = eQMI_LOC_ACCURACY_HIGH_V02;
+ }
+ else if (fixCriteria.preferred_accuracy <= 1000)
+ {
+ //fix needs med accuracy
+ start_msg.horizontalAccuracyLevel = eQMI_LOC_ACCURACY_MED_V02;
+ }
+ else
+ {
+ //fix needs low accuracy
+ start_msg.horizontalAccuracyLevel = eQMI_LOC_ACCURACY_LOW_V02;
+ }
+ }
+
+ start_msg.fixRecurrence_valid = 1;
+ if(GPS_POSITION_RECURRENCE_SINGLE == fixCriteria.recurrence)
+ {
+ start_msg.fixRecurrence = eQMI_LOC_RECURRENCE_SINGLE_V02;
+ }
+ else
+ {
+ start_msg.fixRecurrence = eQMI_LOC_RECURRENCE_PERIODIC_V02;
+ }
+
+ //dummy session id
+ // TBD: store session ID, check for session id in pos reports.
+ start_msg.sessionId = LOC_API_V02_DEF_SESSION_ID;
+
+ //Set whether position report can be shared with other LOC clients
+ start_msg.sharePosition_valid = 1;
+ start_msg.sharePosition = fixCriteria.share_position;
+
+ if (fixCriteria.credentials[0] != 0) {
+ int size1 = sizeof(start_msg.applicationId.applicationName);
+ int size2 = sizeof(fixCriteria.credentials);
+ int len = ((size1 < size2) ? size1 : size2) - 1;
+ memcpy(start_msg.applicationId.applicationName,
+ fixCriteria.credentials,
+ len);
+
+ size1 = sizeof(start_msg.applicationId.applicationProvider);
+ size2 = sizeof(fixCriteria.provider);
+ len = ((size1 < size2) ? size1 : size2) - 1;
+ memcpy(start_msg.applicationId.applicationProvider,
+ fixCriteria.provider,
+ len);
+
+ start_msg.applicationId_valid = 1;
+ }
+
+ // config Altitude Assumed
+ start_msg.configAltitudeAssumed_valid = 1;
+ start_msg.configAltitudeAssumed = eQMI_LOC_ALTITUDE_ASSUMED_IN_GNSS_SV_INFO_DISABLED_V02;
+
+ req_union.pStartReq = &start_msg;
+
+ status = locClientSendReq (clientHandle, QMI_LOC_START_REQ_V02,
+ req_union );
+ }
+
+ return convertErr(status);
+}
+
+/* stop a positioning session */
+enum loc_api_adapter_err LocApiV02 :: stopFix()
+{
+ locClientStatusEnumType status;
+ locClientReqUnionType req_union;
+
+ qmiLocStopReqMsgT_v02 stop_msg;
+
+ LOC_LOGD(" %s:%d]: stop called \n", __func__, __LINE__);
+
+ memset(&stop_msg, 0, sizeof(stop_msg));
+
+ // dummy session id
+ stop_msg.sessionId = LOC_API_V02_DEF_SESSION_ID;
+
+ req_union.pStopReq = &stop_msg;
+
+ status = locClientSendReq(clientHandle,
+ QMI_LOC_STOP_REQ_V02,
+ req_union);
+
+ mInSession = false;
+ // if engine on never happend, deregister events
+ // without waiting for Engine Off
+ if (!mEngineOn) {
+ registerEventMask(mQmiMask);
+ }
+
+ if( eLOC_CLIENT_SUCCESS != status)
+ {
+ LOC_LOGE("%s:%d]: error = %s\n",__func__, __LINE__,
+ loc_get_v02_client_status_name(status));
+ }
+
+ return convertErr(status);
+}
+
+/* set the positioning fix criteria */
+enum loc_api_adapter_err LocApiV02 :: setPositionMode(
+ const LocPosMode& posMode)
+{
+ if(isInSession())
+ {
+ //fix is in progress, send a restart
+ LOC_LOGD ("%s:%d]: fix is in progress restarting the fix with new "
+ "criteria\n", __func__, __LINE__);
+
+ return( startFix(posMode));
+ }
+
+ return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+/* inject time into the position engine */
+enum loc_api_adapter_err LocApiV02 ::
+ setTime(GpsUtcTime time, int64_t timeReference, int uncertainty)
+{
+ locClientReqUnionType req_union;
+ locClientStatusEnumType status;
+ qmiLocInjectUtcTimeReqMsgT_v02 inject_time_msg;
+ qmiLocInjectUtcTimeIndMsgT_v02 inject_time_ind;
+
+ memset(&inject_time_msg, 0, sizeof(inject_time_msg));
+
+ inject_time_ind.status = eQMI_LOC_GENERAL_FAILURE_V02;
+
+ inject_time_msg.timeUtc = time;
+
+ inject_time_msg.timeUtc += (int64_t)(platform_lib_abstraction_elapsed_millis_since_boot() - timeReference);
+
+ inject_time_msg.timeUnc = uncertainty;
+
+ req_union.pInjectUtcTimeReq = &inject_time_msg;
+
+ LOC_LOGV ("%s:%d]: uncertainty = %d\n", __func__, __LINE__,
+ uncertainty);
+
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_INJECT_UTC_TIME_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_INJECT_UTC_TIME_IND_V02,
+ &inject_time_ind);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != inject_time_ind.status)
+ {
+ LOC_LOGE ("%s:%d] status = %s, ind..status = %s\n", __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(inject_time_ind.status));
+ }
+
+ return convertErr(status);
+}
+
+/* inject position into the position engine */
+enum loc_api_adapter_err LocApiV02 ::
+ injectPosition(double latitude, double longitude, float accuracy)
+{
+ locClientReqUnionType req_union;
+ locClientStatusEnumType status;
+ qmiLocInjectPositionReqMsgT_v02 inject_pos_msg;
+ qmiLocInjectPositionIndMsgT_v02 inject_pos_ind;
+
+ memset(&inject_pos_msg, 0, sizeof(inject_pos_msg));
+ memset(&inject_pos_ind, 0, sizeof(inject_pos_ind));
+
+ inject_pos_msg.latitude_valid = 1;
+ inject_pos_msg.latitude = latitude;
+
+ inject_pos_msg.longitude_valid = 1;
+ inject_pos_msg.longitude = longitude;
+
+ inject_pos_msg.horUncCircular_valid = 1;
+
+ inject_pos_msg.horUncCircular = accuracy; //meters assumed
+ if (inject_pos_msg.horUncCircular < 1000) {
+ inject_pos_msg.horUncCircular = 1000;
+ }
+
+ inject_pos_msg.horConfidence_valid = 1;
+
+ inject_pos_msg.horConfidence = 68; //1 std dev assumed as specified by API
+
+ inject_pos_msg.rawHorUncCircular_valid = 1;
+
+ inject_pos_msg.rawHorUncCircular = accuracy; //meters assumed
+
+ inject_pos_msg.rawHorConfidence_valid = 1;
+
+ inject_pos_msg.rawHorConfidence = 68; //1 std dev assumed as specified by API
+
+ struct timespec time_info_current;
+ if(clock_gettime(CLOCK_REALTIME,&time_info_current) == 0) //success
+ {
+ inject_pos_msg.timestampUtc_valid = 1;
+ inject_pos_msg.timestampUtc = (time_info_current.tv_sec)*1e3 +
+ (time_info_current.tv_nsec)/1e6;
+ LOC_LOGV("%s:%d] inject timestamp from system: %llu",
+ __func__, __LINE__, inject_pos_msg.timestampUtc);
+ }
+
+ /* Log */
+ LOC_LOGD("%s:%d]: Lat=%lf, Lon=%lf, Acc=%.2lf rawAcc=%.2lf", __func__, __LINE__,
+ inject_pos_msg.latitude, inject_pos_msg.longitude,
+ inject_pos_msg.horUncCircular, inject_pos_msg.rawHorUncCircular);
+
+ req_union.pInjectPositionReq = &inject_pos_msg;
+
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_INJECT_POSITION_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_INJECT_POSITION_IND_V02,
+ &inject_pos_ind);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != inject_pos_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: error! status = %s, inject_pos_ind.status = %s\n",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(inject_pos_ind.status));
+ }
+
+ return convertErr(status);
+}
+
+/* delete assistance date */
+enum loc_api_adapter_err LocApiV02 :: deleteAidingData(GpsAidingData f)
+{
+ static bool isNewApiSupported = true;
+ locClientReqUnionType req_union;
+ locClientStatusEnumType status = eLOC_CLIENT_FAILURE_UNSUPPORTED;
+
+ // Use the new API first
+ qmiLocDeleteGNSSServiceDataReqMsgT_v02 delete_gnss_req;
+ qmiLocDeleteGNSSServiceDataIndMsgT_v02 delete_gnss_resp;
+
+ memset(&delete_gnss_req, 0, sizeof(delete_gnss_req));
+ memset(&delete_gnss_resp, 0, sizeof(delete_gnss_resp));
+
+ if (isNewApiSupported)
+ {
+ if (GPS_DELETE_ALL == f)
+ {
+ delete_gnss_req.deleteAllFlag = true;
+ }
+ else
+ {
+ if (f & GPS_DELETE_EPHEMERIS)
+ {
+ delete_gnss_req.deleteSatelliteData_valid = 1;
+ delete_gnss_req.deleteSatelliteData.deleteSatelliteDataMask |= QMI_LOC_DELETE_DATA_MASK_EPHEMERIS_V02;
+ }
+
+ if (f & GPS_DELETE_ALMANAC)
+ {
+ delete_gnss_req.deleteSatelliteData_valid = 1;
+ delete_gnss_req.deleteSatelliteData.deleteSatelliteDataMask |= QMI_LOC_DELETE_DATA_MASK_ALMANAC_V02;
+ }
+
+ if (f & GPS_DELETE_POSITION)
+ {
+ delete_gnss_req.deleteCommonDataMask_valid = 1;
+ delete_gnss_req.deleteCommonDataMask |= QMI_LOC_DELETE_COMMON_MASK_POS_V02;
+ }
+
+ if (f & GPS_DELETE_TIME)
+ {
+ delete_gnss_req.deleteCommonDataMask_valid = 1;
+ delete_gnss_req.deleteCommonDataMask |= QMI_LOC_DELETE_COMMON_MASK_TIME_V02;
+
+ delete_gnss_req.deleteSatelliteData_valid = 1;
+ delete_gnss_req.deleteSatelliteData.deleteSatelliteDataMask |= QMI_LOC_DELETE_DATA_MASK_TIME_V02;
+ }
+
+ if (f & GPS_DELETE_IONO)
+ {
+ delete_gnss_req.deleteSatelliteData_valid = 1;
+ delete_gnss_req.deleteSatelliteData.deleteSatelliteDataMask |= QMI_LOC_DELETE_DATA_MASK_IONO_V02;
+ }
+
+ if (f & GPS_DELETE_UTC)
+ {
+ delete_gnss_req.deleteCommonDataMask_valid = 1;
+ delete_gnss_req.deleteCommonDataMask |= QMI_LOC_DELETE_COMMON_MASK_UTC_V02;
+ }
+
+ if (f & GPS_DELETE_HEALTH)
+ {
+ delete_gnss_req.deleteSatelliteData_valid = 1;
+ delete_gnss_req.deleteSatelliteData.deleteSatelliteDataMask |= QMI_LOC_DELETE_DATA_MASK_SVHEALTH_V02;
+ }
+
+ if (f & GPS_DELETE_SVDIR)
+ {
+ delete_gnss_req.deleteSatelliteData_valid = 1;
+ delete_gnss_req.deleteSatelliteData.deleteSatelliteDataMask |= QMI_LOC_DELETE_DATA_MASK_SVDIR_V02;
+ }
+
+ if (f & GPS_DELETE_SVSTEER)
+ {
+ delete_gnss_req.deleteSatelliteData_valid = 1;
+ delete_gnss_req.deleteSatelliteData.deleteSatelliteDataMask |= QMI_LOC_DELETE_DATA_MASK_SVSTEER_V02;
+ }
+
+ if (f & GPS_DELETE_SADATA)
+ {
+ delete_gnss_req.deleteSatelliteData_valid = 1;
+ delete_gnss_req.deleteSatelliteData.deleteSatelliteDataMask |= QMI_LOC_DELETE_DATA_MASK_SA_DATA_V02;
+ }
+
+ if (f & GPS_DELETE_RTI)
+ {
+ delete_gnss_req.deleteCommonDataMask_valid = 1;
+ delete_gnss_req.deleteCommonDataMask |= QMI_LOC_DELETE_COMMON_MASK_RTI_V02;
+ }
+
+ if (delete_gnss_req.deleteSatelliteData_valid)
+ {
+ delete_gnss_req.deleteSatelliteData.system |= QMI_LOC_SYSTEM_GPS_V02;
+ delete_gnss_req.deleteSatelliteData.system |= QMI_LOC_SYSTEM_GLO_V02;
+ delete_gnss_req.deleteSatelliteData.system |= QMI_LOC_SYSTEM_BDS_V02;
+ delete_gnss_req.deleteSatelliteData.system |= QMI_LOC_SYSTEM_GAL_V02;
+ delete_gnss_req.deleteSatelliteData.system |= QMI_LOC_SYSTEM_QZSS_V02;
+ }
+
+ if (f & GPS_DELETE_CELLDB_INFO)
+ {
+ delete_gnss_req.deleteCellDbDataMask_valid = 1;
+ delete_gnss_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);
+
+ }
+ }
+
+ req_union.pDeleteGNSSServiceDataReq = &delete_gnss_req;
+
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_DELETE_GNSS_SERVICE_DATA_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_DELETE_GNSS_SERVICE_DATA_IND_V02,
+ &delete_gnss_resp);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != delete_gnss_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_gnss_resp.status));
+ }
+ }
+
+ if (eLOC_CLIENT_FAILURE_UNSUPPORTED == status) {
+ // If the new API is not supported we fall back on the old one
+ LOC_LOGD("%s:%d]: QMI_LOC_DELETE_GNSS_SERVICE_DATA_REQ_V02 not supported"
+ "We use QMI_LOC_DELETE_ASSIST_DATA_REQ_V02\n",
+ __func__, __LINE__);
+ isNewApiSupported = false;
+
+ qmiLocDeleteAssistDataReqMsgT_v02 delete_req;
+ qmiLocDeleteAssistDataIndMsgT_v02 delete_resp;
+
+ memset(&delete_req, 0, sizeof(delete_req));
+ memset(&delete_resp, 0, sizeof(delete_resp));
+
+ if (f == GPS_DELETE_ALL)
+ {
+ delete_req.deleteAllFlag = true;
+ }
+ else
+ {
+ /* to keep track of svInfoList for GPS and GLO*/
+ uint32_t curr_sv_len = 0;
+ uint32_t curr_sv_idx = 0;
+ uint32_t sv_id = 0;
+
+ if ((f & GPS_DELETE_EPHEMERIS) || (f & GPS_DELETE_ALMANAC))
+ {
+ /* do delete for all GPS SV's */
+
+ curr_sv_len += SV_ID_RANGE;
+
+ sv_id = GPS_SV_ID_OFFSET;
+
+ delete_req.deleteSvInfoList_valid = 1;
+
+ delete_req.deleteSvInfoList_len = curr_sv_len;
+
+ LOC_LOGV("%s:%d]: Delete GPS SV info for index %d to %d"
+ "and sv id %d to %d \n",
+ __func__, __LINE__, curr_sv_idx, curr_sv_len - 1,
+ sv_id, sv_id + SV_ID_RANGE - 1);
+
+ for (uint32_t i = curr_sv_idx; i < curr_sv_len; i++, sv_id++)
+ {
+ delete_req.deleteSvInfoList[i].gnssSvId = sv_id;
+
+ delete_req.deleteSvInfoList[i].system = eQMI_LOC_SV_SYSTEM_GPS_V02;
+
+ if (f & GPS_DELETE_EPHEMERIS)
+ {
+ // set ephemeris mask for all GPS SV's
+ delete_req.deleteSvInfoList[i].deleteSvInfoMask |=
+ QMI_LOC_MASK_DELETE_EPHEMERIS_V02;
+ }
+
+ if (f & GPS_DELETE_ALMANAC)
+ {
+ delete_req.deleteSvInfoList[i].deleteSvInfoMask |=
+ QMI_LOC_MASK_DELETE_ALMANAC_V02;
+ }
+ }
+ // increment the current index
+ curr_sv_idx += SV_ID_RANGE;
+
+ }
+
+ if (f & GPS_DELETE_POSITION)
+ {
+ delete_req.deleteGnssDataMask_valid = 1;
+ delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_POSITION_V02;
+ }
+
+ if (f & GPS_DELETE_TIME)
+ {
+ delete_req.deleteGnssDataMask_valid = 1;
+ delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_TIME_V02;
+ }
+
+ if (f & GPS_DELETE_IONO)
+ {
+ delete_req.deleteGnssDataMask_valid = 1;
+ delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_IONO_V02;
+ }
+
+ if (f & GPS_DELETE_UTC)
+ {
+ delete_req.deleteGnssDataMask_valid = 1;
+ delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_UTC_V02;
+ }
+
+ if (f & GPS_DELETE_HEALTH)
+ {
+ delete_req.deleteGnssDataMask_valid = 1;
+ delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_HEALTH_V02;
+ }
+
+ if (f & GPS_DELETE_SVDIR)
+ {
+ delete_req.deleteGnssDataMask_valid = 1;
+ delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GPS_SVDIR_V02;
+ }
+ if (f & GPS_DELETE_SADATA)
+ {
+ delete_req.deleteGnssDataMask_valid = 1;
+ delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_SADATA_V02;
+ }
+ if (f & GPS_DELETE_RTI)
+ {
+ delete_req.deleteGnssDataMask_valid = 1;
+ delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_RTI_V02;
+ }
+ if (f & GPS_DELETE_CELLDB_INFO)
+ {
+ delete_req.deleteCellDbDataMask_valid = 1;
+ delete_req.deleteCellDbDataMask =
+ (QMI_LOC_MASK_DELETE_CELLDB_POS_V02 |
+ QMI_LOC_MASK_DELETE_CELLDB_LATEST_GPS_POS_V02 |
+ QMI_LOC_MASK_DELETE_CELLDB_OTA_POS_V02 |
+ QMI_LOC_MASK_DELETE_CELLDB_EXT_REF_POS_V02 |
+ QMI_LOC_MASK_DELETE_CELLDB_TIMETAG_V02 |
+ QMI_LOC_MASK_DELETE_CELLDB_CELLID_V02 |
+ QMI_LOC_MASK_DELETE_CELLDB_CACHED_CELLID_V02 |
+ QMI_LOC_MASK_DELETE_CELLDB_LAST_SRV_CELL_V02 |
+ QMI_LOC_MASK_DELETE_CELLDB_CUR_SRV_CELL_V02 |
+ QMI_LOC_MASK_DELETE_CELLDB_NEIGHBOR_INFO_V02);
+
+ }
+ }
+
+ req_union.pDeleteAssistDataReq = &delete_req;
+
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_DELETE_ASSIST_DATA_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_DELETE_ASSIST_DATA_IND_V02,
+ &delete_resp);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != delete_resp.status)
+ {
+ LOC_LOGE("%s:%d]: error! status = %s, delete_resp.status = %s\n",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(delete_resp.status));
+ }
+ }
+ return convertErr(status);
+}
+
+/* send NI user repsonse to the engine */
+enum loc_api_adapter_err LocApiV02 ::
+ informNiResponse(GpsUserResponseType userResponse,
+ const void* passThroughData)
+{
+ locClientReqUnionType req_union;
+ locClientStatusEnumType status;
+
+ qmiLocNiUserRespReqMsgT_v02 ni_resp;
+ qmiLocNiUserRespIndMsgT_v02 ni_resp_ind;
+
+ qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *request_pass_back =
+ (qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *)passThroughData;
+
+ memset(&ni_resp,0, sizeof(ni_resp));
+
+ memset(&ni_resp_ind,0, sizeof(ni_resp_ind));
+
+ switch (userResponse)
+ {
+ case GPS_NI_RESPONSE_ACCEPT:
+ ni_resp.userResp = eQMI_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT_V02;
+ break;
+ case GPS_NI_RESPONSE_DENY:
+ ni_resp.userResp = eQMI_LOC_NI_LCS_NOTIFY_VERIFY_DENY_V02;
+ break;
+ case GPS_NI_RESPONSE_NORESP:
+ ni_resp.userResp = eQMI_LOC_NI_LCS_NOTIFY_VERIFY_NORESP_V02;
+ break;
+ default:
+ return LOC_API_ADAPTER_ERR_INVALID_PARAMETER;
+ }
+
+ LOC_LOGV(" %s:%d]: NI response: %d\n", __func__, __LINE__,
+ ni_resp.userResp);
+
+ ni_resp.notificationType = request_pass_back->notificationType;
+
+ // copy SUPL payload from request
+ if(request_pass_back->NiSuplInd_valid == 1)
+ {
+ ni_resp.NiSuplPayload_valid = 1;
+ memcpy(&(ni_resp.NiSuplPayload), &(request_pass_back->NiSuplInd),
+ sizeof(qmiLocNiSuplNotifyVerifyStructT_v02));
+
+ }
+ // should this be an "else if"?? we don't need to decide
+
+ // copy UMTS-CP payload from request
+ if( request_pass_back->NiUmtsCpInd_valid == 1 )
+ {
+ ni_resp.NiUmtsCpPayload_valid = 1;
+ memcpy(&(ni_resp.NiUmtsCpPayload), &(request_pass_back->NiUmtsCpInd),
+ sizeof(qmiLocNiUmtsCpNotifyVerifyStructT_v02));
+ }
+
+ //copy Vx payload from the request
+ if( request_pass_back->NiVxInd_valid == 1)
+ {
+ ni_resp.NiVxPayload_valid = 1;
+ memcpy(&(ni_resp.NiVxPayload), &(request_pass_back->NiVxInd),
+ sizeof(qmiLocNiVxNotifyVerifyStructT_v02));
+ }
+
+ // copy Vx service interaction payload from the request
+ if(request_pass_back->NiVxServiceInteractionInd_valid == 1)
+ {
+ ni_resp.NiVxServiceInteractionPayload_valid = 1;
+ memcpy(&(ni_resp.NiVxServiceInteractionPayload),
+ &(request_pass_back->NiVxServiceInteractionInd),
+ sizeof(qmiLocNiVxServiceInteractionStructT_v02));
+ }
+
+ // copy Network Initiated SUPL Version 2 Extension
+ if (request_pass_back->NiSuplVer2ExtInd_valid == 1)
+ {
+ ni_resp.NiSuplVer2ExtPayload_valid = 1;
+ memcpy(&(ni_resp.NiSuplVer2ExtPayload),
+ &(request_pass_back->NiSuplVer2ExtInd),
+ sizeof(qmiLocNiSuplVer2ExtStructT_v02));
+ }
+
+ // copy SUPL Emergency Notification
+ if(request_pass_back->suplEmergencyNotification_valid)
+ {
+ ni_resp.suplEmergencyNotification_valid = 1;
+ memcpy(&(ni_resp.suplEmergencyNotification),
+ &(request_pass_back->suplEmergencyNotification),
+ sizeof(qmiLocEmergencyNotificationStructT_v02));
+ }
+
+ req_union.pNiUserRespReq = &ni_resp;
+
+ status = loc_sync_send_req (
+ clientHandle, QMI_LOC_NI_USER_RESPONSE_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_NI_USER_RESPONSE_IND_V02, &ni_resp_ind);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != ni_resp_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: error! status = %s, ni_resp_ind.status = %s\n",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(ni_resp_ind.status));
+ }
+
+ return convertErr(status);
+}
+
+/* Set UMTs SLP server URL */
+enum loc_api_adapter_err LocApiV02 :: setServer(
+ const char* url, int len)
+{
+ locClientReqUnionType req_union;
+ locClientStatusEnumType status;
+ qmiLocSetServerReqMsgT_v02 set_server_req;
+ qmiLocSetServerIndMsgT_v02 set_server_ind;
+
+ if(len < 0 || len > sizeof(set_server_req.urlAddr))
+ {
+ LOC_LOGE("%s:%d]: len = %d greater than max allowed url length\n",
+ __func__, __LINE__, len);
+
+ return LOC_API_ADAPTER_ERR_INVALID_PARAMETER;
+ }
+
+ memset(&set_server_req, 0, sizeof(set_server_req));
+ memset(&set_server_ind, 0, sizeof(set_server_ind));
+
+ LOC_LOGD("%s:%d]:, url = %s, len = %d\n", __func__, __LINE__, url, len);
+
+ set_server_req.serverType = eQMI_LOC_SERVER_TYPE_UMTS_SLP_V02;
+
+ set_server_req.urlAddr_valid = 1;
+
+ strlcpy(set_server_req.urlAddr, url, sizeof(set_server_req.urlAddr));
+
+ req_union.pSetServerReq = &set_server_req;
+
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_SERVER_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_SERVER_IND_V02,
+ &set_server_ind);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != set_server_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: error status = %s, set_server_ind.status = %s\n",
+ __func__,__LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(set_server_ind.status));
+ }
+
+ return convertErr(status);
+}
+
+enum loc_api_adapter_err LocApiV02 ::
+ setServer(unsigned int ip, int port, LocServerType type)
+{
+ locClientReqUnionType req_union;
+ locClientStatusEnumType status;
+ qmiLocSetServerReqMsgT_v02 set_server_req;
+ qmiLocSetServerIndMsgT_v02 set_server_ind;
+ qmiLocServerTypeEnumT_v02 set_server_cmd;
+
+ switch (type) {
+ case LOC_AGPS_MPC_SERVER:
+ set_server_cmd = eQMI_LOC_SERVER_TYPE_CDMA_MPC_V02;
+ break;
+ case LOC_AGPS_CUSTOM_PDE_SERVER:
+ set_server_cmd = eQMI_LOC_SERVER_TYPE_CUSTOM_PDE_V02;
+ break;
+ default:
+ set_server_cmd = eQMI_LOC_SERVER_TYPE_CDMA_PDE_V02;
+ break;
+ }
+
+ memset(&set_server_req, 0, sizeof(set_server_req));
+ memset(&set_server_ind, 0, sizeof(set_server_ind));
+
+ LOC_LOGD("%s:%d]:, ip = %u, port = %d\n", __func__, __LINE__, ip, port);
+
+ set_server_req.serverType = set_server_cmd;
+ set_server_req.ipv4Addr_valid = 1;
+ set_server_req.ipv4Addr.addr = ip;
+ set_server_req.ipv4Addr.port = port;
+
+ req_union.pSetServerReq = &set_server_req;
+
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_SERVER_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_SERVER_IND_V02,
+ &set_server_ind);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != set_server_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: error status = %s, set_server_ind.status = %s\n",
+ __func__,__LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(set_server_ind.status));
+ }
+
+ return convertErr(status);
+}
+
+/* Inject XTRA data, this module breaks down the XTRA
+ file into "chunks" and injects them one at a time */
+enum loc_api_adapter_err LocApiV02 :: setXtraData(
+ char* data, int length)
+{
+ locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
+ int total_parts;
+ uint8_t part;
+ uint16_t len_injected;
+
+ locClientReqUnionType req_union;
+ qmiLocInjectPredictedOrbitsDataReqMsgT_v02 inject_xtra;
+ qmiLocInjectPredictedOrbitsDataIndMsgT_v02 inject_xtra_ind;
+
+ req_union.pInjectPredictedOrbitsDataReq = &inject_xtra;
+
+ LOC_LOGD("%s:%d]: xtra size = %d\n", __func__, __LINE__, length);
+
+ inject_xtra.formatType_valid = 1;
+ inject_xtra.formatType = eQMI_LOC_PREDICTED_ORBITS_XTRA_V02;
+ inject_xtra.totalSize = length;
+
+ total_parts = ((length - 1) / QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02) + 1;
+
+ inject_xtra.totalParts = total_parts;
+
+ len_injected = 0; // O bytes injected
+
+ // XTRA injection starts with part 1
+ for (part = 1; part <= total_parts; part++)
+ {
+ inject_xtra.partNum = part;
+
+ if (QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02 > (length - len_injected))
+ {
+ inject_xtra.partData_len = length - len_injected;
+ }
+ else
+ {
+ inject_xtra.partData_len = QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02;
+ }
+
+ // copy data into the message
+ memcpy(inject_xtra.partData, data+len_injected, inject_xtra.partData_len);
+
+ LOC_LOGD("[%s:%d] part %d/%d, len = %d, total injected = %d\n",
+ __func__, __LINE__,
+ inject_xtra.partNum, total_parts, inject_xtra.partData_len,
+ len_injected);
+
+ memset(&inject_xtra_ind, 0, sizeof(inject_xtra_ind));
+ status = loc_sync_send_req( clientHandle,
+ QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02,
+ &inject_xtra_ind);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != inject_xtra_ind.status ||
+ inject_xtra.partNum != inject_xtra_ind.partNum)
+ {
+ LOC_LOGE ("%s:%d]: failed status = %s, inject_pos_ind.status = %s,"
+ " part num = %d, ind.partNum = %d\n", __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(inject_xtra_ind.status),
+ inject_xtra.partNum, inject_xtra_ind.partNum);
+ } else {
+ len_injected += inject_xtra.partData_len;
+ LOC_LOGD("%s:%d]: XTRA injected length: %d\n", __func__, __LINE__,
+ len_injected);
+ }
+ }
+
+ return convertErr(status);
+}
+
+/* Request the Xtra Server Url from the modem */
+enum loc_api_adapter_err LocApiV02 :: requestXtraServer()
+{
+ locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
+
+ locClientReqUnionType req_union;
+ qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02 request_xtra_server_ind;
+
+ memset(&request_xtra_server_ind, 0, sizeof(request_xtra_server_ind));
+
+ status = loc_sync_send_req( clientHandle,
+ QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02,
+ &request_xtra_server_ind);
+
+ if (status == eLOC_CLIENT_SUCCESS &&
+ eQMI_LOC_SUCCESS_V02 == request_xtra_server_ind.status &&
+ false != request_xtra_server_ind.serverList_valid &&
+ 0 != request_xtra_server_ind.serverList.serverList_len)
+ {
+ if (request_xtra_server_ind.serverList.serverList_len == 1)
+ {
+ reportXtraServer(request_xtra_server_ind.serverList.serverList[0].serverUrl,
+ "",
+ "",
+ QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
+ }
+ else if (request_xtra_server_ind.serverList.serverList_len == 2)
+ {
+ reportXtraServer(request_xtra_server_ind.serverList.serverList[0].serverUrl,
+ request_xtra_server_ind.serverList.serverList[1].serverUrl,
+ "",
+ QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
+ }
+ else
+ {
+ reportXtraServer(request_xtra_server_ind.serverList.serverList[0].serverUrl,
+ request_xtra_server_ind.serverList.serverList[1].serverUrl,
+ request_xtra_server_ind.serverList.serverList[2].serverUrl,
+ QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
+ }
+ }
+
+ return convertErr(status);
+}
+
+enum loc_api_adapter_err LocApiV02 :: atlOpenStatus(
+ int handle, int is_succ, char* apn, AGpsBearerType bear,
+ AGpsType agpsType)
+{
+ locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
+ locClientReqUnionType req_union;
+ qmiLocInformLocationServerConnStatusReqMsgT_v02 conn_status_req;
+ qmiLocInformLocationServerConnStatusIndMsgT_v02 conn_status_ind;
+
+
+ LOC_LOGD("%s:%d]: ATL open handle = %d, is_succ = %d, "
+ "APN = [%s], bearer = %d \n", __func__, __LINE__,
+ handle, is_succ, apn, bear);
+
+ memset(&conn_status_req, 0, sizeof(conn_status_req));
+ memset(&conn_status_ind, 0, sizeof(conn_status_ind));
+
+ // Fill in data
+ conn_status_req.connHandle = handle;
+
+ conn_status_req.requestType = eQMI_LOC_SERVER_REQUEST_OPEN_V02;
+
+ if(is_succ)
+ {
+ conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_SUCCESS_V02;
+
+ if(apn != NULL)
+ strlcpy(conn_status_req.apnProfile.apnName, apn,
+ sizeof(conn_status_req.apnProfile.apnName) );
+
+ switch(bear)
+ {
+ case AGPS_APN_BEARER_IPV4:
+ conn_status_req.apnProfile.pdnType =
+ eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4_V02;
+ conn_status_req.apnProfile_valid = 1;
+ break;
+
+ case AGPS_APN_BEARER_IPV6:
+ conn_status_req.apnProfile.pdnType =
+ eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV6_V02;
+ conn_status_req.apnProfile_valid = 1;
+ break;
+
+ case AGPS_APN_BEARER_IPV4V6:
+ conn_status_req.apnProfile.pdnType =
+ eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4V6_V02;
+ conn_status_req.apnProfile_valid = 1;
+ break;
+
+ case AGPS_APN_BEARER_INVALID:
+ conn_status_req.apnProfile_valid = 0;
+ break;
+
+ default:
+ LOC_LOGE("%s:%d]:invalid bearer type\n",__func__,__LINE__);
+ conn_status_req.apnProfile_valid = 0;
+ return LOC_API_ADAPTER_ERR_INVALID_HANDLE;
+ }
+
+ }
+ else
+ {
+ conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_FAILURE_V02;
+ }
+
+ req_union.pInformLocationServerConnStatusReq = &conn_status_req;
+
+ result = loc_sync_send_req(clientHandle,
+ QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02,
+ &conn_status_ind);
+
+ if(result != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != conn_status_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(result),
+ loc_get_v02_qmi_status_name(conn_status_ind.status));
+ }
+
+ return convertErr(result);
+
+}
+
+
+/* close atl connection */
+enum loc_api_adapter_err LocApiV02 :: atlCloseStatus(
+ int handle, int is_succ)
+{
+ locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
+ locClientReqUnionType req_union;
+ qmiLocInformLocationServerConnStatusReqMsgT_v02 conn_status_req;
+ qmiLocInformLocationServerConnStatusIndMsgT_v02 conn_status_ind;
+
+ LOC_LOGD("%s:%d]: ATL close handle = %d, is_succ = %d\n",
+ __func__, __LINE__, handle, is_succ);
+
+ memset(&conn_status_req, 0, sizeof(conn_status_req));
+ memset(&conn_status_ind, 0, sizeof(conn_status_ind));
+
+ // Fill in data
+ conn_status_req.connHandle = handle;
+
+ conn_status_req.requestType = eQMI_LOC_SERVER_REQUEST_CLOSE_V02;
+
+ if(is_succ)
+ {
+ conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_SUCCESS_V02;
+ }
+ else
+ {
+ conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_FAILURE_V02;
+ }
+
+ req_union.pInformLocationServerConnStatusReq = &conn_status_req;
+
+ result = loc_sync_send_req(clientHandle,
+ QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02,
+ &conn_status_ind);
+
+ if(result != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != conn_status_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(result),
+ loc_get_v02_qmi_status_name(conn_status_ind.status));
+ }
+
+ return convertErr(result);
+}
+
+/* set the SUPL version */
+enum loc_api_adapter_err LocApiV02 :: setSUPLVersion(uint32_t version)
+{
+ locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
+ locClientReqUnionType req_union;
+
+ qmiLocSetProtocolConfigParametersReqMsgT_v02 supl_config_req;
+ qmiLocSetProtocolConfigParametersIndMsgT_v02 supl_config_ind;
+
+ LOC_LOGD("%s:%d]: supl version = %d\n", __func__, __LINE__, version);
+
+
+ memset(&supl_config_req, 0, sizeof(supl_config_req));
+ memset(&supl_config_ind, 0, sizeof(supl_config_ind));
+
+ supl_config_req.suplVersion_valid = 1;
+ // SUPL version from MSByte to LSByte:
+ // (reserved)(major version)(minor version)(serviceIndicator)
+
+ if(version == 0x00020000) {
+ supl_config_req.suplVersion = eQMI_LOC_SUPL_VERSION_2_0_V02;
+ } else if (version == 0x00020002) {
+ supl_config_req.suplVersion = eQMI_LOC_SUPL_VERSION_2_0_2_V02;
+ } else {
+ supl_config_req.suplVersion = eQMI_LOC_SUPL_VERSION_1_0_V02;
+ }
+
+ req_union.pSetProtocolConfigParametersReq = &supl_config_req;
+
+ result = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02,
+ &supl_config_ind);
+
+ if(result != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != supl_config_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(result),
+ loc_get_v02_qmi_status_name(supl_config_ind.status));
+ }
+
+ return convertErr(result);
+}
+
+/* set the NMEA types mask */
+enum loc_api_adapter_err LocApiV02 :: setNMEATypes (uint32_t typesMask)
+{
+ locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
+ locClientReqUnionType req_union;
+
+ qmiLocSetNmeaTypesReqMsgT_v02 setNmeaTypesReqMsg;
+ qmiLocSetNmeaTypesIndMsgT_v02 setNmeaTypesIndMsg;
+
+ LOC_LOGD(" %s:%d]: setNMEATypes, mask = %u\n", __func__, __LINE__,typesMask);
+
+ memset(&setNmeaTypesReqMsg, 0, sizeof(setNmeaTypesReqMsg));
+ memset(&setNmeaTypesIndMsg, 0, sizeof(setNmeaTypesIndMsg));
+
+ setNmeaTypesReqMsg.nmeaSentenceType = typesMask;
+
+ req_union.pSetNmeaTypesReq = &setNmeaTypesReqMsg;
+
+ result = loc_sync_send_req( clientHandle,
+ QMI_LOC_SET_NMEA_TYPES_REQ_V02, req_union,
+ LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_NMEA_TYPES_IND_V02, &setNmeaTypesIndMsg);
+
+ // if success
+ if ( result != eLOC_CLIENT_SUCCESS )
+ {
+ 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(setNmeaTypesIndMsg.status));
+ }
+
+ return convertErr(result);
+}
+
+/* set the configuration for LTE positioning profile (LPP) */
+enum loc_api_adapter_err LocApiV02 :: setLPPConfig(uint32_t profile)
+{
+ locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
+ locClientReqUnionType req_union;
+ qmiLocSetProtocolConfigParametersReqMsgT_v02 lpp_config_req;
+ qmiLocSetProtocolConfigParametersIndMsgT_v02 lpp_config_ind;
+
+ LOC_LOGD("%s:%d]: lpp profile = %d\n", __func__, __LINE__, profile);
+
+ memset(&lpp_config_req, 0, sizeof(lpp_config_req));
+ memset(&lpp_config_ind, 0, sizeof(lpp_config_ind));
+
+ lpp_config_req.lppConfig_valid = 1;
+
+ lpp_config_req.lppConfig = profile;
+
+ req_union.pSetProtocolConfigParametersReq = &lpp_config_req;
+
+ result = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02,
+ &lpp_config_ind);
+
+ if(result != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != lpp_config_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(result),
+ loc_get_v02_qmi_status_name(lpp_config_ind.status));
+ }
+
+ return convertErr(result);
+}
+
+/* set the Sensor Configuration */
+enum loc_api_adapter_err LocApiV02 :: setSensorControlConfig(
+ int sensorsDisabled, int sensorProvider)
+{
+ locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
+ locClientReqUnionType req_union;
+
+ qmiLocSetSensorControlConfigReqMsgT_v02 sensor_config_req;
+ qmiLocSetSensorControlConfigIndMsgT_v02 sensor_config_ind;
+
+ LOC_LOGD("%s:%d]: sensors disabled = %d\n", __func__, __LINE__, sensorsDisabled);
+
+ memset(&sensor_config_req, 0, sizeof(sensor_config_req));
+ memset(&sensor_config_ind, 0, sizeof(sensor_config_ind));
+
+ sensor_config_req.sensorsUsage_valid = 1;
+ sensor_config_req.sensorsUsage = (sensorsDisabled == 1) ? eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_DISABLE_V02
+ : eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_ENABLE_V02;
+
+ sensor_config_req.sensorProvider_valid = 1;
+ sensor_config_req.sensorProvider = (sensorProvider == 1 || sensorProvider == 4) ?
+ eQMI_LOC_SENSOR_CONFIG_USE_PROVIDER_SSC_V02 :
+ eQMI_LOC_SENSOR_CONFIG_USE_PROVIDER_NATIVE_V02;
+
+ req_union.pSetSensorControlConfigReq = &sensor_config_req;
+
+ result = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02,
+ &sensor_config_ind);
+
+ if(result != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != sensor_config_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(result),
+ loc_get_v02_qmi_status_name(sensor_config_ind.status));
+ }
+
+ return convertErr(result);
+}
+
+/* set the Sensor Properties */
+enum loc_api_adapter_err LocApiV02 :: setSensorProperties(bool gyroBiasVarianceRandomWalk_valid, float gyroBiasVarianceRandomWalk,
+ bool accelBiasVarianceRandomWalk_valid, float accelBiasVarianceRandomWalk,
+ bool angleBiasVarianceRandomWalk_valid, float angleBiasVarianceRandomWalk,
+ bool rateBiasVarianceRandomWalk_valid, float rateBiasVarianceRandomWalk,
+ bool velocityBiasVarianceRandomWalk_valid, float velocityBiasVarianceRandomWalk)
+{
+ locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
+ locClientReqUnionType req_union;
+
+ qmiLocSetSensorPropertiesReqMsgT_v02 sensor_prop_req;
+ qmiLocSetSensorPropertiesIndMsgT_v02 sensor_prop_ind;
+
+ LOC_LOGI("%s:%d]: sensors prop: gyroBiasRandomWalk = %f, accelRandomWalk = %f, "
+ "angleRandomWalk = %f, rateRandomWalk = %f, velocityRandomWalk = %f\n",
+ __func__, __LINE__, gyroBiasVarianceRandomWalk, accelBiasVarianceRandomWalk,
+ angleBiasVarianceRandomWalk, rateBiasVarianceRandomWalk, velocityBiasVarianceRandomWalk);
+
+ memset(&sensor_prop_req, 0, sizeof(sensor_prop_req));
+ memset(&sensor_prop_ind, 0, sizeof(sensor_prop_ind));
+
+ /* Set the validity bit and value for each sensor property */
+ sensor_prop_req.gyroBiasVarianceRandomWalk_valid = gyroBiasVarianceRandomWalk_valid;
+ sensor_prop_req.gyroBiasVarianceRandomWalk = gyroBiasVarianceRandomWalk;
+
+ sensor_prop_req.accelerationRandomWalkSpectralDensity_valid = accelBiasVarianceRandomWalk_valid;
+ sensor_prop_req.accelerationRandomWalkSpectralDensity = accelBiasVarianceRandomWalk;
+
+ sensor_prop_req.angleRandomWalkSpectralDensity_valid = angleBiasVarianceRandomWalk_valid;
+ sensor_prop_req.angleRandomWalkSpectralDensity = angleBiasVarianceRandomWalk;
+
+ sensor_prop_req.rateRandomWalkSpectralDensity_valid = rateBiasVarianceRandomWalk_valid;
+ sensor_prop_req.rateRandomWalkSpectralDensity = rateBiasVarianceRandomWalk;
+
+ sensor_prop_req.velocityRandomWalkSpectralDensity_valid = velocityBiasVarianceRandomWalk_valid;
+ sensor_prop_req.velocityRandomWalkSpectralDensity = velocityBiasVarianceRandomWalk;
+
+ req_union.pSetSensorPropertiesReq = &sensor_prop_req;
+
+ result = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02,
+ &sensor_prop_ind);
+
+ if(result != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != sensor_prop_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(result),
+ loc_get_v02_qmi_status_name(sensor_prop_ind.status));
+ }
+
+ return convertErr(result);
+}
+
+/* set the Sensor Performance Config */
+enum loc_api_adapter_err LocApiV02 :: setSensorPerfControlConfig(int controlMode,
+ int accelSamplesPerBatch, int accelBatchesPerSec,
+ int gyroSamplesPerBatch, int gyroBatchesPerSec,
+ int accelSamplesPerBatchHigh, int accelBatchesPerSecHigh,
+ int gyroSamplesPerBatchHigh, int gyroBatchesPerSecHigh,
+ int algorithmConfig)
+{
+ locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
+ locClientReqUnionType req_union;
+
+ qmiLocSetSensorPerformanceControlConfigReqMsgT_v02 sensor_perf_config_req;
+ qmiLocSetSensorPerformanceControlConfigIndMsgT_v02 sensor_perf_config_ind;
+
+ LOC_LOGD("%s:%d]: Sensor Perf Control Config (performanceControlMode)(%u) "
+ "accel(#smp,#batches) (%u,%u) gyro(#smp,#batches) (%u,%u) "
+ "accel_high(#smp,#batches) (%u,%u) gyro_high(#smp,#batches) (%u,%u) "
+ "algorithmConfig(%u)\n",
+ __FUNCTION__,
+ __LINE__,
+ controlMode,
+ accelSamplesPerBatch,
+ accelBatchesPerSec,
+ gyroSamplesPerBatch,
+ gyroBatchesPerSec,
+ accelSamplesPerBatchHigh,
+ accelBatchesPerSecHigh,
+ gyroSamplesPerBatchHigh,
+ gyroBatchesPerSecHigh,
+ algorithmConfig
+ );
+
+ memset(&sensor_perf_config_req, 0, sizeof(sensor_perf_config_req));
+ memset(&sensor_perf_config_ind, 0, sizeof(sensor_perf_config_ind));
+
+ sensor_perf_config_req.performanceControlMode_valid = 1;
+ sensor_perf_config_req.performanceControlMode = (qmiLocSensorPerformanceControlModeEnumT_v02)controlMode;
+ sensor_perf_config_req.accelSamplingSpec_valid = 1;
+ sensor_perf_config_req.accelSamplingSpec.batchesPerSecond = accelBatchesPerSec;
+ sensor_perf_config_req.accelSamplingSpec.samplesPerBatch = accelSamplesPerBatch;
+ sensor_perf_config_req.gyroSamplingSpec_valid = 1;
+ sensor_perf_config_req.gyroSamplingSpec.batchesPerSecond = gyroBatchesPerSec;
+ sensor_perf_config_req.gyroSamplingSpec.samplesPerBatch = gyroSamplesPerBatch;
+ sensor_perf_config_req.accelSamplingSpecHigh_valid = 1;
+ sensor_perf_config_req.accelSamplingSpecHigh.batchesPerSecond = accelBatchesPerSecHigh;
+ sensor_perf_config_req.accelSamplingSpecHigh.samplesPerBatch = accelSamplesPerBatchHigh;
+ sensor_perf_config_req.gyroSamplingSpecHigh_valid = 1;
+ sensor_perf_config_req.gyroSamplingSpecHigh.batchesPerSecond = gyroBatchesPerSecHigh;
+ sensor_perf_config_req.gyroSamplingSpecHigh.samplesPerBatch = gyroSamplesPerBatchHigh;
+ sensor_perf_config_req.algorithmConfig_valid = 1;
+ sensor_perf_config_req.algorithmConfig = algorithmConfig;
+
+ req_union.pSetSensorPerformanceControlConfigReq = &sensor_perf_config_req;
+
+ result = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02,
+ &sensor_perf_config_ind);
+
+ if(result != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != sensor_perf_config_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(result),
+ loc_get_v02_qmi_status_name(sensor_perf_config_ind.status));
+ }
+
+ return convertErr(result);
+}
+
+/* set the Positioning Protocol on A-GLONASS system */
+enum loc_api_adapter_err LocApiV02 :: setAGLONASSProtocol(unsigned long aGlonassProtocol)
+{
+ locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
+ locClientReqUnionType req_union;
+ qmiLocSetProtocolConfigParametersReqMsgT_v02 aGlonassProtocol_req;
+ qmiLocSetProtocolConfigParametersIndMsgT_v02 aGlonassProtocol_ind;
+
+ memset(&aGlonassProtocol_req, 0, sizeof(aGlonassProtocol_req));
+ memset(&aGlonassProtocol_ind, 0, sizeof(aGlonassProtocol_ind));
+
+ aGlonassProtocol_req.assistedGlonassProtocolMask_valid = 1;
+ aGlonassProtocol_req.assistedGlonassProtocolMask = aGlonassProtocol;
+
+ req_union.pSetProtocolConfigParametersReq = &aGlonassProtocol_req;
+
+ LOC_LOGD("%s:%d]: aGlonassProtocolMask = 0x%x\n", __func__, __LINE__,
+ aGlonassProtocol_req.assistedGlonassProtocolMask);
+
+ result = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02,
+ &aGlonassProtocol_ind);
+
+ if(result != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != aGlonassProtocol_ind.status)
+ {
+ LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(result),
+ loc_get_v02_qmi_status_name(aGlonassProtocol_ind.status));
+ }
+
+ return convertErr(result);
+}
+
+
+/* set the technology being used for LPPe control-plane and user-plane protocol */
+enum loc_api_adapter_err LocApiV02 :: setLPPeProtocol(unsigned long lppeCP,unsigned long lppeUP)
+{
+ locClientStatusEnumType result = eLOC_CLIENT_SUCCESS;
+ locClientReqUnionType req_union;
+ qmiLocSetProtocolConfigParametersReqMsgT_v02 lppe_req;
+ qmiLocSetProtocolConfigParametersIndMsgT_v02 lppe_ind;
+ //CP config
+ memset(&lppe_req, 0, sizeof(lppe_req));
+ memset(&lppe_ind, 0, sizeof(lppe_ind));
+
+ lppe_req.lppeCpConfig_valid = 1;
+ lppe_req.lppeCpConfig = lppeCP;
+
+ req_union.pSetProtocolConfigParametersReq = &lppe_req;
+
+ LOC_LOGD("%s:%d]: lppeCpConfig = 0x%x \n", __func__, __LINE__,
+ lppe_req.lppeCpConfig);
+
+ 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,
+ &lppe_ind);
+
+ if(result != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != lppe_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(lppe_ind.status));
+ }
+
+ //UP Config
+ memset(&lppe_req, 0, sizeof(lppe_req));
+ memset(&lppe_ind, 0, sizeof(lppe_ind));
+ memset(&req_union, 0, sizeof(req_union));
+
+ lppe_req.lppeUpConfig_valid = 1;
+ lppe_req.lppeUpConfig = lppeUP;
+
+ req_union.pSetProtocolConfigParametersReq = &lppe_req;
+
+ LOC_LOGD("%s:%d]: lppeUpConfig = 0x%x\n", __func__, __LINE__,
+ lppe_req.lppeUpConfig);
+
+ 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,
+ &lppe_ind);
+
+ if(result != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != lppe_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(lppe_ind.status));
+ }
+
+ return convertErr(result);
+}
+
+/* Convert event mask from loc eng to loc_api_v02 format */
+locClientEventMaskType LocApiV02 :: convertMask(
+ LOC_API_ADAPTER_EVENT_MASK_T mask)
+{
+ locClientEventMaskType eventMask = 0;
+ LOC_LOGD("%s:%d]: adapter mask = %u\n", __func__, __LINE__, mask);
+
+ if (mask & LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT)
+ eventMask |= QMI_LOC_EVENT_MASK_POSITION_REPORT_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_SATELLITE_REPORT)
+ eventMask |= QMI_LOC_EVENT_MASK_GNSS_SV_INFO_V02;
+
+ /* treat NMEA_1Hz and NMEA_POSITION_REPORT the same*/
+ if ((mask & LOC_API_ADAPTER_BIT_NMEA_POSITION_REPORT) ||
+ (mask & LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT) )
+ eventMask |= QMI_LOC_EVENT_MASK_NMEA_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST)
+ eventMask |= QMI_LOC_EVENT_MASK_NI_NOTIFY_VERIFY_REQ_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST)
+ {
+ // TBD: This needs to be decoupled in the HAL
+ eventMask |= QMI_LOC_EVENT_MASK_INJECT_PREDICTED_ORBITS_REQ_V02;
+ eventMask |= QMI_LOC_EVENT_MASK_INJECT_TIME_REQ_V02;
+ eventMask |= QMI_LOC_EVENT_MASK_INJECT_POSITION_REQ_V02;
+ }
+
+ if (mask & LOC_API_ADAPTER_BIT_STATUS_REPORT)
+ {
+ eventMask |= (QMI_LOC_EVENT_MASK_ENGINE_STATE_V02);
+ }
+
+ if (mask & LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST)
+ eventMask |= QMI_LOC_EVENT_MASK_LOCATION_SERVER_CONNECTION_REQ_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_REQUEST_WIFI)
+ eventMask |= QMI_LOC_EVENT_MASK_WIFI_REQ_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_SENSOR_STATUS)
+ eventMask |= QMI_LOC_EVENT_MASK_SENSOR_STREAMING_READY_STATUS_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_REQUEST_TIME_SYNC)
+ eventMask |= QMI_LOC_EVENT_MASK_TIME_SYNC_REQ_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_REPORT_SPI)
+ eventMask |= QMI_LOC_EVENT_MASK_SET_SPI_STREAMING_REPORT_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_REPORT_NI_GEOFENCE)
+ eventMask |= QMI_LOC_EVENT_MASK_NI_GEOFENCE_NOTIFICATION_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_GEOFENCE_GEN_ALERT)
+ eventMask |= QMI_LOC_EVENT_MASK_GEOFENCE_GEN_ALERT_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_REPORT_GENFENCE_BREACH)
+ eventMask |= QMI_LOC_EVENT_MASK_GEOFENCE_BREACH_NOTIFICATION_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_BATCHED_GENFENCE_BREACH_REPORT)
+ eventMask |= QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_BREACH_NOTIFICATION_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_PEDOMETER_CTRL)
+ eventMask |= QMI_LOC_EVENT_MASK_PEDOMETER_CONTROL_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_REPORT_GENFENCE_DWELL)
+ eventMask |= QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_DWELL_NOTIFICATION_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_MOTION_CTRL)
+ eventMask |= QMI_LOC_EVENT_MASK_MOTION_DATA_CONTROL_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_REQUEST_WIFI_AP_DATA)
+ eventMask |= QMI_LOC_EVENT_MASK_INJECT_WIFI_AP_DATA_REQ_V02;
+
+ if(mask & LOC_API_ADAPTER_BIT_BATCH_FULL)
+ eventMask |= QMI_LOC_EVENT_MASK_BATCH_FULL_NOTIFICATION_V02;
+
+ if(mask & LOC_API_ADAPTER_BIT_BATCHED_POSITION_REPORT)
+ eventMask |= QMI_LOC_EVENT_MASK_LIVE_BATCHED_POSITION_REPORT_V02;
+
+ if(mask & LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT_REPORT)
+ eventMask |= QMI_LOC_EVENT_MASK_GNSS_MEASUREMENT_REPORT_V02;
+
+ if(mask & LOC_API_ADAPTER_BIT_GNSS_SV_POLYNOMIAL_REPORT)
+ eventMask |= QMI_LOC_EVENT_MASK_GNSS_SV_POLYNOMIAL_REPORT_V02;
+
+ // for GDT
+ if(mask & LOC_API_ADAPTER_BIT_GDT_UPLOAD_BEGIN_REQ)
+ eventMask |= QMI_LOC_EVENT_MASK_GDT_UPLOAD_BEGIN_REQ_V02;
+
+ if(mask & LOC_API_ADAPTER_BIT_GDT_UPLOAD_END_REQ)
+ eventMask |= QMI_LOC_EVENT_MASK_GDT_UPLOAD_END_REQ_V02;
+
+ if (mask & LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT)
+ eventMask |= QMI_LOC_EVENT_MASK_GNSS_MEASUREMENT_REPORT_V02;
+
+ if(mask & LOC_API_ADAPTER_BIT_REQUEST_TIMEZONE)
+ eventMask |= QMI_LOC_EVENT_MASK_GET_TIME_ZONE_REQ_V02;
+ return eventMask;
+}
+
+qmiLocLockEnumT_v02 LocApiV02 :: convertGpsLockMask(LOC_GPS_LOCK_MASK lockMask)
+{
+ /* GPS HAL uses power voting through GPS Lock mask.
+ When QCA1530 daemon is present two values are used: 101 and 103.*/
+ if ( 101 == lockMask || 103 == lockMask )
+ {
+ return (qmiLocLockEnumT_v02)lockMask;
+ }
+ if (isGpsLockAll(lockMask))
+ return eQMI_LOC_LOCK_ALL_V02;
+ if (isGpsLockMO(lockMask))
+ return eQMI_LOC_LOCK_MI_V02;
+ if (isGpsLockMT(lockMask))
+ return eQMI_LOC_LOCK_MT_V02;
+ if (isGpsLockNone(lockMask))
+ return eQMI_LOC_LOCK_NONE_V02;
+ return (qmiLocLockEnumT_v02)lockMask;
+}
+
+/* Convert error from loc_api_v02 to loc eng format*/
+enum loc_api_adapter_err LocApiV02 :: convertErr(
+ locClientStatusEnumType status)
+{
+ switch( status)
+ {
+ case eLOC_CLIENT_SUCCESS:
+ return LOC_API_ADAPTER_ERR_SUCCESS;
+
+ case eLOC_CLIENT_FAILURE_GENERAL:
+ return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+
+ case eLOC_CLIENT_FAILURE_UNSUPPORTED:
+ return LOC_API_ADAPTER_ERR_UNSUPPORTED;
+
+ case eLOC_CLIENT_FAILURE_INVALID_PARAMETER:
+ return LOC_API_ADAPTER_ERR_INVALID_PARAMETER;
+
+ case eLOC_CLIENT_FAILURE_ENGINE_BUSY:
+ return LOC_API_ADAPTER_ERR_ENGINE_BUSY;
+
+ case eLOC_CLIENT_FAILURE_PHONE_OFFLINE:
+ return LOC_API_ADAPTER_ERR_PHONE_OFFLINE;
+
+ case eLOC_CLIENT_FAILURE_TIMEOUT:
+ return LOC_API_ADAPTER_ERR_TIMEOUT;
+
+ case eLOC_CLIENT_FAILURE_INVALID_HANDLE:
+ return LOC_API_ADAPTER_ERR_INVALID_HANDLE;
+
+ case eLOC_CLIENT_FAILURE_SERVICE_NOT_PRESENT:
+ return LOC_API_ADAPTER_ERR_SERVICE_NOT_PRESENT;
+
+ case eLOC_CLIENT_FAILURE_INTERNAL:
+ return LOC_API_ADAPTER_ERR_INTERNAL;
+
+ default:
+ return LOC_API_ADAPTER_ERR_FAILURE;
+ }
+}
+
+/* convert position report to loc eng format and send the converted
+ position to loc eng */
+
+void LocApiV02 :: reportPosition (
+ const qmiLocEventPositionReportIndMsgT_v02 *location_report_ptr)
+{
+ UlpLocation location;
+ LocPosTechMask tech_Mask = LOC_POS_TECH_MASK_DEFAULT;
+ LOC_LOGD("Reporting position from V2 Adapter\n");
+ memset(&location, 0, sizeof (UlpLocation));
+ location.size = sizeof(location);
+ GpsLocationExtended locationExtended;
+ memset(&locationExtended, 0, sizeof (GpsLocationExtended));
+ locationExtended.size = sizeof(locationExtended);
+ if( clock_gettime( CLOCK_BOOTTIME, &locationExtended.timeStamp.apTimeStamp)== 0 )
+ {
+ locationExtended.timeStamp.apTimeStampUncertaintyMs = (float)ap_timestamp_uncertainty;
+
+ }
+ else
+ {
+ locationExtended.timeStamp.apTimeStampUncertaintyMs = FLT_MAX;
+ LOC_LOGE("%s:%d Error in clock_gettime() ",__func__, __LINE__);
+ }
+ LOC_LOGD("%s:%d QMI_PosPacketTime %ld (sec) %ld (nsec)", __func__, __LINE__,
+ locationExtended.timeStamp.apTimeStamp.tv_sec,
+ locationExtended.timeStamp.apTimeStamp.tv_nsec);
+ // 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( (1 == location_report_ptr->latitude_valid) &&
+ (1 == location_report_ptr->longitude_valid))
+ {
+ location.gpsLocation.flags |= GPS_LOCATION_HAS_LAT_LONG;
+ location.gpsLocation.latitude = location_report_ptr->latitude;
+ location.gpsLocation.longitude = location_report_ptr->longitude;
+
+ // Time stamp (UTC)
+ if(location_report_ptr->timestampUtc_valid == 1)
+ {
+ location.gpsLocation.timestamp = location_report_ptr->timestampUtc;
+ }
+
+ // Altitude
+ if(location_report_ptr->altitudeWrtEllipsoid_valid == 1 )
+ {
+ location.gpsLocation.flags |= GPS_LOCATION_HAS_ALTITUDE;
+ location.gpsLocation.altitude = location_report_ptr->altitudeWrtEllipsoid;
+ }
+
+ // Speed
+ if(location_report_ptr->speedHorizontal_valid == 1)
+ {
+ location.gpsLocation.flags |= GPS_LOCATION_HAS_SPEED;
+ location.gpsLocation.speed = location_report_ptr->speedHorizontal;
+ }
+
+ // Heading
+ if(location_report_ptr->heading_valid == 1)
+ {
+ location.gpsLocation.flags |= GPS_LOCATION_HAS_BEARING;
+ location.gpsLocation.bearing = location_report_ptr->heading;
+ }
+
+ // Uncertainty (circular)
+ if (location_report_ptr->horUncCircular_valid) {
+ location.gpsLocation.flags |= GPS_LOCATION_HAS_ACCURACY;
+ location.gpsLocation.accuracy = location_report_ptr->horUncCircular;
+ } else if (location_report_ptr->horUncEllipseSemiMinor_valid &&
+ location_report_ptr->horUncEllipseSemiMajor_valid) {
+ location.gpsLocation.flags |= GPS_LOCATION_HAS_ACCURACY;
+ location.gpsLocation.accuracy =
+ sqrt((location_report_ptr->horUncEllipseSemiMinor *
+ location_report_ptr->horUncEllipseSemiMinor) +
+ (location_report_ptr->horUncEllipseSemiMajor *
+ location_report_ptr->horUncEllipseSemiMajor));
+ }
+
+ // If horConfidence_valid is true, and horConfidence value is less than 68%
+ // then scale the accuracy value to 68% confidence.
+ if (location_report_ptr->horConfidence_valid)
+ {
+ scaleAccuracyTo68PercentConfidence(location_report_ptr->horConfidence,
+ location.gpsLocation);
+ }
+
+ // Technology Mask
+ tech_Mask |= location_report_ptr->technologyMask;
+
+ //Mark the location source as from GNSS
+ location.gpsLocation.flags |= LOCATION_HAS_SOURCE_INFO;
+ location.position_source = ULP_LOCATION_IS_FROM_GNSS;
+ if (location_report_ptr->magneticDeviation_valid)
+ {
+ locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_MAG_DEV;
+ locationExtended.magneticDeviation = location_report_ptr->magneticDeviation;
+ }
+
+ if (location_report_ptr->DOP_valid)
+ {
+ locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_DOP;
+ locationExtended.pdop = location_report_ptr->DOP.PDOP;
+ locationExtended.hdop = location_report_ptr->DOP.HDOP;
+ locationExtended.vdop = location_report_ptr->DOP.VDOP;
+ }
+
+ if (location_report_ptr->altitudeWrtMeanSeaLevel_valid)
+ {
+ locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL;
+ locationExtended.altitudeMeanSeaLevel = location_report_ptr->altitudeWrtMeanSeaLevel;
+ }
+
+ if (location_report_ptr->vertUnc_valid)
+ {
+ locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_VERT_UNC;
+ locationExtended.vert_unc = location_report_ptr->vertUnc;
+ }
+
+ if (location_report_ptr->speedUnc_valid)
+ {
+ locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_SPEED_UNC;
+ locationExtended.speed_unc = location_report_ptr->speedUnc;
+ }
+ if (location_report_ptr->headingUnc_valid)
+ {
+ locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_BEARING_UNC;
+ locationExtended.bearing_unc = location_report_ptr->headingUnc;
+ }
+ if (location_report_ptr->horReliability_valid)
+ {
+ locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_HOR_RELIABILITY;
+ switch(location_report_ptr->horReliability)
+ {
+ case eQMI_LOC_RELIABILITY_NOT_SET_V02 :
+ locationExtended.horizontal_reliability = LOC_RELIABILITY_NOT_SET;
+ break;
+ case eQMI_LOC_RELIABILITY_VERY_LOW_V02 :
+ locationExtended.horizontal_reliability = LOC_RELIABILITY_VERY_LOW;
+ break;
+ case eQMI_LOC_RELIABILITY_LOW_V02 :
+ locationExtended.horizontal_reliability = LOC_RELIABILITY_LOW;
+ break;
+ case eQMI_LOC_RELIABILITY_MEDIUM_V02 :
+ locationExtended.horizontal_reliability = LOC_RELIABILITY_MEDIUM;
+ break;
+ case eQMI_LOC_RELIABILITY_HIGH_V02 :
+ locationExtended.horizontal_reliability = LOC_RELIABILITY_HIGH;
+ break;
+ default:
+ locationExtended.horizontal_reliability = LOC_RELIABILITY_NOT_SET;
+ break;
+ }
+ }
+ if (location_report_ptr->vertReliability_valid)
+ {
+ locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_VERT_RELIABILITY;
+ switch(location_report_ptr->vertReliability)
+ {
+ case eQMI_LOC_RELIABILITY_NOT_SET_V02 :
+ locationExtended.vertical_reliability = LOC_RELIABILITY_NOT_SET;
+ break;
+ case eQMI_LOC_RELIABILITY_VERY_LOW_V02 :
+ locationExtended.vertical_reliability = LOC_RELIABILITY_VERY_LOW;
+ break;
+ case eQMI_LOC_RELIABILITY_LOW_V02 :
+ locationExtended.vertical_reliability = LOC_RELIABILITY_LOW;
+ break;
+ case eQMI_LOC_RELIABILITY_MEDIUM_V02 :
+ locationExtended.vertical_reliability = LOC_RELIABILITY_MEDIUM;
+ break;
+ case eQMI_LOC_RELIABILITY_HIGH_V02 :
+ locationExtended.vertical_reliability = LOC_RELIABILITY_HIGH;
+ break;
+ default:
+ locationExtended.vertical_reliability = LOC_RELIABILITY_NOT_SET;
+ break;
+ }
+ }
+ if (location_report_ptr->horUncEllipseSemiMajor_valid)
+ {
+ locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_MAJOR;
+ locationExtended.horUncEllipseSemiMajor = location_report_ptr->horUncEllipseSemiMajor;
+ }
+ if (location_report_ptr->horUncEllipseSemiMinor_valid)
+ {
+ locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_MINOR;
+ locationExtended.horUncEllipseSemiMinor = location_report_ptr->horUncEllipseSemiMinor;
+ }
+ if (location_report_ptr->horUncEllipseOrientAzimuth_valid)
+ {
+ locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_AZIMUTH;
+ locationExtended.horUncEllipseOrientAzimuth = location_report_ptr->horUncEllipseOrientAzimuth;
+ }
+
+ if((0 == location_report_ptr->latitude) &&
+ (0 == location_report_ptr->latitude) &&
+ (1 == location_report_ptr->horReliability_valid) &&
+ (eQMI_LOC_RELIABILITY_NOT_SET_V02 ==
+ location_report_ptr->horReliability))
+ {
+ /*Only BlankNMEA sentence needs to be processed and sent, position
+ * shall not be sent to framework if both lat,long is 0 & horReliability
+ * not set, hence we report session failure status */
+ LocApiBase::reportPosition( location,
+ locationExtended,
+ (void*)location_report_ptr,
+ LOC_SESS_FAILURE,
+ tech_Mask);
+ }
+ else
+ {
+ LocApiBase::reportPosition( location,
+ locationExtended,
+ (void*)location_report_ptr,
+ (location_report_ptr->sessionStatus
+ == eQMI_LOC_SESS_STATUS_IN_PROGRESS_V02 ?
+ LOC_SESS_INTERMEDIATE : LOC_SESS_SUCCESS),
+ tech_Mask);
+ }
+ }
+ }
+ else
+ {
+ LocApiBase::reportPosition(location,
+ locationExtended,
+ NULL,
+ LOC_SESS_FAILURE);
+
+ LOC_LOGD("%s:%d]: Ignoring position report with sess status = %d, "
+ "fix id = %u\n", __func__, __LINE__,
+ location_report_ptr->sessionStatus,
+ location_report_ptr->fixId );
+ }
+}
+
+/* convert satellite report to loc eng format and send the converted
+ report to loc eng */
+void LocApiV02 :: reportSv (
+ const qmiLocEventGnssSvInfoIndMsgT_v02 *gnss_report_ptr)
+{
+ GnssSvStatus SvStatus;
+ GpsLocationExtended locationExtended;
+ int num_svs_max, i;
+ const qmiLocSvInfoStructT_v02 *sv_info_ptr;
+
+ LOC_LOGV ("%s:%d]: num of sv = %d, validity = %d, altitude assumed = %u \n",
+ __func__, __LINE__, gnss_report_ptr->svList_len,
+ gnss_report_ptr->svList_valid,
+ gnss_report_ptr->altitudeAssumed);
+
+ num_svs_max = 0;
+ memset (&SvStatus, 0, sizeof (GnssSvStatus));
+ memset(&locationExtended, 0, sizeof (GpsLocationExtended));
+
+ SvStatus.size = sizeof(GnssSvStatus);
+ locationExtended.size = sizeof(locationExtended);
+ if(gnss_report_ptr->svList_valid == 1)
+ {
+ num_svs_max = gnss_report_ptr->svList_len;
+ if(num_svs_max > GNSS_MAX_SVS)
+ {
+ num_svs_max = GNSS_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 ))
+ {
+ GnssSvFlags flags = GNSS_SV_FLAGS_NONE;
+
+ SvStatus.gnss_sv_list[SvStatus.num_svs].size = sizeof(GnssSvInfo);
+ switch (sv_info_ptr->system)
+ {
+ case eQMI_LOC_SV_SYSTEM_GPS_V02:
+ SvStatus.gnss_sv_list[SvStatus.num_svs].svid = sv_info_ptr->gnssSvId;
+ SvStatus.gnss_sv_list[SvStatus.num_svs].constellation = GNSS_CONSTELLATION_GPS;
+ break;
+
+ case eQMI_LOC_SV_SYSTEM_GALILEO_V02:
+ SvStatus.gnss_sv_list[SvStatus.num_svs].svid = sv_info_ptr->gnssSvId-300;
+ SvStatus.gnss_sv_list[SvStatus.num_svs].constellation = GNSS_CONSTELLATION_GALILEO;
+ break;
+
+ case eQMI_LOC_SV_SYSTEM_SBAS_V02:
+ SvStatus.gnss_sv_list[SvStatus.num_svs].svid = sv_info_ptr->gnssSvId;
+ SvStatus.gnss_sv_list[SvStatus.num_svs].constellation = GNSS_CONSTELLATION_SBAS;
+ break;
+
+ case eQMI_LOC_SV_SYSTEM_GLONASS_V02:
+ SvStatus.gnss_sv_list[SvStatus.num_svs].svid = sv_info_ptr->gnssSvId;
+ SvStatus.gnss_sv_list[SvStatus.num_svs].constellation = GNSS_CONSTELLATION_GLONASS;
+ break;
+
+ case eQMI_LOC_SV_SYSTEM_BDS_V02:
+ SvStatus.gnss_sv_list[SvStatus.num_svs].svid = sv_info_ptr->gnssSvId - 200;
+ SvStatus.gnss_sv_list[SvStatus.num_svs].constellation = GNSS_CONSTELLATION_BEIDOU;
+ break;
+
+ case eQMI_LOC_SV_SYSTEM_QZSS_V02:
+ SvStatus.gnss_sv_list[SvStatus.num_svs].svid = sv_info_ptr->gnssSvId;
+ SvStatus.gnss_sv_list[SvStatus.num_svs].constellation = GNSS_CONSTELLATION_QZSS;
+ break;
+
+ case eQMI_LOC_SV_SYSTEM_COMPASS_V02:
+ default:
+ SvStatus.gnss_sv_list[SvStatus.num_svs].svid = sv_info_ptr->gnssSvId;
+ SvStatus.gnss_sv_list[SvStatus.num_svs].constellation = GNSS_CONSTELLATION_UNKNOWN;
+ break;
+ }
+
+ if (sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_SNR_V02)
+ {
+ SvStatus.gnss_sv_list[SvStatus.num_svs].c_n0_dbhz = sv_info_ptr->snr;
+ }
+
+ if (sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_ELEVATION_V02)
+ {
+ SvStatus.gnss_sv_list[SvStatus.num_svs].elevation = sv_info_ptr->elevation;
+ }
+
+ if (sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_AZIMUTH_V02)
+ {
+ SvStatus.gnss_sv_list[SvStatus.num_svs].azimuth = sv_info_ptr->azimuth;
+ }
+
+ 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)
+ {
+ flags |= GNSS_SV_FLAGS_HAS_EPHEMERIS_DATA;
+ }
+ if (sv_info_ptr->svInfoMask &
+ QMI_LOC_SVINFO_MASK_HAS_ALMANAC_V02)
+ {
+ flags |= GNSS_SV_FLAGS_HAS_ALMANAC_DATA;
+ }
+ }
+
+ /* Even if modem stops tracking some SV’s, it reports them in the measurement
+ report with Ephermeris/Alamanac data with 0 SNR. So in addition to check for
+ availability of Alm or Eph data, also check for SNR > 0 to indicate SV is
+ used in fix. */
+ if ((sv_info_ptr->validMask &
+ QMI_LOC_SV_INFO_MASK_VALID_PROCESS_STATUS_V02)
+ &&
+ (sv_info_ptr->svStatus == eQMI_LOC_SV_STATUS_TRACK_V02)
+ &&
+ (sv_info_ptr->snr > 0)
+ &&
+ ((flags & GNSS_SV_FLAGS_HAS_EPHEMERIS_DATA)
+ ||
+ (flags & GNSS_SV_FLAGS_HAS_ALMANAC_DATA)))
+ {
+ flags |= GNSS_SV_FLAGS_USED_IN_FIX;
+ }
+
+ SvStatus.gnss_sv_list[SvStatus.num_svs].flags = flags;
+
+ SvStatus.num_svs++;
+ }
+ }
+ }
+
+ if (SvStatus.num_svs >= 0)
+ {
+ LOC_LOGV ("%s:%d]: firing SV callback\n", __func__, __LINE__);
+ LocApiBase::reportSv(SvStatus,
+ locationExtended,
+ (void*)gnss_report_ptr);
+ }
+}
+
+/* convert satellite measurementreport to loc eng format and send the converted
+ report to loc eng */
+void LocApiV02 :: reportSvMeasurement (
+ const qmiLocEventGnssSvMeasInfoIndMsgT_v02 *gnss_raw_measurement_ptr)
+{
+ GnssSvMeasurementSet svMeasurementSet;
+ memset(&svMeasurementSet, 0, sizeof(GnssSvMeasurementSet));
+ svMeasurementSet.size = sizeof(svMeasurementSet);
+
+ if( clock_gettime( CLOCK_BOOTTIME, &svMeasurementSet.timeStamp.apTimeStamp)== 0 )
+ {
+ svMeasurementSet.timeStamp.apTimeStampUncertaintyMs = (float)ap_timestamp_uncertainty;
+ }
+ else
+ {
+ svMeasurementSet.timeStamp.apTimeStampUncertaintyMs = FLT_MAX;
+ LOC_LOGE("%s:%d Error in clock_gettime() ",__func__, __LINE__);
+ }
+ LOC_LOGD("%s:%d QMI_MeasPacketTime %ld (sec) %ld (nsec)",__func__,__LINE__,
+ svMeasurementSet.timeStamp.apTimeStamp.tv_sec,
+ svMeasurementSet.timeStamp.apTimeStamp.tv_nsec);
+
+ LOC_LOGI("[SvMeas] SeqNum: %d, MaxMsgNum: %d, MeasValid: %d, #of SV: %d\n",
+ gnss_raw_measurement_ptr->seqNum,
+ gnss_raw_measurement_ptr->maxMessageNum,
+ gnss_raw_measurement_ptr->svMeasurement_valid,
+ (gnss_raw_measurement_ptr->svMeasurement_valid)?
+ gnss_raw_measurement_ptr->svMeasurement_len : 0);
+
+ svMeasurementSet.seqNum = gnss_raw_measurement_ptr->seqNum;
+ svMeasurementSet.maxMessageNum = gnss_raw_measurement_ptr->maxMessageNum;
+
+ if(1 == gnss_raw_measurement_ptr->rcvrClockFrequencyInfo_valid)
+ {
+ qmiLocRcvrClockFrequencyInfoStructT_v02* rcvClockFreqInfo =
+ (qmiLocRcvrClockFrequencyInfoStructT_v02*) &gnss_raw_measurement_ptr->rcvrClockFrequencyInfo;
+
+ svMeasurementSet.clockFreq.size = sizeof(Gnss_LocRcvrClockFrequencyInfoStructType);
+ svMeasurementSet.clockFreqValid = gnss_raw_measurement_ptr->rcvrClockFrequencyInfo_valid;
+ svMeasurementSet.clockFreq.clockDrift =
+ gnss_raw_measurement_ptr->rcvrClockFrequencyInfo.clockDrift;
+ svMeasurementSet.clockFreq.clockDriftUnc =
+ gnss_raw_measurement_ptr->rcvrClockFrequencyInfo.clockDriftUnc;
+ svMeasurementSet.clockFreq.sourceOfFreq = (Gnss_LocSourceofFreqEnumType)
+ gnss_raw_measurement_ptr->rcvrClockFrequencyInfo.sourceOfFreq;
+
+ LOC_LOGV("FreqInfo:: Drift: %f, DriftUnc: %f",
+ svMeasurementSet.clockFreq.clockDrift,
+ svMeasurementSet.clockFreq.clockDriftUnc);
+ }
+
+ if((1 == gnss_raw_measurement_ptr->leapSecondInfo_valid) &&
+ (0 == gnss_raw_measurement_ptr->leapSecondInfo.leapSecUnc) )
+ {
+ qmiLocLeapSecondInfoStructT_v02* leapSecond =
+ (qmiLocLeapSecondInfoStructT_v02*)&gnss_raw_measurement_ptr->leapSecondInfo;
+
+ svMeasurementSet.leapSec.size = sizeof(Gnss_LeapSecondInfoStructType);
+ svMeasurementSet.leapSecValid = (bool)gnss_raw_measurement_ptr->leapSecondInfo_valid;
+ svMeasurementSet.leapSec.leapSec = gnss_raw_measurement_ptr->leapSecondInfo.leapSec;
+ svMeasurementSet.leapSec.leapSecUnc = gnss_raw_measurement_ptr->leapSecondInfo.leapSecUnc;
+ LOC_LOGV("leapSecondInfo:: leapSec: %d, leapSecUnc: %d",
+ svMeasurementSet.leapSec.leapSec, svMeasurementSet.leapSec.leapSecUnc);
+ }
+
+ if(1 == gnss_raw_measurement_ptr->gpsGloInterSystemBias_valid)
+ {
+ qmiLocInterSystemBiasStructT_v02* interSystemBias =
+ (qmiLocInterSystemBiasStructT_v02*)&gnss_raw_measurement_ptr->gpsGloInterSystemBias;
+
+ getInterSystemTimeBias("gpsGloInterSystemBias",
+ svMeasurementSet.gpsGloInterSystemBias, interSystemBias);
+ }
+
+ if(1 == gnss_raw_measurement_ptr->gpsBdsInterSystemBias_valid)
+ {
+ qmiLocInterSystemBiasStructT_v02* interSystemBias =
+ (qmiLocInterSystemBiasStructT_v02*)&gnss_raw_measurement_ptr->gpsBdsInterSystemBias;
+
+ getInterSystemTimeBias("gpsBdsInterSystemBias",
+ svMeasurementSet.gpsBdsInterSystemBias, interSystemBias);
+ }
+
+ if(1 == gnss_raw_measurement_ptr->gpsGalInterSystemBias_valid)
+ {
+ qmiLocInterSystemBiasStructT_v02* interSystemBias =
+ (qmiLocInterSystemBiasStructT_v02*)&gnss_raw_measurement_ptr->gpsGalInterSystemBias;
+
+ getInterSystemTimeBias("gpsGalInterSystemBias",
+ svMeasurementSet.gpsGalInterSystemBias, interSystemBias);
+ }
+
+ if(1 == gnss_raw_measurement_ptr->bdsGloInterSystemBias_valid)
+ {
+ qmiLocInterSystemBiasStructT_v02* interSystemBias =
+ (qmiLocInterSystemBiasStructT_v02*)&gnss_raw_measurement_ptr->bdsGloInterSystemBias;
+
+ getInterSystemTimeBias("bdsGloInterSystemBias",
+ svMeasurementSet.bdsGloInterSystemBias, interSystemBias);
+ }
+
+ if(1 == gnss_raw_measurement_ptr->galGloInterSystemBias_valid)
+ {
+ qmiLocInterSystemBiasStructT_v02* interSystemBias =
+ (qmiLocInterSystemBiasStructT_v02*)&gnss_raw_measurement_ptr->galGloInterSystemBias;
+
+ getInterSystemTimeBias("galGloInterSystemBias",
+ svMeasurementSet.galGloInterSystemBias, interSystemBias);
+ }
+
+ if(1 == gnss_raw_measurement_ptr->galBdsInterSystemBias_valid)
+ {
+ qmiLocInterSystemBiasStructT_v02* interSystemBias =
+ (qmiLocInterSystemBiasStructT_v02*)&gnss_raw_measurement_ptr->galBdsInterSystemBias;
+
+ getInterSystemTimeBias("galBdsInterSystemBias",
+ svMeasurementSet.galBdsInterSystemBias,interSystemBias);
+ }
+
+ svMeasurementSet.gnssMeas.size = sizeof(Gnss_SVMeasurementStructType);
+ svMeasurementSet.gnssMeas.system = (Gnss_LocSvSystemEnumType)gnss_raw_measurement_ptr->system;
+
+ if(1 == gnss_raw_measurement_ptr->systemTime_valid)
+ {
+ svMeasurementSet.gnssMeas.isSystemTimeValid = gnss_raw_measurement_ptr->systemTime_valid;
+ svMeasurementSet.gnssMeas.systemTime.size = sizeof(Gnss_LocSystemTimeStructType);
+
+ svMeasurementSet.gnssMeas.systemTime.systemWeek =
+ gnss_raw_measurement_ptr->systemTime.systemWeek;
+
+ svMeasurementSet.gnssMeas.systemTime.systemMsec =
+ gnss_raw_measurement_ptr->systemTime.systemMsec;
+
+ svMeasurementSet.gnssMeas.systemTime.systemClkTimeBias =
+ gnss_raw_measurement_ptr->systemTime.systemClkTimeBias;
+
+ svMeasurementSet.gnssMeas.systemTime.systemClkTimeUncMs =
+ gnss_raw_measurement_ptr->systemTime.systemClkTimeUncMs;
+ }
+
+ if(1 == gnss_raw_measurement_ptr->gloTime_valid)
+ {
+ svMeasurementSet.gnssMeas.isGloTime_valid = gnss_raw_measurement_ptr->gloTime_valid;
+ svMeasurementSet.gnssMeas.gloTime.size = sizeof(Gnss_LocGloTimeStructType);
+
+ svMeasurementSet.gnssMeas.gloTime.gloDays = gnss_raw_measurement_ptr->gloTime.gloDays;
+ svMeasurementSet.gnssMeas.gloTime.gloFourYear = gnss_raw_measurement_ptr->gloTime.gloFourYear;
+ svMeasurementSet.gnssMeas.gloTime.gloMsec = gnss_raw_measurement_ptr->gloTime.gloMsec;
+ svMeasurementSet.gnssMeas.gloTime.gloClkTimeBias = gnss_raw_measurement_ptr->gloTime.gloClkTimeBias;
+ svMeasurementSet.gnssMeas.gloTime.gloClkTimeUncMs = gnss_raw_measurement_ptr->gloTime.gloClkTimeUncMs;
+ }
+
+ if(1 == gnss_raw_measurement_ptr->systemTimeExt_valid)
+ {
+ svMeasurementSet.gnssMeas.isSystemTimeExt_valid = gnss_raw_measurement_ptr->systemTimeExt_valid;
+ svMeasurementSet.gnssMeas.systemTimeExt.size = sizeof(Gnss_LocGnssTimeExtStructType);
+
+ svMeasurementSet.gnssMeas.systemTimeExt.refFCount = gnss_raw_measurement_ptr->systemTimeExt.refFCount;
+
+ svMeasurementSet.gnssMeas.systemTimeExt.systemRtc_valid =
+ gnss_raw_measurement_ptr->systemTimeExt.systemRtc_valid;
+
+ svMeasurementSet.gnssMeas.systemTimeExt.systemRtcMs =
+ gnss_raw_measurement_ptr->systemTimeExt.systemRtcMs;
+
+ svMeasurementSet.gnssMeas.systemTimeExt.sourceOfTime =
+ gnss_raw_measurement_ptr->systemTimeExt.sourceOfTime;
+
+ }
+
+
+ if(1 == gnss_raw_measurement_ptr->svMeasurement_valid)
+ {
+
+ svMeasurementSet.gnssMeas.numSvs = gnss_raw_measurement_ptr->svMeasurement_len;
+ svMeasurementSet.gnssMeasValid = gnss_raw_measurement_ptr->svMeasurement_valid;
+
+ if(gnss_raw_measurement_ptr->svMeasurement_len > GNSS_LOC_SV_MEAS_LIST_MAX_SIZE)
+ {
+ //This should not happen normally, anycase limit to Max List Size
+ svMeasurementSet.gnssMeas.numSvs = GNSS_LOC_SV_MEAS_LIST_MAX_SIZE;
+ }
+ svMeasurementSet.gnssMeas.numSvs = gnss_raw_measurement_ptr->svMeasurement_len;
+ svMeasurementSet.gnssMeasValid = gnss_raw_measurement_ptr->svMeasurement_valid;
+
+ uint32_t i = 0, cnt=0;
+ for(i=0;i<gnss_raw_measurement_ptr->svMeasurement_len;i++)
+ {
+ svMeasurementSet.gnssMeas.svMeasurement[i].size = sizeof(Gnss_SVMeasurementStructType);
+
+ if((0 != gnss_raw_measurement_ptr->svMeasurement[i].gnssSvId) &&
+ (0 != gnss_raw_measurement_ptr->svMeasurement[i].measurementStatus))
+ {
+ svMeasurementSet.gnssMeas.svMeasurement[i].gnssSvId =
+ gnss_raw_measurement_ptr->svMeasurement[i].gnssSvId;
+
+ svMeasurementSet.gnssMeas.svMeasurement[i].gloFrequency =
+ gnss_raw_measurement_ptr->svMeasurement[i].gloFrequency;
+
+ if(gnss_raw_measurement_ptr->svMeasurement[i].validMask & QMI_LOC_SV_LOSSOFLOCK_VALID_V02)
+ {
+ svMeasurementSet.gnssMeas.svMeasurement[i].lossOfLock = (bool)
+ gnss_raw_measurement_ptr->svMeasurement[i].lossOfLock;
+ }
+
+ svMeasurementSet.gnssMeas.svMeasurement[i].svStatus = (Gnss_LocSvSearchStatusEnumT)
+ gnss_raw_measurement_ptr->svMeasurement[i].svStatus;
+
+ if(gnss_raw_measurement_ptr->svMeasurement[i].validMask & QMI_LOC_SV_HEALTH_VALID_V02)
+ {
+ svMeasurementSet.gnssMeas.svMeasurement[i].healthStatus_valid = 1;
+ svMeasurementSet.gnssMeas.svMeasurement[i].healthStatus = (uint8_t)gnss_raw_measurement_ptr->svMeasurement[i].healthStatus;
+ }
+ svMeasurementSet.gnssMeas.svMeasurement[i].svInfoMask = (Gnss_LocSvInfoMaskT)
+ gnss_raw_measurement_ptr->svMeasurement[i].svInfoMask;
+
+ svMeasurementSet.gnssMeas.svMeasurement[i].CNo =
+ gnss_raw_measurement_ptr->svMeasurement[i].CNo;
+
+ svMeasurementSet.gnssMeas.svMeasurement[i].gloRfLoss =
+ gnss_raw_measurement_ptr->svMeasurement[i].gloRfLoss;
+
+ svMeasurementSet.gnssMeas.svMeasurement[i].measLatency =
+ gnss_raw_measurement_ptr->svMeasurement[i].measLatency;
+
+ /*SVTimeSpeed*/
+ svMeasurementSet.gnssMeas.svMeasurement[i].svTimeSpeed.size = sizeof(Gnss_LocSVTimeSpeedStructType);
+ svMeasurementSet.gnssMeas.svMeasurement[i].svTimeSpeed.svMs =
+ gnss_raw_measurement_ptr->svMeasurement[i].svTimeSpeed.svTimeMs;
+ svMeasurementSet.gnssMeas.svMeasurement[i].svTimeSpeed.svSubMs =
+ gnss_raw_measurement_ptr->svMeasurement[i].svTimeSpeed.svTimeSubMs;
+ svMeasurementSet.gnssMeas.svMeasurement[i].svTimeSpeed.svTimeUncMs =
+ gnss_raw_measurement_ptr->svMeasurement[i].svTimeSpeed.svTimeUncMs;
+ svMeasurementSet.gnssMeas.svMeasurement[i].svTimeSpeed.dopplerShift =
+ gnss_raw_measurement_ptr->svMeasurement[i].svTimeSpeed.dopplerShift;
+ svMeasurementSet.gnssMeas.svMeasurement[i].svTimeSpeed.dopplerShiftUnc=
+ gnss_raw_measurement_ptr->svMeasurement[i].svTimeSpeed.dopplerShiftUnc;
+
+ svMeasurementSet.gnssMeas.svMeasurement[i].measurementStatus =
+ (uint32_t)gnss_raw_measurement_ptr->svMeasurement[i].measurementStatus;
+
+ if(gnss_raw_measurement_ptr->svMeasurement[i].validMask & QMI_LOC_SV_MULTIPATH_EST_VALID_V02)
+ {
+ svMeasurementSet.gnssMeas.svMeasurement[i].multipathEstValid = 1;
+ svMeasurementSet.gnssMeas.svMeasurement[i].multipathEstimate =
+ gnss_raw_measurement_ptr->svMeasurement[i].multipathEstimate;
+ }
+
+ if(gnss_raw_measurement_ptr->svMeasurement[i].validMask & QMI_LOC_SV_FINE_SPEED_VALID_V02)
+ {
+ svMeasurementSet.gnssMeas.svMeasurement[i].fineSpeedValid = 1;
+
+ svMeasurementSet.gnssMeas.svMeasurement[i].fineSpeed =
+ gnss_raw_measurement_ptr->svMeasurement[i].fineSpeed;
+ }
+ if(gnss_raw_measurement_ptr->svMeasurement[i].validMask & QMI_LOC_SV_FINE_SPEED_UNC_VALID_V02)
+ {
+ svMeasurementSet.gnssMeas.svMeasurement[i].fineSpeedUncValid = 1;
+
+ svMeasurementSet.gnssMeas.svMeasurement[i].fineSpeedUnc =
+ gnss_raw_measurement_ptr->svMeasurement[i].fineSpeedUnc;
+ }
+ if(gnss_raw_measurement_ptr->svMeasurement[i].validMask & QMI_LOC_SV_CARRIER_PHASE_VALID_V02)
+ {
+ svMeasurementSet.gnssMeas.svMeasurement[i].carrierPhaseValid = 1;
+
+ svMeasurementSet.gnssMeas.svMeasurement[i].carrierPhase =
+ gnss_raw_measurement_ptr->svMeasurement[i].carrierPhase;
+ }
+ if(gnss_raw_measurement_ptr->svMeasurement[i].validMask & QMI_LOC_SV_SV_DIRECTION_VALID_V02)
+ {
+ svMeasurementSet.gnssMeas.svMeasurement[i].svDirectionValid = 1;
+
+ svMeasurementSet.gnssMeas.svMeasurement[i].svElevation =
+ gnss_raw_measurement_ptr->svMeasurement[i].svElevation;
+ svMeasurementSet.gnssMeas.svMeasurement[i].svAzimuth =
+ gnss_raw_measurement_ptr->svMeasurement[i].svAzimuth;
+ }
+ if(gnss_raw_measurement_ptr->svMeasurement[i].validMask & QMI_LOC_SV_CYCLESLIP_COUNT_VALID_V02)
+ {
+ svMeasurementSet.gnssMeas.svMeasurement[i].cycleSlipCountValid = 1;
+ svMeasurementSet.gnssMeas.svMeasurement[i].cycleSlipCount =
+ gnss_raw_measurement_ptr->svMeasurement[i].cycleSlipCount;
+ }
+
+ cnt++;
+
+ }
+
+ svMeasurementSet.gnssMeas.numSvs = cnt; /*set the measurement length to the actual SVId's filled in the array*/
+
+ }
+
+ if(gnss_raw_measurement_ptr->svMeasurement_len != cnt)
+ {
+ LOC_LOGW("[SV_MEAS_QMI] #of SV in QMI: %d, Valid SV-id Count: %d",
+ gnss_raw_measurement_ptr->svMeasurement_len,cnt );
+ }
+
+ } //if svClockMeasurement_valid
+ else
+ {
+ LOC_LOGV("%s] [SV_MEAS] SV Measurement Not Valid", __func__);
+ }
+ //Report SV measurement irrespective of #of SVs for APDR
+ LocApiBase::reportSvMeasurement(svMeasurementSet);
+}
+
+/* convert satellite polynomial to loc eng format and send the converted
+ report to loc eng */
+void LocApiV02 :: reportSvPolynomial (
+ const qmiLocEventGnssSvPolyIndMsgT_v02 *gnss_sv_poly_ptr)
+{
+ GnssSvPolynomial svPolynomial;
+
+ memset(&svPolynomial, 0, sizeof(GnssSvPolynomial));
+ svPolynomial.size = sizeof(GnssSvPolynomial);
+ svPolynomial.is_valid = 0;
+
+ if(0 != gnss_sv_poly_ptr->gnssSvId)
+ {
+ svPolynomial.gnssSvId = gnss_sv_poly_ptr->gnssSvId;
+ svPolynomial.T0 = gnss_sv_poly_ptr->T0;
+ svPolynomial.svPolyFlags = gnss_sv_poly_ptr->svPolyFlags;
+
+ if(1 == gnss_sv_poly_ptr->gloFrequency_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_GLO_FREQ;
+ svPolynomial.freqNum = gnss_sv_poly_ptr->gloFrequency;
+ }
+ if(1 == gnss_sv_poly_ptr->IODE_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_IODE;
+ svPolynomial.iode = gnss_sv_poly_ptr->IODE;
+ }
+
+ if(1 == gnss_sv_poly_ptr->svPosUnc_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_SV_POSUNC;
+ svPolynomial.svPosUnc = gnss_sv_poly_ptr->svPosUnc;
+ }
+
+ if(1 == gnss_sv_poly_ptr->svPolyFlagValid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_FLAG;
+ svPolynomial.svPolyFlags = gnss_sv_poly_ptr->svPolyFlags;
+ }
+
+ if(1 == gnss_sv_poly_ptr->polyCoeffXYZ0_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_POLYCOEFF_XYZ0;
+ for(int i=0;i<GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE;i++)
+ {
+ svPolynomial.polyCoeffXYZ0[i] = gnss_sv_poly_ptr->polyCoeffXYZ0[i];
+ }
+ }
+
+ if(1 == gnss_sv_poly_ptr->polyCoefXYZN_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_POLYCOEFF_XYZN;
+ for(int i=0;i<GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE;i++)
+ {
+ svPolynomial.polyCoefXYZN[i] = gnss_sv_poly_ptr->polyCoefXYZN[i];
+ }
+ }
+
+ if(1 == gnss_sv_poly_ptr->polyCoefClockBias_valid)
+ {
+
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_POLYCOEFF_OTHER;
+ for(int i=0;i<GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE;i++)
+ {
+ svPolynomial.polyCoefOther[i] = gnss_sv_poly_ptr->polyCoefClockBias[i];
+ }
+ }
+
+ if(1 == gnss_sv_poly_ptr->ionoDot_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_IONODOT;
+ svPolynomial.ionoDot = gnss_sv_poly_ptr->ionoDot;
+ }
+ if(1 == gnss_sv_poly_ptr->ionoDelay_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_IONODELAY;
+ svPolynomial.ionoDelay = gnss_sv_poly_ptr->ionoDelay;
+ }
+
+ if(1 == gnss_sv_poly_ptr->sbasIonoDot_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_SBAS_IONODOT;
+ svPolynomial.sbasIonoDot = gnss_sv_poly_ptr->sbasIonoDot;
+ }
+ if(1 == gnss_sv_poly_ptr->sbasIonoDelay_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_SBAS_IONODELAY;
+ svPolynomial.sbasIonoDelay = gnss_sv_poly_ptr->sbasIonoDelay;
+ }
+ if(1 == gnss_sv_poly_ptr->tropoDelay_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_TROPODELAY;
+ svPolynomial.tropoDelay = gnss_sv_poly_ptr->tropoDelay;
+ }
+ if(1 == gnss_sv_poly_ptr->elevation_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_ELEVATION;
+ svPolynomial.elevation = gnss_sv_poly_ptr->elevation;
+ }
+ if(1 == gnss_sv_poly_ptr->elevationDot_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_ELEVATIONDOT;
+ svPolynomial.elevationDot = gnss_sv_poly_ptr->elevationDot;
+ }
+ if(1 == gnss_sv_poly_ptr->elenationUnc_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_ELEVATIONUNC;
+ svPolynomial.elevationUnc = gnss_sv_poly_ptr->elenationUnc;
+ }
+ if(1 == gnss_sv_poly_ptr->velCoef_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_VELO_COEFF;
+ for(int i=0;i<GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE;i++)
+ {
+ svPolynomial.velCoef[i] = gnss_sv_poly_ptr->velCoef[i];
+ }
+ }
+ if(1 == gnss_sv_poly_ptr->enhancedIOD_valid)
+ {
+ svPolynomial.is_valid |= ULP_GNSS_SV_POLY_BIT_ENHANCED_IOD;
+ svPolynomial.enhancedIOD = gnss_sv_poly_ptr->enhancedIOD;
+ }
+
+ LocApiBase::reportSvPolynomial(svPolynomial);
+
+ LOC_LOGV("[SV_POLY_QMI] SV-Id:%d\n", svPolynomial.gnssSvId);
+ }
+ else
+ {
+ LOC_LOGV("[SV_POLY] INVALID SV-Id:%d", svPolynomial.gnssSvId);
+ }
+} //reportSvPolynomial
+
+
+
+/* convert engine state report to loc eng format and send the converted
+ report to loc eng */
+void LocApiV02 :: reportEngineState (
+ const qmiLocEventEngineStateIndMsgT_v02 *engine_state_ptr)
+{
+
+ LOC_LOGV("%s:%d]: state = %d\n", __func__, __LINE__,
+ engine_state_ptr->engineState);
+
+ struct MsgUpdateEngineState : public LocMsg {
+ LocApiV02* mpLocApiV02;
+ bool mEngineOn;
+ inline MsgUpdateEngineState(LocApiV02* pLocApiV02, bool engineOn) :
+ LocMsg(), mpLocApiV02(pLocApiV02), mEngineOn(engineOn) {}
+ inline virtual void proc() const {
+ // If EngineOn is true and InSession is false and Engine is just turned off,
+ // then unregister the gps tracking specific event masks
+ if (mpLocApiV02->mEngineOn && !mpLocApiV02->mInSession && !mEngineOn) {
+ mpLocApiV02->registerEventMask(mpLocApiV02->mQmiMask);
+ }
+ mpLocApiV02->mEngineOn = mEngineOn;
+
+ if (mEngineOn) {
+ // if EngineOn and not InSession, then we have already stopped
+ // the fix, so do not send ENGINE_ON
+ if (mpLocApiV02->mInSession) {
+ mpLocApiV02->reportStatus(GPS_STATUS_ENGINE_ON);
+ mpLocApiV02->reportStatus(GPS_STATUS_SESSION_BEGIN);
+ }
+ } else {
+ mpLocApiV02->reportStatus(GPS_STATUS_SESSION_END);
+ mpLocApiV02->reportStatus(GPS_STATUS_ENGINE_OFF);
+ }
+ }
+ };
+
+ if (engine_state_ptr->engineState == eQMI_LOC_ENGINE_STATE_ON_V02)
+ {
+ sendMsg(new MsgUpdateEngineState(this, true));
+ }
+ else if (engine_state_ptr->engineState == eQMI_LOC_ENGINE_STATE_OFF_V02)
+ {
+ sendMsg(new MsgUpdateEngineState(this, false));
+ }
+ else
+ {
+ reportStatus(GPS_STATUS_NONE);
+ }
+
+}
+
+/* convert fix session state report to loc eng format and send the converted
+ report to loc eng */
+void LocApiV02 :: reportFixSessionState (
+ const qmiLocEventFixSessionStateIndMsgT_v02 *fix_session_state_ptr)
+{
+ GpsStatusValue status;
+ LOC_LOGD("%s:%d]: state = %d\n", __func__, __LINE__,
+ fix_session_state_ptr->sessionState);
+
+ status = GPS_STATUS_NONE;
+ if (fix_session_state_ptr->sessionState == eQMI_LOC_FIX_SESSION_STARTED_V02)
+ {
+ status = GPS_STATUS_SESSION_BEGIN;
+ }
+ else if (fix_session_state_ptr->sessionState
+ == eQMI_LOC_FIX_SESSION_FINISHED_V02)
+ {
+ status = GPS_STATUS_SESSION_END;
+ }
+ reportStatus(status);
+}
+
+/* convert NMEA report to loc eng format and send the converted
+ report to loc eng */
+void LocApiV02 :: reportNmea (
+ const qmiLocEventNmeaIndMsgT_v02 *nmea_report_ptr)
+{
+ LocApiBase::reportNmea(nmea_report_ptr->nmea,
+ strlen(nmea_report_ptr->nmea));
+
+ LOC_LOGD("NMEA <%s", nmea_report_ptr->nmea);
+}
+
+/* convert and report an ATL request to loc engine */
+void LocApiV02 :: reportAtlRequest(
+ const qmiLocEventLocationServerConnectionReqIndMsgT_v02 * server_request_ptr)
+{
+ uint32_t connHandle = server_request_ptr->connHandle;
+ // service ATL open request; copy the WWAN type
+ if(server_request_ptr->requestType == eQMI_LOC_SERVER_REQUEST_OPEN_V02 )
+ {
+ AGpsType agpsType;
+ switch(server_request_ptr->wwanType)
+ {
+ case eQMI_LOC_WWAN_TYPE_INTERNET_V02:
+ agpsType = AGPS_TYPE_WWAN_ANY;
+ requestATL(connHandle, agpsType);
+ break;
+ case eQMI_LOC_WWAN_TYPE_AGNSS_V02:
+ agpsType = AGPS_TYPE_SUPL;
+ requestATL(connHandle, agpsType);
+ break;
+ case eQMI_LOC_WWAN_TYPE_AGNSS_EMERGENCY_V02:
+ requestSuplES(connHandle);
+ break;
+ default:
+ agpsType = AGPS_TYPE_WWAN_ANY;
+ requestATL(connHandle, agpsType);
+ break;
+ }
+ }
+ // service the ATL close request
+ else if (server_request_ptr->requestType == eQMI_LOC_SERVER_REQUEST_CLOSE_V02)
+ {
+ releaseATL(connHandle);
+ }
+}
+
+/* conver the NI report to loc eng format and send t loc engine */
+void LocApiV02 :: reportNiRequest(
+ const qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *ni_req_ptr)
+{
+ GpsNiNotification notif;
+
+ /* initialize the notification*/
+ memset(notif.extras, 0, sizeof notif.extras);
+ memset(notif.text, 0, sizeof notif.text);
+ memset(notif.requestor_id, 0, sizeof notif.requestor_id);
+
+ /* NI timeout gets overwritten in LocApiEngAdapter,
+ initializing to 0 here */
+ notif.timeout = 0;
+
+ notif.text_encoding = GPS_ENC_NONE ;
+
+ notif.requestor_id_encoding = GPS_ENC_UNKNOWN;
+
+ notif.notify_flags = 0;
+
+ notif.default_response = GPS_NI_RESPONSE_NORESP;
+
+ /*Handle Vx request */
+ if(ni_req_ptr->NiVxInd_valid == 1)
+ {
+ const qmiLocNiVxNotifyVerifyStructT_v02 *vx_req = &(ni_req_ptr->NiVxInd);
+
+ notif.ni_type = GPS_NI_TYPE_VOICE;
+
+ // Requestor ID, the requestor id recieved is NULL terminated
+ hexcode(notif.requestor_id, sizeof notif.requestor_id,
+ (char *)vx_req->requestorId, vx_req->requestorId_len );
+ }
+
+ /* Handle UMTS CP request*/
+ else if(ni_req_ptr->NiUmtsCpInd_valid == 1)
+ {
+ const qmiLocNiUmtsCpNotifyVerifyStructT_v02 *umts_cp_req =
+ &ni_req_ptr->NiUmtsCpInd;
+
+ notif.ni_type = GPS_NI_TYPE_UMTS_CTRL_PLANE;
+
+ /* notificationText should always be a NULL terminated string */
+ hexcode(notif.text, sizeof notif.text,
+ (char *)umts_cp_req->notificationText,
+ umts_cp_req->notificationText_len);
+
+ /* Store requestor ID */
+ hexcode(notif.requestor_id, sizeof(notif.requestor_id),
+ (char *)umts_cp_req->requestorId.codedString,
+ umts_cp_req->requestorId.codedString_len);
+
+ /* convert encodings */
+ notif.text_encoding = convertNiEncoding(umts_cp_req->dataCodingScheme);
+
+ notif.requestor_id_encoding =
+ convertNiEncoding(umts_cp_req->requestorId.dataCodingScheme);
+
+ /* LCS address (using extras field) */
+ if ( umts_cp_req->clientAddress_len != 0)
+ {
+ char lcs_addr[32]; // Decoded LCS address for UMTS CP NI
+
+ // Copy LCS Address into notif.extras in the format: Address = 012345
+ strlcat(notif.extras, LOC_NI_NOTIF_KEY_ADDRESS, sizeof (notif.extras));
+ strlcat(notif.extras, " = ", sizeof notif.extras);
+ int addr_len = 0;
+ const char *address_source = NULL;
+ address_source = (char *)umts_cp_req->clientAddress;
+ // client Address is always NULL terminated
+ addr_len = decodeAddress(lcs_addr, sizeof(lcs_addr), address_source,
+ umts_cp_req->clientAddress_len);
+
+ // The address is ASCII string
+ if (addr_len)
+ {
+ strlcat(notif.extras, lcs_addr, sizeof notif.extras);
+ }
+ }
+
+ }
+ else if(ni_req_ptr->NiSuplInd_valid == 1)
+ {
+ const qmiLocNiSuplNotifyVerifyStructT_v02 *supl_req =
+ &ni_req_ptr->NiSuplInd;
+
+ notif.ni_type = GPS_NI_TYPE_UMTS_SUPL;
+
+ // Client name
+ if (supl_req->valid_flags & QMI_LOC_SUPL_CLIENT_NAME_MASK_V02)
+ {
+ hexcode(notif.text, sizeof(notif.text),
+ (char *)supl_req->clientName.formattedString,
+ supl_req->clientName.formattedString_len);
+ LOC_LOGV("%s:%d]: SUPL NI: client_name: %s \n", __func__, __LINE__,
+ notif.text);
+ }
+ else
+ {
+ LOC_LOGV("%s:%d]: SUPL NI: client_name not present.",
+ __func__, __LINE__);
+ }
+
+ // Requestor ID
+ if (supl_req->valid_flags & QMI_LOC_SUPL_REQUESTOR_ID_MASK_V02)
+ {
+ hexcode(notif.requestor_id, sizeof notif.requestor_id,
+ (char*)supl_req->requestorId.formattedString,
+ supl_req->requestorId.formattedString_len );
+
+ LOC_LOGV("%s:%d]: SUPL NI: requestor_id: %s \n", __func__, __LINE__,
+ notif.requestor_id);
+ }
+ else
+ {
+ LOC_LOGV("%s:%d]: SUPL NI: requestor_id not present.",
+ __func__, __LINE__);
+ }
+
+ // Encoding type
+ if (supl_req->valid_flags & QMI_LOC_SUPL_DATA_CODING_SCHEME_MASK_V02)
+ {
+ notif.text_encoding = convertNiEncoding(supl_req->dataCodingScheme);
+
+ notif.requestor_id_encoding = convertNiEncoding(supl_req->dataCodingScheme);
+ }
+ else
+ {
+ notif.text_encoding = notif.requestor_id_encoding = GPS_ENC_UNKNOWN;
+ }
+
+ // ES SUPL
+ if(ni_req_ptr->suplEmergencyNotification_valid ==1)
+ {
+ const qmiLocEmergencyNotificationStructT_v02 *supl_emergency_request =
+ &ni_req_ptr->suplEmergencyNotification;
+
+ notif.ni_type = GPS_NI_TYPE_EMERGENCY_SUPL;
+ }
+
+ } //ni_req_ptr->NiSuplInd_valid == 1
+ else
+ {
+ LOC_LOGE("%s:%d]: unknown request event \n",__func__, __LINE__);
+ return;
+ }
+
+ // Set default_response & notify_flags
+ convertNiNotifyVerifyType(&notif, ni_req_ptr->notificationType);
+
+ qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *ni_req_copy_ptr =
+ (qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *)malloc(sizeof(*ni_req_copy_ptr));
+
+ if( NULL != ni_req_copy_ptr)
+ {
+ memcpy(ni_req_copy_ptr, ni_req_ptr, sizeof(*ni_req_copy_ptr));
+
+ requestNiNotify(notif, (const void*)ni_req_copy_ptr);
+ }
+ else
+ {
+ LOC_LOGE("%s:%d]: Error copying NI request\n", __func__, __LINE__);
+ }
+
+}
+
+/* If Confidence value is less than 68%, then scale the accuracy value to
+ 68%.confidence.*/
+void LocApiV02 :: scaleAccuracyTo68PercentConfidence(
+ const uint8_t confidenceValue,
+ GpsLocation &gpsLocation)
+{
+ if (confidenceValue < 68)
+ {
+ // get scaling value based on 2D% confidence scaling table
+ for (uint8_t iter = 0; iter < CONF_SCALER_ARRAY_MAX; iter++)
+ {
+ if (confidenceValue <= confScalers[iter].confidence)
+ {
+ LOC_LOGD("Scaler value:%f",confScalers[iter].scaler_to_68);
+ gpsLocation.accuracy *= confScalers[iter].scaler_to_68;
+ break;
+ }
+ }
+ }
+}
+
+/* Report the Xtra Server Url from the modem to HAL*/
+void LocApiV02 :: reportXtraServerUrl(
+ const qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02*
+ server_request_ptr)
+{
+
+ if (server_request_ptr->serverList.serverList_len == 1)
+ {
+ reportXtraServer(server_request_ptr->serverList.serverList[0].serverUrl,
+ "",
+ "",
+ QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
+ }
+ else if (server_request_ptr->serverList.serverList_len == 2)
+ {
+ reportXtraServer(server_request_ptr->serverList.serverList[0].serverUrl,
+ server_request_ptr->serverList.serverList[1].serverUrl,
+ "",
+ QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
+ }
+ else
+ {
+ reportXtraServer(server_request_ptr->serverList.serverList[0].serverUrl,
+ server_request_ptr->serverList.serverList[1].serverUrl,
+ server_request_ptr->serverList.serverList[2].serverUrl,
+ QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02);
+ }
+
+}
+
+/* convert Ni Encoding type from QMI_LOC to loc eng format */
+GpsNiEncodingType LocApiV02 ::convertNiEncoding(
+ qmiLocNiDataCodingSchemeEnumT_v02 loc_encoding)
+{
+ GpsNiEncodingType enc = GPS_ENC_UNKNOWN;
+
+ switch (loc_encoding)
+ {
+ case eQMI_LOC_NI_SUPL_UTF8_V02:
+ enc = GPS_ENC_SUPL_UTF8;
+ break;
+ case eQMI_LOC_NI_SUPL_UCS2_V02:
+ enc = GPS_ENC_SUPL_UCS2;
+ break;
+ case eQMI_LOC_NI_SUPL_GSM_DEFAULT_V02:
+ enc = GPS_ENC_SUPL_GSM_DEFAULT;
+ break;
+ case eQMI_LOC_NI_SS_LANGUAGE_UNSPEC_V02:
+ enc = GPS_ENC_SUPL_GSM_DEFAULT; // SS_LANGUAGE_UNSPEC = GSM
+ break;
+ default:
+ break;
+ }
+
+ return enc;
+}
+
+/*convert NI notify verify type from QMI LOC to loc eng format*/
+bool LocApiV02 :: convertNiNotifyVerifyType (
+ GpsNiNotification *notif,
+ qmiLocNiNotifyVerifyEnumT_v02 notif_priv)
+{
+ switch (notif_priv)
+ {
+ case eQMI_LOC_NI_USER_NO_NOTIFY_NO_VERIFY_V02:
+ notif->notify_flags = 0;
+ break;
+
+ case eQMI_LOC_NI_USER_NOTIFY_ONLY_V02:
+ notif->notify_flags = GPS_NI_NEED_NOTIFY;
+ break;
+
+ case eQMI_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP_V02:
+ notif->notify_flags = GPS_NI_NEED_NOTIFY | GPS_NI_NEED_VERIFY;
+ notif->default_response = GPS_NI_RESPONSE_ACCEPT;
+ break;
+
+ case eQMI_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP_V02:
+ notif->notify_flags = GPS_NI_NEED_NOTIFY | GPS_NI_NEED_VERIFY;
+ notif->default_response = GPS_NI_RESPONSE_DENY;
+ break;
+
+ case eQMI_LOC_NI_USER_NOTIFY_VERIFY_PRIVACY_OVERRIDE_V02:
+ notif->notify_flags = GPS_NI_PRIVACY_OVERRIDE;
+ break;
+
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+/* convert and report GNSS measurement data to loc eng */
+void LocApiV02 :: reportGnssMeasurementData(
+ const qmiLocEventGnssSvMeasInfoIndMsgT_v02& gnss_measurement_report_ptr)
+{
+ LOC_LOGV ("%s:%d]: entering\n", __func__, __LINE__);
+
+ GnssData gnssMeasurementData;
+ memset (&gnssMeasurementData, 0, sizeof(GnssData));
+
+ int svMeasurment_len = 0;
+
+ // size
+ gnssMeasurementData.size = sizeof(GnssData);
+
+ // number of measurements
+ if (gnss_measurement_report_ptr.svMeasurement_valid) {
+ svMeasurment_len =
+ gnss_measurement_report_ptr.svMeasurement_len;
+ gnssMeasurementData.measurement_count = svMeasurment_len;
+ LOC_LOGV ("%s:%d]: there are %d SV measurements\n",
+ __func__, __LINE__, svMeasurment_len);
+ } else {
+ LOC_LOGV ("%s:%d]: there is no valid SV measurements\n",
+ __func__, __LINE__);
+ }
+
+ if (svMeasurment_len != 0 &&
+ gnss_measurement_report_ptr.system == eQMI_LOC_SV_SYSTEM_GPS_V02) {
+
+ // the array of measurements
+ int index = 0;
+ while(svMeasurment_len > 0) {
+ convertGnssMeasurements(gnssMeasurementData.measurements[index],
+ gnss_measurement_report_ptr.svMeasurement[index]);
+ index++;
+ svMeasurment_len--;
+ }
+
+ // the GPS clock time reading
+ convertGnssClock(gnssMeasurementData.clock,
+ gnss_measurement_report_ptr);
+
+ // calling the base
+ LOC_LOGV ("%s:%d]: calling LocApiBase::reportGnssMeasurementData.\n",
+ __func__, __LINE__);
+ LocApiBase::reportGnssMeasurementData(gnssMeasurementData);
+ } else {
+ LOC_LOGV ("%s:%d]: There is no GNSS measurement.\n",
+ __func__, __LINE__);
+ }
+}
+
+/*convert GnssMeasurement type from QMI LOC to loc eng format*/
+void LocApiV02 :: convertGnssMeasurements (GnssMeasurement& gnssMeasurement,
+ const qmiLocSVMeasurementStructT_v02& gnss_measurement_info)
+{
+ LOC_LOGV ("%s:%d]: entering\n", __func__, __LINE__);
+
+ // size
+ gnssMeasurement.size = sizeof(GnssMeasurement);
+
+ // flag initiation
+ GnssMeasurementFlags flags = 0;
+
+ // svid
+ gnssMeasurement.svid = gnss_measurement_info.gnssSvId;
+
+ // constellation
+ gnssMeasurement.constellation = GNSS_CONSTELLATION_GPS;
+
+ // time_offset_ns
+ if (0 != gnss_measurement_info.measLatency)
+ {
+ LOC_LOGV("%s:%d]: measLatency is not 0\n", __func__, __LINE__);
+ }
+ gnssMeasurement.time_offset_ns = 0.0;
+
+ // state & received_sv_time_in_ns & received_gps_tow_uncertainty_ns
+ uint64_t validMask = gnss_measurement_info.measurementStatus &
+ gnss_measurement_info.validMeasStatusMask;
+ uint64_t bitSynMask = QMI_LOC_MASK_MEAS_STATUS_BE_CONFIRM_V02 |
+ QMI_LOC_MASK_MEAS_STATUS_SB_VALID_V02;
+ double gpsTowUncNs = (double)gnss_measurement_info.svTimeSpeed.svTimeUncMs * 1e6;
+
+ if (validMask & QMI_LOC_MASK_MEAS_STATUS_MS_VALID_V02) {
+ /* sub-frame decode & TOW decode */
+ gnssMeasurement.state = GNSS_MEASUREMENT_STATE_SUBFRAME_SYNC |
+ GNSS_MEASUREMENT_STATE_TOW_DECODED |
+ GNSS_MEASUREMENT_STATE_BIT_SYNC |
+ GNSS_MEASUREMENT_STATE_CODE_LOCK;
+ gnssMeasurement.received_sv_time_in_ns =
+ (int64_t)(((double)gnss_measurement_info.svTimeSpeed.svTimeMs +
+ (double)gnss_measurement_info.svTimeSpeed.svTimeSubMs) * 1e6);
+
+ gnssMeasurement.received_sv_time_uncertainty_in_ns = (int64_t)gpsTowUncNs;
+
+ } else if ((validMask & bitSynMask) == bitSynMask) {
+ /* bit sync */
+ gnssMeasurement.state = GNSS_MEASUREMENT_STATE_BIT_SYNC |
+ GNSS_MEASUREMENT_STATE_CODE_LOCK;
+ gnssMeasurement.received_sv_time_in_ns =
+ (int64_t)(fmod(((double)gnss_measurement_info.svTimeSpeed.svTimeMs +
+ (double)gnss_measurement_info.svTimeSpeed.svTimeSubMs), 20) * 1e6);
+ gnssMeasurement.received_sv_time_uncertainty_in_ns = (int64_t)gpsTowUncNs;
+
+ } else if (validMask & QMI_LOC_MASK_MEAS_STATUS_SM_VALID_V02) {
+ /* code lock */
+ gnssMeasurement.state = GNSS_MEASUREMENT_STATE_CODE_LOCK;
+ gnssMeasurement.received_sv_time_in_ns =
+ (int64_t)((double)gnss_measurement_info.svTimeSpeed.svTimeSubMs * 1e6);
+ gnssMeasurement.received_sv_time_uncertainty_in_ns = (int64_t)gpsTowUncNs;
+
+ } else {
+ /* by default */
+ gnssMeasurement.state = GNSS_MEASUREMENT_STATE_UNKNOWN;
+ gnssMeasurement.received_sv_time_in_ns = 0;
+ gnssMeasurement.received_sv_time_uncertainty_in_ns = 0;
+ }
+
+ // c_n0_dbhz
+ gnssMeasurement.c_n0_dbhz = gnss_measurement_info.CNo/10.0;
+
+ if (QMI_LOC_MASK_MEAS_STATUS_VELOCITY_FINE_V02 == (gnss_measurement_info.measurementStatus & QMI_LOC_MASK_MEAS_STATUS_VELOCITY_FINE_V02))
+ {
+ LOC_LOGV ("%s:%d]: FINE mS=0x%4X fS=%f fSU=%f dS=%f dSU=%f\n", __func__, __LINE__, gnss_measurement_info.measurementStatus,
+ gnss_measurement_info.fineSpeed, gnss_measurement_info.fineSpeedUnc,
+ gnss_measurement_info.svTimeSpeed.dopplerShift, gnss_measurement_info.svTimeSpeed.dopplerShiftUnc);
+ // pseudorange_rate_mps
+ gnssMeasurement.pseudorange_rate_mps = gnss_measurement_info.fineSpeed;
+
+ // pseudorange_rate_uncertainty_mps
+ gnssMeasurement.pseudorange_rate_uncertainty_mps = gnss_measurement_info.fineSpeedUnc;
+ }
+ else
+ {
+ LOC_LOGV ("%s:%d]: COARSE mS=0x%4X fS=%f fSU=%f dS=%f dSU=%f\n", __func__, __LINE__, gnss_measurement_info.measurementStatus,
+ gnss_measurement_info.fineSpeed, gnss_measurement_info.fineSpeedUnc,
+ gnss_measurement_info.svTimeSpeed.dopplerShift, gnss_measurement_info.svTimeSpeed.dopplerShiftUnc);
+ // pseudorange_rate_mps
+ gnssMeasurement.pseudorange_rate_mps = gnss_measurement_info.svTimeSpeed.dopplerShift;
+
+ // pseudorange_rate_uncertainty_mps
+ gnssMeasurement.pseudorange_rate_uncertainty_mps = gnss_measurement_info.svTimeSpeed.dopplerShiftUnc;
+ }
+
+ // accumulated_delta_range_state
+ gnssMeasurement.accumulated_delta_range_state = GNSS_ADR_STATE_UNKNOWN;
+
+ // multipath_indicator
+ gnssMeasurement.multipath_indicator = GNSS_MULTIPATH_INDICATOR_UNKNOWN;
+
+ gnssMeasurement.flags = flags;
+
+ LOC_LOGV(" %s:%d]: GNSS measurement raw data received form modem: \n", __func__, __LINE__);
+ LOC_LOGV(" Input => gnssSvId=%d CNo=%d measurementStatus=0x%04x%04x\n",
+ gnss_measurement_info.gnssSvId, // %d
+ gnss_measurement_info.CNo, // %d
+ (uint32_t)(gnss_measurement_info.measurementStatus >> 32), // %04x Upper 32
+ (uint32_t)(gnss_measurement_info.measurementStatus & 0xFFFFFFFF)); // %04x Lower 32
+
+ LOC_LOGV(" dopplerShift=%f dopplerShiftUnc=%f fineSpeed=%f fineSpeedUnc=%f\n",
+ gnss_measurement_info.svTimeSpeed.dopplerShift, // %f
+ gnss_measurement_info.svTimeSpeed.dopplerShiftUnc, // %f
+ gnss_measurement_info.fineSpeed, // %f
+ gnss_measurement_info.fineSpeedUnc); // %f
+
+ LOC_LOGV(" svTimeMs=%u svTimeSubMs=%f svTimeUncMs=%f\n",
+ gnss_measurement_info.svTimeSpeed.svTimeMs, // %u
+ gnss_measurement_info.svTimeSpeed.svTimeSubMs, // %f
+ gnss_measurement_info.svTimeSpeed.svTimeUncMs); // %f
+
+ LOC_LOGV(" svStatus=0x%02x validMeasStatusMask=0x%04x%04x\n",
+ (uint32_t)(gnss_measurement_info.svStatus), // %02x
+ (uint32_t)(gnss_measurement_info.validMeasStatusMask >> 32), // %04x Upper 32
+ (uint32_t)(gnss_measurement_info.validMeasStatusMask & 0xFFFFFFFF)); // %04x Lower 32
+
+ LOC_LOGV(" %s:%d]: GNSS measurement data after conversion:\n", __func__, __LINE__);
+ LOC_LOGV(" Output => size=%d svid=%d time_offset_ns=%f state=%d\n",
+ gnssMeasurement.size, // %d
+ gnssMeasurement.svid, // %d
+ gnssMeasurement.time_offset_ns, // %f
+ gnssMeasurement.state); // %d
+
+ LOC_LOGV(" received_sv_time_in_ns=%lld received_sv_time_uncertainty_in_ns=%lld c_n0_dbhz=%g\n",
+ gnssMeasurement.received_sv_time_in_ns, // %lld
+ gnssMeasurement.received_sv_time_uncertainty_in_ns,// %lld
+ gnssMeasurement.c_n0_dbhz); // %g
+
+ LOC_LOGV(" pseudorange_rate_mps=%g pseudorange_rate_uncertainty_mps=%g\n",
+ gnssMeasurement.pseudorange_rate_mps, // %g
+ gnssMeasurement.pseudorange_rate_uncertainty_mps); // %g
+}
+
+/*convert GnssClock type from QMI LOC to loc eng format*/
+void LocApiV02 :: convertGnssClock (GnssClock& gnssClock,
+ const qmiLocEventGnssSvMeasInfoIndMsgT_v02& gnss_measurement_info)
+{
+ static uint32_t oldRefFCount = 0;
+ static uint32_t newRefFCount = 0;
+ static uint32_t oldDiscCount = 0;
+ static uint32_t newDiscCount = 0;
+ static uint32_t localDiscCount = 0;
+
+ LOC_LOGV ("%s:%d]: entering\n", __func__, __LINE__);
+
+ // size
+ gnssClock.size = sizeof(GnssClock);
+
+ // flag initiation
+ GnssClockFlags flags = 0;
+
+ if (gnss_measurement_info.systemTimeExt_valid &&
+ gnss_measurement_info.numClockResets_valid) {
+ newRefFCount = gnss_measurement_info.systemTimeExt.refFCount;
+ newDiscCount = gnss_measurement_info.numClockResets;
+ if ((true == mMeasurementsStarted) ||
+ (oldDiscCount != newDiscCount) ||
+ (newRefFCount <= oldRefFCount))
+ {
+ if (true == mMeasurementsStarted)
+ {
+ mMeasurementsStarted = false;
+ }
+ localDiscCount++;
+ }
+ oldDiscCount = newDiscCount;
+ oldRefFCount = newRefFCount;
+
+ // time_ns & time_uncertainty_ns
+ gnssClock.time_ns = (int64_t)gnss_measurement_info.systemTimeExt.refFCount * 1e6;
+ gnssClock.hw_clock_discontinuity_count = localDiscCount;
+ gnssClock.time_uncertainty_ns = 0.0;
+
+ if (gnss_measurement_info.systemTime_valid) {
+ uint16_t systemWeek = gnss_measurement_info.systemTime.systemWeek;
+ uint32_t systemMsec = gnss_measurement_info.systemTime.systemMsec;
+ float sysClkBias = gnss_measurement_info.systemTime.systemClkTimeBias;
+ float sysClkUncMs = gnss_measurement_info.systemTime.systemClkTimeUncMs;
+ bool isTimeValid = (sysClkUncMs <= 16.0f); // 16ms
+ double gps_time_ns;
+
+ if (systemWeek != C_GPS_WEEK_UNKNOWN && isTimeValid) {
+ // full_bias_ns, bias_ns & bias_uncertainty_ns
+ double temp = (double)(systemWeek)* (double)WEEK_MSECS + (double)systemMsec;
+ gps_time_ns = (double)temp*1e6 - (double)((int)(sysClkBias*1e6));
+ gnssClock.full_bias_ns = (int64_t)(gnssClock.time_ns - gps_time_ns);
+ gnssClock.bias_ns = (double)(gnssClock.time_ns - gps_time_ns) - gnssClock.full_bias_ns;
+ gnssClock.bias_uncertainty_ns = (double)sysClkUncMs * 1e6;
+ flags |= (GNSS_CLOCK_HAS_FULL_BIAS | GNSS_CLOCK_HAS_BIAS | GNSS_CLOCK_HAS_BIAS_UNCERTAINTY);
+ }
+ }
+ }
+
+ // drift_nsps & drift_uncertainty_nsps
+ if (gnss_measurement_info.rcvrClockFrequencyInfo_valid)
+ {
+ double driftMPS = gnss_measurement_info.rcvrClockFrequencyInfo.clockDrift;
+ double driftUncMPS = gnss_measurement_info.rcvrClockFrequencyInfo.clockDriftUnc;
+
+ gnssClock.drift_nsps = driftMPS * MPS_TO_NSPS;
+ gnssClock.drift_uncertainty_nsps = driftUncMPS * MPS_TO_NSPS;
+
+ flags |= (GNSS_CLOCK_HAS_DRIFT | GNSS_CLOCK_HAS_DRIFT_UNCERTAINTY);
+ }
+
+ gnssClock.flags = flags;
+
+ LOC_LOGV(" %s:%d]: GNSS measurement clock data received from modem: \n", __func__, __LINE__);
+ LOC_LOGV(" Input => systemTime_valid=%d systemTimeExt_valid=%d numClockResets_valid=%d\n",
+ gnss_measurement_info.systemTime_valid, // %d
+ gnss_measurement_info.systemTimeExt_valid, // %d
+ gnss_measurement_info.numClockResets_valid); // %d
+
+ LOC_LOGV(" systemWeek=%d systemMsec=%d systemClkTimeBias=%f\n",
+ gnss_measurement_info.systemTime.systemWeek, // %d
+ gnss_measurement_info.systemTime.systemMsec, // %d
+ gnss_measurement_info.systemTime.systemClkTimeBias); // %f
+
+ LOC_LOGV(" systemClkTimeUncMs=%f refFCount=%d numClockResets=%d\n",
+ gnss_measurement_info.systemTime.systemClkTimeUncMs, // %f
+ gnss_measurement_info.systemTimeExt.refFCount, // %d
+ gnss_measurement_info.numClockResets); // %d
+
+ LOC_LOGV(" clockDrift=%f clockDriftUnc=%f\n",
+ gnss_measurement_info.rcvrClockFrequencyInfo.clockDrift, // %f
+ gnss_measurement_info.rcvrClockFrequencyInfo.clockDriftUnc); // %f
+
+
+ LOC_LOGV(" %s:%d]: GNSS measurement clock after conversion: \n", __func__, __LINE__);
+ LOC_LOGV(" Output => time_ns=%lld\n",
+ gnssClock.time_ns); // %lld
+
+ LOC_LOGV(" full_bias_ns=%lld bias_ns=%g bias_uncertainty_ns=%g\n",
+ gnssClock.full_bias_ns, // %lld
+ gnssClock.bias_ns, // %g
+ gnssClock.bias_uncertainty_ns); // %g
+
+ LOC_LOGV(" drift_nsps=%g drift_uncertainty_nsps=%g\n",
+ gnssClock.drift_nsps, // %g
+ gnssClock.drift_uncertainty_nsps); // %g
+
+ LOC_LOGV(" hw_clock_discontinuity_count=%d flags=0x%04x\n",
+ gnssClock.hw_clock_discontinuity_count, // %lld
+ gnssClock.flags); // %04x
+}
+
+/* event callback registered with the loc_api v02 interface */
+void LocApiV02 :: eventCb(locClientHandleType clientHandle,
+ uint32_t eventId, locClientEventIndUnionType eventPayload)
+{
+ LOC_LOGD("%s:%d]: event id = %d\n", __func__, __LINE__,
+ eventId);
+
+ switch(eventId)
+ {
+ //Position Report
+ case QMI_LOC_EVENT_POSITION_REPORT_IND_V02:
+ reportPosition(eventPayload.pPositionReportEvent);
+ break;
+
+ // Satellite report
+ case QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02:
+ reportSv(eventPayload.pGnssSvInfoReportEvent);
+ break;
+
+ // Status report
+ case QMI_LOC_EVENT_ENGINE_STATE_IND_V02:
+ reportEngineState(eventPayload.pEngineState);
+ break;
+
+ case QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02:
+ reportFixSessionState(eventPayload.pFixSessionState);
+ break;
+
+ // NMEA
+ case QMI_LOC_EVENT_NMEA_IND_V02:
+ reportNmea(eventPayload.pNmeaReportEvent);
+ break;
+
+ // XTRA request
+ case QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02:
+ LOC_LOGD("%s:%d]: XTRA download request\n", __func__,
+ __LINE__);
+ reportXtraServerUrl(eventPayload.pInjectPredictedOrbitsReqEvent);
+ requestXtraData();
+ break;
+
+ // time request
+ case QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02:
+ LOC_LOGD("%s:%d]: Time request\n", __func__,
+ __LINE__);
+ requestTime();
+ break;
+
+ //position request
+ case QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02:
+ LOC_LOGD("%s:%d]: Position request\n", __func__,
+ __LINE__);
+ requestLocation();
+ break;
+
+ // NI request
+ case QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02:
+ reportNiRequest(eventPayload.pNiNotifyVerifyReqEvent);
+ break;
+
+ // AGPS connection request
+ case QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02:
+ reportAtlRequest(eventPayload.pLocationServerConnReqEvent);
+ break;
+
+ case QMI_LOC_EVENT_GNSS_MEASUREMENT_REPORT_IND_V02:
+ LOC_LOGD("%s:%d]: GNSS Measurement Report\n", __func__,
+ __LINE__);
+ reportSvMeasurement(eventPayload.pGnssSvRawInfoEvent);
+ reportGnssMeasurementData(*eventPayload.pGnssSvRawInfoEvent); /*TBD merge into one function*/
+ break;
+
+ case QMI_LOC_EVENT_SV_POLYNOMIAL_REPORT_IND_V02:
+ LOC_LOGD("%s:%d]: GNSS SV Polynomial Ind\n", __func__,
+ __LINE__);
+ reportSvPolynomial(eventPayload.pGnssSvPolyInfoEvent);
+ break;
+ }
+}
+
+/* Call the service LocAdapterBase down event*/
+void LocApiV02 :: errorCb(locClientHandleType handle,
+ locClientErrorEnumType errorId)
+{
+ if(errorId == eLOC_CLIENT_ERROR_SERVICE_UNAVAILABLE)
+ {
+ LOC_LOGE("%s:%d]: Service unavailable error\n",
+ __func__, __LINE__);
+
+ handleEngineDownEvent();
+
+ /* immediately send the engine up event so that
+ the loc engine re-initializes the adapter and the
+ loc-api_v02 interface */
+
+ mGnssMeasurementSupported = sup_unknown;
+
+ handleEngineUpEvent();
+ }
+}
+
+static void ds_client_global_event_cb(ds_client_status_enum_type result,
+ void *loc_adapter_cookie)
+{
+ LocApiV02 *locApiV02Instance = (LocApiV02 *)loc_adapter_cookie;
+
+ locApiV02Instance->ds_client_event_cb(result);
+ return;
+}
+
+void LocApiV02::ds_client_event_cb(ds_client_status_enum_type result)
+{
+ if(result == E_DS_CLIENT_DATA_CALL_CONNECTED) {
+ LOC_LOGD("%s:%d]: Emergency call is up", __func__, __LINE__);
+ reportDataCallOpened();
+ }
+ else if(result == E_DS_CLIENT_DATA_CALL_DISCONNECTED) {
+ LOC_LOGE("%s:%d]: Emergency call is stopped", __func__, __LINE__);
+ reportDataCallClosed();
+ }
+ return;
+}
+
+static const ds_client_cb_data ds_client_cb = {
+ ds_client_global_event_cb
+};
+
+int LocApiV02 :: initDataServiceClient()
+{
+ int ret=0;
+ if (NULL == dsLibraryHandle)
+ {
+ dsLibraryHandle = dlopen(DS_CLIENT_LIB_NAME, RTLD_NOW);
+ if (NULL == dsLibraryHandle)
+ {
+ const char * err = dlerror();
+ if (NULL == err)
+ {
+ err = "Unknown";
+ }
+ LOC_LOGE("%s:%d]: failed to load library %s; error=%s",
+ __func__, __LINE__,
+ DS_CLIENT_LIB_NAME,
+ err);
+ ret = 1;
+ }
+ if (NULL != dsLibraryHandle)
+ {
+ ds_client_get_iface_fn *getIface = NULL;
+
+ getIface = (ds_client_get_iface_fn*)dlsym(dsLibraryHandle,
+ DS_CLIENT_GET_INTERFACE_FN);
+ if (NULL != getIface)
+ {
+ dsClientIface = getIface();
+ }
+ else
+ {
+ const char * err = dlerror();
+ if (NULL == err)
+ {
+ err = "Unknown";
+ }
+ LOC_LOGE("%s:%d]: failed to find symbol %s; error=%s",
+ __func__, __LINE__,
+ DS_CLIENT_GET_INTERFACE_FN,
+ err);
+ }
+ }
+ }
+ if (NULL != dsClientIface && NULL != dsClientIface->pfn_init)
+ {
+ ds_client_status_enum_type dsret = dsClientIface->pfn_init();
+ if (dsret != E_DS_CLIENT_SUCCESS)
+ {
+ LOC_LOGE("%s:%d]: Error during client initialization %d",
+ __func__, __LINE__,
+ (int)dsret);
+
+ ret = 3;
+ }
+ }
+ else
+ {
+ if (NULL == dsClientIface)
+ {
+ LOC_LOGE("%s:%d]: dsClientIface == NULL",
+ __func__, __LINE__);
+ }
+ else
+ {
+ LOC_LOGE("%s:%d]: dsClientIface->pfn_init == NULL",
+ __func__, __LINE__);
+ }
+ ret = 2;
+ }
+ LOC_LOGD("%s:%d]: ret = %d\n", __func__, __LINE__,ret);
+ return ret;
+}
+
+int LocApiV02 :: openAndStartDataCall()
+{
+ loc_api_adapter_err ret = LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+ int profile_index = -1;
+ int pdp_type = -1;
+ ds_client_status_enum_type result = E_DS_CLIENT_FAILURE_NOT_INITIALIZED;
+
+ if (NULL != dsClientIface &&
+ NULL != dsClientIface->pfn_open_call &&
+ NULL != dsClientIface->pfn_start_call)
+ {
+ result = dsClientIface->pfn_open_call(&dsClientHandle,
+ &ds_client_cb,
+ (void *)this,
+ &profile_index,
+ &pdp_type);
+ }
+ if (E_DS_CLIENT_SUCCESS == result)
+ {
+ result = dsClientIface->pfn_start_call(dsClientHandle,
+ profile_index,
+ pdp_type);
+
+ if(result == E_DS_CLIENT_SUCCESS) {
+ LOC_LOGD("%s:%d]: Request to start Emergency call sent\n",
+ __func__, __LINE__);
+ ret = LOC_API_ADAPTER_ERR_SUCCESS;
+ }
+ else {
+ LOC_LOGE("%s:%d]: Unable to bring up emergency call using DS. result = %d",
+ __func__, __LINE__, (int)result);
+ ret = LOC_API_ADAPTER_ERR_UNSUPPORTED;
+ }
+ }
+ else if(result == E_DS_CLIENT_RETRY_LATER) {
+ LOC_LOGE("%s:%d]: Could not start emergency call. Retry after delay\n",
+ __func__, __LINE__);
+ ret = LOC_API_ADAPTER_ERR_ENGINE_BUSY;
+ }
+ else {
+ LOC_LOGE("%s:%d]: Unable to bring up emergency call using DS. ret = %d",
+ __func__, __LINE__, (int)ret);
+ ret = LOC_API_ADAPTER_ERR_UNSUPPORTED;
+ }
+
+ return (int)ret;
+}
+
+void LocApiV02 :: stopDataCall()
+{
+ ds_client_status_enum_type ret = E_DS_CLIENT_FAILURE_NOT_INITIALIZED;
+
+ if (NULL != dsClientIface &&
+ NULL != dsClientIface->pfn_stop_call)
+ {
+ ret = dsClientIface->pfn_stop_call(dsClientHandle);
+ }
+
+ if (ret == E_DS_CLIENT_SUCCESS) {
+ LOC_LOGD("%s:%d]: Request to Close SUPL ES call sent",
+ __func__, __LINE__);
+ }
+ else {
+ if (ret == E_DS_CLIENT_FAILURE_INVALID_HANDLE) {
+ LOC_LOGE("%s:%d]: Conn handle not found for SUPL ES",
+ __func__, __LINE__);
+ }
+ LOC_LOGE("%s:%d]: Could not close SUPL ES call. Ret: %d",
+ __func__, __LINE__, ret);
+ }
+ return;
+}
+
+void LocApiV02 :: closeDataCall()
+{
+ int ret = 1;
+
+ if (NULL != dsClientIface &&
+ NULL != dsClientIface->pfn_close_call)
+ {
+ dsClientIface->pfn_close_call(&dsClientHandle);
+ ret = 0;
+ }
+
+ LOC_LOGD("%s:%d]: Release data client handle; ret=%d",
+ __func__, __LINE__, ret);
+}
+
+enum loc_api_adapter_err LocApiV02 ::
+getWwanZppFix(GpsLocation &zppLoc)
+{
+ locClientReqUnionType req_union;
+ qmiLocGetAvailWwanPositionReqMsgT_v02 zpp_req;
+ qmiLocGetAvailWwanPositionIndMsgT_v02 zpp_ind;
+ memset(&zpp_ind, 0, sizeof(zpp_ind));
+ memset(&zpp_req, 0, sizeof(zpp_req));
+ memset(&zppLoc, 0, sizeof(zppLoc));
+
+ req_union.pGetAvailWwanPositionReq = &zpp_req;
+
+ LOC_LOGD("%s:%d]: Get ZPP Fix from available wwan position\n", __func__, __LINE__);
+
+ locClientStatusEnumType status =
+ loc_sync_send_req(clientHandle,
+ QMI_LOC_GET_AVAILABLE_WWAN_POSITION_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_GET_AVAILABLE_WWAN_POSITION_IND_V02,
+ &zpp_ind);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != zpp_ind.status) {
+ LOC_LOGD ("%s:%d]: getWwanZppFix may not be supported by modem"
+ " so will fallback to getBestAvailableZppFix"
+ " status = %s, zpp_ind.status = %s ",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(zpp_ind.status));
+
+ LocPosTechMask tech_mask;
+ loc_api_adapter_err ret;
+ ret = getBestAvailableZppFix(zppLoc, tech_mask);
+ if (ret == LOC_API_ADAPTER_ERR_SUCCESS &&
+ tech_mask != LOC_POS_TECH_MASK_DEFAULT &&
+ tech_mask & LOC_POS_TECH_MASK_CELLID) {
+ return LOC_API_ADAPTER_ERR_SUCCESS;
+ } else {
+ LOC_LOGD ("%s:%d]: getBestAvailableZppFix failed or"
+ " technoloy source includes GNSS that is not allowed"
+ " ret = %u, tech_mask = 0x%X ",
+ __func__, __LINE__, ret, tech_mask);
+ return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+ }
+ }
+
+ LOC_LOGD("Got Zpp fix location validity (lat:%d, lon:%d, timestamp:%d accuracy:%d)",
+ zpp_ind.latitude_valid,
+ zpp_ind.longitude_valid,
+ zpp_ind.timestampUtc_valid,
+ zpp_ind.horUncCircular_valid);
+
+ LOC_LOGD("(%.7f, %.7f), timestamp %llu, accuracy %f",
+ zpp_ind.latitude,
+ zpp_ind.longitude,
+ zpp_ind.timestampUtc,
+ zpp_ind.horUncCircular);
+
+ zppLoc.size = sizeof(GpsLocation);
+ if (zpp_ind.timestampUtc_valid) {
+ zppLoc.timestamp = zpp_ind.timestampUtc;
+ }
+ else {
+ /* The UTC time from modem is not valid.
+ In this case, we use current system time instead.*/
+
+ struct timespec time_info_current;
+ clock_gettime(CLOCK_REALTIME,&time_info_current);
+ zppLoc.timestamp = (time_info_current.tv_sec)*1e3 +
+ (time_info_current.tv_nsec)/1e6;
+ LOC_LOGD("zpp timestamp got from system: %llu", zppLoc.timestamp);
+ }
+
+ if ((zpp_ind.latitude_valid == false) ||
+ (zpp_ind.longitude_valid == false) ||
+ (zpp_ind.horUncCircular_valid == false)) {
+ return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+ }
+
+ zppLoc.flags = GPS_LOCATION_HAS_LAT_LONG | GPS_LOCATION_HAS_ACCURACY;
+ zppLoc.latitude = zpp_ind.latitude;
+ zppLoc.longitude = zpp_ind.longitude;
+ zppLoc.accuracy = zpp_ind.horUncCircular;
+
+ // If horCircularConfidence_valid is true, and horCircularConfidence value
+ // is less than 68%, then scale the accuracy value to 68% confidence.
+ if (zpp_ind.horCircularConfidence_valid)
+ {
+ scaleAccuracyTo68PercentConfidence(zpp_ind.horCircularConfidence,zppLoc);
+ }
+
+ if (zpp_ind.altitudeWrtEllipsoid_valid) {
+ zppLoc.flags |= GPS_LOCATION_HAS_ALTITUDE;
+ zppLoc.altitude = zpp_ind.altitudeWrtEllipsoid;
+ }
+
+ return LOC_API_ADAPTER_ERR_SUCCESS;
+}
+
+enum loc_api_adapter_err LocApiV02 :: getBestAvailableZppFix(GpsLocation & zppLoc)
+{
+ LocPosTechMask tech_mask;
+ return getBestAvailableZppFix(zppLoc, tech_mask);
+}
+
+enum loc_api_adapter_err LocApiV02 ::
+getBestAvailableZppFix(GpsLocation &zppLoc, LocPosTechMask &tech_mask)
+{
+ locClientReqUnionType req_union;
+
+ qmiLocGetBestAvailablePositionIndMsgT_v02 zpp_ind;
+ qmiLocGetBestAvailablePositionReqMsgT_v02 zpp_req;
+
+ memset(&zpp_ind, 0, sizeof(zpp_ind));
+ memset(&zpp_req, 0, sizeof(zpp_req));
+ memset(&zppLoc, 0, sizeof(zppLoc));
+ tech_mask = LOC_POS_TECH_MASK_DEFAULT;
+
+ req_union.pGetBestAvailablePositionReq = &zpp_req;
+
+ LOC_LOGD("%s:%d]: Get ZPP Fix from best available source\n", __func__, __LINE__);
+
+ locClientStatusEnumType status =
+ loc_sync_send_req(clientHandle,
+ QMI_LOC_GET_BEST_AVAILABLE_POSITION_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_GET_BEST_AVAILABLE_POSITION_IND_V02,
+ &zpp_ind);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != zpp_ind.status) {
+ LOC_LOGE ("%s:%d]: error! status = %s, zpp_ind.status = %s\n",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(zpp_ind.status));
+ } else {
+ LOC_LOGD("Got Zpp fix location validity (lat:%d, lon:%d, timestamp:%d accuracy:%d)"
+ " (%.7f, %.7f), timestamp %llu, accuracy %f",
+ zpp_ind.latitude_valid,
+ zpp_ind.longitude_valid,
+ zpp_ind.timestampUtc_valid,
+ zpp_ind.horUncCircular_valid,
+ zpp_ind.latitude,
+ zpp_ind.longitude,
+ zpp_ind.timestampUtc,
+ zpp_ind.horUncCircular);
+
+ zppLoc.size = sizeof(GpsLocation);
+ if (zpp_ind.timestampUtc_valid) {
+ zppLoc.timestamp = zpp_ind.timestampUtc;
+ }
+ else {
+ /* The UTC time from modem is not valid.
+ In this case, we use current system time instead.*/
+
+ struct timespec time_info_current;
+ clock_gettime(CLOCK_REALTIME,&time_info_current);
+ zppLoc.timestamp = (time_info_current.tv_sec)*1e3 +
+ (time_info_current.tv_nsec)/1e6;
+ LOC_LOGD("zpp timestamp got from system: %llu", zppLoc.timestamp);
+ }
+
+ if (zpp_ind.latitude_valid &&
+ zpp_ind.longitude_valid &&
+ zpp_ind.horUncCircular_valid ) {
+ zppLoc.flags = GPS_LOCATION_HAS_LAT_LONG | GPS_LOCATION_HAS_ACCURACY;
+ zppLoc.latitude = zpp_ind.latitude;
+ zppLoc.longitude = zpp_ind.longitude;
+ zppLoc.accuracy = zpp_ind.horUncCircular;
+
+ // If horCircularConfidence_valid is true, and horCircularConfidence value
+ // is less than 68%, then scale the accuracy value to 68% confidence.
+ if (zpp_ind.horCircularConfidence_valid)
+ {
+ scaleAccuracyTo68PercentConfidence(zpp_ind.horCircularConfidence,
+ zppLoc);
+ }
+
+ if (zpp_ind.altitudeWrtEllipsoid_valid) {
+ zppLoc.flags |= GPS_LOCATION_HAS_ALTITUDE;
+ zppLoc.altitude = zpp_ind.altitudeWrtEllipsoid;
+ }
+
+ if (zpp_ind.horSpeed_valid) {
+ zppLoc.flags |= GPS_LOCATION_HAS_SPEED;
+ zppLoc.speed = zpp_ind.horSpeed;
+ }
+
+ if (zpp_ind.heading_valid) {
+ zppLoc.flags |= GPS_LOCATION_HAS_BEARING;
+ zppLoc.bearing = zpp_ind.heading;
+ }
+
+ if (zpp_ind.technologyMask_valid) {
+ tech_mask = zpp_ind.technologyMask;
+ }
+ }
+ }
+
+ return convertErr(status);
+}
+
+/*Values for lock
+ 1 = Do not lock any position sessions
+ 2 = Lock MI position sessions
+ 3 = Lock MT position sessions
+ 4 = Lock all position sessions
+
+ Returns values:
+ zero on success; non-zero on failure
+*/
+int LocApiV02 :: setGpsLock(LOC_GPS_LOCK_MASK lockMask)
+{
+ qmiLocSetEngineLockReqMsgT_v02 setEngineLockReq;
+ qmiLocSetEngineLockIndMsgT_v02 setEngineLockInd;
+ locClientStatusEnumType status;
+ locClientReqUnionType req_union;
+ int ret=0;
+
+ LOC_LOGD("%s:%d]: Set Gps Lock: %x\n", __func__, __LINE__, lockMask);
+ setEngineLockReq.lockType = convertGpsLockMask(lockMask);
+ req_union.pSetEngineLockReq = &setEngineLockReq;
+ memset(&setEngineLockInd, 0, sizeof(setEngineLockInd));
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_ENGINE_LOCK_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_ENGINE_LOCK_IND_V02,
+ &setEngineLockInd);
+
+ if(status != eLOC_CLIENT_SUCCESS || setEngineLockInd.status != eQMI_LOC_SUCCESS_V02) {
+ LOC_LOGE("%s:%d]: Set engine lock failed. status: %s, ind status:%s\n",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(setEngineLockInd.status));
+ ret = -1;
+ }
+ LOC_LOGD("%s:%d]: exit\n", __func__, __LINE__);
+ return ret;
+}
+/*
+ Returns
+ Current value of GPS Lock on success
+ -1 on failure
+*/
+int LocApiV02 :: getGpsLock()
+{
+ qmiLocGetEngineLockReqMsgT_v02 getEngineLockReq;
+ qmiLocGetEngineLockIndMsgT_v02 getEngineLockInd;
+ locClientStatusEnumType status;
+ locClientReqUnionType req_union;
+ int ret=0;
+ LOC_LOGD("%s:%d]: Enter\n", __func__, __LINE__);
+ memset(&getEngineLockInd, 0, sizeof(getEngineLockInd));
+
+ //Passing req_union as a parameter even though this request has no payload
+ //since NULL or 0 gives an error during compilation
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_GET_ENGINE_LOCK_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_GET_ENGINE_LOCK_IND_V02,
+ &getEngineLockInd);
+ if(status != eLOC_CLIENT_SUCCESS || getEngineLockInd.status != eQMI_LOC_SUCCESS_V02) {
+ LOC_LOGE("%s:%d]: Set engine lock failed. status: %s, ind status:%s\n",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(getEngineLockInd.status));
+ ret = -1;
+ }
+ else {
+ if(getEngineLockInd.lockType_valid) {
+ ret = (int)getEngineLockInd.lockType;
+ LOC_LOGD("%s:%d]: Lock Type: %d\n", __func__, __LINE__, ret);
+ }
+ else {
+ LOC_LOGE("%s:%d]: Lock Type not valid\n", __func__, __LINE__);
+ ret = -1;
+ }
+ }
+ LOC_LOGD("%s:%d]: Exit\n", __func__, __LINE__);
+ return ret;
+}
+
+enum loc_api_adapter_err LocApiV02:: setXtraVersionCheck(enum xtra_version_check check)
+{
+ qmiLocSetXtraVersionCheckReqMsgT_v02 req;
+ qmiLocSetXtraVersionCheckIndMsgT_v02 ind;
+ locClientStatusEnumType status;
+ locClientReqUnionType req_union;
+ enum loc_api_adapter_err ret = LOC_API_ADAPTER_ERR_SUCCESS;
+
+ LOC_LOGD("%s:%d]: Enter. check: %d", __func__, __LINE__, check);
+ memset(&req, 0, sizeof(req));
+ memset(&ind, 0, sizeof(ind));
+ switch (check) {
+ case DISABLED:
+ req.xtraVersionCheckMode = eQMI_LOC_XTRA_VERSION_CHECK_DISABLE_V02;
+ break;
+ case AUTO:
+ req.xtraVersionCheckMode = eQMI_LOC_XTRA_VERSION_CHECK_AUTO_V02;
+ break;
+ case XTRA2:
+ req.xtraVersionCheckMode = eQMI_LOC_XTRA_VERSION_CHECK_XTRA2_V02;
+ break;
+ case XTRA3:
+ req.xtraVersionCheckMode = eQMI_LOC_XTRA_VERSION_CHECK_XTRA3_V02;
+ break;
+ default:
+ req.xtraVersionCheckMode = eQMI_LOC_XTRA_VERSION_CHECK_DISABLE_V02;
+ break;
+ }
+
+ req_union.pSetXtraVersionCheckReq = &req;
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_XTRA_VERSION_CHECK_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_XTRA_VERSION_CHECK_IND_V02,
+ &ind);
+ if(status != eLOC_CLIENT_SUCCESS || ind.status != eQMI_LOC_SUCCESS_V02) {
+ LOC_LOGE("%s:%d]: Set xtra version check failed. status: %s, ind status:%s\n",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(ind.status));
+ ret = LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+ }
+
+ LOC_LOGD("%s:%d]: Exit. ret: %d", __func__, __LINE__, (int)ret);
+ return ret;
+}
+
+void LocApiV02 :: installAGpsCert(const DerEncodedCertificate* pData,
+ size_t numberOfCerts,
+ uint32_t slotBitMask)
+{
+ LOC_LOGD("%s:%d]:, slot mask=%u number of certs=%u",
+ __func__, __LINE__, slotBitMask, numberOfCerts);
+
+ uint8_t certIndex = 0;
+ for (uint8_t slot = 0; slot <= AGPS_CERTIFICATE_MAX_SLOTS-1; slot++, slotBitMask >>= 1)
+ {
+ if (slotBitMask & 1) //slot is writable
+ {
+ if (certIndex < numberOfCerts && pData[certIndex].data && pData[certIndex].length > 0)
+ {
+ LOC_LOGD("%s:%d]:, Inject cert#%u slot=%u length=%u",
+ __func__, __LINE__, certIndex, slot, pData[certIndex].length);
+
+ locClientReqUnionType req_union;
+ locClientStatusEnumType status;
+ qmiLocInjectSuplCertificateReqMsgT_v02 injectCertReq;
+ qmiLocInjectSuplCertificateIndMsgT_v02 injectCertInd;
+
+ memset(&injectCertReq, 0, sizeof(injectCertReq));
+ memset(&injectCertInd, 0, sizeof(injectCertInd));
+ injectCertReq.suplCertId = slot;
+ injectCertReq.suplCertData_len = pData[certIndex].length;
+ memcpy(injectCertReq.suplCertData, pData[certIndex].data, pData[certIndex].length);
+
+ req_union.pInjectSuplCertificateReq = &injectCertReq;
+
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02,
+ &injectCertInd);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != injectCertInd.status)
+ {
+ LOC_LOGE ("%s:%d]: inject-error status = %s, set_server_ind.status = %s",
+ __func__,__LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(injectCertInd.status));
+ }
+
+ certIndex++; //move to next cert
+
+ } else {
+
+ LOC_LOGD("%s:%d]:, Delete slot=%u",
+ __func__, __LINE__, slot);
+
+ // A fake cert is injected first before delete is called to workaround
+ // an issue that is seen with trying to delete an empty slot.
+ {
+ locClientReqUnionType req_union;
+ locClientStatusEnumType status;
+ qmiLocInjectSuplCertificateReqMsgT_v02 injectFakeCertReq;
+ qmiLocInjectSuplCertificateIndMsgT_v02 injectFakeCertInd;
+
+ memset(&injectFakeCertReq, 0, sizeof(injectFakeCertReq));
+ memset(&injectFakeCertInd, 0, sizeof(injectFakeCertInd));
+ injectFakeCertReq.suplCertId = slot;
+ injectFakeCertReq.suplCertData_len = 1;
+ injectFakeCertReq.suplCertData[0] = 1;
+
+ req_union.pInjectSuplCertificateReq = &injectFakeCertReq;
+
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02,
+ &injectFakeCertInd);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != injectFakeCertInd.status)
+ {
+ LOC_LOGE ("%s:%d]: inject-fake-error status = %s, set_server_ind.status = %s",
+ __func__,__LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(injectFakeCertInd.status));
+ }
+ }
+
+ locClientReqUnionType req_union;
+ locClientStatusEnumType status;
+ qmiLocDeleteSuplCertificateReqMsgT_v02 deleteCertReq;
+ qmiLocDeleteSuplCertificateIndMsgT_v02 deleteCertInd;
+
+ memset(&deleteCertReq, 0, sizeof(deleteCertReq));
+ memset(&deleteCertInd, 0, sizeof(deleteCertInd));
+ deleteCertReq.suplCertId = slot;
+ deleteCertReq.suplCertId_valid = 1;
+
+ req_union.pDeleteSuplCertificateReq = &deleteCertReq;
+
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02,
+ req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02,
+ &deleteCertInd);
+
+ if (status != eLOC_CLIENT_SUCCESS ||
+ eQMI_LOC_SUCCESS_V02 != deleteCertInd.status)
+ {
+ LOC_LOGE("%s:%d]: delete-error status = %s, set_server_ind.status = %s",
+ __func__,__LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(deleteCertInd.status));
+ }
+ }
+ } else {
+ LOC_LOGD("%s:%d]:, Not writable slot=%u",
+ __func__, __LINE__, slot);
+ }
+ }
+}
+
+int LocApiV02::setSvMeasurementConstellation(const qmiLocGNSSConstellEnumT_v02 svConstellation)
+{
+ enum loc_api_adapter_err ret_val = LOC_API_ADAPTER_ERR_SUCCESS;
+ qmiLocSetGNSSConstRepConfigReqMsgT_v02 setGNSSConstRepConfigReq;
+ qmiLocSetGNSSConstRepConfigIndMsgT_v02 setGNSSConstRepConfigInd;
+ locClientStatusEnumType status;
+ locClientReqUnionType req_union;
+ LOC_LOGD("%s] set GNSS measurement to report constellation: %lld\n",
+ __func__, svConstellation);
+
+ memset(&setGNSSConstRepConfigReq, 0, sizeof(setGNSSConstRepConfigReq));
+ setGNSSConstRepConfigReq.measReportConfig_valid = true;
+ setGNSSConstRepConfigReq.measReportConfig = svConstellation;
+ setGNSSConstRepConfigReq.svPolyReportConfig_valid = true;
+ setGNSSConstRepConfigReq.svPolyReportConfig = svConstellation;
+
+ req_union.pSetGNSSConstRepConfigReq = &setGNSSConstRepConfigReq;
+ memset(&setGNSSConstRepConfigInd, 0, sizeof(setGNSSConstRepConfigInd));
+
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_V02,
+ req_union,
+ LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_IND_V02,
+ &setGNSSConstRepConfigInd);
+
+ if(status != eLOC_CLIENT_SUCCESS || setGNSSConstRepConfigInd.status != eQMI_LOC_SUCCESS_V02)
+ {
+ LOC_LOGE("%s:%d]: Set GNSS constellation failed. status: %s, ind status:%s\n",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(setGNSSConstRepConfigInd.status));
+ ret_val = LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
+ } else {
+ LOC_LOGD("%s:%d]: Set GNSS constellation succeeded.\n",
+ __func__, __LINE__);
+ }
+
+ return ret_val;
+}
+
+bool LocApiV02 :: gnssConstellationConfig()
+{
+ return mGnssMeasurementSupported == sup_yes;
+}
+
+void LocApiV02 :: cacheGnssMeasurementSupport()
+{
+ if (sup_unknown == mGnssMeasurementSupported) {
+ if ((mQmiMask & QMI_LOC_EVENT_MASK_POSITION_REPORT_V02) ==
+ QMI_LOC_EVENT_MASK_POSITION_REPORT_V02) {
+ /*for GNSS Measurement service, use
+ QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_V02
+ to check if modem support this feature or not*/
+ LOC_LOGD("%s:%d]: set GNSS measurement to report gps measurement only.\n",
+ __func__, __LINE__);
+
+ qmiLocSetGNSSConstRepConfigReqMsgT_v02 setGNSSConstRepConfigReq;
+ qmiLocSetGNSSConstRepConfigIndMsgT_v02 setGNSSConstRepConfigInd;
+ memset(&setGNSSConstRepConfigReq, 0, sizeof(setGNSSConstRepConfigReq));
+ memset(&setGNSSConstRepConfigInd, 0, sizeof(setGNSSConstRepConfigInd));
+
+ locClientStatusEnumType status;
+ locClientReqUnionType req_union;
+
+ setGNSSConstRepConfigReq.measReportConfig_valid = true;
+ setGNSSConstRepConfigReq.measReportConfig = eQMI_SYSTEM_GPS_V02;
+ req_union.pSetGNSSConstRepConfigReq = &setGNSSConstRepConfigReq;
+
+ status = loc_sync_send_req(clientHandle,
+ QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_V02,
+ req_union,
+ LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
+ QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_IND_V02,
+ &setGNSSConstRepConfigInd);
+
+ if(status != eLOC_CLIENT_SUCCESS ||
+ setGNSSConstRepConfigInd.status != eQMI_LOC_SUCCESS_V02) {
+ LOC_LOGD("%s:%d]: Set GNSS constellation failed."
+ " status: %s, ind status:%s\n",
+ __func__, __LINE__,
+ loc_get_v02_client_status_name(status),
+ loc_get_v02_qmi_status_name(setGNSSConstRepConfigInd.status));
+ mGnssMeasurementSupported = sup_no;
+ } else {
+ LOC_LOGD("%s:%d]: Set GNSS constellation succeeded.\n",
+ __func__, __LINE__);
+ mGnssMeasurementSupported = sup_yes;
+ }
+ }
+ }
+
+ LOC_LOGV("%s:%d]: mGnssMeasurementSupported is %d\n", __func__, __LINE__, mGnssMeasurementSupported);
+}
diff --git a/gps/loc_api/loc_api_v02/LocApiV02.h b/gps/loc_api/loc_api_v02/LocApiV02.h
new file mode 100644
index 0000000..1c31b34
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/LocApiV02.h
@@ -0,0 +1,262 @@
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation, 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_H
+#define LOC_API_V_0_2_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <ds_client.h>
+#include <LocApiBase.h>
+#include <loc_api_v02_client.h>
+
+using namespace loc_core;
+
+/* This class derives from the LocApiBase class.
+ The members of this class are responsible for converting
+ the Loc API V02 data structures into Loc Adapter data structures.
+ This class also implements some of the virtual functions that
+ handle the requests from loc engine. */
+class LocApiV02 : public LocApiBase {
+ enum supported_status {
+ sup_unknown,
+ sup_yes,
+ sup_no
+ };
+protected:
+ /* loc api v02 handle*/
+ locClientHandleType clientHandle;
+
+private:
+ /* ds client library handle */
+ void *dsLibraryHandle;
+ /* ds client interface */
+ const ds_client_iface_type *dsClientIface;
+ /* ds client handle */
+ dsClientHandleType dsClientHandle;
+ enum supported_status mGnssMeasurementSupported;
+ locClientEventMaskType mQmiMask;
+ bool mInSession;
+ bool mEngineOn;
+ bool mMeasurementsStarted;
+
+ /* Convert event mask from loc eng to loc_api_v02 format */
+ static locClientEventMaskType convertMask(LOC_API_ADAPTER_EVENT_MASK_T mask);
+
+ /* Convert GPS LOCK mask from gps.conf definition */
+ static qmiLocLockEnumT_v02 convertGpsLockMask(LOC_GPS_LOCK_MASK lockMask);
+
+ /* Convert error from loc_api_v02 to loc eng format*/
+ static enum loc_api_adapter_err convertErr(locClientStatusEnumType status);
+
+ /* convert Ni Encoding type from QMI_LOC to loc eng format */
+ static GpsNiEncodingType convertNiEncoding(
+ qmiLocNiDataCodingSchemeEnumT_v02 loc_encoding);
+
+ /*convert NI notify verify type from QMI LOC to loc eng format*/
+ static bool convertNiNotifyVerifyType (GpsNiNotification *notif,
+ qmiLocNiNotifyVerifyEnumT_v02 notif_priv);
+
+ /*convert GnssMeasurement type from QMI LOC to loc eng format*/
+ static void convertGnssMeasurements (GnssMeasurement& gnssMeasurement,
+ const qmiLocSVMeasurementStructT_v02& gnss_measurement_info);
+
+ /*convert GnssClock type from QMI LOC to loc eng format*/
+ void convertGnssClock (GnssClock& gnssClock,
+ const qmiLocEventGnssSvMeasInfoIndMsgT_v02& gnss_measurement_info);
+
+ /* If Confidence value is less than 68%, then scale the accuracy value to 68%
+ confidence.*/
+ void scaleAccuracyTo68PercentConfidence(const uint8_t confidenceValue,
+ GpsLocation &gpsLocation);
+
+ /* 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);
+
+ void reportSvMeasurement (
+ const qmiLocEventGnssSvMeasInfoIndMsgT_v02 *gnss_raw_measurement_ptr);
+
+ void reportSvPolynomial (
+ const qmiLocEventGnssSvPolyIndMsgT_v02 *gnss_sv_poly_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);
+
+ /* report the xtra server info */
+ void reportXtraServerUrl(
+ const qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02* server_request_ptr);
+
+ /* convert and report GNSS measurement data to loc eng */
+ void reportGnssMeasurementData(
+ const qmiLocEventGnssSvMeasInfoIndMsgT_v02& gnss_measurement_report_ptr);
+
+ bool registerEventMask(locClientEventMaskType qmiMask);
+ locClientEventMaskType adjustMaskForNoSession(locClientEventMaskType qmiMask);
+ void cacheGnssMeasurementSupport();
+
+protected:
+ virtual enum loc_api_adapter_err
+ open(LOC_API_ADAPTER_EVENT_MASK_T mask);
+ virtual enum loc_api_adapter_err
+ close();
+
+ LocApiV02(const MsgTask* msgTask,
+ LOC_API_ADAPTER_EVENT_MASK_T exMask,
+ ContextBase *context = NULL);
+public:
+ ~LocApiV02();
+
+ static LocApiBase* createLocApiV02(const MsgTask *msgTask,
+ LOC_API_ADAPTER_EVENT_MASK_T exMask,
+ ContextBase* context);
+ /* event callback registered with the loc_api v02 interface */
+ virtual 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);
+
+ void ds_client_event_cb(ds_client_status_enum_type result);
+
+ virtual enum loc_api_adapter_err startFix(const LocPosMode& posMode);
+
+ virtual enum loc_api_adapter_err stopFix();
+
+ virtual enum loc_api_adapter_err
+ setPositionMode(const LocPosMode& mode);
+
+ 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);
+ virtual enum loc_api_adapter_err
+ requestXtraServer();
+ 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);
+
+ virtual enum loc_api_adapter_err setNMEATypes (uint32_t typesMask);
+
+ virtual enum loc_api_adapter_err setLPPConfig(uint32_t profile);
+
+ virtual enum loc_api_adapter_err
+ setSensorControlConfig(int sensorUsage, int sensorProvider);
+
+ virtual enum loc_api_adapter_err
+ setSensorProperties(bool gyroBiasVarianceRandomWalk_valid, float gyroBiasVarianceRandomWalk,
+ bool accelBiasVarianceRandomWalk_valid, float accelBiasVarianceRandomWalk,
+ bool angleBiasVarianceRandomWalk_valid, float angleBiasVarianceRandomWalk,
+ bool rateBiasVarianceRandomWalk_valid, float rateBiasVarianceRandomWalk,
+ bool velocityBiasVarianceRandomWalk_valid, float velocityBiasVarianceRandomWalk);
+
+ virtual enum loc_api_adapter_err
+ setSensorPerfControlConfig(int controlMode, int accelSamplesPerBatch, int accelBatchesPerSec,
+ int gyroSamplesPerBatch, int gyroBatchesPerSec,
+ int accelSamplesPerBatchHigh, int accelBatchesPerSecHigh,
+ int gyroSamplesPerBatchHigh, int gyroBatchesPerSecHigh, int algorithmConfig);
+ virtual enum loc_api_adapter_err setAGLONASSProtocol(unsigned long aGlonassProtocol);
+ virtual enum loc_api_adapter_err setLPPeProtocol(unsigned long lppeCP, unsigned long lppeUP);
+ virtual enum loc_api_adapter_err
+ getWwanZppFix(GpsLocation & zppLoc);
+ virtual enum loc_api_adapter_err
+ getBestAvailableZppFix(GpsLocation & zppLoc);
+ virtual enum loc_api_adapter_err
+ getBestAvailableZppFix(GpsLocation & zppLoc, LocPosTechMask & tech_mask);
+ virtual int initDataServiceClient();
+ virtual int openAndStartDataCall();
+ virtual void stopDataCall();
+ virtual void closeDataCall();
+ virtual int setGpsLock(LOC_GPS_LOCK_MASK lock);
+
+ /*
+ Returns
+ Current value of GPS Lock on success
+ -1 on failure
+ */
+ virtual int getGpsLock(void);
+ virtual int setSvMeasurementConstellation(const qmiLocGNSSConstellEnumT_v02 svConstellation);
+ virtual enum loc_api_adapter_err setXtraVersionCheck(enum xtra_version_check check);
+ virtual void installAGpsCert(const DerEncodedCertificate* pData,
+ size_t length,
+ uint32_t slotBitMask);
+ /*
+ Set Gnss Constellation Config
+ */
+ virtual bool gnssConstellationConfig();
+};
+
+extern "C" LocApiBase* getLocApi(const MsgTask* msgTask,
+ LOC_API_ADAPTER_EVENT_MASK_T exMask,
+ ContextBase *context);
+#endif //LOC_API_V_0_2_H
diff --git a/gps/loc_api/loc_api_v02/Makefile.am b/gps/loc_api/loc_api_v02/Makefile.am
new file mode 100644
index 0000000..2308cd4
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/Makefile.am
@@ -0,0 +1,42 @@
+AM_CFLAGS = \
+ ${QMIF_CFLAGS} \
+ -I../../utils \
+ -I../../platform_lib_abstractions \
+ -I../libloc_api_50001
+
+requiredlibs = \
+ ${QMIF_LIBS} \
+ ../libloc_api_50001/libloc_adapter_so.la \
+ ../../utils/libgps_utils_so.la
+
+h_sources = LocApiV02Adapter.h \
+ loc_util_log.h \
+ location_service_v02.h \
+ loc_api_sync_req.h \
+ loc_api_v02_client.h \
+ loc_api_v02_log.h
+
+c_sources = LocApiV02Adapter.cpp \
+ loc_api_v02_log.c \
+ loc_api_v02_client.c \
+ loc_api_sync_req.c \
+ location_service_v02.c
+
+library_includedir = $(pkgincludedir)
+library_include_HEADERS = $(h_sources)
+
+libloc_api_la_SOURCES = $(c_sources) $(h_sources)
+
+if USE_GLIB
+libloc_api_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libloc_api_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libloc_api_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libloc_api_la_CFLAGS = $(AM_CFLAGS)
+libloc_api_la_LDFLAGS = -shared -version-info 1:0:0
+libloc_api_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+
+libloc_api_la_LIBADD = $(requiredlibs) -lstdc++
+
+lib_LTLIBRARIES = libloc_api.la
diff --git a/gps/loc_api/loc_api_v02/loc_api_sync_req.c b/gps/loc_api/loc_api_v02/loc_api_sync_req.c
new file mode 100644
index 0000000..1b2b69e
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/loc_api_sync_req.c
@@ -0,0 +1,555 @@
+/* Copyright (c) 2011-2012, 2015-2016, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation, 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_cfg.h>
+#include "loc_api_v02_client.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
+#define GPS_CONF_FILE "/etc/gps.conf"
+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__);
+ UTIL_READ_CONF_DEFAULT(GPS_CONF_FILE);
+ 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 */
+ uint32_t ind_payload_size /* payload size */
+)
+{
+
+ LOC_LOGV("%s:%d]: received indication, handle = %p ind_id = %u \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))
+ {
+ LOC_LOGV("%s:%d]: found slot %d selected for ind %u \n",
+ __func__, __LINE__, i, ind_id);
+
+ if( NULL != slot->recv_ind_payload_ptr &&
+ NULL != ind_payload_ptr && ind_payload_size > 0 )
+ {
+ LOC_LOGV("%s:%d]: copying ind payload size = %zu \n",
+ __func__, __LINE__, ind_payload_size);
+
+ memcpy(slot->recv_ind_payload_ptr, ind_payload_ptr, ind_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 %p, 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;
+ int sendReqRetryRem = 5; // Number of retries remaining
+
+ // 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)
+ {
+ // Loop to retry few times in case of failures
+ do
+ {
+ 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 )
+ {
+ // 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);
+ }
+ }
+
+ } while(( status == eLOC_CLIENT_FAILURE_ENGINE_BUSY ||
+ status == eLOC_CLIENT_FAILURE_PHONE_OFFLINE ||
+ status == eLOC_CLIENT_FAILURE_INTERNAL ) &&
+ sendReqRetryRem-- > 0);
+
+ if (status != eLOC_CLIENT_SUCCESS )
+ {
+ loc_free_slot(select_id);
+ }
+
+ } /* select id */
+
+ return status;
+}
+
+
diff --git a/gps/loc_api/loc_api_v02/loc_api_sync_req.h b/gps/loc_api/loc_api_v02/loc_api_sync_req.h
new file mode 100644
index 0000000..b7908f8
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/loc_api_sync_req.h
@@ -0,0 +1,92 @@
+/* Copyright (c) 2011,2013,2016, The Linux Foundation. All rights reserved
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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
+
+#define LOC_SEND_SYNC_REQ(NAME, ID, REQ, HANDLE) \
+ int rv = true; \
+ locClientStatusEnumType st; \
+ locClientReqUnionType reqUnion; \
+ qmiLoc##NAME##IndMsgT_v02 ind; \
+\
+ memset(&ind, 0, sizeof(ind)); \
+ reqUnion.p##NAME##Req = &REQ; \
+\
+ st = loc_sync_send_req(HANDLE, \
+ QMI_LOC_##ID##_REQ_V02, \
+ reqUnion, \
+ LOC_ENGINE_SYNC_REQUEST_TIMEOUT, \
+ QMI_LOC_##ID##_IND_V02, \
+ &ind); \
+\
+ if (st != eLOC_CLIENT_SUCCESS || \
+ eQMI_LOC_SUCCESS_V02 != ind.status) { \
+ LOC_LOGE ("%s:%d]: Error : st = %d, ind.status = %d", \
+ __func__, __LINE__, st, ind.status); \
+ rv = false; \
+ }
+
+/* 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 */
+ uint32_t ind_payload_size /* payload size */
+);
+
+/* 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/gps/loc_api/loc_api_v02/loc_api_v02_client.c b/gps/loc_api/loc_api_v02/loc_api_v02_client.c
new file mode 100644
index 0000000..2ff0fbc
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/loc_api_v02_client.c
@@ -0,0 +1,2303 @@
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation, 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 <stdlib.h>
+#include <string.h>
+#include <stddef.h>
+
+#include <stdbool.h>
+#include <inttypes.h>
+
+#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"
+#define LOG_NDEBUG 0
+#define LOG_TAG "LocSvc_api_v02"
+#endif //_ANDROID_
+
+
+#include "loc_api_v02_client.h"
+#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)
+
+#else
+
+// timeout in ms before send_msg_sync should return
+#define LOC_CLIENT_ACK_TIMEOUT (1000)
+
+#endif //LOC_UTIL_TARGET_OFF_TARGET
+
+#define LOC_CLIENT_MAX_OPEN_RETRIES (20)
+#define LOC_CLIENT_TIME_BETWEEN_OPEN_RETRIES (1)
+
+enum
+{
+ //! Special value for selecting any available service
+ /** This value enables selection of any available service */
+ eLOC_CLIENT_INSTANCE_ID_ANY = -1,
+ //! qca1530 service id value
+ /** qca1530 service daemon uses service id value 1 */
+ eLOC_CLIENT_INSTANCE_ID_QCA1530 = 1,
+ //! GSS service id value
+ /* GSS service id value is 0, but here it is set to -1 for compatibitily */
+ eLOC_CLIENT_INSTANCE_ID_GSS = eLOC_CLIENT_INSTANCE_ID_ANY,
+ //! MSM service id value
+ /** MSM service id value is 0, but here it is set to -1 for compatibitily */
+ eLOC_CLIENT_INSTANCE_ID_MSM = eLOC_CLIENT_INSTANCE_ID_ANY,
+ //! MDM service id value
+ /** MDM connects using QMUXD and assigned a value of
+ QMI_CLIENT_QMUX_RMNET_USB_INSTANCE_0 ("qmi_client_instance_defs.h", 37).
+ -1 for compatibility */
+ eLOC_CLIENT_INSTANCE_ID_MDM = eLOC_CLIENT_INSTANCE_ID_ANY,
+ /* GSS service id value is 0, for auto config */
+ eLOC_CLIENT_INSTANCE_ID_GSS_AUTO = 0
+};
+
+/* 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 const 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 },
+
+ // NI Geofence Event
+ { QMI_LOC_EVENT_NI_GEOFENCE_NOTIFICATION_IND_V02,
+ sizeof(qmiLocEventNiGeofenceNotificationIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_NI_GEOFENCE_NOTIFICATION_V02},
+
+ // Geofence General Alert Event
+ { QMI_LOC_EVENT_GEOFENCE_GEN_ALERT_IND_V02,
+ sizeof(qmiLocEventGeofenceGenAlertIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_GEOFENCE_GEN_ALERT_V02},
+
+ //Geofence Breach event
+ { QMI_LOC_EVENT_GEOFENCE_BREACH_NOTIFICATION_IND_V02,
+ sizeof(qmiLocEventGeofenceBreachIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_GEOFENCE_BREACH_NOTIFICATION_V02},
+
+ //Geofence Batched Breach event
+ { QMI_LOC_EVENT_GEOFENCE_BATCHED_BREACH_NOTIFICATION_IND_V02,
+ sizeof(qmiLocEventGeofenceBatchedBreachIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_BREACH_NOTIFICATION_V02},
+
+ //Pedometer Control event
+ { QMI_LOC_EVENT_PEDOMETER_CONTROL_IND_V02,
+ sizeof(qmiLocEventPedometerControlIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_PEDOMETER_CONTROL_V02 },
+
+ //Motion Data Control event
+ { QMI_LOC_EVENT_MOTION_DATA_CONTROL_IND_V02,
+ sizeof(qmiLocEventMotionDataControlIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_MOTION_DATA_CONTROL_V02 },
+
+ //Wifi AP data request event
+ { QMI_LOC_EVENT_INJECT_WIFI_AP_DATA_REQ_IND_V02,
+ sizeof(qmiLocEventInjectWifiApDataReqIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_INJECT_WIFI_AP_DATA_REQ_V02 },
+
+ //Get Batching On Fix Event
+ { QMI_LOC_EVENT_LIVE_BATCHED_POSITION_REPORT_IND_V02,
+ sizeof(qmiLocEventLiveBatchedPositionReportIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_LIVE_BATCHED_POSITION_REPORT_V02 },
+
+ //Get Batching On Full Event
+ { QMI_LOC_EVENT_BATCH_FULL_NOTIFICATION_IND_V02,
+ sizeof(qmiLocEventBatchFullIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_BATCH_FULL_NOTIFICATION_V02 },
+
+ //Vehicle Data Readiness event
+ { QMI_LOC_EVENT_VEHICLE_DATA_READY_STATUS_IND_V02,
+ sizeof(qmiLocEventVehicleDataReadyIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_VEHICLE_DATA_READY_STATUS_V02 },
+
+ //Geofence Proximity event
+ { QMI_LOC_EVENT_GEOFENCE_PROXIMITY_NOTIFICATION_IND_V02,
+ sizeof(qmiLocEventGeofenceProximityIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_GEOFENCE_PROXIMITY_NOTIFICATION_V02},
+
+ //GNSS Measurement Indication
+ { QMI_LOC_EVENT_GNSS_MEASUREMENT_REPORT_IND_V02,
+ sizeof(qmiLocEventGnssSvMeasInfoIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_GNSS_MEASUREMENT_REPORT_V02 },
+
+ //GNSS Measurement Indication
+ { QMI_LOC_EVENT_SV_POLYNOMIAL_REPORT_IND_V02,
+ sizeof(qmiLocEventGnssSvPolyIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_GNSS_SV_POLYNOMIAL_REPORT_V02 },
+
+ // for GDT
+ { QMI_LOC_EVENT_GDT_UPLOAD_BEGIN_STATUS_REQ_IND_V02,
+ sizeof(qmiLocEventGdtUploadBeginStatusReqIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_GDT_UPLOAD_BEGIN_REQ_V02,
+ },
+
+ { QMI_LOC_EVENT_GDT_UPLOAD_END_REQ_IND_V02,
+ sizeof(qmiLocEventGdtUploadEndReqIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_GDT_UPLOAD_END_REQ_V02,
+ },
+
+ //GNSS measurement event
+ { QMI_LOC_EVENT_GNSS_MEASUREMENT_REPORT_IND_V02 ,
+ sizeof(qmiLocEventGnssSvMeasInfoIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_GNSS_MEASUREMENT_REPORT_V02},
+
+ { QMI_LOC_EVENT_DBT_POSITION_REPORT_IND_V02,
+ sizeof(qmiLocEventDbtPositionReportIndMsgT_v02),
+ 0},
+
+ { QMI_LOC_EVENT_GEOFENCE_BATCHED_DWELL_NOTIFICATION_IND_V02,
+ sizeof(qmiLocEventGeofenceBatchedDwellIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_DWELL_NOTIFICATION_V02},
+
+ { QMI_LOC_EVENT_GET_TIME_ZONE_INFO_IND_V02,
+ sizeof(qmiLocEventGetTimeZoneReqIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_GET_TIME_ZONE_REQ_V02},
+
+ // Batching Status event
+ { QMI_LOC_EVENT_BATCHING_STATUS_IND_V02,
+ sizeof(qmiLocEventBatchingStatusIndMsgT_v02),
+ QMI_LOC_EVENT_MASK_BATCHING_STATUS_V02},
+
+ // TDP download
+ { QMI_LOC_EVENT_GDT_DOWNLOAD_BEGIN_REQ_IND_V02,
+ sizeof(qmiLocEventGdtDownloadBeginReqIndMsgT_v02),
+ 0},
+
+ { QMI_LOC_EVENT_GDT_RECEIVE_DONE_IND_V02,
+ sizeof(qmiLocEventGdtReceiveDoneIndMsgT_v02),
+ 0},
+
+ { QMI_LOC_EVENT_GDT_DOWNLOAD_END_REQ_IND_V02,
+ sizeof(qmiLocEventGdtDownloadEndReqIndMsgT_v02),
+ 0}
+};
+
+/* table to relate the respInd Id with its size */
+typedef struct
+{
+ uint32_t respIndId;
+ size_t respIndSize;
+}locClientRespIndTableStructT;
+
+static const 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 AP cache injection Resp Ind
+ { QMI_LOC_INJECT_APCACHE_DATA_IND_V02,
+ sizeof(qmiLocInjectApCacheDataIndMsgT_v02)},
+
+ //Set No AP cache injection Resp Ind
+ { QMI_LOC_INJECT_APDONOTCACHE_DATA_IND_V02,
+ sizeof(qmiLocInjectApDoNotCacheDataIndMsgT_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)},
+
+ //Add a Circular Geofence
+ { QMI_LOC_ADD_CIRCULAR_GEOFENCE_IND_V02,
+ sizeof(qmiLocAddCircularGeofenceIndMsgT_v02)},
+
+ //Delete a Geofence
+ { QMI_LOC_DELETE_GEOFENCE_IND_V02,
+ sizeof(qmiLocDeleteGeofenceIndMsgT_v02)} ,
+
+ //Query a Geofence
+ { QMI_LOC_QUERY_GEOFENCE_IND_V02,
+ sizeof(qmiLocQueryGeofenceIndMsgT_v02)},
+
+ //Edit a Geofence
+ { QMI_LOC_EDIT_GEOFENCE_IND_V02,
+ sizeof(qmiLocEditGeofenceIndMsgT_v02)},
+
+ //Get best available position
+ { QMI_LOC_GET_BEST_AVAILABLE_POSITION_IND_V02,
+ sizeof(qmiLocGetBestAvailablePositionIndMsgT_v02)},
+
+ //Secure Get available position
+ { QMI_LOC_SECURE_GET_AVAILABLE_POSITION_IND_V02,
+ sizeof(qmiLocSecureGetAvailablePositionIndMsgT_v02)},
+
+ //Inject motion data
+ { QMI_LOC_INJECT_MOTION_DATA_IND_V02,
+ sizeof(qmiLocInjectMotionDataIndMsgT_v02)},
+
+ //Get NI Geofence list
+ { QMI_LOC_GET_NI_GEOFENCE_ID_LIST_IND_V02,
+ sizeof(qmiLocGetNiGeofenceIdListIndMsgT_v02)},
+
+ //Inject GSM Cell Info
+ { QMI_LOC_INJECT_GSM_CELL_INFO_IND_V02,
+ sizeof(qmiLocInjectGSMCellInfoIndMsgT_v02)},
+
+ //Inject Network Initiated Message
+ { QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_IND_V02,
+ sizeof(qmiLocInjectNetworkInitiatedMessageIndMsgT_v02)},
+
+ //WWAN Out of Service Notification
+ { QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_IND_V02,
+ sizeof(qmiLocWWANOutOfServiceNotificationIndMsgT_v02)},
+
+ //Pedomete Report
+ { QMI_LOC_PEDOMETER_REPORT_IND_V02,
+ sizeof(qmiLocPedometerReportIndMsgT_v02)},
+
+ { QMI_LOC_INJECT_WCDMA_CELL_INFO_IND_V02,
+ sizeof(qmiLocInjectWCDMACellInfoIndMsgT_v02)},
+
+ { QMI_LOC_INJECT_TDSCDMA_CELL_INFO_IND_V02,
+ sizeof(qmiLocInjectTDSCDMACellInfoIndMsgT_v02)},
+
+ { QMI_LOC_INJECT_SUBSCRIBER_ID_IND_V02,
+ sizeof(qmiLocInjectSubscriberIDIndMsgT_v02)},
+
+ //Inject Wifi AP data Resp Ind
+ { QMI_LOC_INJECT_WIFI_AP_DATA_IND_V02,
+ sizeof(qmiLocInjectWifiApDataIndMsgT_v02)},
+
+ { QMI_LOC_START_BATCHING_IND_V02,
+ sizeof(qmiLocStartBatchingIndMsgT_v02)},
+
+ { QMI_LOC_STOP_BATCHING_IND_V02,
+ sizeof(qmiLocStopBatchingIndMsgT_v02)},
+
+ { QMI_LOC_GET_BATCH_SIZE_IND_V02,
+ sizeof(qmiLocGetBatchSizeIndMsgT_v02)},
+
+ { QMI_LOC_EVENT_LIVE_BATCHED_POSITION_REPORT_IND_V02,
+ sizeof(qmiLocEventPositionReportIndMsgT_v02)},
+
+ { QMI_LOC_EVENT_BATCH_FULL_NOTIFICATION_IND_V02,
+ sizeof(qmiLocEventBatchFullIndMsgT_v02)},
+
+ { QMI_LOC_READ_FROM_BATCH_IND_V02,
+ sizeof(qmiLocReadFromBatchIndMsgT_v02)},
+
+ { QMI_LOC_RELEASE_BATCH_IND_V02,
+ sizeof(qmiLocReleaseBatchIndMsgT_v02)},
+
+ { QMI_LOC_SET_XTRA_VERSION_CHECK_IND_V02,
+ sizeof(qmiLocSetXtraVersionCheckIndMsgT_v02)},
+
+ //Vehicle Sensor Data
+ { QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_IND_V02,
+ sizeof(qmiLocInjectVehicleSensorDataIndMsgT_v02)},
+
+ { QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_IND_V02,
+ sizeof(qmiLocNotifyWifiAttachmentStatusIndMsgT_v02)},
+
+ { QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_IND_V02,
+ sizeof(qmiLocNotifyWifiEnabledStatusIndMsgT_v02)},
+
+ { QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_IND_V02,
+ sizeof(qmiLocSetPremiumServicesCfgReqMsgT_v02)},
+
+ { QMI_LOC_GET_AVAILABLE_WWAN_POSITION_IND_V02,
+ sizeof(qmiLocGetAvailWwanPositionIndMsgT_v02)},
+
+ // for TDP
+ { QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_IND_V02,
+ sizeof(qmiLocInjectGtpClientDownloadedDataIndMsgT_v02) },
+
+ // for GDT
+ { QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_IND_V02,
+ sizeof(qmiLocGdtUploadBeginStatusIndMsgT_v02) },
+
+ { QMI_LOC_GDT_UPLOAD_END_IND_V02,
+ sizeof(qmiLocGdtUploadEndIndMsgT_v02) },
+
+ { QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_IND_V02,
+ sizeof(qmiLocSetGNSSConstRepConfigIndMsgT_v02)},
+
+ { QMI_LOC_START_DBT_IND_V02,
+ sizeof(qmiLocStartDbtIndMsgT_v02)},
+
+ { QMI_LOC_STOP_DBT_IND_V02,
+ sizeof(qmiLocStopDbtIndMsgT_v02)},
+
+ { QMI_LOC_INJECT_TIME_ZONE_INFO_IND_V02,
+ sizeof(qmiLocInjectTimeZoneInfoIndMsgT_v02)},
+
+ { QMI_LOC_QUERY_AON_CONFIG_IND_V02,
+ sizeof(qmiLocQueryAonConfigIndMsgT_v02)},
+
+ // for GTP
+ { QMI_LOC_GTP_AP_STATUS_IND_V02,
+ sizeof(qmiLocGtpApStatusIndMsgT_v02) },
+
+ // for GDT
+ { QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_IND_V02,
+ sizeof(qmiLocGdtDownloadBeginStatusIndMsgT_v02) },
+
+ { QMI_LOC_GDT_DOWNLOAD_READY_STATUS_IND_V02,
+ sizeof(qmiLocGdtDownloadReadyStatusIndMsgT_v02) },
+
+ { QMI_LOC_GDT_RECEIVE_DONE_STATUS_IND_V02,
+ sizeof(qmiLocGdtReceiveDoneStatusIndMsgT_v02) },
+
+ { QMI_LOC_GDT_DOWNLOAD_END_STATUS_IND_V02,
+ sizeof(qmiLocGdtDownloadEndStatusIndMsgT_v02) },
+
+ { QMI_LOC_GET_SUPPORTED_FEATURE_IND_V02,
+ sizeof(qmiLocGetSupportedFeatureIndMsgT_v02) },
+
+ //Delete Gnss Service Data Resp Ind
+ { QMI_LOC_DELETE_GNSS_SERVICE_DATA_IND_V02,
+ sizeof(qmiLocDeleteGNSSServiceDataIndMsgT_v02) },
+
+ // for XTRA Client 2.0
+ { QMI_LOC_INJECT_XTRA_DATA_IND_V02,
+ sizeof(qmiLocInjectXtraDataIndMsgT_v02) },
+
+ { QMI_LOC_INJECT_XTRA_PCID_IND_V02,
+ sizeof(qmiLocInjectXtraPcidIndMsgT_v02) }
+};
+
+
+/** whether indication is an event or a response */
+typedef enum { eventIndType =0, respIndType = 1 } locClientIndEnumT;
+
+
+/** @struct locClientInternalState
+ */
+
+typedef struct locClientCbDataStructT locClientCallbackDataType;
+
+struct locClientCbDataStructT
+{
+ // 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;
+
+ //pointer to itself for checking consistency data
+ locClientCallbackDataType *pMe;
+};
+
+
+/*===========================================================================
+ *
+ * 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;
+}
+
+/** checkQmiMsgsSupported
+ @brief check the qmi service is supported or not.
+ @param [in] pResponse pointer to the response received from
+ QMI_LOC service.
+*/
+static void checkQmiMsgsSupported(
+ const uint32_t* reqIdArray,
+ int reqIdArrayLength,
+ qmiLocGetSupportMsgT_v02 *pResponse,
+ uint64_t* supportedMsg)
+{
+ uint64_t result = 0;
+ if (pResponse->resp.supported_msgs_valid) {
+
+ /* For example, if a service supports exactly four messages with
+ IDs 0, 1, 30, and 31 (decimal), the array (in hexadecimal) is
+ 4 bytes [03 00 00 c0]. */
+
+ size_t idx = 0;
+ uint32_t reqId = 0;
+ uint32_t length = 0;
+ uint32_t supportedMsgsLen = pResponse->resp.supported_msgs_len;
+
+ // every bit saves a checked message result
+ uint32_t maxCheckedMsgsSavedNum = sizeof(result)<<3;
+
+ uint32_t loopSize = reqIdArrayLength;
+ loopSize =
+ loopSize < supportedMsgsLen ? loopSize : supportedMsgsLen;
+ loopSize =
+ loopSize < maxCheckedMsgsSavedNum ? loopSize : maxCheckedMsgsSavedNum;
+
+ for (idx = 0; idx < loopSize; idx++) {
+ reqId = reqIdArray[idx];
+ length = reqId >> 3;
+ if(supportedMsgsLen > length) {
+ uint32_t bit = reqId & ((uint32_t)7);
+ if (pResponse->resp.supported_msgs[length] & (1<<bit)) {
+ result |= ( 1 << idx ) ;
+ }
+ }
+ }
+ } else {
+ LOC_LOGE("%s:%d] Invalid supported message list.\n", __func__, __LINE__);
+ }
+ *supportedMsg = result;
+}
+
+/** 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_V01 )
+ {
+ status = eLOC_CLIENT_SUCCESS;
+ }
+ else
+ {
+ switch(pResponse->resp.error)
+ {
+ case QMI_ERR_MALFORMED_MSG_V01:
+ case QMI_ERR_INVALID_ARG_V01:
+ status = eLOC_CLIENT_FAILURE_INVALID_PARAMETER;
+ break;
+
+ case QMI_ERR_DEVICE_IN_USE_V01:
+ status = eLOC_CLIENT_FAILURE_ENGINE_BUSY;
+ break;
+
+ case QMI_ERR_NOT_SUPPORTED_V01:
+ status = eLOC_CLIENT_FAILURE_UNSUPPORTED;
+ 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;
+}
+
+/** 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;
+ locClientErrorCbType localErrorCallback = NULL;
+
+ /* 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.
+ */
+ if(NULL != pCallbackData)
+ {
+ 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) &&
+ (pCallbackData == pCallbackData->pMe) )
+ {
+ //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 ||(pCallbackData != pCallbackData->pMe))
+ {
+ 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 %p expected %p\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;
+
+ // decode the indication
+ indBuffer = malloc(indSize);
+
+ if(NULL == indBuffer)
+ {
+ LOC_LOGE("%s:%d]: memory allocation failed\n", __func__, __LINE__);
+ return;
+ }
+
+ rc = QMI_NO_ERR;
+
+ if (ind_buf_len > 0)
+ {
+ // 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 )
+ {
+ 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,
+ indSize,
+ pCallbackData->pClientCookie);
+ }
+ }
+ }
+ 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 */
+
+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_INJECT_APCACHE_DATA_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectApCacheDataReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_APDONOTCACHE_DATA_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectApDoNotCacheDataReqMsgT_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_GET_SENSOR_PROPERTIES_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGetSensorPropertiesReqMsgT_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;
+ }
+ case QMI_LOC_ADD_CIRCULAR_GEOFENCE_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocAddCircularGeofenceReqMsgT_v02);
+ break;
+ }
+ case QMI_LOC_DELETE_GEOFENCE_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocDeleteGeofenceReqMsgT_v02);
+ break;
+ }
+ case QMI_LOC_QUERY_GEOFENCE_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocQueryGeofenceReqMsgT_v02);
+ break;
+ }
+ case QMI_LOC_EDIT_GEOFENCE_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocEditGeofenceReqMsgT_v02);
+ break;
+ }
+ case QMI_LOC_GET_BEST_AVAILABLE_POSITION_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGetBestAvailablePositionReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_SECURE_GET_AVAILABLE_POSITION_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocSecureGetAvailablePositionReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_MOTION_DATA_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectMotionDataReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_GET_NI_GEOFENCE_ID_LIST_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGetNiGeofenceIdListReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_GSM_CELL_INFO_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectGSMCellInfoReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectNetworkInitiatedMessageReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_PEDOMETER_REPORT_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocPedometerReportReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_WCDMA_CELL_INFO_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectWCDMACellInfoReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_TDSCDMA_CELL_INFO_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectTDSCDMACellInfoReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_SUBSCRIBER_ID_IND_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectSubscriberIDReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_WIFI_AP_DATA_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectWifiApDataReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_GET_BATCH_SIZE_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGetBatchSizeReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_START_BATCHING_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocStartBatchingReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_READ_FROM_BATCH_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocReadFromBatchReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_STOP_BATCHING_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocStopBatchingReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_RELEASE_BATCH_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocReleaseBatchReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_SET_XTRA_VERSION_CHECK_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocSetXtraVersionCheckReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectVehicleSensorDataReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocNotifyWifiAttachmentStatusReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocNotifyWifiEnabledStatusReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocSetPremiumServicesCfgReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_GET_AVAILABLE_WWAN_POSITION_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGetAvailWwanPositionReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectGtpClientDownloadedDataReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGdtUploadBeginStatusReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_GDT_UPLOAD_END_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGdtUploadEndReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_V02:
+ {
+ *pOutLen = sizeof(qmiLocSetGNSSConstRepConfigReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_START_DBT_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocStartDbtReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_STOP_DBT_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocStopDbtReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_TIME_ZONE_INFO_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectTimeZoneInfoReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_QUERY_AON_CONFIG_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocQueryAonConfigReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_GTP_AP_STATUS_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGtpApStatusReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGdtDownloadBeginStatusReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_GDT_DOWNLOAD_READY_STATUS_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGdtDownloadReadyStatusReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_GDT_RECEIVE_DONE_STATUS_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGdtReceiveDoneStatusReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_GDT_DOWNLOAD_END_STATUS_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGdtDownloadEndStatusReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_GET_SUPPORTED_FEATURE_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocGetSupportedFeatureReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_DELETE_GNSS_SERVICE_DATA_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocDeleteGNSSServiceDataReqMsgT_v02);
+ break;
+ }
+
+ // XTRA Client 2.0
+ case QMI_LOC_INJECT_XTRA_DATA_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectXtraDataReqMsgT_v02);
+ break;
+ }
+
+ case QMI_LOC_INJECT_XTRA_PCID_REQ_V02:
+ {
+ *pOutLen = sizeof(qmiLocInjectXtraPcidReqMsgT_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_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02:
+ case QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_REQ_V02:
+ case QMI_LOC_GET_SUPPORTED_MSGS_REQ_V02:
+ case QMI_LOC_GET_SUPPORTED_FIELDS_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,
+ int instanceId)
+{
+ qmi_client_type clnt, notifier;
+ bool notifierInitFlag = false;
+ locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
+ // os_params must stay in the same scope as notifier
+ // because when notifier is initialized, the pointer
+ // of os_params is retained in QMI framework, and it
+ // used when notifier is released.
+ qmi_client_os_params os_params;
+ // instances of this service
+ qmi_service_info serviceInfo;
+
+ do
+ {
+ 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__ );
+ status = eLOC_CLIENT_FAILURE_INTERNAL;
+ break;
+ }
+
+ // register for service notification
+ rc = qmi_client_notifier_init(locClientServiceObject, &os_params, &notifier);
+ notifierInitFlag = (NULL != notifier);
+
+ if (rc != QMI_NO_ERR) {
+ LOC_LOGE("%s:%d]: qmi_client_notifier_init failed %d\n",
+ __func__, __LINE__, rc);
+ status = eLOC_CLIENT_FAILURE_INTERNAL;
+ break;
+ }
+
+ while (1) {
+ QMI_CCI_OS_SIGNAL_CLEAR(&os_params);
+
+ if (instanceId >= 0) {
+ // use instance-specific lookup
+ rc = qmi_client_get_service_instance(locClientServiceObject, instanceId, &serviceInfo);
+ } else {
+ // lookup service with any instance id
+ rc = qmi_client_get_any_service(locClientServiceObject, &serviceInfo);
+ }
+
+ // get the service addressing information
+ LOC_LOGV("%s:%d]: qmi_client_get_service() rc: %d ", __func__, __LINE__, rc);
+
+ if(rc == QMI_NO_ERR)
+ break;
+
+ QMI_CCI_OS_SIGNAL_WAIT(&os_params, 0);
+ }
+
+ LOC_LOGV("%s:%d]: passing the pointer %p to qmi_client_init \n",
+ __func__, __LINE__, pLocClientCbData);
+
+ // initialize the client
+ //sent the address of the first service found
+ // if IPC router is present, this will go to the service instance
+ // enumerated over IPC router, else it will go over the next transport where
+ // the service was enumerated.
+ rc = qmi_client_init(&serviceInfo, locClientServiceObject,
+ locClientIndCb, (void *) pLocClientCbData,
+ NULL, &clnt);
+
+ if(rc != QMI_NO_ERR)
+ {
+ LOC_LOGE("%s:%d]: qmi_client_init error %d\n",
+ __func__, __LINE__, rc);
+
+ status = eLOC_CLIENT_FAILURE_INTERNAL;
+ break;
+ }
+
+ 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);
+
+ status = eLOC_CLIENT_FAILURE_INTERNAL;
+ break;
+ }
+
+ // copy the clnt handle returned in qmi_client_init
+ memcpy(&(pLocClientCbData->userHandle), &clnt, sizeof(qmi_client_type));
+
+ status = eLOC_CLIENT_SUCCESS;
+
+ } while(0);
+
+ /* release the notifier handle */
+ if(true == notifierInitFlag)
+ {
+ qmi_client_release(notifier);
+ }
+
+ return status;
+}
+//----------------------- END INTERNAL FUNCTIONS ----------------------------------------
+
+/** locClientOpenInstance
+ @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] instanceId Value of QMI service instance id to use.
+ @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 locClientOpenInstance (
+ locClientEventMaskType eventRegMask,
+ int instanceId,
+ const locClientCallbacksType* pLocClientCallbacks,
+ locClientHandleType* pLocClientHandle,
+ const void* pClientCookie)
+{
+ locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
+ locClientCallbackDataType *pCallbackData = NULL;
+
+ // 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__);
+ return eLOC_CLIENT_FAILURE_INVALID_PARAMETER;
+ }
+
+ do
+ {
+ // 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, instanceId);
+
+ LOC_LOGV ("%s:%d] locClientQmiCtrlPointInit returned %d\n",
+ __func__, __LINE__, status);
+
+ if(status != eLOC_CLIENT_SUCCESS)
+ {
+ free(pCallbackData);
+ pCallbackData = NULL;
+ LOC_LOGE ("%s:%d] locClientQmiCtrlPointInit returned %d\n",
+ __func__, __LINE__, status);
+ break;
+ }
+ // set the self pointer
+ pCallbackData->pMe = pCallbackData;
+ // 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;
+
+ }while(0);
+
+ if(eLOC_CLIENT_SUCCESS != status)
+ {
+ *pLocClientHandle = LOC_CLIENT_INVALID_HANDLE_VALUE;
+ LOC_LOGE("%s:%d]: Error! status = %d\n", __func__, __LINE__,status);
+ }
+
+ else
+ {
+ LOC_LOGD("%s:%d]: returning handle = %p, user_handle=%p, status = %d\n",
+ __func__, __LINE__, *pLocClientHandle,
+ pCallbackData->userHandle, status);
+ }
+
+ return(status);
+}
+
+/** 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)
+{
+ int instanceId;
+ locClientStatusEnumType status;
+ int tries = 1;
+#ifdef _ANDROID_
+ switch (getTargetGnssType(loc_get_target()))
+ {
+ case GNSS_GSS:
+ instanceId = eLOC_CLIENT_INSTANCE_ID_GSS;
+ break;
+ case GNSS_QCA1530:
+ instanceId = eLOC_CLIENT_INSTANCE_ID_QCA1530;
+ break;
+ case GNSS_MSM:
+ instanceId = eLOC_CLIENT_INSTANCE_ID_MSM;
+ break;
+ case GNSS_MDM:
+ instanceId = eLOC_CLIENT_INSTANCE_ID_MDM;
+ break;
+ case GNSS_AUTO:
+ instanceId = eLOC_CLIENT_INSTANCE_ID_GSS_AUTO;
+ break;
+ default:
+ instanceId = eLOC_CLIENT_INSTANCE_ID_ANY;
+ break;
+ }
+
+ LOC_LOGI("%s:%d]: Service instance id is %d\n",
+ __func__, __LINE__, instanceId);
+#else
+ instanceId = eLOC_CLIENT_INSTANCE_ID_ANY;
+#endif
+
+ while ((status = locClientOpenInstance(eventRegMask, instanceId, pLocClientCallbacks,
+ pLocClientHandle, pClientCookie)) != eLOC_CLIENT_SUCCESS) {
+ if (tries <= LOC_CLIENT_MAX_OPEN_RETRIES) {
+ LOC_LOGE("%s:%d]: failed with status=%d on try %d",
+ __func__, __LINE__, status, tries);
+ tries++;
+ sleep(LOC_CLIENT_TIME_BETWEEN_OPEN_RETRIES);
+ } else {
+ LOC_LOGE("%s:%d]: failed with status=%d Aborting...",
+ __func__, __LINE__, status);
+ break;
+ }
+ }
+
+ 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)
+{
+ // convert handle to callback data
+ locClientCallbackDataType *pCallbackData;
+ 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);
+ }
+
+ pCallbackData = (locClientCallbackDataType *)(*pLocClientHandle);
+
+ // check the input handle for sanity
+ if(NULL == pCallbackData ||
+ NULL == pCallbackData->userHandle ||
+ pCallbackData != pCallbackData->pMe )
+ {
+ // invalid handle
+ LOC_LOGE("%s:%d]: invalid handle \n",
+ __func__, __LINE__);
+
+ return(eLOC_CLIENT_FAILURE_INVALID_HANDLE);
+ }
+
+ LOC_LOGV("locClientClose releasing handle %p, user handle %p\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 ||
+ pCallbackData != pCallbackData->pMe )
+ {
+ // 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 (QMI_SERVICE_ERR == rc)
+ {
+ LOC_LOGE("%s:%d]: send_msg_sync error: QMI_SERVICE_ERR\n",__func__, __LINE__);
+ return(eLOC_CLIENT_FAILURE_PHONE_OFFLINE);
+ }
+ else 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);
+
+ // if the request is to change registered events, update the
+ // loc api copy of that
+ if(eLOC_CLIENT_SUCCESS == status &&
+ QMI_LOC_REG_EVENTS_REQ_V02 == reqId)
+ {
+ if(NULL != reqPayload.pRegEventsReq )
+ {
+ pCallbackData->eventRegMask =
+ (locClientEventMaskType)(reqPayload.pRegEventsReq->eventRegMask);
+ }
+ }
+ return(status);
+}
+
+/** locClientSupportMsgCheck
+ @brief Sends a QMI_LOC_GET_SUPPORTED_MSGS_REQ_V02 message to the
+ location engine, and then receives a list of all services supported
+ by the engine. This function will check if the input service(s) form
+ the client is in the list or not. If the locClientSupportMsgCheck()
+ function is successful, the client should expect an result of
+ the service is supported or not recorded in supportedMsg.
+ @param [in] handle Handle returned by the locClientOpen()
+ function.
+ @param [in] supportedMsg an integer used to record which
+ message is supported
+
+ @return
+ One of the following error codes:
+ - 0 (eLOC_CLIENT_SUCCESS) -- On success.
+ - Non-zero error code (see \ref locClientStatusEnumType) -- On failure.
+*/
+
+locClientStatusEnumType locClientSupportMsgCheck(
+ locClientHandleType handle,
+ const uint32_t* msgArray,
+ uint32_t msgArrayLength,
+ uint64_t* supportedMsg)
+{
+
+ // set to true if one client has checked the modem capability.
+ static bool isCheckedAlready = false;
+ /*
+ The 1st bit in supportedMsgChecked indicates if
+ QMI_LOC_EVENT_GEOFENCE_BATCHED_BREACH_NOTIFICATION_IND_V02
+ is supported or not;
+ The 2ed bit in supportedMsgChecked indicates if
+ QMI_LOC_GET_BATCH_SIZE_REQ_V02
+ is supported or not;
+ */
+ static uint64_t supportedMsgChecked = 0;
+
+ // Validate input arguments
+ if(msgArray == NULL || supportedMsg == NULL) {
+
+ LOC_LOGE("%s:%d]: Input argument/s NULL", __func__, __LINE__);
+ return eLOC_CLIENT_FAILURE_INVALID_PARAMETER;
+ }
+
+ if (isCheckedAlready) {
+ // already checked modem
+ LOC_LOGV("%s:%d]: Already checked. The supportedMsgChecked is %" PRId64 "\n",
+ __func__, __LINE__, supportedMsgChecked);
+ *supportedMsg = supportedMsgChecked;
+ return eLOC_CLIENT_SUCCESS;
+ }
+
+ locClientStatusEnumType status = eLOC_CLIENT_SUCCESS;
+ qmi_client_error_type rc = QMI_NO_ERR; //No error
+ qmiLocGetSupportMsgT_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 ||
+ pCallbackData != pCallbackData->pMe ) {
+ // did not find the handle in the client List
+ LOC_LOGE("%s:%d]: invalid handle \n",
+ __func__, __LINE__);
+
+ return eLOC_CLIENT_FAILURE_GENERAL;
+ }
+
+ // 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(QMI_LOC_GET_SUPPORTED_MSGS_REQ_V02));
+ rc = qmi_client_send_msg_sync(
+ pCallbackData->userHandle,
+ QMI_LOC_GET_SUPPORTED_MSGS_REQ_V02,
+ 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_GENERAL;
+ }
+
+ // map the QCCI response to Loc API v02 status
+ status = convertQmiResponseToLocStatus(&resp);
+
+ if(eLOC_CLIENT_SUCCESS == status)
+ {
+ LOC_LOGV("%s:%d]eLOC_CLIENT_SUCCESS == status\n", __func__, __LINE__);
+
+ // check every message listed in msgArray supported by modem or not
+ checkQmiMsgsSupported(msgArray, msgArrayLength, &resp, &supportedMsgChecked);
+
+ LOC_LOGV("%s:%d]: supportedMsgChecked is %" PRId64 "\n",
+ __func__, __LINE__, supportedMsgChecked);
+ *supportedMsg = supportedMsgChecked;
+ isCheckedAlready = true;
+ return status;
+ } else {
+
+ LOC_LOGE("%s:%d]: convertQmiResponseToLocStatus error: %d\n",
+ __func__, __LINE__, status);
+ return eLOC_CLIENT_FAILURE_GENERAL;
+ }
+}
+
+/** 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;
+
+ // Validate input arguments
+ if(pRespIndSize == NULL)
+ {
+ LOC_LOGE("%s:%d]: size argument NULL !");
+ return false;
+ }
+
+ 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;
+
+ // Validate input arguments
+ if(pEventIndSize == NULL)
+ {
+ LOC_LOGE("%s:%d]: size argument NULL !");
+ return false;
+ }
+
+ // 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/gps/loc_api/loc_api_v02/loc_api_v02_client.h b/gps/loc_api/loc_api_v02/loc_api_v02_client.h
new file mode 100644
index 0000000..e1c85ed
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/loc_api_v02_client.h
@@ -0,0 +1,1762 @@
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation, 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 <stdbool.h>
+#include <stdint.h>
+
+#include "location_service_v02.h" //QMI LOC Service data types definitions
+
+#include <stddef.h>
+
+/******************************************************************************
+ * Constants and configuration
+ *****************************************************************************/
+
+/** @ingroup constants_macros
+ Specific value of #locClientHandleType, indicating an invalid handle. */
+#define LOC_CLIENT_INVALID_HANDLE_VALUE (NULL)
+
+
+/** @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. */
+typedef uint64_t locClientEventMaskType;
+
+/** Location client status values.
+*/
+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. */
+
+ eLOC_CLIENT_FAILURE_NOT_ENOUGH_MEMORY = 13
+ /**< Failed because there is not enough memory to do the operation. */
+
+}locClientStatusEnumType;
+
+/** Location client error values
+*/
+typedef enum
+{
+ eLOC_CLIENT_ERROR_SERVICE_UNAVAILABLE = 1
+ /**< Service is no longer available. Upon getting this error, the client
+ must close the existing connection and reopen the connection. */
+
+}locClientErrorEnumType;
+
+
+/** 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
+ - GetSensorControlConfig
+ - GetSensorPerformanceControlConfiguration
+ - WWANOutOfServiceNotification
+*/
+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 qmiLocInjectApCacheDataReqMsgT_v02 *pInjectApCacheDataReq;
+ /**< Inject APcache data into the engine
+
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_INJECT_APCACHE_DATA_IND_V02.
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_INJECT_APCACHE_DATA_REQ_V02. */
+
+ const qmiLocInjectApDoNotCacheDataReqMsgT_v02 *pInjectApDoNotCacheDataReq;
+ /**< Inject blacklist-Apcache data into the engine
+
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_INJECT_DONOTAPCACHE_DATA_IND_V02.
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_INJECT_DONOTAPCACHE_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. */
+
+ 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. */
+
+ 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. */
+
+ const qmiLocGetSensorPropertiesReqMsgT_v02* pGetSensorPropertiesReq;
+ /**< Retrieves the sensor properties from the engine.
+
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02.
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_GET_SENSOR_PROPERTIES_REQ_V02. */
+
+ 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. */
+
+ 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. */
+
+ 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. */
+
+ 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. */
+
+ 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. */
+
+ const qmiLocAddCircularGeofenceReqMsgT_v02* pAddCircularGeofenceReq;
+ /**< Adds a circular geofence.
+
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_ADD_CIRCULAR_GEOFENCE_IND_V02.
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_ADD_CIRCULAR_GEOFENCE_REQ_V02 */
+
+ const qmiLocDeleteGeofenceReqMsgT_v02* pDeleteGeofenceReq;
+ /**< Deletes a geofence.
+
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_DELETE_GEOFENCE_IND_V02.
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_DELETE_GEOFENCE_REQ_V02 */
+
+ const qmiLocQueryGeofenceReqMsgT_v02* pQueryGeofenceReq;
+ /**< Queries a geofence.
+
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_QUERY_GEOFENCE_IND_V02
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_QUERY_GEOFENCE_REQ_V02. */
+
+ const qmiLocEditGeofenceReqMsgT_v02* pEditGeofenceReq;
+ /**< Edits geofence parameters.
+
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_EDIT_GEOFENCE_IND_V02
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_EDIT_GEOFENCE_REQ_V02. */
+
+ const qmiLocGetBestAvailablePositionReqMsgT_v02*
+ pGetBestAvailablePositionReq;
+ /**< Get the best available position from location engine
+
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_GET_BEST_AVAILABLE_POSITION_IND_V02
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_GET_BEST_AVAILABLE_POSITION_REQ_V02. @newpagetable */
+
+ const qmiLocSecureGetAvailablePositionReqMsgT_v02*
+ pSecureGetBestAvailablePositionReq;
+ /**< Get the best available position from location engine
+
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_GET_BEST_AVAILABLE_POSITION_IND_V02
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_GET_BEST_AVAILABLE_POSITION_REQ_V02. @newpagetable */
+
+ const qmiLocInjectMotionDataReqMsgT_v02* pInjectMotionDataReq;
+ /**< Inject motion data in the location engine
+
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_INJECT_MOTION_DATA_IND_V02
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_INJECT_MOTION_DATA_REQ_V02 */
+
+ const qmiLocGetNiGeofenceIdListReqMsgT_v02* pGetNiGeofenceIdListReq;
+ /**< Get the list of Network Initiated Geofences from the location engine.
+
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_GET_NI_GEOFENCE_ID_LIST_IND_V02
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_GET_NI_GEOFENCE_ID_LIST_REQ_V02 */
+
+ const qmiLocInjectGSMCellInfoReqMsgT_v02 *pInjectGSMCellInfoReq;
+ /**< Inject GSM Cell Information into the location engine.
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_INJECT_GSM_CELL_INFO_IND_V02
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_INJECT_GSM_CELL_INFO_REQ_V02 */
+
+ const qmiLocInjectNetworkInitiatedMessageReqMsgT_v02
+ *pInjectNetworkInitiatedMessageReq;
+ /**< Inject Network Initiated Message into the location engine.
+ If the request is accepted by the service, the client receives the
+ following indication containing a response:
+ QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_IND_V02
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_REQ_V02 */
+
+ const void *pWWANOutOfServiceNotificationReq;
+
+ const qmiLocPedometerReportReqMsgT_v02 *pPedometerReportReq;
+ /**< Send pedometer data to the location engine. If the request is
+ accepted by the service, the client receives the following
+ indication containing a response:
+ QMI_LOC_PEDOMETER_REPORT_IND_V02
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_PEDOMETER_REPORT_REQ_V02 */
+
+ const qmiLocInjectWCDMACellInfoReqMsgT_v02 *pInjectWCDMACellInfoReq;
+ const qmiLocInjectTDSCDMACellInfoReqMsgT_v02 *pInjectTDSCDMACellInfoReq;
+ const qmiLocInjectSubscriberIDReqMsgT_v02 *pInjectSubscriberIDReq;
+ const qmiLocInjectWifiApDataReqMsgT_v02 *pInjectWifiApDataReq;
+ const qmiLocNotifyWifiAttachmentStatusReqMsgT_v02 *pNotifyWifiAttachmentStatusReq;
+ const qmiLocNotifyWifiEnabledStatusReqMsgT_v02 *pNotifyWifiEnabledStatusReq;
+
+ const qmiLocReadFromBatchReqMsgT_v02 *pReadFromBatchReq;
+ const qmiLocGetBatchSizeReqMsgT_v02 *pGetBatchSizeReq;
+ const qmiLocStartBatchingReqMsgT_v02 *pStartBatchingReq;
+ const qmiLocStopBatchingReqMsgT_v02 *pStopBatchingReq;
+ const qmiLocReleaseBatchReqMsgT_v02 *pReleaseBatchReq;
+
+ const qmiLocInjectVehicleSensorDataReqMsgT_v02 *pInjectVehicleSensorDataReq;
+
+ /**< Send vehicle sensor data to the location engine. If the request is
+ accepted by the service, the client receives the following
+ indication containing a response:
+ QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_IND_V02
+
+ To send this request, set the reqId field in locClientSendReq() to
+ QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_REQ_V02 */
+
+ const qmiLocSetPremiumServicesCfgReqMsgT_v02 *pSetPremiumServicesCfgReq;
+ /*QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_REQ_V02*/
+
+ const qmiLocGetAvailWwanPositionReqMsgT_v02 *pGetAvailWwanPositionReq;
+ /*QMI_LOC_GET_AVAILABLE_WWAN_POSITION_REQ_V02*/
+
+ const qmiLocSetXtraVersionCheckReqMsgT_v02 *pSetXtraVersionCheckReq;
+
+ const qmiLocGdtUploadBeginStatusReqMsgT_v02* pGdtUploadBeginStatusReq;
+ /* QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_REQ_V02 */
+
+ const qmiLocGdtUploadEndReqMsgT_v02* pGdtUploadEndReq;
+ /* QMI_LOC_GDT_UPLOAD_END_REQ_V02*/
+
+ const qmiLocInjectGtpClientDownloadedDataReqMsgT_v02 *pInjectGtpClientDownloadedDataReq;
+ /* QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_REQ_V02 */
+
+ const qmiLocSetGNSSConstRepConfigReqMsgT_v02 *pSetGNSSConstRepConfigReq;
+ /*QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_V02*/
+
+ const qmiLocStartDbtReqMsgT_v02 *pStartDbtReq;
+ /*QMI_LOC_START_DBT_REQ_V02*/
+
+ const qmiLocStopDbtReqMsgT_v02 *pStopDbtReq;
+ /*QMI_LOC_STOP_DBT_REQ_V02*/
+
+ const qmiLocInjectTimeZoneInfoReqMsgT_v02 *pInjectTimeZoneInfoReq;
+ /*QMI_LOC_INJECT_TIME_ZONE_INFO*/
+
+ const qmiLocQueryAonConfigReqMsgT_v02 *pQueryAonConfigReq;
+ /*QMI_LOC_QUERY_AON_CONFIG_REQ_V02*/
+
+ const qmiLocGetSupportedFeatureReqMsgT_v02 *pGetSupportedFeatureReq;
+ /* QMI_LOC_GET_SUPPORTED_FEATURE_REQ_V02*/
+
+ const qmiLocGtpApStatusReqMsgT_v02* pGtpApStatusReq;
+ /* QMI_LOC_GTP_AP_STATUS_REQ_V02 */
+
+ const qmiLocGdtDownloadBeginStatusReqMsgT_v02* pGdtDownloadBeginStatusReq;
+ /* QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_REQ_V02 */
+
+ const qmiLocGdtDownloadReadyStatusReqMsgT_v02* pGdtDownloadReadyStatusReq;
+ /* QMI_LOC_GDT_DOWNLOAD_READY_STATUS_REQ_V02 */
+
+ const qmiLocGdtReceiveDoneStatusReqMsgT_v02* pGdtReceiveDoneStatusReq;
+ /* QMI_LOC_GDT_RECEIVE_DONE_STATUS_REQ_V02 */
+
+ const qmiLocGdtDownloadEndStatusReqMsgT_v02* pGdtDownloadEndStatusReq;
+ /* QMI_LOC_GDT_DOWNLOAD_END_STATUS_REQ_V02*/
+
+ const qmiLocDeleteGNSSServiceDataReqMsgT_v02* pDeleteGNSSServiceDataReq;
+ /* QMI_LOC_DELETE_GNSS_SERVICE_DATA_REQ_V02*/
+
+ // XTRA Client 2.0
+ const qmiLocInjectXtraDataReqMsgT_v02 *pInjectXtraDataReq;
+ /*QMI_LOC_INJECT_XTRA_DATA_REQ_V02*/
+
+ const qmiLocInjectXtraPcidReqMsgT_v02 *pInjectXtraPcidReq;
+ /*QMI_LOC_INJECT_XTRA_PCID_REQ_V02*/
+}locClientReqUnionType;
+
+
+/** 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
+ 1 Hz 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. */
+
+ const qmiLocEventNiGeofenceNotificationIndMsgT_v02*
+ pNiGeofenceNotificationEvent;
+ /**< Sent by the engine to notify the client about changes to a
+ network-initiated geofence.
+
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_NI_GEOFENCE_NOTIFICATION_IND_V02. */
+
+ const qmiLocEventGeofenceGenAlertIndMsgT_v02* pGeofenceGenAlertEvent;
+ /**< Sent by the engine to notify the client about updates that may
+ affect a geofence operation.
+
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_GEOFENCE_GEN_ALERT_IND_V02. */
+
+ const qmiLocEventGeofenceBreachIndMsgT_v02* pGeofenceBreachEvent;
+ /**< Sent by the engine to notify the client about a geofence breach
+ event.
+
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_GEOFENCE_BREACH_NOTIFICATION_IND_V02. @newpagetable */
+
+ const qmiLocEventGeofenceBatchedBreachIndMsgT_v02* pGeofenceBatchedBreachEvent;
+ /**< Sent by the engine to notify the client about a geofence breach
+ event.
+
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_GEOFENCE_BATCHED_BREACH_NOTIFICATION_IND_V02. @newpagetable */
+
+ const qmiLocEventPedometerControlIndMsgT_v02* pPedometerControlEvent;
+ /**< Sent by the engine to recommend how pedometer data is sent to the
+ location engine.
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_PEDOMETER_CONTROL_IND_V02. @newpagetable */
+
+ const qmiLocEventMotionDataControlIndMsgT_v02* pMotionDataControlEvent;
+ /**< Sent by the engine to recommend how motion data is sent to the
+ location engine.
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_MOTION_DATA_CONTROL_IND_V02. @newpagetable */
+
+ const qmiLocEventInjectWifiApDataReqIndMsgT_v02* pWifiApDataReqEvent;
+ const qmiLocEventLiveBatchedPositionReportIndMsgT_v02* pBatchPositionReportEvent;
+ /**< Sent by the engine to notify the client that live batch location
+ is ready, and the location info.
+
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_LIVE_BATCHED_POSITION_REPORT_IND_V02. */
+
+ const qmiLocEventBatchFullIndMsgT_v02* pBatchCount;
+ /**< Sent by the engine to notify the client that batch location is
+ full, and how many location are available to read.
+
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_BATCH_FULL_IND_V02. */
+
+ const qmiLocEventVehicleDataReadyIndMsgT_v02* pVehicleDataReadyEvent;
+ /**< Sent by the engine to recommend how vehicle sensor data is
+ sent to the location engine.
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_VEHICLE_DATA_READY_STATUS_IND_V02. @newpagetable */
+
+ const qmiLocEventGeofenceProximityIndMsgT_v02* pGeofenceProximityEvent;
+ /**< Sent by the engine to notify the client about a geofence proximity
+ event.
+
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_GEOFENCE_PROXIMITY_NOTIFICATION_IND_V02. @newpagetable */
+
+ const qmiLocEventGnssSvMeasInfoIndMsgT_v02* pGnssSvRawInfoEvent;
+
+ /**< Sent by the engine when GNSS measurements are available
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_GNSS_MEASUREMENT_REPORT_IND_V02. @newpagetable */
+
+ const qmiLocEventGnssSvPolyIndMsgT_v02* pGnssSvPolyInfoEvent;
+
+ /**< Sent by the engine when GNSS measurements are available
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_SV_POLYNOMIAL_REPORT_IND_V02. @newpagetable */
+
+ const qmiLocEventGdtUploadBeginStatusReqIndMsgT_v02* pGdtUploadBeginEvent;
+ /**< Sent by the engine to notify the client about a GDT upload
+ begine event.
+
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_GDT_UPLOAD_BEGIN_STATUS_REQ_IND_V02. @newpagetable */
+
+ const qmiLocEventGdtUploadEndReqIndMsgT_v02* pGdtUploadEndEvent;
+ /**< Sent by the engine to notify the client about a GDT upload
+ end event.
+
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_GDT_UPLOAD_END_REQ_IND_V02. @newpagetable */
+
+ const qmiLocEventDbtPositionReportIndMsgT_v02 *pDbtPositionReportEvent;
+ /**< Sent by the engine to notify the client of a distance based
+ tracking position report.
+ QMI_LOC_EVENT_DBT_POSITION_REPORT_IND_V02*/
+
+ const qmiLocEventDbtSessionStatusIndMsgT_v02 *pDbtSessionStatusEvent;
+ /**< Sent by the engine to notify the client of the status of the
+ DBT session.
+ QMI_LOC_EVENT_DBT_SESSION_STATUS_IND_V02*/
+
+ const qmiLocEventGeofenceBatchedDwellIndMsgT_v02 *pGeofenceBatchedDwellEvent;
+ /**< Sent by the engine to notify the client of the dwell time inside
+ or outside of a Geofence for a specified time.
+ QMI_LOC_EVENT_GEOFENCE_BATCHED_DWELL_NOTIFICATION_IND_V02*/
+
+ const qmiLocEventGetTimeZoneReqIndMsgT_v02 *pGetTimeZoneReqEvent;
+ /**< Sent by the engine to request injection of time zone info
+ QMI_LOC_EVENT_GET_TIME_ZONE_INFO_IND_V02>*/
+
+ const qmiLocEventBatchingStatusIndMsgT_v02* pBatchingStatusEvent;
+ /**< Sent by the engine to notify the control point of the batching status.
+ The eventIndId field in the event indication callback is set to
+ QMI_LOC_EVENT_BATCHING_STATUS_IND_V02. */
+
+ const qmiLocEventGdtDownloadBeginReqIndMsgT_v02 *pGdtDownloadBeginReqEvent;
+ /**< Sent by the engine to notify the client about a GDT download
+ begin event.
+ QMI_LOC_EVENT_GDT_DOWNLOAD_BEGIN_REQ_IND_V02. */
+
+ const qmiLocEventGdtReceiveDoneIndMsgT_v02 *pGdtReceiveDoneEvent;
+ /**< Sent by the engine to notify the client about a GDT download
+ receive done event.
+ QMI_LOC_EVENT_GDT_RECEIVE_DONE_IND_V02. */
+
+ const qmiLocEventGdtDownloadEndReqIndMsgT_v02 *pGdtDownloadEndReqEvent;
+ /**< Sent by the engine to notify the client about a GDT download
+ end event.
+ QMI_LOC_EVENT_GDT_DOWNLOAD_END_REQ_IND_V02. */
+
+}locClientEventIndUnionType;
+
+
+/** Response indications that are sent by the service.
+*/
+typedef union
+{
+ const qmiLocGetServiceRevisionIndMsgT_v02* pGetServiceRevisionInd;
+ /**< Response to the QMI_LOC_GET_SERVICE_REVISION_REQ_V02 request.
+
+ 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 QMI_LOC_GET_FIX_CRITERIA_REQ_V02 request.
+
+ 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 QMI_LOC_NI_USER_RESPONSE_REQ_V02 request.
+
+ 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 QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02
+ request.
+
+ 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 QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_REQ_V02
+ request.
+
+ 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 QMI_LOC_INJECT_UTC_TIME_REQ_V02 request.
+
+ 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 QMI_LOC_INJECT_POSITION_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_INJECT_POSITION_IND_V02. */
+
+ const qmiLocSetEngineLockIndMsgT_v02* pSetEngineLockInd;
+ /**< Response to the QMI_LOC_SET_ENGINE_LOCK_REQ_V02 request.
+
+ 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 QMI_LOC_GET_ENGINE_LOCK_REQ_V02 request.
+
+ 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 QMI_LOC_SET_SBAS_CONFIG_REQ_V02 request.
+
+ 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 QMI_LOC_GET_SBAS_CONFIG_REQ_V02 request.
+
+ 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 QMI_LOC_SET_NMEA_TYPES_REQ_V02 request.
+
+ 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 QMI_LOC_GET_NMEA_TYPES_REQ_V02 request.
+
+ 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 QMI_LOC_SET_LOW_POWER_MODE_REQ_V02 request.
+
+ 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 QMI_LOC_GET_LOW_POWER_MODE_REQ_V02 request.
+
+ 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 QMI_LOC_SET_SERVER_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_SET_SERVER_IND_V02. */
+
+ const qmiLocGetServerIndMsgT_v02* pGetServerInd;
+ /**< Response to the QMI_LOC_GET_SERVER_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_GET_SERVER_IND_V02. */
+
+ const qmiLocDeleteAssistDataIndMsgT_v02* pDeleteAssistDataInd;
+ /**< Response to the QMI_LOC_DELETE_ASSIST_DATA_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_DELETE_ASSIST_DATA_IND_V02. */
+
+ const qmiLocInjectApCacheDataIndMsgT_v02 *pInjectApCacheDataInd;
+ /**< Response to the QMI_LOC_INJECT_APCACHE_DATA_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_INJECT_APCACHE_DATA_IND_V02. */
+
+ const qmiLocInjectApDoNotCacheDataIndMsgT_v02 *pInjectApDoNotCacheDataInd;
+ /**< Response to the QMI_LOC_INJECT_DONOTAPCACHE_DATA_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_INJECT_DONOTAPCACHE_DATA_IND_V02. */
+
+ const qmiLocSetXtraTSessionControlIndMsgT_v02* pSetXtraTSessionControlInd;
+ /**< Response to the QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02 request.
+
+ 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 QMI_LOC_GET_XTRA_T_SESSION_CONTROL_REQ_V02 request.
+
+ 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 QMI_LOC_INJECT_WIFI_POSITION_REQ_V02 request.
+
+ 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 QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02 request.
+
+ 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 QMI_LOC_GET_REGISTERED_EVENTS_REQ_V02 request.
+
+ 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 QMI_LOC_SET_OPERATION_MODE_REQ_V02 request.
+
+ 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 QMI_LOC_GET_OPERATION_MODE_REQ_V02 request.
+
+ 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 QMI_LOC_SET_SPI_STATUS_REQ_V02 request.
+
+ 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 QMI_LOC_INJECT_SENSOR_DATA_REQ_V02 request.
+
+ 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 QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02 request.
+
+ 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 QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02 request.
+
+ 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 QMI_LOC_GET_CRADLE_MOUNT_CONFIG_REQ_V02 request.
+
+ 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 QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02 request.
+
+ 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 QMI_LOC_GET_EXTERNAL_POWER_CONFIG_REQ_V02 request.
+
+ 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 QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02
+ request.
+
+ 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 QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02 request.
+
+ 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 QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02. */
+
+ const qmiLocSetSensorControlConfigIndMsgT_v02* pSetSensorControlConfigInd;
+ /**< Response to the QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02.
+ */
+
+ const qmiLocGetSensorControlConfigIndMsgT_v02* pGetSensorControlConfigInd;
+ /**< Response to the QMI_LOC_GET_SENSOR_CONTROL_CONFIG_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02.
+ */
+
+ const qmiLocSetSensorPropertiesIndMsgT_v02* pSetSensorPropertiesInd;
+ /**< Response to the QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02.
+ */
+
+ const qmiLocGetSensorPropertiesIndMsgT_v02* pGetSensorPropertiesInd;
+ /**< Response to the QMI_LOC_GET_SENSOR_PROPERTIES_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02.
+ */
+
+ const qmiLocSetSensorPerformanceControlConfigIndMsgT_v02*
+ pSetSensorPerformanceControlConfigInd;
+ /**< Response to the
+ QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02. */
+
+ const qmiLocGetSensorPerformanceControlConfigIndMsgT_v02*
+ pGetSensorPerformanceControlConfigInd;
+ /**< Response to the
+ QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02. */
+
+ const qmiLocInjectSuplCertificateIndMsgT_v02* pInjectSuplCertificateInd;
+ /**< Response to the QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02. */
+
+ const qmiLocDeleteSuplCertificateIndMsgT_v02* pDeleteSuplCertificateInd;
+ /**< Response to the QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02. */
+
+ const qmiLocSetPositionEngineConfigParametersIndMsgT_v02*
+ pSetPositionEngineConfigParametersInd;
+ /**< Response to the QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02
+ request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02. */
+
+ const qmiLocGetPositionEngineConfigParametersIndMsgT_v02*
+ pGetPositionEngineConfigParametersInd;
+ /**< Response to the QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02
+ request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02. */
+
+ const qmiLocAddCircularGeofenceIndMsgT_v02* pAddCircularGeofenceInd;
+ /**< Response to the QMI_LOC_ADD_CIRCULAR_GEOFENCE_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_ADD_CIRCULAR_GEOFENCE_IND_V02. */
+
+ const qmiLocDeleteGeofenceIndMsgT_v02* pDeleteGeofenceInd;
+ /**< Response to the QMI_LOC_DELETE_GEOFENCE_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_DELETE_GEOFENCE_IND_V02. */
+
+ const qmiLocQueryGeofenceIndMsgT_v02* pQueryGeofenceInd;
+ /**< Response to the QMI_LOC_QUERY_GEOFENCE_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_QUERY_GEOFENCE_IND_V02. */
+
+ const qmiLocEditGeofenceIndMsgT_v02* pEditGeofenceInd;
+ /**< Response to the QMI_LOC_EDIT_GEOFENCE_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_EDIT_GEOFENCE_IND_V02. */
+
+ const qmiLocGetBestAvailablePositionIndMsgT_v02*
+ pGetBestAvailablePositionInd;
+ /**< Response to the QMI_LOC_GET_BEST_AVAILABLE_POSITION_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_GET_BEST_AVAILABLE_POSITION_IND_V02. */
+
+ const qmiLocSecureGetAvailablePositionIndMsgT_v02*
+ pSecureGetBestAvailablePositionInd;
+ /**< Response to the QMI_LOC_SECURE_GET_AVAILABLE_POSITION_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_SECURE_GET_AVAILABLE_POSITION_IND_V02. */
+
+ const qmiLocInjectMotionDataIndMsgT_v02* pInjectMotionDataInd;
+ /**< Response to the QMI_LOC_INJECT_MOTION_DATA_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_INJECT_MOTION_DATA_IND_V02. */
+
+ const qmiLocGetNiGeofenceIdListIndMsgT_v02* pGetNiGeofenceIdListInd;
+ /**< Response to the QMI_LOC_GET_NI_GEOFENCE_ID_LIST_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_GET_NI_GEOFENCE_ID_LIST_IND_V02. */
+
+ const qmiLocInjectGSMCellInfoIndMsgT_v02* pInjectGSMCellInfoInd;
+ /**< Response to the QMI_LOC_INJECT_GSM_CELL_INFO_REQ_V02 request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_INJECT_GSM_CELL_INFO_IND_V02. */
+
+ const qmiLocInjectNetworkInitiatedMessageIndMsgT_v02*
+ pInjectNetworkInitiatedMessageInd;
+
+ /**< Response to the QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_REQ_V02
+ request.
+
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_IND_V02. */
+
+ const qmiLocWWANOutOfServiceNotificationIndMsgT_v02*
+ pWWANOutOfServiceNotificationInd;
+
+ /**< Response to the QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_REQ_V02
+ request.
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_IND_V02. */
+
+ const qmiLocPedometerReportIndMsgT_v02* pPedometerReportInd;
+
+ /**< Response to the QMI_LOC_PEDOMETER_REPORT_REQ_V02 request.
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_PEDOMETER_REPORT_IND_V02. */
+
+ const qmiLocInjectWCDMACellInfoIndMsgT_v02 *pInjectWCDMACellInfoInd;
+ const qmiLocInjectTDSCDMACellInfoIndMsgT_v02 *pInjectTDSCDMACellInfoInd;
+ const qmiLocInjectSubscriberIDIndMsgT_v02 *pInjectSubscriberIDInd;
+ const qmiLocInjectWifiApDataIndMsgT_v02 *pInjectWifiApDataInd;
+ const qmiLocNotifyWifiAttachmentStatusIndMsgT_v02 *pNotifyWifiAttachmentStatusInd;
+ const qmiLocNotifyWifiEnabledStatusIndMsgT_v02 *pNotifyWifiEnabledStatusInd;
+
+ const qmiLocInjectVehicleSensorDataIndMsgT_v02 *pInjectVehicleSensorDataInd;
+
+ /**< Response to the QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_REQ_V02 request.
+ The respIndId field in the response indication callback is set to
+ QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_IND_V02. */
+
+ const qmiLocGetAvailWwanPositionIndMsgT_v02 *pGetAvailWwanPositionInd;
+ /*QMI_LOC_GET_AVAILABLE_WWAN_POSITION_IND_V02*/
+
+ const qmiLocSetXtraVersionCheckIndMsgT_v02 *pSetXtraVersionCheckInd;
+ /*QMI_LOC_SET_XTRA_VERSION_CHECK_IND_V02*/
+
+ const qmiLocSetGNSSConstRepConfigIndMsgT_v02 *pSetGNSSConstRepConfigInd;
+ /*QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_IND_V02*/
+
+ const qmiLocStartDbtIndMsgT_v02 *pStartDbtInd;
+ /*QMI_LOC_START_DBT_IND_V02*/
+
+ const qmiLocStopDbtIndMsgT_v02 *pStopDbtInd;
+ /*QMI_LOC_STOP_DBT_IND_V02*/
+
+ const qmiLocInjectTimeZoneInfoIndMsgT_v02 *pInjectTimeZoneInfoInd;
+ /*QMI_LOC_INJECT_TIME_ZONE_INFO_IND_V02*/
+
+ const qmiLocQueryAonConfigIndMsgT_v02 *pQueryAonConfigInd;
+ /*QMI_LOC_QUERY_AON_CONFIG_IND_V02*/
+
+ const qmiLocGetSupportedFeatureIndMsgT_v02 *pGetSupportedFeatureInd;
+ /*QMI_LOC_GET_SUPPORTED_FEATURE_IND_V02*/
+
+ const qmiLocGtpApStatusIndMsgT_v02 *pGtpApStatusInd;
+ /*QMI_LOC_GTP_AP_STATUS_IND_V02*/
+
+ const qmiLocGdtDownloadBeginStatusIndMsgT_v02 *pGdtDownloadBeginStatusInd;
+ /*QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_IND_V02*/
+
+ const qmiLocGdtDownloadReadyStatusIndMsgT_v02 *pGdtDownloadReadyStatusInd;
+ /*QMI_LOC_GDT_DOWNLOAD_READY_STATUS_IND_V02*/
+
+ const qmiLocGdtReceiveDoneStatusIndMsgT_v02 *pGdtReceiveDoneStatusInd;
+ /*QMI_LOC_GDT_RECEIVE_DONE_STATUS_IND_V02*/
+
+ const qmiLocGdtDownloadEndStatusIndMsgT_v02 *pGdtDownloadEndStatusInd;
+ /*QMI_LOC_GDT_DOWNLOAD_END_STATUS_IND_V02*/
+
+ const qmiLocDeleteGNSSServiceDataIndMsgT_v02 *pDeleteGNSSServiceDataInd;
+ /* QMI_LOC_DELETE_GNSS_SERVICE_DATA_REQ_V02*/
+}locClientRespIndUnionType;
+
+/** @} */ /* end_addtogroup data_types */
+
+/** @addtogroup callback_functions
+@{ */
+/**
+ 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.
+
+ @datatypes
+ #locClientHandleType \n
+ #locClientEventIndUnionType
+
+ @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.
+
+ @return
+ None.
+
+ @dependencies
+ None. @newpage
+*/
+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.
+
+ @datatypes
+ #locClientHandleType \n
+ #locClientRespIndUnionType
+
+ @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.
+
+ @return
+ None.
+
+ @dependencies
+ None. @newpage
+*/
+typedef void (*locClientRespIndCbType)(
+ locClientHandleType handle,
+ uint32_t respIndId,
+ const locClientRespIndUnionType respIndPayload,
+ uint32_t respIndPayloadSize,
+ void *pClientCookie
+);
+
+/**
+ Location error callback function type. This function is 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.
+
+ @datatypes
+ #locClientHandleType \n
+ #locClientErrorEnumType
+
+ @param handle Location client who sent the request for which this
+ error indication is generated.
+ @param errorId Error ID.
+ @param pClientCookie Payload associated with the error indication.
+
+ @return
+ None.
+
+ @dependencies
+ None.
+*/
+typedef void (*locClientErrorCbType)(
+ locClientHandleType handle,
+ locClientErrorEnumType errorId,
+ void* pClientCookie
+ );
+/** @} */ /* end_addtogroup callback_functions */
+
+
+/** @ingroup data_types
+ 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.
+ @newpagetable */
+}locClientCallbacksType;
+
+/**
+ Response for getting qmi service list
+*/
+typedef struct
+{
+ qmi_get_supported_msgs_resp_v01 resp; /**< Response */
+}qmiLocGetSupportMsgT_v02;
+
+/*===========================================================================
+ *
+ * FUNCTION DECLARATION
+ *
+ *==========================================================================*/
+/** @addtogroup operation_functions
+@{ */
+/*==========================================================================
+ locClientOpen */
+/** @xreflabel{hdr:locClientOpenFunction}
+ 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.
+
+ @datatypes
+ #locClientStatusEnumType \n
+ #locClientEventMaskType \n
+ #locClientCallbacksType \n
+ #locClientHandleType
+
+ @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 #locClientStatusEnumType) -- On failure.
+
+ @dependencies
+ None. @newpage
+*/
+extern locClientStatusEnumType locClientOpen (
+ locClientEventMaskType eventRegMask,
+ const locClientCallbacksType* pLocClientCallbacks,
+ locClientHandleType* pLocClientHandle,
+ const void* pLocClientCookie
+);
+
+
+/*==========================================================================
+ locClientClose */
+/** @xreflabel{hdr:locClientCloseFunction}
+ Disconnects a client from the location engine and sets the handle to
+ LOC_CLIENT_INVALID_HANDLE_VALUE.
+
+ @datatypes
+ #locClientStatusEnumType \n
+ #locClientHandleType
+
+ @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
+);
+
+/*=============================================================================
+ locClientSendReq */
+/** @xreflabel{hdr:locClientSendReqFunction}
+ 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.
+
+ @datatypes
+ #locClientStatusEnumType \n
+ #locClientHandleType \n
+ #locClientReqUnionType
+
+ @param[in] handle Handle returned by the locClientOpen() function.
+ @param[in] reqId QMI_LOC service message ID of the request.
+ @param[in] reqPayload 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. @newpage
+*/
+extern locClientStatusEnumType locClientSendReq(
+ locClientHandleType handle,
+ uint32_t reqId,
+ locClientReqUnionType reqPayload
+);
+
+/*=============================================================================
+ locClientSupportMsgCheck */
+/**
+ @brief Sends a QMI_LOC_GET_SUPPORTED_MSGS_REQ_V02 message to the
+ location engine, and then receives a list of all services supported
+ by the engine. This function will check if the input service(s) form
+ the client is in the list or not. If the locClientSupportMsgCheck()
+ function is successful, the client should expect an result of
+ the service is supported or not recorded in supportedMsg.
+ @param [in] handle Handle returned by the locClientOpen()
+ function.
+ @param [in] supportedMsg a integer used to record which
+ message is supported
+
+ @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 locClientSupportMsgCheck(
+ locClientHandleType handle,
+ const uint32_t* msgArray,
+ uint32_t msgArrayLength,
+ uint64_t* supportedMsg
+);
+
+/*=============================================================================
+ locClientGetSizeByEventIndId */
+/** Gets the size of the event indication structure from a specified ID.
+
+ @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. @newpage
+*/
+extern bool locClientGetSizeByEventIndId(
+ uint32_t eventIndId,
+ size_t *pEventIndSize);
+
+
+/*=============================================================================
+ locClientGetSizeByRespIndId */
+/** Gets the size of the response indication structure from a specified ID.
+
+ @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.
+*/
+extern bool locClientGetSizeByRespIndId(
+ uint32_t respIndId,
+ size_t *pRespIndSize);
+
+/** locClientRegisterEventMask
+ * @brief registers the event mask with loc service
+ * @param [in] clientHandle
+ * @param [in] eventRegMask
+ * @return true if indication was validated; else false */
+
+extern bool locClientRegisterEventMask(
+ locClientHandleType clientHandle,
+ locClientEventMaskType eventRegMask);
+
+/*=============================================================================*/
+/** @} */ /* end_addtogroup operation_functions */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOC_API_V02_CLIENT_H*/
diff --git a/gps/loc_api/loc_api_v02/loc_api_v02_log.c b/gps/loc_api/loc_api_v02/loc_api_v02_log.c
new file mode 100644
index 0000000..763470c
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/loc_api_v02_log.c
@@ -0,0 +1,401 @@
+/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation, 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 const 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_EVENT_INJECT_WIFI_AP_DATA_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),
+ NAME_VAL(QMI_LOC_EVENT_NI_GEOFENCE_NOTIFICATION_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GEOFENCE_GEN_ALERT_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GEOFENCE_BREACH_NOTIFICATION_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GEOFENCE_BATCHED_BREACH_NOTIFICATION_IND_V02),
+ NAME_VAL(QMI_LOC_ADD_CIRCULAR_GEOFENCE_REQ_V02),
+ NAME_VAL(QMI_LOC_ADD_CIRCULAR_GEOFENCE_RESP_V02),
+ NAME_VAL(QMI_LOC_ADD_CIRCULAR_GEOFENCE_IND_V02),
+ NAME_VAL(QMI_LOC_DELETE_GEOFENCE_REQ_V02),
+ NAME_VAL(QMI_LOC_DELETE_GEOFENCE_RESP_V02),
+ NAME_VAL(QMI_LOC_DELETE_GEOFENCE_IND_V02),
+ NAME_VAL(QMI_LOC_QUERY_GEOFENCE_REQ_V02),
+ NAME_VAL(QMI_LOC_QUERY_GEOFENCE_RESP_V02),
+ NAME_VAL(QMI_LOC_QUERY_GEOFENCE_IND_V02),
+ NAME_VAL(QMI_LOC_EDIT_GEOFENCE_REQ_V02),
+ NAME_VAL(QMI_LOC_EDIT_GEOFENCE_RESP_V02),
+ NAME_VAL(QMI_LOC_EDIT_GEOFENCE_IND_V02),
+ NAME_VAL(QMI_LOC_GET_BEST_AVAILABLE_POSITION_REQ_V02),
+ NAME_VAL(QMI_LOC_GET_BEST_AVAILABLE_POSITION_RESP_V02),
+ NAME_VAL(QMI_LOC_GET_BEST_AVAILABLE_POSITION_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_MOTION_DATA_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_MOTION_DATA_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_MOTION_DATA_IND_V02),
+ NAME_VAL(QMI_LOC_GET_NI_GEOFENCE_ID_LIST_REQ_V02),
+ NAME_VAL(QMI_LOC_GET_NI_GEOFENCE_ID_LIST_RESP_V02),
+ NAME_VAL(QMI_LOC_GET_NI_GEOFENCE_ID_LIST_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_GSM_CELL_INFO_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_GSM_CELL_INFO_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_GSM_CELL_INFO_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_IND_V02),
+ NAME_VAL(QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_REQ_V02),
+ NAME_VAL(QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_RESP_V02),
+ NAME_VAL(QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_PEDOMETER_CONTROL_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_MOTION_DATA_CONTROL_IND_V02),
+ NAME_VAL(QMI_LOC_PEDOMETER_REPORT_REQ_V02),
+ NAME_VAL(QMI_LOC_PEDOMETER_REPORT_RESP_V02),
+ NAME_VAL(QMI_LOC_PEDOMETER_REPORT_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_WCDMA_CELL_INFO_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_WCDMA_CELL_INFO_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_WCDMA_CELL_INFO_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_TDSCDMA_CELL_INFO_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_TDSCDMA_CELL_INFO_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_TDSCDMA_CELL_INFO_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_SUBSCRIBER_ID_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_SUBSCRIBER_ID_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_SUBSCRIBER_ID_IND_V02),
+ NAME_VAL(QMI_LOC_GET_SUPPORTED_MSGS_REQ_V02),
+ NAME_VAL(QMI_LOC_GET_SUPPORTED_MSGS_RESP_V02),
+ NAME_VAL(QMI_LOC_GET_SUPPORTED_FIELDS_REQ_V02),
+ NAME_VAL(QMI_LOC_GET_SUPPORTED_FIELDS_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_WIFI_AP_DATA_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_WIFI_AP_DATA_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_WIFI_AP_DATA_IND_V02),
+ NAME_VAL(QMI_LOC_GET_BATCH_SIZE_REQ_V02),
+ NAME_VAL(QMI_LOC_GET_BATCH_SIZE_RESP_V02),
+ NAME_VAL(QMI_LOC_GET_BATCH_SIZE_IND_V02),
+ NAME_VAL(QMI_LOC_START_BATCHING_REQ_V02),
+ NAME_VAL(QMI_LOC_START_BATCHING_RESP_V02),
+ NAME_VAL(QMI_LOC_START_BATCHING_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_BATCH_FULL_NOTIFICATION_IND_V02),
+ NAME_VAL(QMI_LOC_READ_FROM_BATCH_REQ_V02),
+ NAME_VAL(QMI_LOC_READ_FROM_BATCH_RESP_V02),
+ NAME_VAL(QMI_LOC_READ_FROM_BATCH_IND_V02),
+ NAME_VAL(QMI_LOC_STOP_BATCHING_REQ_V02),
+ NAME_VAL(QMI_LOC_STOP_BATCHING_RESP_V02),
+ NAME_VAL(QMI_LOC_STOP_BATCHING_IND_V02),
+ NAME_VAL(QMI_LOC_RELEASE_BATCH_REQ_V02),
+ NAME_VAL(QMI_LOC_RELEASE_BATCH_RESP_V02),
+ NAME_VAL(QMI_LOC_RELEASE_BATCH_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_IND_V02),
+ NAME_VAL(QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_REQ_V02),
+ NAME_VAL(QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_RESP_V02),
+ NAME_VAL(QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_IND_V02),
+ NAME_VAL(QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_REQ_V02),
+ NAME_VAL(QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_RESP_V02),
+ NAME_VAL(QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_IND_V02),
+ NAME_VAL(QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_REQ_V02),
+ NAME_VAL(QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_RESP_V02),
+ NAME_VAL(QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_IND_V02),
+ NAME_VAL(QMI_LOC_GET_AVAILABLE_WWAN_POSITION_REQ_V02),
+ NAME_VAL(QMI_LOC_GET_AVAILABLE_WWAN_POSITION_RESP_V02),
+ NAME_VAL(QMI_LOC_GET_AVAILABLE_WWAN_POSITION_IND_V02),
+ NAME_VAL(QMI_LOC_SET_XTRA_VERSION_CHECK_REQ_V02),
+ NAME_VAL(QMI_LOC_SET_XTRA_VERSION_CHECK_RESP_V02),
+ NAME_VAL(QMI_LOC_SET_XTRA_VERSION_CHECK_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GEOFENCE_PROXIMITY_NOTIFICATION_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_IND_V02),
+ NAME_VAL(QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_REQ_V02),
+ NAME_VAL(QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_RESP_V02),
+ NAME_VAL(QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_IND_V02),
+ NAME_VAL(QMI_LOC_GDT_UPLOAD_END_REQ_V02),
+ NAME_VAL(QMI_LOC_GDT_UPLOAD_END_RESP_V02),
+ NAME_VAL(QMI_LOC_GDT_UPLOAD_END_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GDT_UPLOAD_BEGIN_STATUS_REQ_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GDT_UPLOAD_END_REQ_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GNSS_MEASUREMENT_REPORT_IND_V02),
+ NAME_VAL(QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_V02),
+ NAME_VAL(QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_RESP_V02),
+ NAME_VAL(QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_IND_V02),
+ NAME_VAL(QMI_LOC_START_DBT_REQ_V02),
+ NAME_VAL(QMI_LOC_START_DBT_RESP_V02),
+ NAME_VAL(QMI_LOC_START_DBT_IND_V02),
+ NAME_VAL(QMI_LOC_STOP_DBT_REQ_V02),
+ NAME_VAL(QMI_LOC_STOP_DBT_RESP_V02),
+ NAME_VAL(QMI_LOC_STOP_DBT_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_DBT_POSITION_REPORT_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_DBT_SESSION_STATUS_IND_V02),
+ NAME_VAL(QMI_LOC_SECURE_GET_AVAILABLE_POSITION_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GEOFENCE_BATCHED_DWELL_NOTIFICATION_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GET_TIME_ZONE_INFO_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_TIME_ZONE_INFO_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_TIME_ZONE_INFO_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_TIME_ZONE_INFO_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_APCACHE_DATA_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_APCACHE_DATA_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_APCACHE_DATA_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_APDONOTCACHE_DATA_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_APDONOTCACHE_DATA_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_APDONOTCACHE_DATA_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_BATCHING_STATUS_IND_V02),
+ NAME_VAL(QMI_LOC_QUERY_AON_CONFIG_REQ_V02),
+ NAME_VAL(QMI_LOC_QUERY_AON_CONFIG_RESP_V02),
+ NAME_VAL(QMI_LOC_QUERY_AON_CONFIG_IND_V02),
+ NAME_VAL(QMI_LOC_GTP_AP_STATUS_REQ_V02),
+ NAME_VAL(QMI_LOC_GTP_AP_STATUS_RESP_V02),
+ NAME_VAL(QMI_LOC_GTP_AP_STATUS_IND_V02),
+ NAME_VAL(QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_REQ_V02),
+ NAME_VAL(QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_RESP_V02),
+ NAME_VAL(QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_IND_V02),
+ NAME_VAL(QMI_LOC_GDT_DOWNLOAD_READY_STATUS_REQ_V02),
+ NAME_VAL(QMI_LOC_GDT_DOWNLOAD_READY_STATUS_RESP_V02),
+ NAME_VAL(QMI_LOC_GDT_DOWNLOAD_READY_STATUS_IND_V02),
+ NAME_VAL(QMI_LOC_GDT_RECEIVE_DONE_STATUS_REQ_V02),
+ NAME_VAL(QMI_LOC_GDT_RECEIVE_DONE_STATUS_RESP_V02),
+ NAME_VAL(QMI_LOC_GDT_RECEIVE_DONE_STATUS_IND_V02),
+ NAME_VAL(QMI_LOC_GDT_DOWNLOAD_END_STATUS_REQ_V02),
+ NAME_VAL(QMI_LOC_GDT_DOWNLOAD_END_STATUS_RESP_V02),
+ NAME_VAL(QMI_LOC_GDT_DOWNLOAD_END_STATUS_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GDT_DOWNLOAD_BEGIN_REQ_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GDT_RECEIVE_DONE_IND_V02),
+ NAME_VAL(QMI_LOC_EVENT_GDT_DOWNLOAD_END_REQ_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_XTRA_DATA_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_XTRA_DATA_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_XTRA_DATA_IND_V02),
+ NAME_VAL(QMI_LOC_INJECT_XTRA_PCID_REQ_V02),
+ NAME_VAL(QMI_LOC_INJECT_XTRA_PCID_RESP_V02),
+ NAME_VAL(QMI_LOC_INJECT_XTRA_PCID_IND_V02),
+ NAME_VAL(QMI_LOC_GET_SUPPORTED_FEATURE_REQ_V02),
+ NAME_VAL(QMI_LOC_GET_SUPPORTED_FEATURE_RESP_V02),
+ NAME_VAL(QMI_LOC_GET_SUPPORTED_FEATURE_IND_V02),
+};
+static const 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 const 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),
+ NAME_VAL(eLOC_CLIENT_FAILURE_NOT_ENOUGH_MEMORY),
+};
+static const 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 const loc_name_val_s_type loc_v02_qmi_status_name[] =
+{
+ NAME_VAL(eQMI_LOC_SUCCESS_V02),
+ NAME_VAL(eQMI_LOC_GENERAL_FAILURE_V02),
+ NAME_VAL(eQMI_LOC_UNSUPPORTED_V02),
+ NAME_VAL(eQMI_LOC_INVALID_PARAMETER_V02),
+ NAME_VAL(eQMI_LOC_ENGINE_BUSY_V02),
+ NAME_VAL(eQMI_LOC_PHONE_OFFLINE_V02),
+ NAME_VAL(eQMI_LOC_TIMEOUT_V02),
+ NAME_VAL(eQMI_LOC_CONFIG_NOT_SUPPORTED_V02),
+ NAME_VAL(eQMI_LOC_INSUFFICIENT_MEMORY_V02),
+};
+static const 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/gps/loc_api/loc_api_v02/loc_api_v02_log.h b/gps/loc_api/loc_api_v02/loc_api_v02_log.h
new file mode 100644
index 0000000..8d4670c
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/loc_api_v02_log.h
@@ -0,0 +1,50 @@
+/* Copyright (c) 2011, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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/gps/loc_api/loc_api_v02/loc_util_log.h b/gps/loc_api/loc_api_v02/loc_util_log.h
new file mode 100644
index 0000000..f3deed4
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/loc_util_log.h
@@ -0,0 +1,86 @@
+/* Copyright (c) 2011-2012, 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation, 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
+
+#include <platform_lib_log_util.h>
+
+#if defined(_ANDROID_)
+#include "loc_api_v02_log.h"
+
+#else // no _ANDROID_
+
+#if defined(__LOC_API_V02_LOG_SILENT__)
+#define MSG_LOG
+#define LOC_LOGE(...) MSG_LOG(__VA_ARGS__);
+#define LOC_LOGW(...) MSG_LOG(__VA_ARGS__);
+#define LOC_LOGD(...) MSG_LOG(__VA_ARGS__);
+#define LOC_LOGI(...) MSG_LOG(__VA_ARGS__);
+#define LOC_LOGV(...) MSG_LOG(__VA_ARGS__);
+#elif !defined(USE_GLIB)
+
+// common for QNX and Griffon
+
+//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__)
+#endif //__LOC_API_V02_LOG_SILENT__
+
+#define MODEM_LOG_CALLFLOW(SPEC, VAL)
+#define EXIT_LOG_CALLFLOW(SPEC, VAL)
+
+#define loc_get_v02_event_name(X) #X
+#define loc_get_v02_client_status_name(X) #X
+
+#define loc_get_v02_qmi_status_name(X) #X
+
+//specific to OFF TARGET
+#ifdef LOC_UTIL_TARGET_OFF_TARGET
+
+# include <stdio.h>
+# include <asm/errno.h>
+# include <sys/time.h>
+
+// 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)
+
+#endif //LOC_UTIL_TARGET_OFF_TARGET
+
+#endif //_ANDROID_
+
+#endif //LOC_UTIL_LOG_H
diff --git a/gps/loc_api/loc_api_v02/location_service_v02.c b/gps/loc_api/loc_api_v02/location_service_v02.c
new file mode 100644
index 0000000..16916ca
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/location_service_v02.c
@@ -0,0 +1,6163 @@
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation, 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.
+ */
+/*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*
+ *THIS IS AN AUTO GENERATED FILE. DO NOT ALTER IN ANY WAY
+ *====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*/
+
+/* This file was generated with Tool version 6.14.7
+ It was generated on: Tue Jun 28 2016 (Spin 0)
+ From IDL File: location_service_v02.idl */
+
+#include "stdint.h"
+#include "qmi_idl_lib_internal.h"
+#include "location_service_v02.h"
+#include "common_v01.h"
+
+
+/*Type Definitions*/
+static const uint8_t qmiLocApplicationIdStructT_data_v02[] = {
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+ QMI_IDL_OFFSET8(qmiLocApplicationIdStructT_v02, applicationProvider),
+ QMI_LOC_MAX_APP_ID_PROVIDER_LENGTH_V02,
+
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+ QMI_IDL_OFFSET8(qmiLocApplicationIdStructT_v02, applicationName),
+ QMI_LOC_MAX_APP_ID_NAME_LENGTH_V02,
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocApplicationIdStructT_v02, applicationVersion_valid),
+
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+ QMI_IDL_OFFSET8(qmiLocApplicationIdStructT_v02, applicationVersion),
+ QMI_LOC_MAX_APP_ID_VERSION_LENGTH_V02,
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+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),
+ QMI_IDL_TYPE88(0, 8),
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocNiSuplServerInfoStructT_v02, ipv6Addr),
+ QMI_IDL_TYPE88(0, 9),
+ 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),
+ QMI_IDL_TYPE88(0, 10),
+ 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),
+ QMI_IDL_TYPE88(0, 6),
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, clientName),
+ QMI_IDL_TYPE88(0, 6),
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, suplQop),
+ QMI_IDL_TYPE88(0, 7),
+ 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),
+ QMI_IDL_TYPE88(0, 12),
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, codewordString),
+ QMI_IDL_TYPE88(0, 12),
+ 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),
+ QMI_IDL_TYPE88(0, 5),
+ 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 qmiLocNiSuplVer2ExtStructT_data_v02[] = {
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocNiSuplVer2ExtStructT_v02, supportedNetworksMask),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocNiSuplVer2ExtStructT_v02, triggerType),
+
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocNiSuplVer2ExtStructT_v02, gnssType),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocEmergencyNotificationStructT_data_v02[] = {
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+ QMI_IDL_OFFSET8(qmiLocEmergencyNotificationStructT_v02, eslpUrl),
+ QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02,
+
+ 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),
+ QMI_IDL_TYPE88(0, 17),
+ 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),
+ QMI_IDL_TYPE88(0, 17),
+ 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),
+ QMI_IDL_TYPE88(0, 21),
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocGeofencePositionStructT_data_v02[] = {
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, timestampUtc),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, latitude),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, longitude),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, horUncEllipseSemiMinor),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, horUncEllipseSemiMajor),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, horUncEllipseOrientAzimuth),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, speedHorizontal_valid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, speedHorizontal),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, altitudeWrtEllipsoid_valid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, altitudeWrtEllipsoid),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, vertUnc_valid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, vertUnc),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, speedVertical_valid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, speedVertical),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, heading_valid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofencePositionStructT_v02, heading),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocGeofenceIdContinuousStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofenceIdContinuousStructT_v02, idLow),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofenceIdContinuousStructT_v02, idHigh),
+
+ 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 qmiLocDeleteBDSSvInfoStructT_data_v02[] = {
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteBDSSvInfoStructT_v02, gnssSvId),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteBDSSvInfoStructT_v02, deleteSvInfoMask),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocDeleteGALSvInfoStructT_data_v02[] = {
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGALSvInfoStructT_v02, gnssSvId),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGALSvInfoStructT_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 qmiLocWifiApSsidStructT_data_v02[] = {
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+ QMI_IDL_OFFSET8(qmiLocWifiApSsidStructT_v02, ssid),
+ QMI_LOC_MAX_WIFI_AP_SSID_STR_LENGTH_V02,
+
+ 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),
+ QMI_IDL_TYPE88(0, 34),
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocSensorTemperatureSampleStructT_data_v02[] = {
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSensorTemperatureSampleStructT_v02, timeOffset),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSensorTemperatureSampleStructT_v02, temperature),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocSensorTemperatureSampleListStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSensorTemperatureSampleListStructT_v02, timeSource),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSensorTemperatureSampleListStructT_v02, timeOfFirstSample),
+
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocSensorTemperatureSampleListStructT_v02, temperatureData),
+ QMI_LOC_SENSOR_DATA_MAX_SAMPLES_V02,
+ QMI_IDL_OFFSET8(qmiLocSensorTemperatureSampleListStructT_v02, temperatureData) - QMI_IDL_OFFSET8(qmiLocSensorTemperatureSampleListStructT_v02, temperatureData_len),
+ QMI_IDL_TYPE88(0, 36),
+ 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
+};
+
+static const uint8_t qmiLocCircularGeofenceArgsStructT_data_v02[] = {
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocCircularGeofenceArgsStructT_v02, latitude),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocCircularGeofenceArgsStructT_v02, longitude),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocCircularGeofenceArgsStructT_v02, radius),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocGeofenceMotionStateConfigStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofenceMotionStateConfigStructT_v02, motionState),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGeofenceMotionStateConfigStructT_v02, motionStateSpeed),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocTimeZoneStructT_data_v02[] = {
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocTimeZoneStructT_v02, dstOffset),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocTimeZoneStructT_v02, rawOffset),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocMotionDataStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocMotionDataStructT_v02, motion_state),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocMotionDataStructT_v02, motion_mode),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocMotionDataStructT_v02, probability_of_state),
+
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocMotionDataStructT_v02, age),
+
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocMotionDataStructT_v02, timeout),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocGSMCellIdStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGSMCellIdStructT_v02, MCC),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGSMCellIdStructT_v02, MNC),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGSMCellIdStructT_v02, LAC),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGSMCellIdStructT_v02, CID),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocWCDMACellIdStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWCDMACellIdStructT_v02, mcc),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWCDMACellIdStructT_v02, mnc),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWCDMACellIdStructT_v02, cid),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocTDSCDMACellIdStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocTDSCDMACellIdStructT_v02, mcc),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocTDSCDMACellIdStructT_v02, mnc),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocTDSCDMACellIdStructT_v02, cid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocTDSCDMACellIdStructT_v02, lac),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocBatchedReportStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, fixId),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, validFields),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, latitude),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, longitude),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, horUncCircular),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, speedHorizontal),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, speedUnc),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, altitudeWrtEllipsoid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, speedVertical),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, heading),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, headingUnc),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, technologyMask),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, timestampUtc),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, timeUnc),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, magneticDeviation),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, vertUnc),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, horConfidence),
+
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocBatchedReportStructT_v02, gpsTime),
+ QMI_IDL_TYPE88(0, 1),
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocWifiApDataStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, wifiApDataMask),
+
+ QMI_IDL_FLAGS_IS_ARRAY |QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, macAddress),
+ QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02,
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, apTransmitPower),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, apAntennaGain),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, apSignalToNoise),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, apDeviceType),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, apRssi),
+
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, apChannel),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, apRoundTripDelay),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, apRoundTripDelayUnit),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, apRoundTripDelayAccuracy),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, mobileSignalToNoise),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApDataStructT_v02, mobileRssi),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocWifiApAdditionalDataStructT_data_v02[] = {
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApAdditionalDataStructT_v02, rssiTimestamp),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApAdditionalDataStructT_v02, measAge),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApAdditionalDataStructT_v02, servingAccessPoint),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApAdditionalDataStructT_v02, channelFrequency),
+
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+ QMI_IDL_OFFSET8(qmiLocWifiApAdditionalDataStructT_v02, ssid),
+ QMI_LOC_MAX_WIFI_AP_SSID_STR_LENGTH_V02,
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApAdditionalDataStructT_v02, apHighResolutionRssi),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocVehicleSensorSampleStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocVehicleSensorSampleStructT_v02, timeOffset),
+
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocVehicleSensorSampleStructT_v02, axisSample),
+ QMI_LOC_VEHICLE_SENSOR_DATA_MAX_AXES_V02,
+ QMI_IDL_OFFSET8(qmiLocVehicleSensorSampleStructT_v02, axisSample) - QMI_IDL_OFFSET8(qmiLocVehicleSensorSampleStructT_v02, axisSample_len),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocVehicleSensorSampleListStructType_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocVehicleSensorSampleListStructType_v02, sampleTimeBase),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocVehicleSensorSampleListStructType_v02, axesValidity),
+
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocVehicleSensorSampleListStructType_v02, sensorData),
+ QMI_LOC_VEHICLE_SENSOR_DATA_MAX_SAMPLES_V02,
+ QMI_IDL_OFFSET8(qmiLocVehicleSensorSampleListStructType_v02, sensorData) - QMI_IDL_OFFSET8(qmiLocVehicleSensorSampleListStructType_v02, sensorData_len),
+ QMI_IDL_TYPE88(0, 49),
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocVehicleOdometrySampleStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocVehicleOdometrySampleStructT_v02, timeOffset),
+
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocVehicleOdometrySampleStructT_v02, distanceTravelled),
+ QMI_LOC_VEHICLE_ODOMETRY_MAX_MEASUREMENTS_V02,
+ QMI_IDL_OFFSET8(qmiLocVehicleOdometrySampleStructT_v02, distanceTravelled) - QMI_IDL_OFFSET8(qmiLocVehicleOdometrySampleStructT_v02, distanceTravelled_len),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocVehicleOdometrySampleListStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocVehicleOdometrySampleListStructT_v02, sampleTimeBase),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocVehicleOdometrySampleListStructT_v02, flags),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocVehicleOdometrySampleListStructT_v02, wheelFlags),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocVehicleOdometrySampleListStructT_v02, distanceTravelledBase),
+
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocVehicleOdometrySampleListStructT_v02, odometryData),
+ QMI_LOC_VEHICLE_SENSOR_DATA_MAX_SAMPLES_V02,
+ QMI_IDL_OFFSET8(qmiLocVehicleOdometrySampleListStructT_v02, odometryData) - QMI_IDL_OFFSET8(qmiLocVehicleOdometrySampleListStructT_v02, odometryData_len),
+ QMI_IDL_TYPE88(0, 51),
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocRcvrClockFrequencyInfoStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocRcvrClockFrequencyInfoStructT_v02, clockDrift),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocRcvrClockFrequencyInfoStructT_v02, clockDriftUnc),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocRcvrClockFrequencyInfoStructT_v02, sourceOfFreq),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocLeapSecondInfoStructT_data_v02[] = {
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocLeapSecondInfoStructT_v02, leapSec),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocLeapSecondInfoStructT_v02, leapSecUnc),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocInterSystemBiasStructT_data_v02[] = {
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInterSystemBiasStructT_v02, validMask),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInterSystemBiasStructT_v02, timeBias),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInterSystemBiasStructT_v02, timeBiasUnc),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocGnssTimeStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGnssTimeStructT_v02, system),
+
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGnssTimeStructT_v02, systemWeek),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGnssTimeStructT_v02, systemMsec),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGnssTimeStructT_v02, systemClkTimeBias),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGnssTimeStructT_v02, systemClkTimeUncMs),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocGloTimeStructT_data_v02[] = {
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGloTimeStructT_v02, gloFourYear),
+
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGloTimeStructT_v02, gloDays),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGloTimeStructT_v02, gloMsec),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGloTimeStructT_v02, gloClkTimeBias),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGloTimeStructT_v02, gloClkTimeUncMs),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocGnssTimeExtStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGnssTimeExtStructT_v02, refFCount),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGnssTimeExtStructT_v02, systemRtc_valid),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGnssTimeExtStructT_v02, systemRtcMs),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGnssTimeExtStructT_v02, sourceOfTime),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocSVTimeSpeedStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVTimeSpeedStructT_v02, svTimeMs),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVTimeSpeedStructT_v02, svTimeSubMs),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVTimeSpeedStructT_v02, svTimeUncMs),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVTimeSpeedStructT_v02, dopplerShift),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVTimeSpeedStructT_v02, dopplerShiftUnc),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVTimeSpeedStructT_v02, dopplerAccel_valid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVTimeSpeedStructT_v02, dopplerAccel),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocSVMeasurementStructT_data_v02[] = {
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, gnssSvId),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, gloFrequency),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, svStatus),
+
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, validMask),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, healthStatus),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, svInfoMask),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, validMeasStatusMask),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, measurementStatus),
+
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, CNo),
+
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, gloRfLoss),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, measLatency),
+
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, svTimeSpeed),
+ QMI_IDL_TYPE88(0, 59),
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, lossOfLock),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, multipathEstimate),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, fineSpeed),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, fineSpeedUnc),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, carrierPhase),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, cycleSlipCount),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, svAzimuth),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSVMeasurementStructT_v02, svElevation),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocWifiApMacAddressStructT_data_v02[] = {
+ QMI_IDL_FLAGS_IS_ARRAY |QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWifiApMacAddressStructT_v02, wifiApMacAddress),
+ QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02,
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocIBeaconIdStructT_data_v02[] = {
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+ QMI_IDL_OFFSET8(qmiLocIBeaconIdStructT_v02, uuid),
+ QMI_LOC_MAX_IBEACON_UUID_STR_LENGTH_V02,
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocIBeaconIdStructT_v02, majorNumber),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocIBeaconIdStructT_v02, minorNumber),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocGtpAsnVerStructT_data_v02[] = {
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGtpAsnVerStructT_v02, asnMajorVersion),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGtpAsnVerStructT_v02, asnMinorVersion),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGtpAsnVerStructT_v02, asnPointVersion),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocDbtPositionStructT_data_v02[] = {
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, timestampUtc),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, latitude),
+
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, longitude),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, horUncEllipseSemiMinor),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, horUncEllipseSemiMajor),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, horUncEllipseOrientAzimuth),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, speedHorizontal_valid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, speedHorizontal),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, altitudeWrtEllipsoid_valid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, altitudeWrtEllipsoid),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, vertUnc_valid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, vertUnc),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, speedVertical_valid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, speedVertical),
+
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, heading_valid),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDbtPositionStructT_v02, heading),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocApCacheStructT_data_v02[] = {
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocApCacheStructT_v02, macAddress),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocApCacheStructT_v02, xLat),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocApCacheStructT_v02, yLon),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocApCacheStructT_v02, mar),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocApCacheHepeRelStructT_data_v02[] = {
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocApCacheHepeRelStructT_v02, hepeValid),
+
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocApCacheHepeRelStructT_v02, hepe),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocApCacheHepeRelStructT_v02, apReliability),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocApDoNotCacheStructT_data_v02[] = {
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocApDoNotCacheStructT_v02, macAddress),
+
+ QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t qmiLocDeleteSatelliteDataStructT_data_v02[] = {
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteSatelliteDataStructT_v02, system),
+
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteSatelliteDataStructT_v02, deleteSatelliteDataMask),
+
+ 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),
+ QMI_IDL_TYPE88(1, 0)
+};
+
+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_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),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, applicationId) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, applicationId_valid)),
+ 0x14,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, applicationId),
+ QMI_IDL_TYPE88(0, 0),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, configAltitudeAssumed) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, configAltitudeAssumed_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, configAltitudeAssumed),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, minIntermediatePositionReportInterval) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, minIntermediatePositionReportInterval_valid)),
+ 0x16,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, minIntermediatePositionReportInterval),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, positionReportTimeout) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, positionReportTimeout_valid)),
+ 0x17,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, positionReportTimeout),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, sharePosition) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, sharePosition_valid)),
+ 0x18,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, sharePosition)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 2),
+
+ 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),
+ QMI_IDL_TYPE88(0, 1),
+
+ 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),
+ QMI_IDL_TYPE88(0, 3),
+
+ 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),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, gnssSvUsedList) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, gnssSvUsedList_valid)),
+ 0x2C,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventPositionReportIndMsgT_v02, gnssSvUsedList),
+ QMI_LOC_MAX_SV_USED_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, gnssSvUsedList) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, gnssSvUsedList_len),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, altitudeAssumed) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, altitudeAssumed_valid)),
+ 0x2D,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventPositionReportIndMsgT_v02, altitudeAssumed),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, velEnu) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, velEnu_valid)),
+ 0x2E,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventPositionReportIndMsgT_v02, velEnu),
+ QMI_LOC_ENU_ARRAY_LENGTH_V02,
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, velUncEnu) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, velUncEnu_valid)),
+ 0x2F,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventPositionReportIndMsgT_v02, velUncEnu),
+ QMI_LOC_ENU_ARRAY_LENGTH_V02
+};
+
+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),
+ QMI_IDL_TYPE88(0, 4)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 5),
+
+ 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),
+ QMI_IDL_TYPE88(0, 11),
+
+ 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),
+ QMI_IDL_TYPE88(0, 13),
+
+ 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),
+ QMI_IDL_TYPE88(0, 14),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiSuplVer2ExtInd) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiSuplVer2ExtInd_valid)),
+ 0x14,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiSuplVer2ExtInd),
+ QMI_IDL_TYPE88(0, 15),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, suplEmergencyNotification) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, suplEmergencyNotification_valid)),
+ 0x15,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, suplEmergencyNotification),
+ QMI_IDL_TYPE88(0, 16)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 18)
+};
+
+static const uint8_t qmiLocEventInjectPredictedOrbitsReqIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02, allowedSizes),
+ QMI_IDL_TYPE88(0, 19),
+
+ 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),
+ QMI_IDL_TYPE88(0, 20)
+};
+
+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_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),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventWifiReqIndMsgT_v02, e911Mode) - QMI_IDL_OFFSET8(qmiLocEventWifiReqIndMsgT_v02, e911Mode_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventWifiReqIndMsgT_v02, e911Mode)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 22),
+
+ 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),
+ QMI_IDL_TYPE88(0, 22),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, accelTemperatureReady) - QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, accelTemperatureReady_valid)),
+ 0x12,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, accelTemperatureReady),
+ QMI_IDL_TYPE88(0, 22),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, gyroTemperatureReady) - QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, gyroTemperatureReady_valid)),
+ 0x13,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, gyroTemperatureReady),
+ QMI_IDL_TYPE88(0, 22),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, calibratedMagReady) - QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, calibratedMagReady_valid)),
+ 0x14,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, calibratedMagReady),
+ QMI_IDL_TYPE88(0, 22),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, uncalibratedMagReady) - QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, uncalibratedMagReady_valid)),
+ 0x15,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, uncalibratedMagReady),
+ QMI_IDL_TYPE88(0, 22)
+};
+
+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)
+};
+
+static const uint8_t qmiLocEventNiGeofenceNotificationIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventNiGeofenceNotificationIndMsgT_v02, geofenceId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventNiGeofenceNotificationIndMsgT_v02, operationType)
+};
+
+static const uint8_t qmiLocEventGeofenceGenAlertIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceGenAlertIndMsgT_v02, geofenceAlert)
+};
+
+static const uint8_t qmiLocEventGeofenceBreachIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceBreachIndMsgT_v02, geofenceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceBreachIndMsgT_v02, breachType),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGeofenceBreachIndMsgT_v02, geofencePosition) - QMI_IDL_OFFSET8(qmiLocEventGeofenceBreachIndMsgT_v02, geofencePosition_valid)),
+ 0x10,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceBreachIndMsgT_v02, geofencePosition),
+ QMI_IDL_TYPE88(0, 23),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGeofenceBreachIndMsgT_v02, breachConfidence) - QMI_IDL_OFFSET8(qmiLocEventGeofenceBreachIndMsgT_v02, breachConfidence_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceBreachIndMsgT_v02, breachConfidence)
+};
+
+static const uint8_t qmiLocEventPedometerControlIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventPedometerControlIndMsgT_v02, requestPedometerData),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPedometerControlIndMsgT_v02, resetStepCount) - QMI_IDL_OFFSET8(qmiLocEventPedometerControlIndMsgT_v02, resetStepCount_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventPedometerControlIndMsgT_v02, resetStepCount),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPedometerControlIndMsgT_v02, stepCountThreshold) - QMI_IDL_OFFSET8(qmiLocEventPedometerControlIndMsgT_v02, stepCountThreshold_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventPedometerControlIndMsgT_v02, stepCountThreshold)
+};
+
+static const uint8_t qmiLocEventMotionDataControlIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventMotionDataControlIndMsgT_v02, requestMotionData)
+};
+
+static const uint8_t qmiLocEventGeofenceBatchedBreachIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, breachType),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofenceIdContinuousList) - QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofenceIdContinuousList_valid)),
+ 0x10,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofenceIdContinuousList),
+ QMI_LOC_MAX_GEOFENCE_ID_CONTINUOUS_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofenceIdContinuousList) - QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofenceIdContinuousList_len),
+ QMI_IDL_TYPE88(0, 24),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofenceIdDiscreteList) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofenceIdDiscreteList_valid)),
+ 0x11,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofenceIdDiscreteList),
+ QMI_LOC_MAX_GEOFENCE_ID_DISCRETE_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofenceIdDiscreteList) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofenceIdDiscreteList_len),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofencePosition) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofencePosition_valid)),
+ 0x12,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, geofencePosition),
+ QMI_IDL_TYPE88(0, 23),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, breachConfidence) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, breachConfidence_valid)),
+ 0x13,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, breachConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, headingUnc) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, headingUnc_valid)),
+ 0x14,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, headingUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, vertUnc) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, vertUnc_valid)),
+ 0x15,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, vertUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, speedUnc) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, speedUnc_valid)),
+ 0x16,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, speedUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, horConfidence) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, horConfidence_valid)),
+ 0x17,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, horConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, vertConfidence) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, vertConfidence_valid)),
+ 0x18,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, vertConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, DOP) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, DOP_valid)),
+ 0x19,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, DOP),
+ QMI_IDL_TYPE88(0, 2),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, gnssSvUsedList) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, gnssSvUsedList_valid)),
+ 0x1A,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, gnssSvUsedList),
+ QMI_LOC_MAX_SV_USED_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, gnssSvUsedList) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedBreachIndMsgT_v02, gnssSvUsedList_len)
+};
+
+static const uint8_t qmiLocEventGeofenceProximityIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceProximityIndMsgT_v02, proximityType),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceProximityIndMsgT_v02, geofenceId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGeofenceProximityIndMsgT_v02, contextId) - QMI_IDL_OFFSET8(qmiLocEventGeofenceProximityIndMsgT_v02, contextId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceProximityIndMsgT_v02, contextId)
+};
+
+static const uint8_t qmiLocEventGeofenceBatchedDwellIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, dwellType),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofenceIdContinuousList) - QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofenceIdContinuousList_valid)),
+ 0x10,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofenceIdContinuousList),
+ QMI_LOC_MAX_GEOFENCE_ID_CONTINUOUS_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofenceIdContinuousList) - QMI_IDL_OFFSET8(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofenceIdContinuousList_len),
+ QMI_IDL_TYPE88(0, 24),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofenceIdDiscreteList) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofenceIdDiscreteList_valid)),
+ 0x11,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofenceIdDiscreteList),
+ QMI_LOC_MAX_GEOFENCE_ID_DISCRETE_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofenceIdDiscreteList) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofenceIdDiscreteList_len),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofencePosition) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofencePosition_valid)),
+ 0x12,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, geofencePosition),
+ QMI_IDL_TYPE88(0, 23),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, headingUnc) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, headingUnc_valid)),
+ 0x13,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, headingUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, vertUnc) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, vertUnc_valid)),
+ 0x14,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, vertUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, speedUnc) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, speedUnc_valid)),
+ 0x15,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, speedUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, horConfidence) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, horConfidence_valid)),
+ 0x16,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, horConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, vertConfidence) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, vertConfidence_valid)),
+ 0x17,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, vertConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, DOP) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, DOP_valid)),
+ 0x18,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, DOP),
+ QMI_IDL_TYPE88(0, 2),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, gnssSvUsedList) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, gnssSvUsedList_valid)),
+ 0x19,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, gnssSvUsedList),
+ QMI_LOC_MAX_SV_USED_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, gnssSvUsedList) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGeofenceBatchedDwellIndMsgT_v02, gnssSvUsedList_len)
+};
+
+static const uint8_t qmiLocEventGdtUploadBeginStatusReqIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtUploadBeginStatusReqIndMsgT_v02, serviceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtUploadBeginStatusReqIndMsgT_v02, sessionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtUploadBeginStatusReqIndMsgT_v02, filePath),
+ QMI_LOC_MAX_GDT_PATH_LEN_V02,
+ QMI_IDL_OFFSET8(qmiLocEventGdtUploadBeginStatusReqIndMsgT_v02, filePath) - QMI_IDL_OFFSET8(qmiLocEventGdtUploadBeginStatusReqIndMsgT_v02, filePath_len)
+};
+
+static const uint8_t qmiLocEventGdtUploadEndReqIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtUploadEndReqIndMsgT_v02, serviceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtUploadEndReqIndMsgT_v02, sessionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtUploadEndReqIndMsgT_v02, endStatus)
+};
+
+static const uint8_t qmiLocEventGdtDownloadBeginReqIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, serviceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, sessionId),
+
+ 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, respTimeoutInterval),
+
+ 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(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, clientInfo),
+ ((QMI_LOC_MAX_GTP_CL_INFO_LEN_V02) & 0xFF), ((QMI_LOC_MAX_GTP_CL_INFO_LEN_V02) >> 8),
+ QMI_IDL_OFFSET8(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, clientInfo) - QMI_IDL_OFFSET8(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, clientInfo_len),
+
+ 0x05,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_SZ_IS_16 | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, mobileStatusData),
+ ((QMI_LOC_MAX_GTP_MSD_LEN_V02) & 0xFF), ((QMI_LOC_MAX_GTP_MSD_LEN_V02) >> 8),
+ QMI_IDL_OFFSET16RELATIVE(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, mobileStatusData) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, mobileStatusData_len),
+
+ 0x06,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, filePath),
+ QMI_LOC_MAX_GDT_PATH_LEN_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, filePath) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, filePath_len),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, powerBudgetInfo) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, powerBudgetInfo_valid)),
+ 0x10,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, powerBudgetInfo),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, powerBudgetAllowance) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, powerBudgetAllowance_valid)),
+ 0x11,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, powerBudgetAllowance),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, downloadRequestMask) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, downloadRequestMask_valid)),
+ 0x12,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGdtDownloadBeginReqIndMsgT_v02, downloadRequestMask)
+};
+
+static const uint8_t qmiLocEventGdtReceiveDoneIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtReceiveDoneIndMsgT_v02, serviceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtReceiveDoneIndMsgT_v02, sessionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtReceiveDoneIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocEventGdtDownloadEndReqIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtDownloadEndReqIndMsgT_v02, serviceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtDownloadEndReqIndMsgT_v02, sessionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGdtDownloadEndReqIndMsgT_v02, status)
+};
+
+/*
+ * 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),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetServiceRevisionIndMsgT_v02, revision),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetServiceRevisionIndMsgT_v02, gnssMeFWVerString) - QMI_IDL_OFFSET8(qmiLocGetServiceRevisionIndMsgT_v02, gnssMeFWVerString_valid)),
+ 0x10,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_STRING,
+ QMI_IDL_OFFSET8(qmiLocGetServiceRevisionIndMsgT_v02, gnssMeFWVerString),
+ QMI_LOC_GNSS_ME_VERSION_STRING_MAX_LENGTH_V02,
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetServiceRevisionIndMsgT_v02, gnssHostSWVerString) - QMI_IDL_OFFSET8(qmiLocGetServiceRevisionIndMsgT_v02, gnssHostSWVerString_valid)),
+ 0x11,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_STRING,
+ QMI_IDL_OFFSET8(qmiLocGetServiceRevisionIndMsgT_v02, gnssHostSWVerString),
+ QMI_LOC_GNSS_HOSTED_SW_VERSION_STRING_MAX_LENGTH_V02,
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocGetServiceRevisionIndMsgT_v02, gnssSWVerString) - QMI_IDL_OFFSET16RELATIVE(qmiLocGetServiceRevisionIndMsgT_v02, gnssSWVerString_valid)),
+ 0x12,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_STRING,
+ QMI_IDL_OFFSET16ARRAY(qmiLocGetServiceRevisionIndMsgT_v02, gnssSWVerString),
+ QMI_LOC_GNSS_SW_VERSION_STRING_MAX_LENGTH_V02
+};
+
+/*
+ * 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_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),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, applicationId) - QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, applicationId_valid)),
+ 0x13,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, applicationId),
+ QMI_IDL_TYPE88(0, 0),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, configAltitudeAssumed) - QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, configAltitudeAssumed_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, configAltitudeAssumed),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, minIntermediatePositionReportInterval) - QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, minIntermediatePositionReportInterval_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, minIntermediatePositionReportInterval),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, positionReportTimeout) - QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, positionReportTimeout_valid)),
+ 0x16,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, positionReportTimeout),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, sharePosition) - QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, sharePosition_valid)),
+ 0x17,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetFixCriteriaIndMsgT_v02, sharePosition)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 5),
+
+ 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),
+ QMI_IDL_TYPE88(0, 11),
+
+ 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),
+ QMI_IDL_TYPE88(0, 13),
+
+ 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),
+ QMI_IDL_TYPE88(0, 14),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiSuplVer2ExtPayload) - QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiSuplVer2ExtPayload_valid)),
+ 0x14,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocNiUserRespReqMsgT_v02, NiSuplVer2ExtPayload),
+ QMI_IDL_TYPE88(0, 15),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, suplEmergencyNotification) - QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, suplEmergencyNotification_valid)),
+ 0x15,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocNiUserRespReqMsgT_v02, suplEmergencyNotification),
+ QMI_IDL_TYPE88(0, 16)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 19),
+
+ 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),
+ QMI_IDL_TYPE88(0, 20)
+};
+
+/*
+ * 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),
+ QMI_IDL_TYPE88(0, 25)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 26),
+
+ 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_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),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, rawHorUncCircular) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, rawHorUncCircular_valid)),
+ 0x1E,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, rawHorUncCircular),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, rawHorConfidence) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, rawHorConfidence_valid)),
+ 0x1F,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, rawHorConfidence),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, onDemandCpi) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, onDemandCpi_valid)),
+ 0x20,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, onDemandCpi)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 8),
+
+ 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),
+ QMI_IDL_TYPE88(0, 9),
+
+ 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),
+ QMI_IDL_TYPE88(0, 8),
+
+ 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),
+ QMI_IDL_TYPE88(0, 9),
+
+ 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),
+ QMI_IDL_TYPE88(0, 27),
+
+ 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_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),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteBdsSvInfoList) - QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteBdsSvInfoList_valid)),
+ 0x14,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocDeleteAssistDataReqMsgT_v02, deleteBdsSvInfoList),
+ QMI_LOC_DELETE_MAX_BDS_SV_INFO_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteBdsSvInfoList) - QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteBdsSvInfoList_len),
+ QMI_IDL_TYPE88(0, 28),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteGalSvInfoList) - QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteGalSvInfoList_valid)),
+ 0x15,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocDeleteAssistDataReqMsgT_v02, deleteGalSvInfoList),
+ QMI_LOC_DELETE_MAX_GAL_SV_INFO_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteGalSvInfoList) - QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteGalSvInfoList_len),
+ QMI_IDL_TYPE88(0, 29)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 30),
+
+ 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),
+ QMI_IDL_TYPE88(0, 31),
+
+ 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),
+ QMI_IDL_TYPE88(0, 32),
+
+ 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),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiPositionReqMsgT_v02, rawHepe) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiPositionReqMsgT_v02, rawHepe_valid)),
+ 0x14,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectWifiPositionReqMsgT_v02, rawHepe),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiPositionReqMsgT_v02, wifiApSsidInfo) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiPositionReqMsgT_v02, wifiApSsidInfo_valid)),
+ 0x15,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectWifiPositionReqMsgT_v02, wifiApSsidInfo),
+ QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiPositionReqMsgT_v02, wifiApSsidInfo) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiPositionReqMsgT_v02, wifiApSsidInfo_len),
+ QMI_IDL_TYPE88(0, 33)
+};
+
+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[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetOperationModeReqMsgT_v02, operationMode),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetOperationModeReqMsgT_v02, minInterval) - QMI_IDL_OFFSET8(qmiLocSetOperationModeReqMsgT_v02, minInterval_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetOperationModeReqMsgT_v02, minInterval)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 35),
+
+ 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),
+ QMI_IDL_TYPE88(0, 35),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, threeAxisAccelDataTimeSource) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, threeAxisAccelDataTimeSource_valid)),
+ 0x13,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectSensorDataReqMsgT_v02, threeAxisAccelDataTimeSource),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, threeAxisGyroDataTimeSource) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, threeAxisGyroDataTimeSource_valid)),
+ 0x14,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectSensorDataReqMsgT_v02, threeAxisGyroDataTimeSource),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, accelTemperatureData) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, accelTemperatureData_valid)),
+ 0x15,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectSensorDataReqMsgT_v02, accelTemperatureData),
+ QMI_IDL_TYPE88(0, 37),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, gyroTemperatureData) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, gyroTemperatureData_valid)),
+ 0x16,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectSensorDataReqMsgT_v02, gyroTemperatureData),
+ QMI_IDL_TYPE88(0, 37),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, threeAxisMagData) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, threeAxisMagData_valid)),
+ 0x17,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectSensorDataReqMsgT_v02, threeAxisMagData),
+ QMI_IDL_TYPE88(0, 35),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, threeAxisMagDataTimeSource) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectSensorDataReqMsgT_v02, threeAxisMagDataTimeSource_valid)),
+ 0x18,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectSensorDataReqMsgT_v02, threeAxisMagDataTimeSource)
+};
+
+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_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),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, accelTemperatureSamplesAccepted) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, accelTemperatureSamplesAccepted_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, accelTemperatureSamplesAccepted),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, gyroTemperatureSamplesAccepted) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, gyroTemperatureSamplesAccepted_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, gyroTemperatureSamplesAccepted),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisMagSamplesAccepted) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisMagSamplesAccepted_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisMagSamplesAccepted)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 38)
+};
+
+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_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),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, lppConfig) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, lppConfig_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, lppConfig),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, assistedGlonassProtocolMask) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, assistedGlonassProtocolMask_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, assistedGlonassProtocolMask),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplHashAlgo) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplHashAlgo_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplHashAlgo),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplTlsVersion) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplTlsVersion_valid)),
+ 0x16,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplTlsVersion),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, emergencyProtocol) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, emergencyProtocol_valid)),
+ 0x17,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, emergencyProtocol),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, wifiScanInjectTimeout) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, wifiScanInjectTimeout_valid)),
+ 0x18,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, wifiScanInjectTimeout),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, lppeUpConfig) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, lppeUpConfig_valid)),
+ 0x19,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, lppeUpConfig),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, lppeCpConfig) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, lppeCpConfig_valid)),
+ 0x1A,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, lppeCpConfig)
+};
+
+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_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),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, lppConfig) - QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, lppConfig_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, lppConfig),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, assistedGlonassProtocolMask) - QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, assistedGlonassProtocolMask_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, assistedGlonassProtocolMask),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplHashAlgo) - QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplHashAlgo_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplHashAlgo),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplTlsVersion) - QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplTlsVersion_valid)),
+ 0x16,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, suplTlsVersion),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, emergencyProtocol) - QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, emergencyProtocol_valid)),
+ 0x17,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, emergencyProtocol),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, wifiScanInjectTimeout) - QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, wifiScanInjectTimeout_valid)),
+ 0x18,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, wifiScanInjectTimeout),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, lppeUpConfig) - QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, lppeUpConfig_valid)),
+ 0x19,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, lppeUpConfig),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, lppeCpConfig) - QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, lppeCpConfig_valid)),
+ 0x1A,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetProtocolConfigParametersIndMsgT_v02, lppeCpConfig)
+};
+
+static const uint8_t qmiLocSetSensorControlConfigReqMsgT_data_v02[] = {
+ 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),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorControlConfigReqMsgT_v02, sensorProvider) - QMI_IDL_OFFSET8(qmiLocSetSensorControlConfigReqMsgT_v02, sensorProvider_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorControlConfigReqMsgT_v02, sensorProvider)
+};
+
+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_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),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorControlConfigIndMsgT_v02, sensorProvider) - QMI_IDL_OFFSET8(qmiLocGetSensorControlConfigIndMsgT_v02, sensorProvider_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorControlConfigIndMsgT_v02, sensorProvider)
+};
+
+static const uint8_t qmiLocSetSensorPropertiesReqMsgT_data_v02[] = {
+ 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),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, velocityRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, velocityRandomWalkSpectralDensity_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, velocityRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, accelerationRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, accelerationRandomWalkSpectralDensity_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, accelerationRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, angleRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, angleRandomWalkSpectralDensity_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, angleRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, rateRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, rateRandomWalkSpectralDensity_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, rateRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleDataUse) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleDataUse_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleDataUse),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleVelocityRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleVelocityRandomWalkSpectralDensity_valid)),
+ 0x16,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleVelocityRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleAccelRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleAccelRandomWalkSpectralDensity_valid)),
+ 0x17,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleAccelRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleAngleRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleAngleRandomWalkSpectralDensity_valid)),
+ 0x18,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleAngleRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleAngularRateRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleAngularRateRandomWalkSpectralDensity_valid)),
+ 0x19,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleAngularRateRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleOdometryScaleFactorRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleOdometryScaleFactorRandomWalkSpectralDensity_valid)),
+ 0x1A,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleOdometryScaleFactorRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleOdometryVariance) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleOdometryVariance_valid)),
+ 0x1B,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesReqMsgT_v02, vehicleOdometryVariance)
+};
+
+static const uint8_t qmiLocSetSensorPropertiesIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesIndMsgT_v02, failedSensorPropertiesMask) - QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesIndMsgT_v02, failedSensorPropertiesMask_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPropertiesIndMsgT_v02, failedSensorPropertiesMask)
+};
+
+static const uint8_t qmiLocGetSensorPropertiesReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesReqMsgT_v02, getSensorPropertiesMask)
+};
+
+static const uint8_t qmiLocGetSensorPropertiesIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, status),
+
+ 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),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, velocityRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, velocityRandomWalkSpectralDensity_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, velocityRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, accelerationRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, accelerationRandomWalkSpectralDensity_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, accelerationRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, angleRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, angleRandomWalkSpectralDensity_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, angleRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, rateRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, rateRandomWalkSpectralDensity_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, rateRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleDataUse) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleDataUse_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleDataUse),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleVelocityRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleVelocityRandomWalkSpectralDensity_valid)),
+ 0x16,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleVelocityRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleAccelRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleAccelRandomWalkSpectralDensity_valid)),
+ 0x17,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleAccelRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleAngleRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleAngleRandomWalkSpectralDensity_valid)),
+ 0x18,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleAngleRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleAngularRateRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleAngularRateRandomWalkSpectralDensity_valid)),
+ 0x19,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleAngularRateRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleOdometryScaleFactorRandomWalkSpectralDensity) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleOdometryScaleFactorRandomWalkSpectralDensity_valid)),
+ 0x1A,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleOdometryScaleFactorRandomWalkSpectralDensity),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleOdometryVariance) - QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleOdometryVariance_valid)),
+ 0x1B,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPropertiesIndMsgT_v02, vehicleOdometryVariance)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 21),
+
+ 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),
+ QMI_IDL_TYPE88(0, 21),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, algorithmConfig) - QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, algorithmConfig_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, algorithmConfig),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, accelSamplingSpecHigh) - QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, accelSamplingSpecHigh_valid)),
+ 0x14,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, accelSamplingSpecHigh),
+ QMI_IDL_TYPE88(0, 21),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, gyroSamplingSpecHigh) - QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, gyroSamplingSpecHigh_valid)),
+ 0x15,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02, gyroSamplingSpecHigh),
+ QMI_IDL_TYPE88(0, 21)
+};
+
+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),
+ QMI_IDL_TYPE88(0, 21),
+
+ 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),
+ QMI_IDL_TYPE88(0, 21),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, algorithmConfig) - QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, algorithmConfig_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, algorithmConfig),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, accelSamplingSpecHigh) - QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, accelSamplingSpecHigh_valid)),
+ 0x14,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, accelSamplingSpecHigh),
+ QMI_IDL_TYPE88(0, 21),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, gyroSamplingSpecHigh) - QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, gyroSamplingSpecHigh_valid)),
+ 0x15,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, gyroSamplingSpecHigh),
+ QMI_IDL_TYPE88(0, 21)
+};
+
+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_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),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, enableFasterTTFF) - QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, enableFasterTTFF_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, enableFasterTTFF)
+};
+
+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_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),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, enableFasterTTFF) - QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, enableFasterTTFF_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, enableFasterTTFF)
+};
+
+static const uint8_t qmiLocAddCircularGeofenceReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, transactionId),
+
+ 0x02,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, circularGeofenceArgs),
+ QMI_IDL_TYPE88(0, 39),
+
+ 0x03,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, breachMask),
+
+ 0x04,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, includePosition),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, responsiveness) - QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, responsiveness_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, responsiveness),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, confidence) - QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, confidence_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, confidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, customResponsivenessValue) - QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, customResponsivenessValue_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, customResponsivenessValue),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, dwellTime) - QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, dwellTime_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, dwellTime),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, dwellTypeMask) - QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, dwellTypeMask_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceReqMsgT_v02, dwellTypeMask)
+};
+
+static const uint8_t qmiLocAddCircularGeofenceIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceIndMsgT_v02, transactionId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceIndMsgT_v02, geofenceId) - QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceIndMsgT_v02, geofenceId_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddCircularGeofenceIndMsgT_v02, geofenceId)
+};
+
+static const uint8_t qmiLocDeleteGeofenceReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceReqMsgT_v02, geofenceId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceReqMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocDeleteGeofenceIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteGeofenceIndMsgT_v02, geofenceId) - QMI_IDL_OFFSET8(qmiLocDeleteGeofenceIndMsgT_v02, geofenceId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceIndMsgT_v02, geofenceId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteGeofenceIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocDeleteGeofenceIndMsgT_v02, transactionId_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceIndMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocQueryGeofenceReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryGeofenceReqMsgT_v02, geofenceId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryGeofenceReqMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocQueryGeofenceIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, geofenceId) - QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, geofenceId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, geofenceId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, transactionId_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, geofenceOrigin) - QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, geofenceOrigin_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, geofenceOrigin),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, posWrtGeofence) - QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, posWrtGeofence_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, posWrtGeofence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, circularGeofenceArgs) - QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, circularGeofenceArgs_valid)),
+ 0x14,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, circularGeofenceArgs),
+ QMI_IDL_TYPE88(0, 39),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, geofenceState) - QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, geofenceState_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryGeofenceIndMsgT_v02, geofenceState)
+};
+
+static const uint8_t qmiLocSetGeofenceEngineConfigReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, gnssUnavailableIndicationTimeout) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, gnssUnavailableIndicationTimeout_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, gnssUnavailableIndicationTimeout),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, maxGeofences) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, maxGeofences_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, maxGeofences),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, enableMotionDetectionSources) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, enableMotionDetectionSources_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, enableMotionDetectionSources),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, enableCpiUsage) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, enableCpiUsage_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, enableCpiUsage),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, gnssPositionSessionTimeout) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, gnssPositionSessionTimeout_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, gnssPositionSessionTimeout),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, gnssPositionMaxPuncAcceptable) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, gnssPositionMaxPuncAcceptable_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, gnssPositionMaxPuncAcceptable),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, mediumResponsivenessValue) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, mediumResponsivenessValue_valid)),
+ 0x16,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, mediumResponsivenessValue),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, chalGnssEnvMinCpiWaitInterval) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, chalGnssEnvMinCpiWaitInterval_valid)),
+ 0x17,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, chalGnssEnvMinCpiWaitInterval),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, motionStateInfo) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, motionStateInfo_valid)),
+ 0x18,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, motionStateInfo),
+ QMI_LOC_GEOFENCE_MAX_MOTION_STATES_V02,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, motionStateInfo) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigReqMsgT_v02, motionStateInfo_len),
+ QMI_IDL_TYPE88(0, 40)
+};
+
+static const uint8_t qmiLocSetGeofenceEngineConfigIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigIndMsgT_v02, transactionId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineConfigIndMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocGetGeofenceEngineConfigReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigReqMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocGetGeofenceEngineConfigIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, transactionId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, gnssUnavailableIndicationTimeout) - QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, gnssUnavailableIndicationTimeout_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, gnssUnavailableIndicationTimeout),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, maxGeofences) - QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, maxGeofences_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, maxGeofences),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, enabledMotionDetectionSources) - QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, enabledMotionDetectionSources_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, enabledMotionDetectionSources),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, enabledCpiUsage) - QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, enabledCpiUsage_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetGeofenceEngineConfigIndMsgT_v02, enabledCpiUsage)
+};
+
+static const uint8_t qmiLocEditGeofenceReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEditGeofenceReqMsgT_v02, geofenceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEditGeofenceReqMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEditGeofenceReqMsgT_v02, geofenceState) - QMI_IDL_OFFSET8(qmiLocEditGeofenceReqMsgT_v02, geofenceState_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEditGeofenceReqMsgT_v02, geofenceState),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEditGeofenceReqMsgT_v02, breachMask) - QMI_IDL_OFFSET8(qmiLocEditGeofenceReqMsgT_v02, breachMask_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEditGeofenceReqMsgT_v02, breachMask),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEditGeofenceReqMsgT_v02, responsiveness) - QMI_IDL_OFFSET8(qmiLocEditGeofenceReqMsgT_v02, responsiveness_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEditGeofenceReqMsgT_v02, responsiveness)
+};
+
+static const uint8_t qmiLocEditGeofenceIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEditGeofenceIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEditGeofenceIndMsgT_v02, geofenceId) - QMI_IDL_OFFSET8(qmiLocEditGeofenceIndMsgT_v02, geofenceId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEditGeofenceIndMsgT_v02, geofenceId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEditGeofenceIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocEditGeofenceIndMsgT_v02, transactionId_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEditGeofenceIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEditGeofenceIndMsgT_v02, failedParams) - QMI_IDL_OFFSET8(qmiLocEditGeofenceIndMsgT_v02, failedParams_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEditGeofenceIndMsgT_v02, failedParams)
+};
+
+static const uint8_t qmiLocEventGetTimeZoneReqIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGetTimeZoneReqIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocInjectTimeZoneInfoReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectTimeZoneInfoReqMsgT_v02, timeUtc),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocInjectTimeZoneInfoReqMsgT_v02, timeZone),
+ QMI_IDL_TYPE88(0, 41)
+};
+
+static const uint8_t qmiLocInjectTimeZoneInfoIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectTimeZoneInfoIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGetBestAvailablePositionReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionReqMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocGetBestAvailablePositionIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, transactionId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, latitude) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, latitude_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, latitude),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, longitude) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, longitude_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, longitude),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncCircular) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncCircular_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncCircular),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, altitudeWrtEllipsoid) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, altitudeWrtEllipsoid_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, altitudeWrtEllipsoid),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertUnc) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertUnc_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, timestampUtc) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, timestampUtc_valid)),
+ 0x16,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, timestampUtc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, timeUnc) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, timeUnc_valid)),
+ 0x17,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, timeUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncEllipseSemiMinor) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncEllipseSemiMinor_valid)),
+ 0x18,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncEllipseSemiMinor),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncEllipseSemiMajor) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncEllipseSemiMajor_valid)),
+ 0x19,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncEllipseSemiMajor),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncEllipseOrientAzimuth) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncEllipseOrientAzimuth_valid)),
+ 0x1A,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horUncEllipseOrientAzimuth),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horCircularConfidence) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horCircularConfidence_valid)),
+ 0x1B,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horCircularConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horEllipticalConfidence) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horEllipticalConfidence_valid)),
+ 0x1C,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horEllipticalConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horReliability) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horReliability_valid)),
+ 0x1D,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horReliability),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horSpeed) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horSpeed_valid)),
+ 0x1E,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horSpeed),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horSpeedUnc) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horSpeedUnc_valid)),
+ 0x1F,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, horSpeedUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, altitudeWrtMeanSeaLevel) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, altitudeWrtMeanSeaLevel_valid)),
+ 0x20,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, altitudeWrtMeanSeaLevel),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertConfidence) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertConfidence_valid)),
+ 0x21,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertReliability) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertReliability_valid)),
+ 0x22,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertReliability),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertSpeed) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertSpeed_valid)),
+ 0x23,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertSpeed),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertSpeedUnc) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertSpeedUnc_valid)),
+ 0x24,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, vertSpeedUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, heading) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, heading_valid)),
+ 0x25,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, heading),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, headingUnc) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, headingUnc_valid)),
+ 0x26,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, headingUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, magneticDeviation) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, magneticDeviation_valid)),
+ 0x27,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, magneticDeviation),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, technologyMask) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, technologyMask_valid)),
+ 0x28,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, technologyMask),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, DOP) - QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, DOP_valid)),
+ 0x29,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocGetBestAvailablePositionIndMsgT_v02, DOP),
+ QMI_IDL_TYPE88(0, 2),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocGetBestAvailablePositionIndMsgT_v02, gpsTime) - QMI_IDL_OFFSET16RELATIVE(qmiLocGetBestAvailablePositionIndMsgT_v02, gpsTime_valid)),
+ 0x2A,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocGetBestAvailablePositionIndMsgT_v02, gpsTime),
+ QMI_IDL_TYPE88(0, 1),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocGetBestAvailablePositionIndMsgT_v02, timeSrc) - QMI_IDL_OFFSET16RELATIVE(qmiLocGetBestAvailablePositionIndMsgT_v02, timeSrc_valid)),
+ 0x2B,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocGetBestAvailablePositionIndMsgT_v02, timeSrc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocGetBestAvailablePositionIndMsgT_v02, sensorDataUsage) - QMI_IDL_OFFSET16RELATIVE(qmiLocGetBestAvailablePositionIndMsgT_v02, sensorDataUsage_valid)),
+ 0x2C,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocGetBestAvailablePositionIndMsgT_v02, sensorDataUsage),
+ QMI_IDL_TYPE88(0, 3),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocGetBestAvailablePositionIndMsgT_v02, gnssSvUsedList) - QMI_IDL_OFFSET16RELATIVE(qmiLocGetBestAvailablePositionIndMsgT_v02, gnssSvUsedList_valid)),
+ 0x2D,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocGetBestAvailablePositionIndMsgT_v02, gnssSvUsedList),
+ QMI_LOC_MAX_SV_USED_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocGetBestAvailablePositionIndMsgT_v02, gnssSvUsedList) - QMI_IDL_OFFSET16RELATIVE(qmiLocGetBestAvailablePositionIndMsgT_v02, gnssSvUsedList_len)
+};
+
+static const uint8_t qmiLocInjectMotionDataReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocInjectMotionDataReqMsgT_v02, motion_data),
+ QMI_IDL_TYPE88(0, 42)
+};
+
+static const uint8_t qmiLocInjectMotionDataIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectMotionDataIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGetNiGeofenceIdListReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetNiGeofenceIdListReqMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocGetNiGeofenceIdListIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetNiGeofenceIdListIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetNiGeofenceIdListIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocGetNiGeofenceIdListIndMsgT_v02, transactionId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetNiGeofenceIdListIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetNiGeofenceIdListIndMsgT_v02, niGeofenceIdList) - QMI_IDL_OFFSET8(qmiLocGetNiGeofenceIdListIndMsgT_v02, niGeofenceIdList_valid)),
+ 0x11,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetNiGeofenceIdListIndMsgT_v02, niGeofenceIdList),
+ QMI_LOC_MAX_NI_GEOFENCE_ID_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET8(qmiLocGetNiGeofenceIdListIndMsgT_v02, niGeofenceIdList) - QMI_IDL_OFFSET8(qmiLocGetNiGeofenceIdListIndMsgT_v02, niGeofenceIdList_len)
+};
+
+static const uint8_t qmiLocInjectGSMCellInfoReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocInjectGSMCellInfoReqMsgT_v02, gsmCellId),
+ QMI_IDL_TYPE88(0, 43),
+
+ 0x02,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectGSMCellInfoReqMsgT_v02, roamingStatus),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectGSMCellInfoReqMsgT_v02, timingAdvance) - QMI_IDL_OFFSET8(qmiLocInjectGSMCellInfoReqMsgT_v02, timingAdvance_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectGSMCellInfoReqMsgT_v02, timingAdvance)
+};
+
+static const uint8_t qmiLocInjectGSMCellInfoIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectGSMCellInfoIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocInjectWCDMACellInfoReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocInjectWCDMACellInfoReqMsgT_v02, wcdmaCellId),
+ QMI_IDL_TYPE88(0, 44),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectWCDMACellInfoReqMsgT_v02, roamingStatus),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectWCDMACellInfoReqMsgT_v02, freq) - QMI_IDL_OFFSET8(qmiLocInjectWCDMACellInfoReqMsgT_v02, freq_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectWCDMACellInfoReqMsgT_v02, freq),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectWCDMACellInfoReqMsgT_v02, psc) - QMI_IDL_OFFSET8(qmiLocInjectWCDMACellInfoReqMsgT_v02, psc_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectWCDMACellInfoReqMsgT_v02, psc)
+};
+
+static const uint8_t qmiLocInjectWCDMACellInfoIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectWCDMACellInfoIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocInjectTDSCDMACellInfoReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocInjectTDSCDMACellInfoReqMsgT_v02, tdscdmaCellId),
+ QMI_IDL_TYPE88(0, 45),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectTDSCDMACellInfoReqMsgT_v02, roamingStatus),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectTDSCDMACellInfoReqMsgT_v02, freq) - QMI_IDL_OFFSET8(qmiLocInjectTDSCDMACellInfoReqMsgT_v02, freq_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectTDSCDMACellInfoReqMsgT_v02, freq)
+};
+
+static const uint8_t qmiLocInjectTDSCDMACellInfoIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectTDSCDMACellInfoIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocInjectSubscriberIDReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSubscriberIDReqMsgT_v02, preferredIMSI) - QMI_IDL_OFFSET8(qmiLocInjectSubscriberIDReqMsgT_v02, preferredIMSI_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectSubscriberIDReqMsgT_v02, preferredIMSI),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSubscriberIDReqMsgT_v02, preferredMSISDN) - QMI_IDL_OFFSET8(qmiLocInjectSubscriberIDReqMsgT_v02, preferredMSISDN_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectSubscriberIDReqMsgT_v02, preferredMSISDN)
+};
+
+static const uint8_t qmiLocInjectSubscriberIDIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectSubscriberIDIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocInjectNetworkInitiatedMessageReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectNetworkInitiatedMessageReqMsgT_v02, injectedNIMessageType),
+
+ 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(qmiLocInjectNetworkInitiatedMessageReqMsgT_v02, injectedNIMessage),
+ ((QMI_LOC_MAX_INJECTED_NETWORK_INITIATED_MESSAGE_LENGTH_V02) & 0xFF), ((QMI_LOC_MAX_INJECTED_NETWORK_INITIATED_MESSAGE_LENGTH_V02) >> 8),
+ QMI_IDL_OFFSET8(qmiLocInjectNetworkInitiatedMessageReqMsgT_v02, injectedNIMessage) - QMI_IDL_OFFSET8(qmiLocInjectNetworkInitiatedMessageReqMsgT_v02, injectedNIMessage_len)
+};
+
+static const uint8_t qmiLocInjectNetworkInitiatedMessageIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectNetworkInitiatedMessageIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocWWANOutOfServiceNotificationReqMsgT is empty
+ * static const uint8_t qmiLocWWANOutOfServiceNotificationReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocWWANOutOfServiceNotificationIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocWWANOutOfServiceNotificationIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocPedometerReportReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, timeSource),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, timestamp),
+
+ 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, timeInterval),
+
+ 0x04,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, stepCount),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, stepConfidence) - QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, stepConfidence_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, stepConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, stepCountUncertainty) - QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, stepCountUncertainty_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, stepCountUncertainty),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, stepRate) - QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, stepRate_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocPedometerReportReqMsgT_v02, stepRate)
+};
+
+static const uint8_t qmiLocPedometerReportIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocPedometerReportIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGetBatchSizeReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBatchSizeReqMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBatchSizeReqMsgT_v02, batchSize)
+};
+
+static const uint8_t qmiLocGetBatchSizeIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBatchSizeIndMsgT_v02, status),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBatchSizeIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetBatchSizeIndMsgT_v02, batchSize)
+};
+
+static const uint8_t qmiLocStartBatchingReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, minInterval) - QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, minInterval_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, minInterval),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, horizontalAccuracyLevel) - QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, horizontalAccuracyLevel_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, horizontalAccuracyLevel),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, fixSessionTimeout) - QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, fixSessionTimeout_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, fixSessionTimeout),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, minDistance) - QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, minDistance_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, minDistance),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, batchAllPos) - QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, batchAllPos_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, batchAllPos),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, requestId) - QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, requestId_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartBatchingReqMsgT_v02, requestId)
+};
+
+static const uint8_t qmiLocStartBatchingIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartBatchingIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartBatchingIndMsgT_v02, requestId) - QMI_IDL_OFFSET8(qmiLocStartBatchingIndMsgT_v02, requestId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartBatchingIndMsgT_v02, requestId)
+};
+
+static const uint8_t qmiLocEventBatchFullIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventBatchFullIndMsgT_v02, batchCount)
+};
+
+static const uint8_t qmiLocEventLiveBatchedPositionReportIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventLiveBatchedPositionReportIndMsgT_v02, liveBatchedReport),
+ QMI_IDL_TYPE88(0, 46)
+};
+
+static const uint8_t qmiLocReadFromBatchReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocReadFromBatchReqMsgT_v02, numberOfEntries),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocReadFromBatchReqMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocReadFromBatchIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocReadFromBatchIndMsgT_v02, status),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocReadFromBatchIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocReadFromBatchIndMsgT_v02, numberOfEntries) - QMI_IDL_OFFSET8(qmiLocReadFromBatchIndMsgT_v02, numberOfEntries_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocReadFromBatchIndMsgT_v02, numberOfEntries),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocReadFromBatchIndMsgT_v02, batchedReportList) - QMI_IDL_OFFSET8(qmiLocReadFromBatchIndMsgT_v02, batchedReportList_valid)),
+ 0x11,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocReadFromBatchIndMsgT_v02, batchedReportList),
+ QMI_LOC_READ_FROM_BATCH_MAX_SIZE_V02,
+ QMI_IDL_OFFSET8(qmiLocReadFromBatchIndMsgT_v02, batchedReportList) - QMI_IDL_OFFSET8(qmiLocReadFromBatchIndMsgT_v02, batchedReportList_len),
+ QMI_IDL_TYPE88(0, 46)
+};
+
+static const uint8_t qmiLocStopBatchingReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStopBatchingReqMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStopBatchingReqMsgT_v02, requestId) - QMI_IDL_OFFSET8(qmiLocStopBatchingReqMsgT_v02, requestId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStopBatchingReqMsgT_v02, requestId)
+};
+
+static const uint8_t qmiLocStopBatchingIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStopBatchingIndMsgT_v02, status),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStopBatchingIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStopBatchingIndMsgT_v02, requestId) - QMI_IDL_OFFSET8(qmiLocStopBatchingIndMsgT_v02, requestId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStopBatchingIndMsgT_v02, requestId)
+};
+
+static const uint8_t qmiLocReleaseBatchReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocReleaseBatchReqMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocReleaseBatchIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocReleaseBatchIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocReleaseBatchIndMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocEventInjectWifiApDataReqIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventInjectWifiApDataReqIndMsgT_v02, e911Mode) - QMI_IDL_OFFSET8(qmiLocEventInjectWifiApDataReqIndMsgT_v02, e911Mode_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventInjectWifiApDataReqIndMsgT_v02, e911Mode)
+};
+
+static const uint8_t qmiLocInjectWifiApDataReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocInjectWifiApDataReqMsgT_v02, wifiApInfo),
+ QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02,
+ QMI_IDL_OFFSET8(qmiLocInjectWifiApDataReqMsgT_v02, wifiApInfo) - QMI_IDL_OFFSET8(qmiLocInjectWifiApDataReqMsgT_v02, wifiApInfo_len),
+ QMI_IDL_TYPE88(0, 47),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, errorCause) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, errorCause_valid)),
+ 0x10,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectWifiApDataReqMsgT_v02, errorCause),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, requestTimestamp) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, requestTimestamp_valid)),
+ 0x11,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectWifiApDataReqMsgT_v02, requestTimestamp),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, receiveTimestamp) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, receiveTimestamp_valid)),
+ 0x12,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectWifiApDataReqMsgT_v02, receiveTimestamp),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, onDemandScan) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, onDemandScan_valid)),
+ 0x13,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectWifiApDataReqMsgT_v02, onDemandScan),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, wifiApInfoA) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, wifiApInfoA_valid)),
+ 0x14,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectWifiApDataReqMsgT_v02, wifiApInfoA),
+ QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, wifiApInfoA) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiApDataReqMsgT_v02, wifiApInfoA_len),
+ QMI_IDL_TYPE88(0, 48)
+};
+
+static const uint8_t qmiLocInjectWifiApDataIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectWifiApDataIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocNotifyWifiAttachmentStatusReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocNotifyWifiAttachmentStatusReqMsgT_v02, attachState),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocNotifyWifiAttachmentStatusReqMsgT_v02, accessPointMacAddress) - QMI_IDL_OFFSET8(qmiLocNotifyWifiAttachmentStatusReqMsgT_v02, accessPointMacAddress_valid)),
+ 0x10,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocNotifyWifiAttachmentStatusReqMsgT_v02, accessPointMacAddress),
+ QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02,
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocNotifyWifiAttachmentStatusReqMsgT_v02, wifiApSsid) - QMI_IDL_OFFSET8(qmiLocNotifyWifiAttachmentStatusReqMsgT_v02, wifiApSsid_valid)),
+ 0x11,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_STRING,
+ QMI_IDL_OFFSET8(qmiLocNotifyWifiAttachmentStatusReqMsgT_v02, wifiApSsid),
+ QMI_LOC_MAX_WIFI_AP_SSID_STR_LENGTH_V02
+};
+
+static const uint8_t qmiLocNotifyWifiAttachmentStatusIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocNotifyWifiAttachmentStatusIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocNotifyWifiEnabledStatusReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocNotifyWifiEnabledStatusReqMsgT_v02, enabledStatus)
+};
+
+static const uint8_t qmiLocNotifyWifiEnabledStatusIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocNotifyWifiEnabledStatusIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocEventVehicleDataReadyIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventVehicleDataReadyIndMsgT_v02, vehicleAccelReadyStatus) - QMI_IDL_OFFSET8(qmiLocEventVehicleDataReadyIndMsgT_v02, vehicleAccelReadyStatus_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventVehicleDataReadyIndMsgT_v02, vehicleAccelReadyStatus),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventVehicleDataReadyIndMsgT_v02, vehicleAngularRateReadyStatus) - QMI_IDL_OFFSET8(qmiLocEventVehicleDataReadyIndMsgT_v02, vehicleAngularRateReadyStatus_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventVehicleDataReadyIndMsgT_v02, vehicleAngularRateReadyStatus),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventVehicleDataReadyIndMsgT_v02, vehicleOdometryReadyStatus) - QMI_IDL_OFFSET8(qmiLocEventVehicleDataReadyIndMsgT_v02, vehicleOdometryReadyStatus_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventVehicleDataReadyIndMsgT_v02, vehicleOdometryReadyStatus)
+};
+
+static const uint8_t qmiLocInjectVehicleSensorDataReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectVehicleSensorDataReqMsgT_v02, accelData) - QMI_IDL_OFFSET8(qmiLocInjectVehicleSensorDataReqMsgT_v02, accelData_valid)),
+ 0x10,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocInjectVehicleSensorDataReqMsgT_v02, accelData),
+ QMI_IDL_TYPE88(0, 50),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectVehicleSensorDataReqMsgT_v02, angRotationData) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectVehicleSensorDataReqMsgT_v02, angRotationData_valid)),
+ 0x11,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectVehicleSensorDataReqMsgT_v02, angRotationData),
+ QMI_IDL_TYPE88(0, 50),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectVehicleSensorDataReqMsgT_v02, odometryData) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectVehicleSensorDataReqMsgT_v02, odometryData_valid)),
+ 0x12,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectVehicleSensorDataReqMsgT_v02, odometryData),
+ QMI_IDL_TYPE88(0, 52),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectVehicleSensorDataReqMsgT_v02, changeInTimeScales) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectVehicleSensorDataReqMsgT_v02, changeInTimeScales_valid)),
+ 0x13,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectVehicleSensorDataReqMsgT_v02, changeInTimeScales)
+};
+
+static const uint8_t qmiLocInjectVehicleSensorDataIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectVehicleSensorDataIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGetAvailWwanPositionReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionReqMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocGetAvailWwanPositionIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, transactionId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, latitude) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, latitude_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, latitude),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, longitude) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, longitude_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, longitude),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncCircular) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncCircular_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncCircular),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, altitudeWrtEllipsoid) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, altitudeWrtEllipsoid_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, altitudeWrtEllipsoid),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, vertUnc) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, vertUnc_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, vertUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, timestampUtc) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, timestampUtc_valid)),
+ 0x16,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, timestampUtc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, timeUnc) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, timeUnc_valid)),
+ 0x17,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, timeUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncEllipseSemiMinor) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncEllipseSemiMinor_valid)),
+ 0x18,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncEllipseSemiMinor),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncEllipseSemiMajor) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncEllipseSemiMajor_valid)),
+ 0x19,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncEllipseSemiMajor),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncEllipseOrientAzimuth) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncEllipseOrientAzimuth_valid)),
+ 0x1A,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horUncEllipseOrientAzimuth),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horCircularConfidence) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horCircularConfidence_valid)),
+ 0x1B,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horCircularConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horEllipticalConfidence) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horEllipticalConfidence_valid)),
+ 0x1C,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horEllipticalConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horReliability) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horReliability_valid)),
+ 0x1D,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, horReliability),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, altitudeWrtMeanSeaLevel) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, altitudeWrtMeanSeaLevel_valid)),
+ 0x1E,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, altitudeWrtMeanSeaLevel),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, vertConfidence) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, vertConfidence_valid)),
+ 0x1F,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, vertConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, vertReliability) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, vertReliability_valid)),
+ 0x20,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, vertReliability),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, gpsTime) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, gpsTime_valid)),
+ 0x21,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, gpsTime),
+ QMI_IDL_TYPE88(0, 1),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, timeSrc) - QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, timeSrc_valid)),
+ 0x22,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetAvailWwanPositionIndMsgT_v02, timeSrc)
+};
+
+static const uint8_t qmiLocSetPremiumServicesCfgReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetPremiumServicesCfgReqMsgT_v02, premiumServiceType),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetPremiumServicesCfgReqMsgT_v02, premiumServiceCfg)
+};
+
+static const uint8_t qmiLocSetPremiumServicesCfgIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetPremiumServicesCfgIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocSetXtraVersionCheckReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetXtraVersionCheckReqMsgT_v02, xtraVersionCheckMode)
+};
+
+static const uint8_t qmiLocSetXtraVersionCheckIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetXtraVersionCheckIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocSetGNSSConstRepConfigReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGNSSConstRepConfigReqMsgT_v02, measReportConfig) - QMI_IDL_OFFSET8(qmiLocSetGNSSConstRepConfigReqMsgT_v02, measReportConfig_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGNSSConstRepConfigReqMsgT_v02, measReportConfig),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGNSSConstRepConfigReqMsgT_v02, svPolyReportConfig) - QMI_IDL_OFFSET8(qmiLocSetGNSSConstRepConfigReqMsgT_v02, svPolyReportConfig_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGNSSConstRepConfigReqMsgT_v02, svPolyReportConfig)
+};
+
+static const uint8_t qmiLocSetGNSSConstRepConfigIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGNSSConstRepConfigIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocEventGnssSvMeasInfoIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, seqNum),
+
+ 0x02,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, maxMessageNum),
+
+ 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, system),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, rcvrClockFrequencyInfo) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, rcvrClockFrequencyInfo_valid)),
+ 0x10,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, rcvrClockFrequencyInfo),
+ QMI_IDL_TYPE88(0, 53),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, leapSecondInfo) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, leapSecondInfo_valid)),
+ 0x11,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, leapSecondInfo),
+ QMI_IDL_TYPE88(0, 54),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gpsGloInterSystemBias) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gpsGloInterSystemBias_valid)),
+ 0x12,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gpsGloInterSystemBias),
+ QMI_IDL_TYPE88(0, 55),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gpsBdsInterSystemBias) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gpsBdsInterSystemBias_valid)),
+ 0x13,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gpsBdsInterSystemBias),
+ QMI_IDL_TYPE88(0, 55),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gpsGalInterSystemBias) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gpsGalInterSystemBias_valid)),
+ 0x14,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gpsGalInterSystemBias),
+ QMI_IDL_TYPE88(0, 55),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, bdsGloInterSystemBias) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, bdsGloInterSystemBias_valid)),
+ 0x15,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, bdsGloInterSystemBias),
+ QMI_IDL_TYPE88(0, 55),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, galGloInterSystemBias) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, galGloInterSystemBias_valid)),
+ 0x16,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, galGloInterSystemBias),
+ QMI_IDL_TYPE88(0, 55),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, galBdsInterSystemBias) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, galBdsInterSystemBias_valid)),
+ 0x17,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, galBdsInterSystemBias),
+ QMI_IDL_TYPE88(0, 55),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, systemTime) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, systemTime_valid)),
+ 0x18,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, systemTime),
+ QMI_IDL_TYPE88(0, 56),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gloTime) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gloTime_valid)),
+ 0x19,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, gloTime),
+ QMI_IDL_TYPE88(0, 57),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, systemTimeExt) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, systemTimeExt_valid)),
+ 0x1A,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, systemTimeExt),
+ QMI_IDL_TYPE88(0, 58),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, svMeasurement) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, svMeasurement_valid)),
+ 0x1B,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, svMeasurement),
+ QMI_LOC_SV_MEAS_LIST_MAX_SIZE_V02,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, svMeasurement) - QMI_IDL_OFFSET8(qmiLocEventGnssSvMeasInfoIndMsgT_v02, svMeasurement_len),
+ QMI_IDL_TYPE88(0, 60),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGnssSvMeasInfoIndMsgT_v02, numClockResets) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGnssSvMeasInfoIndMsgT_v02, numClockResets_valid)),
+ 0x1C,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGnssSvMeasInfoIndMsgT_v02, numClockResets)
+};
+
+static const uint8_t qmiLocEventGnssSvPolyIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, gnssSvId),
+
+ 0x02,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, T0),
+
+ 0x03,
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, svPolyFlagValid),
+
+ 0x04,
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, svPolyFlags),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, polyCoeffXYZ0) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, polyCoeffXYZ0_valid)),
+ 0x10,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, polyCoeffXYZ0),
+ QMI_LOC_SV_POLY_XYZ_0_TH_ORDER_COEFF_SIZE_V02,
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, polyCoefXYZN) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, polyCoefXYZN_valid)),
+ 0x11,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, polyCoefXYZN),
+ QMI_LOC_SV_POLY_XYZ_N_TH_ORDER_COEFF_SIZE_V02,
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, polyCoefClockBias) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, polyCoefClockBias_valid)),
+ 0x12,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, polyCoefClockBias),
+ QMI_LOC_SV_POLY_SV_CLKBIAS_COEFF_SIZE_V02,
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, gloFrequency) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, gloFrequency_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, gloFrequency),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, IODE) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, IODE_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, IODE),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, enhancedIOD) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, enhancedIOD_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, enhancedIOD),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, svPosUnc) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, svPosUnc_valid)),
+ 0x16,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, svPosUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, ionoDelay) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, ionoDelay_valid)),
+ 0x17,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, ionoDelay),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, ionoDot) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, ionoDot_valid)),
+ 0x18,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, ionoDot),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, sbasIonoDelay) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, sbasIonoDelay_valid)),
+ 0x19,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, sbasIonoDelay),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, sbasIonoDot) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, sbasIonoDot_valid)),
+ 0x1A,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, sbasIonoDot),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, tropoDelay) - QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, tropoDelay_valid)),
+ 0x1B,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventGnssSvPolyIndMsgT_v02, tropoDelay),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGnssSvPolyIndMsgT_v02, elevation) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGnssSvPolyIndMsgT_v02, elevation_valid)),
+ 0x1C,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGnssSvPolyIndMsgT_v02, elevation),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGnssSvPolyIndMsgT_v02, elevationDot) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGnssSvPolyIndMsgT_v02, elevationDot_valid)),
+ 0x1D,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGnssSvPolyIndMsgT_v02, elevationDot),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGnssSvPolyIndMsgT_v02, elenationUnc) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGnssSvPolyIndMsgT_v02, elenationUnc_valid)),
+ 0x1E,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGnssSvPolyIndMsgT_v02, elenationUnc),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventGnssSvPolyIndMsgT_v02, velCoef) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventGnssSvPolyIndMsgT_v02, velCoef_valid)),
+ 0x1F,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventGnssSvPolyIndMsgT_v02, velCoef),
+ QMI_LOC_SV_POLY_VELOCITY_COEF_SIZE_V02
+};
+
+static const uint8_t qmiLocAddGeofenceContextReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddGeofenceContextReqMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddGeofenceContextReqMsgT_v02, geofenceId) - QMI_IDL_OFFSET8(qmiLocAddGeofenceContextReqMsgT_v02, geofenceId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddGeofenceContextReqMsgT_v02, geofenceId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddGeofenceContextReqMsgT_v02, wifiApSsidInfo) - QMI_IDL_OFFSET8(qmiLocAddGeofenceContextReqMsgT_v02, wifiApSsidInfo_valid)),
+ 0x11,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocAddGeofenceContextReqMsgT_v02, wifiApSsidInfo),
+ QMI_LOC_WIFI_AREA_ID_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET8(qmiLocAddGeofenceContextReqMsgT_v02, wifiApSsidInfo) - QMI_IDL_OFFSET8(qmiLocAddGeofenceContextReqMsgT_v02, wifiApSsidInfo_len),
+ QMI_IDL_TYPE88(0, 33),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, wifiApMacAddressList) - QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, wifiApMacAddressList_valid)),
+ 0x12,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocAddGeofenceContextReqMsgT_v02, wifiApMacAddressList),
+ QMI_LOC_WIFI_AREA_ID_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, wifiApMacAddressList) - QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, wifiApMacAddressList_len),
+ QMI_IDL_TYPE88(0, 61),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, tdsCdmaCellIDList) - QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, tdsCdmaCellIDList_valid)),
+ 0x13,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocAddGeofenceContextReqMsgT_v02, tdsCdmaCellIDList),
+ QMI_LOC_CELL_ID_LIST_LENGTH_V02,
+ QMI_IDL_TYPE88(0, 45),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, wcdmaCellIDList) - QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, wcdmaCellIDList_valid)),
+ 0x14,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocAddGeofenceContextReqMsgT_v02, wcdmaCellIDList),
+ QMI_LOC_CELL_ID_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, wcdmaCellIDList) - QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, wcdmaCellIDList_len),
+ QMI_IDL_TYPE88(0, 44),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, gsmCellIDList) - QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, gsmCellIDList_valid)),
+ 0x15,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocAddGeofenceContextReqMsgT_v02, gsmCellIDList),
+ QMI_LOC_CELL_ID_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, gsmCellIDList) - QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, gsmCellIDList_len),
+ QMI_IDL_TYPE88(0, 43),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, iBeaconList) - QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, iBeaconList_valid)),
+ 0x16,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocAddGeofenceContextReqMsgT_v02, iBeaconList),
+ QMI_LOC_IBEACON_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, iBeaconList) - QMI_IDL_OFFSET16RELATIVE(qmiLocAddGeofenceContextReqMsgT_v02, iBeaconList_len),
+ QMI_IDL_TYPE88(0, 62)
+};
+
+static const uint8_t qmiLocAddGeofenceContextIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddGeofenceContextIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddGeofenceContextIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocAddGeofenceContextIndMsgT_v02, transactionId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddGeofenceContextIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddGeofenceContextIndMsgT_v02, geofenceId) - QMI_IDL_OFFSET8(qmiLocAddGeofenceContextIndMsgT_v02, geofenceId_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddGeofenceContextIndMsgT_v02, geofenceId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocAddGeofenceContextIndMsgT_v02, contextId) - QMI_IDL_OFFSET8(qmiLocAddGeofenceContextIndMsgT_v02, contextId_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocAddGeofenceContextIndMsgT_v02, contextId)
+};
+
+static const uint8_t qmiLocSetGeofenceEngineContextReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineContextReqMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineContextReqMsgT_v02, utcTimeOfDay) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineContextReqMsgT_v02, utcTimeOfDay_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineContextReqMsgT_v02, utcTimeOfDay),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineContextReqMsgT_v02, temperature) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineContextReqMsgT_v02, temperature_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineContextReqMsgT_v02, temperature)
+};
+
+static const uint8_t qmiLocSetGeofenceEngineContextIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineContextIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineContextIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineContextIndMsgT_v02, transactionId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSetGeofenceEngineContextIndMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocDeleteGeofenceContextReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextReqMsgT_v02, transactionId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextReqMsgT_v02, geofenceId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextReqMsgT_v02, contextId) - QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextReqMsgT_v02, contextId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextReqMsgT_v02, contextId)
+};
+
+static const uint8_t qmiLocDeleteGeofenceContextIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextIndMsgT_v02, transactionId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextIndMsgT_v02, geofenceId) - QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextIndMsgT_v02, geofenceId_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextIndMsgT_v02, geofenceId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextIndMsgT_v02, contextId) - QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextIndMsgT_v02, contextId_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGeofenceContextIndMsgT_v02, contextId)
+};
+
+static const uint8_t qmiLocInjectGtpClientDownloadedDataReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ 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(qmiLocInjectGtpClientDownloadedDataReqMsgT_v02, ClientDownloadedData),
+ ((QMI_LOC_MAX_GTP_WWAN_CLIENT_DOWNLOADED_DATA_LEN_V02) & 0xFF), ((QMI_LOC_MAX_GTP_WWAN_CLIENT_DOWNLOADED_DATA_LEN_V02) >> 8),
+ QMI_IDL_OFFSET8(qmiLocInjectGtpClientDownloadedDataReqMsgT_v02, ClientDownloadedData) - QMI_IDL_OFFSET8(qmiLocInjectGtpClientDownloadedDataReqMsgT_v02, ClientDownloadedData_len)
+};
+
+static const uint8_t qmiLocInjectGtpClientDownloadedDataIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectGtpClientDownloadedDataIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGdtUploadBeginStatusReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtUploadBeginStatusReqMsgT_v02, serviceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtUploadBeginStatusReqMsgT_v02, sessionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtUploadBeginStatusReqMsgT_v02, gdtAccessStatus)
+};
+
+static const uint8_t qmiLocGdtUploadBeginStatusIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtUploadBeginStatusIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGdtUploadEndReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtUploadEndReqMsgT_v02, serviceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtUploadEndReqMsgT_v02, sessionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtUploadEndReqMsgT_v02, gdtEndStatus)
+};
+
+static const uint8_t qmiLocGdtUploadEndIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtUploadEndIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGtpApStatusReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGtpApStatusReqMsgT_v02, gtpApDbStatus),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGtpApStatusReqMsgT_v02, gtpApPcid64) - QMI_IDL_OFFSET8(qmiLocGtpApStatusReqMsgT_v02, gtpApPcid64_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGtpApStatusReqMsgT_v02, gtpApPcid64),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGtpApStatusReqMsgT_v02, oemId) - QMI_IDL_OFFSET8(qmiLocGtpApStatusReqMsgT_v02, oemId_valid)),
+ 0x11,
+ 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(qmiLocGtpApStatusReqMsgT_v02, oemId),
+ ((QMI_LOC_MAX_OEM_ID_LEN_V02) & 0xFF), ((QMI_LOC_MAX_OEM_ID_LEN_V02) >> 8),
+ QMI_IDL_OFFSET8(qmiLocGtpApStatusReqMsgT_v02, oemId) - QMI_IDL_OFFSET8(qmiLocGtpApStatusReqMsgT_v02, oemId_len),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocGtpApStatusReqMsgT_v02, modelId) - QMI_IDL_OFFSET16RELATIVE(qmiLocGtpApStatusReqMsgT_v02, modelId_valid)),
+ 0x12,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_SZ_IS_16 | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocGtpApStatusReqMsgT_v02, modelId),
+ ((QMI_LOC_MAX_MODEL_ID_LEN_V02) & 0xFF), ((QMI_LOC_MAX_MODEL_ID_LEN_V02) >> 8),
+ QMI_IDL_OFFSET16RELATIVE(qmiLocGtpApStatusReqMsgT_v02, modelId) - QMI_IDL_OFFSET16RELATIVE(qmiLocGtpApStatusReqMsgT_v02, modelId_len)
+};
+
+static const uint8_t qmiLocGtpApStatusIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGtpApStatusIndMsgT_v02, status),
+
+ 0x02,
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGtpApStatusIndMsgT_v02, clientSoftwareVersion),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocGtpApStatusIndMsgT_v02, asnVersion),
+ QMI_IDL_TYPE88(0, 63)
+};
+
+static const uint8_t qmiLocGdtDownloadBeginStatusReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadBeginStatusReqMsgT_v02, serviceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadBeginStatusReqMsgT_v02, sessionId),
+
+ 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadBeginStatusReqMsgT_v02, processingStatus),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGdtDownloadBeginStatusReqMsgT_v02, wwanDownloadFlag) - QMI_IDL_OFFSET8(qmiLocGdtDownloadBeginStatusReqMsgT_v02, wwanDownloadFlag_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadBeginStatusReqMsgT_v02, wwanDownloadFlag),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGdtDownloadBeginStatusReqMsgT_v02, respLocInfo) - QMI_IDL_OFFSET8(qmiLocGdtDownloadBeginStatusReqMsgT_v02, respLocInfo_valid)),
+ 0x11,
+ 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(qmiLocGdtDownloadBeginStatusReqMsgT_v02, respLocInfo),
+ ((QMI_LOC_MAX_GTP_RLI_LEN_V02) & 0xFF), ((QMI_LOC_MAX_GTP_RLI_LEN_V02) >> 8),
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadBeginStatusReqMsgT_v02, respLocInfo) - QMI_IDL_OFFSET8(qmiLocGdtDownloadBeginStatusReqMsgT_v02, respLocInfo_len),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocGdtDownloadBeginStatusReqMsgT_v02, apRemainingThrottleTime) - QMI_IDL_OFFSET16RELATIVE(qmiLocGdtDownloadBeginStatusReqMsgT_v02, apRemainingThrottleTime_valid)),
+ 0x12,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocGdtDownloadBeginStatusReqMsgT_v02, apRemainingThrottleTime)
+};
+
+static const uint8_t qmiLocGdtDownloadBeginStatusIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadBeginStatusIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGdtDownloadReadyStatusReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadReadyStatusReqMsgT_v02, serviceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadReadyStatusReqMsgT_v02, sessionId),
+
+ 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadReadyStatusReqMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x04,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadReadyStatusReqMsgT_v02, filePath),
+ QMI_LOC_MAX_GDT_PATH_LEN_V02,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadReadyStatusReqMsgT_v02, filePath) - QMI_IDL_OFFSET8(qmiLocGdtDownloadReadyStatusReqMsgT_v02, filePath_len)
+};
+
+static const uint8_t qmiLocGdtDownloadReadyStatusIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadReadyStatusIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGdtReceiveDoneStatusReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtReceiveDoneStatusReqMsgT_v02, serviceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtReceiveDoneStatusReqMsgT_v02, sessionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtReceiveDoneStatusReqMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGdtReceiveDoneStatusIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtReceiveDoneStatusIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGdtDownloadEndStatusReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadEndStatusReqMsgT_v02, serviceId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadEndStatusReqMsgT_v02, sessionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadEndStatusReqMsgT_v02, status)
+};
+
+static const uint8_t qmiLocGdtDownloadEndStatusIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGdtDownloadEndStatusIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocStartDbtReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartDbtReqMsgT_v02, reqId),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartDbtReqMsgT_v02, minDistance),
+
+ 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartDbtReqMsgT_v02, distanceType),
+
+ 0x04,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartDbtReqMsgT_v02, needOriginLocation),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartDbtReqMsgT_v02, maxLatency) - QMI_IDL_OFFSET8(qmiLocStartDbtReqMsgT_v02, maxLatency_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartDbtReqMsgT_v02, maxLatency),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartDbtReqMsgT_v02, usageType) - QMI_IDL_OFFSET8(qmiLocStartDbtReqMsgT_v02, usageType_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartDbtReqMsgT_v02, usageType)
+};
+
+static const uint8_t qmiLocStartDbtIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartDbtIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartDbtIndMsgT_v02, reqId) - QMI_IDL_OFFSET8(qmiLocStartDbtIndMsgT_v02, reqId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStartDbtIndMsgT_v02, reqId)
+};
+
+static const uint8_t qmiLocStopDbtReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStopDbtReqMsgT_v02, reqId)
+};
+
+static const uint8_t qmiLocStopDbtIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStopDbtIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStopDbtIndMsgT_v02, reqId) - QMI_IDL_OFFSET8(qmiLocStopDbtIndMsgT_v02, reqId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocStopDbtIndMsgT_v02, reqId)
+};
+
+static const uint8_t qmiLocEventDbtPositionReportIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, reqId),
+
+ 0x02,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, dbtPosition),
+ QMI_IDL_TYPE88(0, 64),
+
+ 0x03,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, positionType),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, headingUnc) - QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, headingUnc_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, headingUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, speedUnc) - QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, speedUnc_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, speedUnc),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, horConfidence) - QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, horConfidence_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, horConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, vertConfidence) - QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, vertConfidence_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, vertConfidence),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, DOP) - QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, DOP_valid)),
+ 0x14,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, DOP),
+ QMI_IDL_TYPE88(0, 2),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, gnssSvUsedList) - QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, gnssSvUsedList_valid)),
+ 0x15,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, gnssSvUsedList),
+ QMI_LOC_MAX_SV_USED_LIST_LENGTH_V02,
+ QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, gnssSvUsedList) - QMI_IDL_OFFSET8(qmiLocEventDbtPositionReportIndMsgT_v02, gnssSvUsedList_len),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventDbtPositionReportIndMsgT_v02, positionSrc) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventDbtPositionReportIndMsgT_v02, positionSrc_valid)),
+ 0x16,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocEventDbtPositionReportIndMsgT_v02, positionSrc)
+};
+
+static const uint8_t qmiLocEventDbtSessionStatusIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventDbtSessionStatusIndMsgT_v02, dbtSessionStatus),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventDbtSessionStatusIndMsgT_v02, reqId) - QMI_IDL_OFFSET8(qmiLocEventDbtSessionStatusIndMsgT_v02, reqId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventDbtSessionStatusIndMsgT_v02, reqId)
+};
+
+static const uint8_t qmiLocSecureGetAvailablePositionReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSecureGetAvailablePositionReqMsgT_v02, secureLocDataMode),
+
+ 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(qmiLocSecureGetAvailablePositionReqMsgT_v02, qmilocSecureGetAvailablePositionRequestData),
+ ((QMI_LOC_SECURE_GET_AVAILABLE_POS_REQUEST_ENCRYPTED_MAX_V02) & 0xFF), ((QMI_LOC_SECURE_GET_AVAILABLE_POS_REQUEST_ENCRYPTED_MAX_V02) >> 8),
+ QMI_IDL_OFFSET8(qmiLocSecureGetAvailablePositionReqMsgT_v02, qmilocSecureGetAvailablePositionRequestData) - QMI_IDL_OFFSET8(qmiLocSecureGetAvailablePositionReqMsgT_v02, qmilocSecureGetAvailablePositionRequestData_len)
+};
+
+static const uint8_t qmiLocSecureGetAvailablePositionIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSecureGetAvailablePositionIndMsgT_v02, sessionStatus),
+
+ 0x02,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocSecureGetAvailablePositionIndMsgT_v02, secureLocDataMode),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSecureGetAvailablePositionIndMsgT_v02, qmilocSecureGetAvailablePositionInd) - QMI_IDL_OFFSET8(qmiLocSecureGetAvailablePositionIndMsgT_v02, qmilocSecureGetAvailablePositionInd_valid)),
+ 0x10,
+ 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(qmiLocSecureGetAvailablePositionIndMsgT_v02, qmilocSecureGetAvailablePositionInd),
+ ((QMI_LOC_SECURE_GET_AVAILABLE_POSITION_IND_ENCRYPTED_MAX_V02) & 0xFF), ((QMI_LOC_SECURE_GET_AVAILABLE_POSITION_IND_ENCRYPTED_MAX_V02) >> 8),
+ QMI_IDL_OFFSET8(qmiLocSecureGetAvailablePositionIndMsgT_v02, qmilocSecureGetAvailablePositionInd) - QMI_IDL_OFFSET8(qmiLocSecureGetAvailablePositionIndMsgT_v02, qmilocSecureGetAvailablePositionInd_len)
+};
+
+static const uint8_t qmiLocInjectApCacheDataReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataReqMsgT_v02, versionNumber),
+
+ 0x02,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataReqMsgT_v02, partNumber),
+
+ 0x03,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataReqMsgT_v02, totalParts),
+
+ 0x04,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataReqMsgT_v02, apCacheData),
+ QMI_LOC_APCACHE_DATA_MAX_SAMPLES_V02,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataReqMsgT_v02, apCacheData) - QMI_IDL_OFFSET8(qmiLocInjectApCacheDataReqMsgT_v02, apCacheData_len),
+ QMI_IDL_TYPE88(0, 65),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectApCacheDataReqMsgT_v02, apCacheHepeRelData) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectApCacheDataReqMsgT_v02, apCacheHepeRelData_valid)),
+ 0x10,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectApCacheDataReqMsgT_v02, apCacheHepeRelData),
+ QMI_LOC_APCACHE_DATA_MAX_SAMPLES_V02,
+ QMI_IDL_OFFSET16RELATIVE(qmiLocInjectApCacheDataReqMsgT_v02, apCacheHepeRelData) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectApCacheDataReqMsgT_v02, apCacheHepeRelData_len),
+ QMI_IDL_TYPE88(0, 66)
+};
+
+static const uint8_t qmiLocInjectApCacheDataIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apCacheSize) - QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apCacheSize_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apCacheSize),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apDoNotCacheSize) - QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apDoNotCacheSize_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apDoNotCacheSize),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apCacheHits) - QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apCacheHits_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apCacheHits),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apDoNotCacheHits) - QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apDoNotCacheHits_valid)),
+ 0x13,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, apDoNotCacheHits),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, unknownAps) - QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, unknownAps_valid)),
+ 0x14,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, unknownAps),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, asyncScans) - QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, asyncScans_valid)),
+ 0x15,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, asyncScans),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, asyncFixes) - QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, asyncFixes_valid)),
+ 0x16,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, asyncFixes),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, syncScans) - QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, syncScans_valid)),
+ 0x17,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, syncScans),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, syncFixes) - QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, syncFixes_valid)),
+ 0x18,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApCacheDataIndMsgT_v02, syncFixes)
+};
+
+static const uint8_t qmiLocInjectApDoNotCacheDataReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApDoNotCacheDataReqMsgT_v02, versionNumber),
+
+ 0x02,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApDoNotCacheDataReqMsgT_v02, partNumber),
+
+ 0x03,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApDoNotCacheDataReqMsgT_v02, totalParts),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x04,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocInjectApDoNotCacheDataReqMsgT_v02, apDoNotCacheData),
+ QMI_LOC_APCACHE_DATA_MAX_SAMPLES_V02,
+ QMI_IDL_OFFSET8(qmiLocInjectApDoNotCacheDataReqMsgT_v02, apDoNotCacheData) - QMI_IDL_OFFSET8(qmiLocInjectApDoNotCacheDataReqMsgT_v02, apDoNotCacheData_len),
+ QMI_IDL_TYPE88(0, 67)
+};
+
+static const uint8_t qmiLocInjectApDoNotCacheDataIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectApDoNotCacheDataIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocEventBatchingStatusIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocEventBatchingStatusIndMsgT_v02, batchingStatus)
+};
+
+static const uint8_t qmiLocQueryAonConfigReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryAonConfigReqMsgT_v02, transactionId)
+};
+
+static const uint8_t qmiLocQueryAonConfigIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryAonConfigIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocQueryAonConfigIndMsgT_v02, transactionId) - QMI_IDL_OFFSET8(qmiLocQueryAonConfigIndMsgT_v02, transactionId_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryAonConfigIndMsgT_v02, transactionId),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocQueryAonConfigIndMsgT_v02, aonCapability) - QMI_IDL_OFFSET8(qmiLocQueryAonConfigIndMsgT_v02, aonCapability_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocQueryAonConfigIndMsgT_v02, aonCapability)
+};
+
+static const uint8_t qmiLocDeleteGNSSServiceDataReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteAllFlag),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteClockInfoMask) - QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteClockInfoMask_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteClockInfoMask),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteCellDbDataMask) - QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteCellDbDataMask_valid)),
+ 0x11,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteCellDbDataMask),
+
+ QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteCommonDataMask) - QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteCommonDataMask_valid)),
+ 0x12,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteCommonDataMask),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteSatelliteData) - QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteSatelliteData_valid)),
+ 0x13,
+ QMI_IDL_AGGREGATE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataReqMsgT_v02, deleteSatelliteData),
+ QMI_IDL_TYPE88(0, 68)
+};
+
+static const uint8_t qmiLocDeleteGNSSServiceDataIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocDeleteGNSSServiceDataIndMsgT_v02, status)
+};
+
+static const uint8_t qmiLocInjectXtraDataReqMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectXtraDataReqMsgT_v02, totalSize),
+
+ 0x02,
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectXtraDataReqMsgT_v02, totalParts),
+
+ 0x03,
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectXtraDataReqMsgT_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(qmiLocInjectXtraDataReqMsgT_v02, partData),
+ ((QMI_LOC_MAX_XTRA_PART_LEN_V02) & 0xFF), ((QMI_LOC_MAX_XTRA_PART_LEN_V02) >> 8),
+ QMI_IDL_OFFSET8(qmiLocInjectXtraDataReqMsgT_v02, partData) - QMI_IDL_OFFSET8(qmiLocInjectXtraDataReqMsgT_v02, partData_len),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectXtraDataReqMsgT_v02, formatType) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectXtraDataReqMsgT_v02, formatType_valid)),
+ 0x10,
+ QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET16ARRAY(qmiLocInjectXtraDataReqMsgT_v02, formatType)
+};
+
+static const uint8_t qmiLocInjectXtraDataIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectXtraDataIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectXtraDataIndMsgT_v02, partNum) - QMI_IDL_OFFSET8(qmiLocInjectXtraDataIndMsgT_v02, partNum_valid)),
+ 0x10,
+ QMI_IDL_GENERIC_2_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectXtraDataIndMsgT_v02, partNum)
+};
+
+static const uint8_t qmiLocInjectXtraPcidReqMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_8_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectXtraPcidReqMsgT_v02, xtraPcid)
+};
+
+static const uint8_t qmiLocInjectXtraPcidIndMsgT_data_v02[] = {
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocInjectXtraPcidIndMsgT_v02, status)
+};
+
+/*
+ * qmiLocGetSupportedFeatureReqMsgT is empty
+ * static const uint8_t qmiLocGetSupportedFeatureReqMsgT_data_v02[] = {
+ * };
+ */
+
+static const uint8_t qmiLocGetSupportedFeatureIndMsgT_data_v02[] = {
+ 0x01,
+ QMI_IDL_GENERIC_4_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSupportedFeatureIndMsgT_v02, status),
+
+ QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+ QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_GENERIC_1_BYTE,
+ QMI_IDL_OFFSET8(qmiLocGetSupportedFeatureIndMsgT_v02, feature),
+ QMI_LOC_SUPPORTED_FEATURE_LENGTH_V02,
+ QMI_IDL_OFFSET8(qmiLocGetSupportedFeatureIndMsgT_v02, feature) - QMI_IDL_OFFSET8(qmiLocGetSupportedFeatureIndMsgT_v02, feature_len)
+};
+
+/* Type Table */
+static const qmi_idl_type_table_entry loc_type_table_v02[] = {
+ {sizeof(qmiLocApplicationIdStructT_v02), qmiLocApplicationIdStructT_data_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(qmiLocNiSuplVer2ExtStructT_v02), qmiLocNiSuplVer2ExtStructT_data_v02},
+ {sizeof(qmiLocEmergencyNotificationStructT_v02), qmiLocEmergencyNotificationStructT_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(qmiLocGeofencePositionStructT_v02), qmiLocGeofencePositionStructT_data_v02},
+ {sizeof(qmiLocGeofenceIdContinuousStructT_v02), qmiLocGeofenceIdContinuousStructT_data_v02},
+ {sizeof(qmiLocPredictedOrbitsDataValidityStructT_v02), qmiLocPredictedOrbitsDataValidityStructT_data_v02},
+ {sizeof(qmiLocAltitudeSrcInfoStructT_v02), qmiLocAltitudeSrcInfoStructT_data_v02},
+ {sizeof(qmiLocDeleteSvInfoStructT_v02), qmiLocDeleteSvInfoStructT_data_v02},
+ {sizeof(qmiLocDeleteBDSSvInfoStructT_v02), qmiLocDeleteBDSSvInfoStructT_data_v02},
+ {sizeof(qmiLocDeleteGALSvInfoStructT_v02), qmiLocDeleteGALSvInfoStructT_data_v02},
+ {sizeof(qmiLocWifiFixTimeStructT_v02), qmiLocWifiFixTimeStructT_data_v02},
+ {sizeof(qmiLocWifiFixPosStructT_v02), qmiLocWifiFixPosStructT_data_v02},
+ {sizeof(qmiLocWifiApInfoStructT_v02), qmiLocWifiApInfoStructT_data_v02},
+ {sizeof(qmiLocWifiApSsidStructT_v02), qmiLocWifiApSsidStructT_data_v02},
+ {sizeof(qmiLoc3AxisSensorSampleStructT_v02), qmiLoc3AxisSensorSampleStructT_data_v02},
+ {sizeof(qmiLoc3AxisSensorSampleListStructT_v02), qmiLoc3AxisSensorSampleListStructT_data_v02},
+ {sizeof(qmiLocSensorTemperatureSampleStructT_v02), qmiLocSensorTemperatureSampleStructT_data_v02},
+ {sizeof(qmiLocSensorTemperatureSampleListStructT_v02), qmiLocSensorTemperatureSampleListStructT_data_v02},
+ {sizeof(qmiLocApnProfilesStructT_v02), qmiLocApnProfilesStructT_data_v02},
+ {sizeof(qmiLocCircularGeofenceArgsStructT_v02), qmiLocCircularGeofenceArgsStructT_data_v02},
+ {sizeof(qmiLocGeofenceMotionStateConfigStructT_v02), qmiLocGeofenceMotionStateConfigStructT_data_v02},
+ {sizeof(qmiLocTimeZoneStructT_v02), qmiLocTimeZoneStructT_data_v02},
+ {sizeof(qmiLocMotionDataStructT_v02), qmiLocMotionDataStructT_data_v02},
+ {sizeof(qmiLocGSMCellIdStructT_v02), qmiLocGSMCellIdStructT_data_v02},
+ {sizeof(qmiLocWCDMACellIdStructT_v02), qmiLocWCDMACellIdStructT_data_v02},
+ {sizeof(qmiLocTDSCDMACellIdStructT_v02), qmiLocTDSCDMACellIdStructT_data_v02},
+ {sizeof(qmiLocBatchedReportStructT_v02), qmiLocBatchedReportStructT_data_v02},
+ {sizeof(qmiLocWifiApDataStructT_v02), qmiLocWifiApDataStructT_data_v02},
+ {sizeof(qmiLocWifiApAdditionalDataStructT_v02), qmiLocWifiApAdditionalDataStructT_data_v02},
+ {sizeof(qmiLocVehicleSensorSampleStructT_v02), qmiLocVehicleSensorSampleStructT_data_v02},
+ {sizeof(qmiLocVehicleSensorSampleListStructType_v02), qmiLocVehicleSensorSampleListStructType_data_v02},
+ {sizeof(qmiLocVehicleOdometrySampleStructT_v02), qmiLocVehicleOdometrySampleStructT_data_v02},
+ {sizeof(qmiLocVehicleOdometrySampleListStructT_v02), qmiLocVehicleOdometrySampleListStructT_data_v02},
+ {sizeof(qmiLocRcvrClockFrequencyInfoStructT_v02), qmiLocRcvrClockFrequencyInfoStructT_data_v02},
+ {sizeof(qmiLocLeapSecondInfoStructT_v02), qmiLocLeapSecondInfoStructT_data_v02},
+ {sizeof(qmiLocInterSystemBiasStructT_v02), qmiLocInterSystemBiasStructT_data_v02},
+ {sizeof(qmiLocGnssTimeStructT_v02), qmiLocGnssTimeStructT_data_v02},
+ {sizeof(qmiLocGloTimeStructT_v02), qmiLocGloTimeStructT_data_v02},
+ {sizeof(qmiLocGnssTimeExtStructT_v02), qmiLocGnssTimeExtStructT_data_v02},
+ {sizeof(qmiLocSVTimeSpeedStructT_v02), qmiLocSVTimeSpeedStructT_data_v02},
+ {sizeof(qmiLocSVMeasurementStructT_v02), qmiLocSVMeasurementStructT_data_v02},
+ {sizeof(qmiLocWifiApMacAddressStructT_v02), qmiLocWifiApMacAddressStructT_data_v02},
+ {sizeof(qmiLocIBeaconIdStructT_v02), qmiLocIBeaconIdStructT_data_v02},
+ {sizeof(qmiLocGtpAsnVerStructT_v02), qmiLocGtpAsnVerStructT_data_v02},
+ {sizeof(qmiLocDbtPositionStructT_v02), qmiLocDbtPositionStructT_data_v02},
+ {sizeof(qmiLocApCacheStructT_v02), qmiLocApCacheStructT_data_v02},
+ {sizeof(qmiLocApCacheHepeRelStructT_v02), qmiLocApCacheHepeRelStructT_data_v02},
+ {sizeof(qmiLocApDoNotCacheStructT_v02), qmiLocApDoNotCacheStructT_data_v02},
+ {sizeof(qmiLocDeleteSatelliteDataStructT_v02), qmiLocDeleteSatelliteDataStructT_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},
+ {sizeof(qmiLocEventNiGeofenceNotificationIndMsgT_v02), qmiLocEventNiGeofenceNotificationIndMsgT_data_v02},
+ {sizeof(qmiLocEventGeofenceGenAlertIndMsgT_v02), qmiLocEventGeofenceGenAlertIndMsgT_data_v02},
+ {sizeof(qmiLocEventGeofenceBreachIndMsgT_v02), qmiLocEventGeofenceBreachIndMsgT_data_v02},
+ {sizeof(qmiLocEventPedometerControlIndMsgT_v02), qmiLocEventPedometerControlIndMsgT_data_v02},
+ {sizeof(qmiLocEventMotionDataControlIndMsgT_v02), qmiLocEventMotionDataControlIndMsgT_data_v02},
+ {sizeof(qmiLocEventGeofenceBatchedBreachIndMsgT_v02), qmiLocEventGeofenceBatchedBreachIndMsgT_data_v02},
+ {sizeof(qmiLocEventGeofenceProximityIndMsgT_v02), qmiLocEventGeofenceProximityIndMsgT_data_v02},
+ {sizeof(qmiLocEventGeofenceBatchedDwellIndMsgT_v02), qmiLocEventGeofenceBatchedDwellIndMsgT_data_v02},
+ {sizeof(qmiLocEventGdtUploadBeginStatusReqIndMsgT_v02), qmiLocEventGdtUploadBeginStatusReqIndMsgT_data_v02},
+ {sizeof(qmiLocEventGdtUploadEndReqIndMsgT_v02), qmiLocEventGdtUploadEndReqIndMsgT_data_v02},
+ {sizeof(qmiLocEventGdtDownloadBeginReqIndMsgT_v02), qmiLocEventGdtDownloadBeginReqIndMsgT_data_v02},
+ {sizeof(qmiLocEventGdtReceiveDoneIndMsgT_v02), qmiLocEventGdtReceiveDoneIndMsgT_data_v02},
+ {sizeof(qmiLocEventGdtDownloadEndReqIndMsgT_v02), qmiLocEventGdtDownloadEndReqIndMsgT_data_v02},
+ {sizeof(qmiLocGetServiceRevisionReqMsgT_v02), 0},
+ {sizeof(qmiLocGetServiceRevisionIndMsgT_v02), qmiLocGetServiceRevisionIndMsgT_data_v02},
+ {sizeof(qmiLocGetFixCriteriaReqMsgT_v02), 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},
+ {sizeof(qmiLocGetPredictedOrbitsDataSourceReqMsgT_v02), 0},
+ {sizeof(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02), qmiLocGetPredictedOrbitsDataSourceIndMsgT_data_v02},
+ {sizeof(qmiLocGetPredictedOrbitsDataValidityReqMsgT_v02), 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},
+ {sizeof(qmiLocGetEngineLockReqMsgT_v02), 0},
+ {sizeof(qmiLocGetEngineLockIndMsgT_v02), qmiLocGetEngineLockIndMsgT_data_v02},
+ {sizeof(qmiLocSetSbasConfigReqMsgT_v02), qmiLocSetSbasConfigReqMsgT_data_v02},
+ {sizeof(qmiLocSetSbasConfigIndMsgT_v02), qmiLocSetSbasConfigIndMsgT_data_v02},
+ {sizeof(qmiLocGetSbasConfigReqMsgT_v02), 0},
+ {sizeof(qmiLocGetSbasConfigIndMsgT_v02), qmiLocGetSbasConfigIndMsgT_data_v02},
+ {sizeof(qmiLocSetNmeaTypesReqMsgT_v02), qmiLocSetNmeaTypesReqMsgT_data_v02},
+ {sizeof(qmiLocSetNmeaTypesIndMsgT_v02), qmiLocSetNmeaTypesIndMsgT_data_v02},
+ {sizeof(qmiLocGetNmeaTypesReqMsgT_v02), 0},
+ {sizeof(qmiLocGetNmeaTypesIndMsgT_v02), qmiLocGetNmeaTypesIndMsgT_data_v02},
+ {sizeof(qmiLocSetLowPowerModeReqMsgT_v02), qmiLocSetLowPowerModeReqMsgT_data_v02},
+ {sizeof(qmiLocSetLowPowerModeIndMsgT_v02), qmiLocSetLowPowerModeIndMsgT_data_v02},
+ {sizeof(qmiLocGetLowPowerModeReqMsgT_v02), 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},
+ {sizeof(qmiLocGetXtraTSessionControlReqMsgT_v02), 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},
+ {sizeof(qmiLocGetRegisteredEventsReqMsgT_v02), 0},
+ {sizeof(qmiLocGetRegisteredEventsIndMsgT_v02), qmiLocGetRegisteredEventsIndMsgT_data_v02},
+ {sizeof(qmiLocSetOperationModeReqMsgT_v02), qmiLocSetOperationModeReqMsgT_data_v02},
+ {sizeof(qmiLocSetOperationModeIndMsgT_v02), qmiLocSetOperationModeIndMsgT_data_v02},
+ {sizeof(qmiLocGetOperationModeReqMsgT_v02), 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},
+ {sizeof(qmiLocGetCradleMountConfigReqMsgT_v02), 0},
+ {sizeof(qmiLocGetCradleMountConfigIndMsgT_v02), qmiLocGetCradleMountConfigIndMsgT_data_v02},
+ {sizeof(qmiLocSetCradleMountConfigReqMsgT_v02), qmiLocSetCradleMountConfigReqMsgT_data_v02},
+ {sizeof(qmiLocSetCradleMountConfigIndMsgT_v02), qmiLocSetCradleMountConfigIndMsgT_data_v02},
+ {sizeof(qmiLocGetExternalPowerConfigReqMsgT_v02), 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},
+ {sizeof(qmiLocGetSensorControlConfigReqMsgT_v02), 0},
+ {sizeof(qmiLocGetSensorControlConfigIndMsgT_v02), qmiLocGetSensorControlConfigIndMsgT_data_v02},
+ {sizeof(qmiLocSetSensorPropertiesReqMsgT_v02), qmiLocSetSensorPropertiesReqMsgT_data_v02},
+ {sizeof(qmiLocSetSensorPropertiesIndMsgT_v02), qmiLocSetSensorPropertiesIndMsgT_data_v02},
+ {sizeof(qmiLocGetSensorPropertiesReqMsgT_v02), qmiLocGetSensorPropertiesReqMsgT_data_v02},
+ {sizeof(qmiLocGetSensorPropertiesIndMsgT_v02), qmiLocGetSensorPropertiesIndMsgT_data_v02},
+ {sizeof(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02), qmiLocSetSensorPerformanceControlConfigReqMsgT_data_v02},
+ {sizeof(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02), qmiLocSetSensorPerformanceControlConfigIndMsgT_data_v02},
+ {sizeof(qmiLocGetSensorPerformanceControlConfigReqMsgT_v02), 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},
+ {sizeof(qmiLocAddCircularGeofenceReqMsgT_v02), qmiLocAddCircularGeofenceReqMsgT_data_v02},
+ {sizeof(qmiLocAddCircularGeofenceIndMsgT_v02), qmiLocAddCircularGeofenceIndMsgT_data_v02},
+ {sizeof(qmiLocDeleteGeofenceReqMsgT_v02), qmiLocDeleteGeofenceReqMsgT_data_v02},
+ {sizeof(qmiLocDeleteGeofenceIndMsgT_v02), qmiLocDeleteGeofenceIndMsgT_data_v02},
+ {sizeof(qmiLocQueryGeofenceReqMsgT_v02), qmiLocQueryGeofenceReqMsgT_data_v02},
+ {sizeof(qmiLocQueryGeofenceIndMsgT_v02), qmiLocQueryGeofenceIndMsgT_data_v02},
+ {sizeof(qmiLocSetGeofenceEngineConfigReqMsgT_v02), qmiLocSetGeofenceEngineConfigReqMsgT_data_v02},
+ {sizeof(qmiLocSetGeofenceEngineConfigIndMsgT_v02), qmiLocSetGeofenceEngineConfigIndMsgT_data_v02},
+ {sizeof(qmiLocGetGeofenceEngineConfigReqMsgT_v02), qmiLocGetGeofenceEngineConfigReqMsgT_data_v02},
+ {sizeof(qmiLocGetGeofenceEngineConfigIndMsgT_v02), qmiLocGetGeofenceEngineConfigIndMsgT_data_v02},
+ {sizeof(qmiLocEditGeofenceReqMsgT_v02), qmiLocEditGeofenceReqMsgT_data_v02},
+ {sizeof(qmiLocEditGeofenceIndMsgT_v02), qmiLocEditGeofenceIndMsgT_data_v02},
+ {sizeof(qmiLocEventGetTimeZoneReqIndMsgT_v02), qmiLocEventGetTimeZoneReqIndMsgT_data_v02},
+ {sizeof(qmiLocInjectTimeZoneInfoReqMsgT_v02), qmiLocInjectTimeZoneInfoReqMsgT_data_v02},
+ {sizeof(qmiLocInjectTimeZoneInfoIndMsgT_v02), qmiLocInjectTimeZoneInfoIndMsgT_data_v02},
+ {sizeof(qmiLocGetBestAvailablePositionReqMsgT_v02), qmiLocGetBestAvailablePositionReqMsgT_data_v02},
+ {sizeof(qmiLocGetBestAvailablePositionIndMsgT_v02), qmiLocGetBestAvailablePositionIndMsgT_data_v02},
+ {sizeof(qmiLocInjectMotionDataReqMsgT_v02), qmiLocInjectMotionDataReqMsgT_data_v02},
+ {sizeof(qmiLocInjectMotionDataIndMsgT_v02), qmiLocInjectMotionDataIndMsgT_data_v02},
+ {sizeof(qmiLocGetNiGeofenceIdListReqMsgT_v02), qmiLocGetNiGeofenceIdListReqMsgT_data_v02},
+ {sizeof(qmiLocGetNiGeofenceIdListIndMsgT_v02), qmiLocGetNiGeofenceIdListIndMsgT_data_v02},
+ {sizeof(qmiLocInjectGSMCellInfoReqMsgT_v02), qmiLocInjectGSMCellInfoReqMsgT_data_v02},
+ {sizeof(qmiLocInjectGSMCellInfoIndMsgT_v02), qmiLocInjectGSMCellInfoIndMsgT_data_v02},
+ {sizeof(qmiLocInjectWCDMACellInfoReqMsgT_v02), qmiLocInjectWCDMACellInfoReqMsgT_data_v02},
+ {sizeof(qmiLocInjectWCDMACellInfoIndMsgT_v02), qmiLocInjectWCDMACellInfoIndMsgT_data_v02},
+ {sizeof(qmiLocInjectTDSCDMACellInfoReqMsgT_v02), qmiLocInjectTDSCDMACellInfoReqMsgT_data_v02},
+ {sizeof(qmiLocInjectTDSCDMACellInfoIndMsgT_v02), qmiLocInjectTDSCDMACellInfoIndMsgT_data_v02},
+ {sizeof(qmiLocInjectSubscriberIDReqMsgT_v02), qmiLocInjectSubscriberIDReqMsgT_data_v02},
+ {sizeof(qmiLocInjectSubscriberIDIndMsgT_v02), qmiLocInjectSubscriberIDIndMsgT_data_v02},
+ {sizeof(qmiLocInjectNetworkInitiatedMessageReqMsgT_v02), qmiLocInjectNetworkInitiatedMessageReqMsgT_data_v02},
+ {sizeof(qmiLocInjectNetworkInitiatedMessageIndMsgT_v02), qmiLocInjectNetworkInitiatedMessageIndMsgT_data_v02},
+ {sizeof(qmiLocWWANOutOfServiceNotificationReqMsgT_v02), 0},
+ {sizeof(qmiLocWWANOutOfServiceNotificationIndMsgT_v02), qmiLocWWANOutOfServiceNotificationIndMsgT_data_v02},
+ {sizeof(qmiLocPedometerReportReqMsgT_v02), qmiLocPedometerReportReqMsgT_data_v02},
+ {sizeof(qmiLocPedometerReportIndMsgT_v02), qmiLocPedometerReportIndMsgT_data_v02},
+ {sizeof(qmiLocGetBatchSizeReqMsgT_v02), qmiLocGetBatchSizeReqMsgT_data_v02},
+ {sizeof(qmiLocGetBatchSizeIndMsgT_v02), qmiLocGetBatchSizeIndMsgT_data_v02},
+ {sizeof(qmiLocStartBatchingReqMsgT_v02), qmiLocStartBatchingReqMsgT_data_v02},
+ {sizeof(qmiLocStartBatchingIndMsgT_v02), qmiLocStartBatchingIndMsgT_data_v02},
+ {sizeof(qmiLocEventBatchFullIndMsgT_v02), qmiLocEventBatchFullIndMsgT_data_v02},
+ {sizeof(qmiLocEventLiveBatchedPositionReportIndMsgT_v02), qmiLocEventLiveBatchedPositionReportIndMsgT_data_v02},
+ {sizeof(qmiLocReadFromBatchReqMsgT_v02), qmiLocReadFromBatchReqMsgT_data_v02},
+ {sizeof(qmiLocReadFromBatchIndMsgT_v02), qmiLocReadFromBatchIndMsgT_data_v02},
+ {sizeof(qmiLocStopBatchingReqMsgT_v02), qmiLocStopBatchingReqMsgT_data_v02},
+ {sizeof(qmiLocStopBatchingIndMsgT_v02), qmiLocStopBatchingIndMsgT_data_v02},
+ {sizeof(qmiLocReleaseBatchReqMsgT_v02), qmiLocReleaseBatchReqMsgT_data_v02},
+ {sizeof(qmiLocReleaseBatchIndMsgT_v02), qmiLocReleaseBatchIndMsgT_data_v02},
+ {sizeof(qmiLocEventInjectWifiApDataReqIndMsgT_v02), qmiLocEventInjectWifiApDataReqIndMsgT_data_v02},
+ {sizeof(qmiLocInjectWifiApDataReqMsgT_v02), qmiLocInjectWifiApDataReqMsgT_data_v02},
+ {sizeof(qmiLocInjectWifiApDataIndMsgT_v02), qmiLocInjectWifiApDataIndMsgT_data_v02},
+ {sizeof(qmiLocNotifyWifiAttachmentStatusReqMsgT_v02), qmiLocNotifyWifiAttachmentStatusReqMsgT_data_v02},
+ {sizeof(qmiLocNotifyWifiAttachmentStatusIndMsgT_v02), qmiLocNotifyWifiAttachmentStatusIndMsgT_data_v02},
+ {sizeof(qmiLocNotifyWifiEnabledStatusReqMsgT_v02), qmiLocNotifyWifiEnabledStatusReqMsgT_data_v02},
+ {sizeof(qmiLocNotifyWifiEnabledStatusIndMsgT_v02), qmiLocNotifyWifiEnabledStatusIndMsgT_data_v02},
+ {sizeof(qmiLocEventVehicleDataReadyIndMsgT_v02), qmiLocEventVehicleDataReadyIndMsgT_data_v02},
+ {sizeof(qmiLocInjectVehicleSensorDataReqMsgT_v02), qmiLocInjectVehicleSensorDataReqMsgT_data_v02},
+ {sizeof(qmiLocInjectVehicleSensorDataIndMsgT_v02), qmiLocInjectVehicleSensorDataIndMsgT_data_v02},
+ {sizeof(qmiLocGetAvailWwanPositionReqMsgT_v02), qmiLocGetAvailWwanPositionReqMsgT_data_v02},
+ {sizeof(qmiLocGetAvailWwanPositionIndMsgT_v02), qmiLocGetAvailWwanPositionIndMsgT_data_v02},
+ {sizeof(qmiLocSetPremiumServicesCfgReqMsgT_v02), qmiLocSetPremiumServicesCfgReqMsgT_data_v02},
+ {sizeof(qmiLocSetPremiumServicesCfgIndMsgT_v02), qmiLocSetPremiumServicesCfgIndMsgT_data_v02},
+ {sizeof(qmiLocSetXtraVersionCheckReqMsgT_v02), qmiLocSetXtraVersionCheckReqMsgT_data_v02},
+ {sizeof(qmiLocSetXtraVersionCheckIndMsgT_v02), qmiLocSetXtraVersionCheckIndMsgT_data_v02},
+ {sizeof(qmiLocSetGNSSConstRepConfigReqMsgT_v02), qmiLocSetGNSSConstRepConfigReqMsgT_data_v02},
+ {sizeof(qmiLocSetGNSSConstRepConfigIndMsgT_v02), qmiLocSetGNSSConstRepConfigIndMsgT_data_v02},
+ {sizeof(qmiLocEventGnssSvMeasInfoIndMsgT_v02), qmiLocEventGnssSvMeasInfoIndMsgT_data_v02},
+ {sizeof(qmiLocEventGnssSvPolyIndMsgT_v02), qmiLocEventGnssSvPolyIndMsgT_data_v02},
+ {sizeof(qmiLocAddGeofenceContextReqMsgT_v02), qmiLocAddGeofenceContextReqMsgT_data_v02},
+ {sizeof(qmiLocAddGeofenceContextIndMsgT_v02), qmiLocAddGeofenceContextIndMsgT_data_v02},
+ {sizeof(qmiLocSetGeofenceEngineContextReqMsgT_v02), qmiLocSetGeofenceEngineContextReqMsgT_data_v02},
+ {sizeof(qmiLocSetGeofenceEngineContextIndMsgT_v02), qmiLocSetGeofenceEngineContextIndMsgT_data_v02},
+ {sizeof(qmiLocDeleteGeofenceContextReqMsgT_v02), qmiLocDeleteGeofenceContextReqMsgT_data_v02},
+ {sizeof(qmiLocDeleteGeofenceContextIndMsgT_v02), qmiLocDeleteGeofenceContextIndMsgT_data_v02},
+ {sizeof(qmiLocInjectGtpClientDownloadedDataReqMsgT_v02), qmiLocInjectGtpClientDownloadedDataReqMsgT_data_v02},
+ {sizeof(qmiLocInjectGtpClientDownloadedDataIndMsgT_v02), qmiLocInjectGtpClientDownloadedDataIndMsgT_data_v02},
+ {sizeof(qmiLocGdtUploadBeginStatusReqMsgT_v02), qmiLocGdtUploadBeginStatusReqMsgT_data_v02},
+ {sizeof(qmiLocGdtUploadBeginStatusIndMsgT_v02), qmiLocGdtUploadBeginStatusIndMsgT_data_v02},
+ {sizeof(qmiLocGdtUploadEndReqMsgT_v02), qmiLocGdtUploadEndReqMsgT_data_v02},
+ {sizeof(qmiLocGdtUploadEndIndMsgT_v02), qmiLocGdtUploadEndIndMsgT_data_v02},
+ {sizeof(qmiLocGtpApStatusReqMsgT_v02), qmiLocGtpApStatusReqMsgT_data_v02},
+ {sizeof(qmiLocGtpApStatusIndMsgT_v02), qmiLocGtpApStatusIndMsgT_data_v02},
+ {sizeof(qmiLocGdtDownloadBeginStatusReqMsgT_v02), qmiLocGdtDownloadBeginStatusReqMsgT_data_v02},
+ {sizeof(qmiLocGdtDownloadBeginStatusIndMsgT_v02), qmiLocGdtDownloadBeginStatusIndMsgT_data_v02},
+ {sizeof(qmiLocGdtDownloadReadyStatusReqMsgT_v02), qmiLocGdtDownloadReadyStatusReqMsgT_data_v02},
+ {sizeof(qmiLocGdtDownloadReadyStatusIndMsgT_v02), qmiLocGdtDownloadReadyStatusIndMsgT_data_v02},
+ {sizeof(qmiLocGdtReceiveDoneStatusReqMsgT_v02), qmiLocGdtReceiveDoneStatusReqMsgT_data_v02},
+ {sizeof(qmiLocGdtReceiveDoneStatusIndMsgT_v02), qmiLocGdtReceiveDoneStatusIndMsgT_data_v02},
+ {sizeof(qmiLocGdtDownloadEndStatusReqMsgT_v02), qmiLocGdtDownloadEndStatusReqMsgT_data_v02},
+ {sizeof(qmiLocGdtDownloadEndStatusIndMsgT_v02), qmiLocGdtDownloadEndStatusIndMsgT_data_v02},
+ {sizeof(qmiLocStartDbtReqMsgT_v02), qmiLocStartDbtReqMsgT_data_v02},
+ {sizeof(qmiLocStartDbtIndMsgT_v02), qmiLocStartDbtIndMsgT_data_v02},
+ {sizeof(qmiLocStopDbtReqMsgT_v02), qmiLocStopDbtReqMsgT_data_v02},
+ {sizeof(qmiLocStopDbtIndMsgT_v02), qmiLocStopDbtIndMsgT_data_v02},
+ {sizeof(qmiLocEventDbtPositionReportIndMsgT_v02), qmiLocEventDbtPositionReportIndMsgT_data_v02},
+ {sizeof(qmiLocEventDbtSessionStatusIndMsgT_v02), qmiLocEventDbtSessionStatusIndMsgT_data_v02},
+ {sizeof(qmiLocSecureGetAvailablePositionReqMsgT_v02), qmiLocSecureGetAvailablePositionReqMsgT_data_v02},
+ {sizeof(qmiLocSecureGetAvailablePositionIndMsgT_v02), qmiLocSecureGetAvailablePositionIndMsgT_data_v02},
+ {sizeof(qmiLocInjectApCacheDataReqMsgT_v02), qmiLocInjectApCacheDataReqMsgT_data_v02},
+ {sizeof(qmiLocInjectApCacheDataIndMsgT_v02), qmiLocInjectApCacheDataIndMsgT_data_v02},
+ {sizeof(qmiLocInjectApDoNotCacheDataReqMsgT_v02), qmiLocInjectApDoNotCacheDataReqMsgT_data_v02},
+ {sizeof(qmiLocInjectApDoNotCacheDataIndMsgT_v02), qmiLocInjectApDoNotCacheDataIndMsgT_data_v02},
+ {sizeof(qmiLocEventBatchingStatusIndMsgT_v02), qmiLocEventBatchingStatusIndMsgT_data_v02},
+ {sizeof(qmiLocQueryAonConfigReqMsgT_v02), qmiLocQueryAonConfigReqMsgT_data_v02},
+ {sizeof(qmiLocQueryAonConfigIndMsgT_v02), qmiLocQueryAonConfigIndMsgT_data_v02},
+ {sizeof(qmiLocDeleteGNSSServiceDataReqMsgT_v02), qmiLocDeleteGNSSServiceDataReqMsgT_data_v02},
+ {sizeof(qmiLocDeleteGNSSServiceDataIndMsgT_v02), qmiLocDeleteGNSSServiceDataIndMsgT_data_v02},
+ {sizeof(qmiLocInjectXtraDataReqMsgT_v02), qmiLocInjectXtraDataReqMsgT_data_v02},
+ {sizeof(qmiLocInjectXtraDataIndMsgT_v02), qmiLocInjectXtraDataIndMsgT_data_v02},
+ {sizeof(qmiLocInjectXtraPcidReqMsgT_v02), qmiLocInjectXtraPcidReqMsgT_data_v02},
+ {sizeof(qmiLocInjectXtraPcidIndMsgT_v02), qmiLocInjectXtraPcidIndMsgT_data_v02},
+ {sizeof(qmiLocGetSupportedFeatureReqMsgT_v02), 0},
+ {sizeof(qmiLocGetSupportedFeatureIndMsgT_v02), qmiLocGetSupportedFeatureIndMsgT_data_v02}
+};
+
+/* Range Table */
+/* No Ranges Defined in IDL */
+
+/* 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,
+ NULL
+};
+
+/*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_GET_SUPPORTED_MSGS_REQ_V02, QMI_IDL_TYPE16(1, 0), 0},
+ {QMI_LOC_GET_SUPPORTED_FIELDS_REQ_V02, QMI_IDL_TYPE16(1, 2), 5},
+ {QMI_LOC_INFORM_CLIENT_REVISION_REQ_V02, QMI_IDL_TYPE16(0, 1), 7},
+ {QMI_LOC_REG_EVENTS_REQ_V02, QMI_IDL_TYPE16(0, 2), 11},
+ {QMI_LOC_START_REQ_V02, QMI_IDL_TYPE16(0, 3), 128},
+ {QMI_LOC_STOP_REQ_V02, QMI_IDL_TYPE16(0, 4), 4},
+ {QMI_LOC_GET_SERVICE_REVISION_REQ_V02, QMI_IDL_TYPE16(0, 32), 0},
+ {QMI_LOC_GET_FIX_CRITERIA_REQ_V02, QMI_IDL_TYPE16(0, 34), 0},
+ {QMI_LOC_NI_USER_RESPONSE_REQ_V02, QMI_IDL_TYPE16(0, 36), 1345},
+ {QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02, QMI_IDL_TYPE16(0, 38), 1053},
+ {QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02, QMI_IDL_TYPE16(0, 40), 0},
+ {QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_REQ_V02, QMI_IDL_TYPE16(0, 42), 0},
+ {QMI_LOC_INJECT_UTC_TIME_REQ_V02, QMI_IDL_TYPE16(0, 44), 18},
+ {QMI_LOC_INJECT_POSITION_REQ_V02, QMI_IDL_TYPE16(0, 46), 127},
+ {QMI_LOC_SET_ENGINE_LOCK_REQ_V02, QMI_IDL_TYPE16(0, 48), 7},
+ {QMI_LOC_GET_ENGINE_LOCK_REQ_V02, QMI_IDL_TYPE16(0, 50), 0},
+ {QMI_LOC_SET_SBAS_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 52), 4},
+ {QMI_LOC_GET_SBAS_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 54), 0},
+ {QMI_LOC_SET_NMEA_TYPES_REQ_V02, QMI_IDL_TYPE16(0, 56), 7},
+ {QMI_LOC_GET_NMEA_TYPES_REQ_V02, QMI_IDL_TYPE16(0, 58), 0},
+ {QMI_LOC_SET_LOW_POWER_MODE_REQ_V02, QMI_IDL_TYPE16(0, 60), 4},
+ {QMI_LOC_GET_LOW_POWER_MODE_REQ_V02, QMI_IDL_TYPE16(0, 62), 0},
+ {QMI_LOC_SET_SERVER_REQ_V02, QMI_IDL_TYPE16(0, 64), 297},
+ {QMI_LOC_GET_SERVER_REQ_V02, QMI_IDL_TYPE16(0, 66), 11},
+ {QMI_LOC_DELETE_ASSIST_DATA_REQ_V02, QMI_IDL_TYPE16(0, 68), 1156},
+ {QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02, QMI_IDL_TYPE16(0, 70), 4},
+ {QMI_LOC_GET_XTRA_T_SESSION_CONTROL_REQ_V02, QMI_IDL_TYPE16(0, 72), 0},
+ {QMI_LOC_INJECT_WIFI_POSITION_REQ_V02, QMI_IDL_TYPE16(0, 74), 2353},
+ {QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 76), 7},
+ {QMI_LOC_GET_REGISTERED_EVENTS_REQ_V02, QMI_IDL_TYPE16(0, 78), 0},
+ {QMI_LOC_SET_OPERATION_MODE_REQ_V02, QMI_IDL_TYPE16(0, 80), 14},
+ {QMI_LOC_GET_OPERATION_MODE_REQ_V02, QMI_IDL_TYPE16(0, 82), 0},
+ {QMI_LOC_SET_SPI_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 84), 8},
+ {QMI_LOC_INJECT_SENSOR_DATA_REQ_V02, QMI_IDL_TYPE16(0, 86), 2779},
+ {QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02, QMI_IDL_TYPE16(0, 88), 21},
+ {QMI_LOC_SET_CRADLE_MOUNT_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 92), 11},
+ {QMI_LOC_GET_CRADLE_MOUNT_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 90), 0},
+ {QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 96), 7},
+ {QMI_LOC_GET_EXTERNAL_POWER_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 94), 0},
+ {QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 98), 129},
+ {QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02, QMI_IDL_TYPE16(0, 100), 79},
+ {QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02, QMI_IDL_TYPE16(0, 102), 11},
+ {QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 104), 14},
+ {QMI_LOC_GET_SENSOR_CONTROL_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 106), 0},
+ {QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02, QMI_IDL_TYPE16(0, 108), 88},
+ {QMI_LOC_GET_SENSOR_PROPERTIES_REQ_V02, QMI_IDL_TYPE16(0, 110), 7},
+ {QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02, QMI_IDL_TYPE16(0, 112), 42},
+ {QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02, QMI_IDL_TYPE16(0, 114), 0},
+ {QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02, QMI_IDL_TYPE16(0, 116), 2009},
+ {QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02, QMI_IDL_TYPE16(0, 118), 4},
+ {QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02, QMI_IDL_TYPE16(0, 120), 16},
+ {QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02, QMI_IDL_TYPE16(0, 122), 7},
+ {QMI_LOC_ADD_CIRCULAR_GEOFENCE_REQ_V02, QMI_IDL_TYPE16(0, 124), 70},
+ {QMI_LOC_DELETE_GEOFENCE_REQ_V02, QMI_IDL_TYPE16(0, 126), 14},
+ {QMI_LOC_QUERY_GEOFENCE_REQ_V02, QMI_IDL_TYPE16(0, 128), 14},
+ {QMI_LOC_EDIT_GEOFENCE_REQ_V02, QMI_IDL_TYPE16(0, 134), 32},
+ {QMI_LOC_GET_BEST_AVAILABLE_POSITION_REQ_V02, QMI_IDL_TYPE16(0, 139), 7},
+ {QMI_LOC_INJECT_MOTION_DATA_REQ_V02, QMI_IDL_TYPE16(0, 141), 19},
+ {QMI_LOC_GET_NI_GEOFENCE_ID_LIST_REQ_V02, QMI_IDL_TYPE16(0, 143), 7},
+ {QMI_LOC_INJECT_GSM_CELL_INFO_REQ_V02, QMI_IDL_TYPE16(0, 145), 30},
+ {QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_REQ_V02, QMI_IDL_TYPE16(0, 153), 1036},
+ {QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_REQ_V02, QMI_IDL_TYPE16(0, 155), 0},
+ {QMI_LOC_PEDOMETER_REPORT_REQ_V02, QMI_IDL_TYPE16(0, 157), 46},
+ {QMI_LOC_INJECT_WCDMA_CELL_INFO_REQ_V02, QMI_IDL_TYPE16(0, 147), 36},
+ {QMI_LOC_INJECT_TDSCDMA_CELL_INFO_REQ_V02, QMI_IDL_TYPE16(0, 149), 33},
+ {QMI_LOC_INJECT_SUBSCRIBER_ID_REQ_V02, QMI_IDL_TYPE16(0, 151), 22},
+ {QMI_LOC_SET_GEOFENCE_ENGINE_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 130), 224},
+ {QMI_LOC_GET_GEOFENCE_ENGINE_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 132), 7},
+ {QMI_LOC_GET_BATCH_SIZE_REQ_V02, QMI_IDL_TYPE16(0, 159), 14},
+ {QMI_LOC_START_BATCHING_REQ_V02, QMI_IDL_TYPE16(0, 161), 39},
+ {QMI_LOC_READ_FROM_BATCH_REQ_V02, QMI_IDL_TYPE16(0, 165), 14},
+ {QMI_LOC_STOP_BATCHING_REQ_V02, QMI_IDL_TYPE16(0, 167), 14},
+ {QMI_LOC_RELEASE_BATCH_REQ_V02, QMI_IDL_TYPE16(0, 169), 7},
+ {QMI_LOC_INJECT_WIFI_AP_DATA_REQ_V02, QMI_IDL_TYPE16(0, 172), 5191},
+ {QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 174), 51},
+ {QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 176), 7},
+ {QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_REQ_V02, QMI_IDL_TYPE16(0, 179), 3360},
+ {QMI_LOC_GET_AVAILABLE_WWAN_POSITION_REQ_V02, QMI_IDL_TYPE16(0, 181), 7},
+ {QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 183), 14},
+ {QMI_LOC_SET_XTRA_VERSION_CHECK_REQ_V02, QMI_IDL_TYPE16(0, 185), 7},
+ {QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_V02, QMI_IDL_TYPE16(0, 187), 22},
+ {QMI_LOC_ADD_GEOFENCE_CONTEXT_REQ_V02, QMI_IDL_TYPE16(0, 191), 2517},
+ {QMI_LOC_SET_GEOFENCE_ENGINE_CONTEXT_REQ_V02, QMI_IDL_TYPE16(0, 193), 25},
+ {QMI_LOC_DELETE_GEOFENCE_CONTEXT_REQ_V02, QMI_IDL_TYPE16(0, 195), 21},
+ {QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_REQ_V02, QMI_IDL_TYPE16(0, 197), 517},
+ {QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 199), 21},
+ {QMI_LOC_GDT_UPLOAD_END_REQ_V02, QMI_IDL_TYPE16(0, 201), 21},
+ {QMI_LOC_START_DBT_REQ_V02, QMI_IDL_TYPE16(0, 213), 36},
+ {QMI_LOC_STOP_DBT_REQ_V02, QMI_IDL_TYPE16(0, 215), 4},
+ {QMI_LOC_SECURE_GET_AVAILABLE_POSITION_REQ_V02, QMI_IDL_TYPE16(0, 219), 268},
+ {QMI_LOC_INJECT_TIME_ZONE_INFO_REQ_V02, QMI_IDL_TYPE16(0, 137), 30},
+ {QMI_LOC_INJECT_APCACHE_DATA_REQ_V02, QMI_IDL_TYPE16(0, 221), 2180},
+ {QMI_LOC_INJECT_APDONOTCACHE_DATA_REQ_V02, QMI_IDL_TYPE16(0, 223), 656},
+ {QMI_LOC_QUERY_AON_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 226), 7},
+ {QMI_LOC_GTP_AP_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 203), 540},
+ {QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 205), 294},
+ {QMI_LOC_GDT_DOWNLOAD_READY_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 207), 280},
+ {QMI_LOC_GDT_RECEIVE_DONE_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 209), 21},
+ {QMI_LOC_GDT_DOWNLOAD_END_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 211), 21},
+ {QMI_LOC_DELETE_GNSS_SERVICE_DATA_REQ_V02, QMI_IDL_TYPE16(0, 228), 36},
+ {QMI_LOC_INJECT_XTRA_DATA_REQ_V02, QMI_IDL_TYPE16(0, 230), 1053},
+ {QMI_LOC_INJECT_XTRA_PCID_REQ_V02, QMI_IDL_TYPE16(0, 232), 11},
+ {QMI_LOC_GET_SUPPORTED_FEATURE_REQ_V02, QMI_IDL_TYPE16(0, 234), 0}
+};
+
+static const qmi_idl_service_message_table_entry loc_service_response_messages_v02[] = {
+ {QMI_LOC_GET_SUPPORTED_MSGS_RESP_V02, QMI_IDL_TYPE16(1, 1), 8204},
+ {QMI_LOC_GET_SUPPORTED_FIELDS_RESP_V02, QMI_IDL_TYPE16(1, 3), 115},
+ {QMI_LOC_INFORM_CLIENT_REVISION_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_REG_EVENTS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_START_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_STOP_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_SERVICE_REVISION_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_FIX_CRITERIA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_NI_USER_RESPONSE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_UTC_TIME_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_POSITION_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_ENGINE_LOCK_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_ENGINE_LOCK_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_SBAS_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_SBAS_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_NMEA_TYPES_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_NMEA_TYPES_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_LOW_POWER_MODE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_LOW_POWER_MODE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_SERVER_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_SERVER_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_DELETE_ASSIST_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_XTRA_T_SESSION_CONTROL_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_XTRA_T_SESSION_CONTROL_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_WIFI_POSITION_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_NOTIFY_WIFI_STATUS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_REGISTERED_EVENTS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_OPERATION_MODE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_OPERATION_MODE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_SPI_STATUS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_SENSOR_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_TIME_SYNC_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_CRADLE_MOUNT_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_CRADLE_MOUNT_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_EXTERNAL_POWER_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_EXTERNAL_POWER_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_SENSOR_CONTROL_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_SENSOR_CONTROL_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_SENSOR_PROPERTIES_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_SENSOR_PROPERTIES_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_SUPL_CERTIFICATE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_DELETE_SUPL_CERTIFICATE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_ADD_CIRCULAR_GEOFENCE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_DELETE_GEOFENCE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_QUERY_GEOFENCE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_EDIT_GEOFENCE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_BEST_AVAILABLE_POSITION_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_MOTION_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_NI_GEOFENCE_ID_LIST_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_GSM_CELL_INFO_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_PEDOMETER_REPORT_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_WCDMA_CELL_INFO_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_TDSCDMA_CELL_INFO_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_SUBSCRIBER_ID_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_GEOFENCE_ENGINE_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_GEOFENCE_ENGINE_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_BATCH_SIZE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_START_BATCHING_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_READ_FROM_BATCH_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_STOP_BATCHING_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_RELEASE_BATCH_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_WIFI_AP_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_AVAILABLE_WWAN_POSITION_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_XTRA_VERSION_CHECK_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_ADD_GEOFENCE_CONTEXT_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SET_GEOFENCE_ENGINE_CONTEXT_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_DELETE_GEOFENCE_CONTEXT_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GDT_UPLOAD_END_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_START_DBT_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_STOP_DBT_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_SECURE_GET_AVAILABLE_POSITION_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_TIME_ZONE_INFO_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_APCACHE_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_APDONOTCACHE_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_QUERY_AON_CONFIG_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GTP_AP_STATUS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GDT_DOWNLOAD_READY_STATUS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GDT_RECEIVE_DONE_STATUS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GDT_DOWNLOAD_END_STATUS_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_DELETE_GNSS_SERVICE_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_XTRA_DATA_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_INJECT_XTRA_PCID_RESP_V02, QMI_IDL_TYPE16(0, 0), 7},
+ {QMI_LOC_GET_SUPPORTED_FEATURE_RESP_V02, QMI_IDL_TYPE16(0, 0), 7}
+};
+
+static const qmi_idl_service_message_table_entry loc_service_indication_messages_v02[] = {
+ {QMI_LOC_EVENT_POSITION_REPORT_IND_V02, QMI_IDL_TYPE16(0, 5), 422},
+ {QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02, QMI_IDL_TYPE16(0, 6), 2248},
+ {QMI_LOC_EVENT_NMEA_IND_V02, QMI_IDL_TYPE16(0, 7), 203},
+ {QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02, QMI_IDL_TYPE16(0, 8), 1338},
+ {QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02, QMI_IDL_TYPE16(0, 9), 776},
+ {QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02, QMI_IDL_TYPE16(0, 10), 783},
+ {QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02, QMI_IDL_TYPE16(0, 11), 40},
+ {QMI_LOC_EVENT_ENGINE_STATE_IND_V02, QMI_IDL_TYPE16(0, 12), 7},
+ {QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02, QMI_IDL_TYPE16(0, 13), 11},
+ {QMI_LOC_EVENT_WIFI_REQ_IND_V02, QMI_IDL_TYPE16(0, 14), 16},
+ {QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02, QMI_IDL_TYPE16(0, 15), 48},
+ {QMI_LOC_EVENT_TIME_SYNC_REQ_IND_V02, QMI_IDL_TYPE16(0, 16), 7},
+ {QMI_LOC_EVENT_SET_SPI_STREAMING_REPORT_IND_V02, QMI_IDL_TYPE16(0, 17), 4},
+ {QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02, QMI_IDL_TYPE16(0, 18), 21},
+ {QMI_LOC_GET_SERVICE_REVISION_IND_V02, QMI_IDL_TYPE16(0, 33), 532},
+ {QMI_LOC_GET_FIX_CRITERIA_IND_V02, QMI_IDL_TYPE16(0, 35), 124},
+ {QMI_LOC_NI_USER_RESPONSE_IND_V02, QMI_IDL_TYPE16(0, 37), 7},
+ {QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02, QMI_IDL_TYPE16(0, 39), 12},
+ {QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02, QMI_IDL_TYPE16(0, 41), 790},
+ {QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_IND_V02, QMI_IDL_TYPE16(0, 43), 20},
+ {QMI_LOC_INJECT_UTC_TIME_IND_V02, QMI_IDL_TYPE16(0, 45), 7},
+ {QMI_LOC_INJECT_POSITION_IND_V02, QMI_IDL_TYPE16(0, 47), 7},
+ {QMI_LOC_SET_ENGINE_LOCK_IND_V02, QMI_IDL_TYPE16(0, 49), 7},
+ {QMI_LOC_GET_ENGINE_LOCK_IND_V02, QMI_IDL_TYPE16(0, 51), 14},
+ {QMI_LOC_SET_SBAS_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 53), 7},
+ {QMI_LOC_GET_SBAS_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 55), 11},
+ {QMI_LOC_SET_NMEA_TYPES_IND_V02, QMI_IDL_TYPE16(0, 57), 7},
+ {QMI_LOC_GET_NMEA_TYPES_IND_V02, QMI_IDL_TYPE16(0, 59), 14},
+ {QMI_LOC_SET_LOW_POWER_MODE_IND_V02, QMI_IDL_TYPE16(0, 61), 7},
+ {QMI_LOC_GET_LOW_POWER_MODE_IND_V02, QMI_IDL_TYPE16(0, 63), 11},
+ {QMI_LOC_SET_SERVER_IND_V02, QMI_IDL_TYPE16(0, 65), 7},
+ {QMI_LOC_GET_SERVER_IND_V02, QMI_IDL_TYPE16(0, 67), 304},
+ {QMI_LOC_DELETE_ASSIST_DATA_IND_V02, QMI_IDL_TYPE16(0, 69), 7},
+ {QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02, QMI_IDL_TYPE16(0, 71), 7},
+ {QMI_LOC_GET_XTRA_T_SESSION_CONTROL_IND_V02, QMI_IDL_TYPE16(0, 73), 11},
+ {QMI_LOC_INJECT_WIFI_POSITION_IND_V02, QMI_IDL_TYPE16(0, 75), 7},
+ {QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02, QMI_IDL_TYPE16(0, 77), 7},
+ {QMI_LOC_GET_REGISTERED_EVENTS_IND_V02, QMI_IDL_TYPE16(0, 79), 18},
+ {QMI_LOC_SET_OPERATION_MODE_IND_V02, QMI_IDL_TYPE16(0, 81), 7},
+ {QMI_LOC_GET_OPERATION_MODE_IND_V02, QMI_IDL_TYPE16(0, 83), 14},
+ {QMI_LOC_SET_SPI_STATUS_IND_V02, QMI_IDL_TYPE16(0, 85), 7},
+ {QMI_LOC_INJECT_SENSOR_DATA_IND_V02, QMI_IDL_TYPE16(0, 87), 34},
+ {QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02, QMI_IDL_TYPE16(0, 89), 7},
+ {QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 93), 7},
+ {QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 91), 18},
+ {QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 97), 7},
+ {QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 95), 14},
+ {QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02, QMI_IDL_TYPE16(0, 99), 7},
+ {QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02, QMI_IDL_TYPE16(0, 101), 18},
+ {QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02, QMI_IDL_TYPE16(0, 103), 86},
+ {QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 105), 7},
+ {QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 107), 21},
+ {QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02, QMI_IDL_TYPE16(0, 109), 14},
+ {QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02, QMI_IDL_TYPE16(0, 111), 95},
+ {QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02, QMI_IDL_TYPE16(0, 113), 14},
+ {QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02, QMI_IDL_TYPE16(0, 115), 49},
+ {QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02, QMI_IDL_TYPE16(0, 117), 7},
+ {QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02, QMI_IDL_TYPE16(0, 119), 7},
+ {QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02, QMI_IDL_TYPE16(0, 121), 14},
+ {QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02, QMI_IDL_TYPE16(0, 123), 23},
+ {QMI_LOC_EVENT_NI_GEOFENCE_NOTIFICATION_IND_V02, QMI_IDL_TYPE16(0, 19), 14},
+ {QMI_LOC_EVENT_GEOFENCE_GEN_ALERT_IND_V02, QMI_IDL_TYPE16(0, 20), 7},
+ {QMI_LOC_EVENT_GEOFENCE_BREACH_NOTIFICATION_IND_V02, QMI_IDL_TYPE16(0, 21), 85},
+ {QMI_LOC_ADD_CIRCULAR_GEOFENCE_IND_V02, QMI_IDL_TYPE16(0, 125), 21},
+ {QMI_LOC_DELETE_GEOFENCE_IND_V02, QMI_IDL_TYPE16(0, 127), 21},
+ {QMI_LOC_QUERY_GEOFENCE_IND_V02, QMI_IDL_TYPE16(0, 129), 65},
+ {QMI_LOC_EDIT_GEOFENCE_IND_V02, QMI_IDL_TYPE16(0, 135), 28},
+ {QMI_LOC_GET_BEST_AVAILABLE_POSITION_IND_V02, QMI_IDL_TYPE16(0, 140), 391},
+ {QMI_LOC_INJECT_MOTION_DATA_IND_V02, QMI_IDL_TYPE16(0, 142), 7},
+ {QMI_LOC_GET_NI_GEOFENCE_ID_LIST_IND_V02, QMI_IDL_TYPE16(0, 144), 82},
+ {QMI_LOC_INJECT_GSM_CELL_INFO_IND_V02, QMI_IDL_TYPE16(0, 146), 7},
+ {QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_IND_V02, QMI_IDL_TYPE16(0, 154), 7},
+ {QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_IND_V02, QMI_IDL_TYPE16(0, 156), 7},
+ {QMI_LOC_EVENT_PEDOMETER_CONTROL_IND_V02, QMI_IDL_TYPE16(0, 22), 15},
+ {QMI_LOC_EVENT_MOTION_DATA_CONTROL_IND_V02, QMI_IDL_TYPE16(0, 23), 4},
+ {QMI_LOC_PEDOMETER_REPORT_IND_V02, QMI_IDL_TYPE16(0, 158), 7},
+ {QMI_LOC_INJECT_WCDMA_CELL_INFO_IND_V02, QMI_IDL_TYPE16(0, 148), 7},
+ {QMI_LOC_INJECT_TDSCDMA_CELL_INFO_IND_V02, QMI_IDL_TYPE16(0, 150), 7},
+ {QMI_LOC_INJECT_SUBSCRIBER_ID_IND_V02, QMI_IDL_TYPE16(0, 152), 7},
+ {QMI_LOC_SET_GEOFENCE_ENGINE_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 131), 14},
+ {QMI_LOC_GET_GEOFENCE_ENGINE_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 133), 39},
+ {QMI_LOC_GET_BATCH_SIZE_IND_V02, QMI_IDL_TYPE16(0, 160), 21},
+ {QMI_LOC_START_BATCHING_IND_V02, QMI_IDL_TYPE16(0, 162), 14},
+ {QMI_LOC_EVENT_BATCH_FULL_NOTIFICATION_IND_V02, QMI_IDL_TYPE16(0, 163), 7},
+ {QMI_LOC_EVENT_LIVE_BATCHED_POSITION_REPORT_IND_V02, QMI_IDL_TYPE16(0, 164), 90},
+ {QMI_LOC_READ_FROM_BATCH_IND_V02, QMI_IDL_TYPE16(0, 166), 460},
+ {QMI_LOC_STOP_BATCHING_IND_V02, QMI_IDL_TYPE16(0, 168), 21},
+ {QMI_LOC_RELEASE_BATCH_IND_V02, QMI_IDL_TYPE16(0, 170), 14},
+ {QMI_LOC_EVENT_INJECT_WIFI_AP_DATA_REQ_IND_V02, QMI_IDL_TYPE16(0, 171), 4},
+ {QMI_LOC_INJECT_WIFI_AP_DATA_IND_V02, QMI_IDL_TYPE16(0, 173), 7},
+ {QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_IND_V02, QMI_IDL_TYPE16(0, 175), 7},
+ {QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_IND_V02, QMI_IDL_TYPE16(0, 177), 7},
+ {QMI_LOC_EVENT_GEOFENCE_BATCHED_BREACH_NOTIFICATION_IND_V02, QMI_IDL_TYPE16(0, 24), 1254},
+ {QMI_LOC_EVENT_VEHICLE_DATA_READY_STATUS_IND_V02, QMI_IDL_TYPE16(0, 178), 12},
+ {QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_IND_V02, QMI_IDL_TYPE16(0, 180), 7},
+ {QMI_LOC_GET_AVAILABLE_WWAN_POSITION_IND_V02, QMI_IDL_TYPE16(0, 182), 145},
+ {QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 184), 7},
+ {QMI_LOC_SET_XTRA_VERSION_CHECK_IND_V02, QMI_IDL_TYPE16(0, 186), 7},
+ {QMI_LOC_EVENT_GNSS_MEASUREMENT_REPORT_IND_V02, QMI_IDL_TYPE16(0, 189), 1617},
+ {QMI_LOC_EVENT_SV_POLYNOMIAL_REPORT_IND_V02, QMI_IDL_TYPE16(0, 190), 325},
+ {QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 188), 7},
+ {QMI_LOC_ADD_GEOFENCE_CONTEXT_IND_V02, QMI_IDL_TYPE16(0, 192), 28},
+ {QMI_LOC_SET_GEOFENCE_ENGINE_CONTEXT_IND_V02, QMI_IDL_TYPE16(0, 194), 14},
+ {QMI_LOC_DELETE_GEOFENCE_CONTEXT_IND_V02, QMI_IDL_TYPE16(0, 196), 28},
+ {QMI_LOC_EVENT_GEOFENCE_PROXIMITY_NOTIFICATION_IND_V02, QMI_IDL_TYPE16(0, 25), 21},
+ {QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_IND_V02, QMI_IDL_TYPE16(0, 198), 7},
+ {QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_IND_V02, QMI_IDL_TYPE16(0, 200), 7},
+ {QMI_LOC_GDT_UPLOAD_END_IND_V02, QMI_IDL_TYPE16(0, 202), 7},
+ {QMI_LOC_EVENT_GDT_UPLOAD_BEGIN_STATUS_REQ_IND_V02, QMI_IDL_TYPE16(0, 27), 273},
+ {QMI_LOC_EVENT_GDT_UPLOAD_END_REQ_IND_V02, QMI_IDL_TYPE16(0, 28), 21},
+ {QMI_LOC_START_DBT_IND_V02, QMI_IDL_TYPE16(0, 214), 11},
+ {QMI_LOC_EVENT_DBT_POSITION_REPORT_IND_V02, QMI_IDL_TYPE16(0, 217), 283},
+ {QMI_LOC_EVENT_DBT_SESSION_STATUS_IND_V02, QMI_IDL_TYPE16(0, 218), 11},
+ {QMI_LOC_STOP_DBT_IND_V02, QMI_IDL_TYPE16(0, 216), 11},
+ {QMI_LOC_SECURE_GET_AVAILABLE_POSITION_IND_V02, QMI_IDL_TYPE16(0, 220), 1043},
+ {QMI_LOC_EVENT_GEOFENCE_BATCHED_DWELL_NOTIFICATION_IND_V02, QMI_IDL_TYPE16(0, 26), 1247},
+ {QMI_LOC_EVENT_GET_TIME_ZONE_INFO_IND_V02, QMI_IDL_TYPE16(0, 136), 7},
+ {QMI_LOC_INJECT_TIME_ZONE_INFO_IND_V02, QMI_IDL_TYPE16(0, 138), 7},
+ {QMI_LOC_INJECT_APCACHE_DATA_IND_V02, QMI_IDL_TYPE16(0, 222), 70},
+ {QMI_LOC_INJECT_APDONOTCACHE_DATA_IND_V02, QMI_IDL_TYPE16(0, 224), 7},
+ {QMI_LOC_EVENT_BATCHING_STATUS_IND_V02, QMI_IDL_TYPE16(0, 225), 7},
+ {QMI_LOC_QUERY_AON_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 227), 21},
+ {QMI_LOC_GTP_AP_STATUS_IND_V02, QMI_IDL_TYPE16(0, 204), 18},
+ {QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_IND_V02, QMI_IDL_TYPE16(0, 206), 7},
+ {QMI_LOC_GDT_DOWNLOAD_READY_STATUS_IND_V02, QMI_IDL_TYPE16(0, 208), 7},
+ {QMI_LOC_GDT_RECEIVE_DONE_STATUS_IND_V02, QMI_IDL_TYPE16(0, 210), 7},
+ {QMI_LOC_GDT_DOWNLOAD_END_STATUS_IND_V02, QMI_IDL_TYPE16(0, 212), 7},
+ {QMI_LOC_EVENT_GDT_DOWNLOAD_BEGIN_REQ_IND_V02, QMI_IDL_TYPE16(0, 29), 5811},
+ {QMI_LOC_EVENT_GDT_RECEIVE_DONE_IND_V02, QMI_IDL_TYPE16(0, 30), 21},
+ {QMI_LOC_EVENT_GDT_DOWNLOAD_END_REQ_IND_V02, QMI_IDL_TYPE16(0, 31), 21},
+ {QMI_LOC_DELETE_GNSS_SERVICE_DATA_IND_V02, QMI_IDL_TYPE16(0, 229), 7},
+ {QMI_LOC_INJECT_XTRA_DATA_IND_V02, QMI_IDL_TYPE16(0, 231), 12},
+ {QMI_LOC_INJECT_XTRA_PCID_IND_V02, QMI_IDL_TYPE16(0, 233), 7},
+ {QMI_LOC_GET_SUPPORTED_FEATURE_IND_V02, QMI_IDL_TYPE16(0, 235), 111}
+};
+
+/*Service Object*/
+struct qmi_idl_service_object loc_qmi_idl_service_object_v02 = {
+ 0x06,
+ 0x02,
+ 0x10,
+ 8204,
+ { 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,
+ 0x39,
+ NULL
+};
+
+/* 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/gps/loc_api/loc_api_v02/location_service_v02.h b/gps/loc_api/loc_api_v02/location_service_v02.h
new file mode 100644
index 0000000..d1fdbf8
--- /dev/null
+++ b/gps/loc_api/loc_api_v02/location_service_v02.h
@@ -0,0 +1,16657 @@
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation, 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_02_H
+#define LOC_SERVICE_02_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.
+
+*/
+/*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*
+ *THIS IS AN AUTO GENERATED FILE. DO NOT ALTER IN ANY WAY
+ *====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*/
+
+/* This file was generated with Tool version 6.14.7
+ It was generated on: Tue Jun 28 2016 (Spin 0)
+ From IDL File: location_service_v02.idl */
+
+/** @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 0x39
+/** Major Version Number of the qmi_idl_compiler used to generate this file */
+#define LOC_V02_IDL_TOOL_VERS 0x06
+/** Maximum Defined Message ID */
+#define LOC_V02_MAX_MESSAGE_ID 0x00A9
+/**
+ @}
+ */
+
+
+/** @addtogroup loc_qmi_consts
+ @{
+ */
+
+/** Maximum string length for the Provider field in the application ID. */
+#define QMI_LOC_MAX_APP_ID_PROVIDER_LENGTH_V02 24
+
+/** Maximum string length for the Name field in the application ID. */
+#define QMI_LOC_MAX_APP_ID_NAME_LENGTH_V02 32
+
+/** Maximum string length for the Version field in the application ID. */
+#define QMI_LOC_MAX_APP_ID_VERSION_LENGTH_V02 8
+
+/** Maximum length of the list containing the SVs that were used to generate
+ a position report. */
+#define QMI_LOC_MAX_SV_USED_LIST_LENGTH_V02 80
+
+/** East, North, Up array length */
+#define QMI_LOC_ENU_ARRAY_LENGTH_V02 3
+
+/** 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 length of the list, where each element of the list contains the
+ continuous range of Geofences that were breached at a given position. */
+#define QMI_LOC_MAX_GEOFENCE_ID_CONTINUOUS_LIST_LENGTH_V02 80
+
+/** Maximum length of the list that contains a discrete number Geofences that
+ were breached at a given position. */
+#define QMI_LOC_MAX_GEOFENCE_ID_DISCRETE_LIST_LENGTH_V02 80
+
+/** Maximum length that can be injected. */
+#define QMI_LOC_MAX_GDT_PATH_LEN_V02 255
+
+/** Maximum client information size in bytes. */
+#define QMI_LOC_MAX_GTP_CL_INFO_LEN_V02 1500
+
+/** Maximum mobile status data size in bytes. */
+#define QMI_LOC_MAX_GTP_MSD_LEN_V02 4000
+
+/** Maximum GNSS Measurement Engine Firmware Version String length. */
+#define QMI_LOC_GNSS_ME_VERSION_STRING_MAX_LENGTH_V02 127
+
+/** Maximum GNSS Measurement Engine Hosted Software Version String length. */
+#define QMI_LOC_GNSS_HOSTED_SW_VERSION_STRING_MAX_LENGTH_V02 127
+
+/** Maximum GNSS Measurement Engine Full Version String length. */
+#define QMI_LOC_GNSS_SW_VERSION_STRING_MAX_LENGTH_V02 255
+
+/** 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
+
+/** Maximum length of the Delete BDS SV Information list. */
+#define QMI_LOC_DELETE_MAX_BDS_SV_INFO_LENGTH_V02 37
+
+/** Maximum length of the Delete GAL SV Information list. */
+#define QMI_LOC_DELETE_MAX_GAL_SV_INFO_LENGTH_V02 36
+
+/** MAC address length in bytes. */
+#define QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02 6
+
+/** Wi-Fi SSID string maximum length. */
+#define QMI_LOC_MAX_WIFI_AP_SSID_STR_LENGTH_V02 32
+
+/** 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 the SUPL certificate. */
+#define QMI_LOC_MAX_SUPL_CERT_LENGTH_V02 2000
+
+/** Maximum number of motion states used by the Geofence engine. */
+#define QMI_LOC_GEOFENCE_MAX_MOTION_STATES_V02 20
+
+/** Maximum length of the network-initiated Geofence ID
+ list. */
+#define QMI_LOC_MAX_NI_GEOFENCE_ID_LIST_LENGTH_V02 16
+
+/** Maximum value of WDMA frequency for injection of WCDMA cell
+ information. */
+#define QMI_LOC_MAX_WCDMA_FREQ_V02 16383
+
+/** Maximum value of PSC for injection of WCDMA cell information. */
+#define QMI_LOC_MAX_WCDMA_PSC_V02 511
+
+/** Maximum value of TDSCDMA frequency for injection of TDSCDMA cell
+ information. */
+#define QMI_LOC_MAX_TDSCDMA_FREQ_V02 16383
+
+/** Maximum length of the injected network-initiated message. */
+#define QMI_LOC_MAX_INJECTED_NETWORK_INITIATED_MESSAGE_LENGTH_V02 1024
+
+/** Maximum number of entries returned from a batch in each indication. */
+#define QMI_LOC_READ_FROM_BATCH_MAX_SIZE_V02 5
+
+/** Maximum number of vehicle sensor samples that can be injected. */
+#define QMI_LOC_VEHICLE_SENSOR_DATA_MAX_SAMPLES_V02 65
+
+/** Maximum number of axes that can be provided in each sample. */
+#define QMI_LOC_VEHICLE_SENSOR_DATA_MAX_AXES_V02 3
+
+/** Maximum number of measurements from an odometer. */
+#define QMI_LOC_VEHICLE_ODOMETRY_MAX_MEASUREMENTS_V02 3
+#define QMI_LOC_MEAS_STATUS_DONT_USE_BITS_V02 0xFFC0000000000000
+
+/** Maximum number of satellites in a measurement block for a given system. */
+#define QMI_LOC_SV_MEAS_LIST_MAX_SIZE_V02 16
+#define QMI_LOC_SV_POLY_VELOCITY_COEF_SIZE_V02 12
+#define QMI_LOC_SV_POLY_XYZ_0_TH_ORDER_COEFF_SIZE_V02 3
+#define QMI_LOC_SV_POLY_XYZ_N_TH_ORDER_COEFF_SIZE_V02 9
+#define QMI_LOC_SV_POLY_SV_CLKBIAS_COEFF_SIZE_V02 4
+
+/** IBeacon string maximum length. */
+#define QMI_LOC_MAX_IBEACON_UUID_STR_LENGTH_V02 32
+
+/** Wi-Fi area ID list length. */
+#define QMI_LOC_WIFI_AREA_ID_LIST_LENGTH_V02 20
+
+/** Cell ID list length. */
+#define QMI_LOC_CELL_ID_LIST_LENGTH_V02 20
+
+/** IBeacon list length. */
+#define QMI_LOC_IBEACON_LIST_LENGTH_V02 20
+
+/** Maximum length that can be injected. */
+#define QMI_LOC_MAX_GTP_WWAN_CLIENT_DOWNLOADED_DATA_LEN_V02 512
+
+/** Maximum length of OEM id. */
+#define QMI_LOC_MAX_OEM_ID_LEN_V02 256
+
+/** Maximum length of model id. */
+#define QMI_LOC_MAX_MODEL_ID_LEN_V02 256
+
+/** Maximum length that can be injected. */
+#define QMI_LOC_MAX_GTP_RLI_LEN_V02 256
+
+/** Maximum buffer length of the encrypted data blob for the Secure Get Available Position request. */
+#define QMI_LOC_SECURE_GET_AVAILABLE_POS_REQUEST_ENCRYPTED_MAX_V02 256
+
+/** Horizontal Uncertainty Circular
+ Altitude With Respect to Ellipsoid
+ Vertical Uncertainty
+ Horizontal Elliptical Uncertainty (Semi-Minor Axis)
+ Horizontal Elliptical Uncertainty (Semi-Major Axis)
+ Elliptical Horizontal Uncertainty Azimuth
+ Horizontal Confidence
+ Horizontal Elliptical Uncertainty Confidence
+ Horizontal Reliability
+ Horizontal Speed
+ Horizontal Speed Uncertainty
+ Altitude With Respect to Sea Level
+ Vertical Confidence
+ Vertical Reliability
+ Vertical Speed
+ Vertical Speed Uncertainty
+ Heading
+ Heading Uncertainty
+ Magnetic Deviation
+ Technology Used
+ Position Dilution of Precision
+ Horizontal Dilution of Precision
+ Vertical Dilution of Precision
+ GPS Week
+ GPS Time of Week MS
+ Time Source
+ Sensor Data Usage MASK
+ Position Data Aided by Sensor
+ SVs Used to Calculate the Fix */
+#define QMI_LOC_SECURE_GET_AVAILABLE_POSITION_IND_ENCRYPTED_MAX_V02 1024
+
+/** Maximum number of APs that can be injected in a TLV. */
+#define QMI_LOC_APCACHE_DATA_MAX_SAMPLES_V02 80
+
+/** 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_XTRA_PART_LEN_V02 1024
+#define QMI_LOC_SUPPORTED_FEATURE_LENGTH_V02 100
+/**
+ @}
+ */
+
+/** @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. */
+}qmiLocInformClientRevisionReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint64_t qmiLocEventRegMaskT_v02;
+#define QMI_LOC_EVENT_MASK_POSITION_REPORT_V02 ((qmiLocEventRegMaskT_v02)0x00000001ull) /**< The control point must enable this mask to receive position report
+ event indications. */
+#define QMI_LOC_EVENT_MASK_GNSS_SV_INFO_V02 ((qmiLocEventRegMaskT_v02)0x00000002ull) /**< 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)0x00000004ull) /**< 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)0x00000008ull) /**< 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)0x00000010ull) /**< 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)0x00000020ull) /**< 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)0x00000040ull) /**< The control point must enable this mask to receive position injection request
+ event indications. */
+#define QMI_LOC_EVENT_MASK_ENGINE_STATE_V02 ((qmiLocEventRegMaskT_v02)0x00000080ull) /**< 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)0x00000100ull) /**< 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)0x00000200ull) /**< The control point must enable this mask to receive Wi-Fi position request
+ event indications. */
+#define QMI_LOC_EVENT_MASK_SENSOR_STREAMING_READY_STATUS_V02 ((qmiLocEventRegMaskT_v02)0x00000400ull) /**< The control point must enable this mask to receive notifications from the
+ location engine indicating its readiness to accept data from the
+ sensors (accelerometer, gyroscope, etc.). */
+#define QMI_LOC_EVENT_MASK_TIME_SYNC_REQ_V02 ((qmiLocEventRegMaskT_v02)0x00000800ull) /**< 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)0x00001000ull) /**< 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)0x00002000ull) /**< 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. */
+#define QMI_LOC_EVENT_MASK_NI_GEOFENCE_NOTIFICATION_V02 ((qmiLocEventRegMaskT_v02)0x00004000ull) /**< The control point must enable this mask to receive notifications
+ related to network-initiated Geofences. These events notify the client
+ when a network-initiated Geofence is added, deleted, or edited. */
+#define QMI_LOC_EVENT_MASK_GEOFENCE_GEN_ALERT_V02 ((qmiLocEventRegMaskT_v02)0x00008000ull) /**< The control point must enable this mask to receive Geofence alerts.
+ These alerts are generated to inform the client of the changes that may
+ affect a Geofence, e.g., if GPS is turned off or if the network is
+ unavailable. */
+#define QMI_LOC_EVENT_MASK_GEOFENCE_BREACH_NOTIFICATION_V02 ((qmiLocEventRegMaskT_v02)0x00010000ull) /**< The control point must enable this mask to receive notifications when
+ a Geofence is breached. These events are generated when a UE enters
+ or leaves the perimeter of a Geofence. This breach report is for a single
+ Geofence . */
+#define QMI_LOC_EVENT_MASK_PEDOMETER_CONTROL_V02 ((qmiLocEventRegMaskT_v02)0x00020000ull) /**< The control point must enable this mask to register for pedometer
+ control requests from the location engine. The location engine sends
+ this event to control the injection of pedometer reports. */
+#define QMI_LOC_EVENT_MASK_MOTION_DATA_CONTROL_V02 ((qmiLocEventRegMaskT_v02)0x00040000ull) /**< The control point must enable this mask to register for motion data
+ control requests from the location engine. The location engine sends
+ this event to control the injection of motion data. */
+#define QMI_LOC_EVENT_MASK_BATCH_FULL_NOTIFICATION_V02 ((qmiLocEventRegMaskT_v02)0x00080000ull) /**< The control point must enable this mask to receive notification when
+ a batch is full. The location engine sends this event to notify of Batch Full
+ for ongoing batching session. */
+#define QMI_LOC_EVENT_MASK_LIVE_BATCHED_POSITION_REPORT_V02 ((qmiLocEventRegMaskT_v02)0x00100000ull) /**< The control point must enable this mask to receive position report
+ indications along with an ongoing batching session. The location engine sends
+ this event to notify the batched position report while a batching session
+ is ongoing. */
+#define QMI_LOC_EVENT_MASK_INJECT_WIFI_AP_DATA_REQ_V02 ((qmiLocEventRegMaskT_v02)0x00200000ull) /**< The control point must enable this mask to receive Wi-Fi AP data inject request
+ event indications. */
+#define QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_BREACH_NOTIFICATION_V02 ((qmiLocEventRegMaskT_v02)0x00400000ull) /**< The control point must enable this mask to receive notifications when
+ a Geofence is breached. These events are generated when a UE enters
+ or leaves the perimeter of a Geofence. This breach notification is for
+ multiple Geofences. Breaches from multiple Geofences are all batched and
+ sent in the same notification . */
+#define QMI_LOC_EVENT_MASK_VEHICLE_DATA_READY_STATUS_V02 ((qmiLocEventRegMaskT_v02)0x00800000ull) /**< The control point must enable this mask to receive notifications from the
+ location engine indicating its readiness to accept vehicle data (vehicle
+ accelerometer, vehicle angular rate, vehicle odometry, etc.). */
+#define QMI_LOC_EVENT_MASK_GNSS_MEASUREMENT_REPORT_V02 ((qmiLocEventRegMaskT_v02)0x01000000ull) /**< The control point must enable this mask to receive system clock and satellite
+ measurement report events (system clock, SV time, Doppler, etc.). Reports are
+ generated only for the GNSS satellite constellations that are enabled using
+ QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG. */
+#define QMI_LOC_EVENT_MASK_GNSS_SV_POLYNOMIAL_REPORT_V02 ((qmiLocEventRegMaskT_v02)0x02000000ull) /**< The control point must enable this mask to receive satellite position
+ reports as polynomials. Reports are generated only for the GNSS satellite
+ constellations that are enabled using QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG. */
+#define QMI_LOC_EVENT_MASK_GEOFENCE_PROXIMITY_NOTIFICATION_V02 ((qmiLocEventRegMaskT_v02)0x04000000ull) /**< The control point must enable this mask to receive notifications when a Geofence proximity is entered
+ and exited. The proximity of a Geofence may be due to different contexts. These contexts are identified
+ using the context ID in this indication. The context of a Geofence may contain Wi-Fi area ID lists, IBeacon lists,
+ Cell-ID list, and so forth. */
+#define QMI_LOC_EVENT_MASK_GDT_UPLOAD_BEGIN_REQ_V02 ((qmiLocEventRegMaskT_v02)0x08000000ull) /**< The control point must enable this mask to receive Generic Data Transport (GDT)
+ upload session begin request event indications. */
+#define QMI_LOC_EVENT_MASK_GDT_UPLOAD_END_REQ_V02 ((qmiLocEventRegMaskT_v02)0x10000000ull) /**< The control point must enable this mask to receive GDT
+ upload session end request event indications. */
+#define QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_DWELL_NOTIFICATION_V02 ((qmiLocEventRegMaskT_v02)0x20000000ull) /**< The control point must enable this mask to receive notifications when
+ a Geofence is dwelled. These events are generated when a UE enters
+ or leaves the perimeter of a Geofence and dwells inside or outside for a specified time.
+ This dwell notification is for multiple Geofences. Dwells from multiple Geofences are all batched and
+ sent in the same notification. */
+#define QMI_LOC_EVENT_MASK_GET_TIME_ZONE_REQ_V02 ((qmiLocEventRegMaskT_v02)0x40000000ull) /**< The control point must enable this mask to receive requests for time zone information from
+ the service. These events are generated when there is a need for time zone information in the
+ service. */
+#define QMI_LOC_EVENT_MASK_BATCHING_STATUS_V02 ((qmiLocEventRegMaskT_v02)0x80000000ull) /**< The control point must enable this mask to receive asynchronous events related
+ to batching. */
+/** @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.
+ Valid bitmasks:
+ - QMI_LOC_EVENT_MASK_POSITION_REPORT (0x00000001) -- The control point must enable this mask to receive position report
+ event indications.
+ - QMI_LOC_EVENT_MASK_GNSS_SV_INFO (0x00000002) -- The control point must enable this mask to receive satellite report
+ event indications. These reports are sent at a 1 Hz rate.
+ - QMI_LOC_EVENT_MASK_NMEA (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.
+ - QMI_LOC_EVENT_MASK_NI_NOTIFY_VERIFY_REQ (0x00000008) -- The control point must enable this mask to receive NI Notify/Verify request
+ event indications.
+ - QMI_LOC_EVENT_MASK_INJECT_TIME_REQ (0x00000010) -- The control point must enable this mask to receive time injection request
+ event indications.
+ - QMI_LOC_EVENT_MASK_INJECT_PREDICTED_ORBITS_REQ (0x00000020) -- The control point must enable this mask to receive predicted orbits request
+ event indications.
+ - QMI_LOC_EVENT_MASK_INJECT_POSITION_REQ (0x00000040) -- The control point must enable this mask to receive position injection request
+ event indications.
+ - QMI_LOC_EVENT_MASK_ENGINE_STATE (0x00000080) -- The control point must enable this mask to receive engine state report
+ event indications.
+ - QMI_LOC_EVENT_MASK_FIX_SESSION_STATE (0x00000100) -- The control point must enable this mask to receive fix session status report
+ event indications.
+ - QMI_LOC_EVENT_MASK_WIFI_REQ (0x00000200) -- The control point must enable this mask to receive Wi-Fi position request
+ event indications.
+ - QMI_LOC_EVENT_MASK_SENSOR_STREAMING_READY_STATUS (0x00000400) -- The control point must enable this mask to receive notifications from the
+ location engine indicating its readiness to accept data from the
+ sensors (accelerometer, gyroscope, etc.).
+ - QMI_LOC_EVENT_MASK_TIME_SYNC_REQ (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.
+ - QMI_LOC_EVENT_MASK_SET_SPI_STREAMING_REPORT (0x00001000) -- The control point must enable this mask to receive Stationary Position
+ Indicator (SPI) streaming report indications.
+ - QMI_LOC_EVENT_MASK_LOCATION_SERVER_CONNECTION_REQ (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.
+ - QMI_LOC_EVENT_MASK_NI_GEOFENCE_NOTIFICATION (0x00004000) -- The control point must enable this mask to receive notifications
+ related to network-initiated Geofences. These events notify the client
+ when a network-initiated Geofence is added, deleted, or edited.
+ - QMI_LOC_EVENT_MASK_GEOFENCE_GEN_ALERT (0x00008000) -- The control point must enable this mask to receive Geofence alerts.
+ These alerts are generated to inform the client of the changes that may
+ affect a Geofence, e.g., if GPS is turned off or if the network is
+ unavailable.
+ - QMI_LOC_EVENT_MASK_GEOFENCE_BREACH_NOTIFICATION (0x00010000) -- The control point must enable this mask to receive notifications when
+ a Geofence is breached. These events are generated when a UE enters
+ or leaves the perimeter of a Geofence. This breach report is for a single
+ Geofence .
+ - QMI_LOC_EVENT_MASK_PEDOMETER_CONTROL (0x00020000) -- The control point must enable this mask to register for pedometer
+ control requests from the location engine. The location engine sends
+ this event to control the injection of pedometer reports.
+ - QMI_LOC_EVENT_MASK_MOTION_DATA_CONTROL (0x00040000) -- The control point must enable this mask to register for motion data
+ control requests from the location engine. The location engine sends
+ this event to control the injection of motion data.
+ - QMI_LOC_EVENT_MASK_BATCH_FULL_NOTIFICATION (0x00080000) -- The control point must enable this mask to receive notification when
+ a batch is full. The location engine sends this event to notify of Batch Full
+ for ongoing batching session.
+ - QMI_LOC_EVENT_MASK_LIVE_BATCHED_POSITION_REPORT (0x00100000) -- The control point must enable this mask to receive position report
+ indications along with an ongoing batching session. The location engine sends
+ this event to notify the batched position report while a batching session
+ is ongoing.
+ - QMI_LOC_EVENT_MASK_INJECT_WIFI_AP_DATA_REQ (0x00200000) -- The control point must enable this mask to receive Wi-Fi AP data inject request
+ event indications.
+ - QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_BREACH_NOTIFICATION (0x00400000) -- The control point must enable this mask to receive notifications when
+ a Geofence is breached. These events are generated when a UE enters
+ or leaves the perimeter of a Geofence. This breach notification is for
+ multiple Geofences. Breaches from multiple Geofences are all batched and
+ sent in the same notification .
+ - QMI_LOC_EVENT_MASK_VEHICLE_DATA_READY_STATUS (0x00800000) -- The control point must enable this mask to receive notifications from the
+ location engine indicating its readiness to accept vehicle data (vehicle
+ accelerometer, vehicle angular rate, vehicle odometry, etc.).
+ - QMI_LOC_EVENT_MASK_GNSS_MEASUREMENT_REPORT (0x01000000) -- The control point must enable this mask to receive system clock and satellite
+ measurement report events (system clock, SV time, Doppler, etc.). Reports are
+ generated only for the GNSS satellite constellations that are enabled using
+ QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG.
+ - QMI_LOC_EVENT_MASK_GNSS_SV_POLYNOMIAL_REPORT (0x02000000) -- The control point must enable this mask to receive satellite position
+ reports as polynomials. Reports are generated only for the GNSS satellite
+ constellations that are enabled using QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG.
+ - QMI_LOC_EVENT_MASK_GEOFENCE_PROXIMITY_NOTIFICATION (0x04000000) -- The control point must enable this mask to receive notifications when a Geofence proximity is entered
+ and exited. The proximity of a Geofence may be due to different contexts. These contexts are identified
+ using the context ID in this indication. The context of a Geofence may contain Wi-Fi area ID lists, IBeacon lists,
+ Cell-ID list, and so forth.
+ - QMI_LOC_EVENT_MASK_GDT_UPLOAD_BEGIN_REQ (0x08000000) -- The control point must enable this mask to receive Generic Data Transport (GDT)
+ upload session begin request event indications.
+ - QMI_LOC_EVENT_MASK_GDT_UPLOAD_END_REQ (0x10000000) -- The control point must enable this mask to receive GDT
+ upload session end request event indications.
+ - QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_DWELL_NOTIFICATION (0x20000000) -- The control point must enable this mask to receive notifications when
+ a Geofence is dwelled. These events are generated when a UE enters
+ or leaves the perimeter of a Geofence and dwells inside or outside for a specified time.
+ This dwell notification is for multiple Geofences. Dwells from multiple Geofences are all batched and
+ sent in the same notification.
+ - QMI_LOC_EVENT_MASK_GET_TIME_ZONE_REQ (0x40000000) -- The control point must enable this mask to receive requests for time zone information from
+ the service. These events are generated when there is a need for time zone information in the
+ service.
+ - QMI_LOC_EVENT_MASK_BATCHING_STATUS (0x80000000) -- The control point must enable this mask to receive asynchronous events related
+ to batching.
+
+ 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 */
+ eQMI_LOC_RECURRENCE_SINGLE_V02 = 2, /**< Request a single position fix */
+ 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 */
+ eQMI_LOC_ACCURACY_HIGH_V02 = 3, /**< High accuracy */
+ 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 */
+ eQMI_LOC_INTERMEDIATE_REPORTS_OFF_V02 = 2, /**< Intermediate reports are turned off */
+ QMILOCINTERMEDIATEREPORTSTATEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocIntermediateReportStateEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCCONFIGINCLUDEALTITUDEASSUMEDINGNSSSVINFOENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_ALTITUDE_ASSUMED_IN_GNSS_SV_INFO_ENABLED_V02 = 1, /**< Enable Altitude Assumed information in GNSS SV Info Event. */
+ eQMI_LOC_ALTITUDE_ASSUMED_IN_GNSS_SV_INFO_DISABLED_V02 = 2, /**< Disable Altitude Assumed information in GNSS SV Info Event. */
+ QMILOCCONFIGINCLUDEALTITUDEASSUMEDINGNSSSVINFOENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocConfigIncludeAltitudeAssumedInGnssSvInfoEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ char applicationProvider[QMI_LOC_MAX_APP_ID_PROVIDER_LENGTH_V02 + 1];
+ /**< Application provider. */
+
+ char applicationName[QMI_LOC_MAX_APP_ID_NAME_LENGTH_V02 + 1];
+ /**< Application name. */
+
+ uint8_t applicationVersion_valid;
+ /**< Specifies whether the application version string contains
+ a valid value: \begin{itemize1}
+ \item 0x00 (FALSE) -- Application version string is invalid
+ \item 0x01 (TRUE) -- Application version string is valid
+ \vspace{-0.18in} \end{itemize1} */
+
+ char applicationVersion[QMI_LOC_MAX_APP_ID_VERSION_LENGTH_V02 + 1];
+ /**< Application version. */
+}qmiLocApplicationIdStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point 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
+ - 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
+ - eQMI_LOC_RECURRENCE_PERIODIC (1) -- Request periodic position fixes
+ - eQMI_LOC_RECURRENCE_SINGLE (2) -- Request a single position 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
+ - eQMI_LOC_ACCURACY_LOW (1) -- Low accuracy
+ - eQMI_LOC_ACCURACY_MED (2) -- Medium accuracy
+ - eQMI_LOC_ACCURACY_HIGH (3) -- High 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
+ - eQMI_LOC_INTERMEDIATE_REPORTS_ON (1) -- Intermediate reports are turned on
+ - eQMI_LOC_INTERMEDIATE_REPORTS_OFF (2) -- Intermediate reports are turned off
+ */
+
+ /* Optional */
+ /* Minimum Interval Between Final 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
+ final position reports. \n
+ - Units: Milliseconds \n
+ - Default: 1000 ms
+ */
+
+ /* Optional */
+ /* ID of the Application that Sent this Request */
+ uint8_t applicationId_valid; /**< Must be set to true if applicationId is being passed */
+ qmiLocApplicationIdStructT_v02 applicationId;
+ /**< \n Application provider, name, and version.*/
+
+ /* Optional */
+ /* Configuration for Altitude Assumed Info in GNSS SV Info Event */
+ uint8_t configAltitudeAssumed_valid; /**< Must be set to true if configAltitudeAssumed is being passed */
+ qmiLocConfigIncludeAltitudeAssumedInGnssSvInfoEnumT_v02 configAltitudeAssumed;
+ /**< Specifies the configuration to include Altitude Assumed information in the GNSS SV Info Event.
+ When enabled, an additional GNSS SV Info event indication is sent to the control
+ point that also includes the altitude assumed information.
+
+ If not specified, the configuration defaults to ENABLED.
+
+ Valid values: \n
+ - eQMI_LOC_ALTITUDE_ASSUMED_IN_GNSS_SV_INFO_ENABLED (1) -- Enable Altitude Assumed information in GNSS SV Info Event.
+ - eQMI_LOC_ALTITUDE_ASSUMED_IN_GNSS_SV_INFO_DISABLED (2) -- Disable Altitude Assumed information in GNSS SV Info Event.
+ */
+
+ /* Optional */
+ /* Minimum Interval Between Intermediate Position Reports */
+ uint8_t minIntermediatePositionReportInterval_valid; /**< Must be set to true if minIntermediatePositionReportInterval is being passed */
+ uint32_t minIntermediatePositionReportInterval;
+ /**< Minimum time interval for intermediate position reports, specified by the control point,
+ that, between the position reports elapsed time, must be longer than the interval time.
+ If this optional value is not set or set to the default value (0), the intermediate position
+ will be reported when it is ready. \n
+ - Units: Milliseconds \n
+ - Default: 0 ms
+ */
+
+ /* Optional */
+ /* Maximum Wait Time to Get a Position Report */
+ uint8_t positionReportTimeout_valid; /**< Must be set to true if positionReportTimeout is being passed */
+ uint32_t positionReportTimeout;
+ /**< Maximum time to work on each fix, specified by the control point.
+ The GPS engine returns QMI_ERR_INTERNAL if a position cannot be obtained
+ within the positionReportTimeout value. \n
+ - Units: Milliseconds \n
+ - Default: 255*1000 ms \n
+ - Range: 1000 - 255*1000 ms
+ */
+
+ /* Optional */
+ /* Share position report with other clients */
+ uint8_t sharePosition_valid; /**< Must be set to true if sharePosition is being passed */
+ uint8_t sharePosition;
+ /**< Allow to share the position report with the other QMI_LOC clients \n
+ \item 0x00(FALSE) Do not share the position report
+ \item 0x01(TRUE) Share the position report
+ If this optional TLV is not set, the GPS engine allows the position sharing.
+ \vspace{-0.18in} \end{itemize1}
+ */
+}qmiLocStartReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point 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
+ - 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) /**< Wi-Fi access points were used to generate the fix */
+#define QMI_LOC_POS_TECH_MASK_SENSORS_V02 ((qmiLocPosTechMaskT_v02)0x00000008) /**< Sensors were used to generate the fix */
+#define QMI_LOC_POS_TECH_MASK_REFERENCE_LOCATION_V02 ((qmiLocPosTechMaskT_v02)0x00000010) /**< Reference Location was used to generate the fix */
+#define QMI_LOC_POS_TECH_MASK_INJECTED_COARSE_POSITION_V02 ((qmiLocPosTechMaskT_v02)0x00000020) /**< Coarse position injected into the location engine was used to
+ generate the fix */
+#define QMI_LOC_POS_TECH_MASK_AFLT_V02 ((qmiLocPosTechMaskT_v02)0x00000040) /**< AFLT was used to generate the fix */
+#define QMI_LOC_POS_TECH_MASK_HYBRID_V02 ((qmiLocPosTechMaskT_v02)0x00000080) /**< GNSS and network-provided measurements 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 is 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 */
+ eQMI_LOC_SESS_STATUS_ENGINE_LOCKED_V02 = 7, /**< Fix request failed because the engine is locked */
+ 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
+ - Units: Weeks */
+
+ uint32_t gpsTimeOfWeekMs;
+ /**< Amount of time into the current GPS week. \n
+ - Units: Milliseconds */
+}qmiLocGPSTimeStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ float PDOP;
+ /**< Position dilution of precision.
+ \begin{itemize1}
+ \item Range: 1 (highest accuracy) to 50 (lowest accuracy)
+ \item PDOP = square root of (HDOP^2 + VDOP^2)
+ \vspace{-0.18in} \end{itemize1} */
+
+ float HDOP;
+ /**< Horizontal dilution of precision.
+ \begin{itemize1}
+ \item Range: 1 (highest accuracy) to 50 (lowest accuracy)
+ \vspace{-0.18in} \end{itemize1} */
+
+ float VDOP;
+ /**< Vertical dilution of precision.
+ \begin{itemize1}
+ \item Range: 1 (highest accuracy) to 50 (lowest accuracy)
+ \vspace{-0.18in} \end{itemize1} */
+}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 gyroscope 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 were used in calculating the position in the
+ position report.
+
+ Valid bitmasks: \begin{itemize1}
+ \item 0x00000001 -- SENSOR_USED_ ACCEL
+ \item 0x00000002 -- SENSOR_USED_ GYRO
+ \vspace{-0.18in} \end{itemize1} */
+
+ qmiLocSensorAidedMaskT_v02 aidingIndicatorMask;
+ /**< Specifies which results were aided by sensors.
+
+ Valid bitmasks: \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 (that is,
+ 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 */
+ eQMI_LOC_TIME_SRC_UNKNOWN_V02 = 13, /**< Source of the time is unknown */
+ eQMI_LOC_TIME_SRC_SYSTEM_TIMETICK_V02 = 14, /**< Time is derived from the system clock (better known as the slow clock);
+ GNSS time is maintained irrespective of the GNSS receiver state */
+ eQMI_LOC_TIME_SRC_QZSS_TOW_DECODE_V02 = 15, /**< Time is set after decoding QZSS satellites */
+ eQMI_LOC_TIME_SRC_BDS_TOW_DECODE_V02 = 16, /**< Time is set after decoding BDS satellites */
+ eQMI_LOC_TIME_SRC_GAL_TOW_DECODE_V02 = 17, /**< Time is set after decoding GAL satellites */
+ 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 */
+ eQMI_LOC_RELIABILITY_HIGH_V02 = 4, /**< Location reliability is high; strong cross-check passed */
+ 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; Sends the position report to the control point. */
+typedef struct {
+
+ /* Mandatory */
+ /* Session Status */
+ qmiLocSessionStatusEnumT_v02 sessionStatus;
+ /**< Session status.
+
+ Valid values: \n
+ - eQMI_LOC_SESS_STATUS_SUCCESS (0) -- Session was successful
+ - eQMI_LOC_SESS_STATUS_IN_PROGRESS (1) -- Session is 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 (2) -- Session failed
+ - eQMI_LOC_SESS_STATUS_TIMEOUT (3) -- Fix request failed because the session timed out
+ - eQMI_LOC_SESS_STATUS_USER_END (4) -- Fix request failed because the session was ended by the user
+ - eQMI_LOC_SESS_STATUS_BAD_PARAMETER (5) -- Fix request failed due to bad parameters in the request
+ - eQMI_LOC_SESS_STATUS_PHONE_OFFLINE (6) -- Fix request failed because the phone is offline
+ - eQMI_LOC_SESS_STATUS_ENGINE_LOCKED (7) -- Fix request failed because the engine is locked
+ */
+
+ /* Mandatory */
+ /* Session ID */
+ uint8_t sessionId;
+ /**< ID of the session that was specified in the Start request
+ QMI_LOC_START_REQ. \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).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -90.0 to 90.0 \begin{itemize1}
+ \item Positive values indicate northern latitude
+ \item Negative values indicate southern latitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* Optional */
+ /* Longitude */
+ uint8_t longitude_valid; /**< Must be set to true if longitude is being passed */
+ double longitude;
+ /**< Longitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -180.0 to 180.0 \begin{itemize1}
+ \item Positive values indicate eastern longitude
+ \item Negative values indicate western longitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* 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
+ - 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
+ - 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
+ - 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
+ - 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.
+ If both elliptical and horizontal uncertainties are specified in this message,
+ the confidence corresponds to the elliptical uncertainty. \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
+ - eQMI_LOC_RELIABILITY_NOT_SET (0) -- Location reliability is not set
+ - eQMI_LOC_RELIABILITY_VERY_LOW (1) -- Location reliability is very low; use it at your own risk
+ - eQMI_LOC_RELIABILITY_LOW (2) -- Location reliability is low; little or no cross-checking is possible
+ - eQMI_LOC_RELIABILITY_MEDIUM (3) -- Location reliability is medium; limited cross-check passed
+ - eQMI_LOC_RELIABILITY_HIGH (4) -- Location reliability is high; strong cross-check passed
+ */
+
+ /* Optional */
+ /* Horizontal Speed */
+ uint8_t speedHorizontal_valid; /**< Must be set to true if speedHorizontal is being passed */
+ float speedHorizontal;
+ /**< Horizontal speed.\n
+ - Units: Meters/second */
+
+ /* Optional */
+ /* Speed Uncertainty */
+ uint8_t speedUnc_valid; /**< Must be set to true if speedUnc is being passed */
+ float speedUnc;
+ /**< 3-D Speed uncertainty.\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
+ - 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
+ - Units: Meters */
+
+ /* Optional */
+ /* Vertical Uncertainty */
+ uint8_t vertUnc_valid; /**< Must be set to true if vertUnc is being passed */
+ float vertUnc;
+ /**< Vertical uncertainty.\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
+ - 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
+ - eQMI_LOC_RELIABILITY_NOT_SET (0) -- Location reliability is not set
+ - eQMI_LOC_RELIABILITY_VERY_LOW (1) -- Location reliability is very low; use it at your own risk
+ - eQMI_LOC_RELIABILITY_LOW (2) -- Location reliability is low; little or no cross-checking is possible
+ - eQMI_LOC_RELIABILITY_MEDIUM (3) -- Location reliability is medium; limited cross-check passed
+ - eQMI_LOC_RELIABILITY_HIGH (4) -- Location reliability is high; strong cross-check passed
+ */
+
+ /* Optional */
+ /* Vertical Speed */
+ uint8_t speedVertical_valid; /**< Must be set to true if speedVertical is being passed */
+ float speedVertical;
+ /**< Vertical speed.\n
+ - Units: Meters/second */
+
+ /* Optional */
+ /* Heading */
+ uint8_t heading_valid; /**< Must be set to true if heading is being passed */
+ float heading;
+ /**< Heading.\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
+ - 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. */
+
+ /* 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
+ - QMI_LOC_POS_TECH_MASK_SATELLITE (0x00000001) -- Satellites were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_CELLID (0x00000002) -- Cell towers were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_WIFI (0x00000004) -- Wi-Fi access points were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_SENSORS (0x00000008) -- Sensors were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_REFERENCE_LOCATION (0x00000010) -- Reference Location was used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_INJECTED_COARSE_POSITION (0x00000020) -- Coarse position injected into the location engine was used to
+ generate the fix
+ - QMI_LOC_POS_TECH_MASK_AFLT (0x00000040) -- AFLT was used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_HYBRID (0x00000080) -- GNSS and network-provided measurements were used to
+ generate the fix
+ */
+
+ /* Optional */
+ /* Dilution of Precision */
+ uint8_t DOP_valid; /**< Must be set to true if DOP is being passed */
+ qmiLocDOPStructT_v02 DOP;
+ /**< \vspace{0.06in} \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
+ - 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
+ - Units: Seconds */
+
+ /* Optional */
+ /* GPS Time */
+ uint8_t gpsTime_valid; /**< Must be set to true if gpsTime is being passed */
+ qmiLocGPSTimeStructT_v02 gpsTime;
+ /**< \vspace{0.06in} \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
+ - 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
+ - eQMI_LOC_TIME_SRC_INVALID (0) -- Invalid time.
+ - eQMI_LOC_TIME_SRC_NETWORK_TIME_TRANSFER (1) -- Time is set by the 1X system
+ - eQMI_LOC_TIME_SRC_NETWORK_TIME_TAGGING (2) -- Time is set by WCDMA/GSM time tagging (that is,
+ associating network time with GPS time)
+ - eQMI_LOC_TIME_SRC_EXTERNAL_INPUT (3) -- Time is set by an external injection
+ - eQMI_LOC_TIME_SRC_TOW_DECODE (4) -- Time is set after decoding over-the-air GPS navigation data
+ from one GPS satellite
+ - eQMI_LOC_TIME_SRC_TOW_CONFIRMED (5) -- Time is set after decoding over-the-air GPS navigation data
+ from multiple satellites
+ - eQMI_LOC_TIME_SRC_TOW_AND_WEEK_CONFIRMED (6) -- Both time of the week and the GPS week number are known
+ - eQMI_LOC_TIME_SRC_NAV_SOLUTION (7) -- Time is set by the position engine after the fix is obtained
+ - eQMI_LOC_TIME_SRC_SOLVE_FOR_TIME (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 (9) -- Time is set after decoding GLO satellites
+ - eQMI_LOC_TIME_SRC_TIME_TRANSFORM (10) -- Time is set after transforming the GPS to GLO time
+ - eQMI_LOC_TIME_SRC_WCDMA_SLEEP_TIME_TAGGING (11) -- Time is set by the sleep time tag provided by the WCDMA network
+ - eQMI_LOC_TIME_SRC_GSM_SLEEP_TIME_TAGGING (12) -- Time is set by the sleep time tag provided by the GSM network
+ - eQMI_LOC_TIME_SRC_UNKNOWN (13) -- Source of the time is unknown
+ - eQMI_LOC_TIME_SRC_SYSTEM_TIMETICK (14) -- Time is derived from the system clock (better known as the slow clock);
+ GNSS time is maintained irrespective of the GNSS receiver state
+ - eQMI_LOC_TIME_SRC_QZSS_TOW_DECODE (15) -- Time is set after decoding QZSS satellites
+ - eQMI_LOC_TIME_SRC_BDS_TOW_DECODE (16) -- Time is set after decoding BDS satellites
+ - eQMI_LOC_TIME_SRC_GAL_TOW_DECODE (17) -- Time is set after decoding GAL satellites */
+
+ /* Optional */
+ /* Sensor Data Usage */
+ uint8_t sensorDataUsage_valid; /**< Must be set to true if sensorDataUsage is being passed */
+ qmiLocSensorUsageIndicatorStructT_v02 sensorDataUsage;
+ /**< \vspace{0.06in} \n Indicates 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. */
+
+ /* Optional */
+ /* SVs Used to Calculate the Fix */
+ uint8_t gnssSvUsedList_valid; /**< Must be set to true if gnssSvUsedList is being passed */
+ uint32_t gnssSvUsedList_len; /**< Must be set to # of elements in gnssSvUsedList */
+ uint16_t gnssSvUsedList[QMI_LOC_MAX_SV_USED_LIST_LENGTH_V02];
+ /**< Each entry in the list contains the SV ID of a satellite
+ used for calculating this position report. The following
+ information is associated with each SV ID: \n
+ Range: \n
+ - For GPS: 1 to 32 \n
+ - For GLONASS: 65 to 96 \n
+ - For QZSS: 193 to 197 \n
+ - For BDS: 201 to 237 \n
+ - For GAL: 301 to 336
+ */
+
+ /* Optional */
+ /* Altitude Assumed */
+ uint8_t altitudeAssumed_valid; /**< Must be set to true if altitudeAssumed is being passed */
+ uint8_t altitudeAssumed;
+ /**< Indicates whether altitude is assumed or calculated: \begin{itemize1}
+ \item 0x00 (FALSE) -- Altitude is calculated
+ \item 0x01 (TRUE) -- Altitude is assumed; there may not be enough
+ satellites to determine the precise altitude
+ \vspace{-0.18in} \end{itemize1}*/
+
+ /* Optional */
+ /* Velocity ENU(East, North, Up) */
+ uint8_t velEnu_valid; /**< Must be set to true if velEnu is being passed */
+ float velEnu[QMI_LOC_ENU_ARRAY_LENGTH_V02];
+ /**< East, North, Up velocity.\n
+ - Units: Meters/second */
+
+ /* Optional */
+ /* Velocity uncertainty ENU(East, North, Up) */
+ uint8_t velUncEnu_valid; /**< Must be set to true if velUncEnu is being passed */
+ float velUncEnu[QMI_LOC_ENU_ARRAY_LENGTH_V02];
+ /**< East, North, Up velocity uncertainty.\n
+ - Units: Meters/second */
+}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 (Deprecated) */
+ eQMI_LOC_SV_SYSTEM_GLONASS_V02 = 5, /**< GLONASS satellite */
+ eQMI_LOC_SV_SYSTEM_BDS_V02 = 6, /**< BDS satellite */
+ eQMI_LOC_SV_SYSTEM_QZSS_V02 = 7, /**< QZSS satellite */
+ 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 */
+ eQMI_LOC_SV_STATUS_TRACK_V02 = 3, /**< SV is being tracked */
+ 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: \begin{itemize1}
+ \item 0x00000001 -- VALID_SYSTEM
+ \item 0x00000002 -- VALID_GNSS_SVID
+ \item 0x00000004 -- VALID_HEALTH_ STATUS
+ \item 0x00000008 -- VALID_PROCESS_ STATUS
+ \item 0x00000010 -- VALID_SVINFO_ MASK
+ \item 0x00000020 -- VALID_ELEVATION
+ \item 0x00000040 -- VALID_AZIMUTH
+ \item 0x00000080 -- VALID_SNR
+ \vspace{-0.18in} \end{itemize1} */
+
+ qmiLocSvSystemEnumT_v02 system;
+ /**< Indicates to which constellation this SV belongs.
+
+ Valid values: \n
+ - eQMI_LOC_SV_SYSTEM_GPS (1) -- GPS satellite
+ - eQMI_LOC_SV_SYSTEM_GALILEO (2) -- GALILEO satellite
+ - eQMI_LOC_SV_SYSTEM_SBAS (3) -- SBAS satellite
+ - eQMI_LOC_SV_SYSTEM_COMPASS (4) -- COMPASS satellite (Deprecated)
+ - eQMI_LOC_SV_SYSTEM_GLONASS (5) -- GLONASS satellite
+ - eQMI_LOC_SV_SYSTEM_BDS (6) -- BDS satellite
+ - eQMI_LOC_SV_SYSTEM_QZSS (7) -- QZSS satellite
+ */
+
+ uint16_t gnssSvId;
+ /**< GNSS SV ID.
+ \begin{itemize1}
+ \item Range: \begin{itemize1}
+ \item For GPS: 1 to 32
+ \item For GLONASS: 1 to 32
+ \item For SBAS: 120 to 158 and 183 to 187
+ \item For QZSS: 193 to 197
+ \item For BDS: 201 to 237
+ \item For GAL: 301 to 336
+ \end{itemize1} \end{itemize1}
+
+ The GPS and GLONASS SVs can be disambiguated using the system field. */
+
+ uint8_t healthStatus;
+ /**< Health status.
+ \begin{itemize1}
+ \item Range: 0 to 1; 0 = unhealthy, \n 1 = healthy
+ \vspace{-0.18in} \end{itemize1}*/
+
+ qmiLocSvStatusEnumT_v02 svStatus;
+ /**< SV processing status.
+
+ Valid values: \n
+ - eQMI_LOC_SV_STATUS_IDLE (1) -- SV is not being actively processed
+ - eQMI_LOC_SV_STATUS_SEARCH (2) -- The system is searching for this SV
+ - eQMI_LOC_SV_STATUS_TRACK (3) -- SV is being tracked
+ */
+
+ qmiLocSvInfoMaskT_v02 svInfoMask;
+ /**< Indicates whether almanac and ephemeris information is available. \n
+ Valid bitmasks:
+
+ - 0x01 -- SVINFO_HAS_EPHEMERIS \n
+ - 0x02 -- SVINFO_HAS_ALMANAC
+ */
+
+ float elevation;
+ /**< SV elevation angle.\n
+ - Units: Degrees \n
+ - Range: 0 to 90 */
+
+ float azimuth;
+ /**< SV azimuth angle.\n
+ - Units: Degrees \n
+ - Range: 0 to 360 */
+
+ float snr;
+ /**< SV signal-to-noise ratio. \n
+ - Units: dB-Hz */
+}qmiLocSvInfoStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Sends a satellite report to the control point. */
+typedef struct {
+
+ /* Mandatory */
+ /* Altitude Assumed */
+ uint8_t altitudeAssumed;
+ /**< Indicates whether altitude is assumed or calculated: \begin{itemize1}
+ \item 0x00 (FALSE) -- Valid altitude is calculated
+ \item 0x01 (TRUE) -- Valid altitude is assumed; there may not be
+ enough satellites to determine precise altitude
+ \vspace{-0.18in} \end{itemize1}*/
+
+ /* 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];
+ /**< \vspace{0.06in} \n SV information list. */
+}qmiLocEventGnssSvInfoIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Sends NMEA sentences to the control point */
+typedef struct {
+
+ /* Mandatory */
+ /* NMEA String */
+ char nmea[QMI_LOC_NMEA_STRING_MAX_LENGTH_V02 + 1];
+ /**< NMEA string.
+ \begin{itemize1}
+ \item Type: NULL-terminated string
+ \item Maximum string length (including NULL terminator): 201
+ \vspace{-0.18in} \end{itemize1}*/
+}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 */
+ eQMI_LOC_NI_USER_NOTIFY_VERIFY_PRIVACY_OVERRIDE_V02 = 5, /**< Notify and verify; privacy override */
+ 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 */
+ eQMI_LOC_NI_VX_MS_BASED_PREFERRED_MS_ASSISTED_ALLOWED_V02 = 4, /**< MS-based preferred, but MS-assisted allowed */
+ 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 message */
+ 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 */
+ eQMI_LOC_NI_VX_GSM_V02 = 9, /**< Encoding is GSM */
+ 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;
+ /**< Indicates 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
+ - Units: Seconds \n
+ - Range: 0 to 255 */
+
+ uint32_t numFixes;
+ /**< Number of fixes allowed. */
+
+ uint32_t timeBetweenFixes;
+ /**< Time between fixes. \n
+ - Units: Seconds */
+
+ qmiLocNiVxPosModeEnumT_v02 posMode;
+ /**< Position mode.
+ Valid values:
+
+ - eQMI_LOC_NI_VX_MS_ASSISTED_ONLY (1) -- MS-assisted only allowed
+ - eQMI_LOC_NI_VX_MS_BASED_ONLY (2) -- MS-based only allowed
+ - eQMI_LOC_NI_VX_MS_ASSISTED_PREFERRED_MS_BASED_ALLOWED (3) -- MS-assisted preferred, but MS-based allowed
+ - eQMI_LOC_NI_VX_MS_BASED_PREFERRED_MS_ASSISTED_ALLOWED (4) -- MS-based preferred, but MS-assisted allowed
+ */
+
+ qmiLocNiVxRequestorIdEncodingSchemeEnumT_v02 encodingScheme;
+ /**< VX encoding scheme.
+
+ Valid values:
+
+ - eQMI_LOC_NI_VX_OCTET (0) -- Encoding is Octet
+ - eQMI_LOC_NI_VX_EXN_PROTOCOL_MSG (1) -- Encoding is EXN protocol message
+ - eQMI_LOC_NI_VX_ASCII (2) -- Encoding is ASCII
+ - eQMI_LOC_NI_VX_IA5 (3) -- Encoding is IA5
+ - eQMI_LOC_NI_VX_UNICODE (4) -- Encoding is Unicode
+ - eQMI_LOC_NI_VX_SHIFT_JIS (5) -- Encoding is Shift JIS
+ - eQMI_LOC_NI_VX_KOREAN (6) -- Encoding is Korean
+ - eQMI_LOC_NI_VX_LATIN_HEBREW (7) -- Encoding is Latin Hebrew
+ - eQMI_LOC_NI_VX_LATIN (8) -- Encoding is Latin
+ - eQMI_LOC_NI_VX_GSM (9) -- Encoding is 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
+ - 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 */
+ eQMI_LOC_NI_SUPL_POSMETHOD_NO_POSITION_V02 = 10, /**< No position */
+ 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 */
+ eQMI_LOC_NI_SUPL_GSM_DEFAULT_V02 = 30, /**< Encoding is GSM default */
+ 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 MS-ISDN 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 */
+ eQMI_LOC_NI_SUPL_FORMAT_OSS_UNKNOWN_V02 = 2147483647, /**< SUPL unknown format */
+ 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
+ - eQMI_LOC_NI_SUPL_FORMAT_LOGICAL_NAME (0) -- SUPL logical name format
+ - eQMI_LOC_NI_SUPL_FORMAT_EMAIL_ADDRESS (1) -- SUPL email address format
+ - eQMI_LOC_NI_SUPL_FORMAT_MSISDN (2) -- SUPL MS-ISDN format
+ - eQMI_LOC_NI_SUPL_FORMAT_URL (3) -- SUPL URL format
+ - eQMI_LOC_NI_SUPL_FORMAT_SIP_URL (4) -- SUPL SIP URL format
+ - eQMI_LOC_NI_SUPL_FORMAT_MIN (5) -- SUPL MIN format
+ - eQMI_LOC_NI_SUPL_FORMAT_MDN (6) -- SUPL MDN format
+ - eQMI_LOC_NI_SUPL_FORMAT_IMSPUBLIC_IDENTITY (7) -- SUPL IMS public identity
+ - eQMI_LOC_NI_SUPL_FORMAT_OSS_UNKNOWN (2147483647) -- SUPL unknown format
+ */
+
+ 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
+ - Units: Meters */
+
+ uint8_t verticalAccuracy;
+ /**< Vertical accuracy. \n
+ - Units: Meters */
+
+ uint16_t maxLocAge;
+ /**< Maximum age of the location if the engine sends a previously
+ computed position. \n
+ - Units: Seconds */
+
+ uint8_t delay;
+ /**< Delay the server is willing to tolerate for the fix. \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. */
+
+ uint16_t port;
+ /**< IPv4 port. */
+}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. */
+}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.
+ \begin{itemize1}
+ \item Type: NULL-terminated string
+ \item Maximum string length (including NULL terminator): 256
+ \vspace{-0.18in} \end{itemize1}
+ */
+}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: \begin{itemize1}
+ \item 0x00000001 -- SUPL_SERVER_INFO
+ \item 0x00000002 -- SUPL_SESSION_ID
+ \item 0x00000004 -- SUPL_HASH
+ \item 0x00000008 -- SUPL_POS_METHOD
+ \item 0x00000010 -- SUPL_DATA_ CODING_SCHEME
+ \item 0x00000020 -- SUPL_REQUESTOR_ ID
+ \item 0x00000040 -- SUPL_CLIENT_ NAME
+ \item 0x00000080 -- SUPL_QOP
+ \item 0x00000100 -- SUPL_USER_RESP_ TIMER
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ 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:
+
+ - eQMI_LOC_NI_SUPL_POSMETHOD_AGPS_SETASSISTED (1) -- Set assisted
+ - eQMI_LOC_NI_SUPL_POSMETHOD_AGPS_SETBASED (2) -- Set based
+ - eQMI_LOC_NI_SUPL_POSMETHOD_AGPS_SETASSISTED_PREF (3) -- Set assisted preferred
+ - eQMI_LOC_NI_SUPL_POSMETHOD_AGPS_SETBASED_PREF (4) -- Set based preferred
+ - eQMI_LOC_NI_SUPL_POSMETHOD_AUTONOMOUS_GPS (5) -- Standalone GPS
+ - eQMI_LOC_NI_SUPL_POSMETHOD_AFLT (6) -- Advanced forward link trilateration
+ - eQMI_LOC_NI_SUPL_POSMETHOD_ECID (7) -- Exclusive chip ID
+ - eQMI_LOC_NI_SUPL_POSMETHOD_EOTD (8) -- Enhnaced observed time difference
+ - eQMI_LOC_NI_SUPL_POSMETHOD_OTDOA (9) -- Observed time delay of arrival
+ - eQMI_LOC_NI_SUPL_POSMETHOD_NO_POSITION (10) -- No position
+ */
+
+ qmiLocNiDataCodingSchemeEnumT_v02 dataCodingScheme;
+ /**< Data coding scheme applies to both the requestor ID and the client
+ name.
+
+ Valid values: \n
+ - eQMI_LOC_NI_SS_GERMAN (12) -- Language is German
+ - eQMI_LOC_NI_SS_ENGLISH (13) -- Language is English
+ - eQMI_LOC_NI_SS_ITALIAN (14) -- Language is Italian
+ - eQMI_LOC_NI_SS_FRENCH (15) -- Language is French
+ - eQMI_LOC_NI_SS_SPANISH (16) -- Language is Spanish
+ - eQMI_LOC_NI_SS_DUTCH (17) -- Language is Dutch
+ - eQMI_LOC_NI_SS_SWEDISH (18) -- Language is Swedish
+ - eQMI_LOC_NI_SS_DANISH (19) -- Language is Danish
+ - eQMI_LOC_NI_SS_PORTUGUESE (20) -- Language is Portuguese
+ - eQMI_LOC_NI_SS_FINNISH (21) -- Language is Finnish
+ - eQMI_LOC_NI_SS_NORWEGIAN (22) -- Language is Norwegian
+ - eQMI_LOC_NI_SS_GREEK (23) -- Language is Greek
+ - eQMI_LOC_NI_SS_TURKISH (24) -- Language is Turkish
+ - eQMI_LOC_NI_SS_HUNGARIAN (25) -- Language is Hungarian
+ - eQMI_LOC_NI_SS_POLISH (26) -- Language is Polish
+ - eQMI_LOC_NI_SS_LANGUAGE_UNSPEC (27) -- Language is unspecified
+ - eQMI_LOC_NI_SUPL_UTF8 (28) -- Encoding is UTF 8
+ - eQMI_LOC_NI_SUPL_UCS2 (29) -- Encoding is UCS 2
+ - eQMI_LOC_NI_SUPL_GSM_DEFAULT (30) -- Encoding is 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
+ - 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 the current location */
+ eQMI_LOC_NI_LOCATIONTYPE_INITIAL_LOCATION_V02 = 3, /**< Initial location */
+ 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
+ - eQMI_LOC_NI_SS_GERMAN (12) -- Language is German
+ - eQMI_LOC_NI_SS_ENGLISH (13) -- Language is English
+ - eQMI_LOC_NI_SS_ITALIAN (14) -- Language is Italian
+ - eQMI_LOC_NI_SS_FRENCH (15) -- Language is French
+ - eQMI_LOC_NI_SS_SPANISH (16) -- Language is Spanish
+ - eQMI_LOC_NI_SS_DUTCH (17) -- Language is Dutch
+ - eQMI_LOC_NI_SS_SWEDISH (18) -- Language is Swedish
+ - eQMI_LOC_NI_SS_DANISH (19) -- Language is Danish
+ - eQMI_LOC_NI_SS_PORTUGUESE (20) -- Language is Portuguese
+ - eQMI_LOC_NI_SS_FINNISH (21) -- Language is Finnish
+ - eQMI_LOC_NI_SS_NORWEGIAN (22) -- Language is Norwegian
+ - eQMI_LOC_NI_SS_GREEK (23) -- Language is Greek
+ - eQMI_LOC_NI_SS_TURKISH (24) -- Language is Turkish
+ - eQMI_LOC_NI_SS_HUNGARIAN (25) -- Language is Hungarian
+ - eQMI_LOC_NI_SS_POLISH (26) -- Language is Polish
+ - eQMI_LOC_NI_SS_LANGUAGE_UNSPEC (27) -- Language is unspecified
+ - eQMI_LOC_NI_SUPL_UTF8 (28) -- Encoding is UTF 8
+ - eQMI_LOC_NI_SUPL_UCS2 (29) -- Encoding is UCS 2
+ - eQMI_LOC_NI_SUPL_GSM_DEFAULT (30) -- Encoding is 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: \begin{itemize1}
+ \item 0x0001 -- INVOKE_ID_MASK
+ \item 0x0002 -- DATA_CODING_ SCHEME_MASK
+ \item 0x0004 -- NOTIFICATION_TEXT_ MASK
+ \item 0x0008 -- CLIENT_ADDRESS_ MASK
+ \item 0x0010 -- LOCATION_TYPE_ MASK
+ \item 0x0020 -- REQUESTOR_ID_MASK
+ \item 0x0040 -- CODEWORD_STRING_ MASK
+ \item 0x0080 -- SERVICE_TYPE_MASK
+ \item 0x0100 -- USER_RESP_TIMER_ MASK
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ uint8_t invokeId;
+ /**< Supplementary Services invoke ID. */
+
+ qmiLocNiDataCodingSchemeEnumT_v02 dataCodingScheme;
+ /**< Type of data encoding scheme for the text.
+ Applies to both the notification text and the client address.
+
+ Valid values: \n
+ - eQMI_LOC_NI_SS_GERMAN (12) -- Language is German
+ - eQMI_LOC_NI_SS_ENGLISH (13) -- Language is English
+ - eQMI_LOC_NI_SS_ITALIAN (14) -- Language is Italian
+ - eQMI_LOC_NI_SS_FRENCH (15) -- Language is French
+ - eQMI_LOC_NI_SS_SPANISH (16) -- Language is Spanish
+ - eQMI_LOC_NI_SS_DUTCH (17) -- Language is Dutch
+ - eQMI_LOC_NI_SS_SWEDISH (18) -- Language is Swedish
+ - eQMI_LOC_NI_SS_DANISH (19) -- Language is Danish
+ - eQMI_LOC_NI_SS_PORTUGUESE (20) -- Language is Portuguese
+ - eQMI_LOC_NI_SS_FINNISH (21) -- Language is Finnish
+ - eQMI_LOC_NI_SS_NORWEGIAN (22) -- Language is Norwegian
+ - eQMI_LOC_NI_SS_GREEK (23) -- Language is Greek
+ - eQMI_LOC_NI_SS_TURKISH (24) -- Language is Turkish
+ - eQMI_LOC_NI_SS_HUNGARIAN (25) -- Language is Hungarian
+ - eQMI_LOC_NI_SS_POLISH (26) -- Language is Polish
+ - eQMI_LOC_NI_SS_LANGUAGE_UNSPEC (27) -- Language is unspecified
+ - eQMI_LOC_NI_SUPL_UTF8 (28) -- Encoding is UTF 8
+ - eQMI_LOC_NI_SUPL_UCS2 (29) -- Encoding is UCS 2
+ - eQMI_LOC_NI_SUPL_GSM_DEFAULT (30) -- Encoding is 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
+ - eQMI_LOC_NI_LOCATIONTYPE_CURRENT_LOCATION (1) -- Current location
+ - eQMI_LOC_NI_LOCATIONTYPE_CURRENT_OR_LAST_KNOWN_LOCATION (2) -- Last known location; may be the current location
+ - eQMI_LOC_NI_LOCATIONTYPE_INITIAL_LOCATION (3) -- 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. */
+
+ uint16_t userResponseTimer;
+ /**< Time to wait for the user to respond. \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
+ - eQMI_LOC_NI_SERVICE_INTERACTION_ONGOING_NI_INCOMING_MO (1) -- Service interaction between ongoing NI and incoming MO sessions.
+ */
+}qmiLocNiVxServiceInteractionStructT_v02; /* Type */
+/**
+ @}
+ */
+
+typedef uint16_t qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02;
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_SUPPORTED_NETWORK_WLAN_V02 ((qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02)0x0001) /**< Denotes that WLAN measurements are allowed as part of location ID
+ and multiple location IDs in the SUPL_POS_INIT message. */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_SUPPORTED_NETWORK_GSM_V02 ((qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02)0x0002) /**< Denotes that GSM measurements are allowed as part of location ID
+ and multiple location ID in the SUPL_POS_INIT message. */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_SUPPORTED_NETWORK_WCDMA_V02 ((qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02)0x0004) /**< Denotes that WCDMA measurements are allowed as part of location ID
+ and multiple location ID in the SUPL_POS_INIT message. */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_SUPPORTED_NETWORK_CDMA_V02 ((qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02)0x0008) /**< Denotes that CDMA measurements are allowed as part of location ID
+ and multiple location ID in the SUPL_POS_INIT message. */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_SUPPORTED_NETWORK_HRDP_V02 ((qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02)0x0010) /**< Denotes that HRDP measurements are allowed as part of location ID
+ and multiple location ID in the SUPL_POS_INIT message. */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_SUPPORTED_NETWORK_UMB_V02 ((qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02)0x0020) /**< Denotes that UMB measurements are allowed as part of location ID
+ and multiple location ID in the SUPL_POS_INIT message. */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_SUPPORTED_NETWORK_LTE_V02 ((qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02)0x0040) /**< Denotes that LTE measurements are allowed as part of location ID
+ and multiple location ID in the SUPL_POS_INIT message. */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_SUPPORTED_NETWORK_WIMAX_V02 ((qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02)0x0080) /**< Denotes that WIMAX measurements are allowed as part of location ID
+ and multiple location ID in the SUPL_POS_INIT message. */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_SUPPORTED_NETWORK_HISTORIC_V02 ((qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02)0x0100) /**< Denotes that historical information is allowed as part of
+ multiple location ID in the SUPL_POS_INIT message. */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_SUPPORTED_NETWORK_NONSVRV_V02 ((qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02)0x0200) /**< Denotes that information about nonserving cells is allowed
+ as part of multiple location ID in the SUPL_POS_INIT message. */
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCNISUPLVER2EXTTRIGGERTYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_SUPL_VER_2_EXT_TRIGGER_TYPE_SINGLE_SHOT_V02 = -1, /**< SUPL INIT message indicates a request for a single shot
+ triggered session */
+ eQMI_LOC_SUPL_VER_2_EXT_TRIGGER_TYPE_PERIODIC_V02 = 0, /**< SUPL INIT message indicates a request for a periodic
+ triggered session */
+ eQMI_LOC_SUPL_VER_2_EXT_TRIGGER_TYPE_AREA_EVENT_V02 = 1, /**< SUPL INIT message indicates a request for an area event
+ triggered session */
+ QMILOCNISUPLVER2EXTTRIGGERTYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocNiSuplVer2ExtTriggerTypeEnumT_v02;
+/**
+ @}
+ */
+
+typedef uint16_t qmiLocNiSuplVer2ExtGnssTypeMaskT_v02;
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_GNSS_GPS_V02 ((qmiLocNiSuplVer2ExtGnssTypeMaskT_v02)0x0001) /**< GPS is allowed to be used as the positioning technology */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_GNSS_GLONASS_V02 ((qmiLocNiSuplVer2ExtGnssTypeMaskT_v02)0x0002) /**< GLONASS is allowed to be used as the positioning technology */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_GNSS_GALILEO_V02 ((qmiLocNiSuplVer2ExtGnssTypeMaskT_v02)0x0004) /**< Galileo is allowed to be used as the positioning technology */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_GNSS_SBAS_V02 ((qmiLocNiSuplVer2ExtGnssTypeMaskT_v02)0x0008) /**< SBAS is allowed to be used as the positioning technology */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_GNSS_QZSS_V02 ((qmiLocNiSuplVer2ExtGnssTypeMaskT_v02)0x0010) /**< QZSS is allowed to be used as the positioning technology */
+#define QMI_LOC_SUPL_VER_2_EXT_MASK_GNSS_MODERN_GPS_V02 ((qmiLocNiSuplVer2ExtGnssTypeMaskT_v02)0x0020) /**< Modern GPS is allowed to be used as the positioning technology */
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ qmiLocNiSuplVer2ExtSupportedNetworksMaskT_v02 supportedNetworksMask;
+ /**< Specifies which type of network measurements are allowed to be sent as
+ part of the Location ID or Multiple Location IDs parameter in the
+ SUPL_POS_INIT message (refer to 3GPP \hyperref[TS 03.32]{TS 03.32}).
+
+ Valid bitmasks: \begin{itemize1}
+ \item 0x0001 -- SUPPORTED_NETWORK_ WLAN
+ \item 0x0002 -- SUPPORTED_NETWORK_ GSM
+ \item 0x0004 -- SUPPORTED_NETWORK_ WCDMA
+ \item 0x0008 -- SUPPORTED_NETWORK_ CDMA
+ \item 0x0010 -- SUPPORTED_NETWORK_ HRDP
+ \item 0x0020 -- SUPPORTED_NETWORK_ UMB
+ \item 0x0040 -- SUPPORTED_NETWORK_ LTE
+ \item 0x0080 -- SUPPORTED_NETWORK_ WIMAX
+ \item 0x0100 -- SUPPORTED_NETWORK_ HISTORIC
+ \item 0x0200 -- SUPPORTED_NETWORK_ NONSVRV
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ qmiLocNiSuplVer2ExtTriggerTypeEnumT_v02 triggerType;
+ /**< Specifies the type of session trigger requested in the
+ SUPL_POS_INIT message (refer to 3GPP \hyperref[TS 03.32]{TS 03.32}).
+
+ Valid values: \n
+ - eQMI_LOC_SUPL_VER_2_EXT_TRIGGER_TYPE_SINGLE_SHOT (-1) -- SUPL INIT message indicates a request for a single shot
+ triggered session
+ - eQMI_LOC_SUPL_VER_2_EXT_TRIGGER_TYPE_PERIODIC (0) -- SUPL INIT message indicates a request for a periodic
+ triggered session
+ - eQMI_LOC_SUPL_VER_2_EXT_TRIGGER_TYPE_AREA_EVENT (1) -- SUPL INIT message indicates a request for an area event
+ triggered session
+ */
+
+ qmiLocNiSuplVer2ExtGnssTypeMaskT_v02 gnssType;
+ /**< Specifies which GNSS technologies are allowed as positioning
+ technologies.
+
+ Valid bitmasks: \n
+ - 0x0001 -- GNSS_GPS \n
+ - 0x0002 -- GNSS_GLONASS \n
+ - 0x0004 -- GNSS_GALILEO \n
+ - 0x0008 -- GNSS_SBAS \n
+ - 0x0010 -- GNSS_QZSS \n
+ - 0x0020 -- GNSS_MODERN_GPS
+ */
+}qmiLocNiSuplVer2ExtStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ char eslpUrl[QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02 + 1];
+ /**< ESLP URL. \n
+ Maximum length: 255 bytes */
+}qmiLocEmergencyNotificationStructT_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
+ - eQMI_LOC_NI_USER_NO_NOTIFY_NO_VERIFY (1) -- No notification and no verification required
+ - eQMI_LOC_NI_USER_NOTIFY_ONLY (2) -- Notify only; no verification required
+ - eQMI_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP (3) -- Notify and verify, but no response required.
+ - eQMI_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP (4) -- Notify and verify, and require a response
+ - eQMI_LOC_NI_USER_NOTIFY_VERIFY_PRIVACY_OVERRIDE (5) -- Notify and verify; privacy override
+ */
+
+ /* Optional */
+ /* Network Initiated Vx Request */
+ uint8_t NiVxInd_valid; /**< Must be set to true if NiVxInd is being passed */
+ qmiLocNiVxNotifyVerifyStructT_v02 NiVxInd;
+ /**< \vspace{0.06in} \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;
+ /**< \vspace{0.06in} \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;
+ /**< \vspace{0.06in} \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;
+ /**< \vspace{0.06in} \n Optional NI service interaction payload. */
+
+ /* Optional */
+ /* Network Initiated SUPL Version 2 Extension */
+ uint8_t NiSuplVer2ExtInd_valid; /**< Must be set to true if NiSuplVer2ExtInd is being passed */
+ qmiLocNiSuplVer2ExtStructT_v02 NiSuplVer2ExtInd;
+ /**< \vspace{0.06in} \n Optional NI SUPL Version 2 Extension payload. When present,
+ this payload is to be used in conjunction with the SUPL
+ indication payload. */
+
+ /* Optional */
+ /* SUPL Emergency Notification */
+ uint8_t suplEmergencyNotification_valid; /**< Must be set to true if suplEmergencyNotification is being passed */
+ qmiLocEmergencyNotificationStructT_v02 suplEmergencyNotification;
+ /**< \vspace{0.06in} \n This specifies that the corresponding NI notification is an
+ emergency notification. Emergency notification
+ can be given even without an Emergency SUPL Location Platform (ESLP)
+ address. */
+}qmiLocEventNiNotifyVerifyReqIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ char serverUrl[QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02 + 1];
+ /**< Assistance server URL.
+ \begin{itemize1}
+ \item Type: NULL-terminated string
+ \item Maximum string length (including NULL terminator): 256
+ \vspace{-0.18in} \end{itemize1} */
+}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
+ - 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;
+ /**< \vspace{0.06in} \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). */
+
+ uint32_t maxPartSize;
+ /**< Maximum allowable predicted orbits file chunk size (in bytes). */
+}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;
+ /**< \vspace{0.06in} \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;
+ /**< \vspace{0.06in} \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).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -90.0 to 90.0 \begin{itemize1}
+ \item Positive values indicate northern latitude
+ \item Negative values indicate southern latitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* Mandatory */
+ /* Longitude */
+ double longitude;
+ /**< Longitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -180.0 to 180.0 \begin{itemize1}
+ \item Positive values indicate eastern longitude
+ \item Negative values indicate western longitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* Mandatory */
+ /* Circular Horizontal Uncertainty */
+ float horUncCircular;
+ /**< Horizontal position uncertainty (circular).\n
+ - Units: Meters */
+
+ /* Mandatory */
+ /* UTC Timestamp */
+ uint64_t timestampUtc;
+ /**< UTC timestamp.
+ \begin{itemize1}
+ \item Units: Milliseconds since Jan. 1, 1970
+ \vspace{-0.18in} \end{itemize1} */
+}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 */
+ eQMI_LOC_ENGINE_STATE_OFF_V02 = 2, /**< Location engine is off */
+ 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
+ - eQMI_LOC_ENGINE_STATE_ON (1) -- Location engine is on
+ - eQMI_LOC_ENGINE_STATE_OFF (2) -- Location engine is 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 */
+ eQMI_LOC_FIX_SESSION_FINISHED_V02 = 2, /**< Location fix session has ended */
+ 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
+ - eQMI_LOC_FIX_SESSION_STARTED (1) -- Location fix session has started
+ - eQMI_LOC_FIX_SESSION_FINISHED (2) -- Location fix session has ended
+ */
+
+ /* 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
+ - 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 */
+ eQMI_LOC_WIFI_STOP_PERIODIC_FIXES_V02 = 2, /**< Stop periodic fixes request */
+ 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 Wi-Fi request to the control point. */
+typedef struct {
+
+ /* Mandatory */
+ /* Request Type */
+ qmiLocWifiRequestEnumT_v02 requestType;
+ /**< Request type.
+
+ Valid values: \n
+ - eQMI_LOC_WIFI_START_PERIODIC_HI_FREQ_FIXES (0) -- Start periodic fixes with high frequency
+ - eQMI_LOC_WIFI_START_PERIODIC_KEEP_WARM (1) -- Keep warm for low frequency fixes without data downloads
+ - eQMI_LOC_WIFI_STOP_PERIODIC_FIXES (2) -- Stop periodic fixes request
+ */
+
+ /* 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
+ - Units: Milliseconds */
+
+ /* Optional */
+ /* E911 Mode */
+ uint8_t e911Mode_valid; /**< Must be set to true if e911Mode is being passed */
+ uint8_t e911Mode;
+ /**< Specifies whether GPS engine is in e911 mode when this
+ indication is sent to the client.
+
+ Valid values: \begin{itemize1}
+ \item 0x00 (FALSE) -- GPS engine is not in e911 mode
+ \item 0x01 (TRUE) -- GPS engine is in e911 mode
+ \end{itemize1}
+ */
+}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: \vspace{-0.06in} \n
+
+ samplingFrequency = samplesPerBatch * batchesPerSecond \vspace{-0.06in} \n
+
+ samplesPerBatch must be a nonzero positive value.
+ */
+
+ uint16_t batchesPerSecond;
+ /**< Number of sensor-data batches the GNSS location engine is to receive
+ per second. The rate is specified in an integral number of batches per
+ second (Hz). \vspace{-0.06in} \n
+
+ batchesPerSecond must be a nonzero positive value.
+ */
+}qmiLocSensorControlConfigSamplingSpecStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint8_t injectEnable;
+ /**< Indicates whether the GNSS location engine is ready to accept data from this
+ sensor.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 (TRUE) -- GNSS location engine is ready to accept sensor
+ data
+ \item 0x00 (FALSE) -- GNSS location engine is not ready to accept
+ sensor data
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ 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;
+ /**< \vspace{0.06in} \n Indicates whether the GNSS location engine is ready
+ to accept accelerometer sensor data.
+ */
+
+ /* Optional */
+ /* Gyroscope Accept Ready */
+ uint8_t gyroReady_valid; /**< Must be set to true if gyroReady is being passed */
+ qmiLocSensorReadyStatusStructT_v02 gyroReady;
+ /**< \vspace{0.06in} \n Indicates whether the GNSS location engine is ready
+ to accept gyroscope sensor data.
+ */
+
+ /* Optional */
+ /* Accelerometer Temperature Accept Ready */
+ uint8_t accelTemperatureReady_valid; /**< Must be set to true if accelTemperatureReady is being passed */
+ qmiLocSensorReadyStatusStructT_v02 accelTemperatureReady;
+ /**< \vspace{0.06in} \n Indicates whether the GNSS location engine is ready
+ to accept accelerometer temperature data.
+ */
+
+ /* Optional */
+ /* Gyroscope Temperature Accept Ready */
+ uint8_t gyroTemperatureReady_valid; /**< Must be set to true if gyroTemperatureReady is being passed */
+ qmiLocSensorReadyStatusStructT_v02 gyroTemperatureReady;
+ /**< \vspace{0.06in} \n Indicates whether the GNSS location engine is ready
+ to accept gyroscope temperature data.
+ */
+
+ /* Optional */
+ /* Calibrated Magnetometer Accept Ready */
+ uint8_t calibratedMagReady_valid; /**< Must be set to true if calibratedMagReady is being passed */
+ qmiLocSensorReadyStatusStructT_v02 calibratedMagReady;
+ /**< \vspace{0.06in} \n Indicates whether the GNSS location engine is ready
+ to accept calibrated magnetometer data.
+ */
+
+ /* Optional */
+ /* Uncalibrated Magnetometer Accept Ready */
+ uint8_t uncalibratedMagReady_valid; /**< Must be set to true if uncalibratedMagReady is being passed */
+ qmiLocSensorReadyStatusStructT_v02 uncalibratedMagReady;
+ /**< \vspace{0.06in} \n Indicates whether the GNSS location engine is ready
+ to accept uncalibrated magnetometer 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. */
+}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;
+ /**< Indicates whether the client is to start or stop sending an SPI status stream.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- Client is to start sending an SPI status stream
+ \item 0x00 (FALSE) -- Client is to stop sending an SPI status stream
+ \vspace{-0.18in} \end{itemize1}*/
+}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 */
+ eQMI_LOC_WWAN_TYPE_AGNSS_V02 = 1, /**< Bring up the WWAN type used for AGNSS connections */
+ eQMI_LOC_WWAN_TYPE_AGNSS_EMERGENCY_V02 = 2, /**< Bring up the WWAN type used for AGNSS Emergency connections */
+ 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 */
+ eQMI_LOC_SERVER_REQUEST_CLOSE_V02 = 2, /**< Close a connection to the location server */
+ 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. */
+
+ /* Mandatory */
+ /* Request Type */
+ qmiLocServerRequestEnumT_v02 requestType;
+ /**< Open or close a connection to the location server.
+
+ Valid values: \n
+ - eQMI_LOC_SERVER_REQUEST_OPEN (1) -- Open a connection to the location server
+ - eQMI_LOC_SERVER_REQUEST_CLOSE (2) -- Close a connection to the location server
+ */
+
+ /* Mandatory */
+ /* WWAN Type */
+ qmiLocWWANTypeEnumT_v02 wwanType;
+ /**< Identifies the WWAN type for this request.
+ Valid values: \n
+ - eQMI_LOC_WWAN_TYPE_INTERNET (0) -- Bring up the WWAN type used for an Internet connection
+ - eQMI_LOC_WWAN_TYPE_AGNSS (1) -- Bring up the WWAN type used for AGNSS connections
+ - eQMI_LOC_WWAN_TYPE_AGNSS_EMERGENCY (2) -- Bring up the WWAN type used for AGNSS Emergency connections
+ */
+}qmiLocEventLocationServerConnectionReqIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCNIGEOFENCEOPERATIONENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_NI_GEOFENCE_ADDED_V02 = 1, /**< An NI Geofence was added */
+ eQMI_LOC_NI_GEOFENCE_DELETED_V02 = 2, /**< An NI Geofence was deleted */
+ eQMI_LOC_NI_GEOFENCE_EDITED_V02 = 3, /**< An NI Geofence was edited; the control point can query the
+ Geofence to find the its current state */
+ QMILOCNIGEOFENCEOPERATIONENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocNiGeofenceOperationEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Informs the control point about
+ network-initiated Geofences. */
+typedef struct {
+
+ /* Mandatory */
+ /* Geofence ID */
+ uint32_t geofenceId;
+ /**< ID of the Geofence for which this
+ notification was generated. */
+
+ /* Mandatory */
+ /* Operation Type */
+ qmiLocNiGeofenceOperationEnumT_v02 operationType;
+ /**< Operation for which this notification was generated.
+
+ Valid values: \n
+ - eQMI_LOC_NI_GEOFENCE_ADDED (1) -- An NI Geofence was added
+ - eQMI_LOC_NI_GEOFENCE_DELETED (2) -- An NI Geofence was deleted
+ - eQMI_LOC_NI_GEOFENCE_EDITED (3) -- An NI Geofence was edited; the control point can query the
+ Geofence to find the its current state
+ */
+}qmiLocEventNiGeofenceNotificationIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGEOFENCEGENALERTENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GEOFENCE_GEN_ALERT_GNSS_UNAVAILABLE_V02 = 1, /**< GNSS is unavailable and GNSS position fixes
+ cannot be used to monitor Geofences */
+ eQMI_LOC_GEOFENCE_GEN_ALERT_GNSS_AVAILABLE_V02 = 2, /**< GNSS is now available and GNSS postion fixes can
+ be used to monitor Geofences */
+ eQMI_LOC_GEOFENCE_GEN_ALERT_OOS_V02 = 3, /**< The engine is out of service and no cell ID coverage
+ information is available */
+ eQMI_LOC_GEOFENCE_GEN_ALERT_TIME_INVALID_V02 = 4, /**< The engine has an invalid time */
+ QMILOCGEOFENCEGENALERTENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGeofenceGenAlertEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the control point of the
+ Geofence status. */
+typedef struct {
+
+ /* Mandatory */
+ /* Geofence General Alert */
+ qmiLocGeofenceGenAlertEnumT_v02 geofenceAlert;
+ /**< Specifies the Geofence general alert type.
+
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_GEN_ALERT_GNSS_UNAVAILABLE (1) -- GNSS is unavailable and GNSS position fixes
+ cannot be used to monitor Geofences
+ - eQMI_LOC_GEOFENCE_GEN_ALERT_GNSS_AVAILABLE (2) -- GNSS is now available and GNSS postion fixes can
+ be used to monitor Geofences
+ - eQMI_LOC_GEOFENCE_GEN_ALERT_OOS (3) -- The engine is out of service and no cell ID coverage
+ information is available
+ - eQMI_LOC_GEOFENCE_GEN_ALERT_TIME_INVALID (4) -- The engine has an invalid time
+ */
+}qmiLocEventGeofenceGenAlertIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGEOFENCEBREACHTYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GEOFENCE_BREACH_TYPE_ENTERING_V02 = 1, /**< Denotes that a client entered the Geofence */
+ eQMI_LOC_GEOFENCE_BREACH_TYPE_LEAVING_V02 = 2, /**< Denotes that a client left the Geofence */
+ QMILOCGEOFENCEBREACHTYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGeofenceBreachTypeEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ /* UTC Timestamp */
+ uint64_t timestampUtc;
+ /**< UTC timestamp.
+ \begin{itemize1}
+ \item Units: Milliseconds since Jan. 1, 1970
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* Latitude */
+ double latitude;
+ /**< Latitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -90.0 to 90.0 \begin{itemize1}
+ \item Positive values indicate northern latitude
+ \item Negative values indicate southern latitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* Longitude */
+ double longitude;
+ /**< Longitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -180.0 to 180.0 \begin{itemize1}
+ \item Positive values indicate eastern longitude
+ \item Negative values indicate western longitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* Horizontal Elliptical Uncertainty (Semi-Minor Axis) */
+ float horUncEllipseSemiMinor;
+ /**< Semi-minor axis of horizontal elliptical uncertainty.\n
+ - Units: Meters */
+
+ /* Horizontal Elliptical Uncertainty (Semi-Major Axis) */
+ float horUncEllipseSemiMajor;
+ /**< Semi-major axis of horizontal elliptical uncertainty.\n
+ - Units: Meters */
+
+ /* Elliptical Horizontal Uncertainty Azimuth */
+ float horUncEllipseOrientAzimuth;
+ /**< Elliptical horizontal uncertainty azimuth of orientation.\n
+ - Units: Decimal degrees \n
+ - Range: 0 to 180 */
+
+ /* Horizontal Speed validity bit */
+ uint8_t speedHorizontal_valid;
+ /**< Indicates whether the Horizontal speed field contains valid
+ information.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- Horizontal speed is valid
+ \item 0x00 (FALSE) -- Horizontal speed is invalid
+ and is to be ignored
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* Horizontal Speed */
+ float speedHorizontal;
+ /**< Horizontal speed.\n
+ - Units: Meters/second */
+
+ /* Altitude validity bit */
+ uint8_t altitudeWrtEllipsoid_valid;
+ /**< Indicates whether the altitude field contains valid
+ information.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- Altitude field is valid
+ \item 0x00 (FALSE) -- Altitude field is invalid
+ and is to be ignored
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ /* Altitude With Respect to Ellipsoid */
+ float altitudeWrtEllipsoid;
+ /**< Altitude with respect to the WGS84 ellipsoid.\n
+ - Units: Meters \n
+ - Range: -500 to 15883 */
+
+ /* Vertical Uncertainty validity bit */
+ uint8_t vertUnc_valid;
+ /**< Indicates whether the Vertical Uncertainty field contains valid
+ information.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- Vertical Uncertainty field is valid
+ \item 0x00 (FALSE) -- Vertical Uncertainty field is invalid
+ and is to be ignored
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* Vertical Uncertainty */
+ float vertUnc;
+ /**< Vertical uncertainty.\n
+ - Units: Meters */
+
+ /* Vertical Speed validity bit */
+ uint8_t speedVertical_valid;
+ /**< Indicates whether the Vertical Speed field contains valid
+ information.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- Vertical Speed field is valid
+ \item 0x00 (FALSE) -- Vertical Speed field is invalid
+ and is to be ignored
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* Vertical Speed */
+ float speedVertical;
+ /**< Vertical speed.\n
+ - Units: Meters/second */
+
+ /* heading validity bit */
+ uint8_t heading_valid;
+ /**< Indicates whether the Heading field contains valid
+ information.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- Heading field is valid
+ \item 0x00 (FALSE) -- Heading field is invalid
+ and is to be ignored
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* Heading */
+ float heading;
+ /**< Heading.\n
+ - Units: Degrees \n
+ - Range: 0 to 359.999 */
+}qmiLocGeofencePositionStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGEOFENCECONFIDENCEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GEOFENCE_CONFIDENCE_LOW_V02 = 0x01, /**< Geofence engine indicates a breach with
+ low confidence; this setting results in lower
+ power usage, and it can impact the yield because
+ incorrect breach events may be sent */
+ eQMI_LOC_GEOFENCE_CONFIDENCE_MED_V02 = 0x02, /**< (Default) Geofence engine indicates a breach with
+ medium confidence */
+ eQMI_LOC_GEOFENCE_CONFIDENCE_HIGH_V02 = 0x03, /**< Geofence engine indicates a breach with
+ high confidence; this setting results in higher
+ power usage */
+ QMILOCGEOFENCECONFIDENCEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGeofenceConfidenceEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the control point of
+ a Geofence breach event. */
+typedef struct {
+
+ /* Mandatory */
+ /* Geofence ID */
+ uint32_t geofenceId;
+ /**< ID of the Geofence for which this
+ notification was generated. */
+
+ /* Mandatory */
+ /* Geofence Breach Type */
+ qmiLocGeofenceBreachTypeEnumT_v02 breachType;
+ /**< The type of breach that generated this event.
+
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_BREACH_TYPE_ENTERING (1) -- Denotes that a client entered the Geofence
+ - eQMI_LOC_GEOFENCE_BREACH_TYPE_LEAVING (2) -- Denotes that a client left the Geofence
+ */
+
+ /* Optional */
+ /* Geofence Position */
+ uint8_t geofencePosition_valid; /**< Must be set to true if geofencePosition is being passed */
+ qmiLocGeofencePositionStructT_v02 geofencePosition;
+ /**< \vspace{0.06in} \n Position of the client when it breached the Geofence.
+ This TLV is included if the client configures the
+ Geofence to report position. The position is reported
+ at the same confidence level that was specified in the
+ Add Circular Geofence request. */
+
+ /* Optional */
+ /* Geofence Breach Confidence */
+ uint8_t breachConfidence_valid; /**< Must be set to true if breachConfidence is being passed */
+ qmiLocGeofenceConfidenceEnumT_v02 breachConfidence;
+ /**< \vspace{0.06in} \n
+ Given a breach event, the confidence determines the probability
+ that the breach happened at the Geofence boundary.
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_CONFIDENCE_LOW (0x01) -- Geofence engine indicates a breach with
+ low confidence; this setting results in lower
+ power usage, and it can impact the yield because
+ incorrect breach events may be sent
+ - eQMI_LOC_GEOFENCE_CONFIDENCE_MED (0x02) -- (Default) Geofence engine indicates a breach with
+ medium confidence
+ - eQMI_LOC_GEOFENCE_CONFIDENCE_HIGH (0x03) -- Geofence engine indicates a breach with
+ high confidence; this setting results in higher
+ power usage
+ */
+}qmiLocEventGeofenceBreachIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Recommends how pedometer reports are to be
+ sent to the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Request Pedometer Data */
+ uint8_t requestPedometerData;
+ /**< Indicates whether the GNSS location engine is requesting the client to
+ send pedometer data.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- GNSS location engine is requesting
+ pedometer data
+ \item 0x00 (FALSE) -- GNSS location engine is not requesting
+ pedometer data
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ /* Optional */
+ /* Reset Step Count */
+ uint8_t resetStepCount_valid; /**< Must be set to true if resetStepCount is being passed */
+ uint8_t resetStepCount;
+ /**< Indicates whether the location engine is to reset the step count.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- Pedometer step count is to be reset
+ \item 0x00 (FALSE) -- Pedometer step count is not to be reset
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* Optional */
+ /* Step Count Threshold */
+ uint8_t stepCountThreshold_valid; /**< Must be set to true if stepCountThreshold is being passed */
+ uint32_t stepCountThreshold;
+ /**< Specifies the number of steps to be sampled in a pedometer report,
+ as recommended by the the location engine. If the threshold is set to 0,
+ the location engine wants a pedometer report at every step event.
+ */
+}qmiLocEventPedometerControlIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Recommends how motion data reports are to be
+ sent to the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Request Motion Data */
+ uint8_t requestMotionData;
+ /**< Indicates whether the GNSS location engine is requesting
+ the client to send motion data.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- GNSS location engine is requesting
+ motion data
+ \item 0x00 (FALSE) -- GNSS location engine is not requesting
+ motion data
+ \vspace{-0.18in} \end{itemize1}
+ */
+}qmiLocEventMotionDataControlIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ /* Low Geofence ID */
+ uint32_t idLow;
+ /**< Contains the starting ID of the Geofence in the range of the continuous
+ range of Geofences that were breached at the same position. */
+
+ /* High Geofence ID */
+ uint32_t idHigh;
+ /**< Contains the ending ID of the Geofence in the range of the continuous
+ range of Geofences that were breached at the same position. */
+}qmiLocGeofenceIdContinuousStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the control point of a Geofence breach event by
+ batching all the Geofences that were breached. */
+typedef struct {
+
+ /* Mandatory */
+ /* Geofence Breach Type */
+ qmiLocGeofenceBreachTypeEnumT_v02 breachType;
+ /**< Type of breach that generated this event.
+
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_BREACH_TYPE_ENTERING (1) -- Denotes that a client entered the Geofence
+ - eQMI_LOC_GEOFENCE_BREACH_TYPE_LEAVING (2) -- Denotes that a client left the Geofence
+ */
+
+ /* Optional */
+ /* Geofence ID Continuous */
+ uint8_t geofenceIdContinuousList_valid; /**< Must be set to true if geofenceIdContinuousList is being passed */
+ uint32_t geofenceIdContinuousList_len; /**< Must be set to # of elements in geofenceIdContinuousList */
+ qmiLocGeofenceIdContinuousStructT_v02 geofenceIdContinuousList[QMI_LOC_MAX_GEOFENCE_ID_CONTINUOUS_LIST_LENGTH_V02];
+ /**< \vspace{0.06in} \n Each entry in the list contains the continuous range of Geofence IDs that were breached
+ at the same position. This list does not overlap with the discrete Geofence ID list. */
+
+ /* Optional */
+ /* Geofence ID Discrete */
+ uint8_t geofenceIdDiscreteList_valid; /**< Must be set to true if geofenceIdDiscreteList is being passed */
+ uint32_t geofenceIdDiscreteList_len; /**< Must be set to # of elements in geofenceIdDiscreteList */
+ uint32_t geofenceIdDiscreteList[QMI_LOC_MAX_GEOFENCE_ID_DISCRETE_LIST_LENGTH_V02];
+ /**< This list contains the Geofence IDs that were breached at the same position.
+ This list does not overlap with the continuous Geofence ID list. */
+
+ /* Optional */
+ /* Geofence Position */
+ uint8_t geofencePosition_valid; /**< Must be set to true if geofencePosition is being passed */
+ qmiLocGeofencePositionStructT_v02 geofencePosition;
+ /**< \vspace{0.06in} \n Position of the client when it breached the Geofence.
+ This TLV is included if the client configures the
+ Geofence to report its position. The position is reported
+ at the same confidence level that was specified in the
+ Add Circular Geofence request. */
+
+ /* Optional */
+ /* Geofence Breach Confidence */
+ uint8_t breachConfidence_valid; /**< Must be set to true if breachConfidence is being passed */
+ qmiLocGeofenceConfidenceEnumT_v02 breachConfidence;
+ /**< \vspace{0.06in} \n
+ Given a breach event, the confidence determines the probability
+ that the breach happened at the Geofence boundary.
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_CONFIDENCE_LOW (0x01) -- Geofence engine indicates a breach with
+ low confidence; this setting results in lower
+ power usage, and it can impact the yield because
+ incorrect breach events may be sent
+ - eQMI_LOC_GEOFENCE_CONFIDENCE_MED (0x02) -- (Default) Geofence engine indicates a breach with
+ medium confidence
+ - eQMI_LOC_GEOFENCE_CONFIDENCE_HIGH (0x03) -- Geofence engine indicates a breach with
+ high confidence; this setting results in higher
+ power usage
+ */
+
+ /* Optional */
+ /* Heading Uncertainty */
+ uint8_t headingUnc_valid; /**< Must be set to true if headingUnc is being passed */
+ float headingUnc;
+ /**< Heading uncertainty.\n
+ - Units: Degrees \n
+ - Range: 0 to 359.999 */
+
+ /* Optional */
+ /* Vertical Uncertainty */
+ uint8_t vertUnc_valid; /**< Must be set to true if vertUnc is being passed */
+ float vertUnc;
+ /**< Vertical uncertainty.\n
+ - Units: Meters */
+
+ /* Optional */
+ /* Speed Uncertainty */
+ uint8_t speedUnc_valid; /**< Must be set to true if speedUnc is being passed */
+ float speedUnc;
+ /**< 3-D speed uncertainty.\n
+ - Units: Meters/second */
+
+ /* Optional */
+ /* Horizontal Confidence */
+ uint8_t horConfidence_valid; /**< Must be set to true if horConfidence is being passed */
+ uint8_t horConfidence;
+ /**< Horizontal uncertainty confidence.\n
+ - Units: Percent \n
+ - Range: 0 to 99 */
+
+ /* Optional */
+ /* Vertical Confidence */
+ uint8_t vertConfidence_valid; /**< Must be set to true if vertConfidence is being passed */
+ uint8_t vertConfidence;
+ /**< Vertical uncertainty confidence.\n
+ - Units: Percent \n
+ - Range: 0 to 99 */
+
+ /* Optional */
+ /* Dilution of Precision */
+ uint8_t DOP_valid; /**< Must be set to true if DOP is being passed */
+ qmiLocDOPStructT_v02 DOP;
+ /**< \vspace{0.06in} \n Dilution of precision associated with this position. */
+
+ /* Optional */
+ /* SVs Used to Calculate the Fix */
+ uint8_t gnssSvUsedList_valid; /**< Must be set to true if gnssSvUsedList is being passed */
+ uint32_t gnssSvUsedList_len; /**< Must be set to # of elements in gnssSvUsedList */
+ uint16_t gnssSvUsedList[QMI_LOC_MAX_SV_USED_LIST_LENGTH_V02];
+ /**< Each entry in the list contains the SV ID of a satellite
+ used for calculating this position report. The following
+ information is associated with each SV ID: \n
+ Range: \n
+ - For GPS: 1 to 32 \n
+ - For GLONASS: 65 to 96 \n
+ - For SBAS: 120 to 158 and 183 to 187 \n
+ - For QZSS: 193 to 197 \n
+ - For BDS: 201 to 237 \n
+ - For GAL: 301 to 336
+ */
+}qmiLocEventGeofenceBatchedBreachIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGEOFENCEPROXIMITYTYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GEOFENCE_PROXIMITY_TYPE_IN_V02 = 1, /**< Denotes that a client is in proximity of the Geofence \n */
+ eQMI_LOC_GEOFENCE_PROXIMITY_TYPE_OUT_V02 = 2, /**< Denotes that a client is out of proximity of the Geofence */
+ QMILOCGEOFENCEPROXIMITYTYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGeofenceProximityTypeEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the control point of a Geofence proximity event. */
+typedef struct {
+
+ /* Mandatory */
+ /* Geofence Breach Type */
+ qmiLocGeofenceProximityTypeEnumT_v02 proximityType;
+ /**< Valid values: \n
+ - eQMI_LOC_GEOFENCE_PROXIMITY_TYPE_IN (1) -- Denotes that a client is in proximity of the Geofence \n
+ - eQMI_LOC_GEOFENCE_PROXIMITY_TYPE_OUT (2) -- Denotes that a client is out of proximity of the Geofence
+ */
+
+ /* Mandatory */
+ /* Geofence ID */
+ uint32_t geofenceId;
+ /**< Identifier of the Geofence that is in proximity to the handset.
+ */
+
+ /* Optional */
+ /* Geofence Context ID */
+ uint8_t contextId_valid; /**< Must be set to true if contextId is being passed */
+ uint32_t contextId;
+ /**< Identifier for the context of the Geofence to which the handset is in proximity.
+ A single Geofence may be associated with different contexts.
+ */
+}qmiLocEventGeofenceProximityIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGEOFENCEDWELLTYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GEOFENCE_DWELL_TYPE_INSIDE_V02 = 1, /**< Denotes that a client dwelled inside the Geofence */
+ eQMI_LOC_GEOFENCE_DWELL_TYPE_OUTSIDE_V02 = 2, /**< Denotes that a client dwelled outside the Geofence */
+ QMILOCGEOFENCEDWELLTYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGeofenceDwellTypeEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the control point of a Geofence dwell event by
+ batching all the Geofences that were dwelled in. */
+typedef struct {
+
+ /* Mandatory */
+ /* Geofence Dwell Type */
+ qmiLocGeofenceDwellTypeEnumT_v02 dwellType;
+ /**< Type of dwell event generated.
+
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_DWELL_TYPE_INSIDE (1) -- Denotes that a client dwelled inside the Geofence
+ - eQMI_LOC_GEOFENCE_DWELL_TYPE_OUTSIDE (2) -- Denotes that a client dwelled outside the Geofence
+ */
+
+ /* Optional */
+ /* Geofence ID Continuous */
+ uint8_t geofenceIdContinuousList_valid; /**< Must be set to true if geofenceIdContinuousList is being passed */
+ uint32_t geofenceIdContinuousList_len; /**< Must be set to # of elements in geofenceIdContinuousList */
+ qmiLocGeofenceIdContinuousStructT_v02 geofenceIdContinuousList[QMI_LOC_MAX_GEOFENCE_ID_CONTINUOUS_LIST_LENGTH_V02];
+ /**< Each entry in the list contains the continuous range of Geofence IDs in which a client dwelled.
+ This list does not overlap with the discrete Geofence ID list. */
+
+ /* Optional */
+ /* Geofence ID Discrete */
+ uint8_t geofenceIdDiscreteList_valid; /**< Must be set to true if geofenceIdDiscreteList is being passed */
+ uint32_t geofenceIdDiscreteList_len; /**< Must be set to # of elements in geofenceIdDiscreteList */
+ uint32_t geofenceIdDiscreteList[QMI_LOC_MAX_GEOFENCE_ID_DISCRETE_LIST_LENGTH_V02];
+ /**< This list contains the Geofence IDs in which a client dwelled.
+ This list does not overlap with the continuous Geofence ID list. */
+
+ /* Optional */
+ /* Geofence Position */
+ uint8_t geofencePosition_valid; /**< Must be set to true if geofencePosition is being passed */
+ qmiLocGeofencePositionStructT_v02 geofencePosition;
+ /**< \n The latest position calculated by the Geofence engine when
+ the dwell notification is sent. */
+
+ /* Optional */
+ /* Heading Uncertainty */
+ uint8_t headingUnc_valid; /**< Must be set to true if headingUnc is being passed */
+ float headingUnc;
+ /**< Heading uncertainty.\n
+ - Units: Degrees \n
+ - Range: 0 to 359.999 */
+
+ /* Optional */
+ /* Vertical Uncertainty */
+ uint8_t vertUnc_valid; /**< Must be set to true if vertUnc is being passed */
+ float vertUnc;
+ /**< Vertical uncertainty.\n
+ - Units: Meters */
+
+ /* Optional */
+ /* Speed Uncertainty */
+ uint8_t speedUnc_valid; /**< Must be set to true if speedUnc is being passed */
+ float speedUnc;
+ /**< 3-D speed uncertainty.\n
+ - Units: Meters/second */
+
+ /* Optional */
+ /* Horizontal Confidence */
+ uint8_t horConfidence_valid; /**< Must be set to true if horConfidence is being passed */
+ uint8_t horConfidence;
+ /**< Horizontal uncertainty confidence.\n
+ - Units: Percent \n
+ - Range: 0 to 99 */
+
+ /* Optional */
+ /* Vertical Confidence */
+ uint8_t vertConfidence_valid; /**< Must be set to true if vertConfidence is being passed */
+ uint8_t vertConfidence;
+ /**< Vertical uncertainty confidence.\n
+ - Units: Percent \n
+ - Range: 0 to 99 */
+
+ /* Optional */
+ /* Dilution of Precision */
+ uint8_t DOP_valid; /**< Must be set to true if DOP is being passed */
+ qmiLocDOPStructT_v02 DOP;
+ /**< \vspace{0.06in} \n Dilution of precision associated with this position. */
+
+ /* Optional */
+ /* SVs Used to Calculate the Fix */
+ uint8_t gnssSvUsedList_valid; /**< Must be set to true if gnssSvUsedList is being passed */
+ uint32_t gnssSvUsedList_len; /**< Must be set to # of elements in gnssSvUsedList */
+ uint16_t gnssSvUsedList[QMI_LOC_MAX_SV_USED_LIST_LENGTH_V02];
+ /**< Each entry in the list contains the SV ID of a satellite
+ used for calculating this position report. The following
+ information is associated with each SV ID: \n
+ Range: \n
+ - For GPS: 1 to 32 \n
+ - For GLONASS: 65 to 96 \n
+ - For SBAS: 120 to 158 and 183 to 187 \n
+ - For QZSS: 193 to 197 \n
+ - For BDS: 201 to 237 \n
+ - For GAL: 301 to 336
+ */
+}qmiLocEventGeofenceBatchedDwellIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGDTSERVICEIDENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GDT_SERVICE_WWAN_V02 = 1, /**< GDT service for WWAN UL */
+ eQMI_LOC_GDT_SERVICE_WWAN_DL_V02 = 2, /**< GDT service for WWAN DL */
+ QMILOCGDTSERVICEIDENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGdtServiceIdEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGDTACCESSSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GDT_ACCESS_ALLOWED_V02 = 1, /**< GDT access to the service is allowed */
+ eQMI_LOC_GDT_ACCESS_FAILED_V02 = 2, /**< Any type of GDT access error */
+ eQMI_LOC_GDT_ACCESS_NOT_ALLOWED_V02 = 3, /**< GDT access to the service is not allowed */
+ QMILOCGDTACCESSSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGdtAccessStatusEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Requests the control point to transfer data. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Service ID */
+ qmiLocGdtServiceIdEnumT_v02 serviceId;
+ /**< Values: \n
+
+ - eQMI_LOC_GDT_SERVICE_WWAN (1) -- GDT service for WWAN UL
+ - eQMI_LOC_GDT_SERVICE_WWAN_DL (2) -- GDT service for WWAN DL */
+
+ /* Mandatory */
+ /* Session ID */
+ uint32_t sessionId;
+ /**< Session ID. */
+
+ /* Mandatory */
+ /* Data */
+ uint32_t filePath_len; /**< Must be set to # of elements in filePath */
+ char filePath[QMI_LOC_MAX_GDT_PATH_LEN_V02];
+ /**< File path to the data. \n
+ - Type: Array of bytes \n
+ - Maximum length of the array: 255
+ */
+}qmiLocEventGdtUploadBeginStatusReqIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGDTENDSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GDT_SUCCESS_V02 = 1, /**< The sent data was accepted */
+ eQMI_LOC_GDT_FAILED_V02 = 2, /**< The sent data was not accepted */
+ eQMI_LOC_GDT_INVALID_V02 = 3, /**< General error in the received data */
+ QMILOCGDTENDSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGdtEndStatusEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Requests the control point to report the status of the
+ transfered data. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Service ID */
+ qmiLocGdtServiceIdEnumT_v02 serviceId;
+ /**< Values: \n
+
+ - eQMI_LOC_GDT_SERVICE_WWAN (1) -- GDT service for WWAN UL
+ - eQMI_LOC_GDT_SERVICE_WWAN_DL (2) -- GDT service for WWAN DL */
+
+ /* Mandatory */
+ /* Session ID */
+ uint32_t sessionId;
+
+ /* Mandatory */
+ /* GDT End Status */
+ qmiLocGdtEndStatusEnumT_v02 endStatus;
+ /**< Values: \n
+
+ - eQMI_LOC_GDT_SUCCESS (1) -- The sent data was accepted
+ - eQMI_LOC_GDT_FAILED (2) -- The sent data was not accepted
+ - eQMI_LOC_GDT_INVALID (3) -- General error in the received data */
+}qmiLocEventGdtUploadEndReqIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint32_t qmiLocGdtDownloadReqMaskT_v02;
+#define QMI_LOC_GDT_DOWNLOAD_REQ_MASK_DBH_V02 ((qmiLocGdtDownloadReqMaskT_v02)0x00000001) /**< Bitmask to specify whether DBH is on or off for the request */
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Requests the control point to transfer data. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Service ID */
+ qmiLocGdtServiceIdEnumT_v02 serviceId;
+ /**< Values: \n
+
+ - eQMI_LOC_GDT_SERVICE_WWAN (1) -- GDT service for WWAN UL
+ - eQMI_LOC_GDT_SERVICE_WWAN_DL (2) -- GDT service for WWAN DL */
+
+ /* Mandatory */
+ /* Session ID */
+ uint32_t sessionId;
+ /**< Session ID. */
+
+ /* Mandatory */
+ /* Interval After Which AP Must Respond to MP */
+ uint32_t respTimeoutInterval;
+ /**< Interval after which the AP must respond to the MP, in seconds. */
+
+ /* Mandatory */
+ /* Encoded GTP Client Information */
+ uint32_t clientInfo_len; /**< Must be set to # of elements in clientInfo */
+ uint8_t clientInfo[QMI_LOC_MAX_GTP_CL_INFO_LEN_V02];
+ /**< GTP client information encoded in asn.1 format. \n
+ - Type: Array of bytes \n
+ - Maximum length of the array: 1500
+ */
+
+ /* Mandatory */
+ /* Encoded Mobile Status Data */
+ uint32_t mobileStatusData_len; /**< Must be set to # of elements in mobileStatusData */
+ uint8_t mobileStatusData[QMI_LOC_MAX_GTP_MSD_LEN_V02];
+ /**< Mobile status data encoded in asn.1 format. \n
+ - Type: Array of bytes \n
+ - Maximum length of the array: 4000
+ */
+
+ /* Mandatory */
+ /* Data Filepath (Null terminated) */
+ uint32_t filePath_len; /**< Must be set to # of elements in filePath */
+ char filePath[QMI_LOC_MAX_GDT_PATH_LEN_V02];
+ /**< File path to the GTP response data that is applicable to MP. \n
+ - Type: Array of bytes \n
+ - Maximum length of the array: 255
+ */
+
+ /* Optional */
+ /* Power Budget Info */
+ uint8_t powerBudgetInfo_valid; /**< Must be set to true if powerBudgetInfo is being passed */
+ uint32_t powerBudgetInfo;
+ /**< Power budget information. */
+
+ /* Optional */
+ /* Power Budget Allowance */
+ uint8_t powerBudgetAllowance_valid; /**< Must be set to true if powerBudgetAllowance is being passed */
+ uint32_t powerBudgetAllowance;
+ /**< Power budget allowance. */
+
+ /* Optional */
+ /* Download Request Mask */
+ uint8_t downloadRequestMask_valid; /**< Must be set to true if downloadRequestMask is being passed */
+ qmiLocGdtDownloadReqMaskT_v02 downloadRequestMask;
+ /**< Download Request Mask */
+}qmiLocEventGdtDownloadBeginReqIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGDTRECEIVESTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GTP_RCV_STATUS_CONTINUE_V02 = 1, /**< Indicates that the AP is to continue sending more partitions to the MP */
+ eQMI_LOC_GTP_RCV_STATUS_DONE_V02 = 2, /**< Indicates that the AP is to stop sending partitions to the MP */
+ QMILOCGDTRECEIVESTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGdtReceiveStatusEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the control point after consuming the current data transfer. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Service ID */
+ qmiLocGdtServiceIdEnumT_v02 serviceId;
+ /**< Values: \n
+
+ - eQMI_LOC_GDT_SERVICE_WWAN (1) -- GDT service for WWAN UL
+ - eQMI_LOC_GDT_SERVICE_WWAN_DL (2) -- GDT service for WWAN DL */
+
+ /* Mandatory */
+ /* Session ID */
+ uint32_t sessionId;
+ /**< Session ID. */
+
+ /* Mandatory */
+ /* GDT Receive Status */
+ qmiLocGdtReceiveStatusEnumT_v02 status;
+ /**< Status indicating the continuation or termination of sending to the AP.
+ Valid values: \n
+ - eQMI_LOC_GTP_RCV_STATUS_CONTINUE (1) -- Indicates that the AP is to continue sending more partitions to the MP
+ - eQMI_LOC_GTP_RCV_STATUS_DONE (2) -- Indicates that the AP is to stop sending partitions to the MP
+ */
+}qmiLocEventGdtReceiveDoneIndMsgT_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 \n */
+ eQMI_LOC_GENERAL_FAILURE_V02 = 1, /**< Request failed because of a general failure \n */
+ eQMI_LOC_UNSUPPORTED_V02 = 2, /**< Request failed because it is not supported \n */
+ eQMI_LOC_INVALID_PARAMETER_V02 = 3, /**< Request failed because it contained invalid parameters \n */
+ eQMI_LOC_ENGINE_BUSY_V02 = 4, /**< Request failed because the engine is busy \n */
+ eQMI_LOC_PHONE_OFFLINE_V02 = 5, /**< Request failed because the phone is offline \n */
+ eQMI_LOC_TIMEOUT_V02 = 6, /**< Request failed because it timed out \n */
+ eQMI_LOC_CONFIG_NOT_SUPPORTED_V02 = 7, /**< Request failed because an undefined configuration was requested \n */
+ eQMI_LOC_INSUFFICIENT_MEMORY_V02 = 8, /**< Request failed because the engine could not allocate sufficient memory for the request \n */
+ eQMI_LOC_MAX_GEOFENCE_PROGRAMMED_V02 = 9, /**< Request failed because the maximum number of Geofences are already programmed \n */
+ eQMI_LOC_XTRA_VERSION_CHECK_FAILURE_V02 = 10, /**< Location service failed because of an XTRA version-based file format check failure */
+ QMILOCSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocStatusEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the control point of the end of a download session. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Service ID */
+ qmiLocGdtServiceIdEnumT_v02 serviceId;
+ /**< Values: \n
+
+ - eQMI_LOC_GDT_SERVICE_WWAN (1) -- GDT service for WWAN UL
+ - eQMI_LOC_GDT_SERVICE_WWAN_DL (2) -- GDT service for WWAN DL */
+
+ /* Mandatory */
+ /* Session ID */
+ uint32_t sessionId;
+ /**< Session ID. */
+
+ /* Mandatory */
+ /* GDT Download End Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the download session.
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocEventGdtDownloadEndReqIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Client can query the service revision using this message. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetServiceRevisionReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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. */
+
+ /* Optional */
+ /* GNSS Measurement Engine Firmware Version String */
+ uint8_t gnssMeFWVerString_valid; /**< Must be set to true if gnssMeFWVerString is being passed */
+ char gnssMeFWVerString[QMI_LOC_GNSS_ME_VERSION_STRING_MAX_LENGTH_V02 + 1];
+ /**< Version of the GNSS measurement engine software running under the LOC API.
+ \begin{itemize1}
+ \item Type: NULL-terminated string
+ \item Maximum string length (including NULL terminator): 128
+ \vspace{0.1in} \end{itemize1}
+
+ \textbf{Note:} This string is only provided on platforms that have
+ a measurement engine that supports this version string. On all other
+ platforms, this optional TLV is not provided. */
+
+ /* Optional */
+ /* GNSS Hosted Software Version String */
+ uint8_t gnssHostSWVerString_valid; /**< Must be set to true if gnssHostSWVerString is being passed */
+ char gnssHostSWVerString[QMI_LOC_GNSS_HOSTED_SW_VERSION_STRING_MAX_LENGTH_V02 + 1];
+ /**< Version of the GNSS hosted software running under the LOC API.
+ \begin{itemize1}
+ \item Type: NULL-terminated string
+ \item Maximum string length (including NULL terminator): 128
+ \vspace{0.1in}\end{itemize1}
+
+ \textbf{Note:} This string is only provided on hosted architectures
+ (measurement and position engine running on different processors) that
+ support this version string. On all other platforms, this optional TLV
+ is not provided. */
+
+ /* Optional */
+ /* GNSS Software Version String */
+ uint8_t gnssSWVerString_valid; /**< Must be set to true if gnssSWVerString is being passed */
+ char gnssSWVerString[QMI_LOC_GNSS_SW_VERSION_STRING_MAX_LENGTH_V02 + 1];
+ /**< Aggregate version of the GNSS software.
+ \begin{itemize1}
+ \item Type: NULL-terminated string
+ \item Maximum string length (including NULL terminator): 256
+ \vspace{-0.18in} \end{itemize1} */
+}qmiLocGetServiceRevisionIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Gets the fix criteria from the location engine. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetFixCriteriaReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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
+ - eQMI_LOC_ACCURACY_LOW (1) -- Low accuracy
+ - eQMI_LOC_ACCURACY_MED (2) -- Medium accuracy
+ - eQMI_LOC_ACCURACY_HIGH (3) -- High 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 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.
+
+ Valid values: \n
+ - eQMI_LOC_INTERMEDIATE_REPORTS_ON (1) -- Intermediate reports are turned on
+ - eQMI_LOC_INTERMEDIATE_REPORTS_OFF (2) -- Intermediate reports are turned off
+ */
+
+ /* Optional */
+ /* Minimum 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
+ - Units: Milliseconds */
+
+ /* Optional */
+ /* ID of the Application that Sent the Position Request */
+ uint8_t applicationId_valid; /**< Must be set to true if applicationId is being passed */
+ qmiLocApplicationIdStructT_v02 applicationId;
+ /**< \vspace{0.06in} \n Application provider, name, and version.*/
+
+ /* Optional */
+ /* Configuration for Altitude Assumed Info in GNSS SV Info Event */
+ uint8_t configAltitudeAssumed_valid; /**< Must be set to true if configAltitudeAssumed is being passed */
+ qmiLocConfigIncludeAltitudeAssumedInGnssSvInfoEnumT_v02 configAltitudeAssumed;
+ /**< Specifies the configuration to include Altitude Assumed information in the GNSS SV Info Event.
+ When enabled, an additional GNSS SV Info event indication is sent to the control
+ point that also includes the altitude assumed information.
+ If not specified, the configuration defaults to ENABLED.
+ Valid values: \n
+ - eQMI_LOC_ALTITUDE_ASSUMED_IN_GNSS_SV_INFO_ENABLED (1) -- Enable Altitude Assumed information in GNSS SV Info Event.
+ - eQMI_LOC_ALTITUDE_ASSUMED_IN_GNSS_SV_INFO_DISABLED (2) -- Disable Altitude Assumed information in GNSS SV Info Event.
+ */
+
+ /* Optional */
+ /* Minimum Interval Between Intermediate Position Reports */
+ uint8_t minIntermediatePositionReportInterval_valid; /**< Must be set to true if minIntermediatePositionReportInterval is being passed */
+ uint32_t minIntermediatePositionReportInterval;
+ /**< Minimum time interval for intermediate position reports, specified by the control point,
+ that, between the position reports elapsed time, must be longer than the interval time.
+ If this optional value is not set or set to the default value (0), the intermediate position
+ will be reported when it is ready. \n
+ - Units: Milliseconds \n
+ - Default: 0 ms
+ */
+
+ /* Optional */
+ /* Maximum Wait Time to Get a Position Report */
+ uint8_t positionReportTimeout_valid; /**< Must be set to true if positionReportTimeout is being passed */
+ uint32_t positionReportTimeout;
+ /**< Maximum time to work on each fix, specified by the control point.
+ The GPS engine returns QMI_ERR_INTERNAL if a position cannot be obtained
+ within the positionReportTimeout value. \n
+ - Units: Milliseconds \n
+ - Default: 255*1000 ms \n
+ - Range: 1000 - 255*1000 ms
+ */
+
+ /* Optional */
+ /* Share position report with other clients */
+ uint8_t sharePosition_valid; /**< Must be set to true if sharePosition is being passed */
+ uint8_t sharePosition;
+ /**< Allow to share the position report with the other QMI_LOC clients \n
+ \item 0x00(FALSE) Do not share the position report
+ \item 0x01(TRUE) Share the position report
+ \vspace{-0.18in} \end{itemize1}
+ */
+}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 the Notify/Verify request */
+ eQMI_LOC_NI_LCS_NOTIFY_VERIFY_DENY_V02 = 2, /**< User denied the Notify/Verify request */
+ eQMI_LOC_NI_LCS_NOTIFY_VERIFY_NORESP_V02 = 3, /**< User did not respond to the Notify/Verify request */
+ 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
+ - eQMI_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT (1) -- User accepted the Notify/Verify request
+ - eQMI_LOC_NI_LCS_NOTIFY_VERIFY_DENY (2) -- User denied the Notify/Verify request
+ - eQMI_LOC_NI_LCS_NOTIFY_VERIFY_NORESP (3) -- User did not respond to the Notify/Verify request
+ */
+
+ /* Mandatory */
+ /* Notification Type */
+ qmiLocNiNotifyVerifyEnumT_v02 notificationType;
+ /**< Type of notification/verification performed.
+
+ Valid values: \n
+ - eQMI_LOC_NI_USER_NO_NOTIFY_NO_VERIFY (1) -- No notification and no verification required
+ - eQMI_LOC_NI_USER_NOTIFY_ONLY (2) -- Notify only; no verification required
+ - eQMI_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP (3) -- Notify and verify, but no response required.
+ - eQMI_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP (4) -- Notify and verify, and require a response
+ - eQMI_LOC_NI_USER_NOTIFY_VERIFY_PRIVACY_OVERRIDE (5) -- Notify and verify; privacy override
+ */
+
+ /* Optional */
+ /* Network Initiated Vx Request */
+ uint8_t NiVxPayload_valid; /**< Must be set to true if NiVxPayload is being passed */
+ qmiLocNiVxNotifyVerifyStructT_v02 NiVxPayload;
+ /**< \vspace{0.06in} \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;
+ /**< \vspace{0.06in} \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;
+ /**< \vspace{0.06in} \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;
+ /**< \vspace{0.06in} \n Optional NI service interaction payload. */
+
+ /* Optional */
+ /* Network Initiated SUPL Version 2 Extension */
+ uint8_t NiSuplVer2ExtPayload_valid; /**< Must be set to true if NiSuplVer2ExtPayload is being passed */
+ qmiLocNiSuplVer2ExtStructT_v02 NiSuplVer2ExtPayload;
+ /**< \vspace{0.06in} \n Optional SUPL Version 2 Extension payload. */
+
+ /* Optional */
+ /* SUPL Emergency Notification */
+ uint8_t suplEmergencyNotification_valid; /**< Must be set to true if suplEmergencyNotification is being passed */
+ qmiLocEmergencyNotificationStructT_v02 suplEmergencyNotification;
+ /**< \vspace{0.06in} \n SUPL emergency notification payload. Emergency notification
+ can be given even without an ESLP address */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}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
+ - Units: Bytes */
+
+ /* Mandatory */
+ /* Total Parts */
+ uint16_t totalParts;
+ /**< Total number of parts into which the predicted orbits data is
+ divided. */
+
+ /* Mandatory */
+ /* Part Number */
+ uint16_t partNum;
+ /**< Number of the current predicted orbits data part; starts at 1. */
+
+ /* 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. \n
+ Valid values: \n
+ - eQMI_LOC_PREDICTED_ORBITS_XTRA (0) -- Default is QCOM-XTRA format.
+ */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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. */
+}qmiLocInjectPredictedOrbitsDataIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Gets the predicted orbits data source. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetPredictedOrbitsDataSourceReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Gets the predicted orbits data source. */
+typedef struct {
+
+ /* Mandatory */
+ /* Predicted Orbits Data Source Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the query request for a predicted orbits data source.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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 */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Gets the predicted orbits data validity. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetPredictedOrbitsDataValidityReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint64_t startTimeInUTC;
+ /**< Predicted orbits data is valid starting from this time. \n
+ - Units: Seconds (since Jan. 1, 1970)
+ */
+
+ uint16_t durationHours;
+ /**< Duration from the start time for which the data is valid.\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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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
+ - Units: Milliseconds */
+
+ /* Mandatory */
+ /* Time Uncertainty */
+ uint32_t timeUnc;
+ /**< Time uncertainty.\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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}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, /**< Wi-Fi 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 */
+ eQMI_LOC_ALT_SRC_OTHER_V02 = 9, /**< Other sources */
+ 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 */
+ eQMI_LOC_ALT_SRC_LINKAGE_FULLY_INDEPENDENT_V02 = 3, /**< Fully independent */
+ 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 */
+ eQMI_LOC_ALT_UNCERTAINTY_FULL_V02 = 2, /**< Altitude uncertainty applies to the position of the device
+ regardless of horizontal position (within the horizontal
+ uncertainty region, if provided) */
+ 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
+ - eQMI_LOC_ALT_SRC_UNKNOWN (0) -- Source is unknown
+ - eQMI_LOC_ALT_SRC_GPS (1) -- GPS is the source
+ - eQMI_LOC_ALT_SRC_CELL_ID (2) -- Cell ID provided the source
+ - eQMI_LOC_ALT_SRC_ENHANCED_CELL_ID (3) -- Source is enhanced cell ID
+ - eQMI_LOC_ALT_SRC_WIFI (4) -- Wi-Fi is the source
+ - eQMI_LOC_ALT_SRC_TERRESTRIAL (5) -- Terrestrial source
+ - eQMI_LOC_ALT_SRC_TERRESTRIAL_HYBRID (6) -- Hybrid terrestrial source
+ - eQMI_LOC_ALT_SRC_ALTITUDE_DATABASE (7) -- Altitude database is the source
+ - eQMI_LOC_ALT_SRC_BAROMETRIC_ALTIMETER (8) -- Barometric altimeter is the source
+ - eQMI_LOC_ALT_SRC_OTHER (9) -- Other sources
+ */
+
+ qmiLocAltSrcLinkageEnumT_v02 linkage;
+ /**< Specifies the dependency between the horizontal and
+ altitude position components.
+
+ Valid values: \n
+ - eQMI_LOC_ALT_SRC_LINKAGE_NOT_SPECIFIED (0) -- Not specified
+ - eQMI_LOC_ALT_SRC_LINKAGE_FULLY_INTERDEPENDENT (1) -- Fully interdependent
+ - eQMI_LOC_ALT_SRC_LINKAGE_DEPENDS_ON_LAT_LONG (2) -- Depends on latitude and longitude
+ - eQMI_LOC_ALT_SRC_LINKAGE_FULLY_INDEPENDENT (3) -- Fully independent
+ */
+
+ qmiLocAltSrcUncertaintyCoverageEnumT_v02 coverage;
+ /**< Specifies the region of uncertainty.
+
+ Valid values: \n
+ - eQMI_LOC_ALT_UNCERTAINTY_NOT_SPECIFIED (0) -- Not specified
+ - eQMI_LOC_ALT_UNCERTAINTY_POINT (1) -- Altitude uncertainty is valid at the injected horizontal
+ position coordinates only
+ - eQMI_LOC_ALT_UNCERTAINTY_FULL (2) -- 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 Wi-Fi */
+ 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 */
+ eQMI_LOC_POSITION_SRC_OTHER_V02 = 6, /**< Other sources */
+ 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).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -90.0 to 90.0 \begin{itemize1}
+ \item Positive values indicate northern latitude
+ \item Negative values indicate southern latitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1}
+ */
+
+ /* Optional */
+ /* Longitude */
+ uint8_t longitude_valid; /**< Must be set to true if longitude is being passed */
+ double longitude;
+ /**< Longitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -180.0 to 180.0 \begin{itemize1}
+ \item Positive values indicate eastern longitude
+ \item Negative values indicate western longitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1}
+ */
+
+ /* 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
+ - 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 (3GPP \hyperref[TS 03.32]{TS 03.32).
+ \begin{itemize1}
+ \item Units: Percent (1 to 99)
+ \item 0, 101 to 255 -- invalid value
+ \item If 100 is received, reinterpret to 99
+ \end{itemize1}
+ This field must be specified together with horizontal uncertainty.
+ If not specified when horUncCircular is set, the default value is 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
+ - eQMI_LOC_RELIABILITY_NOT_SET (0) -- Location reliability is not set
+ - eQMI_LOC_RELIABILITY_VERY_LOW (1) -- Location reliability is very low; use it at your own risk
+ - eQMI_LOC_RELIABILITY_LOW (2) -- Location reliability is low; little or no cross-checking is possible
+ - eQMI_LOC_RELIABILITY_MEDIUM (3) -- Location reliability is medium; limited cross-check passed
+ - eQMI_LOC_RELIABILITY_HIGH (4) -- Location reliability is high; strong cross-check passed
+ */
+
+ /* 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.
+ \begin{itemize1}
+ \item Units: Meters \begin{itemize1}
+ \item Positive = height
+ \item Negative = depth
+ \vspace{-0.18in} \end{itemize1} \end{itemize1}*/
+
+ /* 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
+ - 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
+ - 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 (3GPP \hyperref[TS 03.32]{TS 03.32}).
+ \begin{itemize1}
+ \item Units: Percent (0-99)
+ \item 0 -- invalid value
+ \item 100 to 256 -- not used
+ \item If 100 is received, reinterpret to 99
+ \end{itemize1}
+ 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
+ - eQMI_LOC_RELIABILITY_NOT_SET (0) -- Location reliability is not set
+ - eQMI_LOC_RELIABILITY_VERY_LOW (1) -- Location reliability is very low; use it at your own risk
+ - eQMI_LOC_RELIABILITY_LOW (2) -- Location reliability is low; little or no cross-checking is possible
+ - eQMI_LOC_RELIABILITY_MEDIUM (3) -- Location reliability is medium; limited cross-check passed
+ - eQMI_LOC_RELIABILITY_HIGH (4) -- Location reliability is high; strong cross-check passed
+ */
+
+ /* Optional */
+ /* Altitude Source Info */
+ uint8_t altSourceInfo_valid; /**< Must be set to true if altSourceInfo is being passed */
+ qmiLocAltitudeSrcInfoStructT_v02 altSourceInfo;
+ /**< \vspace{0.06in} \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
+ - 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
+ - Units: Milliseconds */
+
+ /* Optional */
+ /* Position Source */
+ uint8_t positionSrc_valid; /**< Must be set to true if positionSrc is being passed */
+ qmiLocPositionSrcEnumT_v02 positionSrc;
+ /**< Source from which this position was obtained.
+
+ Valid values: \n
+ - eQMI_LOC_POSITION_SRC_GNSS (0) -- Position source is GNSS
+ - eQMI_LOC_POSITION_SRC_CELLID (1) -- Position source is Cell ID
+ - eQMI_LOC_POSITION_SRC_ENH_CELLID (2) -- Position source is Enhanced Cell ID
+ - eQMI_LOC_POSITION_SRC_WIFI (3) -- Position source is Wi-Fi
+ - eQMI_LOC_POSITION_SRC_TERRESTRIAL (4) -- Position source is Terrestrial
+ - eQMI_LOC_POSITION_SRC_GNSS_TERRESTRIAL_HYBRID (5) -- Position source is GNSS Terrestrial Hybrid
+ - eQMI_LOC_POSITION_SRC_OTHER (6) -- Other sources
+
+ If altitude is specified and the altitude source is not specified, the engine
+ assumes that the altitude was obtained using the specified position source. \n
+ If both altitude and altitude source are specified, the engine assumes
+ that only latitude and longitude were obtained using the specified position
+ source.
+ */
+
+ /* Optional */
+ /* Raw Circular Horizontal Uncertainty */
+ uint8_t rawHorUncCircular_valid; /**< Must be set to true if rawHorUncCircular is being passed */
+ float rawHorUncCircular;
+ /**< Horizontal position uncertainty (circular) without any optimization.\n
+ - Units: Meters */
+
+ /* Optional */
+ /* Raw Horizontal Confidence */
+ uint8_t rawHorConfidence_valid; /**< Must be set to true if rawHorConfidence is being passed */
+ uint8_t rawHorConfidence;
+ /**< Horizontal confidence associated with raw horizontal uncertainty,
+ as defined by ETSI TS 101 109 (3GPP \hyperref[TS 03.32]{TS 03.32}).
+ \begin{itemize1}
+ \item Units: Percent (1 to 99)
+ \item 0, 101 to 255 -- invalid value
+ \item If 100 is received, reinterpret to 99
+ \end{itemize1}
+ This field must be specified together with raw horizontal uncertainty.
+ If not specified when rawHorUncCircular is set, the default value is 50. */
+
+ /* Optional */
+ /* Free CPI or On-Demand CPI */
+ uint8_t onDemandCpi_valid; /**< Must be set to true if onDemandCpi is being passed */
+ uint8_t onDemandCpi;
+ /**< If this position injection is requested by the modem.
+ Type : boolean
+ Valid values: \begin{itemize1}
+ \item 0x00 (FALSE) -- The position injection was not requested by the modem(Free CPI).
+ \item 0x01 (TRUE) -- The position injection was requested by the modem(On-Demand CPI).
+ \end{itemize1} */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}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 */
+ eQMI_LOC_LOCK_ALL_V02 = 4, /**< Lock all position sessions */
+ 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
+ - eQMI_LOC_LOCK_NONE (1) -- Do not lock any position sessions
+ - eQMI_LOC_LOCK_MI (2) -- Lock mobile-initiated position sessions
+ - eQMI_LOC_LOCK_MT (3) -- Lock mobile-terminated position sessions
+ - eQMI_LOC_LOCK_ALL (4) -- Lock all position sessions
+ */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocSetEngineLockIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Gets the location engine lock. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetEngineLockReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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
+ - eQMI_LOC_LOCK_NONE (1) -- Do not lock any position sessions
+ - eQMI_LOC_LOCK_MI (2) -- Lock mobile-initiated position sessions
+ - eQMI_LOC_LOCK_MT (3) -- Lock mobile-terminated position sessions
+ - eQMI_LOC_LOCK_ALL (4) -- Lock all position sessions
+ */
+}qmiLocGetEngineLockIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Sets the SBAS configuration. */
+typedef struct {
+
+ /* Mandatory */
+ /* SBAS Config */
+ uint8_t sbasConfig;
+ /**< Indicates whether SBAS configuration is enabled.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- SBAS configuration is enabled
+ \item 0x00 (FALSE) -- SBAS configuration is disabled
+ \vspace{-0.18in} \end{itemize1}*/
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocSetSbasConfigIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Gets the SBAS configuration from the location engine. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetSbasConfigReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* SBAS Config */
+ uint8_t sbasConfig_valid; /**< Must be set to true if sbasConfig is being passed */
+ uint8_t sbasConfig;
+ /**< Indicates whether SBAS configuration is enabled.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- SBAS configuration is enabled
+ \item 0x00 (FALSE) -- SBAS configuration is disabled
+ \vspace{-0.18in} \end{itemize1}*/
+}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 */
+#define QMI_LOC_NMEA_MASK_PQXFI_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000020) /**< Enable PQXFI type */
+#define QMI_LOC_NMEA_MASK_PSTIS_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000040) /**< Enable PSTIS type */
+#define QMI_LOC_NMEA_MASK_GLGSV_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000080) /**< Enable GLGSV type */
+#define QMI_LOC_NMEA_MASK_GNGSA_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000100) /**< Enable GNGSA type */
+#define QMI_LOC_NMEA_MASK_GNGNS_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000200) /**< Enable GNGNS type */
+#define QMI_LOC_NMEA_MASK_GARMC_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000400) /**< Enable GARMC type */
+#define QMI_LOC_NMEA_MASK_GAGSV_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00000800) /**< Enable GAGSV type */
+#define QMI_LOC_NMEA_MASK_GAGSA_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00001000) /**< Enable GAGSA type */
+#define QMI_LOC_NMEA_MASK_GAVTG_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00002000) /**< Enable GAVTG type */
+#define QMI_LOC_NMEA_MASK_GAGGA_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00004000) /**< Enable GAGGA type */
+#define QMI_LOC_NMEA_MASK_PQGSA_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00008000) /**< Enable PQGSA type */
+#define QMI_LOC_NMEA_MASK_PQGSV_V02 ((qmiLocNmeaSentenceMaskT_v02)0x00010000) /**< Enable PQGSV 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
+ - QMI_LOC_NMEA_MASK_GGA (0x00000001) -- Enable GGA type
+ - QMI_LOC_NMEA_MASK_RMC (0x00000002) -- Enable RMC type
+ - QMI_LOC_NMEA_MASK_GSV (0x00000004) -- Enable GSV type
+ - QMI_LOC_NMEA_MASK_GSA (0x00000008) -- Enable GSA type
+ - QMI_LOC_NMEA_MASK_VTG (0x00000010) -- Enable VTG type
+ - QMI_LOC_NMEA_MASK_PQXFI (0x00000020) -- Enable PQXFI type
+ - QMI_LOC_NMEA_MASK_PSTIS (0x00000040) -- Enable PSTIS type
+ - QMI_LOC_NMEA_MASK_GLGSV (0x00000080) -- Enable GLGSV type
+ - QMI_LOC_NMEA_MASK_GNGSA (0x00000100) -- Enable GNGSA type
+ - QMI_LOC_NMEA_MASK_GNGNS (0x00000200) -- Enable GNGNS type
+ - QMI_LOC_NMEA_MASK_GARMC (0x00000400) -- Enable GARMC type
+ - QMI_LOC_NMEA_MASK_GAGSV (0x00000800) -- Enable GAGSV type
+ - QMI_LOC_NMEA_MASK_GAGSA (0x00001000) -- Enable GAGSA type
+ - QMI_LOC_NMEA_MASK_GAVTG (0x00002000) -- Enable GAVTG type
+ - QMI_LOC_NMEA_MASK_GAGGA (0x00004000) -- Enable GAGGA type
+ - QMI_LOC_NMEA_MASK_PQGSA (0x00008000) -- Enable PQGSA type
+ - QMI_LOC_NMEA_MASK_PQGSV (0x00010000) -- Enable PQGSV type
+ */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocSetNmeaTypesIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Gets the NMEA types from the location engine. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetNmeaTypesReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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
+ - QMI_LOC_NMEA_MASK_GGA (0x00000001) -- Enable GGA type
+ - QMI_LOC_NMEA_MASK_RMC (0x00000002) -- Enable RMC type
+ - QMI_LOC_NMEA_MASK_GSV (0x00000004) -- Enable GSV type
+ - QMI_LOC_NMEA_MASK_GSA (0x00000008) -- Enable GSA type
+ - QMI_LOC_NMEA_MASK_VTG (0x00000010) -- Enable VTG type
+ - QMI_LOC_NMEA_MASK_PQXFI (0x00000020) -- Enable PQXFI type
+ - QMI_LOC_NMEA_MASK_PSTIS (0x00000040) -- Enable PSTIS type
+ - QMI_LOC_NMEA_MASK_GLGSV (0x00000080) -- Enable GLGSV type
+ - QMI_LOC_NMEA_MASK_GNGSA (0x00000100) -- Enable GNGSA type
+ - QMI_LOC_NMEA_MASK_GNGNS (0x00000200) -- Enable GNGNS type
+ - QMI_LOC_NMEA_MASK_GARMC (0x00000400) -- Enable GARMC type
+ - QMI_LOC_NMEA_MASK_GAGSV (0x00000800) -- Enable GAGSV type
+ - QMI_LOC_NMEA_MASK_GAGSA (0x00001000) -- Enable GAGSA type
+ - QMI_LOC_NMEA_MASK_GAVTG (0x00002000) -- Enable GAVTG type
+ - QMI_LOC_NMEA_MASK_GAGGA (0x00004000) -- Enable GAGGA type
+ - QMI_LOC_NMEA_MASK_PQGSA (0x00008000) -- Enable PQGSA type
+ - QMI_LOC_NMEA_MASK_PQGSV (0x00010000) -- Enable PQGSV type
+ */
+}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;
+ /**< Indicates 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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocSetLowPowerModeIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Gets the LPM status from the location engine. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetLowPowerModeReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Enable/Disable LPM */
+ uint8_t lowPowerMode_valid; /**< Must be set to true if lowPowerMode is being passed */
+ uint8_t lowPowerMode;
+ /**< Indicates 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 */
+ eQMI_LOC_SERVER_TYPE_CUSTOM_PDE_V02 = 4, /**< Server type is custom PDE */
+ 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
+ - eQMI_LOC_SERVER_TYPE_CDMA_PDE (1) -- Server type is CDMA PDE
+ - eQMI_LOC_SERVER_TYPE_CDMA_MPC (2) -- Server type is CDMA MPC
+ - eQMI_LOC_SERVER_TYPE_UMTS_SLP (3) -- Server type is UMTS SLP
+ - eQMI_LOC_SERVER_TYPE_CUSTOM_PDE (4) -- Server type is custom PDE
+ */
+
+ /* Optional */
+ /* IPv4 Address */
+ uint8_t ipv4Addr_valid; /**< Must be set to true if ipv4Addr is being passed */
+ qmiLocIpV4AddrStructType_v02 ipv4Addr;
+ /**< \vspace{0.06in} \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;
+ /**< \vspace{0.06in} \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.
+ \begin{itemize1}
+ \item Type: NULL-terminated string
+ \item Maximum string length (including NULL terminator): 256
+ \vspace{-0.18in} \end{itemize1}
+ */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}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.
+
+ Valid values: \n
+ - eQMI_LOC_SERVER_TYPE_CDMA_PDE (1) -- Server type is CDMA PDE
+ - eQMI_LOC_SERVER_TYPE_CDMA_MPC (2) -- Server type is CDMA MPC
+ - eQMI_LOC_SERVER_TYPE_UMTS_SLP (3) -- Server type is UMTS SLP
+ - eQMI_LOC_SERVER_TYPE_CUSTOM_PDE (4) -- Server type is 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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Mandatory */
+ /* Server Type */
+ qmiLocServerTypeEnumT_v02 serverType;
+ /**< Type of server.
+
+ Valid values: \n
+ - eQMI_LOC_SERVER_TYPE_CDMA_PDE (1) -- Server type is CDMA PDE
+ - eQMI_LOC_SERVER_TYPE_CDMA_MPC (2) -- Server type is CDMA MPC
+ - eQMI_LOC_SERVER_TYPE_UMTS_SLP (3) -- Server type is UMTS SLP
+ - eQMI_LOC_SERVER_TYPE_CUSTOM_PDE (4) -- Server type is custom PDE
+ */
+
+ /* Optional */
+ /* IPv4 Address */
+ uint8_t ipv4Addr_valid; /**< Must be set to true if ipv4Addr is being passed */
+ qmiLocIpV4AddrStructType_v02 ipv4Addr;
+ /**< \vspace{0.06in} \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;
+ /**< \vspace{0.06in} \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.
+ \begin{itemize1}
+ \item Type: NULL-terminated string
+ \item Maximum string length (including NULL terminator): 256
+ \vspace{-0.18in} \end{itemize1}
+ */
+}qmiLocGetServerIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint64_t qmiLocDeleteGnssDataMaskT_v02;
+#define QMI_LOC_MASK_DELETE_GPS_SVDIR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000001ull) /**< Mask to delete GPS SVDIR */
+#define QMI_LOC_MASK_DELETE_GPS_SVSTEER_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000002ull) /**< Mask to delete GPS SVSTEER */
+#define QMI_LOC_MASK_DELETE_GPS_TIME_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000004ull) /**< Mask to delete GPS time */
+#define QMI_LOC_MASK_DELETE_GPS_ALM_CORR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000008ull) /**< Mask to delete almanac correlation */
+#define QMI_LOC_MASK_DELETE_GLO_SVDIR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000010ull) /**< Mask to delete GLONASS SVDIR */
+#define QMI_LOC_MASK_DELETE_GLO_SVSTEER_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000020ull) /**< Mask to delete GLONASS SVSTEER */
+#define QMI_LOC_MASK_DELETE_GLO_TIME_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000040ull) /**< Mask to delete GLONASS time */
+#define QMI_LOC_MASK_DELETE_GLO_ALM_CORR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000080ull) /**< Mask to delete GLONASS almanac correlation */
+#define QMI_LOC_MASK_DELETE_SBAS_SVDIR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000100ull) /**< Mask to delete SBAS SVDIR */
+#define QMI_LOC_MASK_DELETE_SBAS_SVSTEER_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000200ull) /**< Mask to delete SBAS SVSTEER */
+#define QMI_LOC_MASK_DELETE_POSITION_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000400ull) /**< Mask to delete position estimate */
+#define QMI_LOC_MASK_DELETE_TIME_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00000800ull) /**< Mask to delete time estimate */
+#define QMI_LOC_MASK_DELETE_IONO_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00001000ull) /**< Mask to delete IONO */
+#define QMI_LOC_MASK_DELETE_UTC_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00002000ull) /**< Mask to delete UTC estimate */
+#define QMI_LOC_MASK_DELETE_HEALTH_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00004000ull) /**< Mask to delete SV health record */
+#define QMI_LOC_MASK_DELETE_SADATA_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00008000ull) /**< Mask to delete SADATA */
+#define QMI_LOC_MASK_DELETE_RTI_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00010000ull) /**< Mask to delete RTI */
+#define QMI_LOC_MASK_DELETE_SV_NO_EXIST_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00020000ull) /**< Mask to delete SV_NO_EXIST */
+#define QMI_LOC_MASK_DELETE_FREQ_BIAS_EST_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00040000ull) /**< Mask to delete frequency bias estimate */
+#define QMI_LOC_MASK_DELETE_BDS_SVDIR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00080000ull) /**< Mask to delete BDS SVDIR */
+#define QMI_LOC_MASK_DELETE_BDS_SVSTEER_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00100000ull) /**< Mask to delete BDS SVSTEER */
+#define QMI_LOC_MASK_DELETE_BDS_TIME_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00200000ull) /**< Mask to delete BDS time */
+#define QMI_LOC_MASK_DELETE_BDS_ALM_CORR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00400000ull) /**< Mask to delete BDS almanac correlation */
+#define QMI_LOC_MASK_DELETE_GNSS_SV_BLACKLIST_GPS_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x00800000ull) /**< Mask to delete GNSS SV blacklist GPS */
+#define QMI_LOC_MASK_DELETE_GNSS_SV_BLACKLIST_GLO_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x01000000ull) /**< Mask to delete GNSS SV blacklist GLO */
+#define QMI_LOC_MASK_DELETE_GNSS_SV_BLACKLIST_BDS_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x02000000ull) /**< Mask to delete GNSS SV blacklist BDS */
+#define QMI_LOC_MASK_DELETE_GNSS_SV_BLACKLIST_GAL_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x04000000ull) /**< Mask to delete GNSS SV blacklist GAL */
+#define QMI_LOC_MASK_DELETE_GAL_SVDIR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x08000000ull) /**< Mask to delete GAL SVDIR */
+#define QMI_LOC_MASK_DELETE_GAL_SVSTEER_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x10000000ull) /**< Mask to delete GAL SVSTEER */
+#define QMI_LOC_MASK_DELETE_GAL_TIME_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x20000000ull) /**< Mask to delete GAL time */
+#define QMI_LOC_MASK_DELETE_GAL_ALM_CORR_V02 ((qmiLocDeleteGnssDataMaskT_v02)0x40000000ull) /**< Mask to delete GAL almanac correlation */
+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 */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GG_LEAPSEC_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000800) /**< Mask to delete a BDS time estimate from the clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GG_GGTB_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00001000) /**< Mask to delete a BDS time estimate from the clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_BDSTIME_EST_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00002000) /**< Mask to delete a BDS time estimate from the clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GB_GBTB_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00004000) /**< Mask to delete Glonass-to-BDS time bias-related information from the
+ clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_BG_BGTB_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00008000) /**< Mask to delete BDS-to-GLONASS time bias-related information from the
+ clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_BDSWEEK_NUMBER_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00010000) /**< Mask to delete the BDS week number from the clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_BDS_RF_GRP_DELAY_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00020000) /**< Mask to delete the BDS RF GRP delay from the clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTIME_EST_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00040000) /**< Mask to delete a GAL time estimate from the clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTOGPS_TB_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00080000) /**< Mask to delete GAL-to-GPS time bias-related information from the
+ clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTOGLO_TB_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00100000) /**< Mask to delete GAL-to-GLO time bias-related information from the
+ clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTOBDS_TB_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00200000) /**< Mask to delete GAL-to-BDS time bias-related information from the
+ clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GALWEEK_NUMBER_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00800000) /**< Mask to delete the GAL week number from the clock information */
+#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GAL_RF_GRP_DELAY_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x01000000) /**< Mask to delete the GAL RF GRP delay from the 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.
+ \begin{itemize1}
+ \item Range: \begin{itemize1}
+ \item For GPS: 1 to 32
+ \item For SBAS: 33 to 64
+ \item For GLONASS: 65 to 96
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ qmiLocSvSystemEnumT_v02 system;
+ /**< Indicates to which constellation this SV belongs.
+
+ Valid values: \n
+ - eQMI_LOC_SV_SYSTEM_GPS (1) -- GPS satellite
+ - eQMI_LOC_SV_SYSTEM_GALILEO (2) -- GALILEO satellite
+ - eQMI_LOC_SV_SYSTEM_SBAS (3) -- SBAS satellite
+ - eQMI_LOC_SV_SYSTEM_COMPASS (4) -- COMPASS satellite (Deprecated)
+ - eQMI_LOC_SV_SYSTEM_GLONASS (5) -- GLONASS satellite
+ - eQMI_LOC_SV_SYSTEM_BDS (6) -- BDS satellite
+ - eQMI_LOC_SV_SYSTEM_QZSS (7) -- QZSS satellite
+ */
+
+ qmiLocDeleteSvInfoMaskT_v02 deleteSvInfoMask;
+ /**< Indicates whether the ephemeris or almanac for a satellite
+ is to be deleted. \n
+ Valid values: \n
+ - QMI_LOC_MASK_DELETE_EPHEMERIS (0x01) -- Delete ephemeris for the satellite
+ - QMI_LOC_MASK_DELETE_ALMANAC (0x02) -- Delete almanac for the satellite
+ */
+}qmiLocDeleteSvInfoStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint16_t gnssSvId;
+ /**< SV ID of the satellite whose data is to be deleted. \n
+ Range for BDS: 201 to 237 */
+
+ qmiLocDeleteSvInfoMaskT_v02 deleteSvInfoMask;
+ /**< Indicates if the ephemeris or almanac for a satellite
+ is to be deleted. \n
+ Valid values: \n
+ - QMI_LOC_MASK_DELETE_EPHEMERIS (0x01) -- Delete ephemeris for the satellite
+ - QMI_LOC_MASK_DELETE_ALMANAC (0x02) -- Delete almanac for the satellite
+ */
+}qmiLocDeleteBDSSvInfoStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint16_t gnssSvId;
+ /**< SV ID of the satellite whose data is to be deleted. \n
+ Range for GAL: 301 to 336 */
+
+ qmiLocDeleteSvInfoMaskT_v02 deleteSvInfoMask;
+ /**< Indicates if the ephemeris or almanac for a satellite
+ is to be deleted. \n
+ Valid values: \n
+ - QMI_LOC_MASK_DELETE_EPHEMERIS (0x01) -- Delete ephemeris for the satellite
+ - QMI_LOC_MASK_DELETE_ALMANAC (0x02) -- Delete almanac for the satellite
+ */
+}qmiLocDeleteGALSvInfoStructT_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;
+ /**< Indicates whether all assistance data is to be deleted.
+
+ Valid values: \begin{itemize1}
+ \item 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
+ \item 0x00 (FALSE) -- The optional fields in the message are to be
+ used to determine which data is to be deleted
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* 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];
+ /**< \vspace{0.06in} \n List of satellites for which the assistance 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
+ - QMI_LOC_MASK_DELETE_GPS_SVDIR (0x00000001) -- Mask to delete GPS SVDIR
+ - QMI_LOC_MASK_DELETE_GPS_SVSTEER (0x00000002) -- Mask to delete GPS SVSTEER
+ - QMI_LOC_MASK_DELETE_GPS_TIME (0x00000004) -- Mask to delete GPS time
+ - QMI_LOC_MASK_DELETE_GPS_ALM_CORR (0x00000008) -- Mask to delete almanac correlation
+ - QMI_LOC_MASK_DELETE_GLO_SVDIR (0x00000010) -- Mask to delete GLONASS SVDIR
+ - QMI_LOC_MASK_DELETE_GLO_SVSTEER (0x00000020) -- Mask to delete GLONASS SVSTEER
+ - QMI_LOC_MASK_DELETE_GLO_TIME (0x00000040) -- Mask to delete GLONASS time
+ - QMI_LOC_MASK_DELETE_GLO_ALM_CORR (0x00000080) -- Mask to delete GLONASS almanac correlation
+ - QMI_LOC_MASK_DELETE_SBAS_SVDIR (0x00000100) -- Mask to delete SBAS SVDIR
+ - QMI_LOC_MASK_DELETE_SBAS_SVSTEER (0x00000200) -- Mask to delete SBAS SVSTEER
+ - QMI_LOC_MASK_DELETE_POSITION (0x00000400) -- Mask to delete position estimate
+ - QMI_LOC_MASK_DELETE_TIME (0x00000800) -- Mask to delete time estimate
+ - QMI_LOC_MASK_DELETE_IONO (0x00001000) -- Mask to delete IONO
+ - QMI_LOC_MASK_DELETE_UTC (0x00002000) -- Mask to delete UTC estimate
+ - QMI_LOC_MASK_DELETE_HEALTH (0x00004000) -- Mask to delete SV health record
+ - QMI_LOC_MASK_DELETE_SADATA (0x00008000) -- Mask to delete SADATA
+ - QMI_LOC_MASK_DELETE_RTI (0x00010000) -- Mask to delete RTI
+ - QMI_LOC_MASK_DELETE_SV_NO_EXIST (0x00020000) -- Mask to delete SV_NO_EXIST
+ - QMI_LOC_MASK_DELETE_FREQ_BIAS_EST (0x00040000) -- Mask to delete frequency bias estimate
+ - QMI_LOC_MASK_DELETE_BDS_SVDIR (0x00080000) -- Mask to delete BDS SVDIR
+ - QMI_LOC_MASK_DELETE_BDS_SVSTEER (0x00100000) -- Mask to delete BDS SVSTEER
+ - QMI_LOC_MASK_DELETE_BDS_TIME (0x00200000) -- Mask to delete BDS time
+ - QMI_LOC_MASK_DELETE_BDS_ALM_CORR (0x00400000) -- Mask to delete BDS almanac correlation
+ - QMI_LOC_MASK_DELETE_GNSS_SV_BLACKLIST_GPS (0x00800000) -- Mask to delete GNSS SV blacklist GPS
+ - QMI_LOC_MASK_DELETE_GNSS_SV_BLACKLIST_GLO (0x01000000) -- Mask to delete GNSS SV blacklist GLO
+ - QMI_LOC_MASK_DELETE_GNSS_SV_BLACKLIST_BDS (0x02000000) -- Mask to delete GNSS SV blacklist BDS
+ - QMI_LOC_MASK_DELETE_GNSS_SV_BLACKLIST_GAL (0x04000000) -- Mask to delete GNSS SV blacklist GAL
+ - QMI_LOC_MASK_DELETE_GAL_SVDIR (0x08000000) -- Mask to delete GAL SVDIR
+ - QMI_LOC_MASK_DELETE_GAL_SVSTEER (0x10000000) -- Mask to delete GAL SVSTEER
+ - QMI_LOC_MASK_DELETE_GAL_TIME (0x20000000) -- Mask to delete GAL time
+ - QMI_LOC_MASK_DELETE_GAL_ALM_CORR (0x40000000) -- Mask to delete GAL almanac correlation
+ */
+
+ /* 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.
+
+ Valid values: \begin{itemize1}
+ \item 0x00000001 -- DELETE_CELLDB_ POS
+ \item 0x00000002 -- DELETE_CELLDB_ LATEST_GPS_POS
+ \item 0x00000004 -- DELETE_CELLDB_ OTA_POS
+ \item 0x00000008 -- DELETE_CELLDB_ EXT_REF_POS
+ \item 0x00000010 -- DELETE_CELLDB_ TIMETAG
+ \item 0x00000020 -- DELETE_CELLDB_ CELLID
+ \item 0x00000040 -- DELETE_CELLDB_ CACHED_CELLID
+ \item 0x00000080 -- DELETE_CELLDB_ LAST_SRV_CELL
+ \item 0x00000100 -- DELETE_CELLDB_ CUR_SRV_CELL
+ \item 0x00000200 -- DELETE_CELLDB_ NEIGHBOR_INFO
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ /* 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.
+
+ Valid bitmasks: \n
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_TIME_EST (0x00000001) -- Mask to delete time estimate from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_FREQ_EST (0x00000002) -- Mask to delete frequency estimate from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_WEEK_NUMBER (0x00000004) -- Mask to delete week number from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_RTC_TIME (0x00000008) -- Mask to delete RTC time from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_TIME_TRANSFER (0x00000010) -- Mask to delete time transfer from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GPSTIME_EST (0x00000020) -- Mask to delete GPS time estimate from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GLOTIME_EST (0x00000040) -- Mask to delete GLONASS time estimate from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GLODAY_NUMBER (0x00000080) -- Mask to delete GLONASS day number from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GLO4YEAR_NUMBER (0x00000100) -- Mask to delete GLONASS four year number from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GLO_RF_GRP_DELAY (0x00000200) -- Mask to delete GLONASS RF GRP delay from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_DISABLE_TT (0x00000400) -- Mask to delete disable TT from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GG_LEAPSEC (0x00000800) -- Mask to delete a BDS time estimate from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GG_GGTB (0x00001000) -- Mask to delete a BDS time estimate from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_BDSTIME_EST (0x00002000) -- Mask to delete a BDS time estimate from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GB_GBTB (0x00004000) -- Mask to delete Glonass-to-BDS time bias-related information from the
+ clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_BG_BGTB (0x00008000) -- Mask to delete BDS-to-GLONASS time bias-related information from the
+ clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_BDSWEEK_NUMBER (0x00010000) -- Mask to delete the BDS week number from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_BDS_RF_GRP_DELAY (0x00020000) -- Mask to delete the BDS RF GRP delay from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTIME_EST (0x00040000) -- Mask to delete a GAL time estimate from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTOGPS_TB (0x00080000) -- Mask to delete GAL-to-GPS time bias-related information from the
+ clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTOGLO_TB (0x00100000) -- Mask to delete GAL-to-GLO time bias-related information from the
+ clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTOBDS_TB (0x00200000) -- Mask to delete GAL-to-BDS time bias-related information from the
+ clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GALWEEK_NUMBER (0x00800000) -- Mask to delete the GAL week number from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GAL_RF_GRP_DELAY (0x01000000) -- Mask to delete the GAL RF GRP delay from the clock information
+ */
+
+ /* Optional */
+ /* Delete BDS SV Info */
+ uint8_t deleteBdsSvInfoList_valid; /**< Must be set to true if deleteBdsSvInfoList is being passed */
+ uint32_t deleteBdsSvInfoList_len; /**< Must be set to # of elements in deleteBdsSvInfoList */
+ qmiLocDeleteBDSSvInfoStructT_v02 deleteBdsSvInfoList[QMI_LOC_DELETE_MAX_BDS_SV_INFO_LENGTH_V02];
+ /**< \vspace{0.06in} \n List of BDS satellites for which the assistance data is to be deleted.
+ */
+
+ /* Optional */
+ /* Delete GAL SV Info */
+ uint8_t deleteGalSvInfoList_valid; /**< Must be set to true if deleteGalSvInfoList is being passed */
+ uint32_t deleteGalSvInfoList_len; /**< Must be set to # of elements in deleteGalSvInfoList */
+ qmiLocDeleteGALSvInfoStructT_v02 deleteGalSvInfoList[QMI_LOC_DELETE_MAX_GAL_SV_INFO_LENGTH_V02];
+ /**< \vspace{0.06in} \n List of GAL satellites for which the assistance data is to be deleted.
+ */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocDeleteAssistDataIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Enables/disables XTRA-T session control. */
+typedef struct {
+
+ /* Mandatory */
+ /* Enable XTRA-T */
+ uint8_t xtraTSessionControl;
+ /**< Indicates 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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocSetXtraTSessionControlIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Gets the XTRA-T session control value from the location
+ engine. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetXtraTSessionControlReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Enable/Disable XTRA-T */
+ uint8_t xtraTSessionControl_valid; /**< Must be set to true if xtraTSessionControl is being passed */
+ uint8_t xtraTSessionControl;
+ /**< Indicates 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. */
+}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, /**< Wi-Fi fix is successful. */
+ eQMI_LOC_WIFI_FIX_ERROR_WIFI_NOT_AVAILABLE_V02 = 1, /**< Wi-Fi fix failed because Wi-Fi is not available on the device. */
+ eQMI_LOC_WIFI_FIX_ERROR_NO_AP_FOUND_V02 = 2, /**< Wi-Fi fix failed because no access points were found. */
+ eQMI_LOC_WIFI_FIX_ERROR_UNAUTHORIZED_V02 = 3, /**< Wi-Fi fix failed because the server denied access due to bad authorization
+ code. */
+ eQMI_LOC_WIFI_FIX_ERROR_SERVER_UNAVAILABLE_V02 = 4, /**< Wi-Fi fix failed because the Wi-Fi server was unavailable. */
+ eQMI_LOC_WIFI_FIX_ERROR_LOCATION_CANNOT_BE_DETERMINED_V02 = 5, /**< Wi-Fi 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. */
+ eQMI_LOC_WIFI_FIX_ERROR_UNKNOWN_V02 = 6, /**< Wi-Fi fix failed, but the cause could not be determined. */
+ 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;
+ /**< Wi-Fi position latitude. \n
+ - Type: Floating point \n
+ - Units: Degrees */
+
+ double lon;
+ /**< Wi-Fi position longitude. \n
+ - Type: Floating point \n
+ - Units: Degrees */
+
+ uint16_t hepe;
+ /**< Wi-Fi position HEPE.\n
+ - Units: Meters */
+
+ uint8_t numApsUsed;
+ /**< Number of Access Points (AP) used to generate a fix. */
+
+ qmiLocWifiFixErrorCodeEnumT_v02 fixErrorCode;
+ /**< Wi-Fi 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 Wi-Fi positioning system can be provided
+ here.
+
+ Valid values: \n
+ - eQMI_LOC_WIFI_FIX_ERROR_SUCCESS (0) -- Wi-Fi fix is successful.
+ - eQMI_LOC_WIFI_FIX_ERROR_WIFI_NOT_AVAILABLE (1) -- Wi-Fi fix failed because Wi-Fi is not available on the device.
+ - eQMI_LOC_WIFI_FIX_ERROR_NO_AP_FOUND (2) -- Wi-Fi fix failed because no access points were found.
+ - eQMI_LOC_WIFI_FIX_ERROR_UNAUTHORIZED (3) -- Wi-Fi fix failed because the server denied access due to bad authorization
+ code.
+ - eQMI_LOC_WIFI_FIX_ERROR_SERVER_UNAVAILABLE (4) -- Wi-Fi fix failed because the Wi-Fi server was unavailable.
+ - eQMI_LOC_WIFI_FIX_ERROR_LOCATION_CANNOT_BE_DETERMINED (5) -- Wi-Fi 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.
+ - eQMI_LOC_WIFI_FIX_ERROR_UNKNOWN (6) -- Wi-Fi fix failed, but the cause could not be determined.
+ */
+}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
+ - Units: dBm (offset with +100 dB) */
+
+ uint16_t channel;
+ /**< Wi-Fi channel on which a beacon was received. */
+
+ qmiLocWifiApQualifierMaskT_v02 apQualifier;
+ /**< A bitmask of Boolean qualifiers for APs.
+ All unused bits in this mask must be set to 0.
+
+ Valid values: \n
+ - 0x01 -- BEING_USED \n
+ - 0x02 -- HIDDEN_SSID \n
+ - 0x04 -- PRIVATE \n
+ - 0x08 -- INFRASTRUCTURE_MODE
+ */
+}qmiLocWifiApInfoStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ char ssid[QMI_LOC_MAX_WIFI_AP_SSID_STR_LENGTH_V02 + 1];
+ /**< NULL-terminated SSID string of the Wi-Fi AP. Its maximum length according to the ASCII standard is 32 octets. */
+}qmiLocWifiApSsidStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects the Wi-Fi position. */
+typedef struct {
+
+ /* Optional */
+ /* Wi-Fi Fix Time */
+ uint8_t wifiFixTime_valid; /**< Must be set to true if wifiFixTime is being passed */
+ qmiLocWifiFixTimeStructT_v02 wifiFixTime;
+ /**< \vspace{0.06in} \n Time of Wi-Fi position fix. */
+
+ /* Optional */
+ /* Wi-Fi Position */
+ uint8_t wifiFixPosition_valid; /**< Must be set to true if wifiFixPosition is being passed */
+ qmiLocWifiFixPosStructT_v02 wifiFixPosition;
+ /**< \vspace{0.06in} \n Wi-Fi position fix. */
+
+ /* Optional */
+ /* Wi-Fi 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];
+ /**< \vspace{0.06in} \n AP scan list.
+ SSID of the Wi-Fi AP.
+ The ordering of the Wi-Fi AP SSID list should matchthe Wi-Fi AP MAC address list if both are provided,
+ that is, the first element of the Wi-Fi AP SSID list must be the SSID of the AP whose MAC
+ address is in the first element in the Wi-Fi AP Info MAC Address, and so on. */
+
+ /* 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
+ - eQMI_LOC_RELIABILITY_NOT_SET (0) -- Location reliability is not set
+ - eQMI_LOC_RELIABILITY_VERY_LOW (1) -- Location reliability is very low; use it at your own risk
+ - eQMI_LOC_RELIABILITY_LOW (2) -- Location reliability is low; little or no cross-checking is possible
+ - eQMI_LOC_RELIABILITY_MEDIUM (3) -- Location reliability is medium; limited cross-check passed
+ - eQMI_LOC_RELIABILITY_HIGH (4) -- Location reliability is high; strong cross-check passed
+ */
+
+ /* Optional */
+ /* Raw HEPE */
+ uint8_t rawHepe_valid; /**< Must be set to true if rawHepe is being passed */
+ uint16_t rawHepe;
+ /**< Wi-Fi position raw HEPE, which has no optimization.\n
+ - Units: Meters */
+
+ /* Optional */
+ /* Wi-Fi AP SSID String */
+ uint8_t wifiApSsidInfo_valid; /**< Must be set to true if wifiApSsidInfo is being passed */
+ uint32_t wifiApSsidInfo_len; /**< Must be set to # of elements in wifiApSsidInfo */
+ qmiLocWifiApSsidStructT_v02 wifiApSsidInfo[QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02];
+ /**< \vspace{0.04in} \n
+ The ordering of the Wi-Fi AP SSID list should match the Wi-Fi AP MAC address list if both are provided,
+ that is, the first element of the Wi-Fi AP SSID list must be the SSID of the AP whose MAC
+ address is in the first element in the Wi-Fi AP Info MAC address, and so on.*/
+}qmiLocInjectWifiPositionReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects the Wi-Fi position. */
+typedef struct {
+
+ /* Mandatory */
+ /* Inject Wi-Fi Position Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Inject Wi-Fi Position request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}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, /**< Wi-Fi is available */
+ eQMI_LOC_WIFI_STATUS_UNAVAILABLE_V02 = 2, /**< Wi-Fi is not available */
+ 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 Wi-Fi status. */
+typedef struct {
+
+ /* Mandatory */
+ /* Availablility of Wi-Fi */
+ qmiLocWifiStatusEnumT_v02 wifiStatus;
+ /**< Wi-Fi status information.
+
+ Valid values: \n
+ - eQMI_LOC_WIFI_STATUS_AVAILABLE (1) -- Wi-Fi is available
+ - eQMI_LOC_WIFI_STATUS_UNAVAILABLE (2) -- Wi-Fi is not available
+ */
+}qmiLocNotifyWifiStatusReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the location engine of the Wi-Fi status. */
+typedef struct {
+
+ /* Mandatory */
+ /* Status of Notify Wi-Fi Status Request */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Notify Wi-Fi Status request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocNotifyWifiStatusIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Gets the mask of the events for which a client has
+ registered. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetRegisteredEventsReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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
+ - QMI_LOC_EVENT_MASK_POSITION_REPORT (0x00000001) -- The control point must enable this mask to receive position report
+ event indications.
+ - QMI_LOC_EVENT_MASK_GNSS_SV_INFO (0x00000002) -- The control point must enable this mask to receive satellite report
+ event indications. These reports are sent at a 1 Hz rate.
+ - QMI_LOC_EVENT_MASK_NMEA (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.
+ - QMI_LOC_EVENT_MASK_NI_NOTIFY_VERIFY_REQ (0x00000008) -- The control point must enable this mask to receive NI Notify/Verify request
+ event indications.
+ - QMI_LOC_EVENT_MASK_INJECT_TIME_REQ (0x00000010) -- The control point must enable this mask to receive time injection request
+ event indications.
+ - QMI_LOC_EVENT_MASK_INJECT_PREDICTED_ORBITS_REQ (0x00000020) -- The control point must enable this mask to receive predicted orbits request
+ event indications.
+ - QMI_LOC_EVENT_MASK_INJECT_POSITION_REQ (0x00000040) -- The control point must enable this mask to receive position injection request
+ event indications.
+ - QMI_LOC_EVENT_MASK_ENGINE_STATE (0x00000080) -- The control point must enable this mask to receive engine state report
+ event indications.
+ - QMI_LOC_EVENT_MASK_FIX_SESSION_STATE (0x00000100) -- The control point must enable this mask to receive fix session status report
+ event indications.
+ - QMI_LOC_EVENT_MASK_WIFI_REQ (0x00000200) -- The control point must enable this mask to receive Wi-Fi position request
+ event indications.
+ - QMI_LOC_EVENT_MASK_SENSOR_STREAMING_READY_STATUS (0x00000400) -- The control point must enable this mask to receive notifications from the
+ location engine indicating its readiness to accept data from the
+ sensors (accelerometer, gyroscope, etc.).
+ - QMI_LOC_EVENT_MASK_TIME_SYNC_REQ (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.
+ - QMI_LOC_EVENT_MASK_SET_SPI_STREAMING_REPORT (0x00001000) -- The control point must enable this mask to receive Stationary Position
+ Indicator (SPI) streaming report indications.
+ - QMI_LOC_EVENT_MASK_LOCATION_SERVER_CONNECTION_REQ (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.
+ - QMI_LOC_EVENT_MASK_NI_GEOFENCE_NOTIFICATION (0x00004000) -- The control point must enable this mask to receive notifications
+ related to network-initiated Geofences. These events notify the client
+ when a network-initiated Geofence is added, deleted, or edited.
+ - QMI_LOC_EVENT_MASK_GEOFENCE_GEN_ALERT (0x00008000) -- The control point must enable this mask to receive Geofence alerts.
+ These alerts are generated to inform the client of the changes that may
+ affect a Geofence, e.g., if GPS is turned off or if the network is
+ unavailable.
+ - QMI_LOC_EVENT_MASK_GEOFENCE_BREACH_NOTIFICATION (0x00010000) -- The control point must enable this mask to receive notifications when
+ a Geofence is breached. These events are generated when a UE enters
+ or leaves the perimeter of a Geofence. This breach report is for a single
+ Geofence .
+ - QMI_LOC_EVENT_MASK_PEDOMETER_CONTROL (0x00020000) -- The control point must enable this mask to register for pedometer
+ control requests from the location engine. The location engine sends
+ this event to control the injection of pedometer reports.
+ - QMI_LOC_EVENT_MASK_MOTION_DATA_CONTROL (0x00040000) -- The control point must enable this mask to register for motion data
+ control requests from the location engine. The location engine sends
+ this event to control the injection of motion data.
+ - QMI_LOC_EVENT_MASK_BATCH_FULL_NOTIFICATION (0x00080000) -- The control point must enable this mask to receive notification when
+ a batch is full. The location engine sends this event to notify of Batch Full
+ for ongoing batching session.
+ - QMI_LOC_EVENT_MASK_LIVE_BATCHED_POSITION_REPORT (0x00100000) -- The control point must enable this mask to receive position report
+ indications along with an ongoing batching session. The location engine sends
+ this event to notify the batched position report while a batching session
+ is ongoing.
+ - QMI_LOC_EVENT_MASK_INJECT_WIFI_AP_DATA_REQ (0x00200000) -- The control point must enable this mask to receive Wi-Fi AP data inject request
+ event indications.
+ - QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_BREACH_NOTIFICATION (0x00400000) -- The control point must enable this mask to receive notifications when
+ a Geofence is breached. These events are generated when a UE enters
+ or leaves the perimeter of a Geofence. This breach notification is for
+ multiple Geofences. Breaches from multiple Geofences are all batched and
+ sent in the same notification .
+ - QMI_LOC_EVENT_MASK_VEHICLE_DATA_READY_STATUS (0x00800000) -- The control point must enable this mask to receive notifications from the
+ location engine indicating its readiness to accept vehicle data (vehicle
+ accelerometer, vehicle angular rate, vehicle odometry, etc.).
+ - QMI_LOC_EVENT_MASK_GNSS_MEASUREMENT_REPORT (0x01000000) -- The control point must enable this mask to receive system clock and satellite
+ measurement report events (system clock, SV time, Doppler, etc.). Reports are
+ generated only for the GNSS satellite constellations that are enabled using
+ QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG.
+ - QMI_LOC_EVENT_MASK_GNSS_SV_POLYNOMIAL_REPORT (0x02000000) -- The control point must enable this mask to receive satellite position
+ reports as polynomials. Reports are generated only for the GNSS satellite
+ constellations that are enabled using QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG.
+ - QMI_LOC_EVENT_MASK_GEOFENCE_PROXIMITY_NOTIFICATION (0x04000000) -- The control point must enable this mask to receive notifications when a Geofence proximity is entered
+ and exited. The proximity of a Geofence may be due to different contexts. These contexts are identified
+ using the context ID in this indication. The context of a Geofence may contain Wi-Fi area ID lists, IBeacon lists,
+ Cell-ID list, and so forth.
+ - QMI_LOC_EVENT_MASK_GDT_UPLOAD_BEGIN_REQ (0x08000000) -- The control point must enable this mask to receive Generic Data Transport (GDT)
+ upload session begin request event indications.
+ - QMI_LOC_EVENT_MASK_GDT_UPLOAD_END_REQ (0x10000000) -- The control point must enable this mask to receive GDT
+ upload session end request event indications.
+ - QMI_LOC_EVENT_MASK_GEOFENCE_BATCH_DWELL_NOTIFICATION (0x20000000) -- The control point must enable this mask to receive notifications when
+ a Geofence is dwelled. These events are generated when a UE enters
+ or leaves the perimeter of a Geofence and dwells inside or outside for a specified time.
+ This dwell notification is for multiple Geofences. Dwells from multiple Geofences are all batched and
+ sent in the same notification.
+ - QMI_LOC_EVENT_MASK_GET_TIME_ZONE_REQ (0x40000000) -- The control point must enable this mask to receive requests for time zone information from
+ the service. These events are generated when there is a need for time zone information in the
+ service.
+ - QMI_LOC_EVENT_MASK_BATCHING_STATUS (0x80000000) -- The control point must enable this mask to receive asynchronous events related
+ to batching.
+ */
+}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 */
+ eQMI_LOC_OPER_MODE_CELL_ID_V02 = 5, /**< Use cell ID; this mode is only valid for GSM/UMTS networks */
+ eQMI_LOC_OPER_MODE_WWAN_V02 = 6, /**< Use WWAN measurements to calculate the position; if this mode is
+ set, AFLT will be used for 1X networks and OTDOA will be used
+ for LTE networks */
+ 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. */
+typedef struct {
+
+ /* Mandatory */
+ /* Operation Mode */
+ qmiLocOperationModeEnumT_v02 operationMode;
+ /**< Preferred operation mode.
+
+ Valid values: \n
+ - eQMI_LOC_OPER_MODE_DEFAULT (1) -- Use the default engine mode
+ - eQMI_LOC_OPER_MODE_MSB (2) -- Use the MS-based mode
+ - eQMI_LOC_OPER_MODE_MSA (3) -- Use the MS-assisted mode
+ - eQMI_LOC_OPER_MODE_STANDALONE (4) -- Use Standalone mode
+ - eQMI_LOC_OPER_MODE_CELL_ID (5) -- Use cell ID; this mode is only valid for GSM/UMTS networks
+ - eQMI_LOC_OPER_MODE_WWAN (6) -- Use WWAN measurements to calculate the position; if this mode is
+ set, AFLT will be used for 1X networks and OTDOA will be used
+ for LTE networks
+ */
+
+ /* 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
+ - Units: milliseconds \n
+ - Default: 1000 ms
+ */
+}qmiLocSetOperationModeReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Tells the engine to use the specified operation mode while
+ making the position fixes. */
+typedef struct {
+
+ /* Mandatory */
+ /* Set Operation Mode Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Set Operation Mode request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocSetOperationModeIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Gets the current operation mode from the engine. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetOperationModeReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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
+ - eQMI_LOC_OPER_MODE_DEFAULT (1) -- Use the default engine mode
+ - eQMI_LOC_OPER_MODE_MSB (2) -- Use the MS-based mode
+ - eQMI_LOC_OPER_MODE_MSA (3) -- Use the MS-assisted mode
+ - eQMI_LOC_OPER_MODE_STANDALONE (4) -- Use Standalone mode
+ - eQMI_LOC_OPER_MODE_CELL_ID (5) -- Use cell ID; this mode is only valid for GSM/UMTS networks
+ - eQMI_LOC_OPER_MODE_WWAN (6) -- Use WWAN measurements to calculate the position; if this mode is
+ set, AFLT will be used for 1X networks and OTDOA will be used
+ for LTE networks
+ */
+}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;
+ /**< Indicates whether the device is stationary:
+ \begin{itemize1}
+ \item 0x00 (FALSE) -- Device is not stationary
+ \item 0x01 (TRUE) -- Device is stationary
+ \vspace{-0.18in} \end{itemize1}*/
+
+ /* 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
+ - 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.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}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; only applies to the accelerometer samples */
+#define QMI_LOC_SENSOR_DATA_FLAG_SENSOR_TIME_IS_MODEM_TIME_V02 ((qmiLocSensorDataFlagMaskT_v02)0x02) /**< Bitmask to specify that the sensor time stamp is the same as the modem
+ time stamp */
+#define QMI_LOC_SENSOR_DATA_FLAG_CALIBRATED_DATA_V02 ((qmiLocSensorDataFlagMaskT_v02)0x04) /**< Bitmask to specify that the injected sensor data is calibrated */
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCSENSORDATATIMESOURCEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_SENSOR_TIME_SOURCE_UNSPECIFIED_V02 = 0, /**< Sensor time source is unspecified */
+ eQMI_LOC_SENSOR_TIME_SOURCE_COMMON_V02 = 1, /**< Time source is common between the sensors and
+ the location engine */
+ QMILOCSENSORDATATIMESOURCEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSensorDataTimeSourceEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint16_t timeOffset;
+ /**< Sample time offset. This time offset must be
+ relative to the timestamp of the first sensor data sample.\n
+ - Units: Milliseconds */
+
+ float xAxis;
+ /**< Sensor x-axis sample. \n
+ - Units Accelerometer: Meters/seconds^2 \n
+ - Units Gyroscope: Radians/second \n
+ - Units Magnetometer: microTesla */
+
+ float yAxis;
+ /**< Sensor y-axis sample. \n
+ - Units Accelerometer: Meters/seconds^2 \n
+ - Units Gyroscope: Radians/second \n
+ - Units Magnetometer: microTesla */
+
+ float zAxis;
+ /**< Sensor z-axis sample. \n
+ - Units Accelerometer: Meters/seconds^2 ) \n
+ - Units Gyroscope: Radians/second \n
+ - Units Magnetometer: microTesla */
+}qmiLoc3AxisSensorSampleStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint32_t timeOfFirstSample;
+ /**< Denotes a full 32-bit timestamp of the first (oldest) sample in this
+ message.The timestamp is in the time reference scale that is
+ used by the sensor time source.\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:
+ - QMI_LOC_SENSOR_DATA_FLAG_SIGN_REVERSAL (0x01) -- Bitmask to specify that a sign reversal is required while interpreting
+ the sensor data; only applies to the accelerometer samples
+ - QMI_LOC_SENSOR_DATA_FLAG_SENSOR_TIME_IS_MODEM_TIME (0x02) -- Bitmask to specify that the sensor time stamp is the same as the modem
+ time stamp
+ - QMI_LOC_SENSOR_DATA_FLAG_CALIBRATED_DATA (0x04) -- Bitmask to specify that the injected sensor data is calibrated */
+
+ 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_aggregates
+ @{
+ */
+typedef struct {
+
+ uint16_t timeOffset;
+ /**< Sample time offset. This time offset must be
+ relative to the timestamp of the first sensor sample.\n
+ - Units: Milliseconds */
+
+ float temperature;
+ /**< Sensor temperature. \n
+ - Type: Floating point \n
+ - Units: Degrees Celsius \n
+ - Range: -50 to +100.00 */
+}qmiLocSensorTemperatureSampleStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ qmiLocSensorDataTimeSourceEnumT_v02 timeSource;
+ /**< Denotes the time source of the sensor data. Location service will use
+ this field to identify the time reference used in the
+ sensor data timestamps.
+
+ Valid values: \n
+ - eQMI_LOC_SENSOR_TIME_SOURCE_UNSPECIFIED (0) -- Sensor time source is unspecified
+ - eQMI_LOC_SENSOR_TIME_SOURCE_COMMON (1) -- Time source is common between the sensors and
+ the location engine
+ */
+
+ uint32_t timeOfFirstSample;
+ /**< Denotes a full 32-bit timestamp of the first (oldest) sample in this
+ message. The timestamp is in the time reference scale that is
+ used by the sensor time source.\n
+ - Units: Milliseconds */
+
+ uint32_t temperatureData_len; /**< Must be set to # of elements in temperatureData */
+ qmiLocSensorTemperatureSampleStructT_v02 temperatureData[QMI_LOC_SENSOR_DATA_MAX_SAMPLES_V02];
+ /**< Variable length array to specify sensor temperature samples. \n
+ - Maximum length of the array: 50 */
+}qmiLocSensorTemperatureSampleListStructT_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. */
+
+ /* Optional */
+ /* 3-Axis Accelerometer Data */
+ uint8_t threeAxisAccelData_valid; /**< Must be set to true if threeAxisAccelData is being passed */
+ qmiLoc3AxisSensorSampleListStructT_v02 threeAxisAccelData;
+ /**< \vspace{0.06in} \n Accelerometer sensor samples. */
+
+ /* Optional */
+ /* 3-Axis Gyroscope Data */
+ uint8_t threeAxisGyroData_valid; /**< Must be set to true if threeAxisGyroData is being passed */
+ qmiLoc3AxisSensorSampleListStructT_v02 threeAxisGyroData;
+ /**< \vspace{0.06in} \n Gyroscope sensor samples. */
+
+ /* Optional */
+ /* 3-Axis Accelerometer Data Time Source */
+ uint8_t threeAxisAccelDataTimeSource_valid; /**< Must be set to true if threeAxisAccelDataTimeSource is being passed */
+ qmiLocSensorDataTimeSourceEnumT_v02 threeAxisAccelDataTimeSource;
+ /**< Time source for the 3-axis accelerometer data. The location service uses
+ this field to identify the time reference used in the accelerometer data
+ timestamps. If not specified, the location service assumes that the
+ time source for the accelereometer data is unknown. \n
+ Values: \n
+ - eQMI_LOC_SENSOR_TIME_SOURCE_UNSPECIFIED (0) -- Sensor time source is unspecified
+ - eQMI_LOC_SENSOR_TIME_SOURCE_COMMON (1) -- Time source is common between the sensors and
+ the location engine
+ */
+
+ /* Optional */
+ /* 3-Axis Gyroscope Data Time Source */
+ uint8_t threeAxisGyroDataTimeSource_valid; /**< Must be set to true if threeAxisGyroDataTimeSource is being passed */
+ qmiLocSensorDataTimeSourceEnumT_v02 threeAxisGyroDataTimeSource;
+ /**< Time source for the 3-axis gyroscope data. The location service uses
+ this field to identify the time reference used in the gyroscope data
+ timestamps. If not specified, the location service assumes that the
+ time source for the gyroscope data is unknown. \n
+ Values: \n
+ - eQMI_LOC_SENSOR_TIME_SOURCE_UNSPECIFIED (0) -- Sensor time source is unspecified
+ - eQMI_LOC_SENSOR_TIME_SOURCE_COMMON (1) -- Time source is common between the sensors and
+ the location engine
+ */
+
+ /* Optional */
+ /* Accelerometer Temperature Data */
+ uint8_t accelTemperatureData_valid; /**< Must be set to true if accelTemperatureData is being passed */
+ qmiLocSensorTemperatureSampleListStructT_v02 accelTemperatureData;
+ /**< \vspace{0.06in} \nAccelerometer temperature samples. This data is optional and does not
+ have to be included in the message along with accelerometer data. */
+
+ /* Optional */
+ /* Gyroscope Temperature Data */
+ uint8_t gyroTemperatureData_valid; /**< Must be set to true if gyroTemperatureData is being passed */
+ qmiLocSensorTemperatureSampleListStructT_v02 gyroTemperatureData;
+ /**< \vspace{0.06in} \n Gyroscope temperature samples. This data is optional and does not
+ have to be included in the message along with gyroscope data. */
+
+ /* Optional */
+ /* 3-Axis Magnetometer Data */
+ uint8_t threeAxisMagData_valid; /**< Must be set to true if threeAxisMagData is being passed */
+ qmiLoc3AxisSensorSampleListStructT_v02 threeAxisMagData;
+ /**< \vspace{0.06in} \n Magnetometer sensor samples. */
+
+ /* Optional */
+ /* 3-Axis Magnetometer Data Time Source */
+ uint8_t threeAxisMagDataTimeSource_valid; /**< Must be set to true if threeAxisMagDataTimeSource is being passed */
+ qmiLocSensorDataTimeSourceEnumT_v02 threeAxisMagDataTimeSource;
+ /**< Time source for the 3-axis magnetometer data. The location service uses
+ this field to identify the time reference used in the magnetometer data
+ timestamps. If not specified, the location service assumes that the
+ time source for the magnetometer data is unknown. \n
+ Values: \n
+ - eQMI_LOC_SENSOR_TIME_SOURCE_UNSPECIFIED (0) -- Sensor time source is unspecified
+ - eQMI_LOC_SENSOR_TIME_SOURCE_COMMON (1) -- Time source is common between the sensors and
+ the location engine
+ */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Opaque Identifier */
+ uint8_t opaqueIdentifier_valid; /**< Must be set to true if opaqueIdentifier is being passed */
+ uint32_t opaqueIdentifier;
+ /**< Opaque identifier that was sent in by the client echoed
+ so the client can relate the indication to the request. */
+
+ /* Optional */
+ /* Accelerometer Samples Accepted */
+ uint8_t threeAxisAccelSamplesAccepted_valid; /**< Must be set to true if threeAxisAccelSamplesAccepted is being passed */
+ uint8_t threeAxisAccelSamplesAccepted;
+ /**< Lets the client know how many 3-axis accelerometer samples
+ were accepted. This field is present only if the accelerometer
+ samples were sent in the request. */
+
+ /* Optional */
+ /* Gyroscope Samples Accepted */
+ uint8_t threeAxisGyroSamplesAccepted_valid; /**< Must be set to true if threeAxisGyroSamplesAccepted is being passed */
+ uint8_t threeAxisGyroSamplesAccepted;
+ /**< Lets the client know how many 3-axis gyroscope samples were
+ accepted. This field is present only if the gyroscope
+ samples were sent in the request. */
+
+ /* Optional */
+ /* Accelerometer Temperature Samples Accepted */
+ uint8_t accelTemperatureSamplesAccepted_valid; /**< Must be set to true if accelTemperatureSamplesAccepted is being passed */
+ uint8_t accelTemperatureSamplesAccepted;
+ /**< Lets the client know how many accelerometer temperature
+ samples were accepted. This field is present only if the accelerometer
+ temperature samples were sent in the request. */
+
+ /* Optional */
+ /* Gyroscope Temperature Samples Accepted */
+ uint8_t gyroTemperatureSamplesAccepted_valid; /**< Must be set to true if gyroTemperatureSamplesAccepted is being passed */
+ uint8_t gyroTemperatureSamplesAccepted;
+ /**< Lets the client know how many gyroscope temperature samples
+ were accepted. This field is present only if the gyroscope
+ temperature samples were sent in the request. */
+
+ /* Optional */
+ /* Magnetometer Samples Accepted */
+ uint8_t threeAxisMagSamplesAccepted_valid; /**< Must be set to true if threeAxisMagSamplesAccepted is being passed */
+ uint8_t threeAxisMagSamplesAccepted;
+ /**< Lets the client know how many 3-axis magnetometer samples
+ were accepted. This field is present only if the magnetometer
+ samples were sent in the request. */
+}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. */
+
+ /* Mandatory */
+ /* Sensor Receive Time */
+ uint32_t sensorProcRxTime;
+ /**< 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
+ - Units: Milliseconds */
+
+ /* Mandatory */
+ /* Sensor Transmit Time */
+ uint32_t sensorProcTxTime;
+ /**< 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
+ - 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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}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 */
+ eQMI_LOC_CRADLE_STATE_UNKNOWN_V02 = 2, /**< Unknown cradle mount state */
+ QMILOCCRADLEMOUNTSTATEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocCradleMountStateEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to get the current
+ cradle mount configuration. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetCradleMountConfigReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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
+ - eQMI_LOC_CRADLE_STATE_NOT_MOUNTED (0) -- Device is mounted on the cradle
+ - eQMI_LOC_CRADLE_STATE_MOUNTED (1) -- Device is not mounted on the cradle
+ - eQMI_LOC_CRADLE_STATE_UNKNOWN (2) -- Unknown cradle mount state
+ */
+
+ /* 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
+ - 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
+ - eQMI_LOC_CRADLE_STATE_NOT_MOUNTED (0) -- Device is mounted on the cradle
+ - eQMI_LOC_CRADLE_STATE_MOUNTED (1) -- Device is not mounted on the cradle
+ - eQMI_LOC_CRADLE_STATE_UNKNOWN (2) -- Unknown cradle mount state
+ */
+
+ /* 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
+ - 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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}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 */
+ eQMI_LOC_EXTERNAL_POWER_UNKNOWN_V02 = 2, /**< Unknown external power state */
+ QMILOCEXTERNALPOWERCONFIGENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocExternalPowerConfigEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to get the current
+ external power configuration. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetExternalPowerConfigReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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
+ - eQMI_LOC_EXTERNAL_POWER_NOT_CONNECTED (0) -- Device is not connected to an external power source
+ - eQMI_LOC_EXTERNAL_POWER_CONNECTED (1) -- Device is connected to an external power source
+ - eQMI_LOC_EXTERNAL_POWER_UNKNOWN (2) -- Unknown external power state
+ */
+}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
+ - eQMI_LOC_EXTERNAL_POWER_NOT_CONNECTED (0) -- Device is not connected to an external power source
+ - eQMI_LOC_EXTERNAL_POWER_CONNECTED (1) -- Device is connected to an external power source
+ - eQMI_LOC_EXTERNAL_POWER_UNKNOWN (2) -- Unknown external power state
+ */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}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 */
+ eQMI_LOC_APN_PROFILE_PDN_TYPE_PPP_V02 = 0x04, /**< PPP PDN type */
+ 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 APN profile.
+
+ Valid values: \n
+ - eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4 (0x01) -- IPv4 PDN type
+ - eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV6 (0x02) -- IPv6 PDN type
+ - eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4V6 (0x03) -- IPv4v6 PDN type
+ - eQMI_LOC_APN_PROFILE_PDN_TYPE_PPP (0x04) -- PPP PDN type
+ */
+
+ char apnName[QMI_LOC_MAX_APN_NAME_LENGTH_V02 + 1];
+ /**< APN name.
+ \begin{itemize1}
+ \item Type: NULL-terminated string
+ \item Maximum string length (including NULL terminator): 101
+ \vspace{-0.18in} \end{itemize1}
+ */
+}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 */
+ eQMI_LOC_SERVER_REQ_STATUS_FAILURE_V02 = 2, /**< Location server request failed */
+ 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_CONNECTION_REQ_IND event. */
+typedef struct {
+
+ /* Mandatory */
+ /* Connection Handle */
+ uint32_t connHandle;
+ /**< Connection handle that the service specified in the
+ Location Server Connection request event. */
+
+ /* Mandatory */
+ /* Request Type */
+ qmiLocServerRequestEnumT_v02 requestType;
+ /**< Type of connection request service that was specified in the
+ Location Server Connection Request event.
+
+ Valid values: \n
+ - eQMI_LOC_SERVER_REQUEST_OPEN (1) -- Open a connection to the location server
+ - eQMI_LOC_SERVER_REQUEST_CLOSE (2) -- Close a connection to the location server
+ */
+
+ /* Mandatory */
+ /* Connection Status */
+ qmiLocServerReqStatusEnumT_v02 statusType;
+ /**< Status of the Connection request.
+
+ Valid values: \n
+ - eQMI_LOC_SERVER_REQ_STATUS_SUCCESS (1) -- Location server request was successful
+ - eQMI_LOC_SERVER_REQ_STATUS_FAILURE (2) -- Location server request failed
+ */
+
+ /* Optional */
+ /* APN Profile */
+ uint8_t apnProfile_valid; /**< Must be set to true if apnProfile is being passed */
+ qmiLocApnProfilesStructT_v02 apnProfile;
+ /**< \vspace{0.06in} \n Access Point Name (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_CONNECTION_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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}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 */
+ eQMI_LOC_VX_VERSION_V2_ONLY_V02 = 2, /**< V2 VX version */
+ 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 */
+ eQMI_LOC_SUPL_VERSION_2_0_V02 = 2, /**< SUPL version 2.0 */
+ eQMI_LOC_SUPL_VERSION_2_0_2_V02 = 3, /**< SUPL version 2.0.2 */
+ QMILOCSUPLVERSIONENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSuplVersionEnumT_v02;
+/**
+ @}
+ */
+
+typedef uint32_t qmiLocLppConfigMaskT_v02;
+#define QMI_LOC_LPP_CONFIG_ENABLE_USER_PLANE_V02 ((qmiLocLppConfigMaskT_v02)0x00000001) /**< Enable user plane configuration for LTE Positioning Profile (LPP) */
+#define QMI_LOC_LPP_CONFIG_ENABLE_CONTROL_PLANE_V02 ((qmiLocLppConfigMaskT_v02)0x00000002) /**< Enable control plane configuration for LPP */
+typedef uint32_t qmiLocAssistedGlonassProtocolMaskT_v02;
+#define QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_RRC_CP_V02 ((qmiLocAssistedGlonassProtocolMaskT_v02)0x00000001) /**< Assisted GLONASS is supported over RRC in the control plane */
+#define QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_RRLP_UP_V02 ((qmiLocAssistedGlonassProtocolMaskT_v02)0x00000002) /**< Assisted GLONASS is supported over RRLP in the user plane */
+#define QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_LPP_UP_V02 ((qmiLocAssistedGlonassProtocolMaskT_v02)0x00000004) /**< Assisted GLONASS is supported over LPP in the user plane;
+ QMI_LOC_LPP_CONFIG_ENABLE_USER_PLANE must be set
+ in the LPP configuration for this to take effect */
+#define QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_LPP_CP_V02 ((qmiLocAssistedGlonassProtocolMaskT_v02)0x00000008) /**< Assisted GLONASS is supported over LPP in the control plane;
+ QMI_LOC_LPP_CONFIG_ENABLE_CONTROL_PLANE must be set
+ in the LPP configuration for this to take effect */
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCSUPLHASHALGOENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_SUPL_HASH_ALGO_SHA1_V02 = 0, /**< SHA-1 hash algorithm for SUPL version 2.0 or later */
+ eQMI_LOC_SUPL_HASH_ALGO_SHA256_V02 = 1, /**< SHA-256 hash algorithm for SUPL version 2.0 or later */
+ QMILOCSUPLHASHALGOENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSuplHashAlgoEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCSUPLTLSVERSIONENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_SUPL_TLS_VERSION_1_0_V02 = 0, /**< SUPL TLS version 1.0 */
+ eQMI_LOC_SUPL_TLS_VERSION_1_1_V02 = 1, /**< SUPL TLS version 1.1 */
+ QMILOCSUPLTLSVERSIONENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSuplTlsVersionEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCEMERGENCYPROTOCOLENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_EMERGENCY_PROTOCOL_WCDMA_CP_V02 = 0, /**< Use Control Plane Protocol during an emergency while on WCDMA */
+ eQMI_LOC_EMERGENCY_PROTOCOL_WCDMA_UP_V02 = 1, /**< Use SUPL 2.0 emergency services during an emergency while on WCDMA */
+ QMILOCEMERGENCYPROTOCOLENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocEmergencyProtocolEnumT_v02;
+/**
+ @}
+ */
+
+typedef uint64_t qmiLocLppeUpAuxTechMaskT_v02;
+#define QMI_LOC_LPPE_MASK_UP_DBH_V02 ((qmiLocLppeUpAuxTechMaskT_v02)0x00000001ull) /**< Enable Device Based Hybrid (3D High Accuracy Position) mode on LPPe User Plane */
+#define QMI_LOC_LPPE_MASK_UP_AP_WIFI_MEASUREMENT_V02 ((qmiLocLppeUpAuxTechMaskT_v02)0x00000002ull) /**< Enable WLAN AP Measurements mode on LPPe User Plane */
+typedef uint64_t qmiLocLppeCpAuxTechMaskT_v02;
+#define QMI_LOC_LPPE_MASK_CP_DBH_V02 ((qmiLocLppeCpAuxTechMaskT_v02)0x00000001ull) /**< Enable Device Based Hybrid (3D High Accuracy Position) mode on LPPe Control Plane */
+#define QMI_LOC_LPPE_MASK_CP_AP_WIFI_MEASUREMENT_V02 ((qmiLocLppeCpAuxTechMaskT_v02)0x00000002ull) /**< Enable WLAN AP Measurements mode on LPPe Control Plane */
+/** @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.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- SUPL security is enabled
+ \item 0x00 (FALSE) -- SUPL security is disabled
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* 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
+ - eQMI_LOC_VX_VERSION_V1_ONLY (1) -- V1 VX version
+ - eQMI_LOC_VX_VERSION_V2_ONLY (2) -- V2 VX version
+ */
+
+ /* 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
+ - eQMI_LOC_SUPL_VERSION_1_0 (1) -- SUPL version 1.0
+ - eQMI_LOC_SUPL_VERSION_2_0 (2) -- SUPL version 2.0
+ - eQMI_LOC_SUPL_VERSION_2_0_2 (3) -- SUPL version 2.0.2
+ */
+
+ /* Optional */
+ /* LPP Configuration */
+ uint8_t lppConfig_valid; /**< Must be set to true if lppConfig is being passed */
+ qmiLocLppConfigMaskT_v02 lppConfig;
+ /**< LTE Positioning Profile (LPP) configuration.
+
+ Valid bitmasks: \begin{itemize1}
+ \item 0x00000001 -- LPP_CONFIG_ ENABLE_USER_PLANE
+ \item 0x00000002 -- LPP_CONFIG_ ENABLE_CONTROL_PLANE
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ /* Optional */
+ /* Assisted GLONASS Protocol Mask */
+ uint8_t assistedGlonassProtocolMask_valid; /**< Must be set to true if assistedGlonassProtocolMask is being passed */
+ qmiLocAssistedGlonassProtocolMaskT_v02 assistedGlonassProtocolMask;
+ /**< Configures the protocols that the location service supports
+ for assisted GLONASS.
+
+ Valid bitmasks: \n
+ - QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_RRC_CP (0x00000001) -- Assisted GLONASS is supported over RRC in the control plane
+ - QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_RRLP_UP (0x00000002) -- Assisted GLONASS is supported over RRLP in the user plane
+ - QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_LPP_UP (0x00000004) -- Assisted GLONASS is supported over LPP in the user plane;
+ QMI_LOC_LPP_CONFIG_ENABLE_USER_PLANE must be set
+ in the LPP configuration for this to take effect
+ - QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_LPP_CP (0x00000008) -- Assisted GLONASS is supported over LPP in the control plane;
+ QMI_LOC_LPP_CONFIG_ENABLE_CONTROL_PLANE must be set
+ in the LPP configuration for this to take effect
+ */
+
+ /* Optional */
+ /* SUPL Hash Algorithm */
+ uint8_t suplHashAlgo_valid; /**< Must be set to true if suplHashAlgo is being passed */
+ qmiLocSuplHashAlgoEnumT_v02 suplHashAlgo;
+ /**< SUPL hash algorithm to be used.
+
+ Valid values: \n
+ - eQMI_LOC_SUPL_HASH_ALGO_SHA1 (0) -- SHA-1 hash algorithm for SUPL version 2.0 or later
+ - eQMI_LOC_SUPL_HASH_ALGO_SHA256 (1) -- SHA-256 hash algorithm for SUPL version 2.0 or later
+ */
+
+ /* Optional */
+ /* SUPL TLS Version */
+ uint8_t suplTlsVersion_valid; /**< Must be set to true if suplTlsVersion is being passed */
+ qmiLocSuplTlsVersionEnumT_v02 suplTlsVersion;
+ /**< SUPL Transport Layer Security (TLS) version. This configuration is only
+ applicable to SUPL 2.0 or later, as SUPL 1.0 always uses TLS version 1.0.
+
+ Valid values: \n
+ - eQMI_LOC_SUPL_TLS_VERSION_1_0 (0) -- SUPL TLS version 1.0
+ - eQMI_LOC_SUPL_TLS_VERSION_1_1 (1) -- SUPL TLS version 1.1
+ */
+
+ /* Optional */
+ /* Emergency Protocol */
+ uint8_t emergencyProtocol_valid; /**< Must be set to true if emergencyProtocol is being passed */
+ qmiLocEmergencyProtocolEnumT_v02 emergencyProtocol;
+ /**< Configures the protocol to be used during an emergency. \n
+ \textbf{Note:} Currently, this can only be selected on WCDMA. For GSM
+ and 1X, the UE only allows a control plane NI trigger for positioning.
+ For LTE, the UE allows either a SUPL or a control plane NI trigger.
+
+ Valid values: \n
+ - eQMI_LOC_EMERGENCY_PROTOCOL_WCDMA_CP (0) -- Use Control Plane Protocol during an emergency while on WCDMA
+ - eQMI_LOC_EMERGENCY_PROTOCOL_WCDMA_UP (1) -- Use SUPL 2.0 emergency services during an emergency while on WCDMA
+ */
+
+ /* Optional */
+ /* Wi-Fi Scan Injection Timeout Period */
+ uint8_t wifiScanInjectTimeout_valid; /**< Must be set to true if wifiScanInjectTimeout is being passed */
+ uint8_t wifiScanInjectTimeout;
+ /**< Configures the timeout duration that the service waits for scan results
+ injection from the control point after the event notification is sent. \n
+ \textbf{Note:} The timeout value is in seconds. \n
+ Values: \n
+ 0 to 10 seconds \n
+ The minimum value (0 seconds) is the default. At this value, the service
+ disables sending the Wi-Fi scan injection notification and ignores any
+ scan results injection request.
+ */
+
+ /* Optional */
+ /* LPPe User Plane Configure */
+ uint8_t lppeUpConfig_valid; /**< Must be set to true if lppeUpConfig is being passed */
+ qmiLocLppeUpAuxTechMaskT_v02 lppeUpConfig;
+ /**< LPPe User Plane Auxiliary Technology Mask.
+
+ Valid bitmasks: \n
+ - QMI_LOC_LPPE_MASK_UP_DBH (0x00000001) -- Enable Device Based Hybrid (3D High Accuracy Position) mode on LPPe User Plane
+ - QMI_LOC_LPPE_MASK_UP_AP_WIFI_MEASUREMENT (0x00000002) -- Enable WLAN AP Measurements mode on LPPe User Plane
+ */
+
+ /* Optional */
+ /* LPPe Control Plane Configure */
+ uint8_t lppeCpConfig_valid; /**< Must be set to true if lppeCpConfig is being passed */
+ qmiLocLppeCpAuxTechMaskT_v02 lppeCpConfig;
+ /**< LPPe Control Plane Auxiliary Technology Mask.
+
+ Valid bitmasks: \n
+ - QMI_LOC_LPPE_MASK_CP_DBH (0x00000001) -- Enable Device Based Hybrid (3D High Accuracy Position) mode on LPPe Control Plane
+ - QMI_LOC_LPPE_MASK_CP_AP_WIFI_MEASUREMENT (0x00000002) -- Enable WLAN AP Measurements mode on LPPe Control Plane
+ */
+}qmiLocSetProtocolConfigParametersReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint64_t qmiLocProtocolConfigParamMaskT_v02;
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_SECURITY_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x0000000000000001ull) /**< Mask for the SUPL security configuration parameter */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_VX_VERSION_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x0000000000000002ull) /**< Mask for the VX version configuration parameter */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_VERSION_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x0000000000000004ull) /**< Mask for the SUPL version configuration parameter */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_LPP_CONFIG_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x0000000000000008ull) /**< Mask for the LPP configuration parameter */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_ASSISTED_GLONASS_PROTOCOL_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x0000000000000010ull) /**< Mask for the assisted GLONASS configuration parameter */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_HASH_ALGO_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x0000000000000020ull) /**< Mask for the SUPL hash algorithm configuration parameter */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_TLS_VERSION_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x0000000000000040ull) /**< Mask for the SUPL TLS version configuration parameter */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_EMERGENCY_PROTOCOL_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x0000000000000080ull) /**< Mask for the emergency protocol configuration parameter */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_WIFI_SCAN_INJECT_TIMEOUT_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x0000000000000100ull) /**< Mask for the Wi-Fi scan injection timeout configuration parameter */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_LPPE_UP_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x0000000000000200ull) /**< Mask for the LPPe user plane configuration parameter */
+#define QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_LPPE_CP_V02 ((qmiLocProtocolConfigParamMaskT_v02)0x0000000000000400ull) /**< Mask for the LPPe control plane 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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Failed Parameters */
+ uint8_t failedProtocolConfigParamMask_valid; /**< Must be set to true if failedProtocolConfigParamMask is being passed */
+ qmiLocProtocolConfigParamMaskT_v02 failedProtocolConfigParamMask;
+ /**< Identifies parameters that were not set successfully. This field
+ is sent only if the status is not SUCCESS.
+
+ Valid bitmasks: \n
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_SECURITY (0x0000000000000001) -- Mask for the SUPL security configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_VX_VERSION (0x0000000000000002) -- Mask for the VX version configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_VERSION (0x0000000000000004) -- Mask for the SUPL version configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_LPP_CONFIG (0x0000000000000008) -- Mask for the LPP configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_ASSISTED_GLONASS_PROTOCOL (0x0000000000000010) -- Mask for the assisted GLONASS configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_HASH_ALGO (0x0000000000000020) -- Mask for the SUPL hash algorithm configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_TLS_VERSION (0x0000000000000040) -- Mask for the SUPL TLS version configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_EMERGENCY_PROTOCOL (0x0000000000000080) -- Mask for the emergency protocol configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_WIFI_SCAN_INJECT_TIMEOUT (0x0000000000000100) -- Mask for the Wi-Fi scan injection timeout configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_LPPE_UP (0x0000000000000200) -- Mask for the LPPe user plane configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_LPPE_CP (0x0000000000000400) -- Mask for the LPPe control plane configuration parameter
+ */
+}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
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_SECURITY (0x0000000000000001) -- Mask for the SUPL security configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_VX_VERSION (0x0000000000000002) -- Mask for the VX version configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_VERSION (0x0000000000000004) -- Mask for the SUPL version configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_LPP_CONFIG (0x0000000000000008) -- Mask for the LPP configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_ASSISTED_GLONASS_PROTOCOL (0x0000000000000010) -- Mask for the assisted GLONASS configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_HASH_ALGO (0x0000000000000020) -- Mask for the SUPL hash algorithm configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_SUPL_TLS_VERSION (0x0000000000000040) -- Mask for the SUPL TLS version configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_EMERGENCY_PROTOCOL (0x0000000000000080) -- Mask for the emergency protocol configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_WIFI_SCAN_INJECT_TIMEOUT (0x0000000000000100) -- Mask for the Wi-Fi scan injection timeout configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_LPPE_UP (0x0000000000000200) -- Mask for the LPPe user plane configuration parameter
+ - QMI_LOC_PROTOCOL_CONFIG_PARAM_MASK_LPPE_CP (0x0000000000000400) -- Mask for the LPPe control plane configuration parameter
+ */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- SUPL security is enabled
+ \item 0x00 (FALSE) -- SUPL security is disabled
+ \vspace{-0.18in} \end{itemize1}*/
+
+ /* 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
+ - eQMI_LOC_VX_VERSION_V1_ONLY (1) -- V1 VX version
+ - eQMI_LOC_VX_VERSION_V2_ONLY (2) -- V2 VX version
+ */
+
+ /* 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
+ - eQMI_LOC_SUPL_VERSION_1_0 (1) -- SUPL version 1.0
+ - eQMI_LOC_SUPL_VERSION_2_0 (2) -- SUPL version 2.0
+ - eQMI_LOC_SUPL_VERSION_2_0_2 (3) -- SUPL version 2.0.2
+ */
+
+ /* Optional */
+ /* LPP Configuration */
+ uint8_t lppConfig_valid; /**< Must be set to true if lppConfig is being passed */
+ qmiLocLppConfigMaskT_v02 lppConfig;
+ /**< LTE Positioning Profile (LPP) configuration.
+
+ Valid bitmasks: \begin{itemize1}
+ \item 0x00000001 -- LPP_CONFIG_ ENABLE_USER_PLANE
+ \item 0x00000002 -- LPP_CONFIG_ ENABLE_CONTROL_PLANE
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ /* Optional */
+ /* Assisted GLONASS Protocol Mask */
+ uint8_t assistedGlonassProtocolMask_valid; /**< Must be set to true if assistedGlonassProtocolMask is being passed */
+ qmiLocAssistedGlonassProtocolMaskT_v02 assistedGlonassProtocolMask;
+ /**< Assisted GLONASS Protocol mask.
+
+ Valid bitmasks: \n
+ - QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_RRC_CP (0x00000001) -- Assisted GLONASS is supported over RRC in the control plane
+ - QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_RRLP_UP (0x00000002) -- Assisted GLONASS is supported over RRLP in the user plane
+ - QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_LPP_UP (0x00000004) -- Assisted GLONASS is supported over LPP in the user plane;
+ QMI_LOC_LPP_CONFIG_ENABLE_USER_PLANE must be set
+ in the LPP configuration for this to take effect
+ - QMI_LOC_ASSISTED_GLONASS_PROTOCOL_MASK_LPP_CP (0x00000008) -- Assisted GLONASS is supported over LPP in the control plane;
+ QMI_LOC_LPP_CONFIG_ENABLE_CONTROL_PLANE must be set
+ in the LPP configuration for this to take effect
+ */
+
+ /* Optional */
+ /* SUPL Hash Algorithm */
+ uint8_t suplHashAlgo_valid; /**< Must be set to true if suplHashAlgo is being passed */
+ qmiLocSuplHashAlgoEnumT_v02 suplHashAlgo;
+ /**< SUPL hash algorithm to be used.
+
+ Valid values: \n
+ - eQMI_LOC_SUPL_HASH_ALGO_SHA1 (0) -- SHA-1 hash algorithm for SUPL version 2.0 or later
+ - eQMI_LOC_SUPL_HASH_ALGO_SHA256 (1) -- SHA-256 hash algorithm for SUPL version 2.0 or later
+ */
+
+ /* Optional */
+ /* SUPL TLS Version */
+ uint8_t suplTlsVersion_valid; /**< Must be set to true if suplTlsVersion is being passed */
+ qmiLocSuplTlsVersionEnumT_v02 suplTlsVersion;
+ /**< SUPL TLS version. This configuration is only
+ applicable to SUPL 2.0 or later, as SUPL 1.0 always uses TLS version 1.0.
+
+ Valid values: \n
+ - eQMI_LOC_SUPL_TLS_VERSION_1_0 (0) -- SUPL TLS version 1.0
+ - eQMI_LOC_SUPL_TLS_VERSION_1_1 (1) -- SUPL TLS version 1.1
+ */
+
+ /* Optional */
+ /* Emergency Protocol */
+ uint8_t emergencyProtocol_valid; /**< Must be set to true if emergencyProtocol is being passed */
+ qmiLocEmergencyProtocolEnumT_v02 emergencyProtocol;
+ /**< Protocol to be used during emergency.
+
+ Valid values: \n
+ - eQMI_LOC_EMERGENCY_PROTOCOL_WCDMA_CP (0) -- Use Control Plane Protocol during an emergency while on WCDMA
+ - eQMI_LOC_EMERGENCY_PROTOCOL_WCDMA_UP (1) -- Use SUPL 2.0 emergency services during an emergency while on WCDMA
+ */
+
+ /* Optional */
+ /* Wi-Fi Scan Injection Timeout Period */
+ uint8_t wifiScanInjectTimeout_valid; /**< Must be set to true if wifiScanInjectTimeout is being passed */
+ uint8_t wifiScanInjectTimeout;
+ /**< Timeout duration that the service waits for a scan results
+ injection from the control point after the event notification is sent. \n
+ Values: \n
+ 0 to 10 seconds
+ */
+
+ /* Optional */
+ /* LPPe User Plane Configure */
+ uint8_t lppeUpConfig_valid; /**< Must be set to true if lppeUpConfig is being passed */
+ qmiLocLppeUpAuxTechMaskT_v02 lppeUpConfig;
+ /**< LPPe User Plane Auxiliary Technology Mask.
+
+ Valid bitmasks: \n
+ - QMI_LOC_LPPE_MASK_UP_DBH (0x00000001) -- Enable Device Based Hybrid (3D High Accuracy Position) mode on LPPe User Plane
+ - QMI_LOC_LPPE_MASK_UP_AP_WIFI_MEASUREMENT (0x00000002) -- Enable WLAN AP Measurements mode on LPPe User Plane
+ */
+
+ /* Optional */
+ /* LPPe Control Plane Configure */
+ uint8_t lppeCpConfig_valid; /**< Must be set to true if lppeCpConfig is being passed */
+ qmiLocLppeCpAuxTechMaskT_v02 lppeCpConfig;
+ /**< LPPe Control Plane Auxiliary Technology Mask.
+
+ Valid bitmasks: \n
+ - QMI_LOC_LPPE_MASK_CP_DBH (0x00000001) -- Enable Device Based Hybrid (3D High Accuracy Position) mode on LPPe Control Plane
+ - QMI_LOC_LPPE_MASK_CP_AP_WIFI_MEASUREMENT (0x00000002) -- Enable WLAN AP Measurements mode on LPPe Control Plane
+ */
+}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.
+ */
+ eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_DISABLE_V02 = 1, /**< Inertial sensors are not to be used to aid heading and position
+ improvement. */
+ QMILOCSENSORSCONTROLCONFIGSENSORUSEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSensorsControlConfigSensorUseEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCSENSORSCONTROLCONFIGSENSORPROVIDERENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_SENSOR_CONFIG_USE_PROVIDER_SSC_V02 = 0, /**< Sensors data provider is Snapdragon Sensor Core (SSC);
+ this is the default
+ */
+ eQMI_LOC_SENSOR_CONFIG_USE_PROVIDER_NATIVE_V02 = 1, /**< Sensors data provider is on the host processor */
+ QMILOCSENSORSCONTROLCONFIGSENSORPROVIDERENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSensorsControlConfigSensorProviderEnumT_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
+ - eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_ENABLE (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.
+
+ - eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_DISABLE (1) -- Inertial sensors are not to be used to aid heading and position
+ improvement.
+ */
+
+ /* Optional */
+ /* Sensors Provider */
+ uint8_t sensorProvider_valid; /**< Must be set to true if sensorProvider is being passed */
+ qmiLocSensorsControlConfigSensorProviderEnumT_v02 sensorProvider;
+ /**< Controls which sensors data provider is to be used.
+
+ Valid values: \n
+ - eQMI_LOC_SENSOR_CONFIG_USE_PROVIDER_SSC (0) -- Sensors data provider is Snapdragon Sensor Core (SSC);
+ this is the default
+
+ - eQMI_LOC_SENSOR_CONFIG_USE_PROVIDER_NATIVE (1) -- Sensors data provider is on the host processor
+ */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocSetSensorControlConfigIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Retrieves the current sensor control configuration. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetSensorControlConfigReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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
+ - eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_ENABLE (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.
+
+ - eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_DISABLE (1) -- Inertial sensors are not to be used to aid heading and position
+ improvement.
+ */
+
+ /* Optional */
+ /* Sensors Provider */
+ uint8_t sensorProvider_valid; /**< Must be set to true if sensorProvider is being passed */
+ qmiLocSensorsControlConfigSensorProviderEnumT_v02 sensorProvider;
+ /**< Controls which sensors data provider to be used.
+
+ Valid values: \n
+ - eQMI_LOC_SENSOR_CONFIG_USE_PROVIDER_SSC (0) -- Sensors data provider is Snapdragon Sensor Core (SSC);
+ this is the default
+
+ - eQMI_LOC_SENSOR_CONFIG_USE_PROVIDER_NATIVE (1) -- Sensors data provider is on the host processor
+ */
+}qmiLocGetSensorControlConfigIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint32_t qmiLocSensorPropertiesMaskT_v02;
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_GYRO_BIAS_VARIANCE_RANDOM_WALK_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000001) /**< Denotes the gyro bias variance random walk parameter */
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000002) /**< Denotes the velocity random walk spectral density parameter */
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_ACCELERATION_RANDOM_WALK_SPECTRAL_DENSITY_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000004) /**< Denotes the acceleration random walk spectral density parameter */
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000008) /**< Denotes the angle random walk spectral density parameter */
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_RATE_RANDOM_WALK_SPECTRAL_DENSITY_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000010) /**< Denotes the rate random walk spectral density parameter */
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_DATA_USE_CONTROL_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000020) /**< Denotes the vehicle data use control parameter */
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_VELOCITY_RWSD_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000040) /**< Denotes the vehicle velocity random walk spectral density */
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ACCEL_RWSD_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000080) /**< Denotes the vehicle accelerometer random walk spectral density */
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ANGLE_RWSD_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000100) /**< Denotes the vehicle angle random walk spectral density */
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ANGULAR_RATE_RWSD_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000200) /**< Denotes the vehicle angular rate random walk spectral density */
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ODOMETRY_SCALE_RWSD_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000400) /**< Denotes the vehicle odometry scale random walk spectral density */
+#define QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ODOMETRY_VARIANCE_V02 ((qmiLocSensorPropertiesMaskT_v02)0x00000800) /**< Denotes the vehicle odometry variance */
+typedef uint64_t qmiLocVehicleDataUseControlMaskT_v02;
+#define QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ACCEL_X_AXIS_V02 ((qmiLocVehicleDataUseControlMaskT_v02)0x0000000000000001ull) /**< Enable use of X-axis vehicle acceleration sensor data */
+#define QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ACCEL_Y_AXIS_V02 ((qmiLocVehicleDataUseControlMaskT_v02)0x0000000000000002ull) /**< Enable use of Y-axis vehicle acceleration sensor data */
+#define QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ACCEL_Z_AXIS_V02 ((qmiLocVehicleDataUseControlMaskT_v02)0x0000000000000004ull) /**< Enable use of Z-axis vehicle acceleration sensor data */
+#define QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_GYRO_X_AXIS_V02 ((qmiLocVehicleDataUseControlMaskT_v02)0x0000000000000010ull) /**< Enable use of X-axis vehicle gyroscope data */
+#define QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_GYRO_Y_AXIS_V02 ((qmiLocVehicleDataUseControlMaskT_v02)0x0000000000000020ull) /**< Enable use of Y-axis vehicle gyroscope data */
+#define QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_GYRO_Z_AXIS_V02 ((qmiLocVehicleDataUseControlMaskT_v02)0x0000000000000040ull) /**< Enable use of Z-axis vehicle gyroscope data */
+#define QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ODOMETRY_V02 ((qmiLocVehicleDataUseControlMaskT_v02)0x0000000000000100ull) /**< Enable use of odometry data */
+/** @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 Random Walk Variance */
+ uint8_t gyroBiasVarianceRandomWalk_valid; /**< Must be set to true if gyroBiasVarianceRandomWalk is being passed */
+ float gyroBiasVarianceRandomWalk;
+ /**< Specifies the gyro bias random walk variance parameter as a positive
+ floating-point value. This value has internal default value 1.0e-5 radian^2/second^4.
+ 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
+
+ */
+
+ /* Optional */
+ /* Velocity Random Walk Spectral Density */
+ uint8_t velocityRandomWalkSpectralDensity_valid; /**< Must be set to true if velocityRandomWalkSpectralDensity is being passed */
+ float velocityRandomWalkSpectralDensity;
+ /**< Specifies the velocity random walk spectral density parameter as a positive
+ floating-point value. This value does not have any internal defaults.
+ The velocity random walk spectral density parameter is derived from either the
+ sensors data sheet or a sensors conformance test. \n
+ - Units: Meters/seconds^2/Hertz^0.5
+
+ */
+
+ /* Optional */
+ /* Acceleration Random Walk Spectral Density */
+ uint8_t accelerationRandomWalkSpectralDensity_valid; /**< Must be set to true if accelerationRandomWalkSpectralDensity is being passed */
+ float accelerationRandomWalkSpectralDensity;
+ /**< Specifies the acceleration random walk spectral density parameter as a positive
+ floating-point value. This value does not have any internal defaults.
+ The acceleration random walk spectral density parameter is derived from either the
+ sensors data sheet or a sensors conformance test. \n
+ - Units: Meters/seconds^3/Hertz^0.5
+
+ */
+
+ /* Optional */
+ /* Angle Random Walk Spectral Density */
+ uint8_t angleRandomWalkSpectralDensity_valid; /**< Must be set to true if angleRandomWalkSpectralDensity is being passed */
+ float angleRandomWalkSpectralDensity;
+ /**< Specifies the angle random walk spectral density parameter as a positive
+ floating-point value. This value does not have any internal defaults.
+ The angle random walk spectral density parameter is derived from either the
+ sensors data sheet or a sensors conformance test. \n
+ - Units: Radians/seconds/Hertz^0.5
+
+ */
+
+ /* Optional */
+ /* Rate Random Walk Spectral Density */
+ uint8_t rateRandomWalkSpectralDensity_valid; /**< Must be set to true if rateRandomWalkSpectralDensity is being passed */
+ float rateRandomWalkSpectralDensity;
+ /**< Specifies the rate random walk spectral density parameter as a positive
+ floating-point value. This value does not have any internal defaults.
+ The rate random walk spectral density parameter is derived from either the
+ sensors data sheet or a sensors conformance test. \n
+ - Units: Radians/seconds^2/Hertz^0.5
+
+ */
+
+ /* Optional */
+ /* Vehicle Data Use Control */
+ uint8_t vehicleDataUse_valid; /**< Must be set to true if vehicleDataUse is being passed */
+ qmiLocVehicleDataUseControlMaskT_v02 vehicleDataUse;
+ /**< Identifies which portions of the vehicle data to use in location
+ estimation (information provided by the message
+ QMI_LOC_INJECT_VEHICLE_SENSOR_DATA). Valid bitmasks: \n
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ACCEL_X_AXIS (0x0000000000000001) -- Enable use of X-axis vehicle acceleration sensor data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ACCEL_Y_AXIS (0x0000000000000002) -- Enable use of Y-axis vehicle acceleration sensor data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ACCEL_Z_AXIS (0x0000000000000004) -- Enable use of Z-axis vehicle acceleration sensor data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_GYRO_X_AXIS (0x0000000000000010) -- Enable use of X-axis vehicle gyroscope data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_GYRO_Y_AXIS (0x0000000000000020) -- Enable use of Y-axis vehicle gyroscope data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_GYRO_Z_AXIS (0x0000000000000040) -- Enable use of Z-axis vehicle gyroscope data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ODOMETRY (0x0000000000000100) -- Enable use of odometry data
+ \b Note: All other bits are reserved for future use and are to be set to 0. */
+
+ /* Optional */
+ /* Vehicle Velocity Random Walk Spectral Density */
+ uint8_t vehicleVelocityRandomWalkSpectralDensity_valid; /**< Must be set to true if vehicleVelocityRandomWalkSpectralDensity is being passed */
+ float vehicleVelocityRandomWalkSpectralDensity;
+ /**< Vehicle velocity random walk spectral density. \n
+ - Type: 32-bit float \n
+ - Units: Meters/seconds^2/Hz^0.5 \n
+ - Valid values: Positive values \n
+ - Default: None
+ */
+
+ /* Optional */
+ /* Vehicle Acceleration Random Walk Spectral Density */
+ uint8_t vehicleAccelRandomWalkSpectralDensity_valid; /**< Must be set to true if vehicleAccelRandomWalkSpectralDensity is being passed */
+ float vehicleAccelRandomWalkSpectralDensity;
+ /**< Vehicle accelerometer random walk spectral density. \n
+ - Type: 32-bit float \n
+ - Units: Meters/seconds^3/Hz^0.5 \n
+ - Valid values: Positive values \n
+ - Default: None
+ */
+
+ /* Optional */
+ /* Vehicle Angle Random Walk Spectral Density */
+ uint8_t vehicleAngleRandomWalkSpectralDensity_valid; /**< Must be set to true if vehicleAngleRandomWalkSpectralDensity is being passed */
+ float vehicleAngleRandomWalkSpectralDensity;
+ /**< Vehicle angle random walk spectral density. \n
+ - Type: 32-bit float \n
+ - Units: Radians/seconds/Hz^0.5 \n
+ - Valid values: Positive values \n
+ - Default: None
+ */
+
+ /* Optional */
+ /* Vehicle Angular Rate Random Walk Spectral Density */
+ uint8_t vehicleAngularRateRandomWalkSpectralDensity_valid; /**< Must be set to true if vehicleAngularRateRandomWalkSpectralDensity is being passed */
+ float vehicleAngularRateRandomWalkSpectralDensity;
+ /**< Vehicle angular rate random walk spectral density. \n
+ - Type: 32-bit float \n
+ - Units: Radians/seconds^2/Hz^0.5 \n
+ - Valid values: Positive values \n
+ - Default: None
+ */
+
+ /* Optional */
+ /* Vehicle Odometry Scale Factor Random Walk Spectral Density */
+ uint8_t vehicleOdometryScaleFactorRandomWalkSpectralDensity_valid; /**< Must be set to true if vehicleOdometryScaleFactorRandomWalkSpectralDensity is being passed */
+ float vehicleOdometryScaleFactorRandomWalkSpectralDensity;
+ /**< Vehicle odometry scale factor random walk spectral density. \n
+ - Type: 32-bit float \n
+ - Units: (1/seconds)/Hz^0.5 \n
+ - Range: Approximately 0.0001 to 0.001 \n
+ - Default: 0.001 (actual calibration recommended)
+ */
+
+ /* Optional */
+ /* Vehicle Odometry Variance */
+ uint8_t vehicleOdometryVariance_valid; /**< Must be set to true if vehicleOdometryVariance is being passed */
+ float vehicleOdometryVariance;
+ /**< Vehicle odometry variance of each odometry sample
+ (coarseness of measurement). \n
+ - Type: 32-bit float \n
+ - Units: Meters^2 \n
+ - Valid values: Positive values \n
+ - Default: None
+ */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+
+ /* Optional */
+ /* Failed Set Sensor Properties */
+ uint8_t failedSensorPropertiesMask_valid; /**< Must be set to true if failedSensorPropertiesMask is being passed */
+ qmiLocSensorPropertiesMaskT_v02 failedSensorPropertiesMask;
+ /**< This field is sent only if the status is not SUCCESS.
+ Identifies the parameters that were not set successfully.
+
+ Valid bitmasks:
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_GYRO_BIAS_VARIANCE_RANDOM_WALK (0x00000001) -- Denotes the gyro bias variance random walk parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY (0x00000002) -- Denotes the velocity random walk spectral density parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_ACCELERATION_RANDOM_WALK_SPECTRAL_DENSITY (0x00000004) -- Denotes the acceleration random walk spectral density parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_ANGLE_RANDOM_WALK_SPECTRAL_DENSITY (0x00000008) -- Denotes the angle random walk spectral density parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_RATE_RANDOM_WALK_SPECTRAL_DENSITY (0x00000010) -- Denotes the rate random walk spectral density parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_DATA_USE_CONTROL (0x00000020) -- Denotes the vehicle data use control parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_VELOCITY_RWSD (0x00000040) -- Denotes the vehicle velocity random walk spectral density
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ACCEL_RWSD (0x00000080) -- Denotes the vehicle accelerometer random walk spectral density
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ANGLE_RWSD (0x00000100) -- Denotes the vehicle angle random walk spectral density
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ANGULAR_RATE_RWSD (0x00000200) -- Denotes the vehicle angular rate random walk spectral density
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ODOMETRY_SCALE_RWSD (0x00000400) -- Denotes the vehicle odometry scale random walk spectral density
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ODOMETRY_VARIANCE (0x00000800) -- Denotes the vehicle odometry variance
+ \vspace{-0.18in} \end{itemize1}
+ */
+}qmiLocSetSensorPropertiesIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Retrieves the current sensor properties. */
+typedef struct {
+
+ /* Mandatory */
+ /* Sensor Properties Config Parameters */
+ qmiLocSensorPropertiesMaskT_v02 getSensorPropertiesMask;
+ /**< Mask denoting the sensor properties parameters to be retrieved.
+
+ Valid bitmasks:
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_GYRO_BIAS_VARIANCE_RANDOM_WALK (0x00000001) -- Denotes the gyro bias variance random walk parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY (0x00000002) -- Denotes the velocity random walk spectral density parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_ACCELERATION_RANDOM_WALK_SPECTRAL_DENSITY (0x00000004) -- Denotes the acceleration random walk spectral density parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_ANGLE_RANDOM_WALK_SPECTRAL_DENSITY (0x00000008) -- Denotes the angle random walk spectral density parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_RATE_RANDOM_WALK_SPECTRAL_DENSITY (0x00000010) -- Denotes the rate random walk spectral density parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_DATA_USE_CONTROL (0x00000020) -- Denotes the vehicle data use control parameter
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_VELOCITY_RWSD (0x00000040) -- Denotes the vehicle velocity random walk spectral density
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ACCEL_RWSD (0x00000080) -- Denotes the vehicle accelerometer random walk spectral density
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ANGLE_RWSD (0x00000100) -- Denotes the vehicle angle random walk spectral density
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ANGULAR_RATE_RWSD (0x00000200) -- Denotes the vehicle angular rate random walk spectral density
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ODOMETRY_SCALE_RWSD (0x00000400) -- Denotes the vehicle odometry scale random walk spectral density
+ - QMI_LOC_SENSOR_PROPERTIES_MASK_VEHICLE_ODOMETRY_VARIANCE (0x00000800) -- Denotes the vehicle odometry variance
+ */
+}qmiLocGetSensorPropertiesReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Gyro Bias Random Walk Variance */
+ uint8_t gyroBiasVarianceRandomWalk_valid; /**< Must be set to true if gyroBiasVarianceRandomWalk is being passed */
+ float gyroBiasVarianceRandomWalk;
+ /**< Specifies the gyro bias random walk variance parameter as a positive
+ floating-point value. This value has internal default value 1.0e-5 radian^2/second^4.
+ 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
+
+ */
+
+ /* Optional */
+ /* Velocity Random Walk Spectral Density */
+ uint8_t velocityRandomWalkSpectralDensity_valid; /**< Must be set to true if velocityRandomWalkSpectralDensity is being passed */
+ float velocityRandomWalkSpectralDensity;
+ /**< Specifies the velocity random walk spectral density parameter as a positive
+ floating-point value. This value does not have any internal defaults.
+ The velocity random walk spectral density parameter is derived from either the
+ sensors data sheet or a sensors conformance test. \n
+ - Units: Meters/seconds^2/Hertz^0.5
+
+ */
+
+ /* Optional */
+ /* Acceleration Random Walk Spectral Density */
+ uint8_t accelerationRandomWalkSpectralDensity_valid; /**< Must be set to true if accelerationRandomWalkSpectralDensity is being passed */
+ float accelerationRandomWalkSpectralDensity;
+ /**< Specifies the acceleration random walk spectral density parameter as a positive
+ floating-point value. This value does not have any internal defaults.
+ The acceleration random walk spectral density parameter is derived from either the
+ sensors data sheet or a sensors conformance test. \n
+ - Units: Meters/seconds^3/Hertz^0.5
+
+ */
+
+ /* Optional */
+ /* Angle Random Walk Spectral Density */
+ uint8_t angleRandomWalkSpectralDensity_valid; /**< Must be set to true if angleRandomWalkSpectralDensity is being passed */
+ float angleRandomWalkSpectralDensity;
+ /**< Specifies the angle random walk spectral density parameter as a positive
+ floating-point value. This value does not have any internal defaults.
+ The angle random walk spectral density parameter is derived from either the
+ sensors data sheet or a sensors conformance test. \n
+ - Units: Radians/seconds/Hertz^0.5
+
+ */
+
+ /* Optional */
+ /* Rate Random Walk Spectral Density */
+ uint8_t rateRandomWalkSpectralDensity_valid; /**< Must be set to true if rateRandomWalkSpectralDensity is being passed */
+ float rateRandomWalkSpectralDensity;
+ /**< Specifies the rate random walk spectral density parameter as a positive
+ floating-point value. This value does not have any internal defaults.
+ The rate random walk spectral density parameter is derived from either the
+ sensors data sheet or a sensors conformance test. \n
+ - Units: Radians/seconds^2/Hertz^0.5
+
+ */
+
+ /* Optional */
+ /* Vehicle Data Use Control */
+ uint8_t vehicleDataUse_valid; /**< Must be set to true if vehicleDataUse is being passed */
+ qmiLocVehicleDataUseControlMaskT_v02 vehicleDataUse;
+ /**< Identifies which portions of the vehicle data to use in location
+ estimation (information provided by message
+ QMI_LOC_INJECT_VEHICLE_SENSOR_DATA). Valid bitmasks: \n
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ACCEL_X_AXIS (0x0000000000000001) -- Enable use of X-axis vehicle acceleration sensor data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ACCEL_Y_AXIS (0x0000000000000002) -- Enable use of Y-axis vehicle acceleration sensor data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ACCEL_Z_AXIS (0x0000000000000004) -- Enable use of Z-axis vehicle acceleration sensor data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_GYRO_X_AXIS (0x0000000000000010) -- Enable use of X-axis vehicle gyroscope data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_GYRO_Y_AXIS (0x0000000000000020) -- Enable use of Y-axis vehicle gyroscope data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_GYRO_Z_AXIS (0x0000000000000040) -- Enable use of Z-axis vehicle gyroscope data
+ - QMI_LOC_VEHICLE_DATA_ENABLE_USE_MASK_ODOMETRY (0x0000000000000100) -- Enable use of odometry data
+ @note1 All other bits are reserved for future use and are to be set to 0. */
+
+ /* Optional */
+ /* Vehicle Velocity Random Walk Spectral Density */
+ uint8_t vehicleVelocityRandomWalkSpectralDensity_valid; /**< Must be set to true if vehicleVelocityRandomWalkSpectralDensity is being passed */
+ float vehicleVelocityRandomWalkSpectralDensity;
+ /**< Vehicle velocity random walk spectral density. \n
+ - Type: 32-bit float \n
+ - Units: Meters/seconds^2/Hz^0.5 \n
+ - Valid values: Positive values \n
+ - Default: None
+ */
+
+ /* Optional */
+ /* Vehicle Acceleration Random Walk Spectral Density */
+ uint8_t vehicleAccelRandomWalkSpectralDensity_valid; /**< Must be set to true if vehicleAccelRandomWalkSpectralDensity is being passed */
+ float vehicleAccelRandomWalkSpectralDensity;
+ /**< Vehicle accelerometer random walk spectral density. \n
+ - Type: 32-bit float \n
+ - Units: Meters/seconds^3/Hz^0.5 \n
+ - Valid values: Positive values \n
+ - Default: None
+ */
+
+ /* Optional */
+ /* Vehicle Angle Random Walk Spectral Density */
+ uint8_t vehicleAngleRandomWalkSpectralDensity_valid; /**< Must be set to true if vehicleAngleRandomWalkSpectralDensity is being passed */
+ float vehicleAngleRandomWalkSpectralDensity;
+ /**< Vehicle angle random walk spectral density. \n
+ - Type: 32-bit float \n
+ - Units: Radians/seconds/Hz^0.5 \n
+ - Valid values: Positive values \n
+ - Default: None
+ */
+
+ /* Optional */
+ /* Vehicle Angular Rate Random Walk Spectral Density */
+ uint8_t vehicleAngularRateRandomWalkSpectralDensity_valid; /**< Must be set to true if vehicleAngularRateRandomWalkSpectralDensity is being passed */
+ float vehicleAngularRateRandomWalkSpectralDensity;
+ /**< Vehicle angular rate random walk spectral density. \n
+ - Type: 32-bit float \n
+ - Units: Radians/seconds^2/Hz^0.5 \n
+ - Valid values: Positive values \n
+ - Default: None
+ */
+
+ /* Optional */
+ /* Vehicle Odometry Scale Factor Random Walk Spectral Density */
+ uint8_t vehicleOdometryScaleFactorRandomWalkSpectralDensity_valid; /**< Must be set to true if vehicleOdometryScaleFactorRandomWalkSpectralDensity is being passed */
+ float vehicleOdometryScaleFactorRandomWalkSpectralDensity;
+ /**< Vehicle odometry scale factor random walk spectral density. \n
+ - Type: 32-bit float \n
+ - Units: (1/seconds)/Hz^0.5 \n
+ - Range: Approximately 0.0001 to 0.001 \n
+ - Default: 0.001 (actual calibration recommended)
+ */
+
+ /* Optional */
+ /* Vehicle Odometry Variance */
+ uint8_t vehicleOdometryVariance_valid; /**< Must be set to true if vehicleOdometryVariance is being passed */
+ float vehicleOdometryVariance;
+ /**< Vehicle odometry variance of each odometry sample
+ (coarseness of measurement). \n
+ - Type: 32-bit float \n
+ - Units: Meters^2 \n
+ - Valid values: Positive values \n
+ - Default: None
+ */
+}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 */
+ eQMI_LOC_SENSOR_PERFORMANCE_CONTROL_MODE_FORCED_V02 = 1, /**< 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. */
+ QMILOCSENSORPERFORMANCECONTROLMODEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSensorPerformanceControlModeEnumT_v02;
+/**
+ @}
+ */
+
+typedef uint32_t qmiLocSensorAlgorithmMaskT_v02;
+#define QMI_LOC_SENSOR_ALGORITHM_MASK_DISABLE_INS_POSITIONING_FILTER_V02 ((qmiLocSensorAlgorithmMaskT_v02)0x00000001) /**< Inertial sensors are not to be used in Accelerometer-integrated fashion with
+ GNSS. They can still be used for aiding in heading improvements. */
+/** @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
+ - eQMI_LOC_SENSOR_PERFORMANCE_CONTROL_MODE_AUTO (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
+ - eQMI_LOC_SENSOR_PERFORMANCE_CONTROL_MODE_FORCED (1) -- 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.
+ */
+
+ /* Optional */
+ /* Accelerometer Sampling Specification */
+ uint8_t accelSamplingSpec_valid; /**< Must be set to true if accelSamplingSpec is being passed */
+ qmiLocSensorControlConfigSamplingSpecStructT_v02 accelSamplingSpec;
+ /**< \vspace{0.06in} \n Sets the nominal rate at which the GNSS location
+ engine is to request acceleration data to be used by the low data rate
+ filter. 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. \n
+ Default: 10 Hz sampling rate and 2 Hz batching rate.
+ */
+
+ /* Optional */
+ /* Gyroscope Sampling Specification */
+ uint8_t gyroSamplingSpec_valid; /**< Must be set to true if gyroSamplingSpec is being passed */
+ qmiLocSensorControlConfigSamplingSpecStructT_v02 gyroSamplingSpec;
+ /**< \vspace{0.06in} \n Sets the nominal rate at which the GNSS location
+ engine is to request gyro data to be used by the high data rate filter.
+ 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. \n
+ Default: 10 Hz sampling rate and 2 Hz batching rate.
+ */
+
+ /* Optional */
+ /* Algorithm Configuration */
+ uint8_t algorithmConfig_valid; /**< Must be set to true if algorithmConfig is being passed */
+ qmiLocSensorAlgorithmMaskT_v02 algorithmConfig;
+ /**< Sets which sensor algorithms are to be used when processing sensor data.
+
+ Valid bitmasks: \begin{itemize1}
+ \item 0x00000001 -- DISABLE_INS_ POSITIONING_FILTER
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ /* Optional */
+ /* High Data Rate Filter Accelerometer Sampling Specification */
+ uint8_t accelSamplingSpecHigh_valid; /**< Must be set to true if accelSamplingSpecHigh is being passed */
+ qmiLocSensorControlConfigSamplingSpecStructT_v02 accelSamplingSpecHigh;
+ /**< \vspace{0.06in} \n Sets the nominal rate at which the GNSS location engine is to request
+ acceleration data to be used by the high data rate filter. 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. \n
+ Default: 100 Hz sampling rate and 4 Hz batching rate.
+ */
+
+ /* Optional */
+ /* High Data Rate Filter Gyroscope Sampling Specification */
+ uint8_t gyroSamplingSpecHigh_valid; /**< Must be set to true if gyroSamplingSpecHigh is being passed */
+ qmiLocSensorControlConfigSamplingSpecStructT_v02 gyroSamplingSpecHigh;
+ /**< \vspace{0.06in} \n Sets the nominal rate at which the GNSS location engine is to request
+ gyro data to be used by the high data rate filter. 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. \n
+ Default: 100 Hz sampling rate and 4 Hz batching rate.
+ */
+}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 */
+#define QMI_LOC_SENSOR_PERFORMANCE_CONTROL_CONFIG_PARAM_MASK_ALGORITHM_CONFIG_V02 ((qmiLocSensorPerformanceControlConfigFailureMaskT_v02)0x00000008) /**< Failed to set the algorithm configuration */
+#define QMI_LOC_SENSOR_PERFORMANCE_CONTROL_CONFIG_PARAM_MASK_ACCEL_SAMPLING_SPEC_HIGH_V02 ((qmiLocSensorPerformanceControlConfigFailureMaskT_v02)0x00000010) /**< Failed to set the accelerometer sampling specification */
+#define QMI_LOC_SENSOR_PERFORMANCE_CONTROL_CONFIG_PARAM_MASK_GYRO_SAMPLING_SPEC_HIGH_V02 ((qmiLocSensorPerformanceControlConfigFailureMaskT_v02)0x00000020) /**< 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.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Failed Configuration */
+ uint8_t failedConfiguration_valid; /**< Must be set to true if failedConfiguration is being passed */
+ qmiLocSensorPerformanceControlConfigFailureMaskT_v02 failedConfiguration;
+ /**< Identifies parameters that were not configured successfully. This field
+ is sent only if the status is not a success.
+
+
+ Valid bitmasks: \begin{itemize1}
+ \item 0x00000001 -- PERFORMANCE_ MODE
+ \item 0x00000002 -- ACCEL_SAMPLING_ SPEC
+ \item 0x00000004 -- GYRO_SAMPLING_ SPEC
+ \item 0x00000008 -- ALGORITHM_ CONFIG
+ \item 0x00000010 -- ACCEL_SAMPLING_ SPEC_HIGH
+ \item 0x00000020 -- GYRO_SAMPLING_ SPEC_HIGH
+ \vspace{-0.18in} \end{itemize1}
+ */
+}qmiLocSetSensorPerformanceControlConfigIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Retrieves the current sensor performance control
+ configuration. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetSensorPerformanceControlConfigReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @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.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* 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
+ - eQMI_LOC_SENSOR_PERFORMANCE_CONTROL_MODE_AUTO (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
+ - eQMI_LOC_SENSOR_PERFORMANCE_CONTROL_MODE_FORCED (1) -- 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.
+ */
+
+ /* Optional */
+ /* Accelerometer Sampling Specification */
+ uint8_t accelSamplingSpec_valid; /**< Must be set to true if accelSamplingSpec is being passed */
+ qmiLocSensorControlConfigSamplingSpecStructT_v02 accelSamplingSpec;
+ /**< \vspace{0.06in} \n Sets the nominal rate at which the GNSS location engine is to request
+ acceleration data to be used by the high data rate filter. 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. \n
+ Default: 10 Hz sampling rate and 2 Hz batching rate.
+ */
+
+ /* Optional */
+ /* Gyroscope Sampling Specification */
+ uint8_t gyroSamplingSpec_valid; /**< Must be set to true if gyroSamplingSpec is being passed */
+ qmiLocSensorControlConfigSamplingSpecStructT_v02 gyroSamplingSpec;
+ /**< \vspace{0.06in} \n Sets the nominal rate at which the GNSS location engine is to request
+ gyro data to be used by the high data rate filter. 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. \n
+ Default: 10 Hz sampling rate and 2 Hz batching rate.
+ */
+
+ /* Optional */
+ /* Algorithm Configuration */
+ uint8_t algorithmConfig_valid; /**< Must be set to true if algorithmConfig is being passed */
+ qmiLocSensorAlgorithmMaskT_v02 algorithmConfig;
+ /**< Informs which sensor algorithms are currently set.
+
+ Valid bitmasks: \begin{itemize1}
+ \item 0x00000001 -- DISABLE_INS_ POSITIONING_FILTER
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ /* Optional */
+ /* High Data Rate Filter Accelerometer Sampling Specification */
+ uint8_t accelSamplingSpecHigh_valid; /**< Must be set to true if accelSamplingSpecHigh is being passed */
+ qmiLocSensorControlConfigSamplingSpecStructT_v02 accelSamplingSpecHigh;
+ /**< \vspace{0.06in} \n Sets the nominal rate at which the GNSS location engine is to request
+ acceleration data to be used by the high data rate filter. 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. \n
+ Default: 100 Hz sampling rate and 4 Hz batching rate.
+ */
+
+ /* Optional */
+ /* High Data Rate Filter Gyroscope Sampling Specification */
+ uint8_t gyroSamplingSpecHigh_valid; /**< Must be set to true if gyroSamplingSpecHigh is being passed */
+ qmiLocSensorControlConfigSamplingSpecStructT_v02 gyroSamplingSpecHigh;
+ /**< \vspace{0.06in} \n Sets the nominal rate at which the GNSS location engine is to request
+ gyro data to be used by the high data rate filter. 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. \n
+ Default: 100 Hz sampling rate and 4 Hz batching rate.
+ */
+}qmiLocGetSensorPerformanceControlConfigIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects a SUPL certificate to be used in AGNSS sessions. */
+typedef struct {
+
+ /* Mandatory */
+ /* SUPL Certificate ID */
+ uint8_t suplCertId;
+ /**< Certificate ID of the SUPL certificate. \n
+ - Units: Bytes \n
+ - Range: 0 to 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];
+ /**< SUPL certificate contents. \n
+ - Type: Array of bytes \n
+ - Maximum certificate size: 2000 bytes */
+}qmiLocInjectSuplCertificateReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects 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.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocInjectSuplCertificateIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Deletes 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. \n
+ - Units: Bytes \n
+ - Range: 0 to 9 \n
+ If suplCertId is not specified,
+ all SUPL certificates are deleted. */
+}qmiLocDeleteSuplCertificateReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Deletes a SUPL certificate. */
+typedef struct {
+
+ /* Mandatory */
+ /* SUPL Certificate Deletion Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Delete SUPL Certificate request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocDeleteSuplCertificateIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint32_t qmiLocPositionEngineConfigParamMaskT_v02;
+#define QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_INJECTED_POSITION_CONTROL_V02 ((qmiLocPositionEngineConfigParamMaskT_v02)0x00000001) /**< Denotes whether the position engine uses the
+ injected position in a direct position calculation. */
+#define QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_FILTER_SV_USAGE_V02 ((qmiLocPositionEngineConfigParamMaskT_v02)0x00000002) /**< Denotes whether 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) /**< Denotes whether the position engine stores assistance data
+ in persistent memory. */
+#define QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_ENABLE_FASTER_TTFF_V02 ((qmiLocPositionEngineConfigParamMaskT_v02)0x00000008) /**< Denotes whether the position engine stays on to optimize
+ the TTFF for the subsequent position fix. */
+/** @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 is used in the position engine.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 (TRUE) -- Use the injected position in a direct position
+ calculation
+ \item 0x00 (FALSE) -- Do not use the injected position in a direct
+ position calculation
+ \end{itemize1}
+ The default value is TRUE.
+ */
+
+ /* Optional */
+ /* Filter SV Usage */
+ uint8_t filterSvUsage_valid; /**< Must be set to true if filterSvUsage is being passed */
+ uint8_t filterSvUsage;
+ /**< Controls whether SV usage is filtered in a position fix.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 (TRUE) -- Filter the usage of SVs in the fix
+ \item 0x00 (FALSE) -- Do not filter the usage of SVs in the fix
+ \end{itemize1}
+ The default value is FALSE.
+ */
+
+ /* 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 is to be stored in
+ persistent memory.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 (TRUE) -- Store assistance data in persistent memory
+ \item 0x00 (FALSE) -- Do not store assistance data in persistent memory
+ \end{itemize1}
+ The default value is TRUE.
+ */
+
+ /* Optional */
+ /* Enable Faster TTFF */
+ uint8_t enableFasterTTFF_valid; /**< Must be set to true if enableFasterTTFF is being passed */
+ uint8_t enableFasterTTFF;
+ /**< Allows the receiver to stay on after a position session in order to
+ collect information that will help reduce the Time To First Fix (TTFF)
+ when the next position request is made. The receiver will stay
+ on only if the engine determines that it needs to collect some
+ information. The receiver will stay on for the duration needed to
+ collect the information.
+ If enabled, the clients may see a delay in receiving the Engine Off
+ event after the position session ends.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 (TRUE) -- Allow the engine to stay on for reduced TTFF
+ \item 0x00 (FALSE) -- Do not allow the engine to stay on for reduced
+ TTFF
+ \end{itemize1}
+ The default value is TRUE.*/
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Failed Parameters */
+ uint8_t failedPositionEngineConfigParamMask_valid; /**< Must be set to true if failedPositionEngineConfigParamMask is being passed */
+ qmiLocPositionEngineConfigParamMaskT_v02 failedPositionEngineConfigParamMask;
+ /**< Identifies the parameters that were not set successfully.
+ This field is sent only if the status is other than SUCCESS.
+
+ Valid bitmasks:\n
+ - QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_INJECTED_POSITION_CONTROL (0x00000001) -- Denotes whether the position engine uses the
+ injected position in a direct position calculation.
+ - QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_FILTER_SV_USAGE (0x00000002) -- Denotes whether the position engine filters the
+ SV usage in the fix.
+ - QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_STORE_ASSIST_DATA (0x00000004) -- Denotes whether the position engine stores assistance data
+ in persistent memory.
+ - QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_ENABLE_FASTER_TTFF (0x00000008) -- Denotes whether the position engine stays on to optimize
+ the TTFF for the subsequent position fix.
+ */
+}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:
+ - QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_INJECTED_POSITION_CONTROL (0x00000001) -- Denotes whether the position engine uses the
+ injected position in a direct position calculation.
+ - QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_FILTER_SV_USAGE (0x00000002) -- Denotes whether the position engine filters the
+ SV usage in the fix.
+ - QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_STORE_ASSIST_DATA (0x00000004) -- Denotes whether the position engine stores assistance data
+ in persistent memory.
+ - QMI_LOC_POSITION_ENGINE_CONFIG_PARAM_MASK_ENABLE_FASTER_TTFF (0x00000008) -- Denotes whether the position engine stays on to optimize
+ the TTFF for the subsequent position fix.
+ */
+}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
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Injected Position Control */
+ uint8_t injectedPositionControl_valid; /**< Must be set to true if injectedPositionControl is being passed */
+ uint8_t injectedPositionControl;
+ /**< Specifies whether the injected position is used for a direct calculation
+ in the position engine.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 (TRUE) -- The injected position is used in a direct
+ position calculation
+ \item 0x00 (FALSE) -- The injected position is not used in a direct
+ position calculation
+ \end{itemize1}
+ The default value is TRUE.
+ */
+
+ /* Optional */
+ /* Filter SV Usage */
+ uint8_t filterSvUsage_valid; /**< Must be set to true if filterSvUsage is being passed */
+ uint8_t filterSvUsage;
+ /**< Specifies whether SV usage is filtered in a position fix.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 (TRUE) -- SV usage is filtered in the fix
+ \item 0x00 (FALSE) -- SV usage is not filtered in the fix
+ \end{itemize1}
+ The default value is FALSE.
+ */
+
+ /* Optional */
+ /* Store Assist Data */
+ uint8_t storeAssistData_valid; /**< Must be set to true if storeAssistData is being passed */
+ uint8_t storeAssistData;
+ /**< Specifies whether assistance data is stored in persistent memory.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 (TRUE) -- Assistance data is stored in persistent memory
+ \item 0x00 (FALSE) -- Assistance data is not stored in persistent
+ memory
+ \end{itemize1}
+ The default value is TRUE.
+ */
+
+ /* Optional */
+ /* Enable Faster TTFF */
+ uint8_t enableFasterTTFF_valid; /**< Must be set to true if enableFasterTTFF is being passed */
+ uint8_t enableFasterTTFF;
+ /**< Allows the receiver to stay on after a position session in order to
+ collect information that will help reduce the TTFF
+ when the next position request is made. The receiver will stay
+ on only if the engine determines that it needs to collect some
+ information. The receiver will stay on for the duration needed to
+ collect the information.
+ If enabled, the clients may see a delay in receiving the Engine Off
+ event after the position session ends.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 (TRUE) -- Allow the engine to stay on for reduced TTFF
+ \item 0x00 (FALSE) -- Do not allow the engine to stay on for reduced
+ TTFF
+ \end{itemize1}
+ The default value is TRUE.*/
+}qmiLocGetPositionEngineConfigParametersIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint8_t qmiLocGeofenceBreachMaskT_v02;
+#define QMI_LOC_GEOFENCE_BREACH_ENTERING_MASK_V02 ((qmiLocGeofenceBreachMaskT_v02)0x01) /**< If this mask is set, a breach event is reported
+ when the Geofence is entered */
+#define QMI_LOC_GEOFENCE_BREACH_LEAVING_MASK_V02 ((qmiLocGeofenceBreachMaskT_v02)0x02) /**< If this mask is set, a breach event is reported
+ when the Geofence is exited */
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGEOFENCERESPONSIVENESSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GEOFENCE_RESPONSIVENESS_LOW_V02 = 0x01, /**< The Geofence is monitored for a breach at a
+ low rate of 15 minutes. The gap between the actual breach and
+ the time it is reported is higher. This
+ setting results in lower power usage. */
+ eQMI_LOC_GEOFENCE_RESPONSIVENESS_MED_V02 = 0x02, /**< The Geofence is monitored for a breach at a
+ medium rate of 2 minutes. This is the default setting. */
+ eQMI_LOC_GEOFENCE_RESPONSIVENESS_HIGH_V02 = 0x03, /**< The Geofence is monitored for a breach at a
+ high rate of 10 seconds. The gap between the actual breach and
+ the time it is reported is low. This results
+ in higher power usage. */
+ eQMI_LOC_GEOFENCE_RESPONSIVENESS_ULTRA_HIGH_V02 = 0x04, /**< The Geofence is monitored for a breach at a
+ very high rate of 1 second. The gap between the actual breach and
+ the time it is reported is very low. This results
+ in very high power usage. This setting must be avoided whenever
+ possible because of the drastic power implications. */
+ eQMI_LOC_GEOFENCE_RESPONSIVENESS_CUSTOM_V02 = 0x05, /**< The Geofence is monitored for a breach at a
+ user defined rate. The gap between the actual breach and
+ the time it is reported depends on the user setting. The power implication
+ is inversely proportional to the responsiveness value set by the user.
+ The higher the responsiveness value, the lower the power implications, and vice-versa. */
+ QMILOCGEOFENCERESPONSIVENESSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGeofenceResponsivenessEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ double latitude;
+ /**< Latitude of the center of the Geofence.*/
+
+ double longitude;
+ /**< Longitude of the center of the Geofence.*/
+
+ uint32_t radius;
+ /**< Radius of the circular Geofence in meters. */
+}qmiLocCircularGeofenceArgsStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGEOFENCEPOSITIONENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GEOFENCE_POSITION_INSIDE_V02 = 0x01, /**< Position is inside a Geofence */
+ eQMI_LOC_GEOFENCE_POSITION_OUTSIDE_V02 = 0x02, /**< Position is outside a Geofence */
+ QMILOCGEOFENCEPOSITIONENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGeofencePositionEnumT_v02;
+/**
+ @}
+ */
+
+typedef uint8_t qmiLocGeofenceDwellTypeMaskT_v02;
+#define QMI_LOC_GEOFENCE_DWELL_TYPE_INSIDE_MASK_V02 ((qmiLocGeofenceDwellTypeMaskT_v02)0x01) /**< If this mask is set, a dwell event is reported
+ when a user dwells inside the Geofence for a specified time */
+#define QMI_LOC_GEOFENCE_DWELL_TYPE_OUTSIDE_MASK_V02 ((qmiLocGeofenceDwellTypeMaskT_v02)0x02) /**< If this mask is set, a dwell event is reported
+ when a user dwells outside the Geofence for a specified time */
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to add a circular Geofence. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID
+ is returned in the Add Circular Geofence
+ indication. */
+
+ /* Mandatory */
+ /* Circular Geofence Arguments */
+ qmiLocCircularGeofenceArgsStructT_v02 circularGeofenceArgs;
+
+ /* Mandatory */
+ /* Breach Event Mask */
+ qmiLocGeofenceBreachMaskT_v02 breachMask;
+ /**< Specifies the breach events in which the client is interested.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 -- GEOFENCE_BREACH_ ENTERING_MASK
+ \item 0x02 -- GEOFENCE_BREACH_ LEAVING_MASK
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* Mandatory */
+ /* Include Position in Breach Event */
+ uint8_t includePosition;
+ /**< Specifies whether the Geofence engine is to include the position
+ in a breach event.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 (TRUE) -- Position will be reported with the breach event
+ \item 0x00 (FALSE) -- Position will not be reported with the breach
+ event
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* Optional */
+ /* Responsiveness */
+ uint8_t responsiveness_valid; /**< Must be set to true if responsiveness is being passed */
+ qmiLocGeofenceResponsivenessEnumT_v02 responsiveness;
+ /**< Specifies the rate of detection for a Geofence breach.
+ This may impact the time lag between the actual breach event and
+ when it is reported. This parameter has power implications
+ and is to be fine-tuned to optimize power savings.
+
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_RESPONSIVENESS_LOW (0x01) -- The Geofence is monitored for a breach at a
+ low rate of 15 minutes. The gap between the actual breach and
+ the time it is reported is higher. This
+ setting results in lower power usage.
+ - eQMI_LOC_GEOFENCE_RESPONSIVENESS_MED (0x02) -- The Geofence is monitored for a breach at a
+ medium rate of 2 minutes. This is the default setting.
+ - eQMI_LOC_GEOFENCE_RESPONSIVENESS_HIGH (0x03) -- The Geofence is monitored for a breach at a
+ high rate of 10 seconds. The gap between the actual breach and
+ the time it is reported is low. This results
+ in higher power usage.
+ - eQMI_LOC_GEOFENCE_RESPONSIVENESS_ULTRA_HIGH (0x04) -- The Geofence is monitored for a breach at a
+ very high rate of 1 second. The gap between the actual breach and
+ the time it is reported is very low. This results
+ in very high power usage. This setting must be avoided whenever
+ possible because of the drastic power implications.
+ - eQMI_LOC_GEOFENCE_RESPONSIVENESS_CUSTOM (0x05) -- The Geofence is monitored for a breach at a
+ user defined rate. The gap between the actual breach and
+ the time it is reported depends on the user setting. The power implication
+ is inversely proportional to the responsiveness value set by the user.
+ The higher the responsiveness value, the lower the power implications, and vice-versa.
+ */
+
+ /* Optional */
+ /* Confidence */
+ uint8_t confidence_valid; /**< Must be set to true if confidence is being passed */
+ qmiLocGeofenceConfidenceEnumT_v02 confidence;
+ /**< Given a breach event, the confidence determines the probability
+ that the breach happened at the Geofence boundary.
+ This parameter has power implications and
+ is to be fine-tuned to optimize power savings.
+
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_CONFIDENCE_LOW (0x01) -- Geofence engine indicates a breach with
+ low confidence; this setting results in lower
+ power usage, and it can impact the yield because
+ incorrect breach events may be sent
+ - eQMI_LOC_GEOFENCE_CONFIDENCE_MED (0x02) -- (Default) Geofence engine indicates a breach with
+ medium confidence
+ - eQMI_LOC_GEOFENCE_CONFIDENCE_HIGH (0x03) -- Geofence engine indicates a breach with
+ high confidence; this setting results in higher
+ power usage
+ */
+
+ /* Optional */
+ /* Custom Responsiveness Value */
+ uint8_t customResponsivenessValue_valid; /**< Must be set to true if customResponsivenessValue is being passed */
+ uint32_t customResponsivenessValue;
+ /**< Specifies in seconds the user-defined rate of detection for a Geofence breach.
+ This may impact the time lag between the actual breach event and
+ when it is reported. The gap between the actual breach and
+ the time it is reported depends on the user setting. The power implication
+ is inversely proportional to the responsiveness value set by the user.
+ The higher the responsiveness value, the lower the power implications, and vice-versa.
+ If this field is set, the responsiveness is always treated
+ as eQMI_LOC_GEOFENCE_ RESPONSIVENESS_CUSTOM.
+ The minimum value supported in this field is 1 second, and the maximum value is 65535 seconds.
+ An error is returned if an attempt is made to set this to an unsupported value.
+ If this field is set, the responsiveness is always treated
+ as eQMI_LOC_GEOFENCE_ RESPONSIVENESS_CUSTOM, which means that the other responsiveness
+ types, such as eQMI_LOC_GEOFENCE _RESPONSIVENESS_LOW, eQMI_LOC_GEOFENCE_ RESPONSIVENESS_MEDIUM,
+ eQMI_LOC_GEOFENCE_ RESPONSIVENESS_HIGH, and eQMI_LOC_GEOFENCE_ RESPONSIVENESS_ULTRA_HIGH are all
+ disregarded.
+ If this field is not set, the responsiveness will be treated as
+ eQMI_LOC_GEOFENCE_ RESPONSIVENESS_LOW, eQMI_LOC_GEOFENCE_RESPONSIVENESS_MEDIUM,
+ eQMI_LOC_GEOFENCE_RESPONSIVENESS_HIGH, or eQMI_LOC_GEOFENCE_RESPONSIVENESS_ULTRA_HIGH.
+ */
+
+ /* Optional */
+ /* Dwell Time of Geofence */
+ uint8_t dwellTime_valid; /**< Must be set to true if dwellTime is being passed */
+ uint32_t dwellTime;
+ /**< Dwell time is the time in seconds a user spends in the Geofence before a dwell
+ event is sent.
+ */
+
+ /* Optional */
+ /* Geofence Dwell Type */
+ uint8_t dwellTypeMask_valid; /**< Must be set to true if dwellTypeMask is being passed */
+ qmiLocGeofenceDwellTypeMaskT_v02 dwellTypeMask;
+ /**< Type of dwell event in which the user is interested .
+
+ Valid values: \n
+ - QMI_LOC_GEOFENCE_DWELL_TYPE_INSIDE_MASK (0x01) -- If this mask is set, a dwell event is reported
+ when a user dwells inside the Geofence for a specified time
+ - QMI_LOC_GEOFENCE_DWELL_TYPE_OUTSIDE_MASK (0x02) -- If this mask is set, a dwell event is reported
+ when a user dwells outside the Geofence for a specified time
+ */
+}qmiLocAddCircularGeofenceReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to add a circular Geofence. */
+typedef struct {
+
+ /* Mandatory */
+ /* Add Circular Geofence Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Add Circular Geofence request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Add Circular
+ Geofence request. This parameter will always be present
+ if the status field is set to SUCCESS. */
+
+ /* Optional */
+ /* Geofence ID */
+ uint8_t geofenceId_valid; /**< Must be set to true if geofenceId is being passed */
+ uint32_t geofenceId;
+ /**< Geofence identifier allocated by the engine.
+ The client must include this identifier in all transactions
+ pertaining to this Geofence. */
+}qmiLocAddCircularGeofenceIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to delete a Geofence. */
+typedef struct {
+
+ /* Mandatory */
+ /* Geofence ID */
+ uint32_t geofenceId;
+ /**< Identifier for the Geofence that is to be deleted. */
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID
+ is returned in the Delete Geofence
+ indication. */
+}qmiLocDeleteGeofenceReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to delete a Geofence. */
+typedef struct {
+
+ /* Mandatory */
+ /* Delete Geofence Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Delete Geofence request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Geofence ID */
+ uint8_t geofenceId_valid; /**< Must be set to true if geofenceId is being passed */
+ uint32_t geofenceId;
+ /**< Identifier for the Geofence that was deleted. */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Delete
+ Geofence request. This parameter will always be present
+ if the status field is set to SUCCESS. */
+}qmiLocDeleteGeofenceIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGEOFENCEORIGINENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GEOFENCE_ORIGIN_NETWORK_V02 = 1, /**< Geofence was initiated by a network-initiated client */
+ eQMI_LOC_GEOFENCE_ORIGIN_DEVICE_V02 = 2, /**< Geofence was initiated by the device */
+ QMILOCGEOFENCEORIGINENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGeofenceOriginEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGEOFENCESTATEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GEOFENCE_STATE_ACTIVE_V02 = 1, /**< Geofence is being actively monitored */
+ eQMI_LOC_GEOFENCE_STATE_SUSPEND_V02 = 2, /**< Geofence monitoring is suspended */
+ QMILOCGEOFENCESTATEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGeofenceStateEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to query a Geofence. */
+typedef struct {
+
+ /* Mandatory */
+ /* Geofence ID */
+ uint32_t geofenceId;
+ /**< Identifier for the Geofence that is to be queried. */
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID
+ is returned with the Query Geofence
+ indication. */
+}qmiLocQueryGeofenceReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to query a Geofence. */
+typedef struct {
+
+ /* Mandatory */
+ /* Query Geofence Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Query Geofence request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Geofence ID */
+ uint8_t geofenceId_valid; /**< Must be set to true if geofenceId is being passed */
+ uint32_t geofenceId;
+ /**< Identifier for the Geofence that was queried. */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Query
+ Geofence request. This parameter will always be present
+ if the status field is set to SUCCESS. */
+
+ /* Optional */
+ /* Geofence Origin */
+ uint8_t geofenceOrigin_valid; /**< Must be set to true if geofenceOrigin is being passed */
+ qmiLocGeofenceOriginEnumT_v02 geofenceOrigin;
+ /**< Originator of the Geofence.
+
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_ORIGIN_NETWORK (1) -- Geofence was initiated by a network-initiated client
+ - eQMI_LOC_GEOFENCE_ORIGIN_DEVICE (2) -- Geofence was initiated by the device
+ */
+
+ /* Optional */
+ /* Position with Respect to Geofence */
+ uint8_t posWrtGeofence_valid; /**< Must be set to true if posWrtGeofence is being passed */
+ qmiLocGeofencePositionEnumT_v02 posWrtGeofence;
+ /**< Indicates if the client is currently inside or outside
+ the Geofence.
+
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_POSITION_INSIDE (0x01) -- Position is inside a Geofence
+ - eQMI_LOC_GEOFENCE_POSITION_OUTSIDE (0x02) -- Position is outside a Geofence
+ */
+
+ /* Optional */
+ /* Circular Geofence Parameters */
+ uint8_t circularGeofenceArgs_valid; /**< Must be set to true if circularGeofenceArgs is being passed */
+ qmiLocCircularGeofenceArgsStructT_v02 circularGeofenceArgs;
+
+ /* Optional */
+ /* Geofence State */
+ uint8_t geofenceState_valid; /**< Must be set to true if geofenceState is being passed */
+ qmiLocGeofenceStateEnumT_v02 geofenceState;
+ /**< Specifies whether the Geofence is to be actively monitored.
+
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_STATE_ACTIVE (1) -- Geofence is being actively monitored
+ - eQMI_LOC_GEOFENCE_STATE_SUSPEND (2) -- Geofence monitoring is suspended
+ */
+}qmiLocQueryGeofenceIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint32_t qmiLocMotionDetectionSourceMaskT_v02;
+#define QMI_LOC_MOTION_DETECTION_SOURCE_SENSORS_V02 ((qmiLocMotionDetectionSourceMaskT_v02)0x00000001) /**< Sensors are used for motion detection */
+#define QMI_LOC_MOTION_DETECTION_SOURCE_WIFI_V02 ((qmiLocMotionDetectionSourceMaskT_v02)0x00000002) /**< Wi-Fi is used for motion detection */
+#define QMI_LOC_MOTION_DETECTION_SOURCE_WWAN_V02 ((qmiLocMotionDetectionSourceMaskT_v02)0x00000004) /**< Wireless WAN is used for motion detection */
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGEOFENCEMOTIONSTATESENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GEOFENCE_MOTION_STATE_STATIONARY_V02 = 0, /**< Motion state Stationary -- Handset is completely stationary */
+ eQMI_LOC_GEOFENCE_MOTION_STATE_FIDDLE_V02 = 1, /**< Motion state Fiddle -- Handset is not in motion but is being "fiddled" with */
+ eQMI_LOC_GEOFENCE_MOTION_STATE_WALK_V02 = 2, /**< Motion state Walk -- User is walking with the handset */
+ eQMI_LOC_GEOFENCE_MOTION_STATE_RUN_V02 = 3, /**< Motion state Run -- User is running with the handset */
+ eQMI_LOC_GEOFENCE_MOTION_STATE_DRIVE_V02 = 4, /**< Motion state Drive -- User is driving with the handset */
+ QMILOCGEOFENCEMOTIONSTATESENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGeofenceMotionStatesEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ qmiLocGeofenceMotionStatesEnumT_v02 motionState;
+ /**< Motion state for which information is being configured. */
+
+ float motionStateSpeed;
+ /**< Motion state speed in milliseconds.
+
+ These are positive floating values.
+ The state speed must be configured carefully. Very low speed
+ configuration for a state may result in missing Geofence
+ breaches in some scenarios.
+
+ Typical motion state speeds: \n
+ - Stationary speed -- 0 meters/sec
+ - Fiddle speed -- 0 meters/sec \n
+ - Walk speed -- 3 meters/sec \n
+ - Run speed -- 8 meters/sec \n
+ - Drive speed -- 56 meters/sec
+ */
+}qmiLocGeofenceMotionStateConfigStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to set the Geofence engine configuration. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID
+ is returned with the Set Geofence Configuration
+ indication. */
+
+ /* Optional */
+ /* GNSS Unavailable Indication Timeout */
+ uint8_t gnssUnavailableIndicationTimeout_valid; /**< Must be set to true if gnssUnavailableIndicationTimeout is being passed */
+ uint32_t gnssUnavailableIndicationTimeout;
+ /**< In a bad GNSS environment, this is the timeout after which the Geofence
+ engine sends out a GNSS Unavailable indication. The GNSS Unavailable
+ indication is sent under the following conditions: \begin{itemize1}
+ \item If gnssUnavailableIndicationTimeout is less than
+ gnssPositionSessionTimeout, the GNSS
+ Unavailable timeout indication is sent after
+ gnssPositionSessionTimeout expires
+ \item If gnssPositionSessionTimeout is less than
+ gnssUnavailableIndicationTimeout, the
+ GNSS Unavailable timeout indication is sent after
+ gnssUnavailableIndicationTimeout expires
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* Optional */
+ /* Max Geofences */
+ uint8_t maxGeofences_valid; /**< Must be set to true if maxGeofences is being passed */
+ uint32_t maxGeofences;
+ /**< Identifies the maximum number of Geofences that can be supported by
+ the Geofence engine. If this number is less than the currently deployed
+ Geofences, this command fails.
+
+ If the command succeeds, the engine supports the maximum number of
+ Geofences requested, provided there is enough memory to support that
+ many Geofences. Increasing this value to a very large number in a
+ constrained memory environment might affect other modules negatively.
+ This value is determined by phone manufacturers. The default value
+ is 200. */
+
+ /* Optional */
+ /* Enable Motion Detection Sources */
+ uint8_t enableMotionDetectionSources_valid; /**< Must be set to true if enableMotionDetectionSources is being passed */
+ qmiLocMotionDetectionSourceMaskT_v02 enableMotionDetectionSources;
+ /**< Identifies the sources that can be enabled for motion detection by
+ the Geofence engine. The sources of motion detection that are enabled
+ by the Geofence engine are dependent on the platform.
+ These sources can only be set once at boot time and they are not expected to be changed after that.
+ Any attempt to set the value of the motion detection sources at runtime results in an undefined behavior.
+ Valid values: \n
+ - QMI_LOC_MOTION_DETECTION_SOURCE_SENSORS (0x00000001) -- Sensors are used for motion detection
+ - QMI_LOC_MOTION_DETECTION_SOURCE_WIFI (0x00000002) -- Wi-Fi is used for motion detection
+ - QMI_LOC_MOTION_DETECTION_SOURCE_WWAN (0x00000004) -- Wireless WAN is used for motion detection */
+
+ /* Optional */
+ /* Enable Coarse Position Injection Usage */
+ uint8_t enableCpiUsage_valid; /**< Must be set to true if enableCpiUsage is being passed */
+ uint8_t enableCpiUsage;
+ /**< Indicates whether external Coarse Position Injection (CPI) is used
+ by the Geofence engine.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- CPI is enabled (default)
+ \item 0x00 (FALSE) -- CPI is disabled
+ \vspace{-0.18in} \end{itemize1}*/
+
+ /* Optional */
+ /* GNSS Position QOS Session Timeout */
+ uint8_t gnssPositionSessionTimeout_valid; /**< Must be set to true if gnssPositionSessionTimeout is being passed */
+ uint32_t gnssPositionSessionTimeout;
+ /**< Identifies the session timeout value (in seconds) for requesting a
+ position in a bad GNSS environment.
+
+ Valid values: \begin{itemize1}
+ \item If the gnssUnavailableIndicationTimeout value is less than
+ gnssPositionSessionTimeout, in a bad GNSS environment, the GNSS
+ Unavailable timeout indication is sent after
+ gnssPositionSessionTimeout expires.
+ \item If gnssPositionSessionTimeout is less than gnssUnavailableIndicationTimeout,
+ in a bad GNSS environment, the GNSS Unavailable timeout indication
+ is sent after gnssUnavailableIndicationTimeout expires. \vspace{-0.18in} \end{itemize1}
+ */
+
+ /* Optional */
+ /* GNSS Position Maximum Position Uncertainity Acceptable */
+ uint8_t gnssPositionMaxPuncAcceptable_valid; /**< Must be set to true if gnssPositionMaxPuncAcceptable is being passed */
+ uint32_t gnssPositionMaxPuncAcceptable;
+ /**< GNSS maximum position uncertainity in meters acceptable by
+ the Geofence engine.
+
+ Valid values: \n
+ - All positive values
+ */
+
+ /* Optional */
+ /* Medium Responsiveness Value */
+ uint8_t mediumResponsivenessValue_valid; /**< Must be set to true if mediumResponsivenessValue is being passed */
+ uint32_t mediumResponsivenessValue;
+ /**< Medium responsiveness value in seconds that the Geofence engine
+ uses for all medium responsiveness Geofences in the Geofence engine.
+
+ Valid values: \begin{itemize1}
+ \item Positive values (in seconds)
+ \item If the value is configured for less than 30 sec, the value is
+ set at 30 sec
+ \item If the value is configured for more than 600 sec, the value is
+ set at 600 sec
+ \item Default -- The Geofence engine uses 120 sec as the medium
+ responsiveness value
+ \end{itemize1}
+
+ If the medium responsiveness value is changed, the responsiveness
+ of the existing medium responsiveness Geofence does not change until the next
+ position fix, which is based on the previous medium responsiveness
+ setting.
+ */
+
+ /* Optional */
+ /* Challenging GNSS Environment Minimum CPI Wait Interval */
+ uint8_t chalGnssEnvMinCpiWaitInterval_valid; /**< Must be set to true if chalGnssEnvMinCpiWaitInterval is being passed */
+ uint32_t chalGnssEnvMinCpiWaitInterval;
+ /**< Number of seconds that the Geofence engine is to wait between
+ CPI requests in challenging a GNSS environment.
+
+ Valid values: \n
+ - Positive values (in seconds)
+ */
+
+ /* Optional */
+ /* Geofence Motion State Information */
+ uint8_t motionStateInfo_valid; /**< Must be set to true if motionStateInfo is being passed */
+ uint32_t motionStateInfo_len; /**< Must be set to # of elements in motionStateInfo */
+ qmiLocGeofenceMotionStateConfigStructT_v02 motionStateInfo[QMI_LOC_GEOFENCE_MAX_MOTION_STATES_V02];
+ /**< \vspace{4pt} \n Motion state informatino (e.g., motion state speed) that the
+ Geofence engine is to use.
+ */
+}qmiLocSetGeofenceEngineConfigReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to set the Geofence engine configuration. */
+typedef struct {
+
+ /* Mandatory */
+ /* Set Geofence Engine Configuration Status. */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Set Geofence Engine Configuration request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Set Geofence Configuration
+ request. This parameter is always present if the status
+ field is set to SUCCESS. */
+}qmiLocSetGeofenceEngineConfigIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to get the Geofence engine configuration. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID
+ is returned with the Get Geofence Engine Configuration
+ indication. */
+}qmiLocGetGeofenceEngineConfigReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to get the Geofence engine configuration. */
+typedef struct {
+
+ /* Mandatory */
+ /* Get Geofence Engine Configuration Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Get Geofence Engine Configuration request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Get Geofence Engine Configuration
+ request. This parameter is always present
+ if the status field is set to SUCCESS. */
+
+ /* Optional */
+ /* GPS Unavailable Indication Timeout */
+ uint8_t gnssUnavailableIndicationTimeout_valid; /**< Must be set to true if gnssUnavailableIndicationTimeout is being passed */
+ uint32_t gnssUnavailableIndicationTimeout;
+ /**< In a bad GNSS environment, the timeout after which the Geofence engine
+ sends out a GNSS unavailable indication. */
+
+ /* Optional */
+ /* Max Geofences */
+ uint8_t maxGeofences_valid; /**< Must be set to true if maxGeofences is being passed */
+ uint32_t maxGeofences;
+ /**< Identifies the maximum number of Geofences that are currently supported
+ in the Geofence engine. */
+
+ /* Optional */
+ /* Enabled Motion Detection Sources */
+ uint8_t enabledMotionDetectionSources_valid; /**< Must be set to true if enabledMotionDetectionSources is being passed */
+ qmiLocMotionDetectionSourceMaskT_v02 enabledMotionDetectionSources;
+ /**< Identifies the sources that are currently enabled for motion detection
+ by the Geofence engine.
+
+ Valid values: \n
+ - QMI_LOC_MOTION_DETECTION_SOURCE_SENSORS (0x00000001) -- Sensors are used for motion detection
+ - QMI_LOC_MOTION_DETECTION_SOURCE_WIFI (0x00000002) -- Wi-Fi is used for motion detection
+ - QMI_LOC_MOTION_DETECTION_SOURCE_WWAN (0x00000004) -- Wireless WAN is used for motion detection */
+
+ /* Optional */
+ /* Enabled for CPI Position Injection Usage */
+ uint8_t enabledCpiUsage_valid; /**< Must be set to true if enabledCpiUsage is being passed */
+ uint8_t enabledCpiUsage;
+ /**< Indicates whether CPI usage is enabled.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- CPI usage is enabled
+ \item 0x00 (FALSE) -- CPI usage is disabled
+ \vspace{-0.18in} \end{itemize1}*/
+}qmiLocGetGeofenceEngineConfigIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to edit a Geofence. */
+typedef struct {
+
+ /* Mandatory */
+ /* Geofence ID */
+ uint32_t geofenceId;
+ /**< Identifier for the Geofence to be edited. */
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Edit Geofence
+ request. This parameter will always be present if the
+ status field is set to SUCCESS.
+ */
+
+ /* Optional */
+ /* Geofence State */
+ uint8_t geofenceState_valid; /**< Must be set to true if geofenceState is being passed */
+ qmiLocGeofenceStateEnumT_v02 geofenceState;
+ /**< Specifies whether the Geofence is to be actively monitored.
+
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_STATE_ACTIVE (1) -- Geofence is being actively monitored
+ - eQMI_LOC_GEOFENCE_STATE_SUSPEND (2) -- Geofence monitoring is suspended
+ */
+
+ /* Optional */
+ /* Breach Event Mask */
+ uint8_t breachMask_valid; /**< Must be set to true if breachMask is being passed */
+ qmiLocGeofenceBreachMaskT_v02 breachMask;
+ /**< Specifies the breach events in which the client is interested.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 -- GEOFENCE_BREACH_ ENTERING_MASK
+ \item 0x02 -- GEOFENCE_BREACH_ LEAVING_MASK
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* Optional */
+ /* Responsiveness */
+ uint8_t responsiveness_valid; /**< Must be set to true if responsiveness is being passed */
+ qmiLocGeofenceResponsivenessEnumT_v02 responsiveness;
+ /**< Specifies the rate of detection for a Geofence breach.
+ This may impact the time lag between the actual breach event and
+ when it is reported. This parameter has power implications
+ and is to be fine-tuned to optimize power savings.
+
+ Valid values: \n
+ - eQMI_LOC_GEOFENCE_RESPONSIVENESS_LOW (0x01) -- The Geofence is monitored for a breach at a
+ low rate of 15 minutes. The gap between the actual breach and
+ the time it is reported is higher. This
+ setting results in lower power usage.
+ - eQMI_LOC_GEOFENCE_RESPONSIVENESS_MED (0x02) -- The Geofence is monitored for a breach at a
+ medium rate of 2 minutes. This is the default setting.
+ - eQMI_LOC_GEOFENCE_RESPONSIVENESS_HIGH (0x03) -- The Geofence is monitored for a breach at a
+ high rate of 10 seconds. The gap between the actual breach and
+ the time it is reported is low. This results
+ in higher power usage.
+ - eQMI_LOC_GEOFENCE_RESPONSIVENESS_ULTRA_HIGH (0x04) -- The Geofence is monitored for a breach at a
+ very high rate of 1 second. The gap between the actual breach and
+ the time it is reported is very low. This results
+ in very high power usage. This setting must be avoided whenever
+ possible because of the drastic power implications.
+ - eQMI_LOC_GEOFENCE_RESPONSIVENESS_CUSTOM (0x05) -- The Geofence is monitored for a breach at a
+ user defined rate. The gap between the actual breach and
+ the time it is reported depends on the user setting. The power implication
+ is inversely proportional to the responsiveness value set by the user.
+ The higher the responsiveness value, the lower the power implications, and vice-versa.
+ */
+}qmiLocEditGeofenceReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint32_t qmiLocGeofenceConfigParamMaskT_v02;
+#define QMI_LOC_GEOFENCE_PARAM_MASK_GEOFENCE_STATE_V02 ((qmiLocGeofenceConfigParamMaskT_v02)0x00000001) /**< Mask for the Geofence state parameter. */
+#define QMI_LOC_GEOFENCE_PARAM_MASK_BREACH_MASK_V02 ((qmiLocGeofenceConfigParamMaskT_v02)0x00000002) /**< Mask for Geofence breach mask parameter. */
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to edit a Geofence. */
+typedef struct {
+
+ /* Mandatory */
+ /* Edit Geofence Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Edit Geofence request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+
+ /* Optional */
+ /* Geofence ID */
+ uint8_t geofenceId_valid; /**< Must be set to true if geofenceId is being passed */
+ uint32_t geofenceId;
+ /**< Identifier for the Geofence that was edited. */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID
+ is specified in the Edit Geofence request. */
+
+ /* Optional */
+ /* Failed Parameters */
+ uint8_t failedParams_valid; /**< Must be set to true if failedParams is being passed */
+ qmiLocGeofenceConfigParamMaskT_v02 failedParams;
+ /**< Specified only when the status is not set to SUCCESS. If
+ the mask corresponding to a field is set, it indicates that
+ the Geofence parameter could not be edited.
+
+ Valid values: \begin{itemize1}
+ \item 0x00000001 -- GEOFENCE_PARAM_ MASK_GEOFENCE_STATE
+ \item 0x00000002 -- GEOFENCE_PARAM_ MASK_BREACH_MASK
+ \vspace{-0.18in} \end{itemize1} */
+}qmiLocEditGeofenceIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Requests the control point to get time zone information. */
+typedef struct {
+
+ /* Mandatory */
+ /* Get Time Zone Info Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Get Time Zone Info request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocEventGetTimeZoneReqIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint64_t dstOffset;
+ /**< Offset for Daylight Savings Time in seconds. This is zero if the time zone is not in Daylight Savings
+ Time during the specified UTC timestamp. */
+
+ uint64_t rawOffset;
+ /**< Offset from UTC (in seconds) for the current location. This does not take daylight savings into account. */
+}qmiLocTimeZoneStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to inject time zone information. */
+typedef struct {
+
+ /* Mandatory */
+ /* UTC Time */
+ uint64_t timeUtc;
+ /**< UTC time since Jan. 1, 1970.\n
+ - Units: Milliseconds */
+
+ /* Mandatory */
+ /* Time Zone Information */
+ qmiLocTimeZoneStructT_v02 timeZone;
+}qmiLocInjectTimeZoneInfoReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to inject time zone information. */
+typedef struct {
+
+ /* Mandatory */
+ /* Inject Time Zone Info Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the inject time zone information.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocInjectTimeZoneInfoIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to get the best available
+ position estimate from the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID
+ is returned in the Get Best Available Position indication. */
+}qmiLocGetBestAvailablePositionReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to get the best available
+ position estimate from the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Get Best Available Position Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Get Best Available Position request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Get Best
+ Available Position request. This parameter will
+ always be present if the status field is set to
+ SUCCESS. */
+
+ /* Optional */
+ /* Latitude */
+ uint8_t latitude_valid; /**< Must be set to true if latitude is being passed */
+ double latitude;
+ /**< Latitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -90.0 to 90.0 \begin{itemize1}
+ \item Positive values indicate northern latitude
+ \item Negative values indicate southern latitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* Optional */
+ /* Longitude */
+ uint8_t longitude_valid; /**< Must be set to true if longitude is being passed */
+ double longitude;
+ /**< Longitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -180.0 to 180.0 \begin{itemize1}
+ \item Positive values indicate eastern longitude
+ \item Negative values indicate western longitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* 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
+ - Units: Meters */
+
+ /* 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
+ - Units: Meters \n
+ - Range: -500 to 15883 */
+
+ /* Optional */
+ /* Vertical Uncertainty */
+ uint8_t vertUnc_valid; /**< Must be set to true if vertUnc is being passed */
+ float vertUnc;
+ /**< Vertical uncertainty.\n
+ - Units: Meters */
+
+ /* Optional */
+ /* UTC Timestamp */
+ uint8_t timestampUtc_valid; /**< Must be set to true if timestampUtc is being passed */
+ uint64_t timestampUtc;
+ /**< UTC timestamp.
+ \begin{itemize1}
+ \item Units: Milliseconds since Jan. 1, 1970
+ \vspace{-0.18in} \end{itemize1} */
+
+ /* Optional */
+ /* Time Uncertainty */
+ uint8_t timeUnc_valid; /**< Must be set to true if timeUnc is being passed */
+ float timeUnc;
+ /**< Time uncertainty. \n
+ - Units: Milliseconds */
+
+ /* 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
+ - 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
+ - Units: Meters */
+
+ /* Optional */
+ /* Horizontal Elliptical 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
+ - Units: Decimal degrees \n
+ - Range: 0 to 180 */
+
+ /* Optional */
+ /* Horizontal Circular Confidence */
+ uint8_t horCircularConfidence_valid; /**< Must be set to true if horCircularConfidence is being passed */
+ uint8_t horCircularConfidence;
+ /**< Horizontal circular uncertainty confidence. \n
+ - Units: Percent \n
+ - Range: 0 to 99 */
+
+ /* Optional */
+ /* Horizontal Elliptical Confidence */
+ uint8_t horEllipticalConfidence_valid; /**< Must be set to true if horEllipticalConfidence is being passed */
+ uint8_t horEllipticalConfidence;
+ /**< Horizontal elliptical uncertainty confidence. \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
+ - eQMI_LOC_RELIABILITY_NOT_SET (0) -- Location reliability is not set
+ - eQMI_LOC_RELIABILITY_VERY_LOW (1) -- Location reliability is very low; use it at your own risk
+ - eQMI_LOC_RELIABILITY_LOW (2) -- Location reliability is low; little or no cross-checking is possible
+ - eQMI_LOC_RELIABILITY_MEDIUM (3) -- Location reliability is medium; limited cross-check passed
+ - eQMI_LOC_RELIABILITY_HIGH (4) -- Location reliability is high; strong cross-check passed
+ */
+
+ /* Optional */
+ /* Horizontal Speed */
+ uint8_t horSpeed_valid; /**< Must be set to true if horSpeed is being passed */
+ float horSpeed;
+ /**< Horizontal speed. \n
+ - Units: Meters/second */
+
+ /* Optional */
+ /* Horizontal Speed Uncertainty */
+ uint8_t horSpeedUnc_valid; /**< Must be set to true if horSpeedUnc is being passed */
+ float horSpeedUnc;
+ /**< Horizontal speed uncertainty. \n
+ - Units: Meters/second */
+
+ /* 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
+ - 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
+ - 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
+ - eQMI_LOC_RELIABILITY_NOT_SET (0) -- Location reliability is not set
+ - eQMI_LOC_RELIABILITY_VERY_LOW (1) -- Location reliability is very low; use it at your own risk
+ - eQMI_LOC_RELIABILITY_LOW (2) -- Location reliability is low; little or no cross-checking is possible
+ - eQMI_LOC_RELIABILITY_MEDIUM (3) -- Location reliability is medium; limited cross-check passed
+ - eQMI_LOC_RELIABILITY_HIGH (4) -- Location reliability is high; strong cross-check passed
+ */
+
+ /* Optional */
+ /* Vertical Speed */
+ uint8_t vertSpeed_valid; /**< Must be set to true if vertSpeed is being passed */
+ float vertSpeed;
+ /**< Vertical speed. \n
+ - Units: Meters/second */
+
+ /* Optional */
+ /* Vertical Speed Uncertainty */
+ uint8_t vertSpeedUnc_valid; /**< Must be set to true if vertSpeedUnc is being passed */
+ float vertSpeedUnc;
+ /**< Vertical speed uncertainty. \n
+ - Units: Meters/second */
+
+ /* Optional */
+ /* Heading */
+ uint8_t heading_valid; /**< Must be set to true if heading is being passed */
+ float heading;
+ /**< Heading. \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
+ - 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. */
+
+ /* Optional */
+ /* Technology Used Mask */
+ 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
+ - QMI_LOC_POS_TECH_MASK_SATELLITE (0x00000001) -- Satellites were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_CELLID (0x00000002) -- Cell towers were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_WIFI (0x00000004) -- Wi-Fi access points were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_SENSORS (0x00000008) -- Sensors were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_REFERENCE_LOCATION (0x00000010) -- Reference Location was used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_INJECTED_COARSE_POSITION (0x00000020) -- Coarse position injected into the location engine was used to
+ generate the fix
+ - QMI_LOC_POS_TECH_MASK_AFLT (0x00000040) -- AFLT was used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_HYBRID (0x00000080) -- GNSS and network-provided measurements were used to
+ generate the fix
+ */
+
+ /* Optional */
+ /* Dilution of Precision */
+ uint8_t DOP_valid; /**< Must be set to true if DOP is being passed */
+ qmiLocDOPStructT_v02 DOP;
+
+ /* Optional */
+ /* GPS Time */
+ uint8_t gpsTime_valid; /**< Must be set to true if gpsTime is being passed */
+ qmiLocGPSTimeStructT_v02 gpsTime;
+
+ /* 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
+ - eQMI_LOC_TIME_SRC_INVALID (0) -- Invalid time.
+ - eQMI_LOC_TIME_SRC_NETWORK_TIME_TRANSFER (1) -- Time is set by the 1X system
+ - eQMI_LOC_TIME_SRC_NETWORK_TIME_TAGGING (2) -- Time is set by WCDMA/GSM time tagging (that is,
+ associating network time with GPS time)
+ - eQMI_LOC_TIME_SRC_EXTERNAL_INPUT (3) -- Time is set by an external injection
+ - eQMI_LOC_TIME_SRC_TOW_DECODE (4) -- Time is set after decoding over-the-air GPS navigation data
+ from one GPS satellite
+ - eQMI_LOC_TIME_SRC_TOW_CONFIRMED (5) -- Time is set after decoding over-the-air GPS navigation data
+ from multiple satellites
+ - eQMI_LOC_TIME_SRC_TOW_AND_WEEK_CONFIRMED (6) -- Both time of the week and the GPS week number are known
+ - eQMI_LOC_TIME_SRC_NAV_SOLUTION (7) -- Time is set by the position engine after the fix is obtained
+ - eQMI_LOC_TIME_SRC_SOLVE_FOR_TIME (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 (9) -- Time is set after decoding GLO satellites
+ - eQMI_LOC_TIME_SRC_TIME_TRANSFORM (10) -- Time is set after transforming the GPS to GLO time
+ - eQMI_LOC_TIME_SRC_WCDMA_SLEEP_TIME_TAGGING (11) -- Time is set by the sleep time tag provided by the WCDMA network
+ - eQMI_LOC_TIME_SRC_GSM_SLEEP_TIME_TAGGING (12) -- Time is set by the sleep time tag provided by the GSM network
+ - eQMI_LOC_TIME_SRC_UNKNOWN (13) -- Source of the time is unknown
+ - eQMI_LOC_TIME_SRC_SYSTEM_TIMETICK (14) -- Time is derived from the system clock (better known as the slow clock);
+ GNSS time is maintained irrespective of the GNSS receiver state
+ - eQMI_LOC_TIME_SRC_QZSS_TOW_DECODE (15) -- Time is set after decoding QZSS satellites
+ - eQMI_LOC_TIME_SRC_BDS_TOW_DECODE (16) -- Time is set after decoding BDS satellites
+ - eQMI_LOC_TIME_SRC_GAL_TOW_DECODE (17) -- Time is set after decoding GAL satellites
+ */
+
+ /* Optional */
+ /* Sensor Data Usage */
+ uint8_t sensorDataUsage_valid; /**< Must be set to true if sensorDataUsage is being passed */
+ qmiLocSensorUsageIndicatorStructT_v02 sensorDataUsage;
+
+ /* Optional */
+ /* SVs Used to Calculate the Fix */
+ uint8_t gnssSvUsedList_valid; /**< Must be set to true if gnssSvUsedList is being passed */
+ uint32_t gnssSvUsedList_len; /**< Must be set to # of elements in gnssSvUsedList */
+ uint16_t gnssSvUsedList[QMI_LOC_MAX_SV_USED_LIST_LENGTH_V02];
+ /**< Each entry in the list contains the SV ID of a satellite
+ used for calculating this position report. The following
+ information is associated with each SV ID: \n
+ Range: \n
+ - For GPS: 1 to 32 \n
+ - For GLONASS: 65 to 96 \n
+ - For SBAS: 120 to 158 and 183 to 187 \n
+ - For QZSS: 193 to 197 \n
+ - For BDS: 201 to 237 \n
+ - For GAL: 301 to 336
+ */
+}qmiLocGetBestAvailablePositionIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCMOTIONSTATEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_MOTION_STATE_UNKNOWN_V02 = 0, /**< Device state is not known */
+ eQMI_LOC_MOTION_STATE_STATIONARY_V02 = 1, /**< Device state is Stationary */
+ eQMI_LOC_MOTION_STATE_IN_MOTION_V02 = 2, /**< Device state is In Motion */
+ QMILOCMOTIONSTATEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocMotionStateEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCMOTIONMODEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_MOTION_MODE_UNKNOWN_V02 = 0, /**< Device movement is not known */
+ eQMI_LOC_MOTION_MODE_STATIONARY_V02 = 1, /**< Device is not moving */
+ eQMI_LOC_MOTION_MODE_PEDESTRIAN_UNKNOWN_V02 = 200, /**< Device movement is in Pedestrian mode; nothing else is known about the movement */
+ eQMI_LOC_MOTION_MODE_PEDESTRIAN_WALKING_V02 = 201, /**< Device movement is in pedestrian Walking mode */
+ eQMI_LOC_MOTION_MODE_PEDESTRIAN_RUNNING_V02 = 202, /**< Device movement is in pedestrian Running mode */
+ eQMI_LOC_MOTION_MODE_VEHICLE_UNKNOWN_V02 = 300, /**< Device movement is in Vehicular mode; nothing else is known about the movement */
+ QMILOCMOTIONMODEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocMotionModeEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ qmiLocMotionStateEnumT_v02 motion_state;
+ /**< Current motion state of the user.
+
+ Valid values: \n
+ - eQMI_LOC_MOTION_STATE_UNKNOWN (0) -- Device state is not known
+ - eQMI_LOC_MOTION_STATE_STATIONARY (1) -- Device state is Stationary
+ - eQMI_LOC_MOTION_STATE_IN_MOTION (2) -- Device state is In Motion
+ */
+
+ qmiLocMotionModeEnumT_v02 motion_mode;
+ /**< Modes of user motion.
+
+ Valid values: \n
+ - eQMI_LOC_MOTION_MODE_UNKNOWN (0) -- Device movement is not known
+ - eQMI_LOC_MOTION_MODE_STATIONARY (1) -- Device is not moving
+ - eQMI_LOC_MOTION_MODE_PEDESTRIAN_UNKNOWN (200) -- Device movement is in Pedestrian mode; nothing else is known about the movement
+ - eQMI_LOC_MOTION_MODE_PEDESTRIAN_WALKING (201) -- Device movement is in pedestrian Walking mode
+ - eQMI_LOC_MOTION_MODE_PEDESTRIAN_RUNNING (202) -- Device movement is in pedestrian Running mode
+ - eQMI_LOC_MOTION_MODE_VEHICLE_UNKNOWN (300) -- Device movement is in Vehicular mode; nothing else is known about the movement
+ */
+
+ float probability_of_state;
+ /**< Probability that the device is actually undergoing the motion state
+ specified by the combination of the values of motion_state, motion_mode,
+ and motion_sub_mode. \vspace{0.1in}
+
+ This value is a floating point number in the range of 0 to 100, in
+ units of percent probability. Any value greater than 99.9999 is
+ applied as 99.9999. \vspace{0.1in}
+
+ It is recommended that if a particular combination of motion_state and
+ motion_mode cannot be determined with more than 50 percent confidence,
+ that a more general statement of user motion be made.
+ For example, if the mode of In-Motion + Pedestrian-Running can only be
+ determined with 50 percent probability, and the simpler statement of In-Motion
+ can be determined with 90 percent probability, it is recommended that this field
+ be used to simply state In-Motion with 90 percent probability. \vspace{0.1in}
+
+ If the motion_state is not known, the value in this field is not used.
+ */
+
+ uint16_t age;
+ /**< Age of the motion data in milliseconds at the time of injection.
+ */
+
+ uint16_t timeout;
+ /**< If the age of the motion data input exceeds the timeout value, the data
+ will no longer be used. The timeout value is in units of milliseconds.
+ Values in the range of 0 to 10000 are accepted. If 65535 is provided,
+ the motion data input is applied until the next input is
+ received. \n
+
+ If the determination of motion data is an instantaneous observation
+ and no notice is guaranteed to be given via the QMI on a change in the
+ state of the motion data, it is recommended that this field be set to 0. \vspace{0.1in}
+
+ If the determination of motion data is continuously monitored
+ external to the QMI and an update is always applied to the QMI upon any
+ change in state, a value of 65535 is used for this field.
+ Note that in this case, if a certain mode is set and is not later
+ unset (e.g., by sending in the request message with a user motion
+ state of Unknown), the value is applied indefinitely.
+ */
+}qmiLocMotionDataStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects motion data for MSM GPS service use. */
+typedef struct {
+
+ /* Mandatory */
+ /* Motion Data */
+ qmiLocMotionDataStructT_v02 motion_data;
+}qmiLocInjectMotionDataReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects motion data for MSM GPS service use. */
+typedef struct {
+
+ /* Mandatory */
+ /* Inject Motion Data Request Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Inject Motion Data request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocInjectMotionDataIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to retrieve the list of network
+ initiated Geofence IDs. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The same transaction ID
+ will be returned in the Get NI Geofence ID List indication. */
+}qmiLocGetNiGeofenceIdListReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to retrieve the list of network
+ initiated Geofence IDs. */
+typedef struct {
+
+ /* Mandatory */
+ /* Get NI Geofence ID List Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Get NI Geofence ID List request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Get NI
+ Geofence ID List request. */
+
+ /* Optional */
+ /* NI Geofence ID List */
+ uint8_t niGeofenceIdList_valid; /**< Must be set to true if niGeofenceIdList is being passed */
+ uint32_t niGeofenceIdList_len; /**< Must be set to # of elements in niGeofenceIdList */
+ uint32_t niGeofenceIdList[QMI_LOC_MAX_NI_GEOFENCE_ID_LIST_LENGTH_V02];
+ /**< List containing the NI Geofence IDs.
+ - Type: Array of unsigned 32-bit integers \n
+ - Maximum NI Geofence ID List length: 16 */
+}qmiLocGetNiGeofenceIdListIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint32_t MCC;
+ /**< GSM mobile country code. Refer to ITU-T E.212 \hyperref[ITU-T E.212]{ITU-T E.212}. */
+
+ uint32_t MNC;
+ /**< GSM mobile network code. Refer to \hyperref[ITU-T E.212]{ITU-T E.212}. */
+
+ uint32_t LAC;
+ /**< GSM location area code. Refer to \hyperref[ITU-T E.212]{ITU-T E.212}. */
+
+ uint32_t CID;
+ /**< GSM cell identification. Refer to \hyperref[ITU-T E.212]{ITU-T E.212}. */
+}qmiLocGSMCellIdStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects GSM cell information into the location
+ engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* GSM Cell ID */
+ qmiLocGSMCellIdStructT_v02 gsmCellId;
+ /**< \vspace{0.06in} \n Identifies the GSM cell on which the device is currently camped. */
+
+ /* Mandatory */
+ /* Roaming Status */
+ uint8_t roamingStatus;
+ /**< Indicates whether the device is roaming.
+ \begin{itemize1}
+ \item 0x01 (TRUE) -- Device is roaming
+ \item 0x00 (FALSE) -- Device is not roaming
+ \vspace{-0.18in} \end{itemize1}*/
+
+ /* Optional */
+ /* Timing Advance */
+ uint8_t timingAdvance_valid; /**< Must be set to true if timingAdvance is being passed */
+ uint32_t timingAdvance;
+ /**< Round trip delay between the MS and the BS, in units of 3.69 microseconds.
+ Refer to 3GPP \hyperref[TS 05.10]{TS 05.10} and \hyperref[TS 45.010]{TS 45.010}. */
+}qmiLocInjectGSMCellInfoReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects GSM cell information into the location
+ engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Inject GSM Cell Info Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Inject GSM Cell Info request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocInjectGSMCellInfoIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCROAMINGSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_PHONE_NOT_ROAMING_V02 = 1, /**< Modem is camped on a home network */
+ eQMI_LOC_PHONE_ROAMING_V02 = 2, /**< Modem is camped on a roaming network */
+ QMILOCROAMINGSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocRoamingStatusEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint32_t mcc;
+ /**< WCDMA mobile country code. Refer to \hyperref[ITU-T E.212]{ITU-T E.212}. */
+
+ uint32_t mnc;
+ /**< WCDMA mobile network code. Refer to \hyperref[ITU-T E.212]{ITU-T E.212}. */
+
+ uint32_t cid;
+ /**< WCDMA cell identity. Refer to \hyperref[ITU-T E.212]{ITU-T E.212}. */
+}qmiLocWCDMACellIdStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects WCDMA cell information into the location
+ engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* WCDMA Cell ID */
+ qmiLocWCDMACellIdStructT_v02 wcdmaCellId;
+ /**< \n Identifies the WCDMA cell on which the device is currently camped. */
+
+ /* Mandatory */
+ /* Roaming Status */
+ qmiLocRoamingStatusEnumT_v02 roamingStatus;
+ /**< Indicates whether the device is roaming.
+
+ Valid values: \n
+ - eQMI_LOC_PHONE_NOT_ROAMING (1) -- Modem is camped on a home network
+ - eQMI_LOC_PHONE_ROAMING (2) -- Modem is camped on a roaming network
+ */
+
+ /* Optional */
+ /* Cell Frequency */
+ uint8_t freq_valid; /**< Must be set to true if freq is being passed */
+ uint32_t freq;
+ /**< Frequency information of the serving cell. \n
+ Valid range: 0 to 16383 \n
+ Refer to 3GPP \hyperref[TS 25.331]{TS 25.331}. */
+
+ /* Optional */
+ /* Primary Scrambling Code */
+ uint8_t psc_valid; /**< Must be set to true if psc is being passed */
+ uint32_t psc;
+ /**< Primary scrambling code of the serving cell. \n
+ Valid range: 0 to 511 \n
+ Refer to 3GPP \hyperref[TS 25.331]{TS 25.331}. */
+}qmiLocInjectWCDMACellInfoReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects WCDMA cell information into the location
+ engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Inject WCDMA Cell Info Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Inject WCDMA Cell Info request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocInjectWCDMACellInfoIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint32_t mcc;
+ /**< TDSCDMA mobile country code. Refer to \hyperref[ITU-T E.212]{ITU-T E.212}. */
+
+ uint32_t mnc;
+ /**< TDSCDMA mobile network code. Refer to \hyperref[ITU-T E.212]{ITU-T E.212}. */
+
+ uint32_t cid;
+ /**< TDSCDMA cell identity. Refer to 3GPP \hyperref[TS 25.331]{TS 25.331}. */
+
+ uint32_t lac;
+ /**< TDSCDMA location area code. Refer to \hyperref[ITU-T E.212]{ITU-T E.212}. */
+}qmiLocTDSCDMACellIdStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects TDSCDMA cell information into the location
+ engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* TDSCDMA Cell ID */
+ qmiLocTDSCDMACellIdStructT_v02 tdscdmaCellId;
+ /**< \n Identifies the TDSCDMA cell on which the device is currently camped. */
+
+ /* Mandatory */
+ /* Roaming Status */
+ qmiLocRoamingStatusEnumT_v02 roamingStatus;
+ /**< Indicates whether the device is roaming.
+
+ Valid values: \n
+ - eQMI_LOC_PHONE_NOT_ROAMING (1) -- Modem is camped on a home network
+ - eQMI_LOC_PHONE_ROAMING (2) -- Modem is camped on a roaming network
+ */
+
+ /* Optional */
+ /* Cell Frequency */
+ uint8_t freq_valid; /**< Must be set to true if freq is being passed */
+ uint32_t freq;
+ /**< Frequency information of the serving cell. \n
+ Valid range: 0 to 16383 \n
+ Refer to 3GPP \hyperref[TS 25.331]{TS 25.331}. */
+}qmiLocInjectTDSCDMACellInfoReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects TDSCDMA cell information into the location
+ engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Inject TDSCDMA Cell Info Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Inject TDSCDMA Cell Info request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocInjectTDSCDMACellInfoIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects the phone's subscriber ID into the location engine. */
+typedef struct {
+
+ /* Optional */
+ /* Preferred IMSI */
+ uint8_t preferredIMSI_valid; /**< Must be set to true if preferredIMSI is being passed */
+ uint64_t preferredIMSI;
+ /**< IMSI number of the preferred RAT. Refer to \hyperref[ITU-T E.212]{ITU-T E.212}.*/
+
+ /* Optional */
+ /* Preferred MSISDN */
+ uint8_t preferredMSISDN_valid; /**< Must be set to true if preferredMSISDN is being passed */
+ uint64_t preferredMSISDN;
+ /**< MSISDN number of the preferred RAT. Refer to \hyperref[ITU-T E.212]{ITU-T E.212}.*/
+}qmiLocInjectSubscriberIDReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects the phone's subscriber ID into the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Inject Subscriber ID Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Inject Subscriber ID request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocInjectSubscriberIDIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCINJECTEDNETWORKINITIATEDMESSAGETYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_INJECTED_NETWORK_INITIATED_MESSAGE_TYPE_SUPL_V02 = 0, /**< SUPL network-initiated message is being injected. */
+ QMILOCINJECTEDNETWORKINITIATEDMESSAGETYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocInjectedNetworkInitiatedMessageTypeEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects a network-initiated message into the location
+ engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Injected Network Initiated Message Type */
+ qmiLocInjectedNetworkInitiatedMessageTypeEnumT_v02 injectedNIMessageType;
+ /**< Type of the network-initiated message being injected.
+
+ Valid values: \n
+ - eQMI_LOC_INJECTED_NETWORK_INITIATED_MESSAGE_TYPE_SUPL (0) -- SUPL network-initiated message is being injected. */
+
+ /* Mandatory */
+ /* Injected Network Initiated Message */
+ uint32_t injectedNIMessage_len; /**< Must be set to # of elements in injectedNIMessage */
+ uint8_t injectedNIMessage[QMI_LOC_MAX_INJECTED_NETWORK_INITIATED_MESSAGE_LENGTH_V02];
+ /**< Network-initiated message body.
+ If the inject NI message type is TYPE_SUPL, the message contains
+ a SUPL INIT message as defined in OMA-TS-ULP-V2_\hyperref[0-20110527-C]{0-20110527-C}. */
+}qmiLocInjectNetworkInitiatedMessageReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects a network-initiated message into the location
+ engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Inject Network Initiated Message Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Inject Network Initiated Message request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocInjectNetworkInitiatedMessageIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Notifies the location engine that the device is out of
+ service. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocWWANOutOfServiceNotificationReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the location engine that the device is out of
+ service. */
+typedef struct {
+
+ /* Mandatory */
+ /* Notify WWAN Out of Service Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Notify WWAN Out of Service request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocWWANOutOfServiceNotificationIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to inject pedometer data
+ into the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Time Source */
+ qmiLocSensorDataTimeSourceEnumT_v02 timeSource;
+ /**< Time source for the pedometer. The location service uses
+ this field to identify the time reference used in the
+ pedometer data time stamp.
+
+ Valid values: \n
+ - eQMI_LOC_SENSOR_TIME_SOURCE_UNSPECIFIED (0) -- Sensor time source is unspecified
+ - eQMI_LOC_SENSOR_TIME_SOURCE_COMMON (1) -- Time source is common between the sensors and
+ the location engine
+ */
+
+ /* Mandatory */
+ /* Pedometer Report Timestamp */
+ uint32_t timestamp;
+ /**< Time stamp of the last step event in this report, that is, the time stamp
+ of the step event that caused this report to be generated.
+ The time stamp is in the time reference scale that is
+ used by the pedometer time source. \n
+ - Units: Milliseconds */
+
+ /* Mandatory */
+ /* Time Interval */
+ uint32_t timeInterval;
+ /**< Time interval during which the step count was calculated. Subtracting
+ timeInterval from the timestamp field yields the time when
+ the step detection for the first step in this report started. \n
+ - Units: Milliseconds */
+
+ /* Mandatory */
+ /* Step Count */
+ uint32_t stepCount;
+ /**< Number of steps counted during the time interval. */
+
+ /* Optional */
+ /* Step Confidence */
+ uint8_t stepConfidence_valid; /**< Must be set to true if stepConfidence is being passed */
+ uint8_t stepConfidence;
+ /**< Confidence associated with the step. This field is only applicable
+ for a single step report, that is, if the step count is one. \n
+ - Range: 0 to 100 \n
+ \textbf{Note:} The report is ignored if confidence is 0. */
+
+ /* Optional */
+ /* Step Count Uncertainty */
+ uint8_t stepCountUncertainty_valid; /**< Must be set to true if stepCountUncertainty is being passed */
+ float stepCountUncertainty;
+ /**< Uncertainty (in steps) associated with the step count. */
+
+ /* Optional */
+ /* Step Rate */
+ uint8_t stepRate_valid; /**< Must be set to true if stepRate is being passed */
+ float stepRate;
+ /**< Current estimate for the rate of steps per second. \n
+ - Units: steps/second \n
+ - Range: >= 0.0 */
+}qmiLocPedometerReportReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to inject pedometer data
+ into the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Status of Pedometer Report Request */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Pedometer Report request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocPedometerReportIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to get the batching size. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID is returned in the Get
+ Batch Size indication. */
+
+ /* Mandatory */
+ /* Requested Batch Size */
+ uint32_t batchSize;
+ /**< Request the service with the number of location fixes to be batched. */
+}qmiLocGetBatchSizeReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to get the batching size. */
+typedef struct {
+
+ /* Mandatory */
+ /* Get Batch Size Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Get Batch Size request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Get Batch
+ Size request.
+ */
+
+ /* Mandatory */
+ /* Batch Size Supported */
+ uint32_t batchSize;
+ /**< Number of location fixes that the service is able to batch.
+ The batch size value is returned as 0 in the case of a failure status.
+ */
+}qmiLocGetBatchSizeIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to initiate a batching session. */
+typedef struct {
+
+ /* 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
+ - Units: milliseconds \n
+ - Default: 60000 ms
+ */
+
+ /* Optional */
+ /* Horizontal Accuracy Level */
+ 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
+ - eQMI_LOC_ACCURACY_LOW (1) -- Low accuracy
+ - eQMI_LOC_ACCURACY_MED (2) -- Medium accuracy
+ - eQMI_LOC_ACCURACY_HIGH (3) -- High accuracy
+ */
+
+ /* Optional */
+ /* Fix Session Timeout Period */
+ uint8_t fixSessionTimeout_valid; /**< Must be set to true if fixSessionTimeout is being passed */
+ uint32_t fixSessionTimeout;
+ /**< Configures the fix session timeout duration. \n
+ - Units: Milliseconds \n
+ - Default: 20,000 ms
+ */
+
+ /* Optional */
+ /* Minimum Distance */
+ uint8_t minDistance_valid; /**< Must be set to true if minDistance is being passed */
+ uint32_t minDistance;
+ /**< Specifies the minimum distance that should be traversed before a
+ position should be batched.
+ If no distance is specified, the positions are batched after
+ the minInterval period expires. If both minInterval and minDistance are
+ specified, the position are batched only after minInterval has
+ expired AND minDistance has been traversed. \n
+ - Units: Meters
+ */
+
+ /* Optional */
+ /* Batch All Positions */
+ uint8_t batchAllPos_valid; /**< Must be set to true if batchAllPos is being passed */
+ uint8_t batchAllPos;
+ /**< Values: \n
+ - TRUE -- All positions that are available must be batched. For example,
+ if any other type of positioning is active (such as 1 Hz tracking), all
+ positions computed for that use case are also batched. This may
+ result in the BATCH_FULL indication getting generated earlier. \n
+ - FALSE -- Only positions that meet the time and/or distance criteria are batched
+ (default).
+ */
+
+ /* Optional */
+ /* Request ID */
+ uint8_t requestId_valid; /**< Must be set to true if requestId is being passed */
+ uint32_t requestId;
+ /**< Identifies the request. A batching client can start multiple batching
+ requests with different batching parameters,
+ however, positions corresponding to all requests from the same client are
+ batched in the same buffer. A request ID value of 0 is considered invalid. \n
+ Valid Values 0x01 - 0xFFFFFFFF
+ */
+}qmiLocStartBatchingReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to initiate a batching session. */
+typedef struct {
+
+ /* Mandatory */
+ /* Start Batching Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Start Batching request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Request ID */
+ uint8_t requestId_valid; /**< Must be set to true if requestId is being passed */
+ uint32_t requestId;
+ /**< Identifies the request. A batching client can start multiple batching
+ requests with different batching parameters, however, positions
+ corresponding to all requests from the same client are
+ batched in the same buffer. \n
+ Valid Values 0x01 - 0xFFFFFFFF
+ */
+}qmiLocStartBatchingIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used to notify the control point that the batched buffer is full. */
+typedef struct {
+
+ /* Mandatory */
+ /* Number of Entries in the Batch During Full Event */
+ uint32_t batchCount;
+ /**< Number of entries in the batch during a full event.
+ */
+}qmiLocEventBatchFullIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint64_t qmiLocBatchedReportValidFieldsMaskT_v02;
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_LATITUDE_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000001ull) /**< Latitude field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_LONGITUDE_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000002ull) /**< Longitude field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_HOR_CIR_UNC_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000004ull) /**< Horizontal circular uncertainty field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_SPEED_HOR_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000008ull) /**< Horizontal speed field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_SPEED_UNC_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000010ull) /**< Speed uncertainty field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_ALT_WRT_ELP_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000020ull) /**< Altitude with respect to ellipsoid field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_SPEED_VER_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000040ull) /**< Vertical speed field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_HEADING_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000080ull) /**< Heading field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_HEADING_UNC_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000100ull) /**< Heading uncertainty field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_TECH_MASK_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000200ull) /**< Technology source mask field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_TIMESTAMP_UTC_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000400ull) /**< UTC timestamp field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_TIME_UNC_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00000800ull) /**< Time uncertainty field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_MAGNETIC_DEV_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00001000ull) /**< Magnetic deviation field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_VERT_UNC_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00002000ull) /**< Vertical uncertainty field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_HOR_CONF_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00004000ull) /**< Horizontal confidence field is valid for this fix */
+#define QMI_LOC_BATCHED_REPORT_MASK_VALID_TIMESTAMP_GPS_V02 ((qmiLocBatchedReportValidFieldsMaskT_v02)0x00008000ull) /**< GPS timestamp field is valid for this fix */
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint32_t fixId;
+ /**< Fix count for the session. The count starts at 0 and increments by one for
+ each successive batched position report for a particular session. */
+
+ qmiLocBatchedReportValidFieldsMaskT_v02 validFields;
+ /**< Mask of all valid fields for this fix.
+ Valid bitmasks: \n
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_LATITUDE (0x00000001) -- Latitude field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_LONGITUDE (0x00000002) -- Longitude field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_HOR_CIR_UNC (0x00000004) -- Horizontal circular uncertainty field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_SPEED_HOR (0x00000008) -- Horizontal speed field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_SPEED_UNC (0x00000010) -- Speed uncertainty field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_ALT_WRT_ELP (0x00000020) -- Altitude with respect to ellipsoid field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_SPEED_VER (0x00000040) -- Vertical speed field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_HEADING (0x00000080) -- Heading field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_HEADING_UNC (0x00000100) -- Heading uncertainty field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_TECH_MASK (0x00000200) -- Technology source mask field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_TIMESTAMP_UTC (0x00000400) -- UTC timestamp field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_TIME_UNC (0x00000800) -- Time uncertainty field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_MAGNETIC_DEV (0x00001000) -- Magnetic deviation field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_VERT_UNC (0x00002000) -- Vertical uncertainty field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_HOR_CONF (0x00004000) -- Horizontal confidence field is valid for this fix
+ - QMI_LOC_BATCHED_REPORT_MASK_VALID_TIMESTAMP_GPS (0x00008000) -- GPS timestamp field is valid for this fix
+ */
+
+ double latitude;
+ /**< Latitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -90.0 to 90.0 \begin{itemize1}
+ \item Positive values indicate northern latitude
+ \item Negative values indicate southern latitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ double longitude;
+ /**< Longitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -180.0 to 180.0 \begin{itemize1}
+ \item Positive values indicate eastern longitude
+ \item Negative values indicate western longitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ float horUncCircular;
+ /**< Horizontal position uncertainty (circular).\n
+ - Units: Meters */
+
+ float speedHorizontal;
+ /**< Horizontal speed.\n
+ - Units: Meters/second */
+
+ float speedUnc;
+ /**< 3-D Speed uncertainty.\n
+ - Units: Meters/second */
+
+ float altitudeWrtEllipsoid;
+ /**< Altitude with respect to the WGS84 ellipsoid.\n
+ - Units: Meters \n
+ - Range: -500 to 15883 */
+
+ float speedVertical;
+ /**< Vertical speed.\n
+ - Units: Meters/second */
+
+ float heading;
+ /**< Heading.\n
+ - Units: Degrees \n
+ - Range: 0 to 359.999 */
+
+ float headingUnc;
+ /**< Heading uncertainty.\n
+ - Units: Degrees \n
+ - Range: 0 to 359.999 */
+
+ qmiLocPosTechMaskT_v02 technologyMask;
+ /**< Technology used in computing this fix.
+ Valid bitmasks: \n
+ - QMI_LOC_POS_TECH_MASK_SATELLITE (0x00000001) -- Satellites were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_CELLID (0x00000002) -- Cell towers were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_WIFI (0x00000004) -- Wi-Fi access points were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_SENSORS (0x00000008) -- Sensors were used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_REFERENCE_LOCATION (0x00000010) -- Reference Location was used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_INJECTED_COARSE_POSITION (0x00000020) -- Coarse position injected into the location engine was used to
+ generate the fix
+ - QMI_LOC_POS_TECH_MASK_AFLT (0x00000040) -- AFLT was used to generate the fix
+ - QMI_LOC_POS_TECH_MASK_HYBRID (0x00000080) -- GNSS and network-provided measurements were used to
+ generate the fix
+ */
+
+ uint64_t timestampUtc;
+ /**< UTC timestamp. \n
+ - Units: Milliseconds since Jan. 1, 1970 */
+
+ float timeUnc;
+ /**< Time uncertainty. \n
+ - Units: Milliseconds */
+
+ 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. */
+
+ float vertUnc;
+ /**< Vertical uncertainty.\n
+ - Units: Meters */
+
+ uint8_t horConfidence;
+ /**< Horizontal confidence.
+ - Units: Percent
+ - Range: 0 to 99 */
+
+ qmiLocGPSTimeStructT_v02 gpsTime;
+ /**< Number of weeks since Jan. 5, 1980, and milliseconds into the current week. */
+}qmiLocBatchedReportStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used to notify the control point with the live batched
+ position report. */
+typedef struct {
+
+ /* Mandatory */
+ /* Batched Position Report */
+ qmiLocBatchedReportStructT_v02 liveBatchedReport;
+ /**< \n Live position report that is also batched. */
+}qmiLocEventLiveBatchedPositionReportIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to retrieve fixes from the batch. */
+typedef struct {
+
+ /* Mandatory */
+ /* Number of Fix Entries to be Retrieved from the Batch */
+ uint32_t numberOfEntries;
+ /**< Number of fix entries to be retrieved from the batch. \n
+ Maximum limit -- QMI_LOC_READ_FROM_BATCH_MAX_SIZE.
+ */
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID is returned in the Read
+ from Batch indication. */
+}qmiLocReadFromBatchReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to retrieve fixes from the batch. */
+typedef struct {
+
+ /* Mandatory */
+ /* Read from Batch Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Read from Batch request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Read from Batch
+ request.
+ */
+
+ /* Optional */
+ /* Number of Fix Entries Returned from the Batch */
+ uint8_t numberOfEntries_valid; /**< Must be set to true if numberOfEntries is being passed */
+ uint32_t numberOfEntries;
+ /**< Number of fix entries returned from the batch. */
+
+ /* Optional */
+ /* List of Batched Position Reports Returned */
+ uint8_t batchedReportList_valid; /**< Must be set to true if batchedReportList is being passed */
+ uint32_t batchedReportList_len; /**< Must be set to # of elements in batchedReportList */
+ qmiLocBatchedReportStructT_v02 batchedReportList[QMI_LOC_READ_FROM_BATCH_MAX_SIZE_V02];
+ /**< \n List of fix reports returned from the batch. */
+}qmiLocReadFromBatchIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to stop an ongoing batching session. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Transaction ID of the request. */
+
+ /* Optional */
+ /* Request ID */
+ uint8_t requestId_valid; /**< Must be set to true if requestId is being passed */
+ uint32_t requestId;
+ /**< Identifies the batching request that must be stopped.
+ A batching client can start multiple batching requests. \n
+ Valid Values 0x01 - 0xFFFFFFFF
+ */
+}qmiLocStopBatchingReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to stop an ongoing batching session. */
+typedef struct {
+
+ /* Mandatory */
+ /* Stop Batching Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Stop Batching request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Stop Batching request.
+ */
+
+ /* Optional */
+ /* Request ID */
+ uint8_t requestId_valid; /**< Must be set to true if requestId is being passed */
+ uint32_t requestId;
+ /**< Identifies the batching request that was stopped.
+ A batching client can start multiple batching requests. \n
+ Valid Values 0x01 - 0xFFFFFFFF
+ */
+}qmiLocStopBatchingIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to release the batching buffer. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. */
+}qmiLocReleaseBatchReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to release the batching buffer. */
+typedef struct {
+
+ /* Mandatory */
+ /* Release Batch Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Release Batch request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Release Batch request.
+ */
+}qmiLocReleaseBatchIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Requests the control point to inject Wi-Fi AP data. */
+typedef struct {
+
+ /* Optional */
+ /* E911 Mode */
+ uint8_t e911Mode_valid; /**< Must be set to true if e911Mode is being passed */
+ uint8_t e911Mode;
+ /**< Specifies whether GPS engine is in e911 mode when this
+ indication is sent to the client.
+
+ Valid values: \begin{itemize1}
+ \item 0x01 (TRUE) -- GPS engine is in e911 mode
+ \item 0x00 (FALSE) -- GPS engine is not in e911 mode
+ \end{itemize1}
+ */
+}qmiLocEventInjectWifiApDataReqIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCWIFIAPDATADEVICETYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_WIFI_AP_DATA_DEVICE_TYPE_WLAN_802_11_A_V02 = 0, /**< Wi-Fi AP device is 802.11a. */
+ eQMI_LOC_WIFI_AP_DATA_DEVICE_TYPE_WLAN_802_11_B_V02 = 1, /**< Wi-Fi AP device is 802.11b. */
+ eQMI_LOC_WIFI_AP_DATA_DEVICE_TYPE_WLAN_802_11_G_V02 = 2, /**< Wi-Fi AP device is 802.11g. */
+ QMILOCWIFIAPDATADEVICETYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocWifiApDataDeviceTypeEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCWIFIAPDATARTDUNITTYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_WIFI_AP_DATA_RTD_UNIT_MICROSEC_V02 = 0, /**< Wi-Fi AP data Round-trip Delay (RTD) is in microseconds. */
+ eQMI_LOC_WIFI_AP_DATA_RTD_UNIT_HUNDREDS_OF_NANOSEC_V02 = 1, /**< Wi-Fi AP data RTD is in hundreds of nanoseconds. */
+ eQMI_LOC_WIFI_AP_DATA_RTD_UNIT_TENS_OF_NANOSEC_V02 = 2, /**< Wi-Fi AP data RTD is in tens of nanoseconds. */
+ eQMI_LOC_WIFI_AP_DATA_RTD_UNIT_NANOSEC_V02 = 3, /**< Wi-Fi AP data RTD is in nanoseconds. */
+ eQMI_LOC_WIFI_AP_DATA_RTD_UNIT_TENTH_OF_NANOSEC_V02 = 4, /**< Wi-Fi AP data RTD is in tenths of nanoseconds. */
+ QMILOCWIFIAPDATARTDUNITTYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocWifiApDataRtdUnitTypeEnumT_v02;
+/**
+ @}
+ */
+
+typedef uint32_t qmiLocWifiApDataMaskT_v02;
+#define QMI_LOC_WIFI_APDATA_MASK_AP_TRANSMIT_POWER_V02 ((qmiLocWifiApDataMaskT_v02)0x00000001) /**< AP transmit power is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_AP_ANTENNA_GAIN_V02 ((qmiLocWifiApDataMaskT_v02)0x00000002) /**< AP antenna gain is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_AP_SNR_V02 ((qmiLocWifiApDataMaskT_v02)0x00000004) /**< AP signal-to-noise ratio is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_AP_DEVICE_TYPE_V02 ((qmiLocWifiApDataMaskT_v02)0x00000008) /**< AP device type is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_AP_RSSI_V02 ((qmiLocWifiApDataMaskT_v02)0x00000010) /**< AP RSSI is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_AP_CHANNEL_V02 ((qmiLocWifiApDataMaskT_v02)0x00000020) /**< AP channel is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_AP_ROUNDTRIP_DELAY_V02 ((qmiLocWifiApDataMaskT_v02)0x00000040) /**< AP roundtrip delay is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_AP_ROUNDTRIP_DELAY_ACCURACY_V02 ((qmiLocWifiApDataMaskT_v02)0x00000080) /**< AP roundtrip delay accuracy is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_MOBILE_SNR_V02 ((qmiLocWifiApDataMaskT_v02)0x00000100) /**< Mobile signal-to-noise ratio is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_MOBILE_RSSI_V02 ((qmiLocWifiApDataMaskT_v02)0x00000200) /**< Mobile RSSI is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_RSSI_TIMESTAMP_V02 ((qmiLocWifiApDataMaskT_v02)0x00000400) /**< RSSI timestamp is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_MEASUREMENT_AGE_V02 ((qmiLocWifiApDataMaskT_v02)0x00000800) /**< Measurement age is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_SERVING_AP_V02 ((qmiLocWifiApDataMaskT_v02)0x00001000) /**< Serving access point is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_FREQUENCY_V02 ((qmiLocWifiApDataMaskT_v02)0x00002000) /**< Channel frequency is valid */
+#define QMI_LOC_WIFI_APDATA_MASK_SSID_V02 ((qmiLocWifiApDataMaskT_v02)0x00004000) /**< SSID is valid */
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ qmiLocWifiApDataMaskT_v02 wifiApDataMask;
+ /**< Specifies which Wi-Fi AP scan information types are being used.
+
+ Valid values: \n
+ - QMI_LOC_WIFI_APDATA_MASK_AP_TRANSMIT_POWER (0x00000001) -- AP transmit power is valid
+ - QMI_LOC_WIFI_APDATA_MASK_AP_ANTENNA_GAIN (0x00000002) -- AP antenna gain is valid
+ - QMI_LOC_WIFI_APDATA_MASK_AP_SNR (0x00000004) -- AP signal-to-noise ratio is valid
+ - QMI_LOC_WIFI_APDATA_MASK_AP_DEVICE_TYPE (0x00000008) -- AP device type is valid
+ - QMI_LOC_WIFI_APDATA_MASK_AP_RSSI (0x00000010) -- AP RSSI is valid
+ - QMI_LOC_WIFI_APDATA_MASK_AP_CHANNEL (0x00000020) -- AP channel is valid
+ - QMI_LOC_WIFI_APDATA_MASK_AP_ROUNDTRIP_DELAY (0x00000040) -- AP roundtrip delay is valid
+ - QMI_LOC_WIFI_APDATA_MASK_AP_ROUNDTRIP_DELAY_ACCURACY (0x00000080) -- AP roundtrip delay accuracy is valid
+ - QMI_LOC_WIFI_APDATA_MASK_MOBILE_SNR (0x00000100) -- Mobile signal-to-noise ratio is valid
+ - QMI_LOC_WIFI_APDATA_MASK_MOBILE_RSSI (0x00000200) -- Mobile RSSI is valid
+ - QMI_LOC_WIFI_APDATA_MASK_RSSI_TIMESTAMP (0x00000400) -- RSSI timestamp is valid
+ - QMI_LOC_WIFI_APDATA_MASK_MEASUREMENT_AGE (0x00000800) -- Measurement age is valid
+ - QMI_LOC_WIFI_APDATA_MASK_SERVING_AP (0x00001000) -- Serving access point is valid
+ - QMI_LOC_WIFI_APDATA_MASK_FREQUENCY (0x00002000) -- Channel frequency is valid
+ - QMI_LOC_WIFI_APDATA_MASK_SSID (0x00004000) -- SSID is valid */
+
+ uint8_t macAddress[QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02];
+ /**< MAC address. \n
+ Each address is of length QMI_LOC_WIFI_MAC_ADDR_LENGTH.
+ */
+
+ int32_t apTransmitPower;
+ /**< AP transmit power in dBm. */
+
+ int32_t apAntennaGain;
+ /**< AP antenna gain in dBI. */
+
+ int32_t apSignalToNoise;
+ /**< AP SNR received at the mobile device. */
+
+ qmiLocWifiApDataDeviceTypeEnumT_v02 apDeviceType;
+ /**< List of AP device types. */
+
+ int32_t apRssi;
+ /**< AP signal strength indicator in dBm. */
+
+ uint16_t apChannel;
+ /**< AP Wi-Fi channel on which a beacon was received. */
+
+ uint32_t apRoundTripDelay;
+ /**< Round trip delay between the mobile device and the AP, in units of
+ apRoundTripDelayUnit. */
+
+ qmiLocWifiApDataRtdUnitTypeEnumT_v02 apRoundTripDelayUnit;
+ /**< Units of apRoundTripDelay and its accuracy; mandatory if apRoundTripDelay
+ is present. */
+
+ uint8_t apRoundTripDelayAccuracy;
+ /**< AP's accuracy of round trip delay apRoundTripDelay, in units of
+ apRoundTripDelayUnit. */
+
+ int32_t mobileSignalToNoise;
+ /**< Mobile SNR received at the AP. */
+
+ int32_t mobileRssi;
+ /**< Mobile signal strength at the AP. */
+}qmiLocWifiApDataStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ int64_t rssiTimestamp;
+ /**< Measurement time stamp, it is corresponding to when the beacon was received.
+ Units: Milliseconds \n
+ Type : int64 */
+
+ int32_t measAge;
+ /**< Measurements age, -1 means info not available.
+ Units: Milliseconds \n
+ Type : int32 */
+
+ uint8_t servingAccessPoint;
+ /**< This parameter indicates whether a set of WLAN-AP measurements
+ were obtained for a serving WLAN-AP (TRUE) or a non-serving WLAN-AP (FALSE).
+ A target device with multiple radio support may indicate more than
+ one type of serving access for the same time instant.
+ Type : boolean */
+
+ uint32_t channelFrequency;
+ /**< Primary channel frequency.
+ Units: MHz \n
+ Type : uint32 */
+
+ char ssid[QMI_LOC_MAX_WIFI_AP_SSID_STR_LENGTH_V02 + 1];
+ /**< The NULL-terminated SSID of the Wi-Fi AP.
+ Its maximum length according to the ASCII standard is 32 octets.
+ Type : string */
+
+ int32_t apHighResolutionRssi;
+ /**< AP signal strength indicator in 0.1 dBm.
+ Units: 0.1dBm \n
+ Type : int32 */
+}qmiLocWifiApAdditionalDataStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCWLANAPERRENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_WLAN_AP_ERR_UNKNOWN_V02 = 0, /**< Error is unknown */
+ eQMI_LOC_WLAN_AP_ERR_NO_REQ_MEAS_AVAILABLE_V02 = 1, /**< None of the requested measurements could be provided */
+ eQMI_LOC_WLAN_AP_ERR_WIFI_OFF_V02 = 2, /**< Wifi is off */
+ QMILOCWLANAPERRENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocWlanApErrEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects Wi-Fi AP data. */
+typedef struct {
+
+ /* Mandatory */
+ /* Wi-Fi AP Scan Data */
+ uint32_t wifiApInfo_len; /**< Must be set to # of elements in wifiApInfo */
+ qmiLocWifiApDataStructT_v02 wifiApInfo[QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02];
+ /**< \n List of Wi-Fi AP scan information entered by the control point. */
+
+ /* Optional */
+ /* The failure reason of WLAN-AP measurements not available */
+ uint8_t errorCause_valid; /**< Must be set to true if errorCause is being passed */
+ qmiLocWlanApErrEnumT_v02 errorCause;
+ /**< In case of WLAN-AP measurements not available,
+ the appropriate reason for error/failure should be indicated.
+ This field won’t be present in the success case when WLAN-AP measurements are available.
+ Valid values: \n
+ - eQMI_LOC_WLAN_AP_ERR_UNKNOWN (0) -- Error is unknown
+ - eQMI_LOC_WLAN_AP_ERR_NO_REQ_MEAS_AVAILABLE (1) -- None of the requested measurements could be provided
+ - eQMI_LOC_WLAN_AP_ERR_WIFI_OFF (2) -- Wifi is off */
+
+ /* Optional */
+ /* Scan Request Timestamp */
+ uint8_t requestTimestamp_valid; /**< Must be set to true if requestTimestamp is being passed */
+ int64_t requestTimestamp;
+ /**< UTC timestamp at which the scan was requested.
+ Units: Milliseconds \n
+ Type : int64 */
+
+ /* Optional */
+ /* Scan Receive Timestamp */
+ uint8_t receiveTimestamp_valid; /**< Must be set to true if receiveTimestamp is being passed */
+ int64_t receiveTimestamp;
+ /**< UTC timestamp at which the scan was received.
+ Units: Milliseconds \n
+ Type : int64 */
+
+ /* Optional */
+ /* Free Scan or On-Demand Scan */
+ uint8_t onDemandScan_valid; /**< Must be set to true if onDemandScan is being passed */
+ uint8_t onDemandScan;
+ /**< If this scan is requested by the modem.
+ Type : boolean
+ 0x00 (FALSE) -- The wifi AP data injection is not requested by the modem(Free Scan).
+ 0x01 (TRUE) -- The wifi AP data injection is requested by the modem(On-Demand Scan).*/
+
+ /* Optional */
+ /* Wi-Fi AP Additional Measurements Scan Data */
+ uint8_t wifiApInfoA_valid; /**< Must be set to true if wifiApInfoA is being passed */
+ uint32_t wifiApInfoA_len; /**< Must be set to # of elements in wifiApInfoA */
+ qmiLocWifiApAdditionalDataStructT_v02 wifiApInfoA[QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02];
+ /**< \n List of Wi-Fi AP additional measurements scan information entered by the control point.
+ The order and the number of additional measurements must be as same as wifiApInfo */
+}qmiLocInjectWifiApDataReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects Wi-Fi AP data. */
+typedef struct {
+
+ /* Mandatory */
+ /* Wi-Fi AP Scan Information Injection Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Inject Wi-Fi AP Scan Information request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocInjectWifiApDataIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCWIFIACCESSPOINTATTACHSTATESENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_WIFI_ACCESS_POINT_ATTACHED_V02 = 0, /**< Attached to an access point */
+ eQMI_LOC_WIFI_ACCESS_POINT_DETACHED_V02 = 1, /**< Detached from an access point */
+ eQMI_LOC_WIFI_ACCESS_POINT_HANDOVER_V02 = 2, /**< Handed over to another access point */
+ QMILOCWIFIACCESSPOINTATTACHSTATESENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocWifiAccessPointAttachStatesEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to inject the Wi-Fi attachment status. */
+typedef struct {
+
+ /* Mandatory */
+ /* Attach State */
+ qmiLocWifiAccessPointAttachStatesEnumT_v02 attachState;
+ /**< Wi.Fi access point attach state.
+
+ Valid values: \n
+ - eQMI_LOC_WIFI_ACCESS_POINT_ATTACHED (0) -- Attached to an access point
+ - eQMI_LOC_WIFI_ACCESS_POINT_DETACHED (1) -- Detached from an access point
+ - eQMI_LOC_WIFI_ACCESS_POINT_HANDOVER (2) -- Handed over to another access point */
+
+ /* Optional */
+ /* Access Point MAC Address */
+ uint8_t accessPointMacAddress_valid; /**< Must be set to true if accessPointMacAddress is being passed */
+ uint8_t accessPointMacAddress[QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02];
+ /**< MAC address of the access point to which the Wi-Fi is attached.
+ This must always be specified if the attach state is Handover.
+ */
+
+ /* Optional */
+ /* Wi-Fi AP SSID String */
+ uint8_t wifiApSsid_valid; /**< Must be set to true if wifiApSsid is being passed */
+ char wifiApSsid[QMI_LOC_MAX_WIFI_AP_SSID_STR_LENGTH_V02 + 1];
+ /**< The NULL-terminated SSID of the Wi-Fi AP. Its maximum length according to the ASCII standard is 32 octets. */
+}qmiLocNotifyWifiAttachmentStatusReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to inject the Wi-Fi attachment status. */
+typedef struct {
+
+ /* Mandatory */
+ /* Status of Wi-Fi Attachment Status Request */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of Wi-Fi Attachment Status request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocNotifyWifiAttachmentStatusIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCWIFIENABLEDSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_WIFI_ENABLED_FALSE_V02 = 0, /**< Wi-Fi is disabled on the device */
+ eQMI_LOC_WIFI_ENABLED_TRUE_V02 = 1, /**< Wi-Fi is enabled on the device */
+ QMILOCWIFIENABLEDSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocWifiEnabledStatusEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to inject the Wi-Fi enabled status. */
+typedef struct {
+
+ /* Mandatory */
+ /* Enabled Status */
+ qmiLocWifiEnabledStatusEnumT_v02 enabledStatus;
+ /**< Wi-Fi enabled status on the device.
+
+ Valid values: \n
+ - eQMI_LOC_WIFI_ENABLED_FALSE (0) -- Wi-Fi is disabled on the device
+ - eQMI_LOC_WIFI_ENABLED_TRUE (1) -- Wi-Fi is enabled on the device */
+}qmiLocNotifyWifiEnabledStatusReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to inject the Wi-Fi enabled status. */
+typedef struct {
+
+ /* Mandatory */
+ /* Status of Wi-Fi Enabled Status Request */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Wi-Fi Enabled Status request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocNotifyWifiEnabledStatusIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the control point whether the GNSS location engine is
+ ready to accept vehicle data. */
+typedef struct {
+
+ /* Optional */
+ /* Vehicle Accelerometer Ready Status */
+ uint8_t vehicleAccelReadyStatus_valid; /**< Must be set to true if vehicleAccelReadyStatus is being passed */
+ uint8_t vehicleAccelReadyStatus;
+ /**< The location service uses this TLV to let a control point know when it is
+ ready or not ready to receive vehicle accelerometer data input.
+ Values: \n
+ - 0x00 -- Not ready \n
+ - 0x01 -- Ready */
+
+ /* Optional */
+ /* Vehicle Angular Rate Ready Status */
+ uint8_t vehicleAngularRateReadyStatus_valid; /**< Must be set to true if vehicleAngularRateReadyStatus is being passed */
+ uint8_t vehicleAngularRateReadyStatus;
+ /**< The location service uses this TLV to let a control point know when it is
+ ready or not ready to receive vehicle angular rate data input.
+ Values: \n
+ - 0x00 -- Not ready \n
+ - 0x01 -- Ready */
+
+ /* Optional */
+ /* Vehicle Odometry Ready Status */
+ uint8_t vehicleOdometryReadyStatus_valid; /**< Must be set to true if vehicleOdometryReadyStatus is being passed */
+ uint8_t vehicleOdometryReadyStatus;
+ /**< The location service uses this TLV to let a control point know when it is
+ ready or not ready to receive vehicle odometry data input.
+ Values: \n
+ - 0x00 -- Not ready \n
+ - 0x01 -- Ready*/
+}qmiLocEventVehicleDataReadyIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint32_t timeOffset;
+ /**< Sample time offset. This time offset must be
+ relative to the vehicle sensor time of the first sample. \n
+ - Units: Microseconds \n
+ - Range: Up to over 4000 seconds */
+
+ uint32_t axisSample_len; /**< Must be set to # of elements in axisSample */
+ float axisSample[QMI_LOC_VEHICLE_SENSOR_DATA_MAX_AXES_V02];
+ /**< Sensor axis sample. \n
+ - Type: Floating point \n
+ - Units accelerometer: Meters/seconds^2 \n
+ - Units gyroscope: Radians/seconds \vspace{4pt}
+
+ Note: The axes samples must be in the following order: \n
+ 1. X-Axis \n
+ 2. Y-Axis \n
+ 3. Z-Axis */
+}qmiLocVehicleSensorSampleStructT_v02; /* Type */
+/**
+ @}
+ */
+
+typedef uint8_t qmiLocAxesMaskT_v02;
+#define QMI_LOC_MASK_X_AXIS_V02 ((qmiLocAxesMaskT_v02)0x01) /**< X-axis is valid */
+#define QMI_LOC_MASK_Y_AXIS_V02 ((qmiLocAxesMaskT_v02)0x02) /**< Y-axis is valid */
+#define QMI_LOC_MASK_Z_AXIS_V02 ((qmiLocAxesMaskT_v02)0x04) /**< Z-axis is valid */
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint32_t sampleTimeBase;
+ /**< Denotes a 32-bit time tag of the reference time from which
+ all samples in this message are offset. This time must
+ be the same as or (slightly) earlier than the first (oldest)
+ sample in this message. \n
+ - Units: Milliseconds \n
+ - Range: Approx. 4 million seconds, or almost 50 days between rollovers */
+
+ qmiLocAxesMaskT_v02 axesValidity;
+ /**< Identifies the axes that are valid for all sensor samples.
+
+ Valid values: \n
+ - QMI_LOC_MASK_X_AXIS (0x01) -- X-axis is valid
+ - QMI_LOC_MASK_Y_AXIS (0x02) -- Y-axis is valid
+ - QMI_LOC_MASK_Z_AXIS (0x04) -- Z-axis is valid */
+
+ uint32_t sensorData_len; /**< Must be set to # of elements in sensorData */
+ qmiLocVehicleSensorSampleStructT_v02 sensorData[QMI_LOC_VEHICLE_SENSOR_DATA_MAX_SAMPLES_V02];
+}qmiLocVehicleSensorSampleListStructType_v02; /* Type */
+/**
+ @}
+ */
+
+typedef uint32_t qmiLocVehicleOdometryMeasDeviationMaskType_v02;
+#define QMI_LOC_MASK_VEHICLE_ODOMETRY_REVERSE_MOVEMENT_V02 ((qmiLocVehicleOdometryMeasDeviationMaskType_v02)0x00000001) /**< Odometry data in this message includes at least some data where
+ the vehicle may have been moving in the reverse direction; this
+ bit must be set if odometry data may be in reverse, and should
+ not be set if odometry data is all in the forward direction */
+#define QMI_LOC_MASK_VEHICLE_ODOMETRY_AFFECTED_BY_ERRORS_V02 ((qmiLocVehicleOdometryMeasDeviationMaskType_v02)0x00000002) /**< Odometry data in this message includes at least some data affected
+ by a major error source affecting distance-travelled accuracy,
+ such as wheel slippage due to skidding, gravel, snow, or ice, as
+ detected by the vehicle, e.g., via an ABS or other system */
+#define QMI_LOC_MASK_VEHICLE_ODOMETRY_ABSOLUTE_MEASUREMENT_V02 ((qmiLocVehicleOdometryMeasDeviationMaskType_v02)0x00000004) /**< Odometry data in this message is an absolute amount since the vehicle
+ began service, and is the same vehicle that is regularly used with
+ this device (so that the offset of this value, since the last time
+ this measurement was used by the location engine, can safely be used
+ as a likely correct estimate of distance travelled since last
+ use) */
+typedef uint32_t qmiLocVehicleOdometryWheelFlagsMaskT_v02;
+#define QMI_LOC_MASK_VEHICLE_ODOMETRY_LEFT_AND_RIGHT_AVERAGE_V02 ((qmiLocVehicleOdometryWheelFlagsMaskT_v02)0x00000001) /**< Average of left and right non-turning wheels */
+#define QMI_LOC_MASK_VEHICLE_ODOMETRY_LEFT_V02 ((qmiLocVehicleOdometryWheelFlagsMaskT_v02)0x00000002) /**< Left side, non-turning wheel */
+#define QMI_LOC_MASK_VEHICLE_ODOMETRY_RIGHT_V02 ((qmiLocVehicleOdometryWheelFlagsMaskT_v02)0x00000004) /**< Right side, non-turning wheel */
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint32_t timeOffset;
+ /**< Sample time offset. This time offset must be
+ relative to the sensor time of the first sample. \n
+ - Units: Microseconds \n
+ - Range: Up to over 4000 seconds */
+
+ uint32_t distanceTravelled_len; /**< Must be set to # of elements in distanceTravelled */
+ uint32_t distanceTravelled[QMI_LOC_VEHICLE_ODOMETRY_MAX_MEASUREMENTS_V02];
+ /**< Distance travelled (odometry) sample offset. \n
+ - Units of accumulated distance: Millimeters \n
+ - Range: Over 4000 kilometers
+
+ This measurement (with units in millimeters) is added to
+ the distance_travelled_base measurement (in meters) to
+ get the total distance travelled sample value.
+
+ Note: The order of measurements must be as follows: \n
+ 1. Left and right average \n
+ 2. Left \n
+ 3. Right
+ */
+}qmiLocVehicleOdometrySampleStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint32_t sampleTimeBase;
+ /**< Denotes a 32-bit time tag of a reference time, from which
+ all samples in this message are offset. Note this time must
+ be the same or (slightly) earlier than the first (oldest)
+ sample in this message. \n
+ - Units: 1 millisecond \n
+ - Range: ~4 million seconds, or almost 50 days between rollovers */
+
+ qmiLocVehicleOdometryMeasDeviationMaskType_v02 flags;
+ /**< Flags to indicate any deviation from the default measurement
+ assumptions. Valid bitmasks: \n
+ - QMI_LOC_MASK_VEHICLE_ODOMETRY_REVERSE_MOVEMENT (0x00000001) -- Odometry data in this message includes at least some data where
+ the vehicle may have been moving in the reverse direction; this
+ bit must be set if odometry data may be in reverse, and should
+ not be set if odometry data is all in the forward direction
+ - QMI_LOC_MASK_VEHICLE_ODOMETRY_AFFECTED_BY_ERRORS (0x00000002) -- Odometry data in this message includes at least some data affected
+ by a major error source affecting distance-travelled accuracy,
+ such as wheel slippage due to skidding, gravel, snow, or ice, as
+ detected by the vehicle, e.g., via an ABS or other system
+ - QMI_LOC_MASK_VEHICLE_ODOMETRY_ABSOLUTE_MEASUREMENT (0x00000004) -- Odometry data in this message is an absolute amount since the vehicle
+ began service, and is the same vehicle that is regularly used with
+ this device (so that the offset of this value, since the last time
+ this measurement was used by the location engine, can safely be used
+ as a likely correct estimate of distance travelled since last
+ use) */
+
+ qmiLocVehicleOdometryWheelFlagsMaskT_v02 wheelFlags;
+ /**< Delineates for which wheels measurements are being provided
+ in the following samples, where one or more of the following
+ bits must be set, and data samples aligned with these axes must
+ appear in groups, in this order.
+
+ Valid bitmasks: \n
+ - QMI_LOC_MASK_VEHICLE_ODOMETRY_LEFT_AND_RIGHT_AVERAGE (0x00000001) -- Average of left and right non-turning wheels
+ - QMI_LOC_MASK_VEHICLE_ODOMETRY_LEFT (0x00000002) -- Left side, non-turning wheel
+ - QMI_LOC_MASK_VEHICLE_ODOMETRY_RIGHT (0x00000004) -- Right side, non-turning wheel */
+
+ uint32_t distanceTravelledBase;
+ /**< Distance traveled base. \n
+ - Units of accumulated distance: Meters \n
+ - Range: Over 4,000,0000 kilometers \vspace{0.06in} \n
+
+ Distance travelled (odometry) is to be reported in a continuously
+ accumulating way from device power up. It may be incremental distance
+ starting at 0, or another arbitrary point, from device power up, or the
+ absolute distance traveled by the vehicle
+ (and if so, set QMI_LOC_MASK_VEHICLE_ODOMETRY_ABSOLUTE_MEASUREMENT),
+ as long as it grows incrementally from device power up.
+
+ This distance_travelled_base is added to the distrance_travelled_offset
+ of each sample (below) to get the absolute distance of each sample
+ point.
+
+ Distance travelled errors are expected to be primarily due to the
+ scale factor, with some allowance for noise due to minor slippage
+ events (e.g., gravel.)
+ Major wheel slippage events that affect odometry
+ must be flagged -- see the flags field.
+
+ Note that other events, such as a vehicle travelling in reverse, may
+ also affect the available accuracy of this information, and notification
+ of those events must be provided -- see the flags field. */
+
+ uint32_t odometryData_len; /**< Must be set to # of elements in odometryData */
+ qmiLocVehicleOdometrySampleStructT_v02 odometryData[QMI_LOC_VEHICLE_SENSOR_DATA_MAX_SAMPLES_V02];
+ /**< Variable length array to specify the odometry samples.
+ Maximum length of the array is 50. */
+}qmiLocVehicleOdometrySampleListStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects on-vehicle sensor data into the location engine. */
+typedef struct {
+
+ /* Optional */
+ /* On-Vehicle Accelerometer Data */
+ uint8_t accelData_valid; /**< Must be set to true if accelData is being passed */
+ qmiLocVehicleSensorSampleListStructType_v02 accelData;
+ /**< \vspace{0.06in} \n Vehicle accelerometer sensor samples. */
+
+ /* Optional */
+ /* On-Vehicle Angular Rotation Data */
+ uint8_t angRotationData_valid; /**< Must be set to true if angRotationData is being passed */
+ qmiLocVehicleSensorSampleListStructType_v02 angRotationData;
+ /**< \vspace{0.06in} \n Vehicle angular rotation data sensor samples. */
+
+ /* Optional */
+ /* Odometry Data */
+ uint8_t odometryData_valid; /**< Must be set to true if odometryData is being passed */
+ qmiLocVehicleOdometrySampleListStructT_v02 odometryData;
+ /**< \vspace{0.06in} \n Odometer sensor samples. */
+
+ /* Optional */
+ /* External Time Sync Information */
+ uint8_t changeInTimeScales_valid; /**< Must be set to true if changeInTimeScales is being passed */
+ int32_t changeInTimeScales;
+ /**< This field is to be used in conjunction with an external
+ time-sync mechanism that is aligning the vehicle sensor time scale
+ with the on-device sensor time scale to ensure that updates in
+ that time offset do not appear as jumps in the relative sensor time
+ of the samples provided in this message. If there is no such sync
+ mechanism, e.g., if only the vehicle time is provided, this field
+ may be left at 0.
+
+ This field is defined as the change from the previously-sent QMI
+ message with similar TLVs 0x10, 0x11, or 0x12 in it, to this QMI
+ message in the amount that the sensor_time is ahead of an
+ external vehicle time. \n
+
+ - Units: Microseconds \n
+ - Range: Approximately -2100 seconds to + 2100 seconds, where
+ full-scale (minimum and maximum value) is interpreted
+ as equal to or greater than this value of an offset change
+ (unlikely to be reached in practice, unless there is a
+ startup, major resync, or some other rollover event). */
+}qmiLocInjectVehicleSensorDataReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects on-vehicle sensor data into the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Inject Vehicle Sensor Data Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Inject Vehicle Sensor Data request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocInjectVehicleSensorDataIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to get the first available WWAN
+ position from the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID
+ is returned in the Get Available WWAN Position indication. */
+}qmiLocGetAvailWwanPositionReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to get the first available WWAN
+ position from the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Get Available WWAN Position Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Get Available WWAN Position request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Get Available
+ WWAN Position request. This parameter will
+ always be present if the status field is set to
+ SUCCESS. */
+
+ /* Optional */
+ /* Latitude */
+ uint8_t latitude_valid; /**< Must be set to true if latitude is being passed */
+ double latitude;
+ /**< Latitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -90.0 to 90.0 \begin{itemize1}
+ \item Positive values indicate northern latitude
+ \item Negative values indicate southern latitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* Optional */
+ /* Longitude */
+ uint8_t longitude_valid; /**< Must be set to true if longitude is being passed */
+ double longitude;
+ /**< Longitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -180.0 to 180.0 \begin{itemize1}
+ \item Positive values indicate eastern longitude
+ \item Negative values indicate western longitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* 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
+ - Units: Meters */
+
+ /* 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
+ - Units: Meters \n
+ - Range: -500 to 15883 */
+
+ /* Optional */
+ /* Vertical Uncertainty */
+ uint8_t vertUnc_valid; /**< Must be set to true if vertUnc is being passed */
+ float vertUnc;
+ /**< Vertical uncertainty.\n
+ - Units: Meters */
+
+ /* Optional */
+ /* UTC Timestamp */
+ uint8_t timestampUtc_valid; /**< Must be set to true if timestampUtc is being passed */
+ uint64_t timestampUtc;
+ /**< UTC timestamp. \n
+ - Units: Milliseconds since Jan. 1, 1970 */
+
+ /* Optional */
+ /* Time Uncertainty */
+ uint8_t timeUnc_valid; /**< Must be set to true if timeUnc is being passed */
+ float timeUnc;
+ /**< Time uncertainty. \n
+ - Units: Milliseconds */
+
+ /* 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
+ - 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
+ - Units: Meters */
+
+ /* Optional */
+ /* Horizontal Elliptical 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
+ - Units: Decimal degrees \n
+ - Range: 0 to 180 */
+
+ /* Optional */
+ /* Horizontal Circular Confidence */
+ uint8_t horCircularConfidence_valid; /**< Must be set to true if horCircularConfidence is being passed */
+ uint8_t horCircularConfidence;
+ /**< Horizontal circular uncertainty confidence. \n
+ - Units: Percent \n
+ - Range: 0 to 99 */
+
+ /* Optional */
+ /* Horizontal Elliptical Confidence */
+ uint8_t horEllipticalConfidence_valid; /**< Must be set to true if horEllipticalConfidence is being passed */
+ uint8_t horEllipticalConfidence;
+ /**< Horizontal elliptical uncertainty confidence. \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
+ - eQMI_LOC_RELIABILITY_NOT_SET (0) -- Location reliability is not set
+ - eQMI_LOC_RELIABILITY_VERY_LOW (1) -- Location reliability is very low; use it at your own risk
+ - eQMI_LOC_RELIABILITY_LOW (2) -- Location reliability is low; little or no cross-checking is possible
+ - eQMI_LOC_RELIABILITY_MEDIUM (3) -- Location reliability is medium; limited cross-check passed
+ - eQMI_LOC_RELIABILITY_HIGH (4) -- Location reliability is high; strong cross-check passed
+ */
+
+ /* 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
+ - 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
+ - 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
+ - eQMI_LOC_RELIABILITY_NOT_SET (0) -- Location reliability is not set
+ - eQMI_LOC_RELIABILITY_VERY_LOW (1) -- Location reliability is very low; use it at your own risk
+ - eQMI_LOC_RELIABILITY_LOW (2) -- Location reliability is low; little or no cross-checking is possible
+ - eQMI_LOC_RELIABILITY_MEDIUM (3) -- Location reliability is medium; limited cross-check passed
+ - eQMI_LOC_RELIABILITY_HIGH (4) -- Location reliability is high; strong cross-check passed
+ */
+
+ /* Optional */
+ /* GPS Time */
+ uint8_t gpsTime_valid; /**< Must be set to true if gpsTime is being passed */
+ qmiLocGPSTimeStructT_v02 gpsTime;
+
+ /* 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
+ - eQMI_LOC_TIME_SRC_INVALID (0) -- Invalid time.
+ - eQMI_LOC_TIME_SRC_NETWORK_TIME_TRANSFER (1) -- Time is set by the 1X system
+ - eQMI_LOC_TIME_SRC_NETWORK_TIME_TAGGING (2) -- Time is set by WCDMA/GSM time tagging (that is,
+ associating network time with GPS time)
+ - eQMI_LOC_TIME_SRC_EXTERNAL_INPUT (3) -- Time is set by an external injection
+ - eQMI_LOC_TIME_SRC_TOW_DECODE (4) -- Time is set after decoding over-the-air GPS navigation data
+ from one GPS satellite
+ - eQMI_LOC_TIME_SRC_TOW_CONFIRMED (5) -- Time is set after decoding over-the-air GPS navigation data
+ from multiple satellites
+ - eQMI_LOC_TIME_SRC_TOW_AND_WEEK_CONFIRMED (6) -- Both time of the week and the GPS week number are known
+ - eQMI_LOC_TIME_SRC_NAV_SOLUTION (7) -- Time is set by the position engine after the fix is obtained
+ - eQMI_LOC_TIME_SRC_SOLVE_FOR_TIME (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 (9) -- Time is set after decoding GLO satellites
+ - eQMI_LOC_TIME_SRC_TIME_TRANSFORM (10) -- Time is set after transforming the GPS to GLO time
+ - eQMI_LOC_TIME_SRC_WCDMA_SLEEP_TIME_TAGGING (11) -- Time is set by the sleep time tag provided by the WCDMA network
+ - eQMI_LOC_TIME_SRC_GSM_SLEEP_TIME_TAGGING (12) -- Time is set by the sleep time tag provided by the GSM network
+ - eQMI_LOC_TIME_SRC_UNKNOWN (13) -- Source of the time is unknown
+ - eQMI_LOC_TIME_SRC_SYSTEM_TIMETICK (14) -- Time is derived from the system clock (better known as the slow clock);
+ GNSS time is maintained irrespective of the GNSS receiver state
+ - eQMI_LOC_TIME_SRC_QZSS_TOW_DECODE (15) -- Time is set after decoding QZSS satellites
+ - eQMI_LOC_TIME_SRC_BDS_TOW_DECODE (16) -- Time is set after decoding BDS satellites
+ - eQMI_LOC_TIME_SRC_GAL_TOW_DECODE (17) -- Time is set after decoding GAL satellites
+ */
+}qmiLocGetAvailWwanPositionIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCPREMIUMSERVICEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_PREMIUM_SERVICE_GTP_CELL_V02 = 0, /**< Premium service -- Global terrestrial positioning for the cell */
+ eQMI_LOC_PREMIUM_SERVICE_SAP_V02 = 1, /**< Premium service -- Sensor-assisted positioning */
+ eQMI_LOC_PREMIUM_SERVICE_GTP_ENH_CELL_V02 = 2, /**< Premium service -- Global terrestrial positioning enhanced cell */
+ eQMI_LOC_PREMIUM_SERVICE_GTP_WIFI_V02 = 3, /**< Premium service -- Global terrestrial positioning for the WIFI */
+ QMILOCPREMIUMSERVICEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocPremiumServiceEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCPREMIUMSERVICECFGENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_PREMIUM_SERVICE_DISABLED_V02 = 0, /**< Premium service disabled */
+ eQMI_LOC_PREMIUM_SERVICE_ENABLED_BASIC_V02 = 1, /**< Premium service enabled for basic */
+ eQMI_LOC_PREMIUM_SERVICE_ENABLED_PREMIUM_V02 = 2, /**< Premium service enabled for premium */
+ QMILOCPREMIUMSERVICECFGENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocPremiumServiceCfgEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to set the configuration */
+typedef struct {
+
+ /* Mandatory */
+ /* Set Premium Service Type */
+ qmiLocPremiumServiceEnumT_v02 premiumServiceType;
+ /**< Specifies the premium service to configure.
+
+ Valid values: \n
+ - eQMI_LOC_PREMIUM_SERVICE_GTP_CELL (0) -- Premium service -- Global terrestrial positioning for the cell
+ - eQMI_LOC_PREMIUM_SERVICE_SAP (1) -- Premium service -- Sensor-assisted positioning
+ - eQMI_LOC_PREMIUM_SERVICE_GTP_ENH_CELL (2) -- Premium service -- Global terrestrial positioning enhanced cell
+ - eQMI_LOC_PREMIUM_SERVICE_GTP_WIFI (3) -- Premium service -- Global terrestrial positioning for the WIFI
+ */
+
+ /* Mandatory */
+ /* Set Premium Service Configuration */
+ qmiLocPremiumServiceCfgEnumT_v02 premiumServiceCfg;
+ /**< Specifies the premium service configuration mode.
+
+ Valid values: \n
+ - eQMI_LOC_PREMIUM_SERVICE_DISABLED (0) -- Premium service disabled
+ - eQMI_LOC_PREMIUM_SERVICE_ENABLED_BASIC (1) -- Premium service enabled for basic
+ - eQMI_LOC_PREMIUM_SERVICE_ENABLED_PREMIUM (2) -- Premium service enabled for premium
+ */
+}qmiLocSetPremiumServicesCfgReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to set the configuration */
+typedef struct {
+
+ /* Mandatory */
+ /* Set Premium Service Configuration Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Set Premium Services Configuration request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocSetPremiumServicesCfgIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCXTRAVERSIONCHECKENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_XTRA_VERSION_CHECK_DISABLE_V02 = 0, /**< XTRA file version check is not required */
+ eQMI_LOC_XTRA_VERSION_CHECK_AUTO_V02 = 1, /**< XTRA file version check is required; the Location service decides the 'expected version' based on the preprovisioned XTRA version configuration */
+ eQMI_LOC_XTRA_VERSION_CHECK_XTRA2_V02 = 2, /**< Check the XTRA file against XTRA2 format */
+ eQMI_LOC_XTRA_VERSION_CHECK_XTRA3_V02 = 3, /**< Check the XTRA file against XTRA3 format */
+ eQMI_LOC_XTRA_VERSION_CHECK_XTRA3_1_V02 = 4, /**< Check the XTRA file against XTRA3.1 format */
+ QMILOCXTRAVERSIONCHECKENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocXtraVersionCheckEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to enable or disable XTRA version
+ verification. */
+typedef struct {
+
+ /* Mandatory */
+ /* Set XTRA Version Check Mode */
+ qmiLocXtraVersionCheckEnumT_v02 xtraVersionCheckMode;
+ /**< Specifies XTRA version check mode.
+
+ Valid values: \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_DISABLE (0) -- XTRA file version check is not required
+ - eQMI_LOC_XTRA_VERSION_CHECK_AUTO (1) -- XTRA file version check is required; the Location service decides the 'expected version' based on the preprovisioned XTRA version configuration
+ - eQMI_LOC_XTRA_VERSION_CHECK_XTRA2 (2) -- Check the XTRA file against XTRA2 format
+ - eQMI_LOC_XTRA_VERSION_CHECK_XTRA3 (3) -- Check the XTRA file against XTRA3 format
+ - eQMI_LOC_XTRA_VERSION_CHECK_XTRA3_1 (4) -- Check the XTRA file against XTRA3.1 format
+ */
+}qmiLocSetXtraVersionCheckReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to enable or disable XTRA version
+ verification. */
+typedef struct {
+
+ /* Mandatory */
+ /* Set XTRA Version Check Mode Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Set XTRA version check request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocSetXtraVersionCheckIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint64_t qmiLocGNSSConstellEnumT_v02;
+#define eQMI_SYSTEM_GPS_V02 ((qmiLocGNSSConstellEnumT_v02)0x01ull) /**< Enable GPS \n */
+#define eQMI_SYSTEM_GLO_V02 ((qmiLocGNSSConstellEnumT_v02)0x02ull) /**< Enable GLONASS \n */
+#define eQMI_SYSTEM_BDS_V02 ((qmiLocGNSSConstellEnumT_v02)0x04ull) /**< Enable BDS \n */
+#define eQMI_SYSTEM_GAL_V02 ((qmiLocGNSSConstellEnumT_v02)0x08ull) /**< Enable Galileo */
+#define eQMI_SYSTEM_QZSS_V02 ((qmiLocGNSSConstellEnumT_v02)0x10ull) /**< Enable QZSS */
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Sets satellite constellations of interest for reporting. */
+typedef struct {
+
+ /* Optional */
+ /* GNSS Measurement Report Constellation Control */
+ uint8_t measReportConfig_valid; /**< Must be set to true if measReportConfig is being passed */
+ qmiLocGNSSConstellEnumT_v02 measReportConfig;
+ /**< GNSS measurement report constellation control. \n
+ Valid values: \n
+ - eQMI_SYSTEM_GPS (0x01) -- Enable GPS \n
+ - eQMI_SYSTEM_GLO (0x02) -- Enable GLONASS \n
+ - eQMI_SYSTEM_BDS (0x04) -- Enable BDS \n
+ - eQMI_SYSTEM_GAL (0x08) -- Enable Galileo
+ - eQMI_SYSTEM_QZSS (0x10) -- Enable QZSS
+ */
+
+ /* Optional */
+ /* SV Polynomial Report Constellation Control */
+ uint8_t svPolyReportConfig_valid; /**< Must be set to true if svPolyReportConfig is being passed */
+ qmiLocGNSSConstellEnumT_v02 svPolyReportConfig;
+ /**< SV polynomial report constellation control. \n
+ Valid values: \n
+ - eQMI_SYSTEM_GPS (0x01) -- Enable GPS \n
+ - eQMI_SYSTEM_GLO (0x02) -- Enable GLONASS \n
+ - eQMI_SYSTEM_BDS (0x04) -- Enable BDS \n
+ - eQMI_SYSTEM_GAL (0x08) -- Enable Galileo
+ - eQMI_SYSTEM_QZSS (0x10) -- Enable QZSS
+ */
+}qmiLocSetGNSSConstRepConfigReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Sets satellite constellations of interest for reporting. */
+typedef struct {
+
+ /* Mandatory */
+ /* Set GNSS Constellation Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the GNSS constellation.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocSetGNSSConstRepConfigIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCSOURCEOFFREQENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_FREQ_SOURCE_INVALID_V02 = 0, /**< Source of the frequency is invalid */
+ eQMI_LOC_FREQ_SOURCE_EXTERNAL_V02 = 1, /**< Source of the frequency is from an external injection */
+ eQMI_LOC_FREQ_SOURCE_PE_CLK_REPORT_V02 = 2, /**< Source of the frequency is from the GNSS navigation engine */
+ eQMI_LOC_FREQ_SOURCE_UNKNOWN_V02 = 3, /**< Source of the frequency is unknown */
+ QMILOCSOURCEOFFREQENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSourceofFreqEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ float clockDrift;
+ /**< Receiver clock drift. \n
+ - Units: Meters per second
+ */
+
+ float clockDriftUnc;
+ /**< Receiver clock drift uncertainty. \n
+ - Units: Meters per second
+ */
+
+ qmiLocSourceofFreqEnumT_v02 sourceOfFreq;
+ /**< Source of the clock frequency information.
+
+ Valid values: \n
+ - eQMI_LOC_FREQ_SOURCE_INVALID (0) -- Source of the frequency is invalid
+ - eQMI_LOC_FREQ_SOURCE_EXTERNAL (1) -- Source of the frequency is from an external injection
+ - eQMI_LOC_FREQ_SOURCE_PE_CLK_REPORT (2) -- Source of the frequency is from the GNSS navigation engine
+ - eQMI_LOC_FREQ_SOURCE_UNKNOWN (3) -- Source of the frequency is unknown
+ */
+}qmiLocRcvrClockFrequencyInfoStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint8_t leapSec;
+ /**< GPS time leap second delta to UTC time. \n
+ For nonzero values of leapSecUnc, leapSec must be treated as unknown. \n
+ - Units: Seconds
+ */
+
+ uint8_t leapSecUnc;
+ /**< Uncertainty for the GPS leap second. \n
+ - Units: Seconds
+ */
+}qmiLocLeapSecondInfoStructT_v02; /* Type */
+/**
+ @}
+ */
+
+typedef uint8_t qmiLocInterSystemBiasValidMaskT_v02;
+#define QMI_LOC_SYS_TIME_BIAS_VALID_V02 ((qmiLocInterSystemBiasValidMaskT_v02)0x01) /**< System time bias is valid \n */
+#define QMI_LOC_SYS_TIME_BIAS_UNC_VALID_V02 ((qmiLocInterSystemBiasValidMaskT_v02)0x02) /**< System time bias uncertainty is valid */
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ qmiLocInterSystemBiasValidMaskT_v02 validMask;
+ /**< Fields that are valid. \n
+ Valid values: \n
+ - QMI_LOC_SYS_TIME_BIAS_VALID (0x01) -- System time bias is valid \n
+ - QMI_LOC_SYS_TIME_BIAS_UNC_VALID (0x02) -- System time bias uncertainty is valid \n
+ */
+
+ float timeBias;
+ /**< System 1 to System 2 time bias. \n
+ - Units: Milliseconds
+ */
+
+ float timeBiasUnc;
+ /**< System 1 to System 2 time bias uncertainty. \n
+ - Units: Milliseconds
+ */
+}qmiLocInterSystemBiasStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ qmiLocSvSystemEnumT_v02 system;
+ /**< Specifies the satellite system constellation.
+
+ Valid values: \n
+ - eQMI_LOC_SV_SYSTEM_GPS (1) -- GPS satellite
+ - eQMI_LOC_SV_SYSTEM_GALILEO (2) -- GALILEO satellite
+ - eQMI_LOC_SV_SYSTEM_SBAS (3) -- SBAS satellite
+ - eQMI_LOC_SV_SYSTEM_COMPASS (4) -- COMPASS satellite (Deprecated)
+ - eQMI_LOC_SV_SYSTEM_GLONASS (5) -- GLONASS satellite
+ - eQMI_LOC_SV_SYSTEM_BDS (6) -- BDS satellite
+ - eQMI_LOC_SV_SYSTEM_QZSS (7) -- QZSS satellite
+ */
+
+ uint16_t systemWeek;
+ /**< Current system week. \n
+ - For GPS: Calculated from midnight, Jan. 6, 1980 \n
+ - For BDS: Calculated from 00:00:00 on January 1, 2006 of Coordinated Universal Time (UTC) \n
+ - For GAL: Calculated from 00:00 UT on Sunday August 22, 1999 (midnight between August 21 and August 22) \n
+ If the week is unknown, set this value to 65535. \n
+ - Units: Weeks */
+
+ uint32_t systemMsec;
+ /**< Amount of time into the current week. \n
+ - Units: Milliseconds */
+
+ float systemClkTimeBias;
+ /**< System clock time bias (submilliseconds). \n
+ - Units: Milliseconds
+ (system time = systemMsec - systemClkTimeBias)
+ */
+
+ float systemClkTimeUncMs;
+ /**< Single-sided maximum time bias uncertainty. \n
+ - Units: Milliseconds
+ */
+}qmiLocGnssTimeStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint8_t gloFourYear;
+ /**< GLONASS four year number from 1996. Refer to GLONASS ICD. \n
+ Applicable only for GLONASS and is to be ignored for other constellations. \n
+ If unknown, set this value to 255.
+ */
+
+ uint16_t gloDays;
+ /**< GLONASS day number in four years. Refer to GLONASS ICD. \n
+ Applicable only for GLONASS and is to be ignored for other constellations. \n
+ If unknown, set this value to 65535.
+ */
+
+ uint32_t gloMsec;
+ /**< GLONASS time of day in msec. Refer to GLONASS ICD. \n
+ - Units: Milliseconds
+ */
+
+ float gloClkTimeBias;
+ /**< System clock time bias (submillisecond). \n
+ - Units: Milliseconds
+ (system time = systemMsec - systemClkTimeBias)
+ */
+
+ float gloClkTimeUncMs;
+ /**< Single-sided maximum time bias uncertainty. \n
+ - Units: Milliseconds
+ */
+}qmiLocGloTimeStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint32_t refFCount;
+ /**< Receiver frame counter value at a reference tick. */
+
+ uint8_t systemRtc_valid;
+ /**< Validity indicator for the system RTC. */
+
+ uint64_t systemRtcMs;
+ /**< Platform system RTC value. \n
+ - Units: Milliseconds
+ */
+
+ qmiLocTimeSourceEnumT_v02 sourceOfTime;
+ /**< Source of the time information.
+
+ Valid values: \n
+ - eQMI_LOC_TIME_SRC_INVALID (0) -- Invalid time.
+ - eQMI_LOC_TIME_SRC_NETWORK_TIME_TRANSFER (1) -- Time is set by the 1X system
+ - eQMI_LOC_TIME_SRC_NETWORK_TIME_TAGGING (2) -- Time is set by WCDMA/GSM time tagging (that is,
+ associating network time with GPS time)
+ - eQMI_LOC_TIME_SRC_EXTERNAL_INPUT (3) -- Time is set by an external injection
+ - eQMI_LOC_TIME_SRC_TOW_DECODE (4) -- Time is set after decoding over-the-air GPS navigation data
+ from one GPS satellite
+ - eQMI_LOC_TIME_SRC_TOW_CONFIRMED (5) -- Time is set after decoding over-the-air GPS navigation data
+ from multiple satellites
+ - eQMI_LOC_TIME_SRC_TOW_AND_WEEK_CONFIRMED (6) -- Both time of the week and the GPS week number are known
+ - eQMI_LOC_TIME_SRC_NAV_SOLUTION (7) -- Time is set by the position engine after the fix is obtained
+ - eQMI_LOC_TIME_SRC_SOLVE_FOR_TIME (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 (9) -- Time is set after decoding GLO satellites
+ - eQMI_LOC_TIME_SRC_TIME_TRANSFORM (10) -- Time is set after transforming the GPS to GLO time
+ - eQMI_LOC_TIME_SRC_WCDMA_SLEEP_TIME_TAGGING (11) -- Time is set by the sleep time tag provided by the WCDMA network
+ - eQMI_LOC_TIME_SRC_GSM_SLEEP_TIME_TAGGING (12) -- Time is set by the sleep time tag provided by the GSM network
+ - eQMI_LOC_TIME_SRC_UNKNOWN (13) -- Source of the time is unknown
+ - eQMI_LOC_TIME_SRC_SYSTEM_TIMETICK (14) -- Time is derived from the system clock (better known as the slow clock);
+ GNSS time is maintained irrespective of the GNSS receiver state
+ - eQMI_LOC_TIME_SRC_QZSS_TOW_DECODE (15) -- Time is set after decoding QZSS satellites
+ - eQMI_LOC_TIME_SRC_BDS_TOW_DECODE (16) -- Time is set after decoding BDS satellites
+ - eQMI_LOC_TIME_SRC_GAL_TOW_DECODE (17) -- Time is set after decoding GAL satellites
+ */
+}qmiLocGnssTimeExtStructT_v02; /* Type */
+/**
+ @}
+ */
+
+typedef uint64_t qmiLocSvMeasStatusValidMaskT_v02;
+#define QMI_LOC_MASK_MEAS_STATUS_SM_STAT_BIT_VALID_V02 ((qmiLocSvMeasStatusValidMaskT_v02)0x00000001ull) /**< Satellite time in submilliseconds (code-phase) */
+#define QMI_LOC_MASK_MEAS_STATUS_SB_STAT_BIT_VALID_V02 ((qmiLocSvMeasStatusValidMaskT_v02)0x00000002ull) /**< Satellite sub-bit time */
+#define QMI_LOC_MASK_MEAS_STATUS_MS_STAT_BIT_VALID_V02 ((qmiLocSvMeasStatusValidMaskT_v02)0x00000004ull) /**< Satellite time in milliseconds */
+#define QMI_LOC_MASK_MEAS_STATUS_BE_CONFIRM_STAT_BIT_VALID_V02 ((qmiLocSvMeasStatusValidMaskT_v02)0x00000008ull) /**< Signal bit edge is confirmed */
+#define QMI_LOC_MASK_MEAS_STATUS_VEL_STAT_BIT_VALID_V02 ((qmiLocSvMeasStatusValidMaskT_v02)0x00000010ull) /**< Satellite Doppler is measured */
+#define QMI_LOC_MASK_MEAS_STATUS_VEL_FINE_STAT_BIT_VALID_V02 ((qmiLocSvMeasStatusValidMaskT_v02)0x00000020ull) /**< Fine/coarse Doppler measurement indicator */
+#define QMI_LOC_MASK_MEAS_STATUS_FROM_RNG_DIFF_STAT_BIT_VALID_V02 ((qmiLocSvMeasStatusValidMaskT_v02)0x00000200ull) /**< Range update from satellite differences */
+#define QMI_LOC_MASK_MEAS_STATUS_FROM_VE_DIFF_STAT_BIT_VALID_V02 ((qmiLocSvMeasStatusValidMaskT_v02)0x00000400ull) /**< Doppler update from satellite differences */
+typedef uint64_t qmiLocSvMeasStatusMaskT_v02;
+#define QMI_LOC_MASK_MEAS_STATUS_SM_VALID_V02 ((qmiLocSvMeasStatusMaskT_v02)0x00000001ull) /**< Satellite time in submilliseconds (code phase) is known */
+#define QMI_LOC_MASK_MEAS_STATUS_SB_VALID_V02 ((qmiLocSvMeasStatusMaskT_v02)0x00000002ull) /**< Satellite sub-bit time is known */
+#define QMI_LOC_MASK_MEAS_STATUS_MS_VALID_V02 ((qmiLocSvMeasStatusMaskT_v02)0x00000004ull) /**< Satellite time in milliseconds is known */
+#define QMI_LOC_MASK_MEAS_STATUS_BE_CONFIRM_V02 ((qmiLocSvMeasStatusMaskT_v02)0x00000008ull) /**< Signal bit edge is confirmed */
+#define QMI_LOC_MASK_MEAS_STATUS_VELOCITY_VALID_V02 ((qmiLocSvMeasStatusMaskT_v02)0x00000010ull) /**< Satellite Doppler is measured */
+#define QMI_LOC_MASK_MEAS_STATUS_VELOCITY_FINE_V02 ((qmiLocSvMeasStatusMaskT_v02)0x00000020ull) /**< TRUE: Fine Doppler is measured, FALSE: Coarse Doppler is measured */
+#define QMI_LOC_MASK_MEAS_STATUS_FROM_RNG_DIFF_V02 ((qmiLocSvMeasStatusMaskT_v02)0x00000200ull) /**< Range update from satellite differences is measured */
+#define QMI_LOC_MASK_MEAS_STATUS_FROM_VE_DIFF_V02 ((qmiLocSvMeasStatusMaskT_v02)0x00000400ull) /**< Doppler update from satellite differences is measured} */
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint32_t svTimeMs;
+ /**< Satellite time in milliseconds. \n
+ - For GPS, BDS, GAL, and QZSS -- Range is 0 thru (604800000-1) \n
+ - For GLONASS -- Range is 0 thru (86400000-1) \n
+ - Units: Milliseconds \vspace{4pt}
+
+ This is valid when the QMI_LOC_MEAS_ STATUS_MS_VALID bit is set
+ in the measurement status. \vspace{4pt}
+
+ @note All SV times in the current measurement block are
+ already propagated to a common reference time epoch.
+ */
+
+ float svTimeSubMs;
+ /**< Satellite time in submilliseconds. \n
+ Total SV Time = svMs + svSubMs \n
+ - Units: Milliseconds
+ */
+
+ float svTimeUncMs;
+ /**< Satellite time uncertainty. \n
+ - Units: Milliseconds
+ */
+
+ float dopplerShift;
+ /**< Satellite Doppler. \n
+ - Units: Meters per second
+ */
+
+ float dopplerShiftUnc;
+ /**< Satellite Doppler uncertainty. \n
+ - Units: Meters per second
+ */
+
+ uint8_t dopplerAccel_valid;
+ /**< Validity for Doppler acceleration. */
+
+ float dopplerAccel;
+ /**< Satellite Doppler acceleration. \n
+ - Units: Hz/second
+ */
+}qmiLocSVTimeSpeedStructT_v02; /* Type */
+/**
+ @}
+ */
+
+typedef uint16_t qmiLocMeasFieldsValidMaskT_v02;
+#define QMI_LOC_SV_HEALTH_VALID_V02 ((qmiLocMeasFieldsValidMaskT_v02)0x01) /**< SV health information is valid */
+#define QMI_LOC_SV_MULTIPATH_EST_VALID_V02 ((qmiLocMeasFieldsValidMaskT_v02)0x02) /**< Multipath estimate for SV is valid */
+#define QMI_LOC_SV_FINE_SPEED_VALID_V02 ((qmiLocMeasFieldsValidMaskT_v02)0x04) /**< Fine speed for SV is valid */
+#define QMI_LOC_SV_FINE_SPEED_UNC_VALID_V02 ((qmiLocMeasFieldsValidMaskT_v02)0x08) /**< Fine speed uncertainty for SV is valid */
+#define QMI_LOC_SV_CARRIER_PHASE_VALID_V02 ((qmiLocMeasFieldsValidMaskT_v02)0x10) /**< Carrier phase for SV is valid */
+#define QMI_LOC_SV_SV_DIRECTION_VALID_V02 ((qmiLocMeasFieldsValidMaskT_v02)0x20) /**< SV direction information for SV is valid */
+#define QMI_LOC_SV_CYCLESLIP_COUNT_VALID_V02 ((qmiLocMeasFieldsValidMaskT_v02)0x40) /**< Cycle slip count information is valid */
+#define QMI_LOC_SV_LOSSOFLOCK_VALID_V02 ((qmiLocMeasFieldsValidMaskT_v02)0x80) /**< Loss of lock information is valid */
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint16_t gnssSvId;
+ /**< GNSS SV ID.
+ \begin{itemize1}
+ \item Range: \begin{itemize1}
+ \item For GPS: 1 to 32
+ \item For GLONASS: 65 to 96. When slot-number to SV ID mapping is unknown, set as 255.
+ \item For QZSS: 193 to 197
+ \item For BDS: 201 to 237
+ \item For GAL: 301 to 336
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ uint8_t gloFrequency;
+ /**< GLONASS frequency number + 7. \n
+ Valid only for a GLONASS system and
+ is to be ignored for all other systems. \n
+ - Range: 1 to 14
+ */
+
+ qmiLocSvStatusEnumT_v02 svStatus;
+ /**< Satellite search state.
+
+ Valid values: \n
+ - eQMI_LOC_SV_STATUS_IDLE (1) -- SV is not being actively processed
+ - eQMI_LOC_SV_STATUS_SEARCH (2) -- The system is searching for this SV
+ - eQMI_LOC_SV_STATUS_TRACK (3) -- SV is being tracked
+ */
+
+ qmiLocMeasFieldsValidMaskT_v02 validMask;
+ /**< Validity mask (0 = Not valid; 1 = Valid). \n
+
+ - QMI_LOC_SV_HEALTH_VALID (0x01) -- SV health information is valid
+ - QMI_LOC_SV_MULTIPATH_EST_VALID (0x02) -- Multipath estimate for SV is valid
+ - QMI_LOC_SV_FINE_SPEED_VALID (0x04) -- Fine speed for SV is valid
+ - QMI_LOC_SV_FINE_SPEED_UNC_VALID (0x08) -- Fine speed uncertainty for SV is valid
+ - QMI_LOC_SV_CARRIER_PHASE_VALID (0x10) -- Carrier phase for SV is valid
+ - QMI_LOC_SV_SV_DIRECTION_VALID (0x20) -- SV direction information for SV is valid
+ - QMI_LOC_SV_CYCLESLIP_COUNT_VALID (0x40) -- Cycle slip count information is valid
+ - QMI_LOC_SV_LOSSOFLOCK_VALID (0x80) -- Loss of lock information is valid
+ */
+
+ uint8_t healthStatus;
+ /**< Health status. \n
+ \begin{itemize1}
+ - Range: 0 to 1, where 0 = unhealthy, 1 = healthy
+ */
+
+ qmiLocSvInfoMaskT_v02 svInfoMask;
+ /**< Indicates whether almanac and ephemeris information is available.
+
+ Valid values: \n
+ - QMI_LOC_SVINFO_MASK_HAS_EPHEMERIS (0x01) -- Ephemeris is available for this SV
+ - QMI_LOC_SVINFO_MASK_HAS_ALMANAC (0x02) -- Almanac is available for this SV
+ */
+
+ qmiLocSvMeasStatusValidMaskT_v02 validMeasStatusMask;
+ /**< Validity mask for measurement status information. \n
+ A set bit in validMeasStatusMask indicates that the corresponding bit
+ in measurementStatus has valid status information: \n
+ Valid masks: \n
+ - QMI_LOC_MASK_MEAS_STATUS_SM_STAT_BIT_VALID (0x00000001) -- Satellite time in submilliseconds (code-phase)
+ - QMI_LOC_MASK_MEAS_STATUS_SB_STAT_BIT_VALID (0x00000002) -- Satellite sub-bit time
+ - QMI_LOC_MASK_MEAS_STATUS_MS_STAT_BIT_VALID (0x00000004) -- Satellite time in milliseconds
+ - QMI_LOC_MASK_MEAS_STATUS_BE_CONFIRM_STAT_BIT_VALID (0x00000008) -- Signal bit edge is confirmed
+ - QMI_LOC_MASK_MEAS_STATUS_VEL_STAT_BIT_VALID (0x00000010) -- Satellite Doppler is measured
+ - QMI_LOC_MASK_MEAS_STATUS_VEL_FINE_STAT_BIT_VALID (0x00000020) -- Fine/coarse Doppler measurement indicator
+ - QMI_LOC_MASK_MEAS_STATUS_FROM_RNG_DIFF_STAT_BIT_VALID (0x00000200) -- Range update from satellite differences
+ - QMI_LOC_MASK_MEAS_STATUS_FROM_VE_DIFF_STAT_BIT_VALID (0x00000400) -- Doppler update from satellite differences
+\vspace{4pt}
+ Additionally, MSB 0xFFC0000000000000 bits indicate the validity of DONT_USE bits. \n
+
+ */
+
+ qmiLocSvMeasStatusMaskT_v02 measurementStatus;
+ /**< Bitmask indicating the SV measurement status.
+
+ Valid bitmasks: \n
+ - QMI_LOC_MASK_MEAS_STATUS_SM_VALID (0x00000001) -- Satellite time in submilliseconds (code phase) is known
+ - QMI_LOC_MASK_MEAS_STATUS_SB_VALID (0x00000002) -- Satellite sub-bit time is known
+ - QMI_LOC_MASK_MEAS_STATUS_MS_VALID (0x00000004) -- Satellite time in milliseconds is known
+ - QMI_LOC_MASK_MEAS_STATUS_BE_CONFIRM (0x00000008) -- Signal bit edge is confirmed
+ - QMI_LOC_MASK_MEAS_STATUS_VELOCITY_VALID (0x00000010) -- Satellite Doppler is measured
+ - QMI_LOC_MASK_MEAS_STATUS_VELOCITY_FINE (0x00000020) -- TRUE: Fine Doppler is measured, FALSE: Coarse Doppler is measured
+ - QMI_LOC_MASK_MEAS_STATUS_FROM_RNG_DIFF (0x00000200) -- Range update from satellite differences is measured
+ - QMI_LOC_MASK_MEAS_STATUS_FROM_VE_DIFF (0x00000400) -- Doppler update from satellite differences is measured}
+
+ If any MSB bit in 0xFFC0000000000000 DONT_USE is set, the measurement
+ must not be used by the client.
+ */
+
+ uint16_t CNo;
+ /**< Carrier to noise ratio. \n
+ - Units: dBHz \n
+ - Scale: 0.1
+ */
+
+ uint16_t gloRfLoss;
+ /**< GLONASS RF loss reference to the antenna. \n
+ - Units: dB \n
+ - Scale: 0.1
+ */
+
+ int32_t measLatency;
+ /**< Age of the measurement. A positive value means the measurement precedes the reference time. \n
+ - Units: Milliseconds
+ */
+
+ qmiLocSVTimeSpeedStructT_v02 svTimeSpeed;
+ /**< SV time and speed information. */
+
+ uint8_t lossOfLock;
+ /**< Loss of signal lock indicator. \n
+ - 0: Signal is in continuous track \n
+ - 1: Signal is not in track
+ */
+
+ float multipathEstimate;
+ /**< Estimate of multipath in a measurement. \n
+ - Units: Meters
+ */
+
+ float fineSpeed;
+ /**< Carrier phase derived speed. \n
+ - Units: Meters per second
+ */
+
+ float fineSpeedUnc;
+ /**< Carrier phase derived speed uncertainty. \n
+ - Units: Meters per second
+ */
+
+ double carrierPhase;
+ /**< Carrier phase measurement (L1 cycles).
+ */
+
+ uint8_t cycleSlipCount;
+ /**< Increments when a cycle slip is detected. */
+
+ float svAzimuth;
+ /**< Satellite azimuth. \n
+ - Units: Radians \n
+ - Range: 0 to 2*pi()
+ */
+
+ float svElevation;
+ /**< Satellite elevation. \n
+ - Units: Radians \n
+ - Range: 0 to pi()/2
+ */
+}qmiLocSVMeasurementStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Sends a satellite measurement report to the control point. */
+typedef struct {
+
+ /* Mandatory */
+ /* Current Message Sequence Number */
+ uint8_t seqNum;
+ /**< Current message number. Used for segmentation/assembly of measurement reports. */
+
+ /* Mandatory */
+ /* Maximum Number of Messages to be Sent for Present Time Epoch */
+ uint8_t maxMessageNum;
+ /**< Maximum number of messages that are to be sent for the present time epoch. */
+
+ /* Mandatory */
+ /* Specifies Satellite System Constellation of This Report */
+ qmiLocSvSystemEnumT_v02 system;
+ /**< Specifies the satellite system constellation of this report.
+
+ Valid values: \n
+ - eQMI_LOC_SV_SYSTEM_GPS (1) -- GPS satellite
+ - eQMI_LOC_SV_SYSTEM_GALILEO (2) -- GALILEO satellite
+ - eQMI_LOC_SV_SYSTEM_SBAS (3) -- SBAS satellite
+ - eQMI_LOC_SV_SYSTEM_COMPASS (4) -- COMPASS satellite (Deprecated)
+ - eQMI_LOC_SV_SYSTEM_GLONASS (5) -- GLONASS satellite
+ - eQMI_LOC_SV_SYSTEM_BDS (6) -- BDS satellite
+ - eQMI_LOC_SV_SYSTEM_QZSS (7) -- QZSS satellite
+ */
+
+ /* Optional */
+ /* GNSS Receiver Clock Frequency Information */
+ uint8_t rcvrClockFrequencyInfo_valid; /**< Must be set to true if rcvrClockFrequencyInfo is being passed */
+ qmiLocRcvrClockFrequencyInfoStructT_v02 rcvrClockFrequencyInfo;
+
+ /* Optional */
+ /* Leap Second Information */
+ uint8_t leapSecondInfo_valid; /**< Must be set to true if leapSecondInfo is being passed */
+ qmiLocLeapSecondInfoStructT_v02 leapSecondInfo;
+
+ /* Optional */
+ /* GPS to GLONASS Intersystem Time Bias */
+ uint8_t gpsGloInterSystemBias_valid; /**< Must be set to true if gpsGloInterSystemBias is being passed */
+ qmiLocInterSystemBiasStructT_v02 gpsGloInterSystemBias;
+ /**< \vspace{4pt} \n
+ This is reported if both GPS and GLONASS system
+ information reporting are enabled. \n
+ - System 1: GPS \n
+ - System 2: GLONASS
+ */
+
+ /* Optional */
+ /* GPS to BDS Intersystem Time Bias */
+ uint8_t gpsBdsInterSystemBias_valid; /**< Must be set to true if gpsBdsInterSystemBias is being passed */
+ qmiLocInterSystemBiasStructT_v02 gpsBdsInterSystemBias;
+ /**< \vspace{4pt} \n
+ This is reported if both GPS and BDS system
+ information reporting are enabled. \n
+ - System 1: GPS \n
+ - System 2: BDS
+ */
+
+ /* Optional */
+ /* GPS to GALILEO Intersystem Time Bias */
+ uint8_t gpsGalInterSystemBias_valid; /**< Must be set to true if gpsGalInterSystemBias is being passed */
+ qmiLocInterSystemBiasStructT_v02 gpsGalInterSystemBias;
+ /**< \vspace{4pt} \n
+ This is reported if both GPS and GALILEO system
+ information reporting are enabled. \n
+ - System 1: GPS \n
+ - System 2: GALILEO
+ */
+
+ /* Optional */
+ /* BDS to GLONASS Intersystem Time Bias */
+ uint8_t bdsGloInterSystemBias_valid; /**< Must be set to true if bdsGloInterSystemBias is being passed */
+ qmiLocInterSystemBiasStructT_v02 bdsGloInterSystemBias;
+ /**< \vspace{4pt} \n
+ This is reported if both BDS and GLONASS system
+ information reporting are enabled. \n
+ - System 1: BDS \n
+ - System 2: GLONASS
+ */
+
+ /* Optional */
+ /* GAL to GLONASS Intersystem Time Bias */
+ uint8_t galGloInterSystemBias_valid; /**< Must be set to true if galGloInterSystemBias is being passed */
+ qmiLocInterSystemBiasStructT_v02 galGloInterSystemBias;
+ /**< \vspace{4pt} \n
+ This is reported if both GAL and GLONASS system
+ information reporting are enabled. \n
+ - System 1: GAL \n
+ - System 2: GLONASS
+ */
+
+ /* Optional */
+ /* GAL to BDS Intersystem Time Bias */
+ uint8_t galBdsInterSystemBias_valid; /**< Must be set to true if galBdsInterSystemBias is being passed */
+ qmiLocInterSystemBiasStructT_v02 galBdsInterSystemBias;
+ /**< \vspace{4pt} \n
+ This is reported if both GAL and BDS system
+ information reporting are enabled. \n
+ - System 1: GAL \n
+ - System 2: BDS
+ */
+
+ /* Optional */
+ /* Satellite System Time Information for GPS, BDS, GAL Constellation */
+ uint8_t systemTime_valid; /**< Must be set to true if systemTime is being passed */
+ qmiLocGnssTimeStructT_v02 systemTime;
+
+ /* Optional */
+ /* GLONASS System Time Information */
+ uint8_t gloTime_valid; /**< Must be set to true if gloTime is being passed */
+ qmiLocGloTimeStructT_v02 gloTime;
+
+ /* Optional */
+ /* Extended Time Information */
+ uint8_t systemTimeExt_valid; /**< Must be set to true if systemTimeExt is being passed */
+ qmiLocGnssTimeExtStructT_v02 systemTimeExt;
+
+ /* Optional */
+ /* Satellite System Measurement Report for Enabled Constellation */
+ uint8_t svMeasurement_valid; /**< Must be set to true if svMeasurement is being passed */
+ uint32_t svMeasurement_len; /**< Must be set to # of elements in svMeasurement */
+ qmiLocSVMeasurementStructT_v02 svMeasurement[QMI_LOC_SV_MEAS_LIST_MAX_SIZE_V02];
+
+ /* Optional */
+ /* Extended Time Information - Cumulative number of clock resets */
+ uint8_t numClockResets_valid; /**< Must be set to true if numClockResets is being passed */
+ uint32_t numClockResets;
+ /**< Number of clock reset/discontinuities detected, affecting local HW counter value */
+}qmiLocEventGnssSvMeasInfoIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint16_t qmiLocSvPolyStatusMaskT_v02;
+#define QMI_LOC_SV_POLY_SRC_ALM_CORR_V02 ((qmiLocSvPolyStatusMaskT_v02)0x01) /**< Polynomials based on XTRA */
+#define QMI_LOC_SV_POLY_GLO_STR4_V02 ((qmiLocSvPolyStatusMaskT_v02)0x02) /**< GLONASS string 4 has been received */
+typedef uint16_t qmiLocSvPolyStatusMaskValidityT_v02;
+#define QMI_LOC_SV_POLY_SRC_ALM_CORR_VALID_V02 ((qmiLocSvPolyStatusMaskValidityT_v02)0x01) /**< Validity status for QMI_LOC_SV_POLY_SRC_ALM_CORR */
+#define QMI_LOC_SV_POLY_GLO_STR4_VALID_V02 ((qmiLocSvPolyStatusMaskValidityT_v02)0x02) /**< Validity status for QMI_LOC_SV_POLY_GLO_STR4 */
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Sends a satellite polynomial report to the control point. */
+typedef struct {
+
+ /* Mandatory */
+ /* GNSS SV Polynomial Report */
+ uint16_t gnssSvId;
+ /**< GNSS SV ID. \begin{itemize1}
+ \item Range: \begin{itemize1}
+ \item For GPS: 1 to 32
+ \item For GLONASS: 65 to 96 (when the slot number to SV ID mapping is unknown, set to 255)
+ \item For SBAS: 120 to 158 and 183 to 187
+ \item For QZSS: 193 to 197
+ \item For BDS: 201 to 237
+ \item For GAL: 301 to 336
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* Mandatory */
+ /* Reference Time for Polynomial Calculations */
+ double T0;
+ /**< Reference time for polynomial calculations. \n
+ - GPS, QZSS: Seconds in the week \n
+ - GLO: Full seconds since Jan. 1, 1996 \n
+ - BDS: Full seconds since Jan. 1, 2006 \n
+ - GAL: Calculated from 00:00 UT on Sunday, August 22, 1999 (midnight between August 21 and August 22)
+ */
+
+ /* Mandatory */
+ /* SV Polynomial Validity Status */
+ qmiLocSvPolyStatusMaskValidityT_v02 svPolyFlagValid;
+ /**< Validity mask for bits in svPolyFlags. A set bit in svPolyFlagValid indicates that a
+ corresponding bit in svPolyFlags has valid status information.
+
+ Valid bitmasks: \n
+ - QMI_LOC_SV_POLY_SRC_ALM_CORR_VALID (0x01) -- Validity status for QMI_LOC_SV_POLY_SRC_ALM_CORR
+ - QMI_LOC_SV_POLY_GLO_STR4_VALID (0x02) -- Validity status for QMI_LOC_SV_POLY_GLO_STR4 */
+
+ /* Mandatory */
+ /* SV Polynomial Report Status */
+ qmiLocSvPolyStatusMaskT_v02 svPolyFlags;
+ /**< Flags indicating the status of a polynomial report.
+
+ Valid bitmasks: \n
+ - QMI_LOC_SV_POLY_SRC_ALM_CORR (0x01) -- Polynomials based on XTRA
+ - QMI_LOC_SV_POLY_GLO_STR4 (0x02) -- GLONASS string 4 has been received */
+
+ /* Optional */
+ /* Polynomial Coefficient's 0th Term for X, Y, and Z Coordinates */
+ uint8_t polyCoeffXYZ0_valid; /**< Must be set to true if polyCoeffXYZ0 is being passed */
+ double polyCoeffXYZ0[QMI_LOC_SV_POLY_XYZ_0_TH_ORDER_COEFF_SIZE_V02];
+ /**< Polynomial coefficient's 0th term for X, Y, and Z coordinates (C0X, C0Y, C0Z). \n
+ - Units: Meters
+ */
+
+ /* Optional */
+ /* Polynomial Coefficient's 1st, 2nd, and 3rd Terms for X, Y, and Z Coordinates */
+ uint8_t polyCoefXYZN_valid; /**< Must be set to true if polyCoefXYZN is being passed */
+ double polyCoefXYZN[QMI_LOC_SV_POLY_XYZ_N_TH_ORDER_COEFF_SIZE_V02];
+ /**< Polynomial coefficient's 1st, 2nd, and 3rd terms for X, Y, and Z coordinates (C1X, C2X,... C2Z, C3Z). \begin{itemize1}
+ \item Units: \begin{itemize1}
+ \item 1st term -- Meters/second
+ \item 2nd term -- Meters/second^2
+ \item 3rd term -- Meters/seconds^3 \vspace{-0.18in} \end{itemize1} end{itemize1}
+ */
+
+ /* Optional */
+ /* Polynomial Coefficients for Satellite Clock Bias Correction */
+ uint8_t polyCoefClockBias_valid; /**< Must be set to true if polyCoefClockBias is being passed */
+ float polyCoefClockBias[QMI_LOC_SV_POLY_SV_CLKBIAS_COEFF_SIZE_V02];
+ /**< Polynomial coefficients for satellite clock bias correction (C0T, C1T, C2T, C3T). \begin{itemize1}
+ \item Units: \begin{itemize1}
+ \item 0th term -- Milliseconds/second
+ \item 1st term -- Milliseconds/second^2
+ \item 2nd term -- Milliseconds/second^3
+ \item 3rd term -- Milliseconds/second^4 \vspace{-0.18in} \end{itemize1} end{itemize1}
+ */
+
+ /* Optional */
+ /* GLONASS Frequency Number */
+ uint8_t gloFrequency_valid; /**< Must be set to true if gloFrequency is being passed */
+ uint8_t gloFrequency;
+ /**< GLONASS frequency number + 7. \n
+ Valid only for GLONASS systems and
+ must be ignored for all other systems. \n
+ - Range: 1 to 14
+ */
+
+ /* Optional */
+ /* Ephemeris Reference Time */
+ uint8_t IODE_valid; /**< Must be set to true if IODE is being passed */
+ uint16_t IODE;
+ /**< Ephemeris reference time. \n
+ - GPS -- Issue of data ephemeris used (unitless) \n
+ - GLONASS -- Tb 7-bit \n
+ - Galileo -- 10-bit
+ */
+
+ /* Optional */
+ /* Enhanced Reference Time */
+ uint8_t enhancedIOD_valid; /**< Must be set to true if enhancedIOD is being passed */
+ uint32_t enhancedIOD;
+ /**< For BDS ephemeris, this is TOE.
+ */
+
+ /* Optional */
+ /* SV Position Uncertainty */
+ uint8_t svPosUnc_valid; /**< Must be set to true if svPosUnc is being passed */
+ float svPosUnc;
+ /**< SV position uncertainty. \n
+ - Units: Meters
+ */
+
+ /* Optional */
+ /* Iono Delay */
+ uint8_t ionoDelay_valid; /**< Must be set to true if ionoDelay is being passed */
+ float ionoDelay;
+ /**< Ionospheric delay at T0. \n
+ - Units: Meters
+ */
+
+ /* Optional */
+ /* Iono Delay Rate */
+ uint8_t ionoDot_valid; /**< Must be set to true if ionoDot is being passed */
+ float ionoDot;
+ /**< Ionospheric delay rate. \n
+ - Units: Meters/second
+ */
+
+ /* Optional */
+ /* SBAS Iono Delay */
+ uint8_t sbasIonoDelay_valid; /**< Must be set to true if sbasIonoDelay is being passed */
+ float sbasIonoDelay;
+ /**< SBAS ionospheric delay at T0. \n
+ - Units: Meters
+ */
+
+ /* Optional */
+ /* SBAS Iono Delay Rate */
+ uint8_t sbasIonoDot_valid; /**< Must be set to true if sbasIonoDot is being passed */
+ float sbasIonoDot;
+ /**< SBAS ionospheric delay rate. \n
+ - Units: Meters/second
+ */
+
+ /* Optional */
+ /* Tropospheric Delay */
+ uint8_t tropoDelay_valid; /**< Must be set to true if tropoDelay is being passed */
+ float tropoDelay;
+ /**< Tropospheric delay. \n
+ - Units: Meters
+ */
+
+ /* Optional */
+ /* Satellite Elevation */
+ uint8_t elevation_valid; /**< Must be set to true if elevation is being passed */
+ float elevation;
+ /**< Satellite elevation at T0. \n
+ - Units: Radians
+ */
+
+ /* Optional */
+ /* Satellite Elevation Rate */
+ uint8_t elevationDot_valid; /**< Must be set to true if elevationDot is being passed */
+ float elevationDot;
+ /**< Satellite elevation rate. \n
+ - Units: Radians/second
+ */
+
+ /* Optional */
+ /* Satellite Elevation Uncertainty */
+ uint8_t elenationUnc_valid; /**< Must be set to true if elenationUnc is being passed */
+ float elenationUnc;
+ /**< SV elevation uncertainty. \n
+ - Units: Radians
+ */
+
+ /* Optional */
+ /* Polynomial Coefficients for SV Velocity */
+ uint8_t velCoef_valid; /**< Must be set to true if velCoef is being passed */
+ double velCoef[QMI_LOC_SV_POLY_VELOCITY_COEF_SIZE_V02];
+ /**< Polynomial coefficients for SV velocity (C0X, C1X, C2X, C3X,... C2Z, C3Z). \begin{itemize1}
+ \item Units: \begin{itemize1}
+ \item 0th term -- Meters/second
+ \item 1st term -- Meters/second^2
+ \item 2nd term -- Meters/second^3
+ \item 3rd term -- Meters/second^4 \vspace{-0.18in} \end{itemize1} end{itemize1}
+ */
+}qmiLocEventGnssSvPolyIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint8_t wifiApMacAddress[QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02];
+ /**< MAC address of the Wi-Fi AP. */
+}qmiLocWifiApMacAddressStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ char uuid[QMI_LOC_MAX_IBEACON_UUID_STR_LENGTH_V02 + 1];
+ /**< NULL-terminated IBeacon identifier string; a 128-bit value. */
+
+ uint32_t majorNumber;
+ /**< IBeacon major number.*/
+
+ uint32_t minorNumber;
+ /**< IBeacon minor number.*/
+}qmiLocIBeaconIdStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to inject the Geofence context. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID
+ is returned in the Add Geofence Context indication. */
+
+ /* Optional */
+ /* Geofence ID */
+ uint8_t geofenceId_valid; /**< Must be set to true if geofenceId is being passed */
+ uint32_t geofenceId;
+ /**< Geofence identifier allocated by the engine. \n
+ If the Geofence ID is not provided, a Geofence is created with an Area ID
+ list only (e.g., Wi-Fi only list Geofence). \n
+ If the Geofence ID is provided, the added list is used as assistance data
+ to the existing Geofence. */
+
+ /* Optional */
+ /* Wi-Fi AP SSID String */
+ uint8_t wifiApSsidInfo_valid; /**< Must be set to true if wifiApSsidInfo is being passed */
+ uint32_t wifiApSsidInfo_len; /**< Must be set to # of elements in wifiApSsidInfo */
+ qmiLocWifiApSsidStructT_v02 wifiApSsidInfo[QMI_LOC_WIFI_AREA_ID_LIST_LENGTH_V02];
+ /**< \vspace{4pt} \n The ordering of the Wi-Fi AP SSID list should match the Wi-Fi AP MAC address
+ list when both are provided,
+ that is, the first element of the Wi-Fi AP SSID list must be the SSID of the AP whose MAC
+ address is in the first element in the Wi-Fi AP MAC address, etc. */
+
+ /* Optional */
+ /* Wi-Fi AP MAC Address List for the Geofence */
+ uint8_t wifiApMacAddressList_valid; /**< Must be set to true if wifiApMacAddressList is being passed */
+ uint32_t wifiApMacAddressList_len; /**< Must be set to # of elements in wifiApMacAddressList */
+ qmiLocWifiApMacAddressStructT_v02 wifiApMacAddressList[QMI_LOC_WIFI_AREA_ID_LIST_LENGTH_V02];
+ /**< The ordering of the Wi-Fi AP SSID list should match the Wi-Fi AP MAC address
+ list when both are provided,
+ that is, the first element of the Wi-Fi AP SSID list must be the SSID of the AP whose MAC
+ address is in the first element in the Wi-Fi AP MAC address, etc. */
+
+ /* Optional */
+ /* TDSCDMA Cell ID List for the Geofence */
+ uint8_t tdsCdmaCellIDList_valid; /**< Must be set to true if tdsCdmaCellIDList is being passed */
+ qmiLocTDSCDMACellIdStructT_v02 tdsCdmaCellIDList[QMI_LOC_CELL_ID_LIST_LENGTH_V02];
+ /**< \n Identifies the TDSCDMA cell on which the device is currently camped. */
+
+ /* Optional */
+ /* WCDMA Cell ID List for the Geofence */
+ uint8_t wcdmaCellIDList_valid; /**< Must be set to true if wcdmaCellIDList is being passed */
+ uint32_t wcdmaCellIDList_len; /**< Must be set to # of elements in wcdmaCellIDList */
+ qmiLocWCDMACellIdStructT_v02 wcdmaCellIDList[QMI_LOC_CELL_ID_LIST_LENGTH_V02];
+ /**< \vspace{4pt} \n Identifies the WCDMA cell on which the device is currently camped. */
+
+ /* Optional */
+ /* GSM Cell ID List for the Geofence */
+ uint8_t gsmCellIDList_valid; /**< Must be set to true if gsmCellIDList is being passed */
+ uint32_t gsmCellIDList_len; /**< Must be set to # of elements in gsmCellIDList */
+ qmiLocGSMCellIdStructT_v02 gsmCellIDList[QMI_LOC_CELL_ID_LIST_LENGTH_V02];
+ /**< \n Identifies the GSM cell on which the device is currently camped. */
+
+ /* Optional */
+ /* IBeacon List of the Geofence */
+ uint8_t iBeaconList_valid; /**< Must be set to true if iBeaconList is being passed */
+ uint32_t iBeaconList_len; /**< Must be set to # of elements in iBeaconList */
+ qmiLocIBeaconIdStructT_v02 iBeaconList[QMI_LOC_IBEACON_LIST_LENGTH_V02];
+}qmiLocAddGeofenceContextReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to inject the Geofence context. */
+typedef struct {
+
+ /* Mandatory */
+ /* Status of the Add Geofence Context Request */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Add Geofence Context request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Add Geofence Context
+ request. This parameter is always present
+ if the status field is set to SUCCESS. */
+
+ /* Optional */
+ /* Geofence ID */
+ uint8_t geofenceId_valid; /**< Must be set to true if geofenceId is being passed */
+ uint32_t geofenceId;
+ /**< Geofence identifier allocated by the engine. \n
+ If the client specifies the Geofence ID during the Add Geofence Context request,
+ the same ID is returned. \n
+ If the client does not specify the Geofence ID during the Add Geofence Context request,
+ a new Geofence ID is created by the Geofence engine and returned. */
+
+ /* Optional */
+ /* Context ID */
+ uint8_t contextId_valid; /**< Must be set to true if contextId is being passed */
+ uint32_t contextId;
+ /**< Geofence context ID allocated by the engine.
+ The context ID is generated by the Geofence engine to identify the context
+ for a particular Geofence ID.
+ The same Geofence ID may be associated with multiple contexts. */
+}qmiLocAddGeofenceContextIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to inject the Geofence engine context. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID
+ is returned in the Set Geofence Engine Context indication. */
+
+ /* Optional */
+ /* UTC Timestamp of the Day */
+ uint8_t utcTimeOfDay_valid; /**< Must be set to true if utcTimeOfDay is being passed */
+ uint64_t utcTimeOfDay;
+ /**< The UTC time of the day. */
+
+ /* Optional */
+ /* Temperature of the Day in Fahrenheit */
+ uint8_t temperature_valid; /**< Must be set to true if temperature is being passed */
+ int32_t temperature;
+ /**< The temperature of the day in degrees Fahrenheit. */
+}qmiLocSetGeofenceEngineContextReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to inject the Geofence engine context. */
+typedef struct {
+
+ /* Mandatory */
+ /* Status of the Set Geofence Engine Context Request */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Set Geofence Engine Context request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Set Geofence Engine Context
+ request. This parameter will always be present
+ if the status field is set to SUCCESS. */
+}qmiLocSetGeofenceEngineContextIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to delete the Geofence context. */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The transaction ID
+ is returned in the Delete Geofence Context indication. */
+
+ /* Mandatory */
+ /* Geofence ID */
+ uint32_t geofenceId;
+ /**< Identifies the Geofence whose context is to be deleted. */
+
+ /* Optional */
+ /* Context ID */
+ uint8_t contextId_valid; /**< Must be set to true if contextId is being passed */
+ uint32_t contextId;
+ /**< Identifies the context associated with the Geofence to be deleted.
+ If not specified, all contexts associated with this Geofence are deleted. */
+}qmiLocDeleteGeofenceContextReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to delete the Geofence context. */
+typedef struct {
+
+ /* Mandatory */
+ /* Status of the Delete Geofence Context Request */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Delete Geofence Context request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Transaction ID that was specified in the Delete Geofence Context request.
+ This parameter will always be present
+ if the status field is set to SUCCESS. */
+
+ /* Optional */
+ /* Geofence ID */
+ uint8_t geofenceId_valid; /**< Must be set to true if geofenceId is being passed */
+ uint32_t geofenceId;
+ /**< Identifier for the Geofence whose context was deleted. */
+
+ /* Optional */
+ /* Context ID */
+ uint8_t contextId_valid; /**< Must be set to true if contextId is being passed */
+ uint32_t contextId;
+ /**< Identifier for the context of the Geofence that was deleted. */
+}qmiLocDeleteGeofenceContextIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects Global Terrestrial Positioning (GTP) WWAN client downloaded data. */
+typedef struct {
+
+ /* Mandatory */
+ /* Data */
+ uint32_t ClientDownloadedData_len; /**< Must be set to # of elements in ClientDownloadedData */
+ char ClientDownloadedData[QMI_LOC_MAX_GTP_WWAN_CLIENT_DOWNLOADED_DATA_LEN_V02];
+ /**< WWAN client downloaded data. \n
+ - Type: Array of bytes \n
+ - Maximum length of the array: 512
+ */
+}qmiLocInjectGtpClientDownloadedDataReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects Global Terrestrial Positioning (GTP) WWAN client downloaded data. */
+typedef struct {
+
+ /* Mandatory */
+ /* GTP Client Downloaded Data Injection Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the GTP client downloaded data injection.
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocInjectGtpClientDownloadedDataIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Sends a GDT upload begin response to GDT MP. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Service ID */
+ qmiLocGdtServiceIdEnumT_v02 serviceId;
+ /**< Values: \n
+ - eQMI_LOC_GDT_SERVICE_WWAN (1) -- GDT service for WWAN UL
+ - eQMI_LOC_GDT_SERVICE_WWAN_DL (2) -- GDT service for WWAN DL */
+
+ /* Mandatory */
+ /* Session ID */
+ uint32_t sessionId;
+ /**< Session ID. */
+
+ /* Mandatory */
+ /* Access Status to GDT */
+ qmiLocGdtAccessStatusEnumT_v02 gdtAccessStatus;
+ /**< GDT status information for this service ID.
+
+ Values: \n
+ - eQMI_LOC_GDT_ACCESS_ALLOWED (1) -- GDT access to the service is allowed
+ - eQMI_LOC_GDT_ACCESS_FAILED (2) -- Any type of GDT access error
+ - eQMI_LOC_GDT_ACCESS_NOT_ALLOWED (3) -- GDT access to the service is not allowed
+ */
+}qmiLocGdtUploadBeginStatusReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Sends a GDT upload begin response to GDT MP. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Upload Begin Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the GDT begin request.
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocGdtUploadBeginStatusIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGDTENDACKENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GDT_ACK_SUCCESS_V02 = 1, /**< The sent data is accepeted */
+ eQMI_LOC_GDT_ACK_FAILED_V02 = 2, /**< The sent data was not accepted */
+ eQMI_LOC_GDT_ACK_INVALID_V02 = 3, /**< General error in the received data */
+ QMILOCGDTENDACKENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGdtEndAckEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Sends a GDT upload end response to GDT MP. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Service ID */
+ qmiLocGdtServiceIdEnumT_v02 serviceId;
+ /**< Values: \n
+
+ - eQMI_LOC_GDT_SERVICE_WWAN (1) -- GDT service for WWAN UL
+ - eQMI_LOC_GDT_SERVICE_WWAN_DL (2) -- GDT service for WWAN DL */
+
+ /* Mandatory */
+ /* Session ID */
+ uint32_t sessionId;
+ /**< Session ID. */
+
+ /* Mandatory */
+ /* Access Status to GDT */
+ qmiLocGdtEndAckEnumT_v02 gdtEndStatus;
+ /**< GDT end status information for this service ID.
+
+ Valid values: \n
+ - eQMI_LOC_GDT_ACK_SUCCESS (1) -- The sent data is accepeted
+ - eQMI_LOC_GDT_ACK_FAILED (2) -- The sent data was not accepted
+ - eQMI_LOC_GDT_ACK_INVALID (3) -- General error in the received data
+ */
+}qmiLocGdtUploadEndReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Sends a GDT upload end response to GDT MP. */
+typedef struct {
+
+ /* Mandatory */
+ /* UTC GDT Upload End Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the GDT upload end request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocGdtUploadEndIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGTPAPSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GTP_AP_STATUS_DB_READY_V02 = 1, /**< Indicates that the AP is initialized and ready to process MP download requests */
+ eQMI_LOC_GTP_AP_STATUS_DB_REFRESHED_V02 = 2, /**< Indicates that the AP has successfully refreshed partitions */
+ eQMI_LOC_GTP_AP_STATUS_DB_DELETED_V02 = 3, /**< Indicates that the AP has removed local partitions */
+ QMILOCGTPAPSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGtpApStatusEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Sends a Global Terrestrial Position (GTP) message to the MP
+ notifying the GTP MP of AP DB readiness. */
+typedef struct {
+
+ /* Mandatory */
+ /* AP DB Status */
+ qmiLocGtpApStatusEnumT_v02 gtpApDbStatus;
+ /**< GTP AP DB status information.
+
+ Valid values: \n
+ - eQMI_LOC_GTP_AP_STATUS_DB_READY (1) -- Indicates that the AP is initialized and ready to process MP download requests
+ - eQMI_LOC_GTP_AP_STATUS_DB_REFRESHED (2) -- Indicates that the AP has successfully refreshed partitions
+ - eQMI_LOC_GTP_AP_STATUS_DB_DELETED (3) -- Indicates that the AP has removed local partitions
+ */
+
+ /* Optional */
+ /* AP PCID (8 byte) */
+ uint8_t gtpApPcid64_valid; /**< Must be set to true if gtpApPcid64 is being passed */
+ uint64_t gtpApPcid64;
+ /**< AP pseudoclient ID. */
+
+ /* Optional */
+ /* OEM ID (non-NULL Terminated) */
+ uint8_t oemId_valid; /**< Must be set to true if oemId is being passed */
+ uint32_t oemId_len; /**< Must be set to # of elements in oemId */
+ char oemId[QMI_LOC_MAX_OEM_ID_LEN_V02];
+ /**< OEM ID. \n
+ - Type: character string \n
+ - Maximum length of the array: 256
+ */
+
+ /* Optional */
+ /* Model ID (non-NULL Terminated) */
+ uint8_t modelId_valid; /**< Must be set to true if modelId is being passed */
+ uint32_t modelId_len; /**< Must be set to # of elements in modelId */
+ char modelId[QMI_LOC_MAX_MODEL_ID_LEN_V02];
+ /**< Model ID. \n
+ - Type: character string \n
+ - Maximum length of the array: 256
+ */
+}qmiLocGtpApStatusReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint8_t asnMajorVersion;
+ /**< ASN major version. */
+
+ uint8_t asnMinorVersion;
+ /**< ASN minor version. */
+
+ uint8_t asnPointVersion;
+ /**< ASN point version. */
+}qmiLocGtpAsnVerStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Sends a Global Terrestrial Position (GTP) message to the MP
+ notifying the GTP MP of AP DB readiness. */
+typedef struct {
+
+ /* Mandatory */
+ /* GTP MP Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the GTP handshake.
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Mandatory */
+ /* MP Client Software Version */
+ uint16_t clientSoftwareVersion;
+ /**< MP client software version. */
+
+ /* Mandatory */
+ /* MP ASN Version */
+ qmiLocGtpAsnVerStructT_v02 asnVersion;
+}qmiLocGtpApStatusIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCGTPPROCESSSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_GTP_PROCESS_SUCCESS_FROM_LOCAL_V02 = 1, /**< DL processing is processed successfully locally */
+ eQMI_LOC_GTP_PROCESS_SUCCESS_FROM_SERVER_V02 = 2, /**< DL processing is processed successfully via server access */
+ eQMI_LOC_GTP_PROCESS_NOT_ALLOWED_AP_NOT_READY_V02 = 3, /**< DL processing is not allowed because the AP is not ready */
+ eQMI_LOC_GTP_PROCESS_NOT_ALLOWED_AP_TIMEOUT_V02 = 4, /**< DL processing is not allowed because the AP cannot process within the given interval */
+ eQMI_LOC_GTP_PROCESS_NOT_ALLOWED_NO_CONNECTIVITY_V02 = 5, /**< DL processing via server is not allowed since AP has no connectivity but
+ will be processed locally */
+ eQMI_LOC_GTP_PROCESS_NOT_ALLOWED_THROTTLED_V02 = 6, /**< DL processing via server is not allowed due to throttling but will be
+ processed locally */
+ eQMI_LOC_GTP_PROCESS_NOT_ALLOWED_OTHER_V02 = 7, /**< DL processing via server is not allowed for any other reason but will be
+ processed locally */
+ eQMI_LOC_GTP_PROCESS_FAILED_UNSPECIFIED_V02 = 8, /**< DL processing failed for any other reason */
+ QMILOCGTPPROCESSSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocGtpProcessStatusEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Sends a GTP message to MP notifying MP of AP download response. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Service ID */
+ qmiLocGdtServiceIdEnumT_v02 serviceId;
+ /**< Values: \n
+
+ - eQMI_LOC_GDT_SERVICE_WWAN (1) -- GDT service for WWAN UL
+ - eQMI_LOC_GDT_SERVICE_WWAN_DL (2) -- GDT service for WWAN DL */
+
+ /* Mandatory */
+ /* Session ID */
+ uint32_t sessionId;
+ /**< Session ID. */
+
+ /* Mandatory */
+ /* AP Process Status */
+ qmiLocGtpProcessStatusEnumT_v02 processingStatus;
+ /**< AP processing status information for this service ID.
+
+ Valid values: \n
+ - eQMI_LOC_GTP_PROCESS_SUCCESS_FROM_LOCAL (1) -- DL processing is processed successfully locally
+ - eQMI_LOC_GTP_PROCESS_SUCCESS_FROM_SERVER (2) -- DL processing is processed successfully via server access
+ - eQMI_LOC_GTP_PROCESS_NOT_ALLOWED_AP_NOT_READY (3) -- DL processing is not allowed because the AP is not ready
+ - eQMI_LOC_GTP_PROCESS_NOT_ALLOWED_AP_TIMEOUT (4) -- DL processing is not allowed because the AP cannot process within the given interval
+ - eQMI_LOC_GTP_PROCESS_NOT_ALLOWED_NO_CONNECTIVITY (5) -- DL processing via server is not allowed since AP has no connectivity but
+ will be processed locally
+ - eQMI_LOC_GTP_PROCESS_NOT_ALLOWED_THROTTLED (6) -- DL processing via server is not allowed due to throttling but will be
+ processed locally
+ - eQMI_LOC_GTP_PROCESS_NOT_ALLOWED_OTHER (7) -- DL processing via server is not allowed for any other reason but will be
+ processed locally
+ - eQMI_LOC_GTP_PROCESS_FAILED_UNSPECIFIED (8) -- DL processing failed for any other reason
+ */
+
+ /* Optional */
+ /* WWAN Download Flag */
+ uint8_t wwanDownloadFlag_valid; /**< Must be set to true if wwanDownloadFlag is being passed */
+ uint16_t wwanDownloadFlag;
+ /**< WWAN download flag. */
+
+ /* Optional */
+ /* Encoded Response Location Information */
+ uint8_t respLocInfo_valid; /**< Must be set to true if respLocInfo is being passed */
+ uint32_t respLocInfo_len; /**< Must be set to # of elements in respLocInfo */
+ uint8_t respLocInfo[QMI_LOC_MAX_GTP_RLI_LEN_V02];
+ /**< Response location information encoded in asn.1 format. \n
+ - Type: Array of bytes \n
+ - Maximum length of the array: 256
+ */
+
+ /* Optional */
+ /* AP Remaining Throttle Time */
+ uint8_t apRemainingThrottleTime_valid; /**< Must be set to true if apRemainingThrottleTime is being passed */
+ uint32_t apRemainingThrottleTime;
+ /**< Remaining time in seconds during which AP will remain throttled for server access. */
+}qmiLocGdtDownloadBeginStatusReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Sends a GTP message to MP notifying MP of AP download response. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Download Begin Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the GDT begin request.
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocGdtDownloadBeginStatusIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Sends a GTP message to the MP notifying it of data readiness. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Service ID */
+ qmiLocGdtServiceIdEnumT_v02 serviceId;
+ /**< Values: \n
+
+ - eQMI_LOC_GDT_SERVICE_WWAN (1) -- GDT service for WWAN UL
+ - eQMI_LOC_GDT_SERVICE_WWAN_DL (2) -- GDT service for WWAN DL */
+
+ /* Mandatory */
+ /* Session ID */
+ uint32_t sessionId;
+ /**< Session ID. */
+
+ /* Mandatory */
+ /* Processing Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the AP processing request.
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Mandatory */
+ /* Data File Path (NULL Terminated) */
+ uint32_t filePath_len; /**< Must be set to # of elements in filePath */
+ char filePath[QMI_LOC_MAX_GDT_PATH_LEN_V02];
+ /**< File path to the data. \n
+ - Type: Array of bytes \n
+ - Maximum length of the array: 255
+ */
+}qmiLocGdtDownloadReadyStatusReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Sends a GTP message to the MP notifying it of data readiness. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Ready Begin Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the GDT ready request.
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocGdtDownloadReadyStatusIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Acknowledges receipt of Receive Done to the GDT MP. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Service ID */
+ qmiLocGdtServiceIdEnumT_v02 serviceId;
+ /**< Values: \n
+
+ - eQMI_LOC_GDT_SERVICE_WWAN (1) -- GDT service for WWAN UL
+ - eQMI_LOC_GDT_SERVICE_WWAN_DL (2) -- GDT service for WWAN DL */
+
+ /* Mandatory */
+ /* Session ID */
+ uint32_t sessionId;
+ /**< Session ID. */
+
+ /* Mandatory */
+ /* QMI LOC Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Values: \n
+
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocGdtReceiveDoneStatusReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Acknowledges receipt of Receive Done to the GDT MP. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Receive Done Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Receive Done request.
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocGdtReceiveDoneStatusIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Acknowledges the receipt of download completion to the GDT MP. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Service ID */
+ qmiLocGdtServiceIdEnumT_v02 serviceId;
+ /**< Values: \n
+
+ - eQMI_LOC_GDT_SERVICE_WWAN (1) -- GDT service for WWAN UL
+ - eQMI_LOC_GDT_SERVICE_WWAN_DL (2) -- GDT service for WWAN DL */
+
+ /* Mandatory */
+ /* Session ID */
+ uint32_t sessionId;
+ /**< Session ID. */
+
+ /* Mandatory */
+ /* QMI LOC Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Values: \n
+
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocGdtDownloadEndStatusReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Acknowledges the receipt of download completion to the GDT MP. */
+typedef struct {
+
+ /* Mandatory */
+ /* GDT Download End Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the GDT download end request.
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocGdtDownloadEndStatusIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCDBTUSAGEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_DBT_USAGE_NAVIGATION_V02 = 1, /**< Navigation usage type */
+ QMILOCDBTUSAGEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocDbtUsageEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCDBDISTANCETYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_DBT_DISTANCE_TYPE_STRAIGHT_LINE_V02 = 1, /**< Straight line distance between
+ location updates */
+ QMILOCDBDISTANCETYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocDbDistanceTypeEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to initiate a Distance Based Tracking (DBT) session. */
+typedef struct {
+
+ /* Mandatory */
+ /* Request ID */
+ uint8_t reqId;
+ /**< ID of the request as identified by the control point. The request ID
+ is reported back in the position reports. The control point must
+ specify the same request ID in the QMI_LOC_STOP_DBT_REQ message. \n
+ - Range: 0 to 255
+ */
+
+ /* Mandatory */
+ /* Minimum Distance Between Position Reports */
+ uint32_t minDistance;
+ /**< Minimum distance, specified by the control point,
+ that must be traversed between position reports. \n
+ - Units: Meters
+ */
+
+ /* Mandatory */
+ /* Type of Distance to be Tracked */
+ qmiLocDbDistanceTypeEnumT_v02 distanceType;
+ /**< Straight line distance or accumulated distance. \n
+
+ Valid values: \n
+ - eQMI_LOC_DBT_DISTANCE_TYPE_STRAIGHT_LINE (1) -- Straight line distance between
+ location updates
+ */
+
+ /* Mandatory */
+ /* Need Origin Location */
+ uint8_t needOriginLocation;
+ /**< Indicates whether the control point wants the position
+ corresponding to the origin. \begin{itemize1}
+ \item 0x01 (TRUE) -- Control point is requesting origin
+ location
+ \item 0x00 (FALSE) -- Control point is not requesting origin
+ location
+ \vspace{-0.18in} \end{itemize1}
+ */
+
+ /* Optional */
+ /* Maximum Latency Threshold for Position Reports */
+ uint8_t maxLatency_valid; /**< Must be set to true if maxLatency is being passed */
+ uint32_t maxLatency;
+ /**< Maximum time period, specified by the control point, after the minimum
+ distance criteria has been met within which a location update must
+ be provided. If not specified, an ideal value will be assumed by the
+ engine \n
+ - Units: seconds
+ */
+
+ /* Optional */
+ /* Usage Type */
+ uint8_t usageType_valid; /**< Must be set to true if usageType is being passed */
+ qmiLocDbtUsageEnumT_v02 usageType;
+ /**< Specifies the type of usage by the control point. It refers specifically
+ to the use case category of the client. For example, a navigation client should
+ set this to QMI_LOC_USAGE_NAVIGATION for better performance in difficult
+ signal conditions, such as tunnels.
+
+ If not specified, the service uses default algorithms to provide an ideal
+ performance.
+
+ Valid values: \n
+ - eQMI_LOC_DBT_USAGE_NAVIGATION (1) -- Navigation usage type
+ */
+}qmiLocStartDbtReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to initiate a Distance Based Tracking (DBT) session. */
+typedef struct {
+
+ /* Mandatory */
+ /* Start DBT Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Start DBT request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Request ID */
+ uint8_t reqId_valid; /**< Must be set to true if reqId is being passed */
+ uint8_t reqId;
+ /**< ID of the DBT start request for which this
+ indication was generated. */
+}qmiLocStartDbtIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to stop a DBT session. */
+typedef struct {
+
+ /* Mandatory */
+ /* Request ID */
+ uint8_t reqId;
+ /**< ID of the request that was specified in the Start DBT
+ request (QMI_LOC_START_DBT_REQ).\n
+ - Range: 0 to 255 */
+}qmiLocStopDbtReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to stop a DBT session. */
+typedef struct {
+
+ /* Mandatory */
+ /* Stop DBT Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Stop DBT request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Request ID */
+ uint8_t reqId_valid; /**< Must be set to true if reqId is being passed */
+ uint8_t reqId;
+ /**< ID of the DBT stop request for which this
+ indication was generated. */
+}qmiLocStopDbtIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCDBTPOSITIONTYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_DBT_POSITION_TYPE_ORIGIN_V02 = 1, /**< Position reported is at the origin */
+ eQMI_LOC_DBT_POSITION_TYPE_TRACKING_V02 = 2, /**< Position reported is a tracking type
+ where the origin location has already
+ been reported */
+ QMILOCDBTPOSITIONTYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocDbtPositionTypeEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ /* UTC Timestamp */
+ uint64_t timestampUtc;
+ /**< UTC timestamp. \n
+ - Units: Milliseconds since Jan. 1, 1970
+ */
+
+ /* Latitude */
+ double latitude;
+ /**< Latitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -90.0 to 90.0 \begin{itemize1}
+ \item Positive values indicate northern latitude
+ \item Negative values indicate southern latitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* Longitude */
+ double longitude;
+ /**< Longitude (specified in WGS84 datum).
+ \begin{itemize1}
+ \item Type: Floating point
+ \item Units: Degrees
+ \item Range: -180.0 to 180.0 \begin{itemize1}
+ \item Positive values indicate eastern longitude
+ \item Negative values indicate western longitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+
+ /* Horizontal Elliptical Uncertainty (Semi-Minor Axis) */
+ float horUncEllipseSemiMinor;
+ /**< Semi-minor axis of horizontal elliptical uncertainty.\n
+ - Units: Meters */
+
+ /* Horizontal Elliptical Uncertainty (Semi-Major Axis) */
+ float horUncEllipseSemiMajor;
+ /**< Semi-major axis of horizontal elliptical uncertainty.\n
+ - Units: Meters */
+
+ /* Elliptical Horizontal Uncertainty Azimuth */
+ float horUncEllipseOrientAzimuth;
+ /**< Elliptical horizontal uncertainty azimuth of orientation.\n
+ - Units: Decimal degrees \n
+ - Range: 0 to 180 */
+
+ /* Horizontal Speed Validity Bit */
+ uint8_t speedHorizontal_valid;
+ /**< Indicates whether the horizontal speed field contains valid
+ information. \n
+ - 0x01 (TRUE) -- Horizontal speed is valid \n
+ - 0x00 (FALSE) -- Horizontal speed is invalid
+ and is to be ignored \vspace{-0.18in}
+ */
+
+ /* Horizontal Speed */
+ float speedHorizontal;
+ /**< Horizontal speed.\n
+ - Units: Meters/second */
+
+ /* Altitude Validity Bit */
+ uint8_t altitudeWrtEllipsoid_valid;
+ /**< Indicates whether the altitude field contains valid
+ information. \n
+ - 0x01 (TRUE) -- Altitude field is valid \n
+ - 0x00 (FALSE) -- Altitude field is invalid
+ and is to be ignored \vspace{-0.18in}
+ */
+
+ /* Altitude With Respect to Ellipsoid */
+ float altitudeWrtEllipsoid;
+ /**< Altitude with respect to the WGS84 ellipsoid.\n
+ - Units: Meters \n
+ - Range: -500 to 15883 */
+
+ /* Vertical Uncertainty Validity Bit */
+ uint8_t vertUnc_valid;
+ /**< Indicates whether the vertical uncertainty field contains valid
+ information. \n
+ - 0x01 (TRUE) -- Vertical Uncertainty field is valid \n
+ - 0x00 (FALSE) -- Vertical Uncertainty field is invalid
+ and is to be ignored \vspace{-0.18in}
+ */
+
+ /* Vertical Uncertainty */
+ float vertUnc;
+ /**< Vertical uncertainty.\n
+ - Units: Meters */
+
+ /* Vertical Speed Validity Bit */
+ uint8_t speedVertical_valid;
+ /**< Indicates whether the vertical speed field contains valid
+ information. \n
+ - 0x01 (TRUE) -- Vertical Speed field is valid \n
+ - 0x00 (FALSE) -- Vertical Speed field is invalid
+ and is to be ignored \vspace{-0.18in}
+ */
+
+ /* Vertical Speed */
+ float speedVertical;
+ /**< Vertical speed.\n
+ - Units: Meters/second */
+
+ /* Heading Validity Bit */
+ uint8_t heading_valid;
+ /**< Indicates whether the heading field contains valid
+ information. \n
+ - 0x01 (TRUE) -- Heading field is valid \n
+ - 0x00 (FALSE) -- Heading field is invalid
+ and is to be ignored \vspace{-0.18in}
+ */
+
+ /* Heading */
+ float heading;
+ /**< Heading.\n
+ - Units: Degrees \n
+ - Range: 0 to 359.999 */
+}qmiLocDbtPositionStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the control point of
+ a DBT position report. */
+typedef struct {
+
+ /* Mandatory */
+ /* Request ID */
+ uint8_t reqId;
+ /**< ID of the DBT request for which this
+ report was generated. */
+
+ /* Mandatory */
+ /* DBT Position */
+ qmiLocDbtPositionStructT_v02 dbtPosition;
+ /**< Position of the client when it has traversed the
+ specified distance.
+ */
+
+ /* Mandatory */
+ /* DBT Position Type */
+ qmiLocDbtPositionTypeEnumT_v02 positionType;
+ /**< Specifies whether the position reported is at the
+ origin of the DBT session or during the tracking
+ duration of the session. Values: \n
+
+ - eQMI_LOC_DBT_POSITION_TYPE_ORIGIN (1) -- Position reported is at the origin
+ - eQMI_LOC_DBT_POSITION_TYPE_TRACKING (2) -- Position reported is a tracking type
+ where the origin location has already
+ been reported */
+
+ /* Optional */
+ /* Heading Uncertainty */
+ uint8_t headingUnc_valid; /**< Must be set to true if headingUnc is being passed */
+ float headingUnc;
+ /**< Heading uncertainty.\n
+ - Units: Degrees \n
+ - Range: 0 to 359.999 */
+
+ /* Optional */
+ /* Speed Uncertainty */
+ uint8_t speedUnc_valid; /**< Must be set to true if speedUnc is being passed */
+ float speedUnc;
+ /**< 3-D speed uncertainty.\n
+ - Units: Meters/second */
+
+ /* Optional */
+ /* Horizontal Confidence */
+ uint8_t horConfidence_valid; /**< Must be set to true if horConfidence is being passed */
+ uint8_t horConfidence;
+ /**< Horizontal uncertainty confidence.\n
+ - Units: Percent \n
+ - Range: 0 to 99 */
+
+ /* Optional */
+ /* Vertical Confidence */
+ uint8_t vertConfidence_valid; /**< Must be set to true if vertConfidence is being passed */
+ uint8_t vertConfidence;
+ /**< Vertical uncertainty confidence.\n
+ - Units: Percent \n
+ - Range: 0 to 99 */
+
+ /* Optional */
+ /* Dilution of Precision */
+ uint8_t DOP_valid; /**< Must be set to true if DOP is being passed */
+ qmiLocDOPStructT_v02 DOP;
+ /**< \vspace{0.06in} \n Dilution of precision associated with this position. */
+
+ /* Optional */
+ /* SVs Used to Calculate the Fix */
+ uint8_t gnssSvUsedList_valid; /**< Must be set to true if gnssSvUsedList is being passed */
+ uint32_t gnssSvUsedList_len; /**< Must be set to # of elements in gnssSvUsedList */
+ uint16_t gnssSvUsedList[QMI_LOC_MAX_SV_USED_LIST_LENGTH_V02];
+ /**< Each entry in the list contains the SV ID of a satellite
+ used for calculating this position report. The following
+ information is associated with each SV ID: \n
+ Range: \n
+ - For GPS: 1 to 32 \n
+ - For GLONASS: 65 to 96 \n
+ - For SBAS: 120 to 158 and 183 to 187 \n
+ - For QZSS: 193 to 197 \n
+ - For BDS: 201 to 237 \n
+ - For GAL: 301 to 336
+ */
+
+ /* Optional */
+ /* Position Source */
+ uint8_t positionSrc_valid; /**< Must be set to true if positionSrc is being passed */
+ qmiLocPositionSrcEnumT_v02 positionSrc;
+ /**< Source from which this position was obtained.
+ Valid values: \n
+ - eQMI_LOC_POSITION_SRC_GNSS (0) -- Position source is GNSS
+ - eQMI_LOC_POSITION_SRC_CELLID (1) -- Position source is Cell ID
+ - eQMI_LOC_POSITION_SRC_ENH_CELLID (2) -- Position source is Enhanced Cell ID
+ - eQMI_LOC_POSITION_SRC_WIFI (3) -- Position source is Wi-Fi
+ - eQMI_LOC_POSITION_SRC_TERRESTRIAL (4) -- Position source is Terrestrial
+ - eQMI_LOC_POSITION_SRC_GNSS_TERRESTRIAL_HYBRID (5) -- Position source is GNSS Terrestrial Hybrid
+ - eQMI_LOC_POSITION_SRC_OTHER (6) -- Other sources
+ */
+}qmiLocEventDbtPositionReportIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCDBTSESSIONSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_DBT_UNABLE_TO_TRACK_V02 = 1, /**< Distance based tracking is unavailable and DBT fixes
+ cannot currently be obtained */
+ eQMI_LOC_DBT_ABLE_TO_TRACK_V02 = 2, /**< Distance based tracking is available and DBT fixes
+ can currently be obtained */
+ QMILOCDBTSESSIONSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocDbtSessionStatusEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the control point of the
+ DBT session status. */
+typedef struct {
+
+ /* Mandatory */
+ /* DBT Session Status */
+ qmiLocDbtSessionStatusEnumT_v02 dbtSessionStatus;
+ /**< Specifies the DBT session status type.
+
+ Valid values: \n
+ - eQMI_LOC_DBT_UNABLE_TO_TRACK (1) -- Distance based tracking is unavailable and DBT fixes
+ cannot currently be obtained
+ - eQMI_LOC_DBT_ABLE_TO_TRACK (2) -- Distance based tracking is available and DBT fixes
+ can currently be obtained
+ */
+
+ /* Optional */
+ /* Request ID */
+ uint8_t reqId_valid; /**< Must be set to true if reqId is being passed */
+ uint8_t reqId;
+ /**< ID of the DBT request for which this
+ status was generated. */
+}qmiLocEventDbtSessionStatusIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCPOSITIONSOURCEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_POS_SRC_GNSS_V02 = 1, /**< Source of the position is GNSS */
+ QMILOCPOSITIONSOURCEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocPositionSourceEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCPOSITIONRPTPROPAGATIONENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_POS_REPORT_PROPAGATED_TO_CURRENT_UTC_V02 = 1, /**< Reported position is propagated to the current UTC */
+ QMILOCPOSITIONRPTPROPAGATIONENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocPositionRptPropagationEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCSECURELOCDATAMODEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_SECURE_LOC_DATA_ENCRYPTED_V02 = 1, /**< Data in the indication is to be encrypted */
+ eQMI_LOC_SECURE_LOC_DATA_UNENCRYPTED_V02 = 2, /**< Data in the indication is to be unencrypted */
+ QMILOCSECURELOCDATAMODEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSecureLocDataModeEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCSECUREGETAVAILABLEPOSPARAMETERIDENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_PARAM_TRANSACTION_ID_V02 = 1, /**< Parameter ID for the Transaction ID field. Mandatory field.
+ Identifies the transaction. The transaction ID is returned in the
+ Secured Get Available Position indication. \n
+ - Parameter type: uint32
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_PARAM_NONCE_V02 = 2, /**< Parameter ID for the Nonce field. Optional field.
+ - Parameter type: uint64
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_PARAM_SOURCE_V02 = 3, /**< Parameter ID for the Position Source field. Optional field.
+ Specifies the source of the position in which the control point is interest.
+ If not included, the value defaults to GNSS. \n
+ - Parameter type: int32 \n
+ Parameter valid values: \n
+ - eQMI_LOC_POS_SRC_GNSS (1) -- Source of the position is GNSS
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_PARAM_REPORT_DATA_SECURITY_MODE_V02 = 4, /**< Secured position report data security mode. Optional field.
+ If this TLV is not sent, the position report is encrypted by default. \n
+ - Parameter type: int32 \n
+ Parameter valid values: \n
+ - eQMI_LOC_SECURE_LOC_DATA_ENCRYPTED (1) -- Position reports are encrypted
+ - eQMI_LOC_SECURE_LOC_DATA_UNENCRYPTED (2) -- Position reports are not encrypted
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_PARAM_REPORT_DATA_TIME_PROPAGATION_V02 = 5, /**< Secured position report data propagation. Optional field.
+ If this TLV is not sent, the position report is propagated to the current UTC time by default. \n
+ - Parameter type: int32 \n
+ Parameter valid values: \n
+ - eQMI_LOC_POS_REPORT_PROPAGATED_TO_CURRENT_UTC (1) -- Position reports are propagated to the current UTC. \n
+ */
+ QMILOCSECUREGETAVAILABLEPOSPARAMETERIDENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSecureGetAvailablePosParameterIDEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCSECUREMESSAGEDATATYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_SECURE_DATA_TYPE_BYTE_8_V02 = 1, /**< Data type: Byte (8 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_CHAR_8_V02 = 2, /**< Data type: Char (8 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_UNSIGNED_CHAR_8_V02 = 3, /**< Data type: Unsigned char (8 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_INT_8_V02 = 4, /**< Data type: Int (8 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_UNSIGNED_INT_8_V02 = 5, /**< Data type: Unsigned int (8 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_INT_16_V02 = 6, /**< Data type: Int (16 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_UNSIGNED_INT_16_V02 = 7, /**< Data type: Unsigned int (16 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_INT_32_V02 = 8, /**< Data type: Int (32 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_UNSIGNED_INT_32_V02 = 9, /**< Data type: Unsigned int (32 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_INT_64_V02 = 10, /**< Data type: Int (64 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_UNSIGNED_INT_64_V02 = 11, /**< Data type: Unsigned int (64 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_BOOL_8_V02 = 12, /**< Data type: Boolean (8 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_DOUBLE_64_V02 = 13, /**< Data type: Double (64 bits) */
+ eQMI_LOC_SECURE_DATA_TYPE_FLOAT_32_V02 = 14, /**< Data type: Float (32 bits) */
+ QMILOCSECUREMESSAGEDATATYPEENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSecureMessageDataTypeEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to get the available
+ position estimate from the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Data Security Mode for Encoded Data Buffer */
+ qmiLocSecureLocDataModeEnumT_v02 secureLocDataMode;
+ /**< Data security mode for the encoded data buffer.
+
+ Valid values: \n
+ - eQMI_LOC_SECURE_LOC_DATA_ENCRYPTED (1) -- Data in the indication is to be encrypted
+ - eQMI_LOC_SECURE_LOC_DATA_UNENCRYPTED (2) -- Data in the indication is to be unencrypted
+ */
+
+ /* Mandatory */
+ /* Encoded Data Buffer Containing Secure Get Available Position Request Parameters */
+ uint32_t qmilocSecureGetAvailablePositionRequestData_len; /**< Must be set to # of elements in qmilocSecureGetAvailablePositionRequestData */
+ uint8_t qmilocSecureGetAvailablePositionRequestData[QMI_LOC_SECURE_GET_AVAILABLE_POS_REQUEST_ENCRYPTED_MAX_V02];
+ /**< Encoded data buffer containing the secure Get Available Position Request parameters. */
+}qmiLocSecureGetAvailablePositionReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCSECUREGETAVAILABLEPOSITIONINDPARAMIDENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_TRANSACTION_ID_V02 = 1, /**< Parameter ID for the Transaction ID field. Mandatory field.
+ Transaction ID that was specified in the Secured Get Available Position request.
+ This parameter is always present if the status field is set to SUCCESS. \n
+ - Parameter type: uint32
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_NONCE_V02 = 2, /**< Parameter ID for the Secure Session Nonce.
+ This echos back the Nonce received from the Secured Get Available Position Request.
+ Optional field. \n
+ - Parameter type: uint64
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_LATITUDE_V02 = 3, /**< Parameter ID for Latitude (specified in WGS84 datum). Optional field.
+ \begin{itemize1}
+ \item Parameter type: Floating point
+ \item Parameter units: Degrees
+ \item Parameter range: -90.0 to 90.0 \begin{itemize1}
+ \item Positive values indicate northern latitude
+ \item Negative values indicate southern latitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_LONGITUDE_V02 = 4, /**< Parameter ID for Longitude (specified in WGS84 datum). Optional field.
+ \begin{itemize1}
+ \item Parameter type: Floating point
+ \item Parameter units: Degrees
+ \item Parameter range: -180.0 to 180.0 \begin{itemize1}
+ \item Positive values indicate eastern longitude
+ \item Negative values indicate western longitude
+ \vspace{-0.18in} \end{itemize1} \end{itemize1} */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_HORIZ_UNC_CIRCULAR_V02 = 5, /**< Parameter ID for Circular Horizontal Uncertainty. Optional field. \n
+ - Parameter tnits: Meters \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_ALTITUDE_WRT_ELP_V02 = 6, /**< Parameter ID for altitude with respect to the WGS84 ellipsoid. Optional field. \n
+ - Parameter units: Meters \n
+ - Parameter range: -500 to 15883 \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_VERTICAL_UNC_V02 = 7, /**< Parameter ID for Vertical Uncertainty. Optional field.\n
+ - Parameter units: Meters \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_TIME_STAMP_UTC_V02 = 8, /**< Parameter ID for the UTC timestamp. Optional field.\n
+ - Parameter type: uint64 \n
+ - Parameter units: Milliseconds since Jan. 1, 1970
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_TIME_UNC_V02 = 9, /**< Parameter ID for time uncertainty. Optional field.\n
+ - Parameter type: Float \n
+ - Parameter units: Milliseconds */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_HORIZ_UNC_ELP_SEMIMINOR_V02 = 10, /**< Parameter ID for the Semi-Minor Axis of Horizontal Elliptical Uncertainty. Optional field.\n
+ - Parameter mnits: Meters \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_HORIZ_UNC_ELP_SEMIMAJOR_V02 = 11, /**< Parameter ID for the Semi-Major Axis of Horizontal Elliptical Uncertainty. Optional field.\n
+ - Parameter units: Meters \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_HORIZ_UNC_ELP_ORIENT_AZIMUTH_V02 = 12, /**< Parameter ID for the Elliptical Horizontal Uncertainty Azimuth of orientation. Optional field.\n
+ - Parameter units: Decimal degrees \n
+ - Parameter range: 0 to 180 \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_HORIZ_CONFIDENCE_V02 = 13, /**< Parameter ID for Horizontal uncertainty confidence. Optional field.\n
+ If both elliptical and horizontal uncertainties are specified in this message,
+ the confidence corresponds to the elliptical uncertainty. Optional field.\n
+ - Parameter units: Percent \n
+ - Parameter range: 0 to 99 \n
+ - Parameter type: uint8 */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_HORIZ_ELLIP_CONFIDENCE_V02 = 14, /**< Parameter ID for Horizontal Elliptical Uncertainty Confidence. Optional field.\n
+ If both elliptical and horizontal uncertainties are specified in this message,
+ the confidence corresponds to the elliptical uncertainty. Optional field.\n
+ - Parameter units: Percent \n
+ - Parameter range: 0 to 99 \n
+ - Parameter type: uint8 */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_HORIZ_RELIABILITY_V02 = 15, /**< Parameter ID for Specifies the reliability of the horizontal position. Optional field.
+ - Parameter Type: int32 \n
+ Parameter valid values: \n
+ - RELIABILITY_NOT_SET = 0 \n
+ - RELIABILITY_VERY_LOW = 1 \n
+ - RELIABILITY_LOW = 2 \n
+ - RELIABILITY_MEDIUM = 3 \n
+ - RELIABILITY_HIGH = 4
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_SPEED_HORIZ_V02 = 16, /**< Parameter ID for Horizontal Speed. Optional field.\n
+ - Parameter units: Meters/second \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_SPEED_HORIZ_UNC_V02 = 17, /**< Parameter ID for Horizontal Speed Uncertainty. Optional field.\n
+ - Parameter units: Meters/second \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_ALTITUDE_WRT_MSA_V02 = 18, /**< Parameter ID for Altitude with respect to mean sea level. Optional field.\n
+ - Parameter units: Meters \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_VERTICAL_CONF_V02 = 19, /**< Parameter ID for Vertical uncertainty confidence. Optional field.\n
+ - Parameter units: Percent \n
+ - Parameter range: 0 to 99 \n
+ - Parameter type: uint8 */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_VERT_RELIABILITY_V02 = 20, /**< Parameter ID for specifies the reliability of the vertical position. Optional field. \n
+ - Parameter type: int32 \n
+ Parameter valid values: \n
+ - RELIABILITY_NOT_SET = 0 \n
+ - RELIABILITY_VERY_LOW = 1 \n
+ - RELIABILITY_LOW = 2 \n
+ - RELIABILITY_MEDIUM = 3 \n
+ - RELIABILITY_HIGH = 4
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_SPEED_VERTICAL_V02 = 21, /**< Parameter ID for Vertical Speed. Optional field.\n
+ - Parameter units: Meters/second \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_SPEED_VERTICAL_UNC_V02 = 22, /**< Parameter ID for Vertical Speed Uncertainty. Optional field.\n
+ - Parameter units: Meters/second \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_HEADING_V02 = 23, /**< Parameter ID for Heading. Optional field.\n
+ - Parameter units: Degrees \n
+ - Parameter range: 0 to 359.999 \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_HEADING_UNC_V02 = 24, /**< Parameter ID for Heading Uncertainty. Optional field.\n
+ - Parameter units: Degrees \n
+ - Parameter range: 0 to 359.999 \n
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_MAGNETIC_DEVIATION_V02 = 25, /**< Parameter ID for Magnetic Deviation. Optional field.\n
+ 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.
+ - Parameter type: Float */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_TECH_MASK_V02 = 26, /**< Parameter ID for Technology Used in computing this fix. Optional field.\n
+ - Parameter type: uint32 \n
+ Parameter valid bitmasks: \n
+ - QMI_LOC_POS_TECH_MASK_SATELLITE = 0x00000001,
+ - QMI_LOC_POS_TECH_MASK_CELLID = 0x00000002,
+ - QMI_LOC_POS_TECH_MASK_WIFI = 0x00000004,
+ - QMI_LOC_POS_TECH_MASK_SENSORS = 0x00000008,
+ - QMI_LOC_POS_TECH_MASK_REFERENCE_LOCATION = 0x00000010,
+ - QMI_LOC_POS_TECH_MASK_INJECTED_COARSE_POSITION = 0x00000020,
+ - QMI_LOC_POS_TECH_MASK_AFLT = 0x00000040,
+ - QMI_LOC_POS_TECH_MASK_HYBRID = 0x00000080
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_PDOP_V02 = 27, /**< Parameter ID for Position Dilution of Precision associated with this position. Optional field.\n
+ - Parameter type: Float
+ - Parameter range: 1 (highest accuracy) to 50 (lowest accuracy)
+ - PDOP = square root of (HDOP^2 + VDOP^2)
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_HDOP_V02 = 28, /**< Parameter ID for Horizontal Dilution of Precision associated with this position. Optional field.\n
+ - Parameter type: Float
+ - Parameter range: 1 (highest accuracy) to 50 (lowest accuracy)
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_VDOP_V02 = 29, /**< Parameter ID for Vertical Dilution of Precision associated with this position. Optional field.\n
+ - Parameter type: Float
+ - Parameter range: 1 (highest accuracy) to 50 (lowest accuracy)
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_GPS_WEEK_V02 = 30, /**< Parameter ID for the current GPS Week, as calculated from midnight, Jan. 6, 1980. Optional field.\n
+ - Parameter type: uint16
+ - Parameter units: Weeks
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_GPS_TIMEOFWEEKMS_V02 = 31, /**< Parameter ID for amount of time into the current GPS Week. Optional field.\n
+ - Parameter type: uint32
+ - Parameter units: Milliseconds
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_TIME_SRC_V02 = 32, /**< Parameter ID for Time Source. Optional field.\n
+ - Parameter type: uint32 (enum qmiLocTimeSourceEnumT)
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_SENSOR_USAGE_MASK_V02 = 33, /**< Parameter ID that specifies which sensors were used in calculating the position in the
+ position report. Optional field.\n
+ - Parameter type: uint32 \n
+ Parameter valid bitmasks: \n
+ - 0x00000001 -- SENSOR_USED_ACCEL \n
+ - 0x00000002 -- SENSOR_USED_GYRO
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_AIDING_IND_MASK_V02 = 34, /**< Parameter ID that specifies which which results were aided by sensors. Optional field.\n
+ - Parameter type: uint32 \n
+ Parameter valid bitmasks: \n
+ - 0x00000001 -- AIDED_HEADING \n
+ - 0x00000002 -- AIDED_SPEED \n
+ - 0x00000004 -- AIDED_POSITION \n
+ - 0x00000008 -- AIDED_VELOCITY
+ */
+ eQMI_LOC_SECURE_GET_AVAILABLE_POS_REP_PARAM_SV_USED_V02 = 35, /**< Each entry in the list contains the SV ID of a satellite
+ used for calculating this position report. The following
+ information is associated with each SV ID. Optional field. \n
+ - Parameter type: uint16 \n
+ Parameter range: \n
+ - For GPS: 1 to 32 \n
+ - For SBAS: 33 to 64 \n
+ - For GLONASS: 65 to 96 \n
+ - For QZSS: 193 to 197 \n
+ - For BDS: 201 to 237
+ */
+ QMILOCSECUREGETAVAILABLEPOSITIONINDPARAMIDENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSecureGetAvailablePositionIndParamIDEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to get the available
+ position estimate from the location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Session Status */
+ qmiLocSessionStatusEnumT_v02 sessionStatus;
+ /**< Session status.
+
+ Valid values: \n
+ - eQMI_LOC_SESS_STATUS_SUCCESS (0) -- Session was successful
+ - eQMI_LOC_SESS_STATUS_IN_PROGRESS (1) -- Session is 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 (2) -- Session failed
+ - eQMI_LOC_SESS_STATUS_TIMEOUT (3) -- Fix request failed because the session timed out
+ - eQMI_LOC_SESS_STATUS_USER_END (4) -- Fix request failed because the session was ended by the user
+ - eQMI_LOC_SESS_STATUS_BAD_PARAMETER (5) -- Fix request failed due to bad parameters in the request
+ - eQMI_LOC_SESS_STATUS_PHONE_OFFLINE (6) -- Fix request failed because the phone is offline
+ - eQMI_LOC_SESS_STATUS_ENGINE_LOCKED (7) -- Fix request failed because the engine is locked
+ */
+
+ /* Mandatory */
+ /* Data Security Mode for Encoded Data Buffer. */
+ qmiLocSecureLocDataModeEnumT_v02 secureLocDataMode;
+ /**< Data security mode for encoded data buffer.
+
+ Valid values: \n
+ - eQMI_LOC_SECURE_LOC_DATA_ENCRYPTED (1) -- Data in the indication is to be encrypted
+ - eQMI_LOC_SECURE_LOC_DATA_UNENCRYPTED (2) -- Data in the indication is to be unencrypted
+ */
+
+ /* Optional */
+ /* Encoded Data Buffer Containing Secured Get Available Position Report Indication */
+ uint8_t qmilocSecureGetAvailablePositionInd_valid; /**< Must be set to true if qmilocSecureGetAvailablePositionInd is being passed */
+ uint32_t qmilocSecureGetAvailablePositionInd_len; /**< Must be set to # of elements in qmilocSecureGetAvailablePositionInd */
+ uint8_t qmilocSecureGetAvailablePositionInd[QMI_LOC_SECURE_GET_AVAILABLE_POSITION_IND_ENCRYPTED_MAX_V02];
+ /**< Encoded data buffer containing the secured Get Available Position Report indication.*/
+}qmiLocSecureGetAvailablePositionIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCAPRELIABILITYENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_AP_RELIABILITY_NOT_SET_V02 = 0, /**< AP Location reliability is not set */
+ eQMI_LOC_AP_RELIABILITY_LEVEL_1_V02 = 1, /**< AP Location reliability level 1 */
+ eQMI_LOC_AP_RELIABILITY_LEVEL_2_V02 = 2, /**< AP Location reliability level 2 */
+ eQMI_LOC_AP_RELIABILITY_LEVEL_3_V02 = 3, /**< AP Location reliability level 3 */
+ eQMI_LOC_AP_RELIABILITY_LEVEL_4_V02 = 4, /**< AP Location reliability level 4 */
+ eQMI_LOC_AP_RELIABILITY_LEVEL_5_V02 = 5, /**< AP Location reliability level 5 */
+ eQMI_LOC_AP_RELIABILITY_LEVEL_6_V02 = 6, /**< AP Location reliability level 6 */
+ eQMI_LOC_AP_RELIABILITY_LEVEL_7_V02 = 7, /**< AP Location reliability level 7 */
+ QMILOCAPRELIABILITYENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocApReliabilityEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint64_t macAddress;
+ /**< AP MAC address. */
+
+ float xLat;
+ /**< AP latitude. \n
+ - Units: degrees */
+
+ float yLon;
+ /**< AP longitude sensor y-axis sample. \n
+ - Units: degrees */
+
+ float mar;
+ /**< Maximum antenna range. \n
+ - Units: Meters */
+}qmiLocApCacheStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint8_t hepeValid;
+ /**< Indicates whether hepe data is available or not:
+ 0x00 (FALSE) -- Ignore hepe data of this AP.
+ 0x01 (TRUE) -- hepe data of this AP is available. */
+
+ uint16_t hepe;
+ /**< Horizontal Estimated Position Error
+ - Units: Meters */
+
+ qmiLocApReliabilityEnumT_v02 apReliability;
+ /**< Specifies the reliability of the AP position.
+ The lowest is eQMI_LOC_AP_RELIABILITY_LEVEL_1, and the highest is eQMI_LOC_AP_RELIABILITY_LEVEL_7,
+ The AP reliability increases as the level increases.
+ Valid values: \n
+ - eQMI_LOC_AP_RELIABILITY_NOT_SET (0) -- AP Location reliability is not set
+ - eQMI_LOC_AP_RELIABILITY_LEVEL_1 (1) -- AP Location reliability level 1
+ - eQMI_LOC_AP_RELIABILITY_LEVEL_2 (2) -- AP Location reliability level 2
+ - eQMI_LOC_AP_RELIABILITY_LEVEL_3 (3) -- AP Location reliability level 3
+ - eQMI_LOC_AP_RELIABILITY_LEVEL_4 (4) -- AP Location reliability level 4
+ - eQMI_LOC_AP_RELIABILITY_LEVEL_5 (5) -- AP Location reliability level 5
+ - eQMI_LOC_AP_RELIABILITY_LEVEL_6 (6) -- AP Location reliability level 6
+ - eQMI_LOC_AP_RELIABILITY_LEVEL_7 (7) -- AP Location reliability level 7
+ */
+}qmiLocApCacheHepeRelStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to inject APs into the cache of
+ the low power Wi-Fi engine for fix computation. */
+typedef struct {
+
+ /* Mandatory */
+ /* Version Number */
+ uint8_t versionNumber;
+ /**< AP cache protocol version number. */
+
+ /* Mandatory */
+ /* Part Number */
+ uint8_t partNumber;
+ /**< Multiple message part number; used for ordering AP information. */
+
+ /* Mandatory */
+ /* Total Parts */
+ uint8_t totalParts;
+ /**< Total number of parts or messages for a complete cache update. */
+
+ /* Mandatory */
+ /* AP Cache Data */
+ uint32_t apCacheData_len; /**< Must be set to # of elements in apCacheData */
+ qmiLocApCacheStructT_v02 apCacheData[QMI_LOC_APCACHE_DATA_MAX_SAMPLES_V02];
+ /**< \vspace{4pt} \n AP cache information. */
+
+ /* Optional */
+ /* AP Cache Hepe Data */
+ uint8_t apCacheHepeRelData_valid; /**< Must be set to true if apCacheHepeRelData is being passed */
+ uint32_t apCacheHepeRelData_len; /**< Must be set to # of elements in apCacheHepeRelData */
+ qmiLocApCacheHepeRelStructT_v02 apCacheHepeRelData[QMI_LOC_APCACHE_DATA_MAX_SAMPLES_V02];
+ /**< \vspace{4pt} \n
+ The ordering of apCacheHepeRelData list should match the apCacheData list.
+ That is, the first element of the apCacheHepeRelData must be the cache hepe data of the AP
+ whose cache data is the first element in the apCacheData, and so on. */
+}qmiLocInjectApCacheDataReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to inject APs into the cache of
+ the low power Wi-Fi engine for fix computation. */
+typedef struct {
+
+ /* Mandatory */
+ /* Set Inject APCACHE Data Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Inject AP Cache Data request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* AP Cache Size */
+ uint8_t apCacheSize_valid; /**< Must be set to true if apCacheSize is being passed */
+ uint32_t apCacheSize;
+ /**< Key performance indicator (KPI) for apCacheSize that measures the size
+ of the last AP cache used. This parameter is always present. */
+
+ /* Optional */
+ /* AP Do Not Cache Size */
+ uint8_t apDoNotCacheSize_valid; /**< Must be set to true if apDoNotCacheSize is being passed */
+ uint32_t apDoNotCacheSize;
+ /**< KPI for apDoNotCacheSize that measures the size of the last AP cache used.
+ This parameter is always present. */
+
+ /* Optional */
+ /* AP Cache Hits */
+ uint8_t apCacheHits_valid; /**< Must be set to true if apCacheHits is being passed */
+ uint32_t apCacheHits;
+ /**< KPI for apCacheHits that measures the number of hits to the
+ AP cache of the last cache content. */
+
+ /* Optional */
+ /* AP Do Not Cache Hits */
+ uint8_t apDoNotCacheHits_valid; /**< Must be set to true if apDoNotCacheHits is being passed */
+ uint32_t apDoNotCacheHits;
+ /**< KPI for apDoNotCacheHits that measures the number of hits to
+ apDoNotCache of the last cache content. */
+
+ /* Optional */
+ /* Unknown APs */
+ uint8_t unknownAps_valid; /**< Must be set to true if unknownAps is being passed */
+ uint32_t unknownAps;
+ /**< KPI for unknownAps that measures the number of unknown APs, those that are
+ not found in any cache content. */
+
+ /* Optional */
+ /* Async Scans */
+ uint8_t asyncScans_valid; /**< Must be set to true if asyncScans is being passed */
+ uint32_t asyncScans;
+ /**< KPI for asyncScans that measures the number of async scans
+ perceived since the last modem boot. */
+
+ /* Optional */
+ /* Async Fixes */
+ uint8_t asyncFixes_valid; /**< Must be set to true if asyncFixes is being passed */
+ uint32_t asyncFixes;
+ /**< KPI for asyncFixes that measures the number of async fixes
+ generated since the last modem boot. */
+
+ /* Optional */
+ /* Sync Scans */
+ uint8_t syncScans_valid; /**< Must be set to true if syncScans is being passed */
+ uint32_t syncScans;
+ /**< KPI for syncScans that measures the number of sync scans
+ perceived since the last modem boot. */
+
+ /* Optional */
+ /* Sync Fixes */
+ uint8_t syncFixes_valid; /**< Must be set to true if syncFixes is being passed */
+ uint32_t syncFixes;
+ /**< KPI for asyncFixes that measures the number of sync fixes
+ generated since the last modem boot. */
+}qmiLocInjectApCacheDataIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ uint64_t macAddress;
+ /**< AP's MAC address. */
+}qmiLocApDoNotCacheStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to inject blacked out APs into
+ the low power location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Version Number */
+ uint8_t versionNumber;
+ /**< AP cache protocol version number. */
+
+ /* Mandatory */
+ /* Part Number */
+ uint8_t partNumber;
+ /**< Multiple message part number, used to order AP information. */
+
+ /* Mandatory */
+ /* Total Parts */
+ uint8_t totalParts;
+ /**< Total number of parts or messages for a complete cache update. */
+
+ /* Mandatory */
+ /* No AP Cache Data */
+ uint32_t apDoNotCacheData_len; /**< Must be set to # of elements in apDoNotCacheData */
+ qmiLocApDoNotCacheStructT_v02 apDoNotCacheData[QMI_LOC_APCACHE_DATA_MAX_SAMPLES_V02];
+ /**< \n APDoNotCache information. */
+}qmiLocInjectApDoNotCacheDataReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to inject blacked out APs into
+ the low power location engine. */
+typedef struct {
+
+ /* Mandatory */
+ /* Set Inject APDONOTCACHE Data Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Inject APDONOTCACHE Data request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocInjectApDoNotCacheDataIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCBATCHINGSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_BATCH_POS_UNAVAILABLE_V02 = 1, /**< Service is unable to compute the positions for batching */
+ eQMI_LOC_BATCH_POS_AVAILABLE_V02 = 2, /**< Service is able to compute the positions for batching */
+ QMILOCBATCHINGSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocBatchingStatusEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Notifies the control point of the
+ batching status. */
+typedef struct {
+
+ /* Mandatory */
+ /* Batching Status */
+ qmiLocBatchingStatusEnumT_v02 batchingStatus;
+ /**< Specifies the batching status.
+ Valid values: \n
+ - eQMI_LOC_BATCH_POS_UNAVAILABLE (1) -- Service is unable to compute the positions for batching
+ - eQMI_LOC_BATCH_POS_AVAILABLE (2) -- Service is able to compute the positions for batching
+ */
+}qmiLocEventBatchingStatusIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** Identifies the always-on service capabilities. */
+typedef uint32_t qmiLocAonCapabilityMaskT_v02;
+#define QMI_LOC_MASK_AON_AUTO_BATCHING_SUPPORTED_V02 ((qmiLocAonCapabilityMaskT_v02)0x00000001) /**< The service supports auto batching; the client can enable auto
+ batching by setting the distance parameter to 0 in the START_BATCHING request */
+#define QMI_LOC_MASK_AON_DISTANCE_BASED_BATCHING_SUPPORTED_V02 ((qmiLocAonCapabilityMaskT_v02)0x00000002) /**< The service supports distance-based batching */
+#define QMI_LOC_MASK_AON_TIME_BASED_BATCHING_SUPPORTED_V02 ((qmiLocAonCapabilityMaskT_v02)0x00000004) /**< The service supports time-based batching */
+#define QMI_LOC_MASK_AON_DISTANCE_BASED_TRACKING_SUPPORTED_V02 ((qmiLocAonCapabilityMaskT_v02)0x00000008) /**< The service supports distance-based tracking */
+#define QMI_LOC_MASK_AON_UPDATE_TBF_SUPPORTED_V02 ((qmiLocAonCapabilityMaskT_v02)0x00000010) /**< The service supports changing TBF dynamically */
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the clients to get always-on (AON) service settings.
+ */
+typedef struct {
+
+ /* Mandatory */
+ /* Transaction ID */
+ uint32_t transactionId;
+ /**< Identifies the transaction. The same transaction ID
+ is returned in the QUERY_AON_CONFIG indication. */
+}qmiLocQueryAonConfigReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the clients to get always-on (AON) service settings.
+ */
+typedef struct {
+
+ /* Mandatory */
+ /* Always-On Config Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Query AON Config request.
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Transaction ID */
+ uint8_t transactionId_valid; /**< Must be set to true if transactionId is being passed */
+ uint32_t transactionId;
+ /**< Identifies the transaction. It is the same transaction
+ ID that was passed in the QUERY_AON_CONFIG request. */
+
+ /* Optional */
+ /* Always-On Capability */
+ uint8_t aonCapability_valid; /**< Must be set to true if aonCapability is being passed */
+ qmiLocAonCapabilityMaskT_v02 aonCapability;
+ /**< Always-on capabilities supported by the service. \n
+ Valid values: \n
+ - QMI_LOC_MASK_AON_AUTO_BATCHING_SUPPORTED (0x00000001) -- The service supports auto batching; the client can enable auto
+ batching by setting the distance parameter to 0 in the START_BATCHING request
+ - QMI_LOC_MASK_AON_DISTANCE_BASED_BATCHING_SUPPORTED (0x00000002) -- The service supports distance-based batching
+ - QMI_LOC_MASK_AON_TIME_BASED_BATCHING_SUPPORTED (0x00000004) -- The service supports time-based batching
+ - QMI_LOC_MASK_AON_DISTANCE_BASED_TRACKING_SUPPORTED (0x00000008) -- The service supports distance-based tracking
+ - QMI_LOC_MASK_AON_UPDATE_TBF_SUPPORTED (0x00000010) -- The service supports changing TBF dynamically */
+}qmiLocQueryAonConfigIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+typedef uint32_t qmiLocDeleteCommonDataMaskT_v02;
+#define QMI_LOC_DELETE_COMMON_MASK_POS_V02 ((qmiLocDeleteCommonDataMaskT_v02)0x00000001) /**< Position estimate; common for all GNSS types */
+#define QMI_LOC_DELETE_COMMON_MASK_TIME_V02 ((qmiLocDeleteCommonDataMaskT_v02)0x00000002) /**< Reset all CLOCK_INFO mask */
+#define QMI_LOC_DELETE_COMMON_MASK_UTC_V02 ((qmiLocDeleteCommonDataMaskT_v02)0x00000004) /**< UTC estimate */
+#define QMI_LOC_DELETE_COMMON_MASK_RTI_V02 ((qmiLocDeleteCommonDataMaskT_v02)0x00000008) /**< RTI */
+#define QMI_LOC_DELETE_COMMON_MASK_FREQ_BIAS_EST_V02 ((qmiLocDeleteCommonDataMaskT_v02)0x00000010) /**< Frequency bias estimate; common for all GNSS types */
+typedef uint32_t qmiLocDeleteSatelliteDataMaskT_v02;
+#define QMI_LOC_DELETE_DATA_MASK_EPHEMERIS_V02 ((qmiLocDeleteSatelliteDataMaskT_v02)0x00000001) /**< Ephemeris */
+#define QMI_LOC_DELETE_DATA_MASK_ALMANAC_V02 ((qmiLocDeleteSatelliteDataMaskT_v02)0x00000002) /**< Almanac */
+#define QMI_LOC_DELETE_DATA_MASK_SVHEALTH_V02 ((qmiLocDeleteSatelliteDataMaskT_v02)0x00000004) /**< SV health */
+#define QMI_LOC_DELETE_DATA_MASK_SVDIR_V02 ((qmiLocDeleteSatelliteDataMaskT_v02)0x00000008) /**< SV direction */
+#define QMI_LOC_DELETE_DATA_MASK_SVSTEER_V02 ((qmiLocDeleteSatelliteDataMaskT_v02)0x00000010) /**< SV steer */
+#define QMI_LOC_DELETE_DATA_MASK_ALM_CORR_V02 ((qmiLocDeleteSatelliteDataMaskT_v02)0x00000020) /**< Almanac correction */
+#define QMI_LOC_DELETE_DATA_MASK_BLACKLIST_V02 ((qmiLocDeleteSatelliteDataMaskT_v02)0x00000040) /**< Blacklist SVs */
+#define QMI_LOC_DELETE_DATA_MASK_SA_DATA_V02 ((qmiLocDeleteSatelliteDataMaskT_v02)0x00000080) /**< Sensitivity assistance data */
+#define QMI_LOC_DELETE_DATA_MASK_SV_NO_EXIST_V02 ((qmiLocDeleteSatelliteDataMaskT_v02)0x00000100) /**< SV does not exist */
+#define QMI_LOC_DELETE_DATA_MASK_IONO_V02 ((qmiLocDeleteSatelliteDataMaskT_v02)0x00000200) /**< Ionosphere correction */
+#define QMI_LOC_DELETE_DATA_MASK_TIME_V02 ((qmiLocDeleteSatelliteDataMaskT_v02)0x00000400) /**< Reset satellite time */
+typedef uint32_t qmiLocGNSSConstellMaskT_v02;
+#define QMI_LOC_SYSTEM_GPS_V02 ((qmiLocGNSSConstellMaskT_v02)0x00000001)
+#define QMI_LOC_SYSTEM_GLO_V02 ((qmiLocGNSSConstellMaskT_v02)0x00000002)
+#define QMI_LOC_SYSTEM_BDS_V02 ((qmiLocGNSSConstellMaskT_v02)0x00000004)
+#define QMI_LOC_SYSTEM_GAL_V02 ((qmiLocGNSSConstellMaskT_v02)0x00000008)
+#define QMI_LOC_SYSTEM_QZSS_V02 ((qmiLocGNSSConstellMaskT_v02)0x00000010)
+/** @addtogroup loc_qmi_aggregates
+ @{
+ */
+typedef struct {
+
+ qmiLocGNSSConstellMaskT_v02 system;
+ /**< Indicates which satellite system's data is to be deleted.
+ The control point can delete multiple systems at a time.
+ Valid values: \n
+ - QMI_LOC_SYSTEM_GPS (0x00000001) --
+ - QMI_LOC_SYSTEM_GLO (0x00000002) --
+ - QMI_LOC_SYSTEM_BDS (0x00000004) --
+ - QMI_LOC_SYSTEM_GAL (0x00000008) --
+ - QMI_LOC_SYSTEM_QZSS (0x00000010) --
+ */
+
+ qmiLocDeleteSatelliteDataMaskT_v02 deleteSatelliteDataMask;
+ /**< Requested bitmask of data to be deleted for the specified satellite system. \n
+ Valid values: \n
+ - QMI_LOC_DELETE_DATA_MASK_EPHEMERIS (0x00000001) -- Ephemeris
+ - QMI_LOC_DELETE_DATA_MASK_ALMANAC (0x00000002) -- Almanac
+ - QMI_LOC_DELETE_DATA_MASK_SVHEALTH (0x00000004) -- SV health
+ - QMI_LOC_DELETE_DATA_MASK_SVDIR (0x00000008) -- SV direction
+ - QMI_LOC_DELETE_DATA_MASK_SVSTEER (0x00000010) -- SV steer
+ - QMI_LOC_DELETE_DATA_MASK_ALM_CORR (0x00000020) -- Almanac correction
+ - QMI_LOC_DELETE_DATA_MASK_BLACKLIST (0x00000040) -- Blacklist SVs
+ - QMI_LOC_DELETE_DATA_MASK_SA_DATA (0x00000080) -- Sensitivity assistance data
+ - QMI_LOC_DELETE_DATA_MASK_SV_NO_EXIST (0x00000100) -- SV does not exist
+ - QMI_LOC_DELETE_DATA_MASK_IONO (0x00000200) -- Ionosphere correction
+ - QMI_LOC_DELETE_DATA_MASK_TIME (0x00000400) -- Reset satellite time
+ */
+}qmiLocDeleteSatelliteDataStructT_v02; /* Type */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Deletes the location engine
+ service data from memory. */
+typedef struct {
+
+ /* Mandatory */
+ /* Reset All */
+ uint8_t deleteAllFlag;
+ /**< Indicates whether all GNSS service data is to be deleted.
+ Values:
+ 0x01 (TRUE) -- All constellations' service data is to be reset;
+ if this flag is set, all the other information
+ contained in the optional fields for this
+ message are ignored
+ 0x00 (FALSE) -- The optional fields in the message are to be
+ used to determine which data is to be deleted
+ */
+
+ /* Optional */
+ /* Requested Bitmask of Clock Info Data to be Deleted */
+ uint8_t deleteClockInfoMask_valid; /**< Must be set to true if deleteClockInfoMask is being passed */
+ qmiLocDeleteClockInfoMaskT_v02 deleteClockInfoMask;
+ /**< Mask for the clock information service data that is to be deleted.
+ If QMI_LOC_DELETE_DATA_MASK_TIME is set in deleteServiceDataMask,
+ deleteClockInfoMask will be ignored.
+ Valid values: \n
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_TIME_EST (0x00000001) -- Mask to delete time estimate from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_FREQ_EST (0x00000002) -- Mask to delete frequency estimate from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_WEEK_NUMBER (0x00000004) -- Mask to delete week number from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_RTC_TIME (0x00000008) -- Mask to delete RTC time from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_TIME_TRANSFER (0x00000010) -- Mask to delete time transfer from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GPSTIME_EST (0x00000020) -- Mask to delete GPS time estimate from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GLOTIME_EST (0x00000040) -- Mask to delete GLONASS time estimate from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GLODAY_NUMBER (0x00000080) -- Mask to delete GLONASS day number from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GLO4YEAR_NUMBER (0x00000100) -- Mask to delete GLONASS four year number from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GLO_RF_GRP_DELAY (0x00000200) -- Mask to delete GLONASS RF GRP delay from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_DISABLE_TT (0x00000400) -- Mask to delete disable TT from clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GG_LEAPSEC (0x00000800) -- Mask to delete a BDS time estimate from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GG_GGTB (0x00001000) -- Mask to delete a BDS time estimate from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_BDSTIME_EST (0x00002000) -- Mask to delete a BDS time estimate from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GB_GBTB (0x00004000) -- Mask to delete Glonass-to-BDS time bias-related information from the
+ clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_BG_BGTB (0x00008000) -- Mask to delete BDS-to-GLONASS time bias-related information from the
+ clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_BDSWEEK_NUMBER (0x00010000) -- Mask to delete the BDS week number from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_BDS_RF_GRP_DELAY (0x00020000) -- Mask to delete the BDS RF GRP delay from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTIME_EST (0x00040000) -- Mask to delete a GAL time estimate from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTOGPS_TB (0x00080000) -- Mask to delete GAL-to-GPS time bias-related information from the
+ clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTOGLO_TB (0x00100000) -- Mask to delete GAL-to-GLO time bias-related information from the
+ clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GALTOBDS_TB (0x00200000) -- Mask to delete GAL-to-BDS time bias-related information from the
+ clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GALWEEK_NUMBER (0x00800000) -- Mask to delete the GAL week number from the clock information
+ - QMI_LOC_MASK_DELETE_CLOCK_INFO_GAL_RF_GRP_DELAY (0x01000000) -- Mask to delete the GAL RF GRP delay from the clock information
+ */
+
+ /* Optional */
+ /* Requested Bitmask of Cell DB Data to be Deleted */
+ uint8_t deleteCellDbDataMask_valid; /**< Must be set to true if deleteCellDbDataMask is being passed */
+ qmiLocDeleteCelldbDataMaskT_v02 deleteCellDbDataMask;
+ /**< Mask for the cell database service data that is to be deleted;
+ common for all GNSS types.
+ Valid values: \n
+ - QMI_LOC_MASK_DELETE_CELLDB_POS (0x00000001) -- Mask to delete cell database position
+ - QMI_LOC_MASK_DELETE_CELLDB_LATEST_GPS_POS (0x00000002) -- Mask to delete cell database latest GPS position
+ - QMI_LOC_MASK_DELETE_CELLDB_OTA_POS (0x00000004) -- Mask to delete cell database OTA position
+ - QMI_LOC_MASK_DELETE_CELLDB_EXT_REF_POS (0x00000008) -- Mask to delete cell database external reference position
+ - QMI_LOC_MASK_DELETE_CELLDB_TIMETAG (0x00000010) -- Mask to delete cell database time tag
+ - QMI_LOC_MASK_DELETE_CELLDB_CELLID (0x00000020) -- Mask to delete cell database cell ID
+ - QMI_LOC_MASK_DELETE_CELLDB_CACHED_CELLID (0x00000040) -- Mask to delete cell database cached cell ID
+ - QMI_LOC_MASK_DELETE_CELLDB_LAST_SRV_CELL (0x00000080) -- Mask to delete cell database last service cell
+ - QMI_LOC_MASK_DELETE_CELLDB_CUR_SRV_CELL (0x00000100) -- Mask to delete cell database current service cell
+ - QMI_LOC_MASK_DELETE_CELLDB_NEIGHBOR_INFO (0x00000200) -- Mask to delete cell database neighbor information
+ */
+
+ /* Optional */
+ /* Requested Bitmask of Common Data to be Deleted */
+ uint8_t deleteCommonDataMask_valid; /**< Must be set to true if deleteCommonDataMask is being passed */
+ qmiLocDeleteCommonDataMaskT_v02 deleteCommonDataMask;
+ /**< Mask for the common service data that is to be deleted.
+ Valid values: \n
+ - QMI_LOC_DELETE_COMMON_MASK_POS (0x00000001) -- Position estimate; common for all GNSS types
+ - QMI_LOC_DELETE_COMMON_MASK_TIME (0x00000002) -- Reset all CLOCK_INFO mask
+ - QMI_LOC_DELETE_COMMON_MASK_UTC (0x00000004) -- UTC estimate
+ - QMI_LOC_DELETE_COMMON_MASK_RTI (0x00000008) -- RTI
+ - QMI_LOC_DELETE_COMMON_MASK_FREQ_BIAS_EST (0x00000010) -- Frequency bias estimate; common for all GNSS types
+ */
+
+ /* Optional */
+ /* GNSS Service Data to be Deleted */
+ uint8_t deleteSatelliteData_valid; /**< Must be set to true if deleteSatelliteData is being passed */
+ qmiLocDeleteSatelliteDataStructT_v02 deleteSatelliteData;
+ /**< Request to delete the GNSS service data.*/
+}qmiLocDeleteGNSSServiceDataReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Deletes the location engine
+ service data from memory. */
+typedef struct {
+
+ /* Mandatory */
+ /* Delete GNSS Service Data Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Delete Assist Data request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+}qmiLocDeleteGNSSServiceDataIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCXTRADATAFORMATENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_XTRA_DATA_V02 = 0, /**< Default is QCOM-XTRA format. */
+ QMILOCXTRADATAFORMATENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocXtraDataFormatEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Injects XTRA data. */
+typedef struct {
+
+ /* Mandatory */
+ /* Total Size */
+ uint32_t totalSize;
+ /**< Total size of the XTRA data to be injected. \n
+ - Units: Bytes */
+
+ /* Mandatory */
+ /* Total Parts */
+ uint16_t totalParts;
+ /**< Total number of parts into which the XTRA data is divided. */
+
+ /* Mandatory */
+ /* Part Number */
+ uint16_t partNum;
+ /**< Number of the current XTRA data part; starts at 1. */
+
+ /* Mandatory */
+ /* Data */
+ uint32_t partData_len; /**< Must be set to # of elements in partData */
+ uint8_t partData[QMI_LOC_MAX_XTRA_PART_LEN_V02];
+ /**< XTRA 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 */
+ qmiLocXtraDataFormatEnumT_v02 formatType;
+ /**< XTRA data format. \n
+ Valid values: \n
+ - eQMI_LOC_XTRA_DATA (0) -- Default is QCOM-XTRA format.
+ */
+}qmiLocInjectXtraDataReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Injects XTRA data. */
+typedef struct {
+
+ /* Mandatory */
+ /* Data Injection Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Data Injection request.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Optional */
+ /* Part Number */
+ uint8_t partNum_valid; /**< Must be set to true if partNum is being passed */
+ uint16_t partNum;
+ /**< Number of the XTRA data part for which this indication
+ is sent; starts at 1. */
+}qmiLocInjectXtraDataIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to inject PCID which is used by XTRA service. */
+typedef struct {
+
+ /* Mandatory */
+ /* XTRA PCID */
+ uint64_t xtraPcid;
+ /**< - Type: uint64 \n */
+}qmiLocInjectXtraPcidReqMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to inject PCID which is used by XTRA service. */
+typedef struct {
+
+ /* Mandatory */
+ /* Inject XTRA PCID Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the inject XTRA PCID.
+
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure */
+}qmiLocInjectXtraPcidIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Request Message; Used by the control point to query QMI_LOC service supported features. */
+typedef struct {
+ /* This element is a placeholder to prevent the declaration of
+ an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+ char __placeholder;
+}qmiLocGetSupportedFeatureReqMsgT_v02;
+
+ /* Message */
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_enums
+ @{
+ */
+typedef enum {
+ QMILOCSUPPORTEDFEATUREENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/
+ eQMI_LOC_SUPPORTED_FEATURE_ODCPI_2_V02 = 0, /**< Support ODCPI version 2 feature */
+ eQMI_LOC_SUPPORTED_FEATURE_WIFI_AP_DATA_INJECT_2_V02 = 1, /**< Support Wifi AP data inject version 2 feature */
+ QMILOCSUPPORTEDFEATUREENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/
+}qmiLocSupportedFeatureEnumT_v02;
+/**
+ @}
+ */
+
+/** @addtogroup loc_qmi_messages
+ @{
+ */
+/** Indication Message; Used by the control point to query QMI_LOC service supported features. */
+typedef struct {
+
+ /* Mandatory */
+ /* Supported Feature Status */
+ qmiLocStatusEnumT_v02 status;
+ /**< Status of the Query Supported Feature request.
+ Valid values: \n
+ - eQMI_LOC_SUCCESS (0) -- Request was completed successfully \n
+ - eQMI_LOC_GENERAL_FAILURE (1) -- Request failed because of a general failure \n
+ - eQMI_LOC_UNSUPPORTED (2) -- Request failed because it is not supported \n
+ - eQMI_LOC_INVALID_PARAMETER (3) -- Request failed because it contained invalid parameters \n
+ - eQMI_LOC_ENGINE_BUSY (4) -- Request failed because the engine is busy \n
+ - eQMI_LOC_PHONE_OFFLINE (5) -- Request failed because the phone is offline \n
+ - eQMI_LOC_TIMEOUT (6) -- Request failed because it timed out \n
+ - eQMI_LOC_CONFIG_NOT_SUPPORTED (7) -- Request failed because an undefined configuration was requested \n
+ - eQMI_LOC_INSUFFICIENT_MEMORY (8) -- Request failed because the engine could not allocate sufficient memory for the request \n
+ - eQMI_LOC_MAX_GEOFENCE_PROGRAMMED (9) -- Request failed because the maximum number of Geofences are already programmed \n
+ - eQMI_LOC_XTRA_VERSION_CHECK_FAILURE (10) -- Location service failed because of an XTRA version-based file format check failure
+ */
+
+ /* Mandatory */
+ /* Supported feature */
+ uint32_t feature_len; /**< Must be set to # of elements in feature */
+ uint8_t feature[QMI_LOC_SUPPORTED_FEATURE_LENGTH_V02];
+ /**< This field describes which feature are supported in the running
+ QMI_LOC service. The array of unit8 is the bitmask where each bit
+ represents a feature enum. Bit 0 represents feature enum ID 0,
+ bit 1 represents feature enum ID 1, etc.
+ For example, if QMI_LOC spports feature enum 0,1,2,8,
+ feature_len is 2,
+ feature array is [7,1]
+ - Type: Array of uint8
+ - Maximum array length: 100
+ */
+}qmiLocGetSupportedFeatureIndMsgT_v02; /* Message */
+/**
+ @}
+ */
+
+/* Conditional compilation tags for message removal */
+//#define REMOVE_QMI_LOC_ADD_CIRCULAR_GEOFENCE_V02
+//#define REMOVE_QMI_LOC_ADD_GEOFENCE_CONTEXT_V02
+//#define REMOVE_QMI_LOC_DELETE_ASSIST_DATA_V02
+//#define REMOVE_QMI_LOC_DELETE_GEOFENCE_V02
+//#define REMOVE_QMI_LOC_DELETE_GEOFENCE_CONTEXT_V02
+//#define REMOVE_QMI_LOC_DELETE_GNSS_SERVICE_DATA_V02
+//#define REMOVE_QMI_LOC_DELETE_SUPL_CERTIFICATE_V02
+//#define REMOVE_QMI_LOC_EDIT_GEOFENCE_V02
+//#define REMOVE_QMI_LOC_EVENT_BATCHING_STATUS_V02
+//#define REMOVE_QMI_LOC_EVENT_BATCH_FULL_NOTIFICATION_V02
+//#define REMOVE_QMI_LOC_EVENT_DBT_POSITION_REPORT_V02
+//#define REMOVE_QMI_LOC_EVENT_DBT_SESSION_STATUS_V02
+//#define REMOVE_QMI_LOC_EVENT_ENGINE_STATE_V02
+//#define REMOVE_QMI_LOC_EVENT_FIX_SESSION_STATE_V02
+//#define REMOVE_QMI_LOC_EVENT_GDT_DOWNLOAD_BEGIN_REQ_V02
+//#define REMOVE_QMI_LOC_EVENT_GDT_DOWNLOAD_END_REQ_V02
+//#define REMOVE_QMI_LOC_EVENT_GDT_RECEIVE_DONE_V02
+//#define REMOVE_QMI_LOC_EVENT_GDT_UPLOAD_BEGIN_STATUS_REQ_V02
+//#define REMOVE_QMI_LOC_EVENT_GDT_UPLOAD_END_REQ_V02
+//#define REMOVE_QMI_LOC_EVENT_GEOFENCE_BATCHED_BREACH_NOTIFICATION_V02
+//#define REMOVE_QMI_LOC_EVENT_GEOFENCE_BATCHED_DWELL_NOTIFICATION_V02
+//#define REMOVE_QMI_LOC_EVENT_GEOFENCE_BREACH_NOTIFICATION_V02
+//#define REMOVE_QMI_LOC_EVENT_GEOFENCE_GEN_ALERT_V02
+//#define REMOVE_QMI_LOC_EVENT_GEOFENCE_PROXIMITY_NOTIFICATION_V02
+//#define REMOVE_QMI_LOC_EVENT_GET_TIME_ZONE_INFO_V02
+//#define REMOVE_QMI_LOC_EVENT_GNSS_MEASUREMENT_REPORT_IND_V02
+//#define REMOVE_QMI_LOC_EVENT_GNSS_SV_INFO_V02
+//#define REMOVE_QMI_LOC_EVENT_INJECT_POSITION_REQ_V02
+//#define REMOVE_QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_V02
+//#define REMOVE_QMI_LOC_EVENT_INJECT_TIME_REQ_V02
+//#define REMOVE_QMI_LOC_EVENT_INJECT_WIFI_AP_DATA_REQ_V02
+//#define REMOVE_QMI_LOC_EVENT_LIVE_BATCHED_POSITION_REPORT_V02
+//#define REMOVE_QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_V02
+//#define REMOVE_QMI_LOC_EVENT_MOTION_DATA_CONTROL_V02
+//#define REMOVE_QMI_LOC_EVENT_NI_GEOFENCE_NOTIFICATION_V02
+//#define REMOVE_QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_V02
+//#define REMOVE_QMI_LOC_EVENT_NMEA_V02
+//#define REMOVE_QMI_LOC_EVENT_PEDOMETER_CONTROL_V02
+//#define REMOVE_QMI_LOC_EVENT_POSITION_REPORT_V02
+//#define REMOVE_QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_V02
+//#define REMOVE_QMI_LOC_EVENT_SET_SPI_STREAMING_REPORT_V02
+//#define REMOVE_QMI_LOC_EVENT_SV_POLYNOMIAL_REPORT_IND_V02
+//#define REMOVE_QMI_LOC_EVENT_TIME_SYNC_REQ_V02
+//#define REMOVE_QMI_LOC_EVENT_VEHICLE_DATA_READY_STATUS_V02
+//#define REMOVE_QMI_LOC_EVENT_WIFI_REQ_V02
+//#define REMOVE_QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_V02
+//#define REMOVE_QMI_LOC_GDT_DOWNLOAD_END_STATUS_V02
+//#define REMOVE_QMI_LOC_GDT_DOWNLOAD_READY_STATUS_V02
+//#define REMOVE_QMI_LOC_GDT_RECEIVE_DONE_STATUS_V02
+//#define REMOVE_QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_V02
+//#define REMOVE_QMI_LOC_GDT_UPLOAD_END_V02
+//#define REMOVE_QMI_LOC_GET_AVAILABLE_WWAN_POSITION_V02
+//#define REMOVE_QMI_LOC_GET_BATCH_SIZE_V02
+//#define REMOVE_QMI_LOC_GET_BEST_AVAILABLE_POSITION_V02
+//#define REMOVE_QMI_LOC_GET_CRADLE_MOUNT_CONFIG_V02
+//#define REMOVE_QMI_LOC_GET_ENGINE_LOCK_V02
+//#define REMOVE_QMI_LOC_GET_EXTERNAL_POWER_CONFIG_V02
+//#define REMOVE_QMI_LOC_GET_FIX_CRITERIA_V02
+//#define REMOVE_QMI_LOC_GET_GEOFENCE_ENGINE_CONFIG_V02
+//#define REMOVE_QMI_LOC_GET_LOW_POWER_MODE_V02
+//#define REMOVE_QMI_LOC_GET_NI_GEOFENCE_ID_LIST_V02
+//#define REMOVE_QMI_LOC_GET_NMEA_TYPES_V02
+//#define REMOVE_QMI_LOC_GET_OPERATION_MODE_V02
+//#define REMOVE_QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_V02
+//#define REMOVE_QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_V02
+//#define REMOVE_QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_V02
+//#define REMOVE_QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_V02
+//#define REMOVE_QMI_LOC_GET_REGISTERED_EVENTS_V02
+//#define REMOVE_QMI_LOC_GET_SBAS_CONFIG_V02
+//#define REMOVE_QMI_LOC_GET_SENSOR_CONTROL_CONFIG_V02
+//#define REMOVE_QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_V02
+//#define REMOVE_QMI_LOC_GET_SENSOR_PROPERTIES_V02
+//#define REMOVE_QMI_LOC_GET_SERVER_V02
+//#define REMOVE_QMI_LOC_GET_SERVICE_REVISION_V02
+//#define REMOVE_QMI_LOC_GET_SUPPORTED_FEATURE_V02
+//#define REMOVE_QMI_LOC_GET_SUPPORTED_FIELDS_V02
+//#define REMOVE_QMI_LOC_GET_SUPPORTED_MSGS_V02
+//#define REMOVE_QMI_LOC_GET_XTRA_T_SESSION_CONTROL_V02
+//#define REMOVE_QMI_LOC_GTP_AP_STATUS_V02
+//#define REMOVE_QMI_LOC_INFORM_CLIENT_REVISION_V02
+//#define REMOVE_QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_V02
+//#define REMOVE_QMI_LOC_INFORM_NI_USER_RESPONSE_V02
+//#define REMOVE_QMI_LOC_INJECT_APCACHE_DATA_V02
+//#define REMOVE_QMI_LOC_INJECT_APDONOTCACHE_DATA_V02
+//#define REMOVE_QMI_LOC_INJECT_GSM_CELL_INFO_V02
+//#define REMOVE_QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_V02
+//#define REMOVE_QMI_LOC_INJECT_MOTION_DATA_V02
+//#define REMOVE_QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_V02
+//#define REMOVE_QMI_LOC_INJECT_POSITION_V02
+//#define REMOVE_QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_V02
+//#define REMOVE_QMI_LOC_INJECT_SENSOR_DATA_V02
+//#define REMOVE_QMI_LOC_INJECT_SUBSCRIBER_ID_V02
+//#define REMOVE_QMI_LOC_INJECT_SUPL_CERTIFICATE_V02
+//#define REMOVE_QMI_LOC_INJECT_TDSCDMA_CELL_INFO_V02
+//#define REMOVE_QMI_LOC_INJECT_TIME_SYNC_DATA_V02
+//#define REMOVE_QMI_LOC_INJECT_TIME_ZONE_INFO_V02
+//#define REMOVE_QMI_LOC_INJECT_UTC_TIME_V02
+//#define REMOVE_QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_V02
+//#define REMOVE_QMI_LOC_INJECT_WCDMA_CELL_INFO_V02
+//#define REMOVE_QMI_LOC_INJECT_WIFI_AP_DATA_V02
+//#define REMOVE_QMI_LOC_INJECT_WIFI_POSITION_V02
+//#define REMOVE_QMI_LOC_INJECT_XTRA_DATA_V02
+//#define REMOVE_QMI_LOC_INJECT_XTRA_PCID_V02
+//#define REMOVE_QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_V02
+//#define REMOVE_QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_V02
+//#define REMOVE_QMI_LOC_NOTIFY_WIFI_STATUS_V02
+//#define REMOVE_QMI_LOC_PEDOMETER_REPORT_V02
+//#define REMOVE_QMI_LOC_QUERY_AON_CONFIG_V02
+//#define REMOVE_QMI_LOC_QUERY_GEOFENCE_V02
+//#define REMOVE_QMI_LOC_READ_FROM_BATCH_V02
+//#define REMOVE_QMI_LOC_REG_EVENTS_V02
+//#define REMOVE_QMI_LOC_RELEASE_BATCH_V02
+//#define REMOVE_QMI_LOC_SECURE_GET_AVAILABLE_POSITION_V02
+//#define REMOVE_QMI_LOC_SET_CRADLE_MOUNT_CONFIG_V02
+//#define REMOVE_QMI_LOC_SET_ENGINE_LOCK_V02
+//#define REMOVE_QMI_LOC_SET_EXTERNAL_POWER_CONFIG_V02
+//#define REMOVE_QMI_LOC_SET_GEOFENCE_ENGINE_CONFIG_V02
+//#define REMOVE_QMI_LOC_SET_GEOFENCE_ENGINE_CONTEXT_V02
+//#define REMOVE_QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_V02
+//#define REMOVE_QMI_LOC_SET_LOW_POWER_MODE_V02
+//#define REMOVE_QMI_LOC_SET_NMEA_TYPES_V02
+//#define REMOVE_QMI_LOC_SET_OPERATION_MODE_V02
+//#define REMOVE_QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_V02
+//#define REMOVE_QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_V02
+//#define REMOVE_QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_V02
+//#define REMOVE_QMI_LOC_SET_SBAS_CONFIG_V02
+//#define REMOVE_QMI_LOC_SET_SENSOR_CONTROL_CONFIG_V02
+//#define REMOVE_QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_V02
+//#define REMOVE_QMI_LOC_SET_SENSOR_PROPERTIES_V02
+//#define REMOVE_QMI_LOC_SET_SERVER_V02
+//#define REMOVE_QMI_LOC_SET_SPI_STATUS_V02
+//#define REMOVE_QMI_LOC_SET_XTRA_T_SESSION_CONTROL_V02
+//#define REMOVE_QMI_LOC_SET_XTRA_VERSION_CHECK_V02
+//#define REMOVE_QMI_LOC_START_V02
+//#define REMOVE_QMI_LOC_START_BATCHING_V02
+//#define REMOVE_QMI_LOC_START_DBT_V02
+//#define REMOVE_QMI_LOC_STOP_V02
+//#define REMOVE_QMI_LOC_STOP_BATCHING_V02
+//#define REMOVE_QMI_LOC_STOP_DBT_V02
+//#define REMOVE_QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_V02
+
+/*Service Message Definition*/
+/** @addtogroup loc_qmi_msg_ids
+ @{
+ */
+#define QMI_LOC_GET_SUPPORTED_MSGS_REQ_V02 0x001E
+#define QMI_LOC_GET_SUPPORTED_MSGS_RESP_V02 0x001E
+#define QMI_LOC_GET_SUPPORTED_FIELDS_REQ_V02 0x001F
+#define QMI_LOC_GET_SUPPORTED_FIELDS_RESP_V02 0x001F
+#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
+#define QMI_LOC_EVENT_NI_GEOFENCE_NOTIFICATION_IND_V02 0x0060
+#define QMI_LOC_EVENT_GEOFENCE_GEN_ALERT_IND_V02 0x0061
+#define QMI_LOC_EVENT_GEOFENCE_BREACH_NOTIFICATION_IND_V02 0x0062
+#define QMI_LOC_ADD_CIRCULAR_GEOFENCE_REQ_V02 0x0063
+#define QMI_LOC_ADD_CIRCULAR_GEOFENCE_RESP_V02 0x0063
+#define QMI_LOC_ADD_CIRCULAR_GEOFENCE_IND_V02 0x0063
+#define QMI_LOC_DELETE_GEOFENCE_REQ_V02 0x0064
+#define QMI_LOC_DELETE_GEOFENCE_RESP_V02 0x0064
+#define QMI_LOC_DELETE_GEOFENCE_IND_V02 0x0064
+#define QMI_LOC_QUERY_GEOFENCE_REQ_V02 0x0065
+#define QMI_LOC_QUERY_GEOFENCE_RESP_V02 0x0065
+#define QMI_LOC_QUERY_GEOFENCE_IND_V02 0x0065
+#define QMI_LOC_EDIT_GEOFENCE_REQ_V02 0x0066
+#define QMI_LOC_EDIT_GEOFENCE_RESP_V02 0x0066
+#define QMI_LOC_EDIT_GEOFENCE_IND_V02 0x0066
+#define QMI_LOC_GET_BEST_AVAILABLE_POSITION_REQ_V02 0x0067
+#define QMI_LOC_GET_BEST_AVAILABLE_POSITION_RESP_V02 0x0067
+#define QMI_LOC_GET_BEST_AVAILABLE_POSITION_IND_V02 0x0067
+#define QMI_LOC_INJECT_MOTION_DATA_REQ_V02 0x0068
+#define QMI_LOC_INJECT_MOTION_DATA_RESP_V02 0x0068
+#define QMI_LOC_INJECT_MOTION_DATA_IND_V02 0x0068
+#define QMI_LOC_GET_NI_GEOFENCE_ID_LIST_REQ_V02 0x0069
+#define QMI_LOC_GET_NI_GEOFENCE_ID_LIST_RESP_V02 0x0069
+#define QMI_LOC_GET_NI_GEOFENCE_ID_LIST_IND_V02 0x0069
+#define QMI_LOC_INJECT_GSM_CELL_INFO_REQ_V02 0x006A
+#define QMI_LOC_INJECT_GSM_CELL_INFO_RESP_V02 0x006A
+#define QMI_LOC_INJECT_GSM_CELL_INFO_IND_V02 0x006A
+#define QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_REQ_V02 0x006B
+#define QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_RESP_V02 0x006B
+#define QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_IND_V02 0x006B
+#define QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_REQ_V02 0x006C
+#define QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_RESP_V02 0x006C
+#define QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_IND_V02 0x006C
+#define QMI_LOC_EVENT_PEDOMETER_CONTROL_IND_V02 0x006D
+#define QMI_LOC_EVENT_MOTION_DATA_CONTROL_IND_V02 0x006E
+#define QMI_LOC_PEDOMETER_REPORT_REQ_V02 0x006F
+#define QMI_LOC_PEDOMETER_REPORT_RESP_V02 0x006F
+#define QMI_LOC_PEDOMETER_REPORT_IND_V02 0x006F
+#define QMI_LOC_INJECT_WCDMA_CELL_INFO_REQ_V02 0x0070
+#define QMI_LOC_INJECT_WCDMA_CELL_INFO_RESP_V02 0x0070
+#define QMI_LOC_INJECT_WCDMA_CELL_INFO_IND_V02 0x0070
+#define QMI_LOC_INJECT_TDSCDMA_CELL_INFO_REQ_V02 0x0071
+#define QMI_LOC_INJECT_TDSCDMA_CELL_INFO_RESP_V02 0x0071
+#define QMI_LOC_INJECT_TDSCDMA_CELL_INFO_IND_V02 0x0071
+#define QMI_LOC_INJECT_SUBSCRIBER_ID_REQ_V02 0x0072
+#define QMI_LOC_INJECT_SUBSCRIBER_ID_RESP_V02 0x0072
+#define QMI_LOC_INJECT_SUBSCRIBER_ID_IND_V02 0x0072
+#define QMI_LOC_SET_GEOFENCE_ENGINE_CONFIG_REQ_V02 0x0073
+#define QMI_LOC_SET_GEOFENCE_ENGINE_CONFIG_RESP_V02 0x0073
+#define QMI_LOC_SET_GEOFENCE_ENGINE_CONFIG_IND_V02 0x0073
+#define QMI_LOC_GET_GEOFENCE_ENGINE_CONFIG_REQ_V02 0x0074
+#define QMI_LOC_GET_GEOFENCE_ENGINE_CONFIG_RESP_V02 0x0074
+#define QMI_LOC_GET_GEOFENCE_ENGINE_CONFIG_IND_V02 0x0074
+#define QMI_LOC_GET_BATCH_SIZE_REQ_V02 0x0075
+#define QMI_LOC_GET_BATCH_SIZE_RESP_V02 0x0075
+#define QMI_LOC_GET_BATCH_SIZE_IND_V02 0x0075
+#define QMI_LOC_START_BATCHING_REQ_V02 0x0076
+#define QMI_LOC_START_BATCHING_RESP_V02 0x0076
+#define QMI_LOC_START_BATCHING_IND_V02 0x0076
+#define QMI_LOC_EVENT_BATCH_FULL_NOTIFICATION_IND_V02 0x0077
+#define QMI_LOC_EVENT_LIVE_BATCHED_POSITION_REPORT_IND_V02 0x0078
+#define QMI_LOC_READ_FROM_BATCH_REQ_V02 0x0079
+#define QMI_LOC_READ_FROM_BATCH_RESP_V02 0x0079
+#define QMI_LOC_READ_FROM_BATCH_IND_V02 0x0079
+#define QMI_LOC_STOP_BATCHING_REQ_V02 0x007A
+#define QMI_LOC_STOP_BATCHING_RESP_V02 0x007A
+#define QMI_LOC_STOP_BATCHING_IND_V02 0x007A
+#define QMI_LOC_RELEASE_BATCH_REQ_V02 0x007B
+#define QMI_LOC_RELEASE_BATCH_RESP_V02 0x007B
+#define QMI_LOC_RELEASE_BATCH_IND_V02 0x007B
+#define QMI_LOC_EVENT_INJECT_WIFI_AP_DATA_REQ_IND_V02 0x007C
+#define QMI_LOC_INJECT_WIFI_AP_DATA_REQ_V02 0x007D
+#define QMI_LOC_INJECT_WIFI_AP_DATA_RESP_V02 0x007D
+#define QMI_LOC_INJECT_WIFI_AP_DATA_IND_V02 0x007D
+#define QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_REQ_V02 0x007E
+#define QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_RESP_V02 0x007E
+#define QMI_LOC_NOTIFY_WIFI_ATTACHMENT_STATUS_IND_V02 0x007E
+#define QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_REQ_V02 0x007F
+#define QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_RESP_V02 0x007F
+#define QMI_LOC_NOTIFY_WIFI_ENABLED_STATUS_IND_V02 0x007F
+#define QMI_LOC_EVENT_GEOFENCE_BATCHED_BREACH_NOTIFICATION_IND_V02 0x0080
+#define QMI_LOC_EVENT_VEHICLE_DATA_READY_STATUS_IND_V02 0x0081
+#define QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_REQ_V02 0x0082
+#define QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_RESP_V02 0x0082
+#define QMI_LOC_INJECT_VEHICLE_SENSOR_DATA_IND_V02 0x0082
+#define QMI_LOC_GET_AVAILABLE_WWAN_POSITION_REQ_V02 0x0083
+#define QMI_LOC_GET_AVAILABLE_WWAN_POSITION_RESP_V02 0x0083
+#define QMI_LOC_GET_AVAILABLE_WWAN_POSITION_IND_V02 0x0083
+#define QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_REQ_V02 0x0084
+#define QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_RESP_V02 0x0084
+#define QMI_LOC_SET_PREMIUM_SERVICES_CONFIG_IND_V02 0x0084
+#define QMI_LOC_SET_XTRA_VERSION_CHECK_REQ_V02 0x0085
+#define QMI_LOC_SET_XTRA_VERSION_CHECK_RESP_V02 0x0085
+#define QMI_LOC_SET_XTRA_VERSION_CHECK_IND_V02 0x0085
+#define QMI_LOC_EVENT_GNSS_MEASUREMENT_REPORT_IND_V02 0x0086
+#define QMI_LOC_EVENT_SV_POLYNOMIAL_REPORT_IND_V02 0x0087
+#define QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_V02 0x0088
+#define QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_RESP_V02 0x0088
+#define QMI_LOC_SET_GNSS_CONSTELL_REPORT_CONFIG_IND_V02 0x0088
+#define QMI_LOC_ADD_GEOFENCE_CONTEXT_REQ_V02 0x0089
+#define QMI_LOC_ADD_GEOFENCE_CONTEXT_RESP_V02 0x0089
+#define QMI_LOC_ADD_GEOFENCE_CONTEXT_IND_V02 0x0089
+#define QMI_LOC_SET_GEOFENCE_ENGINE_CONTEXT_REQ_V02 0x008A
+#define QMI_LOC_SET_GEOFENCE_ENGINE_CONTEXT_RESP_V02 0x008A
+#define QMI_LOC_SET_GEOFENCE_ENGINE_CONTEXT_IND_V02 0x008A
+#define QMI_LOC_DELETE_GEOFENCE_CONTEXT_REQ_V02 0x008B
+#define QMI_LOC_DELETE_GEOFENCE_CONTEXT_RESP_V02 0x008B
+#define QMI_LOC_DELETE_GEOFENCE_CONTEXT_IND_V02 0x008B
+#define QMI_LOC_EVENT_GEOFENCE_PROXIMITY_NOTIFICATION_IND_V02 0x008C
+#define QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_REQ_V02 0x008D
+#define QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_RESP_V02 0x008D
+#define QMI_LOC_INJECT_GTP_CLIENT_DOWNLOADED_DATA_IND_V02 0x008D
+#define QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_REQ_V02 0x008E
+#define QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_RESP_V02 0x008E
+#define QMI_LOC_GDT_UPLOAD_BEGIN_STATUS_IND_V02 0x008E
+#define QMI_LOC_GDT_UPLOAD_END_REQ_V02 0x008F
+#define QMI_LOC_GDT_UPLOAD_END_RESP_V02 0x008F
+#define QMI_LOC_GDT_UPLOAD_END_IND_V02 0x008F
+#define QMI_LOC_EVENT_GDT_UPLOAD_BEGIN_STATUS_REQ_IND_V02 0x0090
+#define QMI_LOC_EVENT_GDT_UPLOAD_END_REQ_IND_V02 0x0091
+#define QMI_LOC_START_DBT_REQ_V02 0x0092
+#define QMI_LOC_START_DBT_RESP_V02 0x0092
+#define QMI_LOC_START_DBT_IND_V02 0x0092
+#define QMI_LOC_EVENT_DBT_POSITION_REPORT_IND_V02 0x0093
+#define QMI_LOC_EVENT_DBT_SESSION_STATUS_IND_V02 0x0094
+#define QMI_LOC_STOP_DBT_REQ_V02 0x0095
+#define QMI_LOC_STOP_DBT_RESP_V02 0x0095
+#define QMI_LOC_STOP_DBT_IND_V02 0x0095
+#define QMI_LOC_SECURE_GET_AVAILABLE_POSITION_REQ_V02 0x0096
+#define QMI_LOC_SECURE_GET_AVAILABLE_POSITION_RESP_V02 0x0096
+#define QMI_LOC_SECURE_GET_AVAILABLE_POSITION_IND_V02 0x0096
+#define QMI_LOC_EVENT_GEOFENCE_BATCHED_DWELL_NOTIFICATION_IND_V02 0x0097
+#define QMI_LOC_EVENT_GET_TIME_ZONE_INFO_IND_V02 0x0098
+#define QMI_LOC_INJECT_TIME_ZONE_INFO_REQ_V02 0x0099
+#define QMI_LOC_INJECT_TIME_ZONE_INFO_RESP_V02 0x0099
+#define QMI_LOC_INJECT_TIME_ZONE_INFO_IND_V02 0x0099
+#define QMI_LOC_INJECT_APCACHE_DATA_REQ_V02 0x009A
+#define QMI_LOC_INJECT_APCACHE_DATA_RESP_V02 0x009A
+#define QMI_LOC_INJECT_APCACHE_DATA_IND_V02 0x009A
+#define QMI_LOC_INJECT_APDONOTCACHE_DATA_REQ_V02 0x009B
+#define QMI_LOC_INJECT_APDONOTCACHE_DATA_RESP_V02 0x009B
+#define QMI_LOC_INJECT_APDONOTCACHE_DATA_IND_V02 0x009B
+#define QMI_LOC_EVENT_BATCHING_STATUS_IND_V02 0x009C
+#define QMI_LOC_QUERY_AON_CONFIG_REQ_V02 0x009D
+#define QMI_LOC_QUERY_AON_CONFIG_RESP_V02 0x009D
+#define QMI_LOC_QUERY_AON_CONFIG_IND_V02 0x009D
+#define QMI_LOC_GTP_AP_STATUS_REQ_V02 0x009E
+#define QMI_LOC_GTP_AP_STATUS_RESP_V02 0x009E
+#define QMI_LOC_GTP_AP_STATUS_IND_V02 0x009E
+#define QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_REQ_V02 0x009F
+#define QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_RESP_V02 0x009F
+#define QMI_LOC_GDT_DOWNLOAD_BEGIN_STATUS_IND_V02 0x009F
+#define QMI_LOC_GDT_DOWNLOAD_READY_STATUS_REQ_V02 0x00A0
+#define QMI_LOC_GDT_DOWNLOAD_READY_STATUS_RESP_V02 0x00A0
+#define QMI_LOC_GDT_DOWNLOAD_READY_STATUS_IND_V02 0x00A0
+#define QMI_LOC_GDT_RECEIVE_DONE_STATUS_REQ_V02 0x00A1
+#define QMI_LOC_GDT_RECEIVE_DONE_STATUS_RESP_V02 0x00A1
+#define QMI_LOC_GDT_RECEIVE_DONE_STATUS_IND_V02 0x00A1
+#define QMI_LOC_GDT_DOWNLOAD_END_STATUS_REQ_V02 0x00A2
+#define QMI_LOC_GDT_DOWNLOAD_END_STATUS_RESP_V02 0x00A2
+#define QMI_LOC_GDT_DOWNLOAD_END_STATUS_IND_V02 0x00A2
+#define QMI_LOC_EVENT_GDT_DOWNLOAD_BEGIN_REQ_IND_V02 0x00A3
+#define QMI_LOC_EVENT_GDT_RECEIVE_DONE_IND_V02 0x00A4
+#define QMI_LOC_EVENT_GDT_DOWNLOAD_END_REQ_IND_V02 0x00A5
+#define QMI_LOC_DELETE_GNSS_SERVICE_DATA_REQ_V02 0x00A6
+#define QMI_LOC_DELETE_GNSS_SERVICE_DATA_RESP_V02 0x00A6
+#define QMI_LOC_DELETE_GNSS_SERVICE_DATA_IND_V02 0x00A6
+#define QMI_LOC_INJECT_XTRA_DATA_REQ_V02 0x00A7
+#define QMI_LOC_INJECT_XTRA_DATA_RESP_V02 0x00A7
+#define QMI_LOC_INJECT_XTRA_DATA_IND_V02 0x00A7
+#define QMI_LOC_INJECT_XTRA_PCID_REQ_V02 0x00A8
+#define QMI_LOC_INJECT_XTRA_PCID_RESP_V02 0x00A8
+#define QMI_LOC_INJECT_XTRA_PCID_IND_V02 0x00A8
+#define QMI_LOC_GET_SUPPORTED_FEATURE_REQ_V02 0x00A9
+#define QMI_LOC_GET_SUPPORTED_FEATURE_RESP_V02 0x00A9
+#define QMI_LOC_GET_SUPPORTED_FEATURE_IND_V02 0x00A9
+/**
+ @}
+ */
+
+/* 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/gps/utils/Android.mk b/gps/utils/Android.mk
index 103e524..ef1b7a2 100644
--- a/gps/utils/Android.mk
+++ b/gps/utils/Android.mk
@@ -5,11 +5,13 @@ LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
+
## Libs
LOCAL_SHARED_LIBRARIES := \
libutils \
libcutils \
- liblog
+ liblog \
+ libloc_pla
LOCAL_SRC_FILES += \
loc_log.cpp \
@@ -24,10 +26,10 @@ LOCAL_SRC_FILES += \
MsgTask.cpp \
loc_misc_utils.cpp
+# Flag -std=c++11 is not accepted by compiler when LOCAL_CLANG is set to true
LOCAL_CFLAGS += \
-fno-short-enums \
- -D_ANDROID_ \
- -std=c++11
+ -D_ANDROID_
ifeq ($(TARGET_BUILD_VARIANT),user)
LOCAL_CFLAGS += -DTARGET_BUILD_VARIANT_USER
@@ -37,7 +39,7 @@ LOCAL_LDFLAGS += -Wl,--export-dynamic
## Includes
LOCAL_C_INCLUDES:= \
- $(LOCAL_PATH)/platform_lib_abstractions
+ $(TARGET_OUT_HEADERS)/libloc_pla
LOCAL_COPY_HEADERS_TO:= gps.utils/
LOCAL_COPY_HEADERS:= \
@@ -53,17 +55,15 @@ LOCAL_COPY_HEADERS:= \
loc_target.h \
loc_timer.h \
LocSharedLock.h \
- platform_lib_abstractions/platform_lib_includes.h \
- platform_lib_abstractions/platform_lib_time.h \
- platform_lib_abstractions/platform_lib_macros.h \
loc_misc_utils.h
LOCAL_MODULE := libgps.utils
-LOCAL_CLANG := false
LOCAL_MODULE_TAGS := optional
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)
+
+include $(addsuffix /Android.mk, $(addprefix $(LOCAL_PATH)/, platform_lib_abstractions))
endif # not BUILD_TINY_ANDROID
diff --git a/gps/utils/LocSharedLock.h b/gps/utils/LocSharedLock.h
index 6b9e27f..7fe6237 100644
--- a/gps/utils/LocSharedLock.h
+++ b/gps/utils/LocSharedLock.h
@@ -30,6 +30,7 @@
#define __LOC_SHARED_LOCK__
#include <stddef.h>
+#include <cutils/atomic.h>
#include <pthread.h>
// This is a utility created for use cases such that there are more than
@@ -39,16 +40,16 @@
// this share lock's share() method has to be called, so that the obj
// can maintain an accurate client count.
class LocSharedLock {
- uint32_t mRef;
+ volatile int32_t mRef;
pthread_mutex_t mMutex;
inline ~LocSharedLock() { pthread_mutex_destroy(&mMutex); }
public:
// first client to create this LockSharedLock
inline LocSharedLock() : mRef(1) { pthread_mutex_init(&mMutex, NULL); }
// following client(s) are to *share()* this lock created by the first client
- inline LocSharedLock* share() { mRef++; return this; }
+ inline LocSharedLock* share() { android_atomic_inc(&mRef); return this; }
// whe a client no longer needs this shared lock, drop() shall be called.
- inline void drop() { if (0 == --mRef) delete this; }
+ inline void drop() { if (1 == android_atomic_dec(&mRef)) delete this; }
// locking the lock to enter critical section
inline void lock() { pthread_mutex_lock(&mMutex); }
// unlocking the lock to leave the critical section
diff --git a/gps/utils/LocThread.cpp b/gps/utils/LocThread.cpp
index 19bf101..685841e 100644
--- a/gps/utils/LocThread.cpp
+++ b/gps/utils/LocThread.cpp
@@ -29,6 +29,7 @@
#include <LocThread.h>
#include <string.h>
#include <pthread.h>
+#include <platform_lib_macros.h>
class LocThreadDelegate {
LocRunnable* mRunnable;
@@ -84,7 +85,8 @@ LocThreadDelegate::LocThreadDelegate(LocThread::tCreate creator,
if (mThandle) {
// set thread name
char lname[16];
- int len = sizeof(lname) - 1;
+ int len = (sizeof(lname)>sizeof(threadName)) ?
+ (sizeof(threadName) -1):(sizeof(lname) - 1);
memcpy(lname, threadName, len);
lname[len] = 0;
// set the thread name here
diff --git a/gps/utils/LocTimer.cpp b/gps/utils/LocTimer.cpp
index 70904b2..4de6b40 100644
--- a/gps/utils/LocTimer.cpp
+++ b/gps/utils/LocTimer.cpp
@@ -505,8 +505,13 @@ int LocTimerDelegate::ranks(LocRankable& rankable) {
LocTimerDelegate* timer = (LocTimerDelegate*)(&rankable);
if (timer) {
// larger time ranks lower!!!
- // IOW, if input obj has bigger tv_sec, this obj outRanks higher
+ // IOW, if input obj has bigger tv_sec/tv_nsec, this obj outRanks higher
rank = timer->mFutureTime.tv_sec - mFutureTime.tv_sec;
+ if(0 == rank)
+ {
+ //rank against tv_nsec for msec accuracy
+ rank = (int)(timer->mFutureTime.tv_nsec - mFutureTime.tv_nsec);
+ }
}
return rank;
}
diff --git a/gps/utils/LocTimer.h b/gps/utils/LocTimer.h
index c146852..c6a6362 100644
--- a/gps/utils/LocTimer.h
+++ b/gps/utils/LocTimer.h
@@ -31,7 +31,7 @@
#define __LOC_TIMER_CPP_H__
#include <stddef.h>
-#include <log_util.h>
+#include <platform_lib_includes.h>
// opaque class to provide service implementation.
class LocTimerDelegate;
diff --git a/gps/utils/Makefile.am b/gps/utils/Makefile.am
index e5935f0..50f1007 100644
--- a/gps/utils/Makefile.am
+++ b/gps/utils/Makefile.am
@@ -5,22 +5,33 @@ AM_CFLAGS = -Wundef \
-fno-inline \
-fno-short-enums \
-fpic \
- -I../platform_lib_abstractions
-
-libgps_utils_so_la_h_sources = log_util.h \
- msg_q.h \
- linked_list.h \
- loc_cfg.h \
- loc_log.h \
- ../platform_lib_abstractions/platform_lib_includes.h \
- ../platform_lib_abstractions/platform_lib_time.h \
- ../platform_lib_abstractions/platform_lib_macros.h
-
-libgps_utils_so_la_c_sources = linked_list.c \
- msg_q.c \
- loc_cfg.cpp \
- loc_log.cpp \
- ../platform_lib_abstractions/elapsed_millis_since_boot.cpp
+ -I./ \
+ $(LOCPLA_CFLAGS)
+
+libgps_utils_so_la_h_sources = \
+ msg_q.h \
+ linked_list.h \
+ loc_cfg.h \
+ loc_log.h \
+ loc_target.h \
+ loc_timer.h \
+ MsgTask.h \
+ LocHeap.h \
+ LocThread.h \
+ LocTimer.h \
+ loc_misc_utils.h
+
+libgps_utils_so_la_c_sources = \
+ linked_list.c \
+ msg_q.c \
+ loc_cfg.cpp \
+ loc_log.cpp \
+ loc_target.cpp \
+ LocHeap.cpp \
+ LocTimer.cpp \
+ LocThread.cpp \
+ MsgTask.cpp \
+ loc_misc_utils.cpp
library_includedir = $(pkgincludedir)/utils
@@ -38,7 +49,7 @@ libgps_utils_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
libgps_utils_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
endif
-libgps_utils_so_la_LIBADD = -lstdc++ -lcutils
+libgps_utils_so_la_LIBADD = -lstdc++ -llog $(LOCPLA_LIBS)
#Create and Install libraries
lib_LTLIBRARIES = libgps_utils_so.la
diff --git a/gps/utils/MsgTask.cpp b/gps/utils/MsgTask.cpp
index 6f9d0e9..78a3fe0 100644
--- a/gps/utils/MsgTask.cpp
+++ b/gps/utils/MsgTask.cpp
@@ -29,12 +29,11 @@
#define LOG_NDDEBUG 0
#define LOG_TAG "LocSvc_MsgTask"
-#include <cutils/sched_policy.h>
#include <unistd.h>
#include <MsgTask.h>
#include <msg_q.h>
-#include <log_util.h>
#include <loc_log.h>
+#include <platform_lib_includes.h>
static void LocMsgDestroy(void* msg) {
delete (LocMsg*)msg;
@@ -79,7 +78,7 @@ void MsgTask::sendMsg(const LocMsg* msg) const {
void MsgTask::prerun() {
// make sure we do not run in background scheduling group
- set_sched_policy(gettid(), SP_FOREGROUND);
+ platform_lib_abstraction_set_sched_policy(platform_lib_abstraction_gettid(), PLA_SP_FOREGROUND);
}
bool MsgTask::run() {
diff --git a/gps/utils/linked_list.c b/gps/utils/linked_list.c
index 2c91714..acec5b1 100644
--- a/gps/utils/linked_list.c
+++ b/gps/utils/linked_list.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -31,8 +31,7 @@
#include <string.h>
#define LOG_TAG "LocSvc_utils_ll"
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include <stdlib.h>
#include <stdint.h>
diff --git a/gps/utils/loc_cfg.cpp b/gps/utils/loc_cfg.cpp
index 967d2f3..926781a 100644
--- a/gps/utils/loc_cfg.cpp
+++ b/gps/utils/loc_cfg.cpp
@@ -38,7 +38,7 @@
#include <unistd.h>
#include <time.h>
#include <loc_cfg.h>
-#include <log_util.h>
+#include <platform_lib_includes.h>
#include <loc_misc_utils.h>
#ifdef USE_GLIB
#include <glib.h>
diff --git a/gps/utils/loc_log.cpp b/gps/utils/loc_log.cpp
index 76f0c53..f6b54f9 100644
--- a/gps/utils/loc_log.cpp
+++ b/gps/utils/loc_log.cpp
@@ -34,11 +34,7 @@
#include <sys/time.h>
#include "loc_log.h"
#include "msg_q.h"
-#ifdef USE_GLIB
-#include <time.h>
-#endif /* USE_GLIB */
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#define BUFFER_SIZE 120
diff --git a/gps/utils/loc_misc_utils.cpp b/gps/utils/loc_misc_utils.cpp
index 7e96313..dfe19a2 100644
--- a/gps/utils/loc_misc_utils.cpp
+++ b/gps/utils/loc_misc_utils.cpp
@@ -28,7 +28,7 @@
*/
#include <stdio.h>
#include <string.h>
-#include <log_util.h>
+#include <platform_lib_log_util.h>
#include <loc_misc_utils.h>
#include <ctype.h>
diff --git a/gps/utils/loc_target.cpp b/gps/utils/loc_target.cpp
index faaedf6..2da2fea 100644
--- a/gps/utils/loc_target.cpp
+++ b/gps/utils/loc_target.cpp
@@ -38,7 +38,7 @@
#include <cutils/properties.h>
#include "loc_target.h"
#include "loc_log.h"
-#include "log_util.h"
+#include <platform_lib_includes.h>
#define APQ8064_ID_1 "109"
#define APQ8064_ID_2 "153"
@@ -49,11 +49,12 @@
#define APQ8074_ID_1 "184"
#define LINE_LEN 100
-#define STR_LIQUID "Liquid"
-#define STR_SURF "Surf"
-#define STR_MTP "MTP"
-#define STR_APQ "apq"
-#define STR_AUTO "auto"
+#define STR_LIQUID "Liquid"
+#define STR_SURF "Surf"
+#define STR_MTP "MTP"
+#define STR_APQ "apq"
+#define STR_APQ_NO_WGR "baseband_apq_nowgr"
+#define STR_AUTO "auto"
#define IS_STR_END(c) ((c) == '\0' || (c) == '\n' || (c) == '\r')
#define LENGTH(s) (sizeof(s) - 1)
#define GPS_CHECK_NO_ERROR 0
@@ -112,7 +113,7 @@ static bool is_qca1530(void)
for (i = 0; i < QCA1530_DETECT_TIMEOUT; ++i)
{
- ret = property_get(qca1530_property_name, buf, NULL);
+ ret = platform_lib_abstraction_property_get(qca1530_property_name, buf, NULL);
if (ret < 0)
{
LOC_LOGV( "qca1530: property %s is not accessible, ret=%d",
@@ -174,6 +175,20 @@ void loc_get_platform_name(char *platform_name, int array_length)
}
}
+/*The character array passed to this function should have length
+ of atleast PROPERTY_VALUE_MAX*/
+void loc_get_auto_platform_name(char *platform_name, int array_length)
+{
+ if(platform_name && (array_length >= PROPERTY_VALUE_MAX)) {
+ property_get("ro.hardware.type", platform_name, "");
+ LOC_LOGD("%s:%d]: Autoplatform name: %s\n", __func__, __LINE__, platform_name);
+ }
+ else {
+ LOC_LOGE("%s:%d]: Null parameter or array length less than PROPERTY_VALUE_MAX\n",
+ __func__, __LINE__);
+ }
+}
+
unsigned int loc_get_target(void)
{
if (gTarget != (unsigned int)-1)
@@ -190,6 +205,7 @@ unsigned int loc_get_target(void)
char rd_id[LINE_LEN];
char rd_mdm[LINE_LEN];
char baseband[LINE_LEN];
+ char rd_auto_platform[LINE_LEN];
if (is_qca1530()) {
gTarget = TARGET_QCA1530;
@@ -208,16 +224,26 @@ unsigned int loc_get_target(void)
} else {
read_a_line(id_dep, rd_id, LINE_LEN);
}
- if( !memcmp(baseband, STR_AUTO, LENGTH(STR_AUTO)) )
+
+ /*check automotive platform*/
+ loc_get_auto_platform_name(rd_auto_platform, sizeof(rd_auto_platform));
+ if( !memcmp(rd_auto_platform, STR_AUTO, LENGTH(STR_AUTO)) )
{
gTarget = TARGET_AUTO;
goto detected;
}
+
+ if( !memcmp(baseband, STR_APQ_NO_WGR, LENGTH(STR_APQ_NO_WGR)) ){
+
+ gTarget = TARGET_NO_GNSS;
+ goto detected;
+ }
+
if( !memcmp(baseband, STR_APQ, LENGTH(STR_APQ)) ){
if( !memcmp(rd_id, MPQ8064_ID_1, LENGTH(MPQ8064_ID_1))
&& IS_STR_END(rd_id[LENGTH(MPQ8064_ID_1)]) )
- gTarget = TARGET_MPQ;
+ gTarget = TARGET_NO_GNSS;
else
gTarget = TARGET_APQ_SA;
}
diff --git a/gps/utils/loc_target.h b/gps/utils/loc_target.h
index 3bb3b5e..69395db 100644
--- a/gps/utils/loc_target.h
+++ b/gps/utils/loc_target.h
@@ -32,7 +32,7 @@
#define TARGET_DEFAULT TARGET_SET(GNSS_MSM, HAS_SSC)
#define TARGET_MDM TARGET_SET(GNSS_MDM, HAS_SSC)
#define TARGET_APQ_SA TARGET_SET(GNSS_GSS, NO_SSC)
-#define TARGET_MPQ TARGET_SET(GNSS_NONE,NO_SSC)
+#define TARGET_NO_GNSS TARGET_SET(GNSS_NONE, NO_SSC)
#define TARGET_MSM_NO_SSC TARGET_SET(GNSS_MSM, NO_SSC)
#define TARGET_QCA1530 TARGET_SET(GNSS_QCA1530, NO_SSC)
#define TARGET_AUTO TARGET_SET(GNSS_AUTO, NO_SSC)
@@ -52,6 +52,10 @@ void loc_get_target_baseband(char *baseband, int array_length);
/*The character array passed to this function should have length
of atleast PROPERTY_VALUE_MAX*/
void loc_get_platform_name(char *platform_name, int array_length);
+/*The character array passed to this function should have length
+ of atleast PROPERTY_VALUE_MAX*/
+void loc_get_auto_platform_name(char *platform_name, int array_length);
+
/*Reads the property ro.lean to identify if this is a lean target
Returns:
0 if not a lean and mean target
diff --git a/gps/utils/loc_timer.h b/gps/utils/loc_timer.h
index 2967858..25fd179 100644
--- a/gps/utils/loc_timer.h
+++ b/gps/utils/loc_timer.h
@@ -34,7 +34,7 @@
extern "C" {
#endif /* __cplusplus */
#include <stddef.h>
-
+#include <platform_lib_includes.h>
/*
user_data: client context pointer, passthrough. Originally received
from calling client when loc_timer_start() is called.
diff --git a/gps/utils/log_util.h b/gps/utils/log_util.h
index ffd5ca9..d27c800 100644
--- a/gps/utils/log_util.h
+++ b/gps/utils/log_util.h
@@ -159,6 +159,12 @@ else if (loc_logger.DEBUG_LEVEL == 0xff) { ALOGV("V/" __VA_ARGS__); }
} \
} while(0)
+#define LOC_LOG_HEAD(tag,fmt) "%s:%d][" tag "] " fmt "\n"
+#define LOC_LOGv(tag,fmt,...) LOC_LOGV(LOC_LOG_HEAD(tag,fmt), __func__, __LINE__, ##__VA_ARGS__)
+#define LOC_LOGw(tag,fmt,...) LOC_LOGW(LOC_LOG_HEAD(tag,fmt), __func__, __LINE__, ##__VA_ARGS__)
+#define LOC_LOGd(tag,fmt,...) LOC_LOGD(LOC_LOG_HEAD(tag,fmt), __func__, __LINE__, ##__VA_ARGS__)
+#define LOC_LOGe(tag,fmt,...) LOC_LOGE(LOC_LOG_HEAD(tag,fmt), __func__, __LINE__, ##__VA_ARGS__)
+
#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 LOG_E(ID, WHAT, SPEC, VAL) LOG_(LOC_LOGE, ID, WHAT, SPEC, VAL)
diff --git a/gps/utils/msg_q.c b/gps/utils/msg_q.c
index 5be8547..e412e78 100644
--- a/gps/utils/msg_q.c
+++ b/gps/utils/msg_q.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2012,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -29,8 +29,7 @@
#include "msg_q.h"
#define LOG_TAG "LocSvc_utils_q"
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include "linked_list.h"
#include <stdio.h>
#include <stdlib.h>
diff --git a/gps/utils/platform_lib_abstractions/Android.mk b/gps/utils/platform_lib_abstractions/Android.mk
new file mode 100644
index 0000000..b923a4c
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/Android.mk
@@ -0,0 +1,5 @@
+ifneq ($(BUILD_TINY_ANDROID),true)
+
+include $(call all-subdir-makefiles)
+
+endif
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/Android.mk b/gps/utils/platform_lib_abstractions/loc_pla/Android.mk
new file mode 100644
index 0000000..b923a4c
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/Android.mk
@@ -0,0 +1,5 @@
+ifneq ($(BUILD_TINY_ANDROID),true)
+
+include $(call all-subdir-makefiles)
+
+endif
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/Makefile.am b/gps/utils/platform_lib_abstractions/loc_pla/Makefile.am
new file mode 100644
index 0000000..8996763
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/Makefile.am
@@ -0,0 +1,10 @@
+# Makefile.am for gps loc-pla
+#
+
+ACLOCAL_AMFLAGS = -I m4
+
+SUBDIRS = src
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = loc-pla.pc
+EXTRA_DIST = $(pkgconfig_DATA)
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/configure.ac b/gps/utils/platform_lib_abstractions/loc_pla/configure.ac
new file mode 100644
index 0000000..a8b892b
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/configure.ac
@@ -0,0 +1,61 @@
+# configure.ac -- Autoconf script for gps loc-pla
+#
+# Process this file with autoconf to produce a configure script
+
+# Requires autoconf tool later than 2.61
+AC_PREREQ(2.61)
+# Initialize the gps loc-pla package version 1.0.0
+AC_INIT([loc-pla],1.0.0)
+# Does not strictly follow GNU Coding standards
+AM_INIT_AUTOMAKE([foreign])
+# Disables auto rebuilding of configure, Makefile.ins
+AM_MAINTAINER_MODE
+# Verifies the --srcdir is correct by checking for the path
+AC_CONFIG_SRCDIR([include/platform_lib_includes.h])
+# defines some macros variable to be included by source
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+# Checks for programs.
+AC_PROG_LIBTOOL
+AC_PROG_CXX
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_AWK
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+PKG_PROG_PKG_CONFIG
+
+# Checks for libraries.
+PKG_CHECK_MODULES([LOCSTUB], [loc-stub])
+AC_SUBST([LOCSTUB_CFLAGS])
+AC_SUBST([LOCSTUB_LIBS])
+
+AC_ARG_WITH([glib],
+ AC_HELP_STRING([--with-glib],
+ [enable glib, building HLOS systems which use glib]))
+
+if (test "x${with_glib}" = "xyes"); then
+ AC_DEFINE(ENABLE_USEGLIB, 1, [Define if HLOS systems uses glib])
+ PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= 2.16, dummy=yes,
+ AC_MSG_ERROR(GThread >= 2.16 is required))
+ PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, dummy=yes,
+ AC_MSG_ERROR(GLib >= 2.16 is required))
+ GLIB_CFLAGS="$GLIB_CFLAGS $GTHREAD_CFLAGS"
+ GLIB_LIBS="$GLIB_LIBS $GTHREAD_LIBS"
+
+ AC_SUBST(GLIB_CFLAGS)
+ AC_SUBST(GLIB_LIBS)
+fi
+
+AM_CONDITIONAL(USE_GLIB, test "x${with_glib}" = "xyes")
+
+AC_CONFIG_FILES([ \
+ Makefile \
+ src/Makefile \
+ loc-pla.pc \
+ ])
+
+AC_OUTPUT
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_android_runtime.h b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_android_runtime.h
new file mode 100644
index 0000000..9a954f0
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_android_runtime.h
@@ -0,0 +1,45 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 __PLATFORM_LIB_ANDROID_RUNTIME_H__
+#define __PLATFORM_LIB_ANDROID_RUNTIME_H__
+
+#include <pthread.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+pthread_t platform_lib_abstraction_createJavaThread(const char* name, void (*start)(void *), void* arg);
+#define LOC_EXT_CREATE_THREAD_CB_PLATFORM_LIB_ABSTRACTION platform_lib_abstraction_createJavaThread
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /*__PLATFORM_LIB_ANDROID_RUNTIME_H__ */
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_gettid.h b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_gettid.h
new file mode 100644
index 0000000..9956937
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_gettid.h
@@ -0,0 +1,41 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 __PLATFORM_LIB_GETTID_H__
+#define __PLATFORM_LIB_GETTID_H__
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+pid_t platform_lib_abstraction_gettid();
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* __PLATFORM_LIB_GETTID_H__ */
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_includes.h b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_includes.h
new file mode 100644
index 0000000..47c37df
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_includes.h
@@ -0,0 +1,40 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 __PLATFORM_LIB_INCLUDES_H__
+#define __PLATFORM_LIB_INCLUDES_H__
+
+#include "platform_lib_android_runtime.h"
+#include "platform_lib_gettid.h"
+#include "platform_lib_log_util.h"
+#include "platform_lib_macros.h"
+#include "platform_lib_property_service.h"
+#include "platform_lib_sched_policy.h"
+#include "platform_lib_time.h"
+
+#endif /* __PLATFORM_LIB_INCLUDES_H__ */
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_log_util.h b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_log_util.h
new file mode 100644
index 0000000..5989c64
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_log_util.h
@@ -0,0 +1,196 @@
+/* Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 __PLATFORM_LIB_LOG_UTIL_H__
+#define __PLATFORM_LIB_LOG_UTIL_H__
+
+#include "platform_lib_macros.h"
+
+#ifndef USE_GLIB
+#include <log_util.h>
+#else
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <time.h>
+#include <unistd.h>
+
+#ifndef LOG_TAG
+#define LOG_TAG "GPS_UTILS"
+#endif /* LOG_TAG */
+
+#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[];
+extern const char EXIT_ERROR_TAG[];
+
+/*=============================================================================
+ *
+ * MODULE EXPORTED FUNCTIONS
+ *
+ *============================================================================*/
+void loc_logger_init(unsigned long debug, unsigned long timestamp);
+char* get_timestamp(char* str, unsigned long buf_size);
+
+#ifndef DEBUG_DMN_LOC_API
+
+/* LOGGING MACROS */
+/*loc_logger.DEBUG_LEVEL is initialized to 0xff in loc_cfg.cpp
+ if that value remains unchanged, it means gps.conf did not
+ provide a value and we default to the initial value to use
+ Android's logging levels*/
+#define IF_LOC_LOGE if((loc_logger.DEBUG_LEVEL >= 1) && (loc_logger.DEBUG_LEVEL <= 5))
+
+#define IF_LOC_LOGW if((loc_logger.DEBUG_LEVEL >= 2) && (loc_logger.DEBUG_LEVEL <= 5))
+
+#define IF_LOC_LOGI if((loc_logger.DEBUG_LEVEL >= 3) && (loc_logger.DEBUG_LEVEL <= 5))
+
+#define IF_LOC_LOGD if((loc_logger.DEBUG_LEVEL >= 4) && (loc_logger.DEBUG_LEVEL <= 5))
+
+#define IF_LOC_LOGV if((loc_logger.DEBUG_LEVEL >= 5) && (loc_logger.DEBUG_LEVEL <= 5))
+
+#define LOC_LOGE(...) \
+IF_LOC_LOGE { ALOGE("E/" __VA_ARGS__); } \
+else if (loc_logger.DEBUG_LEVEL == 0xff) { ALOGE("E/" __VA_ARGS__); }
+
+#define LOC_LOGW(...) \
+IF_LOC_LOGW { ALOGE("W/" __VA_ARGS__); } \
+else if (loc_logger.DEBUG_LEVEL == 0xff) { ALOGW("W/" __VA_ARGS__); }
+
+#define LOC_LOGI(...) \
+IF_LOC_LOGI { ALOGE("I/" __VA_ARGS__); } \
+else if (loc_logger.DEBUG_LEVEL == 0xff) { ALOGI("I/" __VA_ARGS__); }
+
+#define LOC_LOGD(...) \
+IF_LOC_LOGD { ALOGE("D/" __VA_ARGS__); } \
+else if (loc_logger.DEBUG_LEVEL == 0xff) { ALOGD("D/" __VA_ARGS__); }
+
+#define LOC_LOGV(...) \
+IF_LOC_LOGV { ALOGE("V/" __VA_ARGS__); } \
+else if (loc_logger.DEBUG_LEVEL == 0xff) { ALOGV("V/" __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 LOC_LOG_HEAD(tag,fmt) "%s:%d][" tag "] " fmt "\n"
+#define LOC_LOGv(tag,fmt,...) LOC_LOGV(LOC_LOG_HEAD(tag,fmt), __func__, __LINE__, ##__VA_ARGS__)
+#define LOC_LOGw(tag,fmt,...) LOC_LOGW(LOC_LOG_HEAD(tag,fmt), __func__, __LINE__, ##__VA_ARGS__)
+#define LOC_LOGd(tag,fmt,...) LOC_LOGD(LOC_LOG_HEAD(tag,fmt), __func__, __LINE__, ##__VA_ARGS__)
+#define LOC_LOGe(tag,fmt,...) LOC_LOGE(LOC_LOG_HEAD(tag,fmt), __func__, __LINE__, ##__VA_ARGS__)
+
+#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 LOG_E(ID, WHAT, SPEC, VAL) LOG_(LOC_LOGE, 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)
+#define EXIT_LOG_WITH_ERROR(SPEC, VAL) \
+ if (VAL != 0) { \
+ LOG_E(EXIT_ERROR_TAG, __func__, SPEC, VAL); \
+ } else { \
+ 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 /* USE_GLIB */
+
+#endif /* __PLATFORM_LIB_LOG_UTIL_H__ */
diff --git a/gps/utils/platform_lib_abstractions/platform_lib_macros.h b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_macros.h
index bc48dd9..c712122 100644
--- a/gps/utils/platform_lib_abstractions/platform_lib_macros.h
+++ b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_macros.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -29,7 +29,22 @@
#ifndef __PLATFORM_LIB_MACROS_H__
#define __PLATFORM_LIB_MACROS_H__
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef USE_GLIB
#include <sys/time.h>
+#include <string.h>
+#include <stdlib.h>
+#ifndef OFF_TARGET
+#include <glib.h>
+#define strlcat g_strlcat
+#define strlcpy g_strlcpy
+#else
+#define strlcat strncat
+#define strlcpy strncpy
+#endif
#define TS_PRINTF(format, x...) \
{ \
@@ -43,39 +58,16 @@
fprintf(stdout,"%02d:%02d:%02d.%06ld]" format "\n", hh, mm, ss, tv.tv_usec,##x); \
}
-
-#ifdef USE_GLIB
-
-#define strlcat g_strlcat
-#define strlcpy g_strlcpy
-
#define ALOGE(format, x...) TS_PRINTF("E/%s (%d): " format , LOG_TAG, getpid(), ##x)
#define ALOGW(format, x...) TS_PRINTF("W/%s (%d): " format , LOG_TAG, getpid(), ##x)
#define ALOGI(format, x...) TS_PRINTF("I/%s (%d): " format , LOG_TAG, getpid(), ##x)
#define ALOGD(format, x...) TS_PRINTF("D/%s (%d): " format , LOG_TAG, getpid(), ##x)
#define ALOGV(format, x...) TS_PRINTF("V/%s (%d): " format , LOG_TAG, getpid(), ##x)
-#define GETTID_PLATFORM_LIB_ABSTRACTION (syscall(SYS_gettid))
-
-#define LOC_EXT_CREATE_THREAD_CB_PLATFORM_LIB_ABSTRACTION createPthread
-#define ELAPSED_MILLIS_SINCE_BOOT_PLATFORM_LIB_ABSTRACTION (elapsedMillisSinceBoot())
-
-
-#else
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-pid_t gettid(void);
+#endif /* USE_GLIB */
#ifdef __cplusplus
}
-#endif
-
-#define GETTID_PLATFORM_LIB_ABSTRACTION (gettid())
-#define LOC_EXT_CREATE_THREAD_CB_PLATFORM_LIB_ABSTRACTION android::AndroidRuntime::createJavaThread
-#define ELAPSED_MILLIS_SINCE_BOOT_PLATFORM_LIB_ABSTRACTION (android::elapsedRealtime())
+#endif /*__cplusplus */
-#endif
-
-#endif
+#endif /* __PLATFORM_LIB_MACROS_H__ */
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_property_service.h b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_property_service.h
new file mode 100644
index 0000000..ed2041f
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_property_service.h
@@ -0,0 +1,44 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 __PLATFORM_LIB_PROPERTY_SERVICE_H__
+#define __PLATFORM_LIB_PROPERTY_SERVICE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifndef PROPERTY_VALUE_MAX
+#define PROPERTY_VALUE_MAX 92
+#endif
+int platform_lib_abstraction_property_get(const char *key, char *value, const char *default_value);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __PLATFORM_LIB_PROPERTY_SERVICE_H__ */
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_sched_policy.h b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_sched_policy.h
new file mode 100644
index 0000000..d10f151
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_sched_policy.h
@@ -0,0 +1,46 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 __PLATFORM_LIB_SCHED_POLICY_H__
+#define __PLATFORM_LIB_SCHED_POLICY_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef enum {
+ PLA_SP_BACKGROUND = 0,
+ PLA_SP_FOREGROUND = 1,
+} PLASchedPolicy;
+
+int platform_lib_abstraction_set_sched_policy(int tid, PLASchedPolicy policy);
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __PLATFORM_LIB_SCHED_POLICY_H__ */
+
diff --git a/gps/utils/platform_lib_abstractions/platform_lib_includes.h b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_time.h
index 5858674..2905a74 100644
--- a/gps/utils/platform_lib_abstractions/platform_lib_includes.h
+++ b/gps/utils/platform_lib_abstractions/loc_pla/include/platform_lib_time.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -26,10 +26,10 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef _PLATFORM_LIB_INCLUDES_H_
-#define _PLATFORM_LIB_INCLUDES_H_
+#ifndef __PLATFORM_LIB_TIME_H__
+#define __PLATFORM_LIB_TIME_H__
-#include "platform_lib_time.h"
-#include "platform_lib_macros.h"
+#include <stdint.h>
+int64_t platform_lib_abstraction_elapsed_millis_since_boot();
-#endif
+#endif /* __PLATFORM_LIB_TIME_H__ */
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/loc-pla.pc.in b/gps/utils/platform_lib_abstractions/loc_pla/loc-pla.pc.in
new file mode 100644
index 0000000..1aad2f4
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/loc-pla.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: loc-pla
+Description: QTI GPS Location Platform Library Abstractions
+Version: @VERSION@
+Libs: -L${libdir} -lloc_pla
+Cflags: -I${includedir}/loc-pla
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/src/Android.mk b/gps/utils/platform_lib_abstractions/loc_pla/src/Android.mk
new file mode 100644
index 0000000..0363d59
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/src/Android.mk
@@ -0,0 +1,55 @@
+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 \
+ liblog \
+ libloc_stub
+
+LOCAL_SRC_FILES += \
+ platform_lib_android_runtime.cpp \
+ platform_lib_gettid.cpp \
+ platform_lib_log_util.cpp \
+ platform_lib_property_service.cpp \
+ platform_lib_sched_policy.cpp \
+ platform_lib_time.cpp
+
+LOCAL_CFLAGS += \
+ -fno-short-enums \
+ -D_ANDROID_ \
+ -std=c++11
+
+
+LOCAL_LDFLAGS += -Wl,--export-dynamic
+
+## Includes
+LOCAL_C_INCLUDES:= \
+ $(LOCAL_PATH)/../include \
+ $(TARGET_OUT_HEADERS)/gps.utils \
+ $(TARGET_OUT_HEADERS)/libloc_stub
+
+LOCAL_COPY_HEADERS_TO:= libloc_pla/
+LOCAL_COPY_HEADERS:= \
+ ../include/platform_lib_android_runtime.h \
+ ../include/platform_lib_gettid.h \
+ ../include/platform_lib_includes.h \
+ ../include/platform_lib_log_util.h \
+ ../include/platform_lib_macros.h \
+ ../include/platform_lib_property_service.h \
+ ../include/platform_lib_sched_policy.h \
+ ../include/platform_lib_time.h
+
+LOCAL_MODULE := libloc_pla
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_PRELINK_MODULE := false
+
+include $(BUILD_SHARED_LIBRARY)
+endif # not BUILD_TINY_ANDROID
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/src/Makefile.am b/gps/utils/platform_lib_abstractions/loc_pla/src/Makefile.am
new file mode 100644
index 0000000..6ee0be7
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/src/Makefile.am
@@ -0,0 +1,41 @@
+AM_CFLAGS = \
+ $(LOCSTUB_CFLAGS) \
+ -I../include \
+ -D__func__=__PRETTY_FUNCTION__ \
+ -fno-short-enums
+
+h_sources = \
+ ../include/platform_lib_android_runtime.h \
+ ../include/platform_lib_gettid.h \
+ ../include/platform_lib_includes.h \
+ ../include/platform_lib_log_util.h \
+ ../include/platform_lib_macros.h \
+ ../include/platform_lib_property_service.h \
+ ../include/platform_lib_sched_policy.h \
+ ../include/platform_lib_time.h
+
+library_includedir = $(pkgincludedir)
+library_include_HEADERS = $(h_sources)
+
+libloc_pla_la_SOURCES = \
+ platform_lib_android_runtime.cpp \
+ platform_lib_gettid.cpp \
+ platform_lib_log_util.cpp \
+ platform_lib_property_service.cpp \
+ platform_lib_sched_policy.cpp \
+ platform_lib_time.cpp
+
+if USE_GLIB
+libloc_pla_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libloc_pla_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libloc_pla_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libloc_pla_la_CFLAGS = $(AM_CFLAGS)
+libloc_pla_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
+libloc_pla_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+
+libloc_pla_la_LIBADD = -lstdc++ -ldl -llog $(LOCSTUB_LIBS)
+
+#Create and Install libraries
+lib_LTLIBRARIES = libloc_pla.la
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_android_runtime.cpp b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_android_runtime.cpp
new file mode 100644
index 0000000..090af13
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_android_runtime.cpp
@@ -0,0 +1,40 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 "platform_lib_android_runtime.h"
+
+#ifdef USE_GLIB
+#include <loc_stub_android_runtime.h>
+#else
+#include <android_runtime/AndroidRuntime.h>
+#endif /* USE_GLIB */
+
+pthread_t platform_lib_abstraction_createJavaThread(const char* name, void (*start)(void *), void* arg)
+{
+ return (pthread_t)android::AndroidRuntime::createJavaThread(name, start, arg);
+}
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_gettid.cpp b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_gettid.cpp
new file mode 100644
index 0000000..8686327
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_gettid.cpp
@@ -0,0 +1,40 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 "platform_lib_gettid.h"
+
+#ifdef USE_GLIB
+#include <loc_stub_gettid.h>
+#else
+#include <unistd.h>
+#endif /* USE_GLIB */
+
+pid_t platform_lib_abstraction_gettid()
+{
+ return gettid();
+}
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_log_util.cpp b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_log_util.cpp
new file mode 100644
index 0000000..ef23201
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_log_util.cpp
@@ -0,0 +1,42 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 "platform_lib_log_util.h"
+
+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/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_property_service.cpp b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_property_service.cpp
new file mode 100644
index 0000000..1cc63ab
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_property_service.cpp
@@ -0,0 +1,39 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 "platform_lib_property_service.h"
+
+#ifdef USE_GLIB
+#include <loc_stub_property_service.h>
+#else
+#include <cutils/properties.h>
+#endif /* USE_GLIB */
+
+int platform_lib_abstraction_property_get(const char *key, char *value, const char *default_value)
+{
+ return property_get(key, value, default_value);
+}
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_sched_policy.cpp b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_sched_policy.cpp
new file mode 100644
index 0000000..ba6b350
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_sched_policy.cpp
@@ -0,0 +1,41 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 "platform_lib_sched_policy.h"
+
+#ifdef USE_GLIB
+#include <loc_stub_sched_policy.h>
+#else
+#include <cutils/sched_policy.h>
+#endif /* USE_GLIB */
+
+int platform_lib_abstraction_set_sched_policy(int tid, PLASchedPolicy policy)
+{
+ return set_sched_policy(tid, (SchedPolicy)policy);
+}
+
diff --git a/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_time.cpp b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_time.cpp
new file mode 100644
index 0000000..dc7dff1
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_pla/src/platform_lib_time.cpp
@@ -0,0 +1,47 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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 "platform_lib_time.h"
+
+#ifdef USE_GLIB
+#include <loc_stub_time.h>
+#else
+#include <utils/SystemClock.h>
+#endif /* USE_GLIB */
+
+int64_t platform_lib_abstraction_elapsed_millis_since_boot()
+{
+#ifdef USE_GLIB
+
+ return elapsedMillisSinceBoot();
+
+#else
+
+ return android::elapsedRealtime();
+
+#endif
+}
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/Android.mk b/gps/utils/platform_lib_abstractions/loc_stub/Android.mk
new file mode 100644
index 0000000..b923a4c
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/Android.mk
@@ -0,0 +1,5 @@
+ifneq ($(BUILD_TINY_ANDROID),true)
+
+include $(call all-subdir-makefiles)
+
+endif
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/Makefile.am b/gps/utils/platform_lib_abstractions/loc_stub/Makefile.am
new file mode 100644
index 0000000..d81e363
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/Makefile.am
@@ -0,0 +1,9 @@
+# Makefile.am for gps loc-stub
+
+ACLOCAL_AMFLAGS = -I m4
+
+SUBDIRS = src
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = loc-stub.pc
+EXTRA_DIST = $(pkgconfig_DATA)
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/configure.ac b/gps/utils/platform_lib_abstractions/loc_stub/configure.ac
new file mode 100644
index 0000000..8900f04
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/configure.ac
@@ -0,0 +1,67 @@
+# configure.ac -- Autoconf script for gps loc-stub
+#
+# Process this file with autoconf to produce a configure script
+
+# Requires autoconf tool later than 2.61
+AC_PREREQ(2.61)
+# Initialize the gps loc-stub package version 1.0.0
+AC_INIT([loc-stub],1.0.0)
+# Does not strictly follow GNU Coding standards
+AM_INIT_AUTOMAKE([foreign])
+# Disables auto rebuilding of configure, Makefile.ins
+AM_MAINTAINER_MODE
+# Verifies the --srcdir is correct by checking for the path
+AC_CONFIG_SRCDIR([Makefile.am])
+# defines some macros variable to be included by source
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+# Checks for programs.
+AC_PROG_LIBTOOL
+AC_PROG_CXX
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_AWK
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+PKG_PROG_PKG_CONFIG
+
+# Checks for libraries.
+AC_ARG_WITH([hardware_include],
+ AC_HELP_STRING([--with-hardware-include=@<:@dir@:>@],
+ [Specify the location of the hardware headers]),
+ [hardware_incdir=$withval],
+ with_hardware_include=no)
+
+if test "x$with_hardware_include" != "xno"; then
+ CPPFLAGS="${CPPFLAGS} -I${hardware_incdir}"
+fi
+
+AC_ARG_WITH([glib],
+ AC_HELP_STRING([--with-glib],
+ [enable glib, building HLOS systems which use glib]))
+
+if (test "x${with_glib}" = "xyes"); then
+ AC_DEFINE(ENABLE_USEGLIB, 1, [Define if HLOS systems uses glib])
+ PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= 2.16, dummy=yes,
+ AC_MSG_ERROR(GThread >= 2.16 is required))
+ PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, dummy=yes,
+ AC_MSG_ERROR(GLib >= 2.16 is required))
+ GLIB_CFLAGS="$GLIB_CFLAGS $GTHREAD_CFLAGS"
+ GLIB_LIBS="$GLIB_LIBS $GTHREAD_LIBS"
+
+ AC_SUBST(GLIB_CFLAGS)
+ AC_SUBST(GLIB_LIBS)
+fi
+
+AM_CONDITIONAL(USE_GLIB, test "x${with_glib}" = "xyes")
+
+AC_CONFIG_FILES([ \
+ Makefile \
+ src/Makefile \
+ loc-stub.pc
+ ])
+
+AC_OUTPUT
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_android_runtime.h b/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_android_runtime.h
new file mode 100644
index 0000000..c8764ee
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_android_runtime.h
@@ -0,0 +1,45 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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_STUB_ANDROID_RUNTIME_H__
+#define __LOC_STUB_ANDROID_RUNTIME_H__
+
+#include <pthread.h>
+
+namespace android {
+
+class AndroidRuntime
+{
+public:
+ /** create a new thread that is visible from Java */
+ static pthread_t createJavaThread(const char* name, void (*start)(void *),
+ void* arg);
+};
+
+}
+#endif /* __LOC_STUB_ANDROID_RUNTIME_H__ */
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_gettid.h b/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_gettid.h
new file mode 100644
index 0000000..677bc81
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_gettid.h
@@ -0,0 +1,44 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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_STUB_GETTID_H__
+#define __LOC_STUB_GETTID_H__
+
+#include <pthread.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+pid_t gettid(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __LOC_STUB_GETTID_H__ */
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_property_service.h b/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_property_service.h
new file mode 100644
index 0000000..3677cdf
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_property_service.h
@@ -0,0 +1,42 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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_STUB_PROPERTY_SERVICE_H__
+#define __LOC_STUB_PROPERTY_SERVICE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int property_get(const char *key, char *value, const char *default_value);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LOC_STUB_PROPERTY_SERVICE_H__ */
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_sched_policy.h b/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_sched_policy.h
new file mode 100644
index 0000000..a42b117
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_sched_policy.h
@@ -0,0 +1,64 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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_STUB_SCHED_POLICY_H__
+#define __LOC_STUB_SCHED_POLICY_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ SP_BACKGROUND = 0,
+ SP_FOREGROUND = 1,
+} SchedPolicy;
+
+/*===========================================================================
+FUNCTION set_sched_policy
+
+DESCRIPTION
+ Local copy of this function which bypasses android set_sched_policy
+
+DEPENDENCIES
+ None
+
+RETURN VALUE
+ 0
+
+SIDE EFFECTS
+ N/A
+
+===========================================================================*/
+int set_sched_policy(int tid, SchedPolicy policy);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LOC_STUB_SCHED_POLICY_H__ */
+
diff --git a/gps/utils/platform_lib_abstractions/platform_lib_time.h b/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_time.h
index ce013af..271e2ff 100644
--- a/gps/utils/platform_lib_abstractions/platform_lib_time.h
+++ b/gps/utils/platform_lib_abstractions/loc_stub/include/loc_stub_time.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -26,10 +26,20 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef _PLATFORM_LIB_TIME_H_
-#define _PLATFORM_LIB_TIME_H_
+#ifndef __LOC_STUB_TIME_H__
+#define __LOC_STUB_TIME_H__
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
int64_t systemTime(int clock);
int64_t elapsedMillisSinceBoot();
-#endif
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LOC_STUB_TIME_H__ */
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/loc-stub.pc.in b/gps/utils/platform_lib_abstractions/loc_stub/loc-stub.pc.in
new file mode 100644
index 0000000..c2ae764
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/loc-stub.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: loc-stub
+Description: QTI GPS Location Stub
+Version: @VERSION
+Libs: -L${libdir} -lloc_stub
+Cflags: -I${includedir}/loc-stub
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/src/Android.mk b/gps/utils/platform_lib_abstractions/loc_stub/src/Android.mk
new file mode 100644
index 0000000..65fe021
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/src/Android.mk
@@ -0,0 +1,49 @@
+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 \
+ liblog
+
+LOCAL_SRC_FILES += \
+ loc_stub_android_runtime.cpp \
+ loc_stub_gettid.cpp \
+ loc_stub_property_service.cpp \
+ loc_stub_sched_policy.cpp \
+ loc_stub_time.cpp
+
+LOCAL_CFLAGS += \
+ -fno-short-enums \
+ -D_ANDROID_ \
+ -std=c++11
+
+
+LOCAL_LDFLAGS += -Wl,--export-dynamic
+
+## Includes
+LOCAL_C_INCLUDES:= \
+ $(LOCAL_PATH)/../include \
+
+
+LOCAL_COPY_HEADERS_TO:= libloc_stub/
+LOCAL_COPY_HEADERS:= \
+ ../include/loc_stub_android_runtime.h \
+ ../include/loc_stub_gettid.h \
+ ../include/loc_stub_property_service.h \
+ ../include/loc_stub_sched_policy.h \
+ ../include/loc_stub_time.h
+
+LOCAL_MODULE := libloc_stub
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_PRELINK_MODULE := false
+
+include $(BUILD_SHARED_LIBRARY)
+endif # not BUILD_TINY_ANDROID
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/src/Makefile.am b/gps/utils/platform_lib_abstractions/loc_stub/src/Makefile.am
new file mode 100644
index 0000000..8bda711
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/src/Makefile.am
@@ -0,0 +1,40 @@
+AM_CFLAGS = \
+ -I../include \
+ -D__func__=__PRETTY_FUNCTION__ \
+ -fno-short-enums
+
+libloc_stub_la_extra_h = \
+ ../include/utils/Log.h
+
+libloc_stub_la_c_sources = \
+ loc_stub_android_runtime.cpp \
+ loc_stub_gettid.cpp \
+ loc_stub_property_service.cpp \
+ loc_stub_sched_policy.cpp \
+ loc_stub_time.cpp
+
+libloc_stub_la_SOURCES = $(libloc_stub_la_c_sources) $(libloc_stub_la_extra_h)
+
+library_include_HEADERS = \
+ ../include/loc_stub_android_runtime.h \
+ ../include/loc_stub_gettid.h \
+ ../include/loc_stub_property_service.h \
+ ../include/loc_stub_sched_policy.h \
+ ../include/loc_stub_time.h
+
+library_includedir = $(pkgincludedir)
+
+if USE_GLIB
+libloc_stub_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libloc_stub_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libloc_stub_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libloc_stub_la_CFLAGS = $(AM_CFLAGS)
+libloc_stub_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
+libloc_stub_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+
+libloc_stub_la_LIBADD = -lstdc++ -ldl -llog
+
+#Create and Install libraries
+lib_LTLIBRARIES = libloc_stub.la
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_android_runtime.cpp b/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_android_runtime.cpp
new file mode 100644
index 0000000..1db69b2
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_android_runtime.cpp
@@ -0,0 +1,41 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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_stub_android_runtime.h"
+
+namespace android {
+
+pthread_t AndroidRuntime::createJavaThread(const char* name,
+ void (*start)(void *), void* arg)
+{
+ pthread_t threadId = 0;
+ pthread_create(&threadId, NULL, (void *(*)(void*))start, arg);
+ return threadId;
+}
+
+}
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_gettid.cpp b/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_gettid.cpp
new file mode 100644
index 0000000..55ef48a
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_gettid.cpp
@@ -0,0 +1,37 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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_stub_gettid.h"
+#include <sys/syscall.h>
+#include <unistd.h>
+
+// Required for off-target environment to compile properly
+pid_t gettid(void)
+{
+ return syscall(SYS_gettid);
+}
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_property_service.cpp b/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_property_service.cpp
new file mode 100644
index 0000000..f9d9e3e
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_property_service.cpp
@@ -0,0 +1,42 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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_stub_property_service.h"
+#include <stdio.h>
+#include <string.h>
+
+int property_get(const char *key, char * value, const char *default_value)
+{
+ /* This will disable gps interface
+ value[0] = '1';
+ */
+ if (strcmp(key, "ro.baseband") == 0) {
+ memcpy(value, "msm", 4);
+ }
+ return 0;
+}
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_sched_policy.cpp b/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_sched_policy.cpp
new file mode 100644
index 0000000..781be29
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_sched_policy.cpp
@@ -0,0 +1,50 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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_stub_sched_policy.h"
+
+/*===========================================================================
+FUNCTION set_sched_policy
+
+DESCRIPTION
+ Local copy of this function which bypasses android set_sched_policy
+
+DEPENDENCIES
+ None
+
+RETURN VALUE
+ 0
+
+SIDE EFFECTS
+ N/A
+
+===========================================================================*/
+int set_sched_policy(int tid, SchedPolicy policy)
+{
+ return 0;
+}
diff --git a/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_time.cpp b/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_time.cpp
new file mode 100644
index 0000000..82dc593
--- /dev/null
+++ b/gps/utils/platform_lib_abstractions/loc_stub/src/loc_stub_time.cpp
@@ -0,0 +1,46 @@
+/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation 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_stub_time.h"
+#include <stdlib.h>
+#include <sys/time.h>
+
+int64_t systemTime(int clock)
+{
+ struct timeval t;
+ t.tv_sec = t.tv_usec = 0;
+ gettimeofday(&t, NULL);
+ return t.tv_sec*1000000LL + t.tv_usec;
+}
+
+
+int64_t elapsedMillisSinceBoot()
+{
+ int64_t t_us = systemTime(0);
+ return (int64_t) t_us / 1000LL;
+}
diff --git a/healthd/Android.mk b/healthd/Android.mk
deleted file mode 100755
index b162bb4..0000000
--- a/healthd/Android.mk
+++ /dev/null
@@ -1,8 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := healthd_board_msm.cpp
-LOCAL_MODULE := libhealthd.zuk
-LOCAL_CFLAGS := -Werror
-LOCAL_C_INCLUDES := system/core/healthd bootable/recovery
-include $(BUILD_STATIC_LIBRARY)
diff --git a/healthd/healthd_board_msm.cpp b/healthd/healthd_board_msm.cpp
deleted file mode 100755
index d035d0f..0000000
--- a/healthd/healthd_board_msm.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- *Copyright (c) 2015, The Linux Foundation. All rights reserved.
- *
- *Redistribution and use in source and binary forms, with or without
- *modification, are permitted provided that the following conditions are
- *met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation 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 <dirent.h>
-#include <errno.h>
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <cutils/klog.h>
-#include <cutils/android_reboot.h>
-#include <healthd.h>
-#include "minui/minui.h"
-
-#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
-
-#define BACKLIGHT_PATH "/sys/class/leds/lcd-backlight/brightness"
-
-#define CHARGING_ENABLED_PATH "/sys/class/power_supply/battery/charging_enabled"
-
-#define LOGE(x...) do { KLOG_ERROR("charger", x); } while (0)
-#define LOGW(x...) do { KLOG_WARNING("charger", x); } while (0)
-#define LOGV(x...) do { KLOG_DEBUG("charger", x); } while (0)
-
-#define STR_LEN 8
-void healthd_board_mode_charger_draw_battery(
- struct android::BatteryProperties *batt_prop)
-{
- char cap_str[STR_LEN];
- int x, y;
- int str_len_px;
- static int char_height = -1, char_width = -1;
-
- if (char_height == -1 && char_width == -1)
- gr_font_size(&char_width, &char_height);
- snprintf(cap_str, (STR_LEN - 1), "%d%%", batt_prop->batteryLevel);
- str_len_px = gr_measure(cap_str);
- x = (gr_fb_width() - str_len_px) / 2;
- y = (gr_fb_height() + char_height) / 2;
- gr_color(0xa4, 0xc6, 0x39, 255);
- gr_text(x, y, cap_str, 0);
-}
-
-void healthd_board_mode_charger_battery_update(
- struct android::BatteryProperties*)
-{
-
-}
-
-#define BACKLIGHT_ON_LEVEL 100
-#define BACKLIGHT_OFF_LEVEL 0
-void healthd_board_mode_charger_set_backlight(bool en)
-{
- int fd;
- char buffer[10];
-
- if (access(BACKLIGHT_PATH, R_OK | W_OK) != 0)
- {
- LOGW("Backlight control not support\n");
- return;
- }
-
- memset(buffer, '\0', sizeof(buffer));
- fd = open(BACKLIGHT_PATH, O_RDWR);
- if (fd < 0) {
- LOGE("Could not open backlight node : %s\n", strerror(errno));
- goto cleanup;
- }
- LOGV("set backlight status to %d\n", en);
- if (en)
- snprintf(buffer, sizeof(buffer), "%d\n", BACKLIGHT_ON_LEVEL);
- else
- snprintf(buffer, sizeof(buffer), "%d\n", BACKLIGHT_OFF_LEVEL);
-
- if (write(fd, buffer,strlen(buffer)) < 0) {
- LOGE("Could not write to backlight node : %s\n", strerror(errno));
- goto cleanup;
- }
-cleanup:
- if (fd >= 0)
- close(fd);
-}
-
-void healthd_board_mode_charger_init()
-{
- int ret;
- char buff[8] = "\0";
- int charging_enabled = 0;
- int fd;
-
- /* check the charging is enabled or not */
- fd = open(CHARGING_ENABLED_PATH, O_RDONLY);
- if (fd < 0)
- return;
- ret = read(fd, buff, sizeof(buff));
- close(fd);
- if (ret > 0 && sscanf(buff, "%d\n", &charging_enabled)) {
- /* if charging is disabled, reboot and exit power off charging */
- if (charging_enabled)
- return;
- LOGW("android charging is disabled, exit!\n");
- android_reboot(ANDROID_RB_RESTART, 0, 0);
- }
-}
-
-void healthd_board_init(struct healthd_config*)
-{
- // use defaults
-}
-
-int healthd_board_battery_update(struct android::BatteryProperties*)
-{
- // return 0 to log periodic polled battery status to kernel log
- return 1;
-}
diff --git a/include/camera/CameraParametersExtra.h b/include/camera/CameraParametersExtra.h
new file mode 100644
index 0000000..a6466b2
--- /dev/null
+++ b/include/camera/CameraParametersExtra.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2016 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define CAMERA_PARAMETERS_EXTRA_C \
+const char CameraParameters::CLIENT_PACKAGE_NAME[] = "client-package-name";
+
+#define CAMERA_PARAMETERS_EXTRA_H \
+ static const char CLIENT_PACKAGE_NAME[];
diff --git a/init/Android.mk b/init/Android.mk
deleted file mode 100644
index ce0e39a..0000000
--- a/init/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Copyright (C) 2016 The CyanogenMod Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_C_INCLUDES := system/core/init
-LOCAL_SRC_FILES := init_z2_plus.cpp
-LOCAL_MODULE := libinit_z2_plus
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/init/init_z2_plus.cpp b/init/init_z2_plus.cpp
deleted file mode 100644
index 4046d0b..0000000
--- a/init/init_z2_plus.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- Copyright (c) 2016, The CyanogenMod Project
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation 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 <stdlib.h>
-#include <fcntl.h>
-
-#include "vendor_init.h"
-#include "property_service.h"
-#include "log.h"
-#include "util.h"
-
-static int read_file2(const char *fname, char *data, int max_size)
-{
- int fd, rc;
-
- if (max_size < 1)
- return 0;
-
- fd = open(fname, O_RDONLY);
- if (fd < 0) {
- ERROR("failed to open '%s'\n", fname);
- return 0;
- }
-
- rc = read(fd, data, max_size - 1);
- if ((rc > 0) && (rc < max_size))
- data[rc] = '\0';
- else
- data[0] = '\0';
- close(fd);
-
- return 1;
-}
-
-void init_alarm_boot_properties()
-{
- char const *alarm_file = "/proc/sys/kernel/boot_reason";
- char buf[64];
-
- if(read_file2(alarm_file, buf, sizeof(buf))) {
-
- /*
- * Setup ro.alarm_boot value to true when it is RTC triggered boot up
- * For existing PMIC chips, the following mapping applies
- * for the value of boot_reason:
- *
- * 0 -> unknown
- * 1 -> hard reset
- * 2 -> sudden momentary power loss (SMPL)
- * 3 -> real time clock (RTC)
- * 4 -> DC charger inserted
- * 5 -> USB charger insertd
- * 6 -> PON1 pin toggled (for secondary PMICs)
- * 7 -> CBLPWR_N pin toggled (for external power supply)
- * 8 -> KPDPWR_N pin toggled (power key pressed)
- */
- if(buf[0] == '3')
- {
- property_set("debug.sf.nobootanimation", "1");
- property_set("ro.alarm_boot", "true");
- }
- else
- property_set("ro.alarm_boot", "false");
- }
-}
-
-void vendor_load_properties() {
- char device[PROP_VALUE_MAX];
- char rf_version[PROP_VALUE_MAX];
- int rc;
-
- rc = property_get("ro.cm.device", device);
- if (!rc || strncmp(device, "z2_plus", PROP_VALUE_MAX))
- return;
-
-
- property_set("ro.product.model", "z2_plus");
-
-
- init_alarm_boot_properties();
-}
-
diff --git a/keylayout/fpc1020tp.kl b/keylayout/fpc1020tp.kl
index cb6998a..2b4e261 100644
--- a/keylayout/fpc1020tp.kl
+++ b/keylayout/fpc1020tp.kl
@@ -1,5 +1,5 @@
key 158 BACK VIRTUAL
-key 249 MENU
-key 254 APP_SWITCH
+key 249 APP_SWITCH
+key 254 MENU
key 183 HOME VIRTUAL
diff --git a/org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreKeyPairRSAGeneratorSpi.java b/org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreKeyPairRSAGeneratorSpi.java
deleted file mode 100644
index eaa89d9..0000000
--- a/org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreKeyPairRSAGeneratorSpi.java
+++ /dev/null
@@ -1,524 +0,0 @@
-package android.security.keystore;
-
-import android.app.ActivityThread;
-import android.app.Application;
-import android.content.Context;
-import android.os.Process;
-import android.security.Credentials;
-import android.security.KeyPairGeneratorSpec;
-import android.security.KeyStore;
-import android.security.KeyStore.State;
-import android.security.keymaster.KeyCharacteristics;
-import android.security.keymaster.KeymasterArguments;
-import android.security.keystore.KeyProperties.BlockMode;
-import android.security.keystore.KeyProperties.Digest;
-import android.security.keystore.KeyProperties.EncryptionPadding;
-import android.security.keystore.KeyProperties.KeyAlgorithm;
-import android.security.keystore.KeyProperties.Purpose;
-import android.security.keystore.KeyProperties.SignaturePadding;
-import android.util.Log;
-import com.android.internal.util.ArrayUtils;
-import com.android.org.bouncycastle.asn1.ASN1EncodableVector;
-import com.android.org.bouncycastle.asn1.ASN1InputStream;
-import com.android.org.bouncycastle.asn1.ASN1Integer;
-import com.android.org.bouncycastle.asn1.DERBitString;
-import com.android.org.bouncycastle.asn1.DERInteger;
-import com.android.org.bouncycastle.asn1.DERNull;
-import com.android.org.bouncycastle.asn1.DERSequence;
-import com.android.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier;
-import com.android.org.bouncycastle.asn1.x509.Certificate;
-import com.android.org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
-import com.android.org.bouncycastle.asn1.x509.TBSCertificate;
-import com.android.org.bouncycastle.asn1.x509.Time;
-import com.android.org.bouncycastle.asn1.x509.V3TBSCertificateGenerator;
-import com.android.org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
-import com.android.org.bouncycastle.jce.X509Principal;
-import com.android.org.bouncycastle.jce.provider.X509CertificateObject;
-import com.android.org.bouncycastle.x509.X509V3CertificateGenerator;
-import java.math.BigInteger;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.KeyPair;
-import java.security.KeyPairGeneratorSpi;
-import java.security.PrivateKey;
-import java.security.ProviderException;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.X509Certificate;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.RSAKeyGenParameterSpec;
-import java.util.HashSet;
-import java.util.Set;
-import libcore.util.EmptyArray;
-
-public class SoterKeyStoreKeyPairRSAGeneratorSpi extends KeyPairGeneratorSpi {
- private static final int RSA_DEFAULT_KEY_SIZE = 2048;
- private static final int RSA_MAX_KEY_SIZE = 8192;
- private static final int RSA_MIN_KEY_SIZE = 512;
- public static final long UINT32_MAX_VALUE = 4294967295L;
- private static final long UINT32_RANGE = 4294967296L;
- private static final BigInteger UINT64_RANGE = BigInteger.ONE.shiftLeft(64);
- public static final BigInteger UINT64_MAX_VALUE = UINT64_RANGE.subtract(BigInteger.ONE);
- private static volatile SecureRandom sRng;
- private boolean isAutoAddCounterWhenGetPublicKey = false;
- private boolean isAutoSignedWithAttkWhenGetPublicKey = false;
- private boolean isAutoSignedWithCommonkWhenGetPublicKey = false;
- private boolean isForSoter = false;
- private boolean isNeedNextAttk = false;
- private boolean isSecmsgFidCounterSignedWhenSign = false;
- private String mAutoSignedKeyNameWhenGetPublicKey = "";
- private boolean mEncryptionAtRestRequired;
- private String mEntryAlias;
- private String mJcaKeyAlgorithm;
- private int mKeySizeBits;
- private KeyStore mKeyStore;
- private int mKeymasterAlgorithm = -1;
- private int[] mKeymasterBlockModes;
- private int[] mKeymasterDigests;
- private int[] mKeymasterEncryptionPaddings;
- private int[] mKeymasterPurposes;
- private int[] mKeymasterSignaturePaddings;
- private final int mOriginalKeymasterAlgorithm = 1;
- private BigInteger mRSAPublicExponent;
- private SecureRandom mRng;
- private KeyGenParameterSpec mSpec;
-
- public void initialize(int keysize, SecureRandom random) {
- throw new IllegalArgumentException(KeyGenParameterSpec.class.getName() + " required to initialize this KeyPairGenerator");
- }
-
- public void initialize(AlgorithmParameterSpec params, SecureRandom random) throws InvalidAlgorithmParameterException {
- resetAll();
- if (params == null) {
- try {
- throw new InvalidAlgorithmParameterException("Must supply params of type " + KeyGenParameterSpec.class.getName() + " or " + KeyPairGeneratorSpec.class.getName());
- } catch (Throwable th) {
- if (!false) {
- resetAll();
- }
- }
- } else {
- int keymasterAlgorithm = this.mOriginalKeymasterAlgorithm;
- if (params instanceof KeyGenParameterSpec) {
- KeyGenParameterSpec spec = (KeyGenParameterSpec) params;
- this.mEntryAlias = SoterUtil.getPureKeyAliasFromKeyName(spec.getKeystoreAlias());
- this.mSpec = spec;
- this.mKeymasterAlgorithm = keymasterAlgorithm;
- this.mEncryptionAtRestRequired = false;
- this.mKeySizeBits = spec.getKeySize();
- initAlgorithmSpecificParameters();
- if (this.mKeySizeBits == -1) {
- this.mKeySizeBits = getDefaultKeySize(keymasterAlgorithm);
- }
- checkValidKeySize(keymasterAlgorithm, this.mKeySizeBits);
- if (spec.getKeystoreAlias() == null) {
- throw new InvalidAlgorithmParameterException("KeyStore entry alias not provided");
- }
- try {
- String jcaKeyAlgorithm = KeyAlgorithm.fromKeymasterAsymmetricKeyAlgorithm(keymasterAlgorithm);
- this.mKeymasterPurposes = Purpose.allToKeymaster(spec.getPurposes());
- this.mKeymasterBlockModes = BlockMode.allToKeymaster(spec.getBlockModes());
- this.mKeymasterEncryptionPaddings = EncryptionPadding.allToKeymaster(spec.getEncryptionPaddings());
- if ((spec.getPurposes() & 1) != 0 && spec.isRandomizedEncryptionRequired()) {
- int[] arr$ = this.mKeymasterEncryptionPaddings;
- int len$ = arr$.length;
- int i$ = 0;
- while (i$ < len$) {
- int keymasterPadding = arr$[i$];
- if (isKeymasterPaddingSchemeIndCpaCompatibleWithAsymmetricCrypto(keymasterPadding)) {
- i$++;
- } else {
- throw new InvalidAlgorithmParameterException("Randomized encryption (IND-CPA) required but may be violated by padding scheme: " + EncryptionPadding.fromKeymaster(keymasterPadding) + ". See " + KeyGenParameterSpec.class.getName() + " documentation.");
- }
- }
- }
- this.mKeymasterSignaturePaddings = SignaturePadding.allToKeymaster(spec.getSignaturePaddings());
- if (spec.isDigestsSpecified()) {
- this.mKeymasterDigests = Digest.allToKeymaster(spec.getDigests());
- } else {
- this.mKeymasterDigests = EmptyArray.INT;
- }
- KeymasterUtils.addUserAuthArgs(new KeymasterArguments(), this.mSpec.isUserAuthenticationRequired(), this.mSpec.getUserAuthenticationValidityDurationSeconds());
- this.mJcaKeyAlgorithm = jcaKeyAlgorithm;
- this.mRng = random;
- this.mKeyStore = KeyStore.getInstance();
- if (!true) {
- resetAll();
- return;
- }
- return;
- } catch (RuntimeException e) {
- throw new InvalidAlgorithmParameterException(e);
- }
- }
- throw new InvalidAlgorithmParameterException("Unsupported params class: " + params.getClass().getName() + ". Supported: " + KeyGenParameterSpec.class.getName() + ", " + KeyPairGeneratorSpec.class.getName());
- }
- }
-
- private void resetAll() {
- this.mEntryAlias = null;
- this.mJcaKeyAlgorithm = null;
- this.mKeymasterAlgorithm = -1;
- this.mKeymasterPurposes = null;
- this.mKeymasterBlockModes = null;
- this.mKeymasterEncryptionPaddings = null;
- this.mKeymasterSignaturePaddings = null;
- this.mKeymasterDigests = null;
- this.mKeySizeBits = 0;
- this.mSpec = null;
- this.mRSAPublicExponent = null;
- this.mEncryptionAtRestRequired = false;
- this.mRng = null;
- this.mKeyStore = null;
- this.isForSoter = false;
- this.isAutoSignedWithAttkWhenGetPublicKey = false;
- this.isAutoSignedWithCommonkWhenGetPublicKey = false;
- this.mAutoSignedKeyNameWhenGetPublicKey = "";
- this.isSecmsgFidCounterSignedWhenSign = false;
- this.isAutoAddCounterWhenGetPublicKey = false;
- this.isNeedNextAttk = false;
- }
-
- private void initAlgorithmSpecificParameters() throws InvalidAlgorithmParameterException {
- AlgorithmParameterSpec algSpecificSpec = this.mSpec.getAlgorithmParameterSpec();
- BigInteger publicExponent = RSAKeyGenParameterSpec.F4;
- if (algSpecificSpec instanceof RSAKeyGenParameterSpec) {
- RSAKeyGenParameterSpec rsaSpec = (RSAKeyGenParameterSpec) algSpecificSpec;
- if (this.mKeySizeBits == -1) {
- this.mKeySizeBits = rsaSpec.getKeysize();
- } else if (this.mKeySizeBits != rsaSpec.getKeysize()) {
- throw new InvalidAlgorithmParameterException("RSA key size must match between " + this.mSpec + " and " + algSpecificSpec + ": " + this.mKeySizeBits + " vs " + rsaSpec.getKeysize());
- }
- publicExponent = rsaSpec.getPublicExponent();
- if (publicExponent.compareTo(BigInteger.ZERO) < 1) {
- throw new InvalidAlgorithmParameterException("RSA public exponent must be positive: " + publicExponent);
- } else if (publicExponent.compareTo(UINT64_MAX_VALUE) > 0) {
- throw new InvalidAlgorithmParameterException("Unsupported RSA public exponent: " + publicExponent + ". Maximum supported value: " + UINT64_MAX_VALUE);
- }
- }
- this.mRSAPublicExponent = publicExponent;
- SoterRSAKeyGenParameterSpec soterSpec = SoterUtil.convertKeyNameToParameterSpec(this.mSpec.getKeystoreAlias());
- if (soterSpec != null) {
- this.isForSoter = soterSpec.isForSoter();
- this.isAutoSignedWithAttkWhenGetPublicKey = soterSpec.isAutoSignedWithAttkWhenGetPublicKey();
- this.isAutoSignedWithCommonkWhenGetPublicKey = soterSpec.isAutoSignedWithCommonkWhenGetPublicKey();
- this.mAutoSignedKeyNameWhenGetPublicKey = soterSpec.getAutoSignedKeyNameWhenGetPublicKey();
- this.isSecmsgFidCounterSignedWhenSign = soterSpec.isSecmsgFidCounterSignedWhenSign();
- this.isAutoAddCounterWhenGetPublicKey = soterSpec.isAutoAddCounterWhenGetPublicKey();
- this.isNeedNextAttk = soterSpec.isNeedUseNextAttk();
- }
- }
-
- public KeyPair generateKeyPair() {
- if (this.mKeyStore == null || this.mSpec == null) {
- throw new IllegalStateException("Not initialized");
- }
- int flags = this.mEncryptionAtRestRequired ? 1 : 0;
- if ((flags & 1) == 0 || this.mKeyStore.state() == State.UNLOCKED) {
- KeymasterArguments args = new KeymasterArguments();
- args.addUnsignedInt(805306371, (long) this.mKeySizeBits);
- args.addEnum(268435458, this.mKeymasterAlgorithm);
- args.addEnums(536870913, this.mKeymasterPurposes);
- args.addEnums(536870916, this.mKeymasterBlockModes);
- args.addEnums(536870918, this.mKeymasterEncryptionPaddings);
- args.addEnums(536870918, this.mKeymasterSignaturePaddings);
- args.addEnums(536870917, this.mKeymasterDigests);
- KeymasterUtils.addUserAuthArgs(args, this.mSpec.isUserAuthenticationRequired(), this.mSpec.getUserAuthenticationValidityDurationSeconds());
- if (this.mSpec.getKeyValidityStart() != null) {
- args.addDate(1610613136, this.mSpec.getKeyValidityStart());
- }
- if (this.mSpec.getKeyValidityForOriginationEnd() != null) {
- args.addDate(1610613137, this.mSpec.getKeyValidityForOriginationEnd());
- }
- if (this.mSpec.getKeyValidityForConsumptionEnd() != null) {
- args.addDate(1610613138, this.mSpec.getKeyValidityForConsumptionEnd());
- }
- addAlgorithmSpecificParameters(args);
- byte[] additionalEntropy = getRandomBytesToMixIntoKeystoreRng(this.mRng, (this.mKeySizeBits + 7) / 8);
- String privateKeyAlias = "USRPKEY_" + this.mEntryAlias;
- try {
- Credentials.deleteAllTypesForAlias(this.mKeyStore, this.mEntryAlias);
- int errorCode = this.mKeyStore.generateKey(privateKeyAlias, args, additionalEntropy, flags, new KeyCharacteristics());
- if (errorCode != 1) {
- throw new ProviderException("Failed to generate key pair", KeyStore.getKeyStoreException(errorCode));
- }
- KeyPair result = SoterKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(this.mKeyStore, privateKeyAlias);
- if (this.mJcaKeyAlgorithm.equalsIgnoreCase(result.getPrivate().getAlgorithm())) {
- if (this.mKeyStore.put("USRCERT_" + this.mEntryAlias, generateSelfSignedCertificate(result.getPrivate(), result.getPublic()).getEncoded(), -1, flags)) {
- if (!true) {
- Credentials.deleteAllTypesForAlias(this.mKeyStore, this.mEntryAlias);
- }
- return result;
- }
- throw new ProviderException("Failed to store self-signed certificate");
- }
- throw new ProviderException("Generated key pair algorithm does not match requested algorithm: " + result.getPrivate().getAlgorithm() + " vs " + this.mJcaKeyAlgorithm);
- } catch (CertificateEncodingException e) {
- throw new ProviderException("Failed to obtain encoded form of self-signed certificate", e);
- } catch (UnrecoverableKeyException e) {
- throw new ProviderException("Failed to load generated key pair from keystore", e);
- } catch (Exception e) {
- Credentials.deleteAllTypesForAlias(this.mKeyStore, this.mEntryAlias);
- throw new ProviderException("Failed to generate self-signed certificate", e);
- }
- } else {
- throw new IllegalStateException("Encryption at rest using secure lock screen credential requested for key pair, but the user has not yet entered the credential");
- }
- }
-
- static byte[] getRandomBytesToMixIntoKeystoreRng(SecureRandom rng, int sizeBytes) {
- if (sizeBytes <= 0) {
- return EmptyArray.BYTE;
- }
- if (rng == null) {
- rng = getRng();
- }
- byte[] result = new byte[sizeBytes];
- rng.nextBytes(result);
- return result;
- }
-
- private static SecureRandom getRng() {
- if (sRng == null) {
- sRng = new SecureRandom();
- }
- return sRng;
- }
-
- private void addAlgorithmSpecificParameters(KeymasterArguments keymasterArgs) {
- if (this.mRSAPublicExponent != null) {
- keymasterArgs.addUnsignedLong(1342177480, this.mRSAPublicExponent);
- }
- if (this.isForSoter) {
- keymasterArgs.addBoolean(1879059192);
- keymasterArgs.addUnsignedInt(805317375, (long) Process.myUid());
- }
- if (this.isAutoSignedWithAttkWhenGetPublicKey) {
- keymasterArgs.addBoolean(1879059193);
- }
- if (this.isAutoSignedWithCommonkWhenGetPublicKey) {
- keymasterArgs.addBoolean(1879059194);
- if (!SoterUtil.isNullOrNil(this.mAutoSignedKeyNameWhenGetPublicKey)) {
- keymasterArgs.addBytes(-1879037189, ("USRPKEY_" + this.mAutoSignedKeyNameWhenGetPublicKey).getBytes());
- }
- }
- if (this.isAutoAddCounterWhenGetPublicKey) {
- keymasterArgs.addBoolean(1879059196);
- }
- if (this.isSecmsgFidCounterSignedWhenSign) {
- keymasterArgs.addBoolean(1879059197);
- }
- if (this.isNeedNextAttk) {
- keymasterArgs.addBoolean(1879059198);
- }
- }
-
- private X509Certificate generateSelfSignedCertificate(PrivateKey privateKey, PublicKey publicKey) throws Exception {
- Log.d("Soter", "generateSelfSignedCertificate");
- String signatureAlgorithm = getCertificateSignatureAlgorithm(this.mKeymasterAlgorithm, this.mKeySizeBits, this.mSpec);
- if (signatureAlgorithm == null) {
- Log.d("Soter", "generateSelfSignedCertificateWithFakeSignature1");
- return generateSelfSignedCertificateWithFakeSignature(publicKey);
- }
- try {
- Log.d("Soter", "generateSelfSignedCertificateWithValidSignature");
- return generateSelfSignedCertificateWithValidSignature(privateKey, publicKey, signatureAlgorithm);
- } catch (Exception e) {
- Log.d("Soter", "generateSelfSignedCertificateWithFakeSignature2");
- return generateSelfSignedCertificateWithFakeSignature(publicKey);
- }
- }
-
- private byte[] getRealKeyBlobByKeyName(String keyName) {
- Log.d("Soter", "start retrieve key blob by key name: " + keyName);
- return this.mKeyStore.get("USRPKEY_" + keyName);
- }
-
- private X509Certificate generateSelfSignedCertificateWithValidSignature(PrivateKey privateKey, PublicKey publicKey, String signatureAlgorithm) throws Exception {
- X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();
- certGen.setPublicKey(publicKey);
- certGen.setSerialNumber(this.mSpec.getCertificateSerialNumber());
- certGen.setSubjectDN(this.mSpec.getCertificateSubject());
- certGen.setIssuerDN(this.mSpec.getCertificateSubject());
- certGen.setNotBefore(this.mSpec.getCertificateNotBefore());
- certGen.setNotAfter(this.mSpec.getCertificateNotAfter());
- certGen.setSignatureAlgorithm(signatureAlgorithm);
- return certGen.generate(privateKey);
- }
-
- private X509Certificate generateSelfSignedCertificateWithFakeSignature(PublicKey publicKey) throws Exception {
- AlgorithmIdentifier sigAlgId;
- byte[] signature;
- V3TBSCertificateGenerator tbsGenerator = new V3TBSCertificateGenerator();
- switch (this.mKeymasterAlgorithm) {
- case 1:
- sigAlgId = new AlgorithmIdentifier(PKCSObjectIdentifiers.sha256WithRSAEncryption, DERNull.INSTANCE);
- signature = new byte[1];
- break;
- case 3:
- sigAlgId = new AlgorithmIdentifier(X9ObjectIdentifiers.ecdsa_with_SHA256);
- ASN1EncodableVector v = new ASN1EncodableVector();
- v.add(new DERInteger(0));
- v.add(new DERInteger(0));
- signature = new DERSequence().getEncoded();
- break;
- default:
- throw new ProviderException("Unsupported key algorithm: " + this.mKeymasterAlgorithm);
- }
- ASN1InputStream publicKeyInfoIn = new ASN1InputStream(publicKey.getEncoded());
- Throwable th2 = null;
- try {
- tbsGenerator.setSubjectPublicKeyInfo(SubjectPublicKeyInfo.getInstance(publicKeyInfoIn.readObject()));
- if (publicKeyInfoIn != null) {
- if (th2 != null) {
- try {
- publicKeyInfoIn.close();
- } catch (Throwable x2) {
- th2.addSuppressed(x2);
- }
- } else {
- publicKeyInfoIn.close();
- }
- }
- tbsGenerator.setSerialNumber(new ASN1Integer(this.mSpec.getCertificateSerialNumber()));
- X509Principal subject = new X509Principal(this.mSpec.getCertificateSubject().getEncoded());
- tbsGenerator.setSubject(subject);
- tbsGenerator.setIssuer(subject);
- tbsGenerator.setStartDate(new Time(this.mSpec.getCertificateNotBefore()));
- tbsGenerator.setEndDate(new Time(this.mSpec.getCertificateNotAfter()));
- tbsGenerator.setSignature(sigAlgId);
- TBSCertificate tbsCertificate = tbsGenerator.generateTBSCertificate();
- ASN1EncodableVector result = new ASN1EncodableVector();
- result.add(tbsCertificate);
- result.add(sigAlgId);
- result.add(new DERBitString(signature));
- return new X509CertificateObject(Certificate.getInstance(new DERSequence(result)));
- } finally {
- if (publicKeyInfoIn != null) {
- publicKeyInfoIn.close();
- }
- }
- }
-
- private static int getDefaultKeySize(int keymasterAlgorithm) {
- return RSA_DEFAULT_KEY_SIZE;
- }
-
- private static void checkValidKeySize(int keymasterAlgorithm, int keySize) throws InvalidAlgorithmParameterException {
- if (keySize < RSA_MIN_KEY_SIZE || keySize > RSA_MAX_KEY_SIZE) {
- throw new InvalidAlgorithmParameterException("RSA key size must be >= 512 and <= 8192");
- }
- }
-
- private static String getCertificateSignatureAlgorithm(int keymasterAlgorithm, int keySizeBits, KeyGenParameterSpec spec) {
- if ((spec.getPurposes() & 4) == 0) {
- return null;
- }
- if (spec.isUserAuthenticationRequired()) {
- return null;
- }
- if (!spec.isDigestsSpecified()) {
- return null;
- }
- if (!ArrayUtils.contains(SignaturePadding.allToKeymaster(spec.getSignaturePaddings()), 5)) {
- return null;
- }
- int maxDigestOutputSizeBits = keySizeBits - 240;
- int bestKeymasterDigest = -1;
- int bestDigestOutputSizeBits = -1;
- for (Integer intValue : getAvailableKeymasterSignatureDigests(spec.getDigests(), getSupportedEcdsaSignatureDigests())) {
- int keymasterDigest = intValue.intValue();
- int outputSizeBits = getDigestOutputSizeBits(keymasterDigest);
- if (outputSizeBits <= maxDigestOutputSizeBits) {
- if (bestKeymasterDigest == -1) {
- bestKeymasterDigest = keymasterDigest;
- bestDigestOutputSizeBits = outputSizeBits;
- } else if (outputSizeBits > bestDigestOutputSizeBits) {
- bestKeymasterDigest = keymasterDigest;
- bestDigestOutputSizeBits = outputSizeBits;
- }
- }
- }
- if (bestKeymasterDigest == -1) {
- return null;
- }
- return Digest.fromKeymasterToSignatureAlgorithmDigest(bestKeymasterDigest) + "WithRSA";
- }
-
- private static String[] getSupportedEcdsaSignatureDigests() {
- return new String[]{"NONE", "SHA-1", "SHA-224", "SHA-256", "SHA-384", "SHA-512"};
- }
-
- private static Set<Integer> getAvailableKeymasterSignatureDigests(String[] authorizedKeyDigests, String[] supportedSignatureDigests) {
- Set<Integer> authorizedKeymasterKeyDigests = new HashSet();
- for (int keymasterDigest : Digest.allToKeymaster(authorizedKeyDigests)) {
- authorizedKeymasterKeyDigests.add(Integer.valueOf(keymasterDigest));
- }
- Set<Integer> supportedKeymasterSignatureDigests = new HashSet();
- for (int keymasterDigest2 : Digest.allToKeymaster(supportedSignatureDigests)) {
- supportedKeymasterSignatureDigests.add(Integer.valueOf(keymasterDigest2));
- }
- Set<Integer> result = new HashSet(supportedKeymasterSignatureDigests);
- result.retainAll(authorizedKeymasterKeyDigests);
- return result;
- }
-
- public static int getDigestOutputSizeBits(int keymasterDigest) {
- switch (keymasterDigest) {
- case 0:
- return -1;
- case 1:
- return 128;
- case 2:
- return 160;
- case 3:
- return 224;
- case 4:
- return 256;
- case 5:
- return 384;
- case 6:
- return RSA_MIN_KEY_SIZE;
- default:
- throw new IllegalArgumentException("Unknown digest: " + keymasterDigest);
- }
- }
-
- public static BigInteger toUint64(long value) {
- if (value >= 0) {
- return BigInteger.valueOf(value);
- }
- return BigInteger.valueOf(value).add(UINT64_RANGE);
- }
-
- public static boolean isKeymasterPaddingSchemeIndCpaCompatibleWithAsymmetricCrypto(int keymasterPadding) {
- switch (keymasterPadding) {
- case 1:
- return false;
- case 2:
- case 4:
- return true;
- default:
- throw new IllegalArgumentException("Unsupported asymmetric encryption padding scheme: " + keymasterPadding);
- }
- }
-
- public static Context getApplicationContext() {
- Application application = ActivityThread.currentApplication();
- if (application != null) {
- return application;
- }
- throw new IllegalStateException("Failed to obtain application Context from ActivityThread");
- }
-
- public static byte[] intToByteArray(int value) {
- ByteBuffer converter = ByteBuffer.allocate(4);
- converter.order(ByteOrder.nativeOrder());
- converter.putInt(value);
- return converter.array();
- }
-}
diff --git a/org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreProvider.java b/org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreProvider.java
deleted file mode 100644
index 7b3cbdc..0000000
--- a/org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreProvider.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package android.security.keystore;
-
-import android.security.KeyStore;
-import android.security.keymaster.ExportResult;
-import android.security.keymaster.KeyCharacteristics;
-import android.security.keystore.KeyProperties.KeyAlgorithm;
-import android.util.Log;
-import java.security.KeyFactory;
-import java.security.KeyPair;
-import java.security.NoSuchAlgorithmException;
-import java.security.Provider;
-import java.security.ProviderException;
-import java.security.PublicKey;
-import java.security.Security;
-import java.security.UnrecoverableKeyException;
-import java.security.interfaces.ECKey;
-import java.security.interfaces.ECPublicKey;
-import java.security.interfaces.RSAKey;
-import java.security.interfaces.RSAPublicKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.X509EncodedKeySpec;
-import org.json.JSONException;
-
-public class SoterKeyStoreProvider extends Provider {
- private static final String ANDROID_PACKAGE_NAME = "android.security.keystore";
- public static final String PROVIDER_NAME = "SoterKeyStore";
- private static final String SOTER_PACKAGE_NAME = "android.security.keystore";
-
- public SoterKeyStoreProvider() {
- super(PROVIDER_NAME, 1.0d, "provider for soter");
- put("KeyPairGenerator.RSA", "android.security.keystore.SoterKeyStoreKeyPairRSAGeneratorSpi");
- put("KeyStore.SoterKeyStore", "android.security.keystore.SoterKeyStoreSpi");
- putKeyFactoryImpl("RSA");
- }
-
- private void putKeyFactoryImpl(String algorithm) {
- put("KeyFactory." + algorithm, "android.security.keystore.AndroidKeyStoreKeyFactorySpi");
- }
-
- public static void install() {
- Security.addProvider(new SoterKeyStoreProvider());
- }
-
- public static AndroidKeyStorePrivateKey getAndroidKeyStorePrivateKey(AndroidKeyStorePublicKey publicKey) {
- String keyAlgorithm = publicKey.getAlgorithm();
- if ("EC".equalsIgnoreCase(keyAlgorithm)) {
- return new AndroidKeyStoreECPrivateKey(publicKey.getAlias(), ((ECKey) publicKey).getParams());
- }
- if ("RSA".equalsIgnoreCase(keyAlgorithm)) {
- return new AndroidKeyStoreRSAPrivateKey(publicKey.getAlias(), ((RSAKey) publicKey).getModulus());
- }
- throw new ProviderException("Unsupported Android Keystore public key algorithm: " + keyAlgorithm);
- }
-
- public static AndroidKeyStorePublicKey loadAndroidKeyStorePublicKeyFromKeystore(KeyStore keyStore, String privateKeyAlias) throws UnrecoverableKeyException {
- KeyCharacteristics keyCharacteristics = new KeyCharacteristics();
- int errorCode = keyStore.getKeyCharacteristics(privateKeyAlias, null, null, keyCharacteristics);
- if (errorCode != 1) {
- throw ((UnrecoverableKeyException) new UnrecoverableKeyException("Failed to obtain information about private key").initCause(KeyStore.getKeyStoreException(errorCode)));
- }
- ExportResult exportResult = keyStore.exportKey(privateKeyAlias, 0, null, null);
- if (exportResult.resultCode != 1) {
- throw ((UnrecoverableKeyException) new UnrecoverableKeyException("Failed to obtain X.509 form of public key").initCause(KeyStore.getKeyStoreException(errorCode)));
- }
- byte[] x509EncodedPublicKey = exportResult.exportData;
- Integer keymasterAlgorithm = keyCharacteristics.getEnum(268435458);
- if (keymasterAlgorithm == null) {
- throw new UnrecoverableKeyException("Key algorithm unknown");
- }
- try {
- return getAndroidKeyStorePublicKey(privateKeyAlias, KeyAlgorithm.fromKeymasterAsymmetricKeyAlgorithm(keymasterAlgorithm.intValue()), x509EncodedPublicKey);
- } catch (IllegalArgumentException e) {
- throw ((UnrecoverableKeyException) new UnrecoverableKeyException("Failed to load private key").initCause(e));
- }
- }
-
- public static KeyPair loadAndroidKeyStoreKeyPairFromKeystore(KeyStore keyStore, String privateKeyAlias) throws UnrecoverableKeyException {
- AndroidKeyStorePublicKey publicKey = loadAndroidKeyStorePublicKeyFromKeystore(keyStore, privateKeyAlias);
- return new KeyPair(publicKey, getAndroidKeyStorePrivateKey(publicKey));
- }
-
- public static AndroidKeyStorePublicKey getAndroidKeyStorePublicKey(String alias, String keyAlgorithm, byte[] x509EncodedForm) {
- try {
- KeyFactory keyFactory = KeyFactory.getInstance(keyAlgorithm);
- byte[] realPublicKey = SoterUtil.getDataFromRaw(x509EncodedForm, SoterUtil.JSON_KEY_PUBLIC);
- if (realPublicKey != null) {
- PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(realPublicKey));
- if ("EC".equalsIgnoreCase(keyAlgorithm)) {
- Log.d("Soter", "AndroidKeyStoreECPublicKey");
- return new AndroidKeyStoreECPublicKey(alias, (ECPublicKey) publicKey);
- } else if ("RSA".equalsIgnoreCase(keyAlgorithm)) {
- Log.d("Soter", "AndroidKeyStoreRSAPublicKey");
- return new AndroidKeyStoreRSAPublicKey(alias, (RSAPublicKey) publicKey);
- } else {
- throw new ProviderException("Unsupported Android Keystore public key algorithm: " + keyAlgorithm);
- }
- }
- throw new NullPointerException("invalid soter public key");
- } catch (NoSuchAlgorithmException e) {
- throw new ProviderException("Failed to obtain " + keyAlgorithm + " KeyFactory", e);
- } catch (InvalidKeySpecException e2) {
- throw new ProviderException("Invalid X.509 encoding of public key", e2);
- } catch (JSONException e3) {
- throw new ProviderException("Not in json format");
- }
- }
-
- public static AndroidKeyStorePrivateKey loadAndroidKeyStorePrivateKeyFromKeystore(KeyStore keyStore, String privateKeyAlias) throws UnrecoverableKeyException {
- return (AndroidKeyStorePrivateKey) loadAndroidKeyStoreKeyPairFromKeystore(keyStore, privateKeyAlias).getPrivate();
- }
-
- public static AndroidKeyStorePublicKey loadJsonPublicKeyFromKeystore(KeyStore keyStore, String privateKeyAlias) throws UnrecoverableKeyException {
- KeyCharacteristics keyCharacteristics = new KeyCharacteristics();
- int errorCode = keyStore.getKeyCharacteristics(privateKeyAlias, null, null, keyCharacteristics);
- if (errorCode != 1) {
- throw ((UnrecoverableKeyException) new UnrecoverableKeyException("Failed to obtain information about private key").initCause(KeyStore.getKeyStoreException(errorCode)));
- }
- ExportResult exportResult = keyStore.exportKey(privateKeyAlias, 0, null, null);
- if (exportResult.resultCode != 1) {
- throw ((UnrecoverableKeyException) new UnrecoverableKeyException("Failed to obtain X.509 form of public key").initCause(KeyStore.getKeyStoreException(errorCode)));
- }
- byte[] x509EncodedPublicKey = exportResult.exportData;
- Integer keymasterAlgorithm = keyCharacteristics.getEnum(268435458);
- if (keymasterAlgorithm == null) {
- throw new UnrecoverableKeyException("Key algorithm unknown");
- }
- try {
- return getJsonPublicKey(privateKeyAlias, KeyAlgorithm.fromKeymasterAsymmetricKeyAlgorithm(keymasterAlgorithm.intValue()), x509EncodedPublicKey);
- } catch (IllegalArgumentException e) {
- throw ((UnrecoverableKeyException) new UnrecoverableKeyException("Failed to load private key").initCause(e));
- }
- }
-
- public static AndroidKeyStorePublicKey getJsonPublicKey(String alias, String keyAlgorithm, byte[] x509EncodedForm) {
- try {
- KeyFactory keyFactory = KeyFactory.getInstance(keyAlgorithm);
- byte[] realPublicKey = SoterUtil.getDataFromRaw(x509EncodedForm, SoterUtil.JSON_KEY_PUBLIC);
- if (realPublicKey != null) {
- PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(realPublicKey));
- if ("EC".equalsIgnoreCase(keyAlgorithm)) {
- Log.d("Soter", "AndroidKeyStoreECPublicKey");
- return new AndroidKeyStoreECPublicKey(alias, (ECPublicKey) publicKey);
- } else if ("RSA".equalsIgnoreCase(keyAlgorithm)) {
- Log.d("Soter", "getJsonPublicKey");
- RSAPublicKey rsaPubKey = (RSAPublicKey) publicKey;
- return new AndroidKeyStoreRSAPublicKey(alias, x509EncodedForm, rsaPubKey.getModulus(), rsaPubKey.getPublicExponent());
- } else {
- throw new ProviderException("Unsupported Android Keystore public key algorithm: " + keyAlgorithm);
- }
- }
- throw new NullPointerException("invalid soter public key");
- } catch (NoSuchAlgorithmException e) {
- throw new ProviderException("Failed to obtain " + keyAlgorithm + " KeyFactory", e);
- } catch (InvalidKeySpecException e2) {
- throw new ProviderException("Invalid X.509 encoding of public key", e2);
- } catch (JSONException e3) {
- throw new ProviderException("Not in json format");
- }
- }
-}
diff --git a/org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreSpi.java b/org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreSpi.java
deleted file mode 100644
index 52b1966..0000000
--- a/org.ifaa.android.manager/src/android/security/keystore/SoterKeyStoreSpi.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package android.security.keystore;
-
-import android.security.KeyStore;
-import java.security.Key;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.UnrecoverableKeyException;
-
-public class SoterKeyStoreSpi extends AndroidKeyStoreSpi {
- private KeyStore mKeyStore;
-
- public SoterKeyStoreSpi() {
- this.mKeyStore = null;
- this.mKeyStore = KeyStore.getInstance();
- }
-
- public Key engineGetKey(String alias, char[] password) throws NoSuchAlgorithmException, UnrecoverableKeyException {
- if (isPrivateKeyEntry(alias)) {
- String privateKeyAlias = "USRPKEY_" + alias;
- if (password == null || !"from_soter_ui".equals(String.valueOf(password))) {
- return SoterKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(this.mKeyStore, privateKeyAlias);
- }
- return SoterKeyStoreProvider.loadJsonPublicKeyFromKeystore(this.mKeyStore, privateKeyAlias);
- } else if (!isSecretKeyEntry(alias)) {
- return null;
- } else {
- return AndroidKeyStoreProvider.loadAndroidKeyStoreSecretKeyFromKeystore(this.mKeyStore, "USRSKEY_" + alias);
- }
- }
-
- private boolean isPrivateKeyEntry(String alias) {
- if (alias != null) {
- return this.mKeyStore.contains("USRPKEY_" + alias);
- }
- throw new NullPointerException("alias == null");
- }
-
- private boolean isSecretKeyEntry(String alias) {
- if (alias != null) {
- return this.mKeyStore.contains("USRSKEY_" + alias);
- }
- throw new NullPointerException("alias == null");
- }
-
- public void engineDeleteEntry(String alias) throws KeyStoreException {
- boolean deletePkey = this.mKeyStore.delete("USRPKEY_" + alias);
- boolean deleteCert = this.mKeyStore.delete("USRCERT_" + alias);
- if (engineContainsAlias(alias) && !(deletePkey || deleteCert)) {
- throw new KeyStoreException("Failed to delete entry: " + alias);
- }
- }
-
- public boolean engineContainsAlias(String alias) {
- if (alias != null) {
- return this.mKeyStore.contains(new StringBuilder().append("USRPKEY_").append(alias).toString()) || this.mKeyStore.contains("USRCERT_" + alias);
- } else {
- throw new NullPointerException("alias == null");
- }
- }
-}
diff --git a/org.ifaa.android.manager/src/android/security/keystore/SoterRSAKeyGenParameterSpec.java b/org.ifaa.android.manager/src/android/security/keystore/SoterRSAKeyGenParameterSpec.java
deleted file mode 100644
index 3698828..0000000
--- a/org.ifaa.android.manager/src/android/security/keystore/SoterRSAKeyGenParameterSpec.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package android.security.keystore;
-
-import java.math.BigInteger;
-import java.security.spec.RSAKeyGenParameterSpec;
-
-public class SoterRSAKeyGenParameterSpec extends RSAKeyGenParameterSpec {
- private boolean isAutoAddCounterWhenGetPublicKey;
- private boolean isAutoSignedWithAttkWhenGetPublicKey;
- private boolean isAutoSignedWithCommonkWhenGetPublicKey;
- private boolean isForSoter;
- private boolean isNeedUseNextAttk;
- private boolean isSecmsgFidCounterSignedWhenSign;
- private String mAutoSignedKeyNameWhenGetPublicKey;
-
- public SoterRSAKeyGenParameterSpec(int keysize, BigInteger publicExponent, boolean isForSoter, boolean isAutoSignedWithAttkWhenGetPublicKey, boolean isAutoSignedWithCommonkWhenGetPublicKey, String signedKeyNameWhenGetPublicKey, boolean isSecmsgFidCounterSignedWhenSign, boolean isAutoAddCounterWhenGetPublicKey, boolean isNeedNextAttk) {
- super(keysize, publicExponent);
- this.isForSoter = false;
- this.isAutoSignedWithAttkWhenGetPublicKey = false;
- this.isAutoSignedWithCommonkWhenGetPublicKey = false;
- this.mAutoSignedKeyNameWhenGetPublicKey = "";
- this.isSecmsgFidCounterSignedWhenSign = false;
- this.isAutoAddCounterWhenGetPublicKey = false;
- this.isNeedUseNextAttk = false;
- this.isForSoter = isForSoter;
- this.isAutoSignedWithAttkWhenGetPublicKey = isAutoSignedWithAttkWhenGetPublicKey;
- this.isAutoSignedWithCommonkWhenGetPublicKey = isAutoSignedWithCommonkWhenGetPublicKey;
- this.mAutoSignedKeyNameWhenGetPublicKey = signedKeyNameWhenGetPublicKey;
- this.isSecmsgFidCounterSignedWhenSign = isSecmsgFidCounterSignedWhenSign;
- this.isAutoAddCounterWhenGetPublicKey = isAutoAddCounterWhenGetPublicKey;
- this.isNeedUseNextAttk = isNeedNextAttk;
- }
-
- public SoterRSAKeyGenParameterSpec(boolean isForSoter, boolean isAutoSignedWithAttkWhenGetPublicKey, boolean isAutoSignedWithCommonkWhenGetPublicKey, String signedKeyNameWhenGetPublicKey, boolean isSecmsgFidCounterSignedWhenSign, boolean isAutoAddCounterWhenGetPubli, boolean isNeedNextAttkcKey) {
- this(2048, RSAKeyGenParameterSpec.F4, isForSoter, isAutoSignedWithAttkWhenGetPublicKey, isAutoSignedWithCommonkWhenGetPublicKey, signedKeyNameWhenGetPublicKey, isSecmsgFidCounterSignedWhenSign, isAutoAddCounterWhenGetPubli, isNeedNextAttkcKey);
- }
-
- public boolean isForSoter() {
- return this.isForSoter;
- }
-
- public void setIsForSoter(boolean isForSoter) {
- this.isForSoter = isForSoter;
- }
-
- public boolean isAutoSignedWithAttkWhenGetPublicKey() {
- return this.isAutoSignedWithAttkWhenGetPublicKey;
- }
-
- public void setIsAutoSignedWithAttkWhenGetPublicKey(boolean isAutoSignedWithAttkWhenGetPublicKey) {
- this.isAutoSignedWithAttkWhenGetPublicKey = isAutoSignedWithAttkWhenGetPublicKey;
- }
-
- public boolean isAutoSignedWithCommonkWhenGetPublicKey() {
- return this.isAutoSignedWithCommonkWhenGetPublicKey;
- }
-
- public void setIsAutoSignedWithCommonkWhenGetPublicKey(boolean isAutoSignedWithCommonkWhenGetPublicKey) {
- this.isAutoSignedWithCommonkWhenGetPublicKey = isAutoSignedWithCommonkWhenGetPublicKey;
- }
-
- public String getAutoSignedKeyNameWhenGetPublicKey() {
- return this.mAutoSignedKeyNameWhenGetPublicKey;
- }
-
- public void setAutoSignedKeyNameWhenGetPublicKey(String mAutoSignedKeyNameWhenGetPublicKey) {
- this.mAutoSignedKeyNameWhenGetPublicKey = mAutoSignedKeyNameWhenGetPublicKey;
- }
-
- public boolean isSecmsgFidCounterSignedWhenSign() {
- return this.isSecmsgFidCounterSignedWhenSign;
- }
-
- public void setIsSecmsgFidCounterSignedWhenSign(boolean isSecmsgFidCounterSignedWhenSign) {
- this.isSecmsgFidCounterSignedWhenSign = isSecmsgFidCounterSignedWhenSign;
- }
-
- public boolean isAutoAddCounterWhenGetPublicKey() {
- return this.isAutoAddCounterWhenGetPublicKey;
- }
-
- public void setIsAutoAddCounterWhenGetPublicKey(boolean isAutoAddCounterWhenGetPublicKey) {
- this.isAutoAddCounterWhenGetPublicKey = isAutoAddCounterWhenGetPublicKey;
- }
-
- public boolean isNeedUseNextAttk() {
- return this.isNeedUseNextAttk;
- }
-
- public void setIsNeedUseNextAttk(boolean isNeedUseNextAttk) {
- this.isNeedUseNextAttk = isNeedUseNextAttk;
- }
-
- public String toString() {
- return "SoterRSAKeyGenParameterSpec{isForSoter=" + this.isForSoter + ", isAutoSignedWithAttkWhenGetPublicKey=" + this.isAutoSignedWithAttkWhenGetPublicKey + ", isAutoSignedWithCommonkWhenGetPublicKey=" + this.isAutoSignedWithCommonkWhenGetPublicKey + ", mAutoSignedKeyNameWhenGetPublicKey='" + this.mAutoSignedKeyNameWhenGetPublicKey + '\'' + ", isSecmsgFidCounterSignedWhenSign=" + this.isSecmsgFidCounterSignedWhenSign + ", isAutoAddCounterWhenGetPublicKey=" + this.isAutoAddCounterWhenGetPublicKey + ", isNeedUseNextAttk=" + this.isNeedUseNextAttk + '}';
- }
-}
diff --git a/org.ifaa.android.manager/src/android/security/keystore/SoterUtil.java b/org.ifaa.android.manager/src/android/security/keystore/SoterUtil.java
deleted file mode 100644
index 16c809b..0000000
--- a/org.ifaa.android.manager/src/android/security/keystore/SoterUtil.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package android.security.keystore;
-
-import android.util.Base64;
-import android.util.Log;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-public class SoterUtil {
- public static final String JSON_KEY_PUBLIC = "pub_key";
- private static final String PARAM_NEED_AUTO_ADD_COUNTER_WHEN_GET_PUBLIC_KEY = "addcounter";
- private static final String PARAM_NEED_AUTO_ADD_SECMSG_FID_COUNTER_WHEN_SIGN = "secmsg_and_counter_signed_when_sign";
- private static final String PARAM_NEED_AUTO_SIGNED_WITH_ATTK_WHEN_GET_PUBLIC_KEY = "auto_signed_when_get_pubkey_attk";
- private static final String PARAM_NEED_AUTO_SIGNED_WITH_COMMON_KEY_WHEN_GET_PUBLIC_KEY = "auto_signed_when_get_pubkey";
- private static final String PARAM_NEED_NEXT_ATTK = "next_attk";
- private static final int RAW_LENGTH_PREFIX = 4;
- public static final String TAG = "Soter.Util";
-
- public static SoterRSAKeyGenParameterSpec convertKeyNameToParameterSpec(String name) {
- if (isNullOrNil(name)) {
- Log.e(TAG, "hy: null or nil when convert key name to parameter");
- return null;
- }
- String[] splits = name.split("\\.");
- if (splits == null || splits.length <= 1) {
- Log.w(TAG, "hy: pure alias, no parameter");
- return null;
- }
- boolean isAutoSignedWithAttkWhenGetPublicKey = false;
- boolean isAutoSignedWithCommonkWhenGetPublicKey = false;
- String mAutoSignedKeyNameWhenGetPublicKey = "";
- boolean isSecmsgFidCounterSignedWhenSign = false;
- boolean isAutoAddCounterWhenGetPublicKey = false;
- boolean isNeedNextAttk = false;
- if (contains(PARAM_NEED_AUTO_SIGNED_WITH_ATTK_WHEN_GET_PUBLIC_KEY, splits)) {
- isAutoSignedWithAttkWhenGetPublicKey = true;
- } else {
- String entireCommonKeyExpr = containsPrefix(PARAM_NEED_AUTO_SIGNED_WITH_COMMON_KEY_WHEN_GET_PUBLIC_KEY, splits);
- if (!isNullOrNil(entireCommonKeyExpr)) {
- String commonKeyName = retrieveKeyNameFromExpr(entireCommonKeyExpr);
- if (!isNullOrNil(commonKeyName)) {
- isAutoSignedWithCommonkWhenGetPublicKey = true;
- mAutoSignedKeyNameWhenGetPublicKey = commonKeyName;
- }
- }
- }
- if (contains(PARAM_NEED_AUTO_ADD_SECMSG_FID_COUNTER_WHEN_SIGN, splits)) {
- isSecmsgFidCounterSignedWhenSign = true;
- }
- if (contains(PARAM_NEED_AUTO_ADD_COUNTER_WHEN_GET_PUBLIC_KEY, splits)) {
- isAutoAddCounterWhenGetPublicKey = true;
- if (contains(PARAM_NEED_NEXT_ATTK, splits)) {
- isNeedNextAttk = true;
- }
- }
- SoterRSAKeyGenParameterSpec spec = new SoterRSAKeyGenParameterSpec(true, isAutoSignedWithAttkWhenGetPublicKey, isAutoSignedWithCommonkWhenGetPublicKey, mAutoSignedKeyNameWhenGetPublicKey, isSecmsgFidCounterSignedWhenSign, isAutoAddCounterWhenGetPublicKey, isNeedNextAttk);
- Log.i(TAG, "hy: spec: " + spec.toString());
- return spec;
- }
-
- private static String retrieveKeyNameFromExpr(String expr) {
- if (isNullOrNil(expr)) {
- Log.e(TAG, "hy: expr is null");
- return null;
- }
- int startPos = expr.indexOf("(");
- int endPos = expr.indexOf(")");
- if (startPos >= 0 && endPos > startPos) {
- return expr.substring(startPos + 1, endPos);
- }
- Log.e(TAG, "hy: no key name");
- return null;
- }
-
- private static boolean contains(String target, String[] src) {
- if (src == null || src.length == 0 || isNullOrNil(target)) {
- Log.e(TAG, "hy: param error");
- throw new IllegalArgumentException("param error");
- }
- for (String item : src) {
- if (target.equals(item)) {
- return true;
- }
- }
- return false;
- }
-
- private static String containsPrefix(String prefix, String[] src) {
- if (src == null || src.length == 0 || isNullOrNil(prefix)) {
- Log.e(TAG, "hy: param error");
- throw new IllegalArgumentException("param error");
- }
- for (String item : src) {
- if (!isNullOrNil(item) && item.startsWith(prefix)) {
- return item;
- }
- }
- return null;
- }
-
- public static String getPureKeyAliasFromKeyName(String name) {
- Log.i(TAG, "hy: retrieving pure name from: " + name);
- if (isNullOrNil(name)) {
- Log.e(TAG, "hy: null or nil when get pure key alias");
- return null;
- }
- String[] splits = name.split("\\.");
- if (splits != null && splits.length > 1) {
- return splits[0];
- }
- Log.d(TAG, "hy: pure alias");
- return name;
- }
-
- public static boolean isNullOrNil(String str) {
- return str == null || str.equals("");
- }
-
- public static byte[] getDataFromRaw(byte[] origin, String jsonKey) throws JSONException {
- if (isNullOrNil(jsonKey)) {
- Log.e("Soter", "hy: json keyname error");
- return null;
- } else if (origin == null) {
- Log.e("Soter", "hy: json origin null");
- return null;
- } else {
- JSONObject jsonObj = retriveJsonFromExportedData(origin);
- if (jsonObj == null || !jsonObj.has(jsonKey)) {
- return null;
- }
- return Base64.decode(jsonObj.getString(jsonKey).replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "").replace("\\n", ""), 0);
- }
- }
-
- private static JSONObject retriveJsonFromExportedData(byte[] origin) {
- if (origin == null) {
- Log.e("Soter", "raw data is null");
- return null;
- }
- if (origin.length < RAW_LENGTH_PREFIX) {
- Log.e("Soter", "raw data length smaller than 4");
- }
- byte[] lengthBytes = new byte[RAW_LENGTH_PREFIX];
- System.arraycopy(origin, 0, lengthBytes, 0, RAW_LENGTH_PREFIX);
- int rawLength = toInt(lengthBytes);
- byte[] rawJsonBytes = new byte[rawLength];
- if (origin.length <= rawLength + RAW_LENGTH_PREFIX) {
- Log.e("Soter", "length not correct 2");
- return null;
- }
- System.arraycopy(origin, RAW_LENGTH_PREFIX, rawJsonBytes, 0, rawLength);
- try {
- return new JSONObject(new String(rawJsonBytes));
- } catch (JSONException e) {
- Log.e("Soter", "hy: can not convert to json");
- return null;
- }
- }
-
- public static int toInt(byte[] bRefArr) {
- int iOutcome = 0;
- for (int i = 0; i < bRefArr.length; i++) {
- iOutcome += (bRefArr[i] & 255) << (i * 8);
- }
- return iOutcome;
- }
-}
diff --git a/org.ifaa.android.manager/src/org/ifaa/android/manager/IFAAManager.java b/org.ifaa.android.manager/src/org/ifaa/android/manager/IFAAManager.java
deleted file mode 100644
index 5a945c3..0000000
--- a/org.ifaa.android.manager/src/org/ifaa/android/manager/IFAAManager.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.ifaa.android.manager;
-
-import android.content.Context;
-import android.hardware.fingerprint.FingerprintManager;
-import android.os.Build;
-
-public abstract class IFAAManager
-{
- static
- {
- System.loadLibrary("ifaa_jni");
- }
-
- public abstract String getDeviceModel();
-
- public abstract int getSupportBIOTypes(Context paramContext);
-
- public abstract int getVersion();
-
- public native byte[] processCmd(Context paramContext, byte[] paramArrayOfByte);
-
- public abstract int startBIOManager(Context paramContext, int paramInt);
-}
diff --git a/org.ifaa.android.manager/src/org/ifaa/android/manager/IFAAManagerFactory.java b/org.ifaa.android.manager/src/org/ifaa/android/manager/IFAAManagerFactory.java
deleted file mode 100644
index a747b13..0000000
--- a/org.ifaa.android.manager/src/org/ifaa/android/manager/IFAAManagerFactory.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2016 The CyanogenMod Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.ifaa.android.manager;
-
-import android.content.ActivityNotFoundException;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-
-public class IFAAManagerFactory extends IFAAManager {
- private static final int ACTIVITY_START_FAILED = -1;
- private static final int ACTIVITY_START_SUCCESS = 0;
- private static final int BIOTypeFingerprint = 1;
- private static final int BIOTypeIris = 2;
- private static final String TAG = "IFAAManagerFactory";
- public static IFAAManagerFactory mIFAAManagerFactory = null;
-
- public int getSupportBIOTypes(Context context) {
- return BIOTypeFingerprint;
- }
-
- public int startBIOManager(Context context, int authType) {
- try {
- Intent intent = new Intent();
- intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
- intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.Settings$SecuritySettingsActivity"));
- context.startActivity(intent);
- } catch (ActivityNotFoundException e) {
- e.printStackTrace();
- } catch (Throwable th) {
- }
- return ACTIVITY_START_SUCCESS;
- }
-
- public String getDeviceModel() {
- return "ZUK-Z2131";
- }
-
- public int getVersion() {
- return BIOTypeFingerprint;
- }
-
- public static IFAAManager getIFAAManager(Context context, int authType) {
- if (mIFAAManagerFactory != null) {
- return mIFAAManagerFactory;
- }
- mIFAAManagerFactory = new IFAAManagerFactory();
- return mIFAAManagerFactory;
- }
-}
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
index 70e9aaa..d35948c 100644..100755
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -73,9 +73,7 @@
<!-- Default screen brightness setting.
Must be in the range specified by minimum and maximum. -->
- <integer name="config_screenBrightnessSettingDefault">53</integer>
- <!-- If this is true, the screen will come on when you unplug usb/power/whatever. -->
- <bool name="config_unplugTurnsOnScreen">true</bool>
+ <integer name="config_screenBrightnessSettingDefault">53</integer>
<!-- Does the notification LED support multiple colors?
Used to decide if the user can change the colors -->
@@ -83,12 +81,8 @@
<!-- Does the battery LED support multiple colors?
Used to decide if the user can change the colors -->
- <bool name="config_multiColorBatteryLed">false</bool>
- <!--Used to decide if we show pulse settings -->
- <bool name="config_ledCanPulse">true</bool>
+ <bool name="config_multiColorBatteryLed">false</bool>
- <!-- Set to true to add links to Cell Broadcast app from Settings and MMS app. -->
- <bool name="config_cellBroadcastAppLinks">true</bool>
<!-- Is the notification LED intrusive? Used to decide if there should be a disable option -->
<bool name="config_intrusiveNotificationLed">true</bool>
@@ -321,10 +315,6 @@
<!-- Is the device capable of hot swapping an ICC Card -->
<bool name="config_hotswapCapable">true</bool>
- <!-- Flag indicating emergency calls will always use IMS irrespective of the state of
- the IMS connection -->
- <bool name="useImsAlwaysForEmergencyCall">false</bool>
-
<!-- Flag specifying whether VoLTE & VT is available on device -->
<bool name="config_device_volte_available">true</bool>
@@ -410,9 +400,7 @@
<bool name="config_supportDoubleTapWake">true</bool>
<!-- Enable overlay for all location components. -->
- <string name="config_networkLocationProviderPackageName" translatable="false">com.qualcomm.location</string>
+ <string name="config_networkLocationProviderPackageName" translatable="false">com.android.google.gms</string>
<string name="config_fusedLocationProviderPackageName" translatable="false">com.qualcomm.location</string>
- <!-- Enable blur support -->
- <bool name="config_ui_blur_enabled">true</bool>
</resources>
diff --git a/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
index 764d30e..0b7d4b4 100644
--- a/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
+++ b/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -18,7 +18,7 @@
-->
<resources>
<!-- 30 seconds for default screen timeout -->
- <integer name="def_screen_off_timeout">240000</integer>
+ <integer name="def_screen_off_timeout">60000</integer>
<!-- Set the automatic brightness mode on by default -->
<bool name="def_screen_brightness_automatic_mode">true</bool>
<!-- Default screen brightness, from 0 to 255. 87 is 34%. -->
diff --git a/overlay/frameworks/base/packages/SystemUI/res/values/config.xml b/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
index 55de983..bf6717b 100644
--- a/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
+++ b/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
@@ -21,15 +21,6 @@
for different hardware and product builds. -->
<resources>
- <!-- Control whether status bar should distinguish HSPA data icon from UMTS
- data icon on devices -->
- <bool name="config_hspa_data_distinguishable">true</bool>
-
- <!-- Should "4G" be shown instead of "LTE" when the network is NETWORK_TYPE_LTE? -->
- <bool name="config_show4GForLTE">true</bool>
-
- <!-- Doze: should the pickup sensor be used as a pulse signal? -->
- <bool name="doze_pulse_on_pick_up">true</bool>
<!-- Doze: does this device support STATE_DOZE and STATE_DOZE_SUSPEND? -->
<bool name="doze_display_state_supported">true</bool>
@@ -45,5 +36,9 @@
<!-- Doze: pulse parameter - delay to wait for the screen to wake up after an intent -->
<integer name="doze_pulse_delay_in_intent">0</integer>
+ <!-- Control whether status bar should distinguish HSPA data icon form UMTS
+ data icon on devices -->
+ <bool name="config_hspa_data_distinguishable">true</bool>
+
</resources>
diff --git a/overlay/frameworks/opt/telephony/resources/res/values/config.xml b/overlay/frameworks/opt/telephony/resources/res/values/config.xml
deleted file mode 100644
index 688da80..0000000
--- a/overlay/frameworks/opt/telephony/resources/res/values/config.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2015, The Linux Foundation. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation 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.
--->
-
-<resources>
- <!--The .jar file name which has the extended implementation
- of telephony base classes.-->
- <string name="telephony_plugin_jar_name" translatable="false">qti-telephony-common.jar</string>
- <!--Fully qualified class name of telephony extended plugin.-->
- <string name="telephony_plugin_class_name" translatable="false">com.qti.internal.telephony.QtiTelephonyPlugin</string>
-</resources>
diff --git a/overlay/packages/apps/CarrierConfig/res/xml/vendor.xml b/overlay/packages/apps/CarrierConfig/res/xml/vendor.xml
index 1b3fad6..90fba3a 100644
--- a/overlay/packages/apps/CarrierConfig/res/xml/vendor.xml
+++ b/overlay/packages/apps/CarrierConfig/res/xml/vendor.xml
@@ -1,11 +1,7 @@
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<carrier_config_list>
<carrier_config>
- <!-- Flag indicating if the phone is a world phone -->
<boolean name="world_phone_bool" value="true" />
- <!-- Flag indicating if dtmf tone type is enabled -->
- <bool name="dtmf_type_enabled_bool">true</bool>
- <!-- Show cdma auto network mode in (global) roaming -->
<boolean name="show_cdma_choices_bool" value="true" />
</carrier_config>
</carrier_config_list>
diff --git a/overlay/packages/apps/Snap/res/values/qcomstrings.xml b/overlay/packages/apps/Snap/res/values/qcomstrings.xml
index 513b49e..d477e42 100644
--- a/overlay/packages/apps/Snap/res/values/qcomstrings.xml
+++ b/overlay/packages/apps/Snap/res/values/qcomstrings.xml
@@ -22,5 +22,4 @@
<resources>
<!-- HDR needs 1x frame -->
<string name="pref_camera_hdr_need_1x_default" translatable="false">false</string>
- <string name="pref_video_quality_default" translatable="false">1920x1080</string>
</resources>
diff --git a/overlay/vendor/cmsdk/cm/res/res/values/config.xml b/overlay/vendor/cmsdk/cm/res/res/values/config.xml
index 99747e3..24c6094 100644
--- a/overlay/vendor/cmsdk/cm/res/res/values/config.xml
+++ b/overlay/vendor/cmsdk/cm/res/res/values/config.xml
@@ -22,19 +22,10 @@
<integer name="config_proximityCheckTimeout">100</integer>
<bool name="config_proximityCheckOnWakeEnabledByDefault">true</bool>
+ <!-- Ambient lux at which to enable outdoor mode when LiveDisplay is enabled -->
+ <integer name="config_outdoorAmbientLux">12000</integer>
<!-- Is the notification LED brightness adjustable ? Used to decide if the user can set LED brightness -->
<bool name="config_adjustableNotificationLedBrightness">true</bool>
- <!-- Color temperature settings for LiveDisplay. These were obtained by
- measuring the display at various color balance levels. -->
- <integer name="config_minColorTemperature">2000</integer>
- <integer name="config_maxColorTemperature">10000</integer>
-
- <!-- Corresponds to color balance level of zero, this is the native
- display temperature -->
- <integer name="config_dayColorTemperature">7000</integer>
- <integer name="config_nightColorTemperature">5000</integer>
- <!-- For high brightness mode -->
- <integer name="config_outdoorAmbientLux">20000</integer>
</resources>
diff --git a/proprietary-files.txt b/proprietary-files.txt
deleted file mode 100644
index 2e992b6..0000000
--- a/proprietary-files.txt
+++ /dev/null
@@ -1,696 +0,0 @@
-# ADSP
-bin/adsprpcd
-vendor/lib/libadsprpc.so
-vendor/lib/libfastcvopt.so
-vendor/lib64/libadsprpc.so
-vendor/lib64/libadsp_default_listener.so
-
-# Audio
-etc/firmware/tfa98xx.cnt
-vendor/lib/libacdb-fts.so
-vendor/lib/libacdbloader.so
-vendor/lib/libacdbrtac.so
-vendor/lib/libadiertac.so
-vendor/lib/libadm.so
-vendor/lib/libaudcal.so
-vendor/lib/libaudiodevarb.so
-vendor/lib/soundfx/libqcbassboost.so
-vendor/lib/soundfx/libqcreverb.so
-vendor/lib/soundfx/libqcvirt.so
-vendor/lib64/libacdb-fts.so
-vendor/lib64/libacdbloader.so
-vendor/lib64/libacdbrtac.so
-vendor/lib64/libadiertac.so
-vendor/lib64/libaudcal.so
-vendor/lib64/libaudiodevarb.so
-
-# Audio ACDB
-etc/acdbdata/MTP/MTP_Bluetooth_cal.acdb
-etc/acdbdata/MTP/MTP_General_cal.acdb
-etc/acdbdata/MTP/MTP_Global_cal.acdb
-etc/acdbdata/MTP/MTP_Handset_cal.acdb
-etc/acdbdata/MTP/MTP_Hdmi_cal.acdb
-etc/acdbdata/MTP/MTP_Headset_cal.acdb
-etc/acdbdata/MTP/MTP_Speaker_cal.acdb
-
-# Bluetooth
-bin/btnvtool
-bin/hci_qcomm_init
-bin/wcnss_filter
-etc/firmware/nvm_tlv.bin
-etc/firmware/nvm_tlv_1.3.bin
-etc/firmware/nvm_tlv_2.1.bin
-etc/firmware/nvm_tlv_3.0.bin
-etc/firmware/nvm_tlv_3.2.bin
-etc/firmware/rampatch_tlv.img
-etc/firmware/rampatch_tlv_1.3.tlv
-etc/firmware/rampatch_tlv_2.1.tlv
-etc/firmware/rampatch_tlv_3.0.tlv
-etc/firmware/rampatch_tlv_3.2.tlv
-vendor/lib/libbtnv.so
-vendor/lib64/libbtnv.so
-
-# Camera
-bin/mm-qcamera-daemon
-etc/camera/imx179_chromatix.xml
-etc/camera/imx298_chromatix.xml
-etc/camera/msm8996_camera.xml
-lib/hw/camera.msm8996.so
-lib/libFNVfbEngineHAL.so
-lib/libmm-qcamera.so
-lib/libmmcamera_interface.so
-lib/libmmjpeg_interface.so
-lib/libmorpho_image_stab4.so
-lib/libmorpho_video_refiner.so
-lib/libopcamera.so
-lib/libopcamerahw_interface.so
-lib/libopcameralib.so
-lib/libqomx_core.so
-vendor/lib/libSonyIMX298PdafLibrary.so
-vendor/lib/libfastcvadsp_stub.so
-vendor/lib/libfastcvopt.so
-vendor/lib/libflash_pmic.so
-vendor/lib/libjpegdhw.so
-vendor/lib/libjpegdmahw.so
-vendor/lib/libjpegehw.so
-vendor/lib/libllvd_smore.so
-vendor/lib/libmmcamera2_c2d_module.so
-vendor/lib/libmmcamera2_cpp_module.so
-vendor/lib/libmmcamera2_frame_algorithm.so
-vendor/lib/libmmcamera2_iface_modules.so
-vendor/lib/libmmcamera2_imglib_modules.so
-vendor/lib/libmmcamera2_is.so
-vendor/lib/libmmcamera2_isp_modules.so
-vendor/lib/libmmcamera2_mct.so
-vendor/lib/libmmcamera2_pp_buf_mgr.so
-vendor/lib/libmmcamera2_pproc_modules.so
-vendor/lib/libmmcamera2_q3a_core.so
-vendor/lib/libmmcamera2_sensor_modules.so
-vendor/lib/libmmcamera2_stats_algorithm.so
-vendor/lib/libmmcamera2_stats_modules.so
-vendor/lib/libmmcamera2_vpe_module.so
-vendor/lib/libmmcamera2_wnr_module.so
-vendor/lib/libmmcamera_dbg.so
-vendor/lib/libmmcamera_dummyalgo.so
-vendor/lib/libmmcamera_eebinparse.so
-vendor/lib/libmmcamera_eeprom_util.so
-vendor/lib/libmmcamera_eztune_module.so
-vendor/lib/libmmcamera_faceproc.so
-vendor/lib/libmmcamera_hdr_gb_lib.so
-vendor/lib/libmmcamera_hvx_add_constant.so
-vendor/lib/libmmcamera_hvx_grid_sum.so
-vendor/lib/libmmcamera_hvx_zzHDR.so
-vendor/lib/libmmcamera_imglib.so
-vendor/lib/libmmcamera_imglib_faceproc_adspstub.so
-vendor/lib/libmmcamera_imx179.so
-vendor/lib/libmmcamera_imx298.so
-vendor/lib/libmmcamera_llvd.so
-vendor/lib/libmmcamera_pdaf.so
-vendor/lib/libmmcamera_pdafcamif.so
-vendor/lib/libmmcamera_ppbase_module.so
-vendor/lib/libmmcamera_sony_imx179_eeprom.so
-vendor/lib/libmmcamera_sony_imx298_eeprom.so
-vendor/lib/libmmcamera_stillmore_lib.so
-vendor/lib/libmmcamera_thread_services.so
-vendor/lib/libmmcamera_tintless_algo.so
-vendor/lib/libmmcamera_tintless_bg_pca_algo.so
-vendor/lib/libmmcamera_tuning.so
-vendor/lib/libmmcamera_tuning_lookup.so
-vendor/lib/libmmcamera_vpu_module.so
-vendor/lib/libmmjpeg.so
-vendor/lib/libmmqjpeg_codec.so
-vendor/lib/libmmqjpegdma.so
-vendor/lib/libois_rohm_bu63165gwl.so
-vendor/lib/libqomx_jpegdec.so
-vendor/lib/libqomx_jpegenc_pipe.so
-vendor/lib/libseemore.so
-
-# Camera actuators
-vendor/lib/libactuator_rohm_bu63165gwl.so
-
-# Camera chromatix
-vendor/lib/libchromatix_imx179_3a_1640x924_30fps_preview.so
-vendor/lib/libchromatix_imx179_3a_1640x924_30fps_video.so
-vendor/lib/libchromatix_imx179_3a_3280x1846_30fps_preview.so
-vendor/lib/libchromatix_imx179_3a_3280x1846_30fps_video.so
-vendor/lib/libchromatix_imx179_3a_3280x2464_30fps_facebeauty.so
-vendor/lib/libchromatix_imx179_3a_3280x2464_30fps_preview.so
-vendor/lib/libchromatix_imx179_3a_3280x2464_30fps_video.so
-vendor/lib/libchromatix_imx179_common.so
-vendor/lib/libchromatix_imx179_cpp_1640x924_30fps_liveshot.so
-vendor/lib/libchromatix_imx179_cpp_1640x924_30fps_preview.so
-vendor/lib/libchromatix_imx179_cpp_1640x924_30fps_snapshot.so
-vendor/lib/libchromatix_imx179_cpp_1640x924_30fps_video.so
-vendor/lib/libchromatix_imx179_cpp_3280x1846_30fps_liveshot.so
-vendor/lib/libchromatix_imx179_cpp_3280x1846_30fps_preview.so
-vendor/lib/libchromatix_imx179_cpp_3280x1846_30fps_snapshot.so
-vendor/lib/libchromatix_imx179_cpp_3280x1846_30fps_video.so
-vendor/lib/libchromatix_imx179_cpp_3280x2464_30fps_facebeauty.so
-vendor/lib/libchromatix_imx179_cpp_3280x2464_30fps_liveshot.so
-vendor/lib/libchromatix_imx179_cpp_3280x2464_30fps_nomultiframe.so
-vendor/lib/libchromatix_imx179_cpp_3280x2464_30fps_preview.so
-vendor/lib/libchromatix_imx179_cpp_3280x2464_30fps_snapshot.so
-vendor/lib/libchromatix_imx179_cpp_3280x2464_30fps_video.so
-vendor/lib/libchromatix_imx179_isp_1640x924_30fps_preview.so
-vendor/lib/libchromatix_imx179_isp_1640x924_30fps_snapshot.so
-vendor/lib/libchromatix_imx179_isp_1640x924_30fps_video.so
-vendor/lib/libchromatix_imx179_isp_3280x1846_30fps_preview.so
-vendor/lib/libchromatix_imx179_isp_3280x1846_30fps_snapshot.so
-vendor/lib/libchromatix_imx179_isp_3280x1846_30fps_video.so
-vendor/lib/libchromatix_imx179_isp_3280x2464_30fps_facebeauty.so
-vendor/lib/libchromatix_imx179_isp_3280x2464_30fps_preview.so
-vendor/lib/libchromatix_imx179_isp_3280x2464_30fps_snapshot.so
-vendor/lib/libchromatix_imx179_isp_3280x2464_30fps_video.so
-vendor/lib/libchromatix_imx179_postproc.so
-vendor/lib/libchromatix_imx298_3a_clearshot.so
-vendor/lib/libchromatix_imx298_3a_panorama.so
-vendor/lib/libchromatix_imx298_4K_preview.so
-vendor/lib/libchromatix_imx298_4K_video.so
-vendor/lib/libchromatix_imx298_common.so
-vendor/lib/libchromatix_imx298_common_manual.so
-vendor/lib/libchromatix_imx298_cpp_hfr_120.so
-vendor/lib/libchromatix_imx298_cpp_hfr_60.so
-vendor/lib/libchromatix_imx298_cpp_hfr_90.so
-vendor/lib/libchromatix_imx298_cpp_liveshot.so
-vendor/lib/libchromatix_imx298_cpp_panorama_preview.so
-vendor/lib/libchromatix_imx298_cpp_panorama_snapshot.so
-vendor/lib/libchromatix_imx298_cpp_preview.so
-vendor/lib/libchromatix_imx298_cpp_snapshot.so
-vendor/lib/libchromatix_imx298_cpp_snapshot_clearshot.so
-vendor/lib/libchromatix_imx298_cpp_snapshot_flash.so
-vendor/lib/libchromatix_imx298_cpp_snapshot_hdr.so
-vendor/lib/libchromatix_imx298_cpp_snapshot_manual.so
-vendor/lib/libchromatix_imx298_cpp_snapshot_nomultiframe.so
-vendor/lib/libchromatix_imx298_cpp_video.so
-vendor/lib/libchromatix_imx298_cpp_video_hdr.so
-vendor/lib/libchromatix_imx298_default_preview.so
-vendor/lib/libchromatix_imx298_default_video.so
-vendor/lib/libchromatix_imx298_hdr_snapshot_3a.so
-vendor/lib/libchromatix_imx298_hdr_video_3a.so
-vendor/lib/libchromatix_imx298_hfr_120.so
-vendor/lib/libchromatix_imx298_hfr_120_3a.so
-vendor/lib/libchromatix_imx298_hfr_60.so
-vendor/lib/libchromatix_imx298_hfr_60_3a.so
-vendor/lib/libchromatix_imx298_hfr_90.so
-vendor/lib/libchromatix_imx298_hfr_90_3a.so
-vendor/lib/libchromatix_imx298_isp_panorama.so
-vendor/lib/libchromatix_imx298_liveshot.so
-vendor/lib/libchromatix_imx298_postproc.so
-vendor/lib/libchromatix_imx298_preview.so
-vendor/lib/libchromatix_imx298_snapshot.so
-vendor/lib/libchromatix_imx298_snapshot_hdr.so
-vendor/lib/libchromatix_imx298_video.so
-vendor/lib/libchromatix_imx298_video_hdr.so
-vendor/lib/libchromatix_imx298_zsl_preview.so
-vendor/lib/libchromatix_imx298_zsl_video.so
-
-# Camera firmware
-etc/firmware/cpp_firmware_v1_1_6.fw
-etc/firmware/cpp_firmware_v1_8_0.fw
-etc/firmware/cpp_firmware_v1_5_2.fw
-etc/firmware/cpp_firmware_v1_4_0.fw
-etc/firmware/cpp_firmware_v1_5_0.fw
-etc/firmware/cpp_firmware_v1_2_0.fw
-etc/firmware/cpp_firmware_v1_1_1.fw
-etc/firmware/cpp_firmware_v1_6_0.fw
-etc/firmware/cpp_firmware_v1_10_0.fw
-
-# Camera sensors
-vendor/lib/libmmcamera_isp_abf47.so
-vendor/lib/libmmcamera_isp_aec_bg_stats47.so
-vendor/lib/libmmcamera_isp_bf_stats47.so
-vendor/lib/libmmcamera_isp_bg_stats46.so
-vendor/lib/libmmcamera_isp_bhist_stats44.so
-vendor/lib/libmmcamera_isp_black_level47.so
-vendor/lib/libmmcamera_isp_bpc47.so
-vendor/lib/libmmcamera_isp_cac47.so
-vendor/lib/libmmcamera_isp_chroma_enhan40.so
-vendor/lib/libmmcamera_isp_chroma_suppress40.so
-vendor/lib/libmmcamera_isp_clamp_encoder40.so
-vendor/lib/libmmcamera_isp_clamp_video40.so
-vendor/lib/libmmcamera_isp_clamp_viewfinder40.so
-vendor/lib/libmmcamera_isp_color_correct46.so
-vendor/lib/libmmcamera_isp_color_xform_encoder46.so
-vendor/lib/libmmcamera_isp_color_xform_video46.so
-vendor/lib/libmmcamera_isp_color_xform_viewfinder46.so
-vendor/lib/libmmcamera_isp_cs_stats46.so
-vendor/lib/libmmcamera_isp_demosaic47.so
-vendor/lib/libmmcamera_isp_demux40.so
-vendor/lib/libmmcamera_isp_fovcrop_encoder46.so
-vendor/lib/libmmcamera_isp_fovcrop_video46.so
-vendor/lib/libmmcamera_isp_fovcrop_viewfinder46.so
-vendor/lib/libmmcamera_isp_gamma44.so
-vendor/lib/libmmcamera_isp_gic46.so
-vendor/lib/libmmcamera_isp_gtm46.so
-vendor/lib/libmmcamera_isp_hdr46.so
-vendor/lib/libmmcamera_isp_hdr_be_stats46.so
-vendor/lib/libmmcamera_isp_ihist_stats46.so
-vendor/lib/libmmcamera_isp_linearization40.so
-vendor/lib/libmmcamera_isp_ltm47.so
-vendor/lib/libmmcamera_isp_mce40.so
-vendor/lib/libmmcamera_isp_mesh_rolloff44.so
-vendor/lib/libmmcamera_isp_pedestal_correct46.so
-vendor/lib/libmmcamera_isp_rs_stats46.so
-vendor/lib/libmmcamera_isp_scaler_encoder46.so
-vendor/lib/libmmcamera_isp_scaler_video46.so
-vendor/lib/libmmcamera_isp_scaler_viewfinder46.so
-vendor/lib/libmmcamera_isp_sce40.so
-vendor/lib/libmmcamera_isp_snr47.so
-vendor/lib/libmmcamera_isp_sub_module.so
-
-# CNE
-bin/cnd
-etc/cne/SwimConfig.xml
-etc/cne/andsfCne.xml
-etc/permissions/ConnectivityExt.xml
-etc/permissions/cneapiclient.xml
-etc/permissions/com.quicinc.cne.xml
-framework/ConnectivityExt.jar
-framework/cneapiclient.jar
-framework/com.quicinc.cne.jar
--priv-app/CNEService/CNEService.apk
-vendor/lib/libNimsWrap.so
-vendor/lib/libcne.so
-vendor/lib/libcneapiclient.so
-vendor/lib/libcneconn.so
-vendor/lib/libcneqmiutils.so
-vendor/lib/libvendorconn.so
-vendor/lib/libwqe.so
-vendor/lib/libxml.so
-vendor/lib64/libNimsWrap.so
-vendor/lib64/libcne.so
-vendor/lib64/libcneapiclient.so
-vendor/lib64/libcneconn.so
-vendor/lib64/libcneqmiutils.so
-vendor/lib64/libvendorconn.so
-vendor/lib64/libwqe.so
-vendor/lib64/libxml.so
-
-# Display calibration
--etc/qdcm_calib_data_samsung_s6e3fa3_1080p_cmd_mode_dsi_panel.xml
--etc/qdcm_calib_data_samsung_s6e3fa3_1080p_video_mode_dsi_panel.xml
-
-# DPM
-bin/dpmd
-etc/dpm/dpm.conf
-etc/dpm/nsrm/NsrmConfiguration.xml
-etc/permissions/com.qti.dpmframework.xml
-etc/permissions/dpmapi.xml
-framework/com.qti.dpmframework.jar
-framework/dpmapi.jar
-framework/tcmclient.jar
--priv-app/dpmserviceapp/dpmserviceapp.apk
-vendor/lib/libdpmctmgr.so
-vendor/lib/libdpmfdmgr.so
-vendor/lib/libdpmframework.so
-vendor/lib/libdpmnsrm.so
-vendor/lib/libdpmtcm.so
-vendor/lib64/libdpmctmgr.so
-vendor/lib64/libdpmfdmgr.so
-vendor/lib64/libdpmframework.so
-vendor/lib64/libdpmnsrm.so
-vendor/lib64/libdpmtcm.so
-
-# DRM
-bin/qseecomd
-vendor/bin/qseeproxydaemon
-vendor/lib/libQSEEComAPI.so
-vendor/lib64/lib-sec-disp.so
-vendor/lib64/libGPreqcancel.so
-vendor/lib64/libGPreqcancel_svc.so
-vendor/lib64/libQSEEComAPI.so
-vendor/lib64/libSecureUILib.so
-vendor/lib64/libStDrvInt.so
-vendor/lib64/libdrmfs.so
-vendor/lib64/libdrmtime.so
-vendor/lib64/libqisl.so
-vendor/lib64/librpmb.so
-vendor/lib64/libsecureui.so
-vendor/lib64/libsecureui_svcsock.so
-vendor/lib64/libssd.so
-
-# Fingerprint sensor
-bin/qfp-daemon
-lib64/hw/fingerprint.msm8996.so
-lib64/lib_fpc_tac_shared.so
-vendor/lib64/libqfp-service.so
-vendor/lib64/qfp.wakeup.so
-
-# Gatekeeper
-vendor/lib/hw/gatekeeper.msm8996.so
-vendor/lib64/hw/gatekeeper.msm8996.so
-
-# GPS
-bin/loc_launcher
-etc/permissions/com.qti.location.sdk.xml
-etc/permissions/com.qualcomm.location.xml
-framework/com.qti.location.sdk.jar
--lib/libloc_api_v02.so
--lib64/libloc_api_v02.so
--priv-app/com.qualcomm.location/com.qualcomm.location.apk
-vendor/bin/slim_daemon
-vendor/lib/hw/flp.default.so
-vendor/lib/libalarmservice_jni.so
-vendor/lib/libdataitems.so
-vendor/lib/libflp.so
-vendor/lib/libgeofence.so
-vendor/lib/libizat_core.so
-vendor/lib/liblbs_core.so
-vendor/lib/libloc_ext.so
-vendor/lib/liblocationservice.so
-vendor/lib/liblocationservice_glue.so
-vendor/lib/liblowi_client.so
-vendor/lib/libquipc_os_api.so
-vendor/lib/libulp2.so
-vendor/lib/libxtadapter.so
-vendor/lib/libxtwifi_ulp_adaptor.so
-vendor/lib/libxt_native.so
-vendor/lib64/hw/flp.default.so
-vendor/lib64/libalarmservice_jni.so
-vendor/lib64/libdataitems.so
-vendor/lib64/libflp.so
-vendor/lib64/libgeofence.so
-vendor/lib64/libizat_core.so
-vendor/lib64/liblbs_core.so
-vendor/lib64/libloc_ext.so
-vendor/lib64/libloc_xtra.so
-vendor/lib64/liblocationservice.so
-vendor/lib64/liblocationservice_glue.so
-vendor/lib64/liblowi_client.so
-vendor/lib64/liblowi_wifihal.so
-vendor/lib64/liblowi_wifihal_nl.so
-vendor/lib64/libquipc_os_api.so
-vendor/lib64/libulp2.so
-vendor/lib64/libxtadapter.so
-vendor/lib64/libxtwifi_ulp_adaptor.so
-
-# Graphics
-vendor/lib/egl/eglSubDriverAndroid.so
-vendor/lib/egl/libEGL_adreno.so
-vendor/lib/egl/libGLESv1_CM_adreno.so
-vendor/lib/egl/libGLESv2_adreno.so
-vendor/lib/egl/libQTapGLES.so
-vendor/lib/egl/libq3dtools_adreno.so
-vendor/lib/egl/libq3dtools_esx.so
-vendor/lib/libC2D2.so
-vendor/lib/libCB.so
-vendor/lib/libOpenCL.so
-vendor/lib/libRSDriver_adreno.so
-vendor/lib/libadreno_utils.so
-vendor/lib/libbccQTI.so
-vendor/lib/libc2d30-a5xx.so
-vendor/lib/libc2d30_bltlib.so
-vendor/lib/libgsl.so
-vendor/lib/libllvm-glnext.so
-vendor/lib/libllvm-qcom.so
-vendor/lib/libmm-disp-apis.so
-vendor/lib/libmm-qdcm.so
-vendor/lib/libmmQSM.so
-vendor/lib/librs_adreno.so
-vendor/lib/librs_adreno_sha1.so
-vendor/lib/libsd_sdk_display.so
--vendor/lib/libsdm-disp-apis.so
-vendor/lib64/egl/eglSubDriverAndroid.so
-vendor/lib64/egl/libEGL_adreno.so
-vendor/lib64/egl/libGLESv1_CM_adreno.so
-vendor/lib64/egl/libGLESv2_adreno.so
-vendor/lib64/egl/libQTapGLES.so
-vendor/lib64/egl/libq3dtools_adreno.so
-vendor/lib64/egl/libq3dtools_esx.so
-vendor/lib64/libC2D2.so
-vendor/lib64/libCB.so
-vendor/lib64/libOpenCL.so
-vendor/lib64/libRSDriver_adreno.so
-vendor/lib64/libadreno_utils.so
-vendor/lib64/libbccQTI.so
-vendor/lib64/libc2d30-a5xx.so
-vendor/lib64/libc2d30_bltlib.so
-vendor/lib64/libgsl.so
-vendor/lib64/libllvm-glnext.so
-vendor/lib64/libllvm-qcom.so
-vendor/lib64/libmm-disp-apis.so
-vendor/lib64/libmm-qdcm.so
-vendor/lib64/libmmQSM.so
-vendor/lib64/librs_adreno.so
-vendor/lib64/librs_adreno_sha1.so
-vendor/lib64/libscalar.so
-vendor/lib64/libsd_sdk_display.so
-vendor/lib64/libsdm-color.so
-vendor/lib64/libsdm-diag.so
--vendor/lib64/libsdm-disp-apis.so
-vendor/lib64/libsdmextension.so
-
-# Graphics firmware
-etc/firmware/a530_gpmu.fw2
-etc/firmware/a530_pfp.fw
-etc/firmware/a530_pm4.fw
-etc/firmware/a530_zap.b00
-etc/firmware/a530_zap.b01
-etc/firmware/a530_zap.b02
-etc/firmware/a530_zap.elf
-etc/firmware/a530_zap.mdt
-etc/firmware/a530v1_pfp.fw
-etc/firmware/a530v1_pm4.fw
-etc/firmware/a530v2_seq.fw2
-etc/firmware/a530v3_gpmu.fw2
-etc/firmware/a530v3_seq.fw2
-
-# Keystore
-vendor/lib/hw/keystore.msm8996.so
-vendor/lib64/hw/keystore.msm8996.so
-
-# Listen
-vendor/lib/hw/sound_trigger.primary.msm8996.so
-vendor/lib/libadpcmdec.so
-vendor/lib/libsmwrapper.so
-
-# Media
-vendor/lib/libI420colorconvert.so
-vendor/lib/libOmxAacDec.so
-vendor/lib/libOmxEvrcDec.so
-vendor/lib/libOmxQcelp13Dec.so
-vendor/lib/libmm-color-convertor.so
-vendor/lib/libmmosal.so
-
-# Network
--priv-app/QtiTetherService/QtiTetherService.apk
-vendor/lib/libconnctrl.so
-vendor/lib64/libconnctrl.so
-vendor/lib64/libQtiTether.so
-
-# NFC firmware
-vendor/firmware/libpn548ad_fw.so
-
-# Perf
-bin/energy-awareness
-bin/iop
-bin/msm_irqbalance
-lib64/libqti-iop.so
-vendor/bin/perfd
-vendor/etc/perf-profile0.conf
-vendor/etc/perf-profile1.conf
-vendor/etc/perf-profile2.conf
-vendor/etc/perf-profile3.conf
-vendor/etc/perf-profile4.conf
-vendor/etc/perf-profile5.conf
-vendor/etc/perf-profile6.conf
-vendor/lib/libqc-opt.so
-vendor/lib/libqti-iop-client.so
-vendor/lib/libqti-perfd-client.so
-vendor/lib64/libqc-opt.so
-vendor/lib64/libqti-iop-client.so
-vendor/lib64/libqti-perfd-client.so
-
-# Peripheral manager
-bin/pm-proxy
-bin/pm-service
-vendor/lib/libperipheral_client.so
-vendor/lib64/libperipheral_client.so
-
-# Postprocessing
-etc/permissions/com.qti.snapdragon.sdk.display.xml
-framework/com.qti.snapdragon.sdk.display.jar
--vendor/app/colorservice/colorservice.apk
-vendor/bin/mm-pp-daemon
-vendor/lib/libdisp-aba.so
-vendor/lib/libmm-als.so
-vendor/lib/libmm-disp-apis.so
-vendor/lib/libmm-qdcm.so
-vendor/lib64/libdisp-aba.so
-vendor/lib64/libmm-als.so
-vendor/lib64/libmm-disp-apis.so
-vendor/lib64/libmm-dspp-utils.so
-vendor/lib64/libmm-qdcm.so
-vendor/lib64/libmm-qdcm-diag.so
-
-# QMI
-bin/irsc_util
-etc/permissions/qti_permissions.xml
-vendor/bin/pd-mapper
-vendor/lib/libdiag.so
-vendor/lib/libdsi_netctrl.so
-vendor/lib/libdsutils.so
-vendor/lib/libidl.so
-vendor/lib/libqcci_legacy.so
-vendor/lib/libqcmaputils.so
-vendor/lib/libqdi.so
-vendor/lib/libqdp.so
-vendor/lib/libqmi.so
-vendor/lib/libqmi_cci.so
-vendor/lib/libqmi_client_helper.so
-vendor/lib/libqmi_client_qmux.so
-vendor/lib/libqmi_common_so.so
-vendor/lib/libqmi_csi.so
-vendor/lib/libqmi_encdec.so
-vendor/lib/libqmiservices.so
-vendor/lib/libqti-wl.so
-vendor/lib/libquipc_os_api.so
-vendor/lib/libsmemlog.so
-vendor/lib/libvqzip.so
-vendor/lib64/libdiag.so
-vendor/lib64/libdsi_netctrl.so
-vendor/lib64/libdsutils.so
-vendor/lib64/libidl.so
-vendor/lib64/libqcci_legacy.so
-vendor/lib64/libqcmaputils.so
-vendor/lib64/libqdi.so
-vendor/lib64/libqdp.so
-vendor/lib64/libqmi.so
-vendor/lib64/libqmi_cci.so
-vendor/lib64/libqmi_client_helper.so
-vendor/lib64/libqmi_client_qmux.so
-vendor/lib64/libqmi_common_so.so
-vendor/lib64/libqmi_csi.so
-vendor/lib64/libqmi_encdec.so
-vendor/lib64/libqmiservices.so
-vendor/lib64/libqti-wl.so
-vendor/lib64/libquipc_os_api.so
-vendor/lib64/libsmemlog.so
-
-# Radio
--app/datastatusnotification/datastatusnotification.apk
--app/embms/embms.apk
--app/fastdormancy/fastdormancy.apk
--app/QtiTelephonyService/QtiTelephonyService.apk
--app/shutdownlistener/shutdownlistener.apk
-bin/ipacm-diag
-bin/netmgrd
-bin/qmuxd
-bin/radish
-bin/rmt_storage
-etc/data/dsi_config.xml
-etc/data/netmgr_config.xml
-etc/data/qmi_config.xml
-etc/permissions/embms.xml
-etc/permissions/qcnvitems.xml
-etc/permissions/qcrilhook.xml
-etc/permissions/telephonyservice.xml
-framework/embmslibrary.jar
--framework/qcnvitems.jar
--framework/qcrilhook.jar
-framework/qti-telephony-common.jar
-framework/QtiTelephonyServicelibrary.jar
-lib64/libparam.so
--priv-app/qcrilmsgtunnel/qcrilmsgtunnel.apk
-vendor/bin/qti
-vendor/lib64/libconfigdb.so
-vendor/lib64/liblqe.so
-vendor/lib64/libmdmdetect.so
-vendor/lib64/libnetmgr.so
-vendor/lib64/libqcmaputils.so
-vendor/lib64/libril-qc-qmi-1.so
-vendor/lib64/libril-qc-radioconfig.so
-vendor/lib64/libril-qcril-hook-oem.so
-vendor/lib64/libsystem_health_mon.so
-vendor/qcril.db
-
-# Radio - IMS
-bin/ims_rtp_daemon
-bin/imscmservice
-bin/imsdatadaemon
-bin/imsqmidaemon
--vendor/app/ims/ims.apk
--vendor/app/imssettings/imssettings.apk
-vendor/lib64/lib-dplmedia.so
-vendor/lib64/lib-ims-rcscmjni.so
-vendor/lib64/lib-imsSDP.so
-vendor/lib64/lib-imscamera.so
-vendor/lib64/lib-imsdpl.so
-vendor/lib64/lib-imsqimf.so
-vendor/lib64/lib-imsrcs.so
-vendor/lib64/lib-imsrcscm.so
-vendor/lib64/lib-imsrcscmclient.so
-vendor/lib64/lib-imsrcscmservice.so
-vendor/lib64/lib-imss.so
-vendor/lib64/lib-imsvt.so
-vendor/lib64/lib-imsxml.so
-vendor/lib64/lib-rcsimssjni.so
-vendor/lib64/lib-rcsjni.so
-vendor/lib64/lib-rtpcommon.so
-vendor/lib64/lib-rtpcore.so
-vendor/lib64/lib-rtpdaemoninterface.so
-vendor/lib64/lib-rtpsl.so
-vendor/lib64/libimscamera_jni.so
-vendor/lib64/libimsmedia_jni.so
-vendor/lib64/librcc.so
-vendor/lib64/libvoice-svc.so
-
-# Radio - MBN
-etc/firmware/mbn_ota/mcfg_sw/mcfg_sw_ATT-VoLTE.mbn
-etc/firmware/mbn_ota/mcfg_sw/mcfg_sw_CMCC_Volte_OpenMkt-Commercial.mbn
-etc/firmware/mbn_ota/mcfg_sw/mcfg_sw_CT_OpenMkt-Commercial.mbn
-etc/firmware/mbn_ota/mcfg_sw/mcfg_sw_CU_OpenMkt-Commercial.mbn
-etc/firmware/mbn_ota/mcfg_sw/mcfg_sw_OEM_CDMA-Commercial.mbn
-etc/firmware/mbn_ota/mcfg_sw/mcfg_sw_TMO-Commercial.mbn
-etc/firmware/mbn_ota/mcfg_sw_NoCDMA/mcfg_sw_CMCC_Volte_OpenMkt-Commercial.mbn
-etc/firmware/mbn_ota/mcfg_sw_NoCDMA/mcfg_sw_CU_OpenMkt-Commercial.mbn
-etc/firmware/mbn_ota/mcfg_sw_NoCDMA/mcfg_sw_OEM_NoCDMA-Commercial.mbn
-etc/firmware/mbn_ota/mcfg_sw_NoCDMA/mcfg_sw_Reliance-Commercial.mbn
-etc/firmware/mbn_ota/mcfg_sw_NoCDMA/mcfg_sw_YTL-Commercial.mbn
-
-# Sensors
-bin/sensors.qcom
-etc/sensors/hals.conf
-etc/sensors/sensor_def_qcomdev.conf
-vendor/lib/hw/activity_recognition.msm8996.so
-vendor/lib/libsensor1.so
-vendor/lib/libsensor_reg.so
-vendor/lib/libsensor_thresh.so
-vendor/lib/libsensor_user_cal.so
-vendor/lib/sensors.oem.so
-vendor/lib/sensors.ssc.so
-vendor/lib64/hw/activity_recognition.msm8996.so
-vendor/lib64/libsensor1.so
-vendor/lib64/libsensor_reg.so
-vendor/lib64/libsensor_thresh.so
-vendor/lib64/libsensor_user_cal.so
-vendor/lib64/sensors.oem.so
-vendor/lib64/sensors.ssc.so
-
-# Thermal
-vendor/bin/thermal-engine
--vendor/lib/libthermalclient.so
--vendor/lib64/libthermalclient.so
-vendor/lib64/libthermalioctl.so
-
-# Time services
--app/TimeService/TimeService.apk
-bin/time_daemon
--vendor/lib/libtime_genoff.so
-vendor/lib/libTimeService.so
--vendor/lib64/libtime_genoff.so
-vendor/lib64/libTimeService.so
-
-# TP firmware
-etc/firmware/tp/fw_synaptics_15801.img
-etc/firmware/tp/fw_synaptics_15801b.img
-etc/firmware/tp/fw_synaptics_touchkey.img
-
-# Widevine
-vendor/lib/libWVStreamControlAPI_L3.so
-vendor/lib/libwvdrm_L3.so
-vendor/lib/mediadrm/libwvdrmengine.so
-
-# Wifi
-bin/cnss-daemon
-bin/cnss_diag
diff --git a/rootdir/Android.mk b/rootdir/Android.mk
index cb61300..ecb80b8 100644
--- a/rootdir/Android.mk
+++ b/rootdir/Android.mk
@@ -2,7 +2,6 @@ LOCAL_PATH := $(call my-dir)
# Device init scripts
-
include $(CLEAR_VARS)
LOCAL_MODULE := fstab.qcom
LOCAL_MODULE_TAGS := optional eng
@@ -20,14 +19,6 @@ LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
-LOCAL_MODULE := init.target.rc
-LOCAL_MODULE_TAGS := optional eng
-LOCAL_MODULE_CLASS := ETC
-LOCAL_SRC_FILES := etc/init.target.rc
-LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
LOCAL_MODULE := init.qcom.rc
LOCAL_MODULE_TAGS := optional eng
LOCAL_MODULE_CLASS := ETC
diff --git a/rootdir/etc/fstab.qcom b/rootdir/etc/fstab.qcom
index 8373466..bc969be 100644
--- a/rootdir/etc/fstab.qcom
+++ b/rootdir/etc/fstab.qcom
@@ -9,14 +9,11 @@
/dev/block/bootdevice/by-name/boot /boot emmc defaults defaults
/dev/block/bootdevice/by-name/recovery /recovery emmc defaults defaults
/dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1,discard wait
-/dev/block/bootdevice/by-name/userdata /data f2fs nosuid,nodev,noatime,nodiratime,inline_xattr,data_flush wait,check,encryptable=footer,formattable,length=-16384
/dev/block/bootdevice/by-name/userdata /data ext4 nosuid,nodev,noatime,nodiratime,barrier=1,noauto_da_alloc wait,check,encryptable=footer,formattable,length=-16384
-/dev/block/bootdevice/by-name/cache /cache f2fs nosuid,nodev,noatime,nodiratime,inline_xattr,flush_merge,data_flush wait,check,formattable
/dev/block/bootdevice/by-name/cache /cache ext4 nosuid,nodev,noatime,nodiratime,barrier=1 wait,check,formattable
/dev/block/bootdevice/by-name/persist /persist ext4 nosuid,nodev,barrier=1 wait
/dev/block/bootdevice/by-name/dsp /dsp ext4 ro,nosuid,nodev,barrier=1 wait
/dev/block/bootdevice/by-name/modem /firmware vfat ro,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337,context=u:object_r:firmware_file:s0 wait
/dev/block/bootdevice/by-name/bluetooth /bt_firmware vfat ro,shortname=lower,uid=1002,gid=3002,dmask=222,fmask=333,context=u:object_r:bt_firmware_file:s0 wait
-/dev/block/bootdevice/by-name/misc /misc emmc defaults defaults
/devices/soc/6a00000.ssusb/6a00000.dwc3/xhci-hcd.0.auto/usb* auto auto defaults voldmanaged=usbdisk:auto
diff --git a/rootdir/etc/init.qcom.bt.sh b/rootdir/etc/init.qcom.bt.sh
index 0cc5dc7..100859c 100644
--- a/rootdir/etc/init.qcom.bt.sh
+++ b/rootdir/etc/init.qcom.bt.sh
@@ -147,7 +147,7 @@ config_bt ()
setprop ro.qualcomm.bt.hci_transport smd
fi
;;
- "msm8974" | "msm8226" | "msm8610" | "msm8916" | "msm8909" | "msm8952" | "msm8937" )
+ "msm8974" | "msm8226" | "msm8610" | "msm8916" | "msm8909" | "msm8952" )
if [ "$btsoc" != "ath3k" ]
then
setprop ro.bluetooth.hfp.ver 1.7
diff --git a/rootdir/etc/init.qcom.power.rc b/rootdir/etc/init.qcom.power.rc
index 121157b..f6aae40 100644..100755
--- a/rootdir/etc/init.qcom.power.rc
+++ b/rootdir/etc/init.qcom.power.rc
@@ -1,13 +1,3 @@
-on boot
- # Update foreground and background cpusets
- write /dev/cpuset/foreground/cpus 0-3
- write /dev/cpuset/foreground/boost/cpus 2-3
- write /dev/cpuset/background/cpus 0-1
- write /dev/cpuset/system-background/cpus 0-3
-
- # Enable sched boost
- write /proc/sys/kernel/sched_boost 1
-
on enable-low-power
# Disable thermal bcl hotplug to switch governor
write /sys/module/msm_thermal/core_control/enabled 0
@@ -17,6 +7,7 @@ on enable-low-power
write /sys/devices/soc/soc:qcom,bcl/mode "enable"
# Enable Adaptive LMK
+
write /sys/module/lowmemorykiller/parameters/enable_adaptive_lmk 1
write /sys/module/lowmemorykiller/parameters/vmpressure_file_min 81250
@@ -67,14 +58,13 @@ on enable-low-power
write /sys/module/cpu_boost/parameters/input_boost_ms 40
# Setting b.L scheduler parameters
- write /proc/sys/kernel/sched_boost 0
- write /proc/sys/kernel/sched_downmigrate 45
+ write /proc/sys/kernel/sched_migration_fixup 1
write /proc/sys/kernel/sched_upmigrate 45
+ write /proc/sys/kernel/sched_downmigrate 45
write /proc/sys/kernel/sched_freq_inc_notify 400000
write /proc/sys/kernel/sched_freq_dec_notify 400000
write /proc/sys/kernel/sched_spill_nr_run 3
write /proc/sys/kernel/sched_init_task_load 100
- write /proc/sys/kernel/sched_upmigrate_min_nice 9
# Enable bus-dcvs
write /sys/class/devfreq/soc:qcom,cpubw/governor "bw_hwmon"
@@ -111,12 +101,11 @@ on enable-low-power
start iop
on charger
+ write /sys/module/msm_thermal/core_control/cpus_offlined 14
+ write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor "powersave"
write /sys/devices/system/cpu/cpu1/online 0
write /sys/devices/system/cpu/cpu2/online 0
write /sys/devices/system/cpu/cpu3/online 0
- write /sys/module/msm_thermal/core_control/cpus_offlined 14
- write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor "powersave"
- write /sys/module/lpm_levels/parameters/sleep_disabled 0
on class_start:late_start
write /proc/sys/kernel/sched_boost 1
@@ -129,4 +118,6 @@ on property:init.svc.recovery=running
on property:dev.bootcomplete=1
write /proc/sys/kernel/sched_boost 0
+
+
setprop sys.io.scheduler "bfq"
diff --git a/rootdir/etc/init.qcom.rc b/rootdir/etc/init.qcom.rc
index f6e0c03..8ed3e01 100755
--- a/rootdir/etc/init.qcom.rc
+++ b/rootdir/etc/init.qcom.rc
@@ -24,7 +24,6 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-
import init.qcom.power.rc
import init.qcom.usb.rc
@@ -33,6 +32,7 @@ on early-init
mkdir /bt_firmware 0771 system system
symlink /data/tombstones /tombstones
mkdir /dsp 0771 media media
+ mount debugfs debugfs /sys/kernel/debug
chmod 0755 /sys/kernel/debug
on init
@@ -44,6 +44,8 @@ on init
symlink /sdcard /mnt/sdcard
symlink /sdcard /storage/sdcard0
+ write /sys/module/qpnp_rtc/parameters/poweron_alarm 1
+
on early-boot
# set RLIMIT_MEMLOCK to 64MB
setrlimit 8 67108864 67108864
@@ -90,29 +92,22 @@ on boot
# Touchscreen
chown system radio /proc/touchpanel/double_tap_enable
chmod 0660 /proc/touchpanel/double_tap_enable
-
chown root system /proc/touchpanel/camera_enable
chmod 0660 /proc/touchpanel/camera_enable
-
chown root system /proc/touchpanel/music_enable
chmod 0660 /proc/touchpanel/music_enable
-
chown root system /proc/touchpanel/flashlight_enable
chmod 0660 /proc/touchpanel/flashlight_enable
# Buttons
chown root system /proc/s1302/key_rep
chmod 0660 /proc/s1302/key_rep
-
chown root system /proc/s1302/virtual_key
chmod 0660 /proc/s1302/virtual_key
-
chown root system /proc/tri-state-key/keyCode_top
chmod 0660 /proc/tri-state-key/keyCode_top
-
chown root system /proc/tri-state-key/keyCode_middle
chmod 0660 /proc/tri-state-key/keyCode_middle
-
chown root system /proc/tri-state-key/keyCode_bottom
chmod 0660 /proc/tri-state-key/keyCode_bottom
@@ -129,7 +124,6 @@ on boot
chmod 0664 /sys/class/graphics/fb0/modes
chown system graphics /sys/class/graphics/fb0/sre
chmod 0664 /sys/class/graphics/fb0/sre
-
symlink /data/local /local
# Fingerprint
@@ -160,10 +154,17 @@ on boot
# RGB light
chown system system /sys/class/leds/led:rgb_red/brightness
chmod 0660 /sys/class/leds/led:rgb_red/brightness
- chown system system /sys/class/leds/led:rgb_red/rgbblink
- chmod 0660 /sys/class/leds/led:rgb_red/rgbblink
+ chown system system /sys/class/leds/led:rgb_green/brightness
+ chmod 0660 /sys/class/leds/led:rgb_green/brightness
+ chown system system /sys/class/leds/led:rgb_blue/brightness
+ chmod 0660 /sys/class/leds/led:rgb_blue/brightness
+
+ chown system system /sys/class/leds/led:rgb_blue/rgbbreath
+ chmod 0660 /sys/class/leds/led:rgb_blue/rgbbreath
chown system system /sys/class/leds/led:rgb_red/rgbbreath
chmod 0660 /sys/class/leds/led:rgb_red/rgbbreath
+ chown system system /sys/class/leds/led:rgb_green/rgbbreath
+ chmod 0660 /sys/class/leds/led:rgb_green/rgbbreath
chown bluetooth bluetooth /sys/module/bluetooth_power/parameters/power
chown bluetooth net_bt /sys/class/rfkill/rfkill0/type
@@ -210,12 +211,10 @@ on boot
mkdir /dev/socket/netmgr 0750 radio radio
setprop wifi.interface wlan0
-
# Define TCP buffer sizes for various networks
# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
setprop net.tcp.buffersize.wifi 524288,2097152,4194304,262144,524288,1048576
-
setprop ro.telephony.call_ring.multiple false
#Remove SUID bit for iproute2 ip tool
@@ -286,6 +285,9 @@ on boot
# bond0 used by FST Manager
chown wifi wifi /sys/class/net/bond0/bonding/queue_id
+ # change this when HAL3 is working
+ setprop persist.camera.HAL3.enabled 0
+
# msm specific files that need to be created on /data
on post-fs-data
mkdir /data/tombstones 0771 system system
@@ -296,6 +298,8 @@ on post-fs-data
mkdir /persist/data/sfs 0700 system system
mkdir /persist/data/tz 0700 system system
mkdir /persist/qc_senseid 0700 system system
+ mkdir /persist/bms 0700 root system
+ restorecon_recursive /persist
mkdir /data/misc/dts 0770 media audio
mkdir /data/usf 0700 system system
mkdir /data/misc/tloc/ 0700 system drmrpc
@@ -386,8 +390,8 @@ on post-fs-data
# Create the symlink to qcn wpa_supplicant folder for ar6000 wpa_supplicant
mkdir /data/system 0775 system system
- #symlink /data/misc/wifi/wpa_supplicant /data/system/wpa_supplicant
+ #symlink /data/misc/wifi/wpa_supplicant /data/system/wpa_supplicant
# Create directories for Location services
mkdir /data/misc/location 0770 gps gps
mkdir /data/misc/location/mq 0770 gps gps
@@ -409,13 +413,11 @@ on post-fs-data
# Create /data/time folder for time-services
mkdir /data/time/ 0700 system system
-
mkdir /data/audio/ 0770 media audio
# Create a folder for audio delta files
mkdir /data/audio/acdbdata 0770 media audio
mkdir /data/audio/acdbdata/delta 0770 media audio
-
setprop vold.post_fs_data_done 1
# Create a folder for SRS to be able to create a usercfg file
@@ -753,7 +755,6 @@ on property:sys.boot_completed=1
write /sys/block/dm-0/queue/read_ahead_kb 512
write /sys/block/sda/queue/read_ahead_kb 512
write /sys/block/sde/queue/read_ahead_kb 512
-
# CPE fw_name used by sound trigger HAL
chown media audio /sys/kernel/wcd_cpe0/fw_name
@@ -1185,7 +1186,6 @@ service drmdiag /system/bin/drmdiagapp
on property:drmdiag.load=1
start drmdiag
-
on property:drmdiag.load=0
stop drmdiag
@@ -1410,9 +1410,3 @@ service seemp_healthd /system/vendor/bin/seemp_healthd
class late_start
user system
group system
-
-#IFAA service
-service ifaad /system/bin/ifaad
- class late_start
- user system
- group system
diff --git a/rootdir/etc/init.qcom.sh b/rootdir/etc/init.qcom.sh
index c3511f6..176d9fe 100755
--- a/rootdir/etc/init.qcom.sh
+++ b/rootdir/etc/init.qcom.sh
@@ -72,12 +72,25 @@ if [ ! -f /firmware/verinfo/ver_info.txt -o "$prev_version_info" != "$cur_versio
rm -rf /data/misc/radio/modem_config
mkdir /data/misc/radio/modem_config
chmod 770 /data/misc/radio/modem_config
-#[Begin][public][PLAT-127][modem][mbn][wangxg7][20160121] Modify default mbn location
- #cp -r /firmware/image/modem_pr/mcfg/configs/* /data/misc/radio/modem_config
- cp -r /firmware/image/modem_pr/mcfg/fancy_co/* /data/misc/radio/modem_config
-#[End][public][PLAT-127][modem][mbn][wangxg7][20160121] Modify default mbn location
+ cp -r /firmware/image/modem_pr/mcfg/configs/* /data/misc/radio/modem_config
chown -hR radio.radio /data/misc/radio/modem_config
cp /firmware/verinfo/ver_info.txt /data/misc/radio/ver_info.txt
chown radio.radio /data/misc/radio/ver_info.txt
fi
+cp /firmware/image/modem_pr/mbn_ota.txt /data/misc/radio/modem_config
+chown radio.radio /data/misc/radio/modem_config/mbn_ota.txt
echo 1 > /data/misc/radio/copy_complete
+
+# Check build variant for printk logging
+# Current default minimum boot-time-default
+buildvariant=`getprop ro.build.type`
+case "$buildvariant" in
+ "userdebug" | "eng")
+ #set default loglevel to KERN_INFO
+ echo "6 6 1 7" > /proc/sys/kernel/printk
+ ;;
+ *)
+ #set default loglevel to KERN_WARNING
+ echo "4 4 1 4" > /proc/sys/kernel/printk
+ ;;
+esac
diff --git a/rootdir/etc/init.qcom.usb.rc b/rootdir/etc/init.qcom.usb.rc
index 9fe0e25..ee1cc63 100755
--- a/rootdir/etc/init.qcom.usb.rc
+++ b/rootdir/etc/init.qcom.usb.rc
@@ -28,6 +28,10 @@
on init
write /sys/class/android_usb/android0/f_rndis/wceis 1
write /sys/class/android_usb/android0/iSerial ${ro.serialno}
+ write /sys/class/android_usb/android0/iManufacturer ShenQi Inc.
+ write /sys/class/android_usb/android0/iProduct Z2-PLUS
+ write /sys/class/android_usb/android0/f_mass_storage/inquiry_string "ShenQi Z2-PLUS 0100"
+ write /sys/class/android_usb/android0/f_mass_storage/lun/file "/system/etc/cdrom_install.iso"
on fs
mkdir /dev/usb-ffs 0770 shell shell
@@ -40,55 +44,118 @@ service qcom-usb-sh /system/bin/sh /init.qcom.usb.sh
user root
oneshot
-# Following are the parameters required for usb functionality. They provide configurable options like
-# product_id/vendor id and allows specifying required functions:
-#
-# Required parameters:
-#
-# /sys/class/android_usb/android0/enable: Enables/disables usb composition
-# Value: 0 (disable), 1 (enable)
-#
-# /sys/class/android_usb/android0/idVendor: Stores Vendor ID
-# Value: 05c6 (Vendor id for Qualcomm Inc)
-#
-# /sys/class/android_usb/android0/idProduct: Stores Product id corresponding to usb composition
-# Value: 0x9xxx for composite interface, 0xFxxx for single interface
-#
-# /sys/class/android_usb/android0/f_diag/clients: Stores name of clients representing a diag interface.
-# Value: Passed one per interface. e.g. diag[,diag_mdm, diag_qsc, diag_mdm2]
-#
-# /sys/class/android_usb/android0/functions: Stores name of the function drivers used in usb composition.
-# Value: Passed one per function driver. e.g. diag[,adb]
-#
-#Optional parameters:
-#
-# /sys/class/android_usb/android0/f_serial/transports: Stores type of underlying transports used to
-# communicate to serial interface.
-# Value: Passed one per interface. One value represents control and data transport together.
-# e.g. smd[,sdio,tty,hsic]
-# Only required if serial interface is present.
-#
-# /sys/class/android_usb/android0/f_serial/transport_names: Stores name of the underlying transports
-# used to communicate to serial interface. This is used to distinguish between more than one interface
-# using same transport type.
-# Value: Passed one per interface. One value represents control and data transport together.
-# e.g. serial_hsic[,serial_hsusb]
-# Only required for transport type hsic, optional for other transport types.
-#
-# /sys/class/android_usb/android0/f_rmnet/transports: Stores type of underlying transports used to
-# communicate to rmnet interface.
-# Value: Passed two per interface as control, data transport type pair.
-# e.g. smd,bam[,hsuart,hsuart]
-# Only required if rmnet interface is present.
-#
-# /sys/class/android_usb/android0/f_rmnet/transport_names: Stores name of the underlying transports
-# used to communicate to rmnet interface. This is used to distinguish between more than one interface
-# using same transport type.
-# Value: Passed one per interface. One value represents control and data transport together.
-# e.g. rmnet_hsic[,rmnet_hsusb]
-# Only required for transport type hsic, optional for other transport types.
-
# USB compositions
+on property:sys.usb.config=diag
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 1
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports tty,tty,tty
+ write /sys/class/android_usb/android0/functions diag,adb,serial
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 2B4C
+ write /sys/class/android_usb/android0/idProduct 1016
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports char_bridge,tty
+ write /sys/class/android_usb/android0/f_mass_storage/lun/file "/system/etc/cdrom_install.iso"
+ write /sys/class/android_usb/android0/functions diag,serial,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mass_storage,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 2B4C
+ write /sys/class/android_usb/android0/idProduct 1017
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports char_bridge,tty
+ write /sys/class/android_usb/android0/f_mass_storage/lun/file "/system/etc/cdrom_install.iso"
+ write /sys/class/android_usb/android0/functions adb,diag,serial,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rndis
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 2B4C
+ write /sys/class/android_usb/android0/idProduct 1018
+ write /sys/class/android_usb/android0/functions rndis
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rndis,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 2B4C
+ write /sys/class/android_usb/android0/idProduct 1019
+ write /sys/class/android_usb/android0/functions rndis,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 2B4C
+ write /sys/class/android_usb/android0/idProduct 101A
+ write /sys/class/android_usb/android0/f_mass_storage/lun/file "/system/etc/cdrom_install.iso"
+ write /sys/class/android_usb/android0/functions mtp,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 2B4C
+ write /sys/class/android_usb/android0/idProduct 101B
+ write /sys/class/android_usb/android0/f_mass_storage/lun/file "/system/etc/cdrom_install.iso"
+ write /sys/class/android_usb/android0/functions mtp,mass_storage,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=ptp
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 2B4C
+ write /sys/class/android_usb/android0/idProduct 101C
+ write /sys/class/android_usb/android0/functions ptp
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=ptp,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 2B4C
+ write /sys/class/android_usb/android0/idProduct 101D
+ write /sys/class/android_usb/android0/functions ptp,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rndis,diag
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 90B5
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports char_bridge
+ write /sys/class/android_usb/android0/functions rndis,serial,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rndis,diag,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 90B6
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports char_bridge
+ write /sys/class/android_usb/android0/functions rndis,serial,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.tethering=true
+ write /sys/class/net/rndis0/queues/rx-0/rps_cpus ${sys.usb.rps_mask}
+
on property:sys.usb.config=diag,serial_tty,serial_smd
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 05C6
diff --git a/rootdir/etc/init.qcom.usb.sh b/rootdir/etc/init.qcom.usb.sh
index 6d31504..1b2ba3a 100755
--- a/rootdir/etc/init.qcom.usb.sh
+++ b/rootdir/etc/init.qcom.usb.sh
@@ -93,40 +93,42 @@ fi
target=`getprop ro.board.platform`
-#ifdef VENDOR_EDIT
-boot_mode=`getprop ro.boot.ftm_mode`
-echo "boot_mode: $boot_mode" > /dev/kmsg
-case "$boot_mode" in
- "ftm_at" | "ftm_rf" | "ftm_wlan" | "ftm_mos")
- usb_config=`getprop persist.sys.usb.config`
- echo "BEFORE boot_mode: $usb_config" > /dev/kmsg
- if [ "$usb_config" != "diag,adb" ] ; then
- setprop persist.sys.usb.config diag,adb
- fi
- ;;
-esac
-usb_config=`getprop persist.sys.usb.config`
-echo "AFTER boot_mode: $usb_config" > /dev/kmsg
-#endif
-
#
# Allow USB enumeration with default PID/VID
#
baseband=`getprop ro.baseband`
echo 1 > /sys/class/android_usb/f_mass_storage/lun/nofua
usb_config=`getprop persist.sys.usb.config`
-echo "BEFORE: $usb_config" > /dev/kmsg
case "$usb_config" in
- "" | "adb" | "none") #USB persist config not set, select default configuration
+ "" | "adb") #USB persist config not set, select default configuration
case "$esoc_link" in
+ "HSIC")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,mass_storage,adb
+ setprop persist.rmnet.mux enabled
+ ;;
+ "HSIC+PCIe")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_hsic,rmnet_qti_ether,mass_storage,adb
+ ;;
"PCIe")
setprop persist.sys.usb.config diag,diag_mdm,serial_cdev,rmnet_qti_ether,mass_storage,adb
;;
*)
- case "$soc_hwplatform" in
- "Dragon")
- setprop persist.sys.usb.config diag,adb
- ;;
+ case "$baseband" in
+ "mdm")
+ setprop persist.sys.usb.config mass_storage,adb
+ ;;
+ "mdm2")
+ setprop persist.sys.usb.config mass_storage,adb
+ ;;
+ "sglte")
+ setprop persist.sys.usb.config mass_storage,adb
+ ;;
+ "dsda" | "sglte2")
+ setprop persist.sys.usb.config mass_storage,adb
+ ;;
+ "dsda2")
+ setprop persist.sys.usb.config mass_storage,adb
+ ;;
*)
case "$target" in
"msm8916")
@@ -143,18 +145,13 @@ case "$usb_config" in
if [ "$soc_revision" == "1.0" -o "$soc_hwplatform" == "Dragon" ]
then
setprop persist.sys.usb.config diag,adb
- #[BSP-66]-Anderson-Disable_set_the_property.
- #This will ause BSP-66 issue and cause all the port enable in default.
- #else
- #setprop persist.sys.usb.config diag,serial_cdev,serial_tty,rmnet_ipa,mass_storage,adb
+ else
+ setprop persist.sys.usb.config diag,serial_cdev,serial_tty,rmnet_ipa,mass_storage,adb
fi
;;
"msm8909" | "msm8937")
setprop persist.sys.usb.config diag,serial_smd,rmnet_qti_bam,adb
;;
- "msm8952" | "titanium")
- setprop persist.sys.usb.config diag,serial_smd,rmnet_ipa,adb
- ;;
*)
setprop persist.sys.usb.config diag,adb
;;
@@ -163,12 +160,10 @@ case "$usb_config" in
esac
;;
esac
- ;;
- * ) ;; #USB persist config exists, do nothing
+ ;;
+ * ) ;; #USB persist config exists, do nothing
esac
-
-
#
# Do target specific things
#
@@ -189,10 +184,8 @@ case "$target" in
fi
fi
;;
- "msm8994" | "msm8992" | "msm8996" | "titanium")
+ "msm8994" | "msm8992" | "msm8996")
echo BAM2BAM_IPA > /sys/class/android_usb/android0/f_rndis_qc/rndis_transports
- echo 131072 > /sys/module/g_android/parameters/mtp_tx_req_len
- echo 131072 > /sys/module/g_android/parameters/mtp_rx_req_len
;;
esac
@@ -278,4 +271,3 @@ case "$soc_id" in
setprop sys.usb.rps_mask 10
;;
esac
-
diff --git a/rootdir/etc/recovery/recovery.fstab b/rootdir/etc/recovery/recovery.fstab
deleted file mode 100644
index 55e2669..0000000
--- a/rootdir/etc/recovery/recovery.fstab
+++ /dev/null
@@ -1,21 +0,0 @@
-# Android fstab file.
-# The filesystem that contains the filesystem checker binary (typically /system) cannot
-# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
-
-#TODO: Add 'check' as fs_mgr_flags with data partition.
-# Currently we dont have e2fsck compiled. So fs check would failed.
-
-#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
-/dev/block/bootdevice/by-name/boot /boot emmc defaults defaults
-/dev/block/bootdevice/by-name/recovery /recovery emmc defaults defaults
-/dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1,discard wait
-/dev/block/bootdevice/by-name/userdata /data f2fs nosuid,nodev,noatime,nodiratime,inline_xattr,data_flush wait,check,encryptable=footer,formattable,length=-16384
-/dev/block/bootdevice/by-name/userdata /data ext4 nosuid,nodev,noatime,nodiratime,barrier=1,noauto_da_alloc wait,check,encryptable=footer,formattable,length=-16384
-/dev/block/bootdevice/by-name/cache /cache f2fs nosuid,nodev,noatime,nodiratime,inline_xattr,flush_merge,data_flush wait,check,formattable
-/dev/block/bootdevice/by-name/cache /cache ext4 nosuid,nodev,noatime,nodiratime,barrier=1 wait,check,formattable
-/dev/block/bootdevice/by-name/persist /persist ext4 nosuid,nodev,barrier=1 wait
-/dev/block/bootdevice/by-name/dsp /dsp ext4 ro,nosuid,nodev,barrier=1 wait
-/dev/block/bootdevice/by-name/modem /firmware vfat ro,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337,context=u:object_r:firmware_file:s0 wait
-/dev/block/bootdevice/by-name/bluetooth /bt_firmware vfat ro,shortname=lower,uid=1002,gid=3002,dmask=222,fmask=333,context=u:object_r:bt_firmware_file:s0 wait
-
-/devices/soc/6a00000.ssusb/6a00000.dwc3/xhci-hcd.0.auto/usb* auto auto defaults voldmanaged=usbdisk:auto
diff --git a/rootdir/etc/ueventd.qcom.rc b/rootdir/etc/ueventd.qcom.rc
index 1851518..f4e00cb 100644
--- a/rootdir/etc/ueventd.qcom.rc
+++ b/rootdir/etc/ueventd.qcom.rc
@@ -160,8 +160,6 @@
/dev/smd2 0660 bluetooth net_bt_stack
/dev/ttyHSL1 0660 system system
/dev/ttyHS1 0660 system system
-/dev/ttyGS1 0660 system system
-/dev/smd8 0660 system system
/dev/mdm 0660 system radio
/sys/devices/virtual/smdpkt/smdcntl* open_timeout 0664 radio radio
/dev/sdio_tty_ciq_00 0660 system system
@@ -216,7 +214,7 @@
/sys/devices/soc/600000.qcom,pcie/pci0000:00/0000:00:00.0/0000:01:00.0/net/wlan0/queues/rx-* rps_cpus 0660 system system
/sys/devices/soc/600000.qcom,pcie/pci0000:00/0000:00:00.0/0000:01:00.0/net/p2p0/queues/rx-* rps_cpus 0660 system system
-# nfc permissions
+#nfc permissions
/dev/nfc-nci 0660 nfc nfc
/dev/nq-nci 0660 nfc nfc
/dev/assd 0660 nfc nfc
@@ -238,7 +236,7 @@
# Fingerprint device
/dev/qbt1000 0660 system system
-# ImproveTouch device
+#ImproveTouch device
/dev/hbtp_input 0660 system system
/dev/hbtp_vm 0660 system system
diff --git a/sepolicy/alipay_app.te b/sepolicy/alipay_app.te
index 6cc3ad2..1c80dd2 100644
--- a/sepolicy/alipay_app.te
+++ b/sepolicy/alipay_app.te
@@ -4,53 +4,3 @@ type alipay_app, domain;
app_domain(alipay_app)
net_domain(alipay_app)
bluetooth_domain(alipay_app)
-
-# Some apps ship with shared libraries and binaries that they write out
-# to their sandbox directory and then execute.
-allow alipay_app app_data_file:file { rx_file_perms execmod };
-
-# Used by Finsky / Android "Verify Apps" functionality when
-# running "adb install foo.apk".
-# TODO: Long term, we don't want apps probing into shell data files.
-# Figure out a way to remove these rules.
-allow alipay_app shell_data_file:file r_file_perms;
-allow alipay_app shell_data_file:dir r_dir_perms;
-
-# Read and write system app data files passed over Binder.
-# Motivating case was /data/data/com.android.settings/cache/*.jpg for
-# cropping or taking user photos.
-allow alipay_app system_app_data_file:file { read write getattr };
-
-#
-# Rules migrated from old app domains coalesced into alipay_app.
-# This includes what used to be media_app, shared_app, and release_app.
-#
-
-# Access to /data/media.
-allow alipay_app media_rw_data_file:dir create_dir_perms;
-allow alipay_app media_rw_data_file:file create_file_perms;
-
-# Traverse into /mnt/media_rw for bypassing FUSE daemon
-# TODO: narrow this to just MediaProvider
-allow alipay_app mnt_media_rw_file:dir search;
-
-# Write to /cache.
-allow alipay_app cache_file:dir create_dir_perms;
-allow alipay_app cache_file:file create_file_perms;
-
-allow alipay_app battery_service:service_manager find;
-allow alipay_app drmserver_service:service_manager find;
-allow alipay_app healthd_service:service_manager find;
-allow alipay_app mediaserver_service:service_manager find;
-allow alipay_app nfc_service:service_manager find;
-allow alipay_app radio_service:service_manager find;
-allow alipay_app surfaceflinger_service:service_manager find;
-allow alipay_app app_api_service:service_manager find;
-allow alipay_app ifaadaemon_service:service_manager find;
-
-# TODO: remove this once priv-apps are no longer running in alipay_app
-allow alipay_app system_api_service:service_manager find;
-
-# Programs routinely attempt to scan through /system, looking
-# for files. Suppress the denials when they occur.
-dontaudit alipay_app exec_type:file getattr;
diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts
index b89c4d0..686f99b 100644
--- a/sepolicy/file_contexts
+++ b/sepolicy/file_contexts
@@ -16,5 +16,4 @@
/data/fpc_images(/.*)? u:object_r:fpc_images_file:s0
/sys/devices/soc/soc:fpc_fpc1020/irq u:object_r:sysfs_fpc_irq:s0
-#IFAA
-/system/bin/ifaad u:object_r:ifaad_exec:s0
+/system/bin/ifaadaemon u:object_r:ifaadaemon_exec:s0
diff --git a/sepolicy/ifaad.te b/sepolicy/ifaad.te
deleted file mode 100644
index 3650eaa..0000000
--- a/sepolicy/ifaad.te
+++ /dev/null
@@ -1,26 +0,0 @@
-type ifaad, domain;
-type ifaad_exec, exec_type, file_type;
-
-#Allow for transition from init domain to ifaad
-init_daemon_domain(ifaad)
-
-#Allow ifaad to use Binder IPC
-binder_use(ifaad)
-
-#Allow servicemanager to interact with ifaad
-binder_call(ifaad, servicemanager)
-
-#Allow alipay_app to interact with ifaad
-binder_call(ifaad, alipay_app)
-
-#Mark ifaad as a Binder service domain
-binder_service(ifaad)
-
-#Allow ifaad to be registered with service manager
-allow ifaad ifaadaemon_service:service_manager add;
-
-#Allow access to tee device
-allow ifaad tee_device:chr_file rw_file_perms;
-
-#Allow access to firmware
-r_dir_file(ifaad, firmware_file)
diff --git a/sepolicy/ifaadaemon.te b/sepolicy/ifaadaemon.te
new file mode 100755
index 0000000..c458692
--- /dev/null
+++ b/sepolicy/ifaadaemon.te
@@ -0,0 +1,26 @@
+type ifaadaemon, domain;
+type ifaadaemon_exec, exec_type, file_type;
+
+#Allow for transition from init domain to ifaadaemon
+init_daemon_domain(ifaadaemon)
+
+#Allow ifaadaemon to use Binder IPC
+binder_use(ifaadaemon)
+
+#Allow servicemanager to interact with ifaadaemon
+binder_call(ifaadaemon, servicemanager)
+
+#Allow alipay_app to interact with ifaadaemon
+binder_call(ifaadaemon, alipay_app)
+
+#Mark ifaadaemon as a Binder service domain
+binder_service(ifaadaemon)
+
+#Allow ifaadaemon to be registered with service manager
+allow ifaadaemon ifaadaemon_service:service_manager add;
+
+#Allow access to tee device
+allow ifaadaemon tee_device:chr_file rw_file_perms;
+
+#Allow access to firmware
+r_dir_file(ifaadaemon, firmware_file)
diff --git a/sepolicy/platform_app.te b/sepolicy/platform_app.te
deleted file mode 100644
index 84de19f..0000000
--- a/sepolicy/platform_app.te
+++ /dev/null
@@ -1,2 +0,0 @@
-allow platform_app battery_service:service_manager find;
-allow platform_app healthd_service:service_manager find;
diff --git a/sepolicy/property_contexts b/sepolicy/property_contexts
index 854b445..4dbb541 100644
--- a/sepolicy/property_contexts
+++ b/sepolicy/property_contexts
@@ -1 +1,5 @@
-persist.sys.diag.max.size u:object_r:diag_prop:s0
+service.soundcard. u:object_r:audio_prop:s0
+audio. u:object_r:audio_prop:s0
+sys.fake_bs_flag0 u:object_r:system_radio_prop:s0
+sys.fake_bs_flag1 u:object_r:system_radio_prop:s0
+sys.oem.sno u:object_r:system_radio_prop:s0
diff --git a/sepolicy/seapp_contexts b/sepolicy/seapp_contexts
deleted file mode 100644
index c69f557..0000000
--- a/sepolicy/seapp_contexts
+++ /dev/null
@@ -1,2 +0,0 @@
-user=_app seinfo=alipay name=com.eg.android.AlipayGphone* domain=alipay_app type=app_data_file
-user=_app seinfo=taobao name=com.taobao.taobao* domain=alipay_app type=app_data_file
diff --git a/sepolicy/service_contexts b/sepolicy/service_contexts
deleted file mode 100644
index 118cacd..0000000
--- a/sepolicy/service_contexts
+++ /dev/null
@@ -1,2 +0,0 @@
-#IFAA
-android.hardware.ifaa.IIfaaDaemon u:object_r:ifaadaemon_service:s0
diff --git a/sepolicy/servicemanager.te b/sepolicy/servicemanager.te
index 2df4dc0..caf3d25 100644
--- a/sepolicy/servicemanager.te
+++ b/sepolicy/servicemanager.te
@@ -1,3 +1,3 @@
-allow servicemanager ifaad:dir r_dir_perms;
-allow servicemanager ifaad:file r_file_perms;
-allow servicemanager ifaad:process getattr;
+allow servicemanager ifaadaemon:dir r_dir_perms;
+allow servicemanager ifaadaemon:file r_file_perms;
+allow servicemanager ifaadaemon:process getattr;
diff --git a/setup-makefiles.sh b/setup-makefiles.sh
index 076171d..72b7ac6 100755
--- a/setup-makefiles.sh
+++ b/setup-makefiles.sh
@@ -1,43 +1,5 @@
#!/bin/bash
-
-DEVICE=z2_plus
-VENDOR=zuk
-
-OUTDIR=vendor/$VENDOR/$DEVICE
-MAKEFILE=../../../$OUTDIR/$DEVICE-vendor-blobs.mk
-
-(cat << EOF) > $MAKEFILE
-# Copyright (C) 2016 The CyanogenMod Project
#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# This file is generated by device/$VENDOR/$DEVICE/setup-makefiles.sh
-
-PRODUCT_COPY_FILES += \\
-EOF
-
-LINEEND=" \\"
-COUNT=`wc -l proprietary-files.txt | awk {'print $1'}`
-DISM=`egrep -c '(^#|^$)' proprietary-files.txt`
-COUNT=`expr $COUNT - $DISM`
-for FILE in `egrep -v '(^#|^$)' ../$DEVICE/proprietary-files.txt`; do
- COUNT=`expr $COUNT - 1`
- if [[ ! "$FILE" =~ ^-.* ]]; then
- echo " $OUTDIR/proprietary/$FILE:/system/$FILE$LINEEND" >> $MAKEFILE
- fi
-done
-
-(cat << EOF) > ../../../$OUTDIR/$DEVICE-vendor.mk
# Copyright (C) 2016 The CyanogenMod Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -51,324 +13,53 @@ done
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-
-# This file is generated by device/$VENDOR/$DEVICE/setup-makefiles.sh
-
-# Pick up overlay for features that depend on non-open-source files
-PRODUCT_PACKAGES += \\
- CNEService \\
- com.qualcomm.location \\
- datastatusnotification \\
- embms \\
- dpmserviceapp \\
- fastdormancy \\
- ims \\
- imssettings \\
- QtiTelephonyService \\
- QtiTetherService \\
- shutdownlistener \\
- TimeService
-
-PRODUCT_PACKAGES += \\
- qcnvitems \\
- qcrilhook \\
- qcrilmsgtunnel
-
-PRODUCT_PACKAGES += \\
- libloc_api_v02
-
-PRODUCT_PACKAGES += \\
- libsdm-disp-apis \\
- libtime_genoff \\
- libthermalclient
-
-PRODUCT_PACKAGES += \\
- colorservice \\
- qdcm_calib_data_samsung_s6e3fa3_1080p_cmd_mode_dsi_panel.xml \\
- qdcm_calib_data_samsung_s6e3fa3_1080p_video_mode_dsi_panel.xml
-
-\$(call inherit-product, vendor/$VENDOR/$DEVICE/$DEVICE-vendor-blobs.mk)
-EOF
-
-(cat << EOF) > ../../../$OUTDIR/BoardConfigVendor.mk
-# Copyright (C) 2016 The CyanogenMod Project
#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# This file is generated by device/$VENDOR/$DEVICE/setup-makefiles.sh
-EOF
-
-(cat << EOF) > ../../../$OUTDIR/Android.mk
-# Copyright (C) 2016 The CyanogenMod Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# This file is generated by device/$VENDOR/$DEVICE/setup-makefiles.sh
+set -e
-LOCAL_PATH := \$(call my-dir)
-
-ifeq (\$(TARGET_DEVICE),$DEVICE)
-
-include \$(CLEAR_VARS)
-LOCAL_MODULE := CNEService
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/priv-app/CNEService/CNEService.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_PRIVILEGED_MODULE := true
-LOCAL_CERTIFICATE := platform
-include \$(BUILD_PREBUILT)
-
-include \$(CLEAR_VARS)
-LOCAL_MODULE := colorservice
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/vendor/app/colorservice/colorservice.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_CERTIFICATE := platform
-LOCAL_PROPRIETARY_MODULE := true
-include \$(BUILD_PREBUILT)
-
-include \$(CLEAR_VARS)
-LOCAL_MODULE := com.qualcomm.location
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/priv-app/com.qualcomm.location/com.qualcomm.location.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_PRIVILEGED_MODULE := true
-LOCAL_CERTIFICATE := platform
-include \$(BUILD_PREBUILT)
-
-include \$(CLEAR_VARS)
-LOCAL_MODULE := datastatusnotification
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/app/datastatusnotification/datastatusnotification.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_CERTIFICATE := platform
-include \$(BUILD_PREBUILT)
-
-include \$(CLEAR_VARS)
-LOCAL_MODULE := dpmserviceapp
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/priv-app/dpmserviceapp/dpmserviceapp.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_PRIVILEGED_MODULE := true
-LOCAL_CERTIFICATE := platform
-include \$(BUILD_PREBUILT)
-
-include \$(CLEAR_VARS)
-LOCAL_MODULE := embms
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/app/embms/embms.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_CERTIFICATE := platform
-include \$(BUILD_PREBUILT)
-
-include \$(CLEAR_VARS)
-LOCAL_MODULE := fastdormancy
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/app/fastdormancy/fastdormancy.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_CERTIFICATE := platform
-include \$(BUILD_PREBUILT)
-
-include \$(CLEAR_VARS)
-LOCAL_MODULE := ims
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/vendor/app/ims/ims.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_CERTIFICATE := platform
-LOCAL_PROPRIETARY_MODULE := true
-include \$(BUILD_PREBUILT)
+# Required!
+DEVICE=z2
+VENDOR=zuk
-include \$(CLEAR_VARS)
-LOCAL_MODULE := imssettings
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/vendor/app/imssettings/imssettings.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_CERTIFICATE := platform
-LOCAL_PROPRIETARY_MODULE := true
-include \$(BUILD_PREBUILT)
+# Load extractutils and do some sanity checks
+MY_DIR="${BASH_SOURCE%/*}"
+if [[ ! -d "$MY_DIR" ]]; then MY_DIR="$PWD"; fi
-include \$(CLEAR_VARS)
-LOCAL_MODULE := qcrilmsgtunnel
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/priv-app/qcrilmsgtunnel/qcrilmsgtunnel.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_PRIVILEGED_MODULE := true
-LOCAL_CERTIFICATE := platform
-include \$(BUILD_PREBUILT)
+CM_ROOT="$MY_DIR"/../../..
-include \$(CLEAR_VARS)
-LOCAL_MODULE := QtiTelephonyService
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/app/QtiTelephonyService/QtiTelephonyService.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_CERTIFICATE := platform
-include \$(BUILD_PREBUILT)
+# Qualcomm BSP blobs - we put a conditional around here
+# in case the BSP is actually being built
+printf '\n%s\n' "ifeq (\$(QCPATH),)" >> "$PRODUCTMK"
+printf '\n%s\n' "ifeq (\$(QCPATH),)" >> "$ANDROIDMK"
-include \$(CLEAR_VARS)
-LOCAL_MODULE := QtiTetherService
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/priv-app/QtiTetherService/QtiTetherService.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_PRIVILEGED_MODULE := true
-LOCAL_CERTIFICATE := platform
-include \$(BUILD_PREBUILT)
-include \$(CLEAR_VARS)
-LOCAL_MODULE := shutdownlistener
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/app/shutdownlistener/shutdownlistener.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_CERTIFICATE := platform
-include \$(BUILD_PREBUILT)
+# Qualcomm performance blobs - conditional as well
+# in order to support Cyanogen OS builds
+cat << EOF >> "$PRODUCTMK"
+endif
-include \$(CLEAR_VARS)
-LOCAL_MODULE := TimeService
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/app/TimeService/TimeService.apk
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := APPS
-LOCAL_CERTIFICATE := platform
-include \$(BUILD_PREBUILT)
+-include vendor/extra/devices.mk
+ifneq (\$(call is-qc-perf-target),true)
+EOF
-include \$(CLEAR_VARS)
-LOCAL_MODULE := qcnvitems
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/framework/qcnvitems.jar
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_JAVA_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-LOCAL_CERTIFICATE := PRESIGNED
-include \$(BUILD_PREBUILT)
+cat << EOF >> "$ANDROIDMK"
+endif
-include \$(CLEAR_VARS)
-LOCAL_MODULE := qcrilhook
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES := proprietary/framework/qcrilhook.jar
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := \$(COMMON_JAVA_PACKAGE_SUFFIX)
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-LOCAL_CERTIFICATE := PRESIGNED
-include \$(BUILD_PREBUILT)
+ifneq (\$(TARGET_HAVE_QC_PERF),true)
+EOF
-include \$(CLEAR_VARS)
-LOCAL_MODULE := libloc_api_v02
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES_64 := proprietary/lib64/libloc_api_v02.so
-LOCAL_SRC_FILES_32 := proprietary/lib/libloc_api_v02.so
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_PATH_64 := \$(TARGET_OUT_SHARED_LIBRARIES)
-LOCAL_MODULE_PATH_32 := \$(2ND_TARGET_OUT_SHARED_LIBRARIES)
-LOCAL_MULTILIB := both
-include \$(BUILD_PREBUILT)
-include \$(CLEAR_VARS)
-LOCAL_MODULE := libsdm-disp-apis
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES_64 := proprietary/vendor/lib64/libsdm-disp-apis.so
-LOCAL_SRC_FILES_32 := proprietary/vendor/lib/libsdm-disp-apis.so
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_PATH_64 := \$(TARGET_OUT_VENDOR_SHARED_LIBRARIES)
-LOCAL_MODULE_PATH_32 := \$(2ND_TARGET_OUT_VENDOR_SHARED_LIBRARIES)
-LOCAL_MULTILIB := both
-LOCAL_PROPRIETARY_MODULE := true
-include \$(BUILD_PREBUILT)
-include \$(CLEAR_VARS)
-LOCAL_MODULE := libtime_genoff
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES_64 := proprietary/vendor/lib64/libtime_genoff.so
-LOCAL_SRC_FILES_32 := proprietary/vendor/lib/libtime_genoff.so
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_PATH_64 := \$(TARGET_OUT_VENDOR_SHARED_LIBRARIES)
-LOCAL_MODULE_PATH_32 := \$(2ND_TARGET_OUT_VENDOR_SHARED_LIBRARIES)
-LOCAL_MULTILIB := both
-LOCAL_PROPRIETARY_MODULE := true
-include \$(BUILD_PREBUILT)
+echo "endif" >> "$PRODUCTMK"
-include \$(CLEAR_VARS)
-LOCAL_MODULE := libthermalclient
-LOCAL_MODULE_OWNER := $VENDOR
-LOCAL_SRC_FILES_64 := proprietary/vendor/lib64/libthermalclient.so
-LOCAL_SRC_FILES_32 := proprietary/vendor/lib/libthermalclient.so
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_PATH_64 := \$(TARGET_OUT_VENDOR_SHARED_LIBRARIES)
-LOCAL_MODULE_PATH_32 := \$(2ND_TARGET_OUT_VENDOR_SHARED_LIBRARIES)
-LOCAL_MULTILIB := both
-LOCAL_PROPRIETARY_MODULE := true
-include \$(BUILD_PREBUILT)
+cat << EOF >> "$ANDROIDMK"
-include \$(CLEAR_VARS)
-LOCAL_MODULE := qdcm_calib_data_samsung_s6e3fa3_1080p_cmd_mode_dsi_panel.xml
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := ETC
-LOCAL_SRC_FILES := proprietary/etc/qdcm_calib_data_samsung_s6e3fa3_1080p_cmd_mode_dsi_panel.xml
-include \$(BUILD_PREBUILT)
+endif
-include \$(CLEAR_VARS)
-LOCAL_MODULE := qdcm_calib_data_samsung_s6e3fa3_1080p_video_mode_dsi_panel.xml
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := ETC
-LOCAL_SRC_FILES := proprietary/etc/qdcm_calib_data_samsung_s6e3fa3_1080p_video_mode_dsi_panel.xml
-include \$(BUILD_PREBUILT)
+EOF
-\$(shell mkdir -p \$(PRODUCT_OUT)/system/vendor/lib/egl && pushd \$(PRODUCT_OUT)/system/vendor/lib > /dev/null && ln -s egl/libEGL_adreno.so libEGL_adreno.so && popd > /dev/null)
-\$(shell mkdir -p \$(PRODUCT_OUT)/system/vendor/lib64/egl && pushd \$(PRODUCT_OUT)/system/vendor/lib64 > /dev/null && ln -s egl/libEGL_adreno.so libEGL_adreno.so && popd > /dev/null)
+printf '\n%s\n' "\$(call inherit-product, vendor/qcom/binaries/msm8996/graphics/graphics-vendor.mk)" >> "$PRODUCTMK"
-endif
+# We are done!
+write_footers
-EOF
diff --git a/tftp.mk b/symlinks.mk
index 568f0fa..568f0fa 100644
--- a/tftp.mk
+++ b/symlinks.mk
diff --git a/system.prop b/system.prop
index 06d3ceb..f20c944 100644
--- a/system.prop
+++ b/system.prop
@@ -16,26 +16,29 @@ persist.rild.nitz_short_ons_2=
persist.rild.nitz_short_ons_3=
ril.subscription.types=NV,RUIM
DEVICE_PROVISIONED=1
+
persist.radio.multisim.config=dsds
persist.volte_enalbed_by_hw=1
persist.radio.data_ltd_sys_ind=1
ro.telephony.default_network=22,22
-#Flip panel
-persist.panel.inversemounted=1
-persist.panel.mountflip=3
-
-# OTA Updates
-ro.ota.systemname=CM13
-ro.ota.version=2016102900
-ro.ota.manifest=https://raw.githubusercontent.com/cryscript/misc/master/ota.xml
-
debug.sf.hw=1
debug.egl.hw=1
debug.gralloc.enable_fb_ubwc=1
-dalvik.vm.heapsize=36m
dev.pm.dyn_samplingrate=1
persist.demo.hdmirotationlock=false
+#######################################
+# Compatible with old qcom base line.
+persist.panel.inversemounted=1
+#######################################
+# Compatible with qcom c2 base line.
+# Defined in [DisplayDevice.cpp]
+# 1: H-Flip, 2: V-Flip, 3: 180 (HV Flip)
+# Qcom Relevant files:
+# [services/surfaceflinger/DisplayDevice.cpp]
+# [services/surfaceflinger/DisplayDevice.h]
+# [services/surfaceflinger/SurfaceFlinger.cpp]
+ro.panel.mountflip=3
#ro.hdmi.enable=true
persist.speaker.prot.enable=true
@@ -49,27 +52,26 @@ persist.cne.feature=1
persist.net.doxlat=true
#system props for the MM modules
-media.stagefright.enable-player=true
-media.stagefright.enable-http=true
-media.stagefright.enable-aac=true
-media.stagefright.enable-qcp=true
-media.stagefright.enable-fma2dp=true
-media.stagefright.enable-scan=true
-mmp.enable.3g2=true
+#media.stagefright.enable-player=true
+#media.stagefright.enable-http=true
+#media.stagefright.enable-aac=true
+#media.stagefright.enable-qcp=true
+#media.stagefright.enable-fma2dp=true
+#media.stagefright.enable-scan=true
+#mmp.enable.3g2=true
media.aac_51_output_enabled=true
-mm.enable.sec.smoothstreaming=true
-av.debug.disable.pers.cache=true
+#mm.enable.sec.smoothstreaming=true
+#av.debug.disable.pers.cache=true
#185971 is decimal sum of supported parsers in AAL
#37491 is decimal sum of supported codecs in AAL
#codecs:(PARSER_)AAC AC3 AMR_NB AMR_WB ASF AVI DTS FLV 3GP 3G2 MKV MP2PS MP2TS MP3 OGG QCP WAV FLAC AIFF APE
-mm.enable.qcom_parser=1048575
-persist.mm.enable.prefetch=true
+#persist.mm.enable.prefetch=true
# Additional i/p buffer in case of encoder DCVS
-vidc.enc.dcvs.extra-buff-count=2
+#vidc.enc.dcvs.extra-buff-count=2
# Set default power mode to low power for encoder
-vidc.debug.perf.mode=2
+#vidc.debug.perf.mode=2
#
# system props for the data modules
@@ -140,9 +142,9 @@ persist.data.df.iwlan_mux=9
persist.data.df.dev_name=rmnet_usb0
#property to enable user to access Google WFD settings
-persist.debug.wfd.enable=1
+#persist.debug.wfd.enable=1
##property to choose between virtual/external wfd display
-persist.sys.wfd.virtual=0
+#persist.sys.wfd.virtual=0
#property to enable sde downscale feature for external display
#sdm.debug.downscale_external=1
@@ -177,6 +179,9 @@ use.voice.path.for.pcm.voip=true
#Enable multi channel aac through offload
audio.offload.multiaac.enable=true
+# system prop for NFC DT
+ro.nfc.port=I2C
+
#enable dsp gapless mode by default
audio.offload.gapless.enabled=true
@@ -187,25 +192,12 @@ audio.safx.pbe.enabled=true
audio.parser.ip.buffer.size=262144
#property to enable WFD WL solution
-ro.vendor.wl_library=libqti-wl.so
+#ro.vendor.wl_library=libqti-wl.so
#property for vendor specific library
-ro.vendor.gt_library=libqti-gt.so
-ro.vendor.at_library=libqti-at.so
-sys.games.gt.prof=1
-
-#hwui properties
-ro.hwui.texture_cache_size=72
-ro.hwui.layer_cache_size=48
-ro.hwui.r_buffer_cache_size=8
-ro.hwui.path_cache_size=32
-ro.hwui.gradient_cache_size=1
-ro.hwui.drop_shadow_cache_size=6
-ro.hwui.texture_cache_flushrate=0.4
-ro.hwui.text_small_cache_width=1024
-ro.hwui.text_small_cache_height=1024
-ro.hwui.text_large_cache_width=2048
-ro.hwui.text_large_cache_height=1024
+#ro.vendor.gt_library=libqti-gt.so
+#ro.vendor.at_library=libqti-at.so
+#sys.games.gt.prof=1
#Disable property for Dolby ds2
audio.dolby.ds2.enabled=false
@@ -236,7 +228,7 @@ sdm.debug.disable_rotator_split=1
ro.sys.fw.bg_apps_limit=60
#Camera fullscreen doesn't show navigation bar
-Camera.no_navigation_bar=true
+#Camera.no_navigation_bar=true
#[Begin][public][PLAT-127][modem][mbn][wangxg7][20160121] Enable mbn & VoLTE & VT & dsds property
persist.radio.sw_mbn_update=1
@@ -269,30 +261,28 @@ ro.roaming.vendor=redtea
persist.sys.leds.enabled=false
ro.vendor.extension_library=libqti-perfd-client.so
+
persist.radio.apm_sim_not_pwdn=1
persist.radio.sib16_support=1
persist.radio.custom_ecc=1
-af.fast_track_multiplier=1
audio_hal.period_size=192
-ro.sf.lcd_density=480
-
-persist.lcd.saturation=0
-persist.lcd.temperature=1
-persist.lcd.careeyes=0
-persist.lcd.cabccustom=1
-persist.lcd.cabcinternal=0
-persist.lcd.sunlight=0
-persist.lcd.autosunlight=0
-persist.lcd.imageenhance=1
-persist.lcd.ppmode=0
-persist.radio.data_ltd_sys_ind=1
-vidc.debug.level=0
-
persist.gps.qc_nlp_in_use=1
persist.loc.nlp_name=com.qualcomm.location
ro.gps.agps_provider=1
-#add for CMCC FT UE did not camp on IMS after TDS moving to LTE.
-persist.radio.apn_ff_delay=20000
+ro.sf.lcd_density=480
+
+# Perf
+ro.am.reschedule_service=true
+ro.vendor.extension_library=libqti-perfd-client.so
+ro.min_freq_0=307200
+ro.min_freq_4=307200
+ro.sys.fw.bg_apps_limit=60
+
+media.stagefright.legacyencoder=true
+# Camera
+persist.camera.imglib.fddsp=1
+persist.camera.llc=1
+persist.camera.llnoise=1
diff --git a/vendor/copyfiles.mk b/vendor/copyfiles.mk
deleted file mode 100755
index bb31048..0000000
--- a/vendor/copyfiles.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (C) 2016 The Cyanogen Mod Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#
-# This file sets variables that control the way modules are built
-# thorughout the system. It should not be used to conditionally
-# disable makefiles (the proper mechanism to control what gets
-# included in a build is to use PRODUCT_PACKAGES in a product
-# definition file).
-#
-
-copy_files := $(subst $(LOCAL_PATH)/,, \
- $(filter-out %.mk,\
- $(patsubst ./%,%, \
- $(shell find $(LOCAL_PATH) -type f -name "*" -and -not -name ".*") \
- )))
-
-PRODUCT_COPY_FILES += $(foreach file,$(copy_files),\
- $(LOCAL_PATH)/$(file):$(file))
diff --git a/vendor/system/priv-app/FedorOTA/FedorOTA.apk b/vendor/system/priv-app/FedorOTA/FedorOTA.apk
deleted file mode 100644
index 31efe7c..0000000
--- a/vendor/system/priv-app/FedorOTA/FedorOTA.apk
+++ /dev/null
Binary files differ
diff --git a/vendorsetup.sh b/vendorsetup.sh
deleted file mode 100644
index aaf7488..0000000
--- a/vendorsetup.sh
+++ /dev/null
@@ -1 +0,0 @@
-add_lunch_combo cm_z2_plus-userdebug