diff --git a/CleanSpec.mk b/CleanSpec.mk old mode 100755 new mode 100644 diff --git a/etc/Android.mk b/etc/Android.mk old mode 100755 new mode 100644 diff --git a/etc/gps.conf b/etc/gps.conf old mode 100644 new mode 100755 index 7ba64837..36cf35fe --- a/etc/gps.conf +++ b/etc/gps.conf @@ -1,3 +1,12 @@ +XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin +XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin +XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin + +# Error Estimate +# _SET = 1 +# _CLEAR = 0 +ERR_ESTIMATE=0 + #Test NTP_SERVER=time.gpsonextra.net #Asia @@ -7,13 +16,9 @@ NTP_SERVER=time.gpsonextra.net #North America # NTP_SERVER=north-america.pool.ntp.org -XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin -XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin -XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin - # DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info # 4 - Debug, 5 - Verbose -DEBUG_LEVEL = 2 +DEBUG_LEVEL = 3 # Intermediate position report, 1=enable, 0=disable INTERMEDIATE_POS=0 @@ -21,18 +26,14 @@ INTERMEDIATE_POS=0 # supl version 1.0 SUPL_VER=0x10000 -# Error Estimate -# _SET = 1 -# _CLEAR = 0 -ERR_ESTIMATE=0 - # GPS Capabilities bit mask -# SCHEDULING = 1 -# MSB = 2 -# MSA = 4 +# SCHEDULING = 0x01 +# MSB = 0x02 +# MSA = 0x04 +# ON_DEMAND_TIME = 0x10 # GEOFENCE = 0x20 -# default = MSA | MSB | SCHEDULING | GEOFENCE -CAPABILITIES=0x27 +# default = ON_DEMAND_TIME | MSA | MSB | SCHEDULING | GEOFENCE +CAPABILITIES=0x37 # Accuracy threshold for intermediate positions # less accurate positions are ignored, 0 for passing all positions @@ -50,42 +51,25 @@ CAPABILITIES=0x27 # C2K_HOST=c2k.pde.com or IP # C2K_PORT=1234 -################################ -# Sensor Settings -################################ - -# Needs to be set explicitly based on sensor -# There is no default value. -#GYRO_BIAS_RANDOM_WALK= - -SENSOR_ACCEL_BATCHES_PER_SEC=2 -SENSOR_ACCEL_SAMPLES_PER_BATCH=5 -SENSOR_GYRO_BATCHES_PER_SEC=2 -SENSOR_GYRO_SAMPLES_PER_BATCH=5 - -# Sensor Control Mode (0=AUTO, 1=FORCE_ON) -SENSOR_CONTROL_MODE=0 - -# Enable or Disable Sensors for GPS use (0=Enable, 1=Disable) -SENSOR_USAGE=1 - -# Choose GSIFF sensor provider (1=DSPS, 2=Android NDK) -SENSOR_PROVIDER=1 - -################################ -# Indoor Positioning Settings -################################ -# 0: QUIPC disabled, 1: QUIPC enabled, 2: forced QUIPC only -QUIPC_ENABLED = 0 +#################################### +# LTE Positioning Profile Settings +#################################### +# 0: Enable RRLP on LTE(Default) +# 1: Enable LPP_User_Plane on LTE +# 2: Enable LPP_Control_Plane +# 3: Enable both LPP_User_Plane and LPP_Control_Plane +LPP_PROFILE = 0 ################################ # EXTRA SETTINGS ################################ -# Enable or Disable Wiper (1=Enable, 0=Disable) -ENABLE_WIPER=0 +# NMEA provider (1=Modem Processor, 0=Application Processor) +NMEA_PROVIDER=0 -#################################### -# LTE Positioning Profile Settings -#################################### -# 0: Enable RRLP on LTE(Default) 1: Enable LPP_User_Plane on LTE -LPP_PROFILE = 0 +################################################## +# Select Positioning Protocol on A-GLONASS system +################################################## +# 0x1: RRC CPlane +# 0x2: RRLP UPlane +# 0x4: LLP Uplane +A_GLONASS_POS_PROTOCOL_SELECT = 0 diff --git a/loc_api/Android.mk b/loc_api/Android.mk old mode 100755 new mode 100644 index e9c8d1e6..dd7a8f31 --- a/loc_api/Android.mk +++ b/loc_api/Android.mk @@ -1,18 +1,12 @@ -# Copyright (c) 2009, QUALCOMM USA, INC. -# All rights reserved. -# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -# · Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -# · Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -# · Neither the name of the QUALCOMM USA, INC. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ifneq ($(BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE),) LOCAL_PATH := $(call my-dir) GPS_DIR_LIST := -ifeq (exists, $(shell test -d $(TOP)/vendor/qcom/proprietary/qmi-framework && echo exists)) +FEATURE_IPV6 := true +FEATURE_DELEXT := true +FEATURE_ULP := true # add RPC dirs if RPC is available ifneq ($(TARGET_NO_RPC),true) @@ -23,8 +17,18 @@ GPS_DIR_LIST += $(LOCAL_PATH)/libloc_api/ endif #TARGET_NO_RPC +ifeq ($(BOARD_USES_QCOM_HARDWARE), true) +#add QMI libraries for QMI targets +QMI_BOARD_PLATFORM_LIST := msm8960 +QMI_BOARD_PLATFORM_LIST += msm8974 +QMI_BOARD_PLATFORM_LIST += msm8226 +QMI_BOARD_PLATFORM_LIST += msm8610 endif +ifeq ($(call is-board-platform-in-list,$(QMI_BOARD_PLATFORM_LIST)),true) +GPS_DIR_LIST += $(LOCAL_PATH)/loc_api_v02/ +endif #is-board-platform-in-list + GPS_DIR_LIST += $(LOCAL_PATH)/libloc_api_50001/ #call the subfolders diff --git a/loc_api/NOTICE b/loc_api/NOTICE old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api-rpc-50001/Android.mk b/loc_api/libloc_api-rpc-50001/Android.mk old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/Android.mk b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/Android.mk old mode 100755 new mode 100644 index c7a245b8..6a7c11cb --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/Android.mk +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/Android.mk @@ -20,6 +20,10 @@ LOCAL_CFLAGS+=$(GPS_FEATURES) # for loc_api_fixup.c LOCAL_CFLAGS+=-DADD_XDR_FLOAT -DADD_XDR_BOOL +ifeq ($(FEATURE_IPV6), true) +LOCAL_CFLAGS += -DFEATURE_IPV6 +endif #FEATURE_IPV6 + LOCAL_SHARED_LIBRARIES:= \ librpc \ libutils \ diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpcAdapter.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpcAdapter.h index 7b1f59ba..bdb28be4 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpcAdapter.h +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/LocApiRpcAdapter.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -38,6 +38,8 @@ class LocApiRpcAdapter : public LocApiAdapter { // RPC communication establishment rpc_loc_client_handle_type client_handle; rpc_loc_event_mask_type eMask; + int dataEnableLastSet; + char apnLastSet[MAX_APN_LEN]; static const rpc_loc_event_mask_type locBits[]; static rpc_loc_event_mask_type convertMask(LOC_API_ADAPTER_EVENT_MASK_T mask); @@ -71,10 +73,11 @@ public: virtual enum loc_api_adapter_err stopFix(); virtual enum loc_api_adapter_err - setPositionMode(LocPositionMode mode, GpsPositionRecurrence recurrence, - uint32_t min_interval, uint32_t preferred_accuracy, uint32_t preferred_time); + setPositionMode(const LocPosMode *mode); + inline virtual enum loc_api_adapter_err + enableData(int enable) { return enableData(enable, false); } virtual enum loc_api_adapter_err - enableData(int enable); + enableData(int enable, boolean force); virtual enum loc_api_adapter_err setTime(GpsUtcTime time, int64_t timeReference, int uncertainty); virtual enum loc_api_adapter_err @@ -83,20 +86,30 @@ public: deleteAidingData(GpsAidingData f); virtual enum loc_api_adapter_err informNiResponse(GpsUserResponseType userResponse, const void* passThroughData); + inline virtual enum loc_api_adapter_err + setAPN(char* apn, int len) { return setAPN(apn, len, false); } virtual enum loc_api_adapter_err - setAPN(char* apn, int len); + setAPN(char* apn, int len, boolean force); virtual enum loc_api_adapter_err setServer(const char* url, int len); virtual enum loc_api_adapter_err setServer(unsigned int ip, int port, LocServerType type); virtual enum loc_api_adapter_err setXtraData(char* data, int length); +#ifdef FEATURE_IPV6 virtual enum loc_api_adapter_err atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bear, AGpsType agpsType); +#else + virtual enum loc_api_adapter_err + atlOpenStatus(int handle, int is_succ, char* apn, + AGpsType agpsType); +#endif virtual enum loc_api_adapter_err atlCloseStatus(int handle, int is_succ); virtual enum loc_api_adapter_err setSUPLVersion(uint32_t version); + + virtual void setInSession(bool inSession); }; #endif //LOC_API_RPC_ADAPTER_H diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/debug.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/debug.h index 8b20a3f5..49a6d0be 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/debug.h +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/debug.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -37,7 +37,7 @@ #define PRINT(x...) do { \ fprintf(stdout, "%s(%d) ", __FUNCTION__, __LINE__); \ fprintf(stdout, ##x); \ - LOGD(x); \ + ALOGD(x); \ } while(0) #ifdef DEBUG @@ -55,14 +55,14 @@ #define E(x...) do { \ fprintf(stderr, "%s(%d) ", __FUNCTION__, __LINE__); \ fprintf(stderr, ##x); \ - LOGE(x); \ + ALOGE(x); \ } while(0) #define FAILIF(cond, msg...) do { \ if (__builtin_expect (cond, 0)) { \ fprintf(stderr, "%s:%s:(%d): ", __FILE__, __FUNCTION__, __LINE__); \ fprintf(stderr, ##msg); \ - LOGE(##msg); \ + ALOGE(##msg); \ } \ } while(0) diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_fixup.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_fixup.h index 9bfe5f0c..c483b4a1 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_fixup.h +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_fixup.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_log.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_log.h index c0bcda16..f0374280 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_log.h +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_log.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_rpc_glue.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_rpc_glue.h index 16552a0c..010e1478 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_rpc_glue.h +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_rpc_glue.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_sync_call.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_sync_call.h index 266f8ec8..43208bda 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_sync_call.h +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_api_sync_call.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_apicb_appinit.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_apicb_appinit.h index 8dbcb9ac..ba41d08b 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_apicb_appinit.h +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/rpc_inc/loc_apicb_appinit.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpcAdapter.cpp b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpcAdapter.cpp index ec98bed2..9c2749bd 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpcAdapter.cpp +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/LocApiRpcAdapter.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2013, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -98,7 +98,7 @@ static void loc_rpc_global_cb(void* user, CLIENT* clnt, enum rpc_reset_event eve } -extern "C" LocApiAdapter* getLocApiAdapter(LocEng &locEng) +LocApiAdapter* getLocApiAdapter(LocEng &locEng) { return new LocApiRpcAdapter(locEng); } @@ -119,8 +119,10 @@ const rpc_loc_event_mask_type LocApiRpcAdapter::locBits[] = LocApiRpcAdapter::LocApiRpcAdapter(LocEng &locEng) : LocApiAdapter(locEng), client_handle(RPC_LOC_CLIENT_HANDLE_INVALID), - eMask(convertMask(locEng.eventMask)) + eMask(convertMask(locEng.eventMask)), + dataEnableLastSet(-1) { + memset(apnLastSet, 0, sizeof(apnLastSet)); loc_api_glue_init(); } @@ -298,9 +300,7 @@ LocApiRpcAdapter::stopFix() { } enum loc_api_adapter_err -LocApiRpcAdapter::setPositionMode(LocPositionMode mode, - GpsPositionRecurrence recurrence, uint32_t min_interval, - uint32_t preferred_accuracy, uint32_t preferred_time) +LocApiRpcAdapter::setPositionMode(const LocPosMode *posMode) { rpc_loc_ioctl_data_u_type ioctl_data; rpc_loc_fix_criteria_s_type *fix_criteria_ptr; @@ -308,10 +308,13 @@ LocApiRpcAdapter::setPositionMode(LocPositionMode mode, rpc_loc_operation_mode_e_type op_mode; int ret_val; - LOGD ("loc_eng_set_position mode, client = %d, interval = %d, mode = %d\n", - (int32) client_handle, min_interval, mode); + if (NULL != posMode) + fixCriteria = *posMode; - switch (mode) + ALOGD ("loc_eng_set_position mode, client = %d, interval = %d, mode = %d\n", + (int32) client_handle, fixCriteria.min_interval, fixCriteria.mode); + + switch (fixCriteria.mode) { case LOC_POSITION_MODE_MS_BASED: op_mode = RPC_LOC_OPER_MODE_MSB; @@ -329,6 +332,7 @@ LocApiRpcAdapter::setPositionMode(LocPositionMode mode, op_mode = RPC_LOC_OPER_MODE_DATA_OPTIMAL; break; case LOC_POSITION_MODE_RESERVED_4: + case LOC_POSITION_MODE_RESERVED_5: op_mode = RPC_LOC_OPER_MODE_MSA; fix_criteria_ptr->preferred_response_time = 0; break; @@ -339,29 +343,22 @@ LocApiRpcAdapter::setPositionMode(LocPositionMode mode, fix_criteria_ptr = &ioctl_data.rpc_loc_ioctl_data_u_type_u.fix_criteria; fix_criteria_ptr->valid_mask = RPC_LOC_FIX_CRIT_VALID_PREFERRED_OPERATION_MODE | RPC_LOC_FIX_CRIT_VALID_RECURRENCE_TYPE; - fix_criteria_ptr->min_interval = min_interval; + fix_criteria_ptr->min_interval = fixCriteria.min_interval; fix_criteria_ptr->preferred_operation_mode = op_mode; - if (min_interval > 0) { - fix_criteria_ptr->min_interval = min_interval; - fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_MIN_INTERVAL; - }else if(min_interval == 0) - { - /*If the framework passes in 0 transalate it into the maximum frequency we can report positions - which is 1 Hz or once very second */ - fix_criteria_ptr->min_interval = MIN_POSSIBLE_FIX_INTERVAL; - fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_MIN_INTERVAL; - } - if (preferred_accuracy > 0) { - fix_criteria_ptr->preferred_accuracy = preferred_accuracy; + fix_criteria_ptr->min_interval = fixCriteria.min_interval; + fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_MIN_INTERVAL; + + if (fixCriteria.preferred_accuracy > 0) { + fix_criteria_ptr->preferred_accuracy = fixCriteria.preferred_accuracy; fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_PREFERRED_ACCURACY; } - if (preferred_time > 0) { - fix_criteria_ptr->preferred_response_time = preferred_time; + if (fixCriteria.preferred_time > 0) { + fix_criteria_ptr->preferred_response_time = fixCriteria.preferred_time; fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_PREFERRED_RESPONSE_TIME; } - switch (recurrence) { + switch (fixCriteria.recurrence) { case GPS_POSITION_RECURRENCE_SINGLE: fix_criteria_ptr->recurrence_type = RPC_LOC_SINGLE_FIX; break; @@ -484,20 +481,42 @@ LocApiRpcAdapter::informNiResponse(GpsUserResponseType userResponse, } enum loc_api_adapter_err - LocApiRpcAdapter::setAPN(char* apn, int len) +LocApiRpcAdapter::setAPN(char* apn, int len, boolean force) { - rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_SET_LBS_APN_PROFILE, {0}}; - ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].srv_system_type = LOC_APN_PROFILE_SRV_SYS_MAX; - ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].pdp_type = LOC_APN_PROFILE_PDN_TYPE_IPV4; - memcpy(&(ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].apn_name), apn, len+1); + enum loc_api_adapter_err rtv = LOC_API_ADAPTER_ERR_SUCCESS; + int size = sizeof(apnLastSet); + if (force || memcmp(apnLastSet, apn, size)) { + if (len < size) { + // size will be not larger than its original value + size = len + 1; + } + memcpy(apnLastSet, apn, size); - return convertErr( - loc_eng_ioctl (client_handle, - RPC_LOC_IOCTL_SET_LBS_APN_PROFILE, - &ioctl_data, - LOC_IOCTL_DEFAULT_TIMEOUT, - NULL) - ); + if (false == navigating) { + rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_SET_LBS_APN_PROFILE, {0}}; + ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].srv_system_type = LOC_APN_PROFILE_SRV_SYS_MAX; + ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].pdp_type = LOC_APN_PROFILE_PDN_TYPE_IPV4; + memcpy(&(ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].apn_name), apn, size); + + rtv = convertErr( + loc_eng_ioctl (client_handle, + RPC_LOC_IOCTL_SET_LBS_APN_PROFILE, + &ioctl_data, + LOC_IOCTL_DEFAULT_TIMEOUT, + NULL) + ); + } + } + return rtv; +} + +void LocApiRpcAdapter::setInSession(bool inSession) +{ + LocApiAdapter::setInSession(inSession); + if (false == navigating) { + enableData(dataEnableLastSet, true); + setAPN(apnLastSet, sizeof(apnLastSet)-1, true); + } } enum loc_api_adapter_err @@ -567,18 +586,26 @@ LocApiRpcAdapter::setServer(unsigned int ip, int port, LocServerType type) } enum loc_api_adapter_err -LocApiRpcAdapter::enableData(int enable) +LocApiRpcAdapter::enableData(int enable, boolean force) { - rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_SET_DATA_ENABLE, {0}}; + enum loc_api_adapter_err rtv = LOC_API_ADAPTER_ERR_SUCCESS; + if (force || dataEnableLastSet != enable) { + dataEnableLastSet = enable; - ioctl_data.rpc_loc_ioctl_data_u_type_u.data_enable = enable; - return convertErr( - loc_eng_ioctl (client_handle, - RPC_LOC_IOCTL_SET_DATA_ENABLE, - &ioctl_data, - LOC_IOCTL_DEFAULT_TIMEOUT, - NULL) - ); + if (false == navigating) { + rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_SET_DATA_ENABLE, {0}}; + + ioctl_data.rpc_loc_ioctl_data_u_type_u.data_enable = enable; + rtv = convertErr( + loc_eng_ioctl (client_handle, + RPC_LOC_IOCTL_SET_DATA_ENABLE, + &ioctl_data, + LOC_IOCTL_DEFAULT_TIMEOUT, + NULL) + ); + } + } + return rtv; } enum loc_api_adapter_err @@ -598,9 +625,13 @@ LocApiRpcAdapter::deleteAidingData(GpsAidingData bits) void LocApiRpcAdapter::reportPosition(const rpc_loc_parsed_position_s_type *location_report_ptr) { - GpsLocation location = {0}; + LocPosTechMask tech_Mask = LOC_POS_TECH_MASK_DEFAULT; + + UlpLocation location = {0}; + GpsLocationExtended locationExtended = {0}; location.size = sizeof(location); + locationExtended.size = sizeof(locationExtended); if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_SESSION_STATUS) { // Process the position from final and intermediate reports @@ -613,56 +644,89 @@ void LocApiRpcAdapter::reportPosition(const rpc_loc_parsed_position_s_type *loca (location_report_ptr->latitude != 0 || location_report_ptr->longitude != 0)) { - location.flags |= GPS_LOCATION_HAS_LAT_LONG; - location.latitude = location_report_ptr->latitude; - location.longitude = location_report_ptr->longitude; + 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->valid_mask & RPC_LOC_POS_VALID_TIMESTAMP_UTC) { - location.timestamp = location_report_ptr->timestamp_utc; + location.gpsLocation.timestamp = location_report_ptr->timestamp_utc; } // Altitude if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_ALTITUDE_WRT_ELLIPSOID ) { - location.flags |= GPS_LOCATION_HAS_ALTITUDE; - location.altitude = location_report_ptr->altitude_wrt_ellipsoid; + location.gpsLocation.flags |= GPS_LOCATION_HAS_ALTITUDE; + location.gpsLocation.altitude = location_report_ptr->altitude_wrt_ellipsoid; } // Speed if ((location_report_ptr->valid_mask & RPC_LOC_POS_VALID_SPEED_HORIZONTAL) && (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_SPEED_VERTICAL)) { - location.flags |= GPS_LOCATION_HAS_SPEED; - location.speed = sqrt(location_report_ptr->speed_horizontal * location_report_ptr->speed_horizontal + + location.gpsLocation.flags |= GPS_LOCATION_HAS_SPEED; + location.gpsLocation.speed = sqrt(location_report_ptr->speed_horizontal * location_report_ptr->speed_horizontal + location_report_ptr->speed_vertical * location_report_ptr->speed_vertical); } // Heading if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_HEADING) { - location.flags |= GPS_LOCATION_HAS_BEARING; - location.bearing = location_report_ptr->heading; + location.gpsLocation.flags |= GPS_LOCATION_HAS_BEARING; + location.gpsLocation.bearing = location_report_ptr->heading; } // Uncertainty (circular) if ( (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_HOR_UNC_CIRCULAR) ) { - location.flags |= GPS_LOCATION_HAS_ACCURACY; - location.accuracy = location_report_ptr->hor_unc_circular; + location.gpsLocation.flags |= GPS_LOCATION_HAS_ACCURACY; + location.gpsLocation.accuracy = location_report_ptr->hor_unc_circular; + } + + // Technology Mask + + tech_Mask |= location_report_ptr->technology_mask; + //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->valid_mask & RPC_LOC_POS_VALID_ALTITUDE_WRT_MEAN_SEA_LEVEL) + { + locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL; + locationExtended.altitudeMeanSeaLevel = location_report_ptr->altitude_wrt_mean_sea_level; + } + + if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_MAGNETIC_VARIATION ) + { + locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_MAG_DEV; + locationExtended.magneticDeviation = location_report_ptr->magnetic_deviation; + } + + if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_VERTICAL_UNC) + { + locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_VERT_UNC; + locationExtended.vert_unc = location_report_ptr->vert_unc; + } + + if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_SPEED_UNC) + { + locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_SPEED_UNC; + locationExtended.speed_unc = location_report_ptr->speed_unc; } LOC_LOGV("reportPosition: fire callback\n"); LocApiAdapter::reportPosition(location, + locationExtended, locEngHandle.extPosInfo((void*)location_report_ptr), (location_report_ptr->session_status == RPC_LOC_SESS_STATUS_IN_PROGESS ? - LOC_SESS_INTERMEDIATE : LOC_SESS_SUCCESS)); + LOC_SESS_INTERMEDIATE : LOC_SESS_SUCCESS), + tech_Mask); } } else { LocApiAdapter::reportPosition(location, + locationExtended, NULL, LOC_SESS_FAILURE); LOC_LOGV("loc_eng_report_position: ignore position report when session status = %d\n", location_report_ptr->session_status); @@ -677,6 +741,8 @@ void LocApiRpcAdapter::reportPosition(const rpc_loc_parsed_position_s_type *loca void LocApiRpcAdapter::reportSv(const rpc_loc_gnss_info_s_type *gnss_report_ptr) { GpsSvStatus SvStatus = {0}; + GpsLocationExtended locationExtended = {0}; + locationExtended.size = sizeof(locationExtended); int num_svs_max = 0; const rpc_loc_sv_info_s_type *sv_info_ptr; @@ -760,9 +826,20 @@ void LocApiRpcAdapter::reportSv(const rpc_loc_gnss_info_s_type *gnss_report_ptr) } } + if ((gnss_report_ptr->valid_mask & RPC_LOC_GNSS_INFO_VALID_POS_DOP) && + (gnss_report_ptr->valid_mask & RPC_LOC_GNSS_INFO_VALID_HOR_DOP) && + (gnss_report_ptr->valid_mask & RPC_LOC_GNSS_INFO_VALID_VERT_DOP)) + { + locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_DOP; + locationExtended.pdop = gnss_report_ptr->position_dop; + locationExtended.hdop = gnss_report_ptr->horizontal_dop; + locationExtended.vdop = gnss_report_ptr->vertical_dop; + } + if (SvStatus.num_svs >= 0) { LocApiAdapter::reportSv(SvStatus, + locationExtended, locEngHandle.extSvInfo((void*)gnss_report_ptr)); } } @@ -881,13 +958,22 @@ LocApiRpcAdapter::setXtraData(char* data, int length) return convertErr(rpc_ret_val); } +#ifdef FEATURE_IPV6 enum loc_api_adapter_err LocApiRpcAdapter::atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bearer, AGpsType agpsType) +#else +enum loc_api_adapter_err +LocApiRpcAdapter::atlOpenStatus(int handle, int is_succ, char* apn, AGpsType agpsType) +#endif { rpc_loc_server_open_status_e_type open_status = is_succ ? RPC_LOC_SERVER_OPEN_SUCCESS : RPC_LOC_SERVER_OPEN_FAIL; rpc_loc_ioctl_data_u_type ioctl_data; +#ifdef FEATURE_IPV6 if (AGPS_TYPE_INVALID == agpsType) { +#else + if (false) { +#endif rpc_loc_server_open_status_s_type *conn_open_status_ptr = &ioctl_data.rpc_loc_ioctl_data_u_type_u.conn_open_status; @@ -924,6 +1010,7 @@ LocApiRpcAdapter::atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerTy conn_multi_open_status_ptr->apn_name[0] = 0; } +#ifdef FEATURE_IPV6 switch(bearer) { case AGPS_APN_BEARER_IPV4: @@ -938,7 +1025,9 @@ LocApiRpcAdapter::atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerTy default: conn_multi_open_status_ptr->pdp_type = RPC_LOC_SERVER_PDP_PPP; } - +#else + conn_multi_open_status_ptr->pdp_type = RPC_LOC_SERVER_PDP_IP; +#endif LOC_LOGD("ATL RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS open %s, APN name = [%s], pdp_type = %d\n", log_succ_fail_string(is_succ), apn, @@ -992,16 +1081,22 @@ void LocApiRpcAdapter::ATLEvent(const rpc_loc_server_request_s_type *server_requ agps_type = AGPS_TYPE_SUPL; LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_MULTI_OPEN\n type - AGPS_TYPE_SUPL\n handle - %d", connHandle); } else { +#ifdef FEATURE_IPV6 agps_type = AGPS_TYPE_WWAN_ANY; LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_MULTI_OPEN\n type - AGPS_TYPE_WWAN_ANY\n handle - %d", connHandle); +#else + break; +#endif } requestATL(connHandle, agps_type); break; +#ifdef FEATURE_IPV6 case RPC_LOC_SERVER_REQUEST_OPEN: connHandle = server_request_ptr->payload.rpc_loc_server_request_u_type_u.open_req.conn_handle; LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_OPEN\n handle - %d", connHandle); requestATL(connHandle, AGPS_TYPE_INVALID); break; +#endif case RPC_LOC_SERVER_REQUEST_CLOSE: connHandle = server_request_ptr->payload.rpc_loc_server_request_u_type_u.close_req.conn_handle; LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_CLOSE\n handle - %d", connHandle); diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_fixup.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_fixup.c index 32e3cda8..837ef113 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_fixup.c +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_fixup.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c index 6aa5254f..256545ad 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_log.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c index 10b2d221..11c9e3d4 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_rpc_glue.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -62,8 +62,8 @@ /* Logging Improvement */ #include "log_util.h" -/* Uncomment to force LOGD messages */ -// #define LOGD LOGI +/* Uncomment to force ALOGD messages */ +// #define ALOGD ALOGI /*===================================================================== External declarations @@ -316,30 +316,23 @@ rpc_loc_client_handle_type loc_open ( rpc_loc_open_args args; args.event_reg_mask = event_reg_mask; - int i; + int i, j = LOC_API_CB_MAX_CLIENTS; for (i = 0; i < LOC_API_CB_MAX_CLIENTS; i++) { - if (loc_glue_callback_table[i].cb_func == event_callback || - loc_glue_callback_table[i].user == userData) + if (loc_glue_callback_table[i].user == userData) { LOC_LOGW("Client already opened service (callback=%p)...\n", event_callback); break; + } else if (j == LOC_API_CB_MAX_CLIENTS && + loc_glue_callback_table[i].user == NULL) { + j = i; } } if (i == LOC_API_CB_MAX_CLIENTS) { - for (i = 0; i < LOC_API_CB_MAX_CLIENTS; i++) - { - if (loc_glue_callback_table[i].cb_func == NULL) - { - loc_glue_callback_table[i].cb_func = event_callback; - loc_glue_callback_table[i].rpc_cb = rpc_cb; - loc_glue_callback_table[i].user = userData; - break; - } - } + i = j; } if (i == LOC_API_CB_MAX_CLIENTS) @@ -348,6 +341,10 @@ rpc_loc_client_handle_type loc_open ( return RPC_LOC_CLIENT_HANDLE_INVALID; } + loc_glue_callback_table[i].cb_func = event_callback; + loc_glue_callback_table[i].rpc_cb = rpc_cb; + loc_glue_callback_table[i].user = userData; + args.event_callback = loc_glue_callback_table[i].cb_id; LOC_LOGV("cb_id=%d, func=0x%x", i, (unsigned int) event_callback); @@ -405,6 +402,7 @@ void loc_clear(rpc_loc_client_handle_type handle) { loc_glue_callback_table[i].cb_func = NULL; loc_glue_callback_table[i].rpc_cb = NULL; loc_glue_callback_table[i].handle = -1; + loc_glue_callback_table[i].user = NULL; break; } } diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_sync_call.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_sync_call.c index e2a5786f..9541a40b 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_sync_call.c +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_api_sync_call.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -195,7 +195,7 @@ void loc_api_callback_process_sync_call( { int i; - LOGV("loc_handle = 0x%lx, loc_event = 0x%lx", loc_handle, loc_event); + ALOGV("loc_handle = 0x%lx, loc_event = 0x%lx", loc_handle, loc_event); for (i = 0; i < loc_sync_data.num_of_slots; i++) { loc_sync_call_slot_s_type *slot = &loc_sync_data.slots[i]; @@ -211,7 +211,7 @@ void loc_api_callback_process_sync_call( slot->loc_cb_received_event_mask = loc_event; - LOGV("signal slot %d in_use %d, loc_handle 0x%lx, event_mask 0x%1x, ioctl_type %d", i, slot->in_use, slot->loc_handle, (int) slot->loc_cb_wait_event_mask, (int) slot->ioctl_type); + ALOGV("signal slot %d in_use %d, loc_handle 0x%lx, event_mask 0x%1x, ioctl_type %d", i, slot->in_use, slot->loc_handle, (int) slot->loc_cb_wait_event_mask, (int) slot->ioctl_type); pthread_cond_signal(&slot->loc_cb_arrived_cond); slot->signal_sent = 1; @@ -252,21 +252,19 @@ static int loc_lock_a_slot() loc_sync_call_slot_s_type *slot = &loc_sync_data.slots[i]; if (pthread_mutex_trylock(&slot->lock) == EBUSY) { - LOGV("trylock EBUSY : %d", i); + ALOGV("trylock EBUSY : %d", i); continue; } if (!slot->in_use && !slot->not_available) { select_id = i; - slot->in_use = 1; - slot->signal_sent = 0; /* Return from here and leave the mutex locked. * will unlock it in loc_unlock_slot() */ break; } - /* LOGV("slot %d in_use = %d, not_available = %d : %d", i, slot->in_use, slot->not_available, i); */ + /* ALOGV("slot %d in_use = %d, not_available = %d : %d", i, slot->in_use, slot->not_available, i); */ pthread_mutex_unlock(&slot->lock); } @@ -278,7 +276,7 @@ static int loc_lock_a_slot() FUNCTION loc_unlock_slot DESCRIPTION - Frees a buffer slot after the synchronous API call + Unlocks a buffer slot DEPENDENCIES N/A @@ -292,13 +290,58 @@ SIDE EFFECTS ===========================================================================*/ static void loc_unlock_slot(int select_id) { - loc_sync_data.slots[select_id].in_use = 0; - pthread_mutex_unlock(&loc_sync_data.slots[select_id].lock); } /*=========================================================================== +FUNCTION loc_lock_slot + +DESCRIPTION + Locks a specific slot that was previously locked from loc_lock_a_slot + +DEPENDENCIES + N/A + +RETURN VALUE + None + +SIDE EFFECTS + N/A + +===========================================================================*/ +static void loc_lock_slot(int select_id) +{ + pthread_mutex_lock(&loc_sync_data.slots[select_id].lock); +} + +/*=========================================================================== + +FUNCTION loc_set_slot_in_use + +DESCRIPTION + Sets the in_use flag of slot to true or false. + Should be called only after the slot is locked + +DEPENDENCIES + N/A + +RETURN VALUE + None + +SIDE EFFECTS + N/A + +===========================================================================*/ +static void loc_set_slot_in_use(int select_id, boolean in_use) +{ + loc_sync_data.slots[select_id].in_use = in_use; + if (in_use == 1) + loc_sync_data.slots[select_id].signal_sent = 0; +} + +/*=========================================================================== + FUNCTION loc_api_save_callback DESCRIPTION @@ -399,7 +442,7 @@ static int loc_api_wait_callback( ) { int ret_val = RPC_LOC_API_SUCCESS; /* the return value of this function: 0 = no error */ - int rc; /* return code from pthread calls */ + int rc = 0; /* return code from pthread calls */ struct timespec expire_time; @@ -417,7 +460,7 @@ static int loc_api_wait_callback( if (rc == ETIMEDOUT) { ret_val = RPC_LOC_API_TIMEOUT; /* Timed out */ - LOGE("TIMEOUT: %d", select_id); + ALOGE("TIMEOUT: %d", select_id); } else { /* Obtained the first awaited callback */ @@ -462,29 +505,38 @@ int loc_api_sync_ioctl if (select_id < 0 || select_id >= loc_sync_data.num_of_slots) { - LOGE("slot not available ioctl_type = %s", + ALOGE("slot not available ioctl_type = %s", loc_get_ioctl_type_name(ioctl_type)); return rc; } + loc_set_slot_in_use(select_id, 1); // set slot in use to true + // Select the callback we are waiting for loc_api_save_callback(select_id, handle, 0, ioctl_type); + loc_unlock_slot(select_id); // slot is unlocked, but in_use is still true + + // we want to avoid keeping the slot locked during the loc_ioctl because the rpc + // framework will also lock a different mutex during this call, and typically + // locking two different mutexes at the same time can lead to deadlock. rc = loc_ioctl(handle, ioctl_type, ioctl_data_ptr); + loc_lock_slot(select_id); + if (rc != RPC_LOC_API_SUCCESS) { - LOGE("loc_ioctl failed select_id = %d, ioctl_type %s, returned %s", + ALOGE("loc_ioctl failed select_id = %d, ioctl_type %s, returned %s", select_id, loc_get_ioctl_type_name(ioctl_type), loc_get_ioctl_status_name(rc)); } else { - LOGV("select_id = %d, ioctl_type %d, returned RPC_LOC_API_SUCCESS", + ALOGV("select_id = %d, ioctl_type %d, returned RPC_LOC_API_SUCCESS", select_id, ioctl_type); // Wait for the callback of loc_ioctl if ((rc = loc_api_wait_callback(select_id, timeout_msec / 1000, NULL, &callback_data)) != 0) { // Callback waiting failed - LOGE("callback wait failed select_id = %d, ioctl_type %s, returned %s", + ALOGE("callback wait failed select_id = %d, ioctl_type %s, returned %s", select_id, loc_get_ioctl_type_name(ioctl_type), loc_get_ioctl_status_name(rc)); } else @@ -493,15 +545,16 @@ int loc_api_sync_ioctl if (callback_data.status != RPC_LOC_API_SUCCESS) { rc = callback_data.status; - LOGE("callback status failed select_id = %d, ioctl_type %s, returned %s", + ALOGE("callback status failed select_id = %d, ioctl_type %s, returned %s", select_id, loc_get_ioctl_type_name(ioctl_type), loc_get_ioctl_status_name(rc)); } else { - LOGV("callback status success select_id = %d, ioctl_type %d, returned %d", + ALOGV("callback status success select_id = %d, ioctl_type %d, returned %d", select_id, ioctl_type, rc); } } /* wait callback */ } /* loc_ioctl */ + loc_set_slot_in_use(select_id, 0); // set slot in use to false loc_unlock_slot(select_id); return rc; diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_apicb_appinit.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_apicb_appinit.c index b257fb81..db5b291a 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_apicb_appinit.c +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-glue/src/loc_apicb_appinit.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/Android.mk b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/Android.mk old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_cb_rpc.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_cb_rpc.h index 47478e80..87f2c377 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_cb_rpc.h +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_cb_rpc.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_common_rpc.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_common_rpc.h index 507103ce..8107de2a 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_common_rpc.h +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_common_rpc.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_rpc.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_rpc.h index f11bb654..6138432e 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_rpc.h +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_api_rpcgen_rpc.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_apicb_appinit.h b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_apicb_appinit.h index e109852c..875c4f08 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_apicb_appinit.h +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/inc/loc_apicb_appinit.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_svc.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_svc.c index b0443487..2ef5852e 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_svc.c +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_svc.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_xdr.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_xdr.c index 7f519281..ad171dc4 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_xdr.c +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_cb_xdr.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_clnt.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_clnt.c index d2152ab4..3e39576b 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_clnt.c +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_clnt.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_common_xdr.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_common_xdr.c index da066b42..21be8f43 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_common_xdr.c +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_common_xdr.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_xdr.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_xdr.c index e8a2aa78..a0fdcabe 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_xdr.c +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_api_rpcgen_xdr.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_apicb_appinit.c b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_apicb_appinit.c index b4aeb5e7..b469eb0a 100644 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_apicb_appinit.c +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/src/loc_apicb_appinit.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api.xdr b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api.xdr old mode 100755 new mode 100644 index 3d6c759e..82dca569 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api.xdr +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api.xdr @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -26,236 +26,236 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ -/* LOC_API TOOL VERSION: 4.48 */ -/* GENERATED: TUE JUN 14 2011 */ -/*============================================================================= - L O C _ A P I . X D R - -GENERAL DESCRIPTION - This is an AUTO GENERATED file that provides an xdr compatible definition of - the loc_api API. - - --------------------------------------------------------------------------- +/* LOC_API TOOL VERSION: 4.48 */ +/* GENERATED: TUE JUN 14 2011 */ +/*============================================================================= + L O C _ A P I . X D R + +GENERAL DESCRIPTION + This is an AUTO GENERATED file that provides an xdr compatible definition of + the loc_api API. + + --------------------------------------------------------------------------- - --------------------------------------------------------------------------- -=============================================================================*/ - -/*============================================================================= - - Edit History - - AUTO GENERATED - -Generated by following versions of Htorpc modules: -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/htorpc.pl#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Start.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Htoxdr.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/XDR.pm#3 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Output.pm#5 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Parser.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Metacomments.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/SymbolTable.pm#1 - -loc_api Definition File(s): -Id: //source/qcom/qct/modem/api/gps/main/latest/loc_api.h#24 -=============================================================================*/ -/*============================================================================= -$Header$ -=============================================================================*/ - - - -typedef rpc_uint32 rpc_loc_api_api_versions_return_type<>; - -/* - * Declare an rpc_uint32 type for each callback type in the API - */ -typedef rpc_uint32 rpc_loc_event_cb_f_type; - - - -/* - * These are struct declarations for the function arguments - */ - -struct rpc_loc_open_args { - rpc_loc_event_mask_type event_reg_mask; - rpc_loc_event_cb_f_type event_callback; -}; - -struct rpc_loc_close_args { - rpc_loc_client_handle_type handle; -}; - -struct rpc_loc_start_fix_args { - rpc_loc_client_handle_type handle; -}; - -struct rpc_loc_stop_fix_args { - rpc_loc_client_handle_type handle; -}; - -struct rpc_loc_ioctl_args { - rpc_loc_client_handle_type handle; - rpc_loc_ioctl_e_type ioctl_type; - rpc_loc_ioctl_data_u_type *ioctl_data; -}; - - - -struct rpc_loc_api_api_version_s_args { - rpc_boolean len_not_null; -}; - -/* - * These are struct declarations for the function results - */ - -struct rpc_loc_api_rpc_glue_code_info_remote_rets { - rpc_uint32 toolvers; /* Tool version */ - rpc_uint32 features; /* Features turned on in the code. - * 0x00000001 ONCRPC Server Cleanup Support - */ - rpc_uint32 proghash; /* Unique hash value for the API XDR definition */ - rpc_uint32 cbproghash; /* Unique hash value for the Callbacks' XDR definition */ -}; - -struct rpc_loc_open_rets { - rpc_loc_client_handle_type loc_open_result; -}; - -struct rpc_loc_close_rets { - rpc_int32 loc_close_result; -}; - -struct rpc_loc_start_fix_rets { - rpc_int32 loc_start_fix_result; -}; - -struct rpc_loc_stop_fix_rets { - rpc_int32 loc_stop_fix_result; -}; - -struct rpc_loc_ioctl_rets { - rpc_int32 loc_ioctl_result; -}; - - struct rpc_loc_api_api_versions_rets { - rpc_loc_api_api_versions_return_type loc_api_api_versions_result; - rpc_uint32 *len; -}; - -/* - * XDR definition of the LOC_API program ( vers. 0x00050006 ) - */ - -program LOC_APIPROG { - version LOC_APIVERS_0001 { - - void - rpc_loc_api_null( void ) = 0; - - rpc_loc_api_rpc_glue_code_info_remote_rets - rpc_loc_api_rpc_glue_code_info_remote( void ) = 1; - - rpc_loc_open_rets - rpc_loc_open( rpc_loc_open_args ) = 2; - - rpc_loc_close_rets - rpc_loc_close( rpc_loc_close_args ) = 3; - - rpc_loc_start_fix_rets - rpc_loc_start_fix( rpc_loc_start_fix_args ) = 4; - - rpc_loc_stop_fix_rets - rpc_loc_stop_fix( rpc_loc_stop_fix_args ) = 5; - - rpc_loc_ioctl_rets - rpc_loc_ioctl( rpc_loc_ioctl_args ) = 6; - - rpc_loc_api_api_versions_rets - rpc_loc_api_api_versions( void ) = 0xFFFFFFFF; - - - - - } = 0x00050001; - -version LOC_APIVERS_0002 { - -/* Following elements added in enum rpc_loc_assist_data_request_e_type in 0x00050002 -RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ -*/ -/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050002 -RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL -RPC_LOC_IOCTL_RESERVED_CMD -RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL -*/ - - void - rpc_loc_api_null( void ) = 0; - - } = 0x00050002; - -version LOC_APIVERS_0003 { - -/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050003 -RPC_LOC_IOCTL_SET_DATA_ENABLE -RPC_LOC_IOCTL_SET_LBS_APN_PROFILE -RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE -RPC_LOC_IOCTL_GET_LBS_APN_PROFILE -RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE -*/ - - void - rpc_loc_api_null( void ) = 0; - - } = 0x00050003; - -version LOC_APIVERS_0004 { - -/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050004 -RPC_LOC_IOCTL_GET_SUPL_VERSION -RPC_LOC_IOCTL_SET_SUPL_VERSION -*/ - - void - rpc_loc_api_null( void ) = 0; - - } = 0x00050004; - -version LOC_APIVERS_0005 { - -/* Following elements added in enum rpc_loc_server_addr_e_type in 0x00050005 -RPC_LOC_SERVER_ADDR_IPV6 -*/ -/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050005 -RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG -*/ - - void - rpc_loc_api_null( void ) = 0; - - } = 0x00050005; - - - - version LOC_APIVERS_0006 { - -/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050006 -RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS -*/ -/* Following elements added in enum rpc_loc_server_request_e_type in 0x00050006 -RPC_LOC_SERVER_REQUEST_MULTI_OPEN -*/ - - void - rpc_loc_api_null( void ) = 0; - - } = 0x00050006; - - -} = 0x3000008C; - -const LOC_APIVERS = 0x00050006; + --------------------------------------------------------------------------- +=============================================================================*/ + +/*============================================================================= + + Edit History + + AUTO GENERATED + +Generated by following versions of Htorpc modules: +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/htorpc.pl#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Start.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Htoxdr.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/XDR.pm#3 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Output.pm#5 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Parser.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Metacomments.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/SymbolTable.pm#1 + +loc_api Definition File(s): +Id: //source/qcom/qct/modem/api/gps/main/latest/loc_api.h#24 +=============================================================================*/ +/*============================================================================= +$Header$ +=============================================================================*/ + + + +typedef rpc_uint32 rpc_loc_api_api_versions_return_type<>; + +/* + * Declare an rpc_uint32 type for each callback type in the API + */ +typedef rpc_uint32 rpc_loc_event_cb_f_type; + + + +/* + * These are struct declarations for the function arguments + */ + +struct rpc_loc_open_args { + rpc_loc_event_mask_type event_reg_mask; + rpc_loc_event_cb_f_type event_callback; +}; + +struct rpc_loc_close_args { + rpc_loc_client_handle_type handle; +}; + +struct rpc_loc_start_fix_args { + rpc_loc_client_handle_type handle; +}; + +struct rpc_loc_stop_fix_args { + rpc_loc_client_handle_type handle; +}; + +struct rpc_loc_ioctl_args { + rpc_loc_client_handle_type handle; + rpc_loc_ioctl_e_type ioctl_type; + rpc_loc_ioctl_data_u_type *ioctl_data; +}; + + + +struct rpc_loc_api_api_version_s_args { + rpc_boolean len_not_null; +}; + +/* + * These are struct declarations for the function results + */ + +struct rpc_loc_api_rpc_glue_code_info_remote_rets { + rpc_uint32 toolvers; /* Tool version */ + rpc_uint32 features; /* Features turned on in the code. + * 0x00000001 ONCRPC Server Cleanup Support + */ + rpc_uint32 proghash; /* Unique hash value for the API XDR definition */ + rpc_uint32 cbproghash; /* Unique hash value for the Callbacks' XDR definition */ +}; + +struct rpc_loc_open_rets { + rpc_loc_client_handle_type loc_open_result; +}; + +struct rpc_loc_close_rets { + rpc_int32 loc_close_result; +}; + +struct rpc_loc_start_fix_rets { + rpc_int32 loc_start_fix_result; +}; + +struct rpc_loc_stop_fix_rets { + rpc_int32 loc_stop_fix_result; +}; + +struct rpc_loc_ioctl_rets { + rpc_int32 loc_ioctl_result; +}; + + struct rpc_loc_api_api_versions_rets { + rpc_loc_api_api_versions_return_type loc_api_api_versions_result; + rpc_uint32 *len; +}; + +/* + * XDR definition of the LOC_API program ( vers. 0x00050006 ) + */ + +program LOC_APIPROG { + version LOC_APIVERS_0001 { + + void + rpc_loc_api_null( void ) = 0; + + rpc_loc_api_rpc_glue_code_info_remote_rets + rpc_loc_api_rpc_glue_code_info_remote( void ) = 1; + + rpc_loc_open_rets + rpc_loc_open( rpc_loc_open_args ) = 2; + + rpc_loc_close_rets + rpc_loc_close( rpc_loc_close_args ) = 3; + + rpc_loc_start_fix_rets + rpc_loc_start_fix( rpc_loc_start_fix_args ) = 4; + + rpc_loc_stop_fix_rets + rpc_loc_stop_fix( rpc_loc_stop_fix_args ) = 5; + + rpc_loc_ioctl_rets + rpc_loc_ioctl( rpc_loc_ioctl_args ) = 6; + + rpc_loc_api_api_versions_rets + rpc_loc_api_api_versions( void ) = 0xFFFFFFFF; + + + + + } = 0x00050001; + +version LOC_APIVERS_0002 { + +/* Following elements added in enum rpc_loc_assist_data_request_e_type in 0x00050002 +RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ +*/ +/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050002 +RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL +RPC_LOC_IOCTL_RESERVED_CMD +RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL +*/ + + void + rpc_loc_api_null( void ) = 0; + + } = 0x00050002; + +version LOC_APIVERS_0003 { + +/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050003 +RPC_LOC_IOCTL_SET_DATA_ENABLE +RPC_LOC_IOCTL_SET_LBS_APN_PROFILE +RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE +RPC_LOC_IOCTL_GET_LBS_APN_PROFILE +RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE +*/ + + void + rpc_loc_api_null( void ) = 0; + + } = 0x00050003; + +version LOC_APIVERS_0004 { + +/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050004 +RPC_LOC_IOCTL_GET_SUPL_VERSION +RPC_LOC_IOCTL_SET_SUPL_VERSION +*/ + + void + rpc_loc_api_null( void ) = 0; + + } = 0x00050004; + +version LOC_APIVERS_0005 { + +/* Following elements added in enum rpc_loc_server_addr_e_type in 0x00050005 +RPC_LOC_SERVER_ADDR_IPV6 +*/ +/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050005 +RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG +*/ + + void + rpc_loc_api_null( void ) = 0; + + } = 0x00050005; + + + + version LOC_APIVERS_0006 { + +/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050006 +RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS +*/ +/* Following elements added in enum rpc_loc_server_request_e_type in 0x00050006 +RPC_LOC_SERVER_REQUEST_MULTI_OPEN +*/ + + void + rpc_loc_api_null( void ) = 0; + + } = 0x00050006; + + +} = 0x3000008C; + +const LOC_APIVERS = 0x00050006; diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_cb.xdr b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_cb.xdr old mode 100755 new mode 100644 index 36d0e6d2..4756c6c5 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_cb.xdr +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_cb.xdr @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -26,162 +26,162 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ -/* LOC_API TOOL VERSION: 4.48 */ -/* GENERATED: TUE JUN 14 2011 */ -/*============================================================================= - L O C _ A P I _ C B . X D R - -GENERAL DESCRIPTION - This is an AUTO GENERATED file that provides an xdr compatible definition of - an api that represents the grouping of the different callback functions the - loc_api API supports. - - --------------------------------------------------------------------------- +/* LOC_API TOOL VERSION: 4.48 */ +/* GENERATED: TUE JUN 14 2011 */ +/*============================================================================= + L O C _ A P I _ C B . X D R + +GENERAL DESCRIPTION + This is an AUTO GENERATED file that provides an xdr compatible definition of + an api that represents the grouping of the different callback functions the + loc_api API supports. + + --------------------------------------------------------------------------- - --------------------------------------------------------------------------- -=============================================================================*/ - -/*============================================================================= - - Edit History - - AUTO GENERATED - -Generated by following versions of Htorpc modules: -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/htorpc.pl#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Start.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Htoxdr.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/XDR.pm#3 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Output.pm#5 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Parser.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Metacomments.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/SymbolTable.pm#1 - -loc_api Definition File(s): -Id: //source/qcom/qct/modem/api/gps/main/latest/loc_api.h#24 -=============================================================================*/ -/*============================================================================= -$Header$ -=============================================================================*/ - - - - -/* - * These are struct declarations for the function arguments - */ - -struct rpc_loc_event_cb_f_type_args { - rpc_uint32 cb_id; - rpc_loc_client_handle_type loc_handle; - rpc_loc_event_mask_type loc_event; - rpc_loc_event_payload_u_type *loc_event_payload; -}; - - - - - -/* - * These are struct declaratios for the function results - */ - -struct rpc_loc_event_cb_f_type_rets { - rpc_int32 loc_event_cb_f_type_result; -}; - - - -/* - * XDR definition of the LOC_API callback program ( vers. 0x00050006 ) - */ - -program LOC_APICBPROG { - version LOC_APICBVERS_0001 { - - rpc_loc_event_cb_f_type_rets - rpc_loc_event_cb_f_type( rpc_loc_event_cb_f_type_args ) = 1; - - - - - } = 0x00050001; - -version LOC_APICBVERS_0002 { - -/* Following elements added in enum rpc_loc_assist_data_request_e_type in 0x00050002 -RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ -*/ -/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050002 -RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL -RPC_LOC_IOCTL_RESERVED_CMD -RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL -*/ - - int - rpc_loc_api_cb_null( void ) = 0xffffff00; - - } = 0x00050002; - -version LOC_APICBVERS_0003 { - -/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050003 -RPC_LOC_IOCTL_SET_DATA_ENABLE -RPC_LOC_IOCTL_SET_LBS_APN_PROFILE -RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE -RPC_LOC_IOCTL_GET_LBS_APN_PROFILE -RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE -*/ - - int - rpc_loc_api_cb_null( void ) = 0xffffff00; - - } = 0x00050003; - -version LOC_APICBVERS_0004 { - -/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050004 -RPC_LOC_IOCTL_GET_SUPL_VERSION -RPC_LOC_IOCTL_SET_SUPL_VERSION -*/ - - int - rpc_loc_api_cb_null( void ) = 0xffffff00; - - } = 0x00050004; - -version LOC_APICBVERS_0005 { - -/* Following elements added in enum rpc_loc_server_addr_e_type in 0x00050005 -RPC_LOC_SERVER_ADDR_IPV6 -*/ -/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050005 -RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG -*/ - - int - rpc_loc_api_cb_null( void ) = 0xffffff00; - - } = 0x00050005; - - - - version LOC_APICBVERS_0006 { - -/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050006 -RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS -*/ -/* Following elements added in enum rpc_loc_server_request_e_type in 0x00050006 -RPC_LOC_SERVER_REQUEST_MULTI_OPEN -*/ - - int - rpc_loc_api_cb_null( void ) = 0xffffff00; - - } = 0x00050006; - - -} = 0x3100008C; - -const LOC_APICBVERS = 0x00050006; + --------------------------------------------------------------------------- +=============================================================================*/ + +/*============================================================================= + + Edit History + + AUTO GENERATED + +Generated by following versions of Htorpc modules: +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/htorpc.pl#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Start.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Htoxdr.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/XDR.pm#3 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Output.pm#5 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Parser.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Metacomments.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/SymbolTable.pm#1 + +loc_api Definition File(s): +Id: //source/qcom/qct/modem/api/gps/main/latest/loc_api.h#24 +=============================================================================*/ +/*============================================================================= +$Header$ +=============================================================================*/ + + + + +/* + * These are struct declarations for the function arguments + */ + +struct rpc_loc_event_cb_f_type_args { + rpc_uint32 cb_id; + rpc_loc_client_handle_type loc_handle; + rpc_loc_event_mask_type loc_event; + rpc_loc_event_payload_u_type *loc_event_payload; +}; + + + + + +/* + * These are struct declaratios for the function results + */ + +struct rpc_loc_event_cb_f_type_rets { + rpc_int32 loc_event_cb_f_type_result; +}; + + + +/* + * XDR definition of the LOC_API callback program ( vers. 0x00050006 ) + */ + +program LOC_APICBPROG { + version LOC_APICBVERS_0001 { + + rpc_loc_event_cb_f_type_rets + rpc_loc_event_cb_f_type( rpc_loc_event_cb_f_type_args ) = 1; + + + + + } = 0x00050001; + +version LOC_APICBVERS_0002 { + +/* Following elements added in enum rpc_loc_assist_data_request_e_type in 0x00050002 +RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ +*/ +/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050002 +RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL +RPC_LOC_IOCTL_RESERVED_CMD +RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL +*/ + + int + rpc_loc_api_cb_null( void ) = 0xffffff00; + + } = 0x00050002; + +version LOC_APICBVERS_0003 { + +/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050003 +RPC_LOC_IOCTL_SET_DATA_ENABLE +RPC_LOC_IOCTL_SET_LBS_APN_PROFILE +RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE +RPC_LOC_IOCTL_GET_LBS_APN_PROFILE +RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE +*/ + + int + rpc_loc_api_cb_null( void ) = 0xffffff00; + + } = 0x00050003; + +version LOC_APICBVERS_0004 { + +/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050004 +RPC_LOC_IOCTL_GET_SUPL_VERSION +RPC_LOC_IOCTL_SET_SUPL_VERSION +*/ + + int + rpc_loc_api_cb_null( void ) = 0xffffff00; + + } = 0x00050004; + +version LOC_APICBVERS_0005 { + +/* Following elements added in enum rpc_loc_server_addr_e_type in 0x00050005 +RPC_LOC_SERVER_ADDR_IPV6 +*/ +/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050005 +RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG +*/ + + int + rpc_loc_api_cb_null( void ) = 0xffffff00; + + } = 0x00050005; + + + + version LOC_APICBVERS_0006 { + +/* Following elements added in enum rpc_loc_ioctl_e_type in 0x00050006 +RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS +*/ +/* Following elements added in enum rpc_loc_server_request_e_type in 0x00050006 +RPC_LOC_SERVER_REQUEST_MULTI_OPEN +*/ + + int + rpc_loc_api_cb_null( void ) = 0xffffff00; + + } = 0x00050006; + + +} = 0x3100008C; + +const LOC_APICBVERS = 0x00050006; diff --git a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_common.xdr b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_common.xdr old mode 100755 new mode 100644 index fcdaf57f..e059c661 --- a/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_common.xdr +++ b/loc_api/libloc_api-rpc-50001/libloc_api-rpc-stub/xdr/loc_api_common.xdr @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -26,996 +26,996 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ -/* LOC_API TOOL VERSION: 4.48 */ -/* GENERATED: TUE JUN 14 2011 */ -/*============================================================================= - L O C _ A P I _ C O M M O N . X D R - -GENERAL DESCRIPTION - This is an AUTO GENERATED file that provides an xdr compatible definition of - an api that represents the grouping of the different callback functions the - loc_api API supports. - - --------------------------------------------------------------------------- +/* LOC_API TOOL VERSION: 4.48 */ +/* GENERATED: TUE JUN 14 2011 */ +/*============================================================================= + L O C _ A P I _ C O M M O N . X D R + +GENERAL DESCRIPTION + This is an AUTO GENERATED file that provides an xdr compatible definition of + an api that represents the grouping of the different callback functions the + loc_api API supports. + + --------------------------------------------------------------------------- - --------------------------------------------------------------------------- -=============================================================================*/ - -/*============================================================================= - - Edit History - - AUTO GENERATED - -Generated by following versions of Htorpc modules: -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/htorpc.pl#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Start.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Htoxdr.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/XDR.pm#3 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Output.pm#5 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Parser.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Metacomments.pm#1 -Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/SymbolTable.pm#1 - -loc_api Definition File(s): -Id: //source/qcom/qct/modem/api/gps/main/latest/loc_api.h#24 -=============================================================================*/ -/*============================================================================= -$Header$ -=============================================================================*/ - - - -const LOC_API_TOOLVERS = 0x00040030; -const LOC_API_FEATURES = 0x00000001; - -const RPC_LOC_EVENT_STATUS_REPORT = 0x00000100; - -const RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST = 0x00000020; - -const RPC_LOC_EVENT_WPS_NEEDED_REQUEST = 0x00000200; - -const RPC_LOC_EVENT_SATELLITE_REPORT = 0x00000002; - -const RPC_LOC_EVENT_PARSED_POSITION_REPORT = 0x00000001; - -const RPC_LOC_EVENT_RESERVED = 0x8000000000000000; - -const RPC_LOC_EVENT_LOCATION_SERVER_REQUEST = 0x00000040; - -const RPC_LOC_EVENT_NMEA_POSITION_REPORT = 0x00000008; - -const RPC_LOC_EVENT_IOCTL_REPORT = 0x00000080; - -const RPC_LOC_EVENT_NMEA_1HZ_REPORT = 0x00000004; - -const RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST = 0x00000010; - -const RPC_LOC_API_CB_NULL_VERSION = 0x00050002; -const RPC_LOC_EVENT_CB_F_TYPE_VERSION = 0x00050001; -const RPC_LOC_API_API_VERSIONS_VERSION = 0x00050001; -const RPC_LOC_STOP_FIX_VERSION = 0x00050001; -const RPC_LOC_START_FIX_VERSION = 0x00050001; -const RPC_LOC_IOCTL_VERSION = 0x00050001; -const RPC_LOC_CLOSE_VERSION = 0x00050001; -const RPC_LOC_API_RPC_GLUE_CODE_INFO_REMOTE_VERSION = 0x00050001; -const RPC_LOC_OPEN_VERSION = 0x00050001; -const RPC_LOC_API_NULL_VERSION = 0x00050001; -const RPC_LOC_API_API_MAJOR_NUM = 0x0005; -const RPC_LOC_APIAPI_VERSION_IS_HASHKEY = 0; - -typedef rpc_int32 rpc_loc_client_handle_type; - -typedef rpc_uint64 rpc_loc_event_mask_type; - -typedef rpc_uint64 rpc_loc_position_valid_mask_type; - -typedef rpc_uint32 rpc_loc_pos_technology_mask_type; - -enum rpc_loc_session_status_e_type { - RPC_LOC_SESS_STATUS_SUCCESS = 0, - RPC_LOC_SESS_STATUS_IN_PROGESS = 1, - RPC_LOC_SESS_STATUS_GENERAL_FAILURE = 2, - RPC_LOC_SESS_STATUS_TIMEOUT = 3, - RPC_LOC_SESS_STATUS_USER_END = 4, - RPC_LOC_SESS_STATUS_BAD_PARAMETER = 5, - RPC_LOC_SESS_STATUS_PHONE_OFFLINE = 6, - RPC_LOC_SESS_STATUS_ENGINE_LOCKED = 7, - RPC_LOC_SESS_STATUS_MAX = 268435456 -}; - -struct rpc_loc_calendar_time_s_type { - rpc_uint16 year; - unsigned char month; - unsigned char day_of_week; - unsigned char day; - unsigned char hour; - unsigned char minute; - unsigned char second; - rpc_uint16 millisecond; -}; - -struct rpc_loc_parsed_position_s_type { - rpc_loc_position_valid_mask_type valid_mask; - rpc_loc_session_status_e_type session_status; - rpc_loc_calendar_time_s_type timestamp_calendar; - rpc_uint64 timestamp_utc; - rpc_uint8 leap_seconds; - float time_unc; - double latitude; - double longitude; - float altitude_wrt_ellipsoid; - float altitude_wrt_mean_sea_level; - float speed_horizontal; - float speed_vertical; - float heading; - float hor_unc_circular; - float hor_unc_ellipse_semi_major; - float hor_unc_ellipse_semi_minor; - float hor_unc_ellipse_orient_azimuth; - float vert_unc; - float speed_unc; - float heading_unc; - unsigned char confidence_horizontal; - unsigned char confidence_vertical; - float magnetic_deviation; - rpc_loc_pos_technology_mask_type technology_mask; -}; - -enum rpc_loc_sv_system_e_type { - RPC_LOC_SV_SYSTEM_GPS = 1, - RPC_LOC_SV_SYSTEM_GALILEO = 2, - RPC_LOC_SV_SYSTEM_SBAS = 3, - RPC_LOC_SV_SYSTEM_COMPASS = 4, - RPC_LOC_SV_SYSTEM_GLONASS = 5, - RPC_LOC_SV_SYSTEM_MAX = 268435456 -}; - -enum rpc_loc_sv_status_e_type { - RPC_LOC_SV_STATUS_IDLE = 1, - RPC_LOC_SV_STATUS_SEARCH = 2, - RPC_LOC_SV_STATUS_TRACK = 3, - RPC_LOC_SV_STATUS_MAX = 268435456 -}; - -typedef rpc_uint32 rpc_loc_sv_info_valid_mask_type; - -struct rpc_loc_sv_info_s_type { - rpc_loc_sv_info_valid_mask_type valid_mask; - rpc_loc_sv_system_e_type system; - rpc_uint8 prn; - rpc_uint8 health_status; - rpc_loc_sv_status_e_type process_status; - rpc_boolean has_eph; - rpc_boolean has_alm; - float elevation; - float azimuth; - float snr; -}; - -typedef rpc_uint32 rpc_loc_gnss_info_valid_mask_type; - -struct rpc_loc_gnss_info_s_type { - rpc_loc_gnss_info_valid_mask_type valid_mask; - float position_dop; - float horizontal_dop; - float vertical_dop; - rpc_boolean altitude_assumed; - rpc_uint16 sv_count; - rpc_loc_sv_info_s_type sv_list<80>; /* EVAL:[LOC_API_MAX_SV_COUNT]*/ -}; - -struct rpc_loc_nmea_report_s_type { - rpc_uint16 length; - opaque nmea_sentences[200]; -}; - -enum rpc_loc_status_event_e_type { - RPC_LOC_STATUS_EVENT_ENGINE_STATE = 1, - RPC_LOC_STATUS_EVENT_FIX_SESSION_STATE = 2, - RPC_LOC_STATUS_EVENT_MAX = 268435456 -}; - -enum rpc_loc_engine_state_e_type { - RPC_LOC_ENGINE_STATE_ON = 1, - RPC_LOC_ENGINE_STATE_OFF = 2, - RPC_LOC_ENGINE_STATE_MAX = 268435456 -}; - -enum rpc_loc_fix_session_state_e_type { - RPC_LOC_FIX_SESSION_STATE_BEGIN = 1, - RPC_LOC_FIX_SESSION_STATE_END = 2, - RPC_LOC_FIX_SESSION_STATE_MAX = 268435456 -}; - -union rpc_loc_status_event_payload_u_type switch (rpc_loc_status_event_e_type disc) { - case RPC_LOC_STATUS_EVENT_ENGINE_STATE: - rpc_loc_engine_state_e_type engine_state; - case RPC_LOC_STATUS_EVENT_FIX_SESSION_STATE: - rpc_loc_fix_session_state_e_type fix_session_state; - default: - void; -}; - -struct rpc_loc_status_event_s_type { - rpc_loc_status_event_e_type event; - rpc_loc_status_event_payload_u_type payload; -}; - -enum rpc_loc_server_addr_e_type { - RPC_LOC_SERVER_ADDR_IPV4 = 1, - RPC_LOC_SERVER_ADDR_URL = 2, - RPC_LOC_SERVER_ADDR_IPV6 = 3, - RPC_LOC_SERVER_ADDR_MAX = 268435456 -}; - -struct rpc_loc_server_addr_ipv4_type { - rpc_uint32 addr; - rpc_uint16 port; -}; - -struct rpc_loc_server_addr_url_type { - rpc_uint16 length; - opaque addr[256]; -}; - -struct rpc_loc_server_addr_ipv6_type { - rpc_uint16 addr[8]; - rpc_uint32 port; -}; - -union rpc_loc_server_addr_u_type switch (rpc_loc_server_addr_e_type disc) { - case RPC_LOC_SERVER_ADDR_IPV4: - rpc_loc_server_addr_ipv4_type ipv4; - case RPC_LOC_SERVER_ADDR_URL: - rpc_loc_server_addr_url_type url; - case RPC_LOC_SERVER_ADDR_IPV6: - rpc_loc_server_addr_ipv6_type ipv6; - default: - void; -}; - -struct rpc_loc_server_info_s_type { - rpc_loc_server_addr_e_type addr_type; - rpc_loc_server_addr_u_type addr_info; -}; - -enum rpc_loc_ni_notify_verify_e_type { - RPC_LOC_NI_USER_NO_NOTIFY_NO_VERIFY = 1, - RPC_LOC_NI_USER_NOTIFY_ONLY = 2, - RPC_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP = 3, - RPC_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP = 4, - RPC_LOC_NI_USER_PRIVACY_OVERRIDE = 5, - RPC_LOC_NI_USER_NOTIFY_VERITY_TYPE_MAX = 268435456 -}; - -enum rpc_loc_ni_event_e_type { - RPC_LOC_NI_EVENT_VX_NOTIFY_VERIFY_REQ = 1, - RPC_LOC_NI_EVENT_SUPL_NOTIFY_VERIFY_REQ = 2, - RPC_LOC_NI_EVENT_UMTS_CP_NOTIFY_VERIFY_REQ = 3, - RPC_LOC_NI_EVENT_VX_SERVICE_INTERACTION_REQ = 4, - RPC_LOC_NI_EVENT_MAX = 268435456 -}; - -enum rpc_loc_ni_datacoding_scheme_e_type { - RPC_LOC_NI_PRESUPL_ISO646IRV = 0, - RPC_LOC_NI_PRESUPL_ISO8859 = 1, - RPC_LOC_NI_PRESUPL_UTF8 = 2, - RPC_LOC_NI_PRESUPL_UTF16 = 3, - RPC_LOC_NI_PRESUPL_UCS2 = 4, - RPC_LOC_NI_PRESUPL_GSM_DEFAULT = 5, - RPC_LOC_NI_PRESUPL_SHIFT_JIS = 6, - RPC_LOC_NI_PRESUPL_JIS = 7, - RPC_LOC_NI_PRESUPL_EUC = 8, - RPC_LOC_NI_PRESUPL_GB2312 = 9, - RPC_LOC_NI_PRESUPL_CNS11643 = 10, - RPC_LOC_NI_PRESUPL_KSC1001 = 11, - RPC_LOC_NI_PRESUPL_ENCODING_UNKNOWN = 2147483647, - RPC_LOC_NI_SS_GERMAN = 12, - RPC_LOC_NI_SS_ENGLISH = 13, - RPC_LOC_NI_SS_ITALIAN = 14, - RPC_LOC_NI_SS_FRENCH = 15, - RPC_LOC_NI_SS_SPANISH = 16, - RPC_LOC_NI_SS_DUTCH = 17, - RPC_LOC_NI_SS_SWEDISH = 18, - RPC_LOC_NI_SS_DANISH = 19, - RPC_LOC_NI_SS_PORTUGUESE = 20, - RPC_LOC_NI_SS_FINNISH = 21, - RPC_LOC_NI_SS_NORWEGIAN = 22, - RPC_LOC_NI_SS_GREEK = 23, - RPC_LOC_NI_SS_TURKISH = 24, - RPC_LOC_NI_SS_HUNGARIAN = 25, - RPC_LOC_NI_SS_POLISH = 26, - RPC_LOC_NI_SS_LANGUAGE_UNSPEC = 27, - RPC_LOC_NI_SUPL_UTF8 = 28, - RPC_LOC_NI_SUPL_UCS2 = 29, - RPC_LOC_NI_SUPL_GSM_DEFAULT = 30, - RPC_LOC_NI_SUPL_ENCODING_UNKNOWN = 2147483647 -}; - -enum rpc_loc_ni_vx_requester_id_encoding_scheme_e_type { - RPC_LOC_NI_VX_OCTET = 0, - RPC_LOC_NI_VX_EXN_PROTOCOL_MSG = 1, - RPC_LOC_NI_VX_ASCII = 2, - RPC_LOC_NI_VX_IA5 = 3, - RPC_LOC_NI_VX_UNICODE = 4, - RPC_LOC_NI_VX_SHIFT_JIS = 5, - RPC_LOC_NI_VX_KOREAN = 6, - RPC_LOC_NI_VX_LATIN_HEBREW = 7, - RPC_LOC_NI_VX_LATIN = 8, - RPC_LOC_NI_VX_GSM = 9, - RPC_LOC_NI_VX_ENCODING_TYPE_MAX = 268435456 -}; - -enum rpc_loc_ni_vx_pos_mode_e_type { - RPC_LOC_VX_MS_ASSISTED_ONLY = 1, - RPC_LOC_VX_MS_BASED_ONLY = 2, - RPC_LOC_VX_MS_ASSISTED_PREF_MSBASED_ALLWD = 3, - RPC_LOC_VX_MS_BASED_PREF_ASSISTED_ALLWD = 4, - RPC_LOC_VX_POS_MODE_MAX = 268435456 -}; - -struct rpc_loc_ni_vx_requester_id_s_type { - unsigned char requester_id_length; - opaque requester_id[200]; -}; - -struct rpc_loc_ni_vx_notify_verify_req_s_type { - rpc_loc_ni_notify_verify_e_type notification_priv_type; - unsigned char pos_qos_incl; - unsigned char pos_qos; - rpc_uint32 num_fixes; - rpc_uint32 tbf; - rpc_loc_ni_vx_pos_mode_e_type pos_mode; - rpc_loc_ni_vx_requester_id_encoding_scheme_e_type encoding_scheme; - rpc_loc_ni_vx_requester_id_s_type requester_id; - rpc_uint16 user_resp_timer_val; -}; - -enum rpc_loc_ni_supl_pos_method_e_type { - RPC_LOC_NI_POSMETHOD_AGPS_SETASSISTED = 1, - RPC_LOC_NI_POSMETHOD_AGPS_SETBASED = 2, - RPC_LOC_NI_POSMETHOD_AGPS_SETASSISTED_PREF = 3, - RPC_LOC_NI_POSMETHOD_AGPS_SETBASED_PREF = 4, - RPC_LOC_NI_POSMETHOD_AUTONOMOUS_GPS = 5, - RPC_LOC_NI_POSMETHOD_AFLT = 6, - RPC_LOC_NI_POSMETHOD_ECID = 7, - RPC_LOC_NI_POSMETHOD_EOTD = 8, - RPC_LOC_NI_POSMETHOD_OTDOA = 9, - RPC_LOC_NI_POSMETHOD_NO_POSITION = 10, - RPC_LOC_NI_POSMETHOD_MAX = 268435456 -}; - -struct rpc_loc_ni_supl_slp_session_id_s_type { - unsigned char presence; - opaque session_id[4]; - rpc_loc_server_info_s_type slp_address; -}; - -struct rpc_loc_ni_requestor_id_s_type { - unsigned char data_coding_scheme; - opaque requestor_id_string[200]; - unsigned char string_len; -}; - -struct rpc_loc_ni_supl_client_name_s_type { - unsigned char data_coding_scheme; - opaque client_name_string[64]; - unsigned char string_len; -}; - -struct rpc_loc_ni_supl_qop_s_type { - unsigned char bit_mask; - unsigned char horacc; - unsigned char veracc; - rpc_uint16 maxLocAge; - unsigned char delay; -}; - -struct rpc_loc_ni_supl_notify_verify_req_s_type { - rpc_loc_ni_notify_verify_e_type notification_priv_type; - rpc_uint16 flags; - rpc_loc_ni_supl_slp_session_id_s_type supl_slp_session_id; - opaque supl_hash[8]; - rpc_loc_ni_datacoding_scheme_e_type datacoding_scheme; - rpc_loc_ni_supl_pos_method_e_type pos_method; - rpc_loc_ni_requestor_id_s_type requestor_id; - rpc_loc_ni_supl_client_name_s_type client_name; - rpc_loc_ni_supl_qop_s_type supl_qop; - rpc_uint16 user_response_timer; -}; - -struct rpc_loc_ni_ext_client_address_s_type { - unsigned char ext_client_address_len; - opaque ext_client_address[20]; -}; - -enum rpc_loc_ni_location_type_e_type { - RPC_LOC_NI_LOCATIONTYPE_CURRENT_LOCATION = 1, - RPC_LOC_NI_LOCATIONTYPE_CURRENT_OR_LAST_KNOWN_LOCATION = 2, - RPC_LOC_NI_LOCATIONTYPE_INITIAL_LOCATION = 3, - RPC_LOC_NI_LOCATIONTYPE_MAX = 268435456 -}; - -struct rpc_loc_ni_deferred_location_s_type { - unsigned char unused_bits; - unsigned char ms_available; -}; - -struct rpc_loc_ni_codeword_string_s_type { - unsigned char data_coding_scheme; - opaque lcs_codeword_string[20]; - unsigned char string_len; -}; - -struct rpc_loc_ni_service_type_id_s_type { - unsigned char lcs_service_type_id; -}; - -struct rpc_loc_ni_umts_cp_notify_verify_req_s_type { - rpc_loc_ni_notify_verify_e_type notification_priv_type; - unsigned char invoke_id; - rpc_uint16 flags; - unsigned char notification_length; - opaque notification_text[64]; - rpc_loc_ni_datacoding_scheme_e_type datacoding_scheme; - rpc_loc_ni_ext_client_address_s_type ext_client_address_data; - rpc_loc_ni_location_type_e_type location_type; - rpc_loc_ni_deferred_location_s_type deferred_location; - rpc_loc_ni_requestor_id_s_type requestor_id; - rpc_loc_ni_codeword_string_s_type codeword_string; - rpc_loc_ni_service_type_id_s_type service_type_id; - rpc_uint16 user_response_timer; -}; - -enum rpc_loc_ni_service_interaction_e_type { - RPC_LOC_NI_SERVICE_INTERACTION_ONGOING_NI_INCOMING_MO = 1, - RPC_LOC_NI_SERVICE_INTERACTION_MAX = 268435456 -}; - -struct rpc_loc_ni_vx_service_interaction_req_s_type { - rpc_loc_ni_vx_notify_verify_req_s_type ni_vx_req; - rpc_loc_ni_service_interaction_e_type service_interation_type; -}; - -union rpc_loc_ni_event_payload_u_type switch (rpc_loc_ni_event_e_type disc) { - case RPC_LOC_NI_EVENT_VX_NOTIFY_VERIFY_REQ: - rpc_loc_ni_vx_notify_verify_req_s_type vx_req; - case RPC_LOC_NI_EVENT_SUPL_NOTIFY_VERIFY_REQ: - rpc_loc_ni_supl_notify_verify_req_s_type supl_req; - case RPC_LOC_NI_EVENT_UMTS_CP_NOTIFY_VERIFY_REQ: - rpc_loc_ni_umts_cp_notify_verify_req_s_type umts_cp_req; - case RPC_LOC_NI_EVENT_VX_SERVICE_INTERACTION_REQ: - rpc_loc_ni_vx_service_interaction_req_s_type service_interaction_req; - default: - void; -}; - -struct rpc_loc_ni_event_s_type { - rpc_loc_ni_event_e_type event; - rpc_loc_ni_event_payload_u_type payload; -}; - -enum rpc_loc_assist_data_request_e_type { - RPC_LOC_ASSIST_DATA_TIME_REQ = 1, - RPC_LOC_ASSIST_DATA_PREDICTED_ORBITS_REQ = 2, - RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ = 3, - RPC_LOC_ASSIST_DATA_MAX = 268435456 -}; - -typedef string rpc_struct_loc_time_download_source_s_type_servers_ptr<256>; /* EVAL:[LOC_API_MAX_SERVER_ADDR_LENGTH]*/ - -typedef rpc_struct_loc_time_download_source_s_type_servers_ptr rpc_struct_loc_time_download_source_s_type_servers[3]; - -struct rpc_loc_time_download_source_s_type { - rpc_uint32 delay_threshold; - rpc_struct_loc_time_download_source_s_type_servers servers; -}; - -typedef string rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr; - -typedef rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr rpc_struct_loc_predicted_orbits_data_source_s_type_servers[3]; - -struct rpc_loc_predicted_orbits_data_source_s_type { - rpc_uint32 max_file_size; - rpc_uint32 max_part_size; - rpc_struct_loc_predicted_orbits_data_source_s_type_servers servers; -}; - -struct rpc_loc_pos_inj_request_s_type { - rpc_uint32 flags; - double latitude; - double longitude; - rpc_uint32 position_uncertainty; - rpc_uint64 timestamp; -}; - -union rpc_loc_assist_data_request_payload_u_type switch (rpc_loc_assist_data_request_e_type disc) { - case RPC_LOC_ASSIST_DATA_TIME_REQ: - rpc_loc_time_download_source_s_type time_download; - case RPC_LOC_ASSIST_DATA_PREDICTED_ORBITS_REQ: - rpc_loc_predicted_orbits_data_source_s_type data_download; - case RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ: - rpc_loc_pos_inj_request_s_type pos_injection; - default: - void; -}; - -struct rpc_loc_assist_data_request_s_type { - rpc_loc_assist_data_request_e_type event; - rpc_loc_assist_data_request_payload_u_type payload; -}; - -typedef rpc_uint32 rpc_loc_server_connection_handle; - -enum rpc_loc_server_protocol_e_type { - RPC_LOC_SERVER_PROTOCOL_DEFAULT = 0, - RPC_LOC_SERVER_PROTOCOL_SUPL = 1, - RPC_LOC_SERVER_PROTOCOL_VX_MPC = 2, - RPC_LOC_SERVER_PROTOCOL_VX_PDE = 3, - RPC_LOC_SERVER_PROTOCOL_MAX = 16777216 -}; - -enum rpc_loc_server_connection_e_type { - RPC_LOC_SERVER_CONNECTION_LBS = 0, - RPC_LOC_SERVER_CONNECTION_WWAN_INTERNET, - RPC_LOC_SERVER_CONNECTION_MAX = 16777216 -}; - -enum rpc_loc_server_request_e_type { - RPC_LOC_SERVER_REQUEST_OPEN = 1, - RPC_LOC_SERVER_REQUEST_CLOSE = 2, - RPC_LOC_SERVER_REQUEST_MULTI_OPEN = 3, - RPC_LOC_SERVER_REQUEST_MAX = 268435456 -}; - -struct rpc_loc_server_open_req_s_type { - rpc_loc_server_connection_handle conn_handle; - rpc_loc_server_protocol_e_type protocol; -}; - -struct rpc_loc_server_multi_open_req_s_type { - rpc_loc_server_connection_handle conn_handle; - rpc_loc_server_protocol_e_type protocol; - rpc_loc_server_connection_e_type connection_type; -}; - -struct rpc_loc_server_close_req_s_type { - rpc_loc_server_connection_handle conn_handle; -}; - -union rpc_loc_server_request_u_type switch (rpc_loc_server_request_e_type disc) { - case RPC_LOC_SERVER_REQUEST_OPEN: - rpc_loc_server_open_req_s_type open_req; - case RPC_LOC_SERVER_REQUEST_CLOSE: - rpc_loc_server_close_req_s_type close_req; - case RPC_LOC_SERVER_REQUEST_MULTI_OPEN: - rpc_loc_server_multi_open_req_s_type multi_open_req; - default: - void; -}; - -struct rpc_loc_server_request_s_type { - rpc_loc_server_request_e_type event; - rpc_loc_server_request_u_type payload; -}; - -enum rpc_loc_qwip_request_e_type { - RPC_LOC_QWIP_START_PERIODIC_HI_FREQ_FIXES = 0, - RPC_LOC_QWIP_START_PERIODIC_KEEP_WARM, - RPC_LOC_QWIP_STOP_PERIODIC_FIXES, - RPC_LOC_QWIP_SUSPEND, - RPC_LOC_QWIP_REQUEST_MAX = 268435456 -}; - -struct rpc_loc_qwip_request_s_type { - rpc_loc_qwip_request_e_type request_type; - rpc_uint16 tbf_ms; -}; - -struct rpc_loc_reserved_payload_s_type { - rpc_uint16 data_size; - opaque data<>; -}; - -enum rpc_loc_ioctl_e_type { - RPC_LOC_IOCTL_GET_API_VERSION = 1, - RPC_LOC_IOCTL_SET_FIX_CRITERIA = 2, - RPC_LOC_IOCTL_GET_FIX_CRITERIA = 3, - RPC_LOC_IOCTL_SERVICE_START_INDEX = 400, - RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE = 400, - RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA = 401, - RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_VALIDITY = 402, - RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE = 403, - RPC_LOC_IOCTL_SET_PREDICTED_ORBITS_DATA_AUTO_DOWNLOAD = 404, - RPC_LOC_IOCTL_INJECT_UTC_TIME = 405, - RPC_LOC_IOCTL_INJECT_RTC_VALUE = 406, - RPC_LOC_IOCTL_INJECT_POSITION = 407, - RPC_LOC_IOCTL_QUERY_ENGINE_STATE = 408, - RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS = 409, - RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS = 410, - RPC_LOC_IOCTL_SEND_WIPER_POSITION_REPORT = 411, - RPC_LOC_IOCTL_NOTIFY_WIPER_STATUS = 412, - RPC_LOC_IOCTL_ACCESS_EFS_DATA = 413, - RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG = 414, - RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS = 415, - RPC_LOC_IOCTL_NV_SETTINGS_START_INDEX = 800, - RPC_LOC_IOCTL_SET_ENGINE_LOCK = 800, - RPC_LOC_IOCTL_GET_ENGINE_LOCK = 801, - RPC_LOC_IOCTL_SET_SBAS_CONFIG = 802, - RPC_LOC_IOCTL_GET_SBAS_CONFIG = 803, - RPC_LOC_IOCTL_SET_NMEA_TYPES = 804, - RPC_LOC_IOCTL_GET_NMEA_TYPES = 805, - RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR = 806, - RPC_LOC_IOCTL_GET_CDMA_PDE_SERVER_ADDR = 807, - RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR = 808, - RPC_LOC_IOCTL_GET_CDMA_MPC_SERVER_ADDR = 809, - RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR = 810, - RPC_LOC_IOCTL_GET_UMTS_SLP_SERVER_ADDR = 811, - RPC_LOC_IOCTL_SET_ON_DEMAND_LPM = 812, - RPC_LOC_IOCTL_GET_ON_DEMAND_LPM = 813, - RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL = 814, - RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL = 815, - RPC_LOC_IOCTL_SET_LBS_APN_PROFILE = 816, - RPC_LOC_IOCTL_GET_LBS_APN_PROFILE = 817, - RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE = 818, - RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE = 819, - RPC_LOC_IOCTL_SET_DATA_ENABLE = 820, - RPC_LOC_IOCTL_SET_SUPL_VERSION = 821, - RPC_LOC_IOCTL_GET_SUPL_VERSION = 822, - RPC_LOC_IOCTL_PROPRIETARY_START_INDEX = 1000, - RPC_LOC_IOCTL_DELETE_ASSIST_DATA = 1000, - RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR = 1001, - RPC_LOC_IOCTL_GET_CUSTOM_PDE_SERVER_ADDR = 1002, - RPC_LOC_IOCTL_RESERVED_CMD = 8000, - RPC_LOC_IOCTL_THIRD_PARTY_START_INDEX = 1073741824 -}; - -struct rpc_loc_api_version_s_type { - unsigned char major; - unsigned char minor; -}; - -enum rpc_loc_fix_recurrence_e_type { - RPC_LOC_PERIODIC_FIX = 1, - RPC_LOC_SINGLE_FIX = 2, - RPC_LOC_FIX_SESSION_TYPE_MAX = 268435456 -}; - -enum rpc_loc_operation_mode_e_type { - RPC_LOC_OPER_MODE_DEFAULT = 1, - RPC_LOC_OPER_MODE_MSB = 2, - RPC_LOC_OPER_MODE_MSA = 3, - RPC_LOC_OPER_MODE_STANDALONE = 4, - RPC_LOC_OPER_MODE_SPEED_OPTIMAL = 5, - RPC_LOC_OPER_MODE_ACCURACY_OPTIMAL = 6, - RPC_LOC_OPER_MODE_DATA_OPTIMAL = 7, - RPC_LOC_OPER_MODE_CELL_ID = 8, - RPC_LOC_OPER_MODE_MAX = 268435456 -}; - -enum rpc_loc_notify_e_type { - RPC_LOC_NOTIFY_ON_INTERVAL = 1, - RPC_LOC_NOTIFY_ON_DISTANCE = 2, - RPC_LOC_NOTIFY_ON_ANY = 3, - RPC_LOC_NOTIFY_ON_ALL = 4, - RPC_LOC_NOTIFY_TYPE_MAX = 268435456 -}; - -struct rpc_loc_fix_criteria_s_type { - rpc_uint32 valid_mask; - rpc_loc_fix_recurrence_e_type recurrence_type; - rpc_loc_operation_mode_e_type preferred_operation_mode; - rpc_uint32 preferred_accuracy; - rpc_uint32 preferred_response_time; - rpc_boolean intermediate_pos_report_enabled; - rpc_loc_notify_e_type notify_type; - rpc_uint32 min_interval; - float min_distance; - rpc_uint32 min_dist_sample_interval; -}; - -enum rpc_loc_ni_user_resp_e_type { - RPC_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT = 1, - RPC_LOC_NI_LCS_NOTIFY_VERIFY_DENY = 2, - RPC_LOC_NI_LCS_NOTIFY_VERIFY_NORESP = 3, - RPC_LOC_NI_LCS_NOTIFY_VERIFY_MAX = 268435456 -}; - -struct rpc_loc_user_verify_s_type { - rpc_loc_ni_user_resp_e_type user_resp; - rpc_loc_ni_event_s_type ni_event_pass_back; -}; - -enum rpc_loc_predicted_orbits_data_format_e_type { - RPC_LOC_PREDICTED_ORBITS_XTRA = 0, - RPC_LOC_PREDICTED_ORBITS_FORMAT_MAX = 268435456 -}; - -struct rpc_loc_predicted_orbits_data_s_type { - rpc_loc_predicted_orbits_data_format_e_type format_type; - rpc_uint32 total_size; - rpc_uint8 total_parts; - rpc_uint8 part; - rpc_uint16 part_len; - opaque data_ptr<>; -}; - -struct rpc_loc_predicted_orbits_data_validity_report_s_type { - rpc_uint64 start_time_utc; - rpc_uint16 valid_duration_hrs; -}; - -struct rpc_loc_predicted_orbits_auto_download_config_s_type { - rpc_boolean enable; - unsigned char auto_check_every_hrs; -}; - -struct rpc_loc_assist_data_time_s_type { - rpc_uint64 time_utc; - rpc_uint32 uncertainty; -}; - -typedef rpc_uint64 rpc_loc_assist_pos_valid_mask_type; - -struct rpc_loc_assist_data_pos_s_type { - rpc_loc_assist_pos_valid_mask_type valid_mask; - rpc_uint64 timestamp_utc; - double latitude; - double longitude; - float altitude_wrt_ellipsoid; - float altitude_wrt_mean_sea_level; - float hor_unc_circular; - float vert_unc; - unsigned char confidence_horizontal; - unsigned char confidence_vertical; - rpc_int32 timestamp_age; -}; - -enum rpc_loc_server_open_status_e_type { - RPC_LOC_SERVER_OPEN_SUCCESS = 1, - RPC_LOC_SERVER_OPEN_FAIL = 2, - RPC_LOC_SERVER_OPEN_STATUS_MAX = 268435456 -}; - -enum rpc_loc_server_pdp_type_e_type { - RPC_LOC_SERVER_PDP_IP = 0, - RPC_LOC_SERVER_PDP_PPP, - RPC_LOC_SERVER_PDP_IPV6, - RPC_LOC_SERVER_PDP_IPV4V6, - RPC_LOC_SERVER_PDP_MAX = 268435456 -}; - -struct rpc_loc_server_open_status_s_type { - rpc_loc_server_connection_handle conn_handle; - rpc_loc_server_open_status_e_type open_status; - opaque apn_name[100]; -}; - -struct rpc_loc_server_multi_open_status_s_type { - rpc_loc_server_connection_handle conn_handle; - rpc_loc_server_open_status_e_type open_status; - rpc_loc_server_pdp_type_e_type pdp_type; - opaque apn_name[100]; -}; - -enum rpc_loc_server_close_status_e_type { - RPC_LOC_SERVER_CLOSE_SUCCESS = 1, - RPC_LOC_SERVER_CLOSE_FAIL = 2, - RPC_LOC_SERVER_CLOSE_STATUS_MAX = 268435456 -}; - -struct rpc_loc_server_close_status_s_type { - rpc_loc_server_connection_handle conn_handle; - rpc_loc_server_close_status_e_type close_status; -}; - -struct rpc_loc_wiper_fix_time_s_type { - rpc_uint32 slow_clock_count; -}; - -struct rpc_loc_wiper_fix_pos_s_type { - rpc_int32 lat; - rpc_int32 lon; - rpc_uint16 HEPE; - rpc_uint8 num_of_aps_used; - rpc_uint8 fix_error_code; -}; - -struct rpc_loc_wiper_ap_info_s_type { - opaque mac_addr[6]; - rpc_int32 rssi; - rpc_uint16 channel; - rpc_uint8 ap_qualifier; -}; - -struct rpc_loc_wiper_ap_set_s_type { - rpc_uint8 num_of_aps; - rpc_loc_wiper_ap_info_s_type ap_info[50]; -}; - -struct rpc_loc_wiper_position_report_s_type { - rpc_uint8 wiper_valid_info_flag; - rpc_loc_wiper_fix_time_s_type wiper_fix_time; - rpc_loc_wiper_fix_pos_s_type wiper_fix_position; - rpc_loc_wiper_ap_set_s_type wiper_ap_set; -}; - -enum rpc_loc_wiper_status_e_type { - RPC_LOC_WIPER_STATUS_AVAILABLE = 1, - RPC_LOC_WIPER_STATUS_UNAVAILABLE = 2, - RPC_LOC_WIPER_STATUS_E_SIZE = 268435456 -}; - -enum rpc_loc_fs_operation_e_type { - RPC_LOC_FS_CREATE_WRITE_FILE = 1, - RPC_LOC_FS_APPEND_FILE = 2, - RPC_LOC_FS_DELETE_FILE = 3, - RPC_LOC_FS_READ_FILE = 4, - RPC_LOC_FS_MAX = 268435456 -}; - -struct rpc_loc_efs_data_s_type { - opaque filename[64]; - rpc_loc_fs_operation_e_type operation; - rpc_uint32 total_size; - opaque data_ptr<>; - rpc_uint32 part_len; - rpc_uint8 part; - rpc_uint8 total_parts; - rpc_uint32 reserved; -}; - -enum rpc_loc_error_estimate_config_e_type { - RPC_LOC_ERROR_ESTIMATE_CONFIG_SET = 1, - RPC_LOC_ERROR_ESTIMATE_CONFIG_CLEAR = 2, - RPC_LOC_ERROR_ESTIMATE_MAX = 268435456 -}; - -struct rpc_loc_apn_profiles_type { - rpc_uint32 srv_system_type; - rpc_uint32 pdp_type; - rpc_uint32 reserved; - opaque apn_name[100]; -}; - -enum rpc_loc_lock_e_type { - RPC_LOC_LOCK_NONE = 1, - RPC_LOC_LOCK_MI = 2, - RPC_LOC_LOCK_MT = 3, - RPC_LOC_LOCK_ALL = 4, - RPC_LOC_LOCK_MAX = 268435456 -}; - -typedef rpc_uint32 rpc_loc_nmea_sentence_type; - -typedef rpc_uint32 rpc_loc_assist_data_type; - -struct rpc_loc_assist_data_delete_s_type { - rpc_loc_assist_data_type type; - rpc_uint32 reserved[8]; -}; - -union rpc_loc_ioctl_data_u_type switch (rpc_loc_ioctl_e_type disc) { - case RPC_LOC_IOCTL_SET_FIX_CRITERIA: - rpc_loc_fix_criteria_s_type fix_criteria; - case RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE: - rpc_loc_user_verify_s_type user_verify_resp; - case RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA: - rpc_loc_predicted_orbits_data_s_type predicted_orbits_data; - case RPC_LOC_IOCTL_SET_PREDICTED_ORBITS_DATA_AUTO_DOWNLOAD: - rpc_loc_predicted_orbits_auto_download_config_s_type predicted_orbits_auto_download; - case RPC_LOC_IOCTL_INJECT_UTC_TIME: - rpc_loc_assist_data_time_s_type assistance_data_time; - case RPC_LOC_IOCTL_INJECT_POSITION: - rpc_loc_assist_data_pos_s_type assistance_data_position; - case RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS: - rpc_loc_server_open_status_s_type conn_open_status; - case RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS: - rpc_loc_server_close_status_s_type conn_close_status; - case RPC_LOC_IOCTL_SEND_WIPER_POSITION_REPORT: - rpc_loc_wiper_position_report_s_type wiper_pos; - case RPC_LOC_IOCTL_NOTIFY_WIPER_STATUS: - rpc_loc_wiper_status_e_type wiper_status; - case RPC_LOC_IOCTL_SET_ENGINE_LOCK: - rpc_loc_lock_e_type engine_lock; - case RPC_LOC_IOCTL_SET_SBAS_CONFIG: - rpc_boolean sbas_mode; - case RPC_LOC_IOCTL_SET_NMEA_TYPES: - rpc_loc_nmea_sentence_type nmea_types; - case RPC_LOC_IOCTL_SET_ON_DEMAND_LPM: - rpc_boolean on_demand_lpm; - case RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR: - case RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR: - case RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR: - case RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR: - rpc_loc_server_info_s_type server_addr; - case RPC_LOC_IOCTL_DELETE_ASSIST_DATA: - rpc_loc_assist_data_delete_s_type assist_data_delete; - case RPC_LOC_IOCTL_ACCESS_EFS_DATA: - rpc_loc_efs_data_s_type efs_data; - case RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG: - rpc_loc_error_estimate_config_e_type error_estimate_config; - case RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL: - rpc_uint8 xtra_t_session_control; - case RPC_LOC_IOCTL_SET_LBS_APN_PROFILE: - case RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE: - rpc_loc_apn_profiles_type apn_profiles[6]; - case RPC_LOC_IOCTL_SET_DATA_ENABLE: - rpc_boolean data_enable; - case RPC_LOC_IOCTL_SET_SUPL_VERSION: - rpc_uint32 supl_version; - case RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS: - rpc_loc_server_multi_open_status_s_type multi_conn_open_status; - case RPC_LOC_IOCTL_RESERVED_CMD: - rpc_loc_reserved_payload_s_type reserved; - default: - void; -}; - -union rpc_loc_ioctl_callback_data_u_type switch (rpc_loc_ioctl_e_type disc) { - case RPC_LOC_IOCTL_GET_API_VERSION: - rpc_loc_api_version_s_type api_version; - case RPC_LOC_IOCTL_GET_FIX_CRITERIA: - rpc_loc_fix_criteria_s_type fix_criteria; - case RPC_LOC_IOCTL_GET_ENGINE_LOCK: - rpc_loc_lock_e_type engine_lock; - case RPC_LOC_IOCTL_GET_SBAS_CONFIG: - rpc_boolean sbas_mode; - case RPC_LOC_IOCTL_GET_NMEA_TYPES: - rpc_loc_nmea_sentence_type nmea_types; - case RPC_LOC_IOCTL_GET_ON_DEMAND_LPM: - rpc_boolean on_demand_lpm; - case RPC_LOC_IOCTL_GET_CDMA_PDE_SERVER_ADDR: - case RPC_LOC_IOCTL_GET_CDMA_MPC_SERVER_ADDR: - case RPC_LOC_IOCTL_GET_UMTS_SLP_SERVER_ADDR: - case RPC_LOC_IOCTL_GET_CUSTOM_PDE_SERVER_ADDR: - rpc_loc_server_info_s_type server_addr; - case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE: - rpc_loc_predicted_orbits_data_source_s_type predicted_orbits_data_source; - case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_VALIDITY: - rpc_loc_predicted_orbits_data_validity_report_s_type predicted_orbits_data_validity; - case RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL: - rpc_uint8 xtra_t_session_control; - case RPC_LOC_IOCTL_GET_LBS_APN_PROFILE: - case RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE: - rpc_loc_apn_profiles_type apn_profiles[6]; - case RPC_LOC_IOCTL_GET_SUPL_VERSION: - rpc_uint32 supl_version; - default: - void; -}; - -struct rpc_loc_ioctl_callback_s_type { - rpc_loc_ioctl_e_type type; - rpc_int32 status; - rpc_loc_ioctl_callback_data_u_type data; -}; - -union rpc_loc_event_payload_u_type switch (unsigned hyper disc) { - case RPC_LOC_EVENT_PARSED_POSITION_REPORT: - rpc_loc_parsed_position_s_type parsed_location_report; - case RPC_LOC_EVENT_SATELLITE_REPORT: - rpc_loc_gnss_info_s_type gnss_report; - case RPC_LOC_EVENT_NMEA_POSITION_REPORT: - case RPC_LOC_EVENT_NMEA_1HZ_REPORT: - rpc_loc_nmea_report_s_type nmea_report; - case RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST: - rpc_loc_ni_event_s_type ni_request; - case RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST: - rpc_loc_assist_data_request_s_type assist_data_request; - case RPC_LOC_EVENT_LOCATION_SERVER_REQUEST: - rpc_loc_server_request_s_type loc_server_request; - case RPC_LOC_EVENT_IOCTL_REPORT: - rpc_loc_ioctl_callback_s_type ioctl_report; - case RPC_LOC_EVENT_STATUS_REPORT: - rpc_loc_status_event_s_type status_report; - case RPC_LOC_EVENT_WPS_NEEDED_REQUEST: - rpc_loc_qwip_request_s_type qwip_request; - case RPC_LOC_EVENT_RESERVED: - rpc_loc_reserved_payload_s_type reserved; - default: - void; -}; - + --------------------------------------------------------------------------- +=============================================================================*/ + +/*============================================================================= + + Edit History + + AUTO GENERATED + +Generated by following versions of Htorpc modules: +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/htorpc.pl#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Start.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Htoxdr.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/XDR.pm#3 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Output.pm#5 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Parser.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/Metacomments.pm#1 +Id: //source/qcom/qct/core/mproc/tools/rel/2h09/htorpc/lib/Htorpc/SymbolTable.pm#1 + +loc_api Definition File(s): +Id: //source/qcom/qct/modem/api/gps/main/latest/loc_api.h#24 +=============================================================================*/ +/*============================================================================= +$Header$ +=============================================================================*/ + + + +const LOC_API_TOOLVERS = 0x00040030; +const LOC_API_FEATURES = 0x00000001; + +const RPC_LOC_EVENT_STATUS_REPORT = 0x00000100; + +const RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST = 0x00000020; + +const RPC_LOC_EVENT_WPS_NEEDED_REQUEST = 0x00000200; + +const RPC_LOC_EVENT_SATELLITE_REPORT = 0x00000002; + +const RPC_LOC_EVENT_PARSED_POSITION_REPORT = 0x00000001; + +const RPC_LOC_EVENT_RESERVED = 0x8000000000000000; + +const RPC_LOC_EVENT_LOCATION_SERVER_REQUEST = 0x00000040; + +const RPC_LOC_EVENT_NMEA_POSITION_REPORT = 0x00000008; + +const RPC_LOC_EVENT_IOCTL_REPORT = 0x00000080; + +const RPC_LOC_EVENT_NMEA_1HZ_REPORT = 0x00000004; + +const RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST = 0x00000010; + +const RPC_LOC_API_CB_NULL_VERSION = 0x00050002; +const RPC_LOC_EVENT_CB_F_TYPE_VERSION = 0x00050001; +const RPC_LOC_API_API_VERSIONS_VERSION = 0x00050001; +const RPC_LOC_STOP_FIX_VERSION = 0x00050001; +const RPC_LOC_START_FIX_VERSION = 0x00050001; +const RPC_LOC_IOCTL_VERSION = 0x00050001; +const RPC_LOC_CLOSE_VERSION = 0x00050001; +const RPC_LOC_API_RPC_GLUE_CODE_INFO_REMOTE_VERSION = 0x00050001; +const RPC_LOC_OPEN_VERSION = 0x00050001; +const RPC_LOC_API_NULL_VERSION = 0x00050001; +const RPC_LOC_API_API_MAJOR_NUM = 0x0005; +const RPC_LOC_APIAPI_VERSION_IS_HASHKEY = 0; + +typedef rpc_int32 rpc_loc_client_handle_type; + +typedef rpc_uint64 rpc_loc_event_mask_type; + +typedef rpc_uint64 rpc_loc_position_valid_mask_type; + +typedef rpc_uint32 rpc_loc_pos_technology_mask_type; + +enum rpc_loc_session_status_e_type { + RPC_LOC_SESS_STATUS_SUCCESS = 0, + RPC_LOC_SESS_STATUS_IN_PROGESS = 1, + RPC_LOC_SESS_STATUS_GENERAL_FAILURE = 2, + RPC_LOC_SESS_STATUS_TIMEOUT = 3, + RPC_LOC_SESS_STATUS_USER_END = 4, + RPC_LOC_SESS_STATUS_BAD_PARAMETER = 5, + RPC_LOC_SESS_STATUS_PHONE_OFFLINE = 6, + RPC_LOC_SESS_STATUS_ENGINE_LOCKED = 7, + RPC_LOC_SESS_STATUS_MAX = 268435456 +}; + +struct rpc_loc_calendar_time_s_type { + rpc_uint16 year; + unsigned char month; + unsigned char day_of_week; + unsigned char day; + unsigned char hour; + unsigned char minute; + unsigned char second; + rpc_uint16 millisecond; +}; + +struct rpc_loc_parsed_position_s_type { + rpc_loc_position_valid_mask_type valid_mask; + rpc_loc_session_status_e_type session_status; + rpc_loc_calendar_time_s_type timestamp_calendar; + rpc_uint64 timestamp_utc; + rpc_uint8 leap_seconds; + float time_unc; + double latitude; + double longitude; + float altitude_wrt_ellipsoid; + float altitude_wrt_mean_sea_level; + float speed_horizontal; + float speed_vertical; + float heading; + float hor_unc_circular; + float hor_unc_ellipse_semi_major; + float hor_unc_ellipse_semi_minor; + float hor_unc_ellipse_orient_azimuth; + float vert_unc; + float speed_unc; + float heading_unc; + unsigned char confidence_horizontal; + unsigned char confidence_vertical; + float magnetic_deviation; + rpc_loc_pos_technology_mask_type technology_mask; +}; + +enum rpc_loc_sv_system_e_type { + RPC_LOC_SV_SYSTEM_GPS = 1, + RPC_LOC_SV_SYSTEM_GALILEO = 2, + RPC_LOC_SV_SYSTEM_SBAS = 3, + RPC_LOC_SV_SYSTEM_COMPASS = 4, + RPC_LOC_SV_SYSTEM_GLONASS = 5, + RPC_LOC_SV_SYSTEM_MAX = 268435456 +}; + +enum rpc_loc_sv_status_e_type { + RPC_LOC_SV_STATUS_IDLE = 1, + RPC_LOC_SV_STATUS_SEARCH = 2, + RPC_LOC_SV_STATUS_TRACK = 3, + RPC_LOC_SV_STATUS_MAX = 268435456 +}; + +typedef rpc_uint32 rpc_loc_sv_info_valid_mask_type; + +struct rpc_loc_sv_info_s_type { + rpc_loc_sv_info_valid_mask_type valid_mask; + rpc_loc_sv_system_e_type system; + rpc_uint8 prn; + rpc_uint8 health_status; + rpc_loc_sv_status_e_type process_status; + rpc_boolean has_eph; + rpc_boolean has_alm; + float elevation; + float azimuth; + float snr; +}; + +typedef rpc_uint32 rpc_loc_gnss_info_valid_mask_type; + +struct rpc_loc_gnss_info_s_type { + rpc_loc_gnss_info_valid_mask_type valid_mask; + float position_dop; + float horizontal_dop; + float vertical_dop; + rpc_boolean altitude_assumed; + rpc_uint16 sv_count; + rpc_loc_sv_info_s_type sv_list<80>; /* EVAL:[LOC_API_MAX_SV_COUNT]*/ +}; + +struct rpc_loc_nmea_report_s_type { + rpc_uint16 length; + opaque nmea_sentences[200]; +}; + +enum rpc_loc_status_event_e_type { + RPC_LOC_STATUS_EVENT_ENGINE_STATE = 1, + RPC_LOC_STATUS_EVENT_FIX_SESSION_STATE = 2, + RPC_LOC_STATUS_EVENT_MAX = 268435456 +}; + +enum rpc_loc_engine_state_e_type { + RPC_LOC_ENGINE_STATE_ON = 1, + RPC_LOC_ENGINE_STATE_OFF = 2, + RPC_LOC_ENGINE_STATE_MAX = 268435456 +}; + +enum rpc_loc_fix_session_state_e_type { + RPC_LOC_FIX_SESSION_STATE_BEGIN = 1, + RPC_LOC_FIX_SESSION_STATE_END = 2, + RPC_LOC_FIX_SESSION_STATE_MAX = 268435456 +}; + +union rpc_loc_status_event_payload_u_type switch (rpc_loc_status_event_e_type disc) { + case RPC_LOC_STATUS_EVENT_ENGINE_STATE: + rpc_loc_engine_state_e_type engine_state; + case RPC_LOC_STATUS_EVENT_FIX_SESSION_STATE: + rpc_loc_fix_session_state_e_type fix_session_state; + default: + void; +}; + +struct rpc_loc_status_event_s_type { + rpc_loc_status_event_e_type event; + rpc_loc_status_event_payload_u_type payload; +}; + +enum rpc_loc_server_addr_e_type { + RPC_LOC_SERVER_ADDR_IPV4 = 1, + RPC_LOC_SERVER_ADDR_URL = 2, + RPC_LOC_SERVER_ADDR_IPV6 = 3, + RPC_LOC_SERVER_ADDR_MAX = 268435456 +}; + +struct rpc_loc_server_addr_ipv4_type { + rpc_uint32 addr; + rpc_uint16 port; +}; + +struct rpc_loc_server_addr_url_type { + rpc_uint16 length; + opaque addr[256]; +}; + +struct rpc_loc_server_addr_ipv6_type { + rpc_uint16 addr[8]; + rpc_uint32 port; +}; + +union rpc_loc_server_addr_u_type switch (rpc_loc_server_addr_e_type disc) { + case RPC_LOC_SERVER_ADDR_IPV4: + rpc_loc_server_addr_ipv4_type ipv4; + case RPC_LOC_SERVER_ADDR_URL: + rpc_loc_server_addr_url_type url; + case RPC_LOC_SERVER_ADDR_IPV6: + rpc_loc_server_addr_ipv6_type ipv6; + default: + void; +}; + +struct rpc_loc_server_info_s_type { + rpc_loc_server_addr_e_type addr_type; + rpc_loc_server_addr_u_type addr_info; +}; + +enum rpc_loc_ni_notify_verify_e_type { + RPC_LOC_NI_USER_NO_NOTIFY_NO_VERIFY = 1, + RPC_LOC_NI_USER_NOTIFY_ONLY = 2, + RPC_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP = 3, + RPC_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP = 4, + RPC_LOC_NI_USER_PRIVACY_OVERRIDE = 5, + RPC_LOC_NI_USER_NOTIFY_VERITY_TYPE_MAX = 268435456 +}; + +enum rpc_loc_ni_event_e_type { + RPC_LOC_NI_EVENT_VX_NOTIFY_VERIFY_REQ = 1, + RPC_LOC_NI_EVENT_SUPL_NOTIFY_VERIFY_REQ = 2, + RPC_LOC_NI_EVENT_UMTS_CP_NOTIFY_VERIFY_REQ = 3, + RPC_LOC_NI_EVENT_VX_SERVICE_INTERACTION_REQ = 4, + RPC_LOC_NI_EVENT_MAX = 268435456 +}; + +enum rpc_loc_ni_datacoding_scheme_e_type { + RPC_LOC_NI_PRESUPL_ISO646IRV = 0, + RPC_LOC_NI_PRESUPL_ISO8859 = 1, + RPC_LOC_NI_PRESUPL_UTF8 = 2, + RPC_LOC_NI_PRESUPL_UTF16 = 3, + RPC_LOC_NI_PRESUPL_UCS2 = 4, + RPC_LOC_NI_PRESUPL_GSM_DEFAULT = 5, + RPC_LOC_NI_PRESUPL_SHIFT_JIS = 6, + RPC_LOC_NI_PRESUPL_JIS = 7, + RPC_LOC_NI_PRESUPL_EUC = 8, + RPC_LOC_NI_PRESUPL_GB2312 = 9, + RPC_LOC_NI_PRESUPL_CNS11643 = 10, + RPC_LOC_NI_PRESUPL_KSC1001 = 11, + RPC_LOC_NI_PRESUPL_ENCODING_UNKNOWN = 2147483647, + RPC_LOC_NI_SS_GERMAN = 12, + RPC_LOC_NI_SS_ENGLISH = 13, + RPC_LOC_NI_SS_ITALIAN = 14, + RPC_LOC_NI_SS_FRENCH = 15, + RPC_LOC_NI_SS_SPANISH = 16, + RPC_LOC_NI_SS_DUTCH = 17, + RPC_LOC_NI_SS_SWEDISH = 18, + RPC_LOC_NI_SS_DANISH = 19, + RPC_LOC_NI_SS_PORTUGUESE = 20, + RPC_LOC_NI_SS_FINNISH = 21, + RPC_LOC_NI_SS_NORWEGIAN = 22, + RPC_LOC_NI_SS_GREEK = 23, + RPC_LOC_NI_SS_TURKISH = 24, + RPC_LOC_NI_SS_HUNGARIAN = 25, + RPC_LOC_NI_SS_POLISH = 26, + RPC_LOC_NI_SS_LANGUAGE_UNSPEC = 27, + RPC_LOC_NI_SUPL_UTF8 = 28, + RPC_LOC_NI_SUPL_UCS2 = 29, + RPC_LOC_NI_SUPL_GSM_DEFAULT = 30, + RPC_LOC_NI_SUPL_ENCODING_UNKNOWN = 2147483647 +}; + +enum rpc_loc_ni_vx_requester_id_encoding_scheme_e_type { + RPC_LOC_NI_VX_OCTET = 0, + RPC_LOC_NI_VX_EXN_PROTOCOL_MSG = 1, + RPC_LOC_NI_VX_ASCII = 2, + RPC_LOC_NI_VX_IA5 = 3, + RPC_LOC_NI_VX_UNICODE = 4, + RPC_LOC_NI_VX_SHIFT_JIS = 5, + RPC_LOC_NI_VX_KOREAN = 6, + RPC_LOC_NI_VX_LATIN_HEBREW = 7, + RPC_LOC_NI_VX_LATIN = 8, + RPC_LOC_NI_VX_GSM = 9, + RPC_LOC_NI_VX_ENCODING_TYPE_MAX = 268435456 +}; + +enum rpc_loc_ni_vx_pos_mode_e_type { + RPC_LOC_VX_MS_ASSISTED_ONLY = 1, + RPC_LOC_VX_MS_BASED_ONLY = 2, + RPC_LOC_VX_MS_ASSISTED_PREF_MSBASED_ALLWD = 3, + RPC_LOC_VX_MS_BASED_PREF_ASSISTED_ALLWD = 4, + RPC_LOC_VX_POS_MODE_MAX = 268435456 +}; + +struct rpc_loc_ni_vx_requester_id_s_type { + unsigned char requester_id_length; + opaque requester_id[200]; +}; + +struct rpc_loc_ni_vx_notify_verify_req_s_type { + rpc_loc_ni_notify_verify_e_type notification_priv_type; + unsigned char pos_qos_incl; + unsigned char pos_qos; + rpc_uint32 num_fixes; + rpc_uint32 tbf; + rpc_loc_ni_vx_pos_mode_e_type pos_mode; + rpc_loc_ni_vx_requester_id_encoding_scheme_e_type encoding_scheme; + rpc_loc_ni_vx_requester_id_s_type requester_id; + rpc_uint16 user_resp_timer_val; +}; + +enum rpc_loc_ni_supl_pos_method_e_type { + RPC_LOC_NI_POSMETHOD_AGPS_SETASSISTED = 1, + RPC_LOC_NI_POSMETHOD_AGPS_SETBASED = 2, + RPC_LOC_NI_POSMETHOD_AGPS_SETASSISTED_PREF = 3, + RPC_LOC_NI_POSMETHOD_AGPS_SETBASED_PREF = 4, + RPC_LOC_NI_POSMETHOD_AUTONOMOUS_GPS = 5, + RPC_LOC_NI_POSMETHOD_AFLT = 6, + RPC_LOC_NI_POSMETHOD_ECID = 7, + RPC_LOC_NI_POSMETHOD_EOTD = 8, + RPC_LOC_NI_POSMETHOD_OTDOA = 9, + RPC_LOC_NI_POSMETHOD_NO_POSITION = 10, + RPC_LOC_NI_POSMETHOD_MAX = 268435456 +}; + +struct rpc_loc_ni_supl_slp_session_id_s_type { + unsigned char presence; + opaque session_id[4]; + rpc_loc_server_info_s_type slp_address; +}; + +struct rpc_loc_ni_requestor_id_s_type { + unsigned char data_coding_scheme; + opaque requestor_id_string[200]; + unsigned char string_len; +}; + +struct rpc_loc_ni_supl_client_name_s_type { + unsigned char data_coding_scheme; + opaque client_name_string[64]; + unsigned char string_len; +}; + +struct rpc_loc_ni_supl_qop_s_type { + unsigned char bit_mask; + unsigned char horacc; + unsigned char veracc; + rpc_uint16 maxLocAge; + unsigned char delay; +}; + +struct rpc_loc_ni_supl_notify_verify_req_s_type { + rpc_loc_ni_notify_verify_e_type notification_priv_type; + rpc_uint16 flags; + rpc_loc_ni_supl_slp_session_id_s_type supl_slp_session_id; + opaque supl_hash[8]; + rpc_loc_ni_datacoding_scheme_e_type datacoding_scheme; + rpc_loc_ni_supl_pos_method_e_type pos_method; + rpc_loc_ni_requestor_id_s_type requestor_id; + rpc_loc_ni_supl_client_name_s_type client_name; + rpc_loc_ni_supl_qop_s_type supl_qop; + rpc_uint16 user_response_timer; +}; + +struct rpc_loc_ni_ext_client_address_s_type { + unsigned char ext_client_address_len; + opaque ext_client_address[20]; +}; + +enum rpc_loc_ni_location_type_e_type { + RPC_LOC_NI_LOCATIONTYPE_CURRENT_LOCATION = 1, + RPC_LOC_NI_LOCATIONTYPE_CURRENT_OR_LAST_KNOWN_LOCATION = 2, + RPC_LOC_NI_LOCATIONTYPE_INITIAL_LOCATION = 3, + RPC_LOC_NI_LOCATIONTYPE_MAX = 268435456 +}; + +struct rpc_loc_ni_deferred_location_s_type { + unsigned char unused_bits; + unsigned char ms_available; +}; + +struct rpc_loc_ni_codeword_string_s_type { + unsigned char data_coding_scheme; + opaque lcs_codeword_string[20]; + unsigned char string_len; +}; + +struct rpc_loc_ni_service_type_id_s_type { + unsigned char lcs_service_type_id; +}; + +struct rpc_loc_ni_umts_cp_notify_verify_req_s_type { + rpc_loc_ni_notify_verify_e_type notification_priv_type; + unsigned char invoke_id; + rpc_uint16 flags; + unsigned char notification_length; + opaque notification_text[64]; + rpc_loc_ni_datacoding_scheme_e_type datacoding_scheme; + rpc_loc_ni_ext_client_address_s_type ext_client_address_data; + rpc_loc_ni_location_type_e_type location_type; + rpc_loc_ni_deferred_location_s_type deferred_location; + rpc_loc_ni_requestor_id_s_type requestor_id; + rpc_loc_ni_codeword_string_s_type codeword_string; + rpc_loc_ni_service_type_id_s_type service_type_id; + rpc_uint16 user_response_timer; +}; + +enum rpc_loc_ni_service_interaction_e_type { + RPC_LOC_NI_SERVICE_INTERACTION_ONGOING_NI_INCOMING_MO = 1, + RPC_LOC_NI_SERVICE_INTERACTION_MAX = 268435456 +}; + +struct rpc_loc_ni_vx_service_interaction_req_s_type { + rpc_loc_ni_vx_notify_verify_req_s_type ni_vx_req; + rpc_loc_ni_service_interaction_e_type service_interation_type; +}; + +union rpc_loc_ni_event_payload_u_type switch (rpc_loc_ni_event_e_type disc) { + case RPC_LOC_NI_EVENT_VX_NOTIFY_VERIFY_REQ: + rpc_loc_ni_vx_notify_verify_req_s_type vx_req; + case RPC_LOC_NI_EVENT_SUPL_NOTIFY_VERIFY_REQ: + rpc_loc_ni_supl_notify_verify_req_s_type supl_req; + case RPC_LOC_NI_EVENT_UMTS_CP_NOTIFY_VERIFY_REQ: + rpc_loc_ni_umts_cp_notify_verify_req_s_type umts_cp_req; + case RPC_LOC_NI_EVENT_VX_SERVICE_INTERACTION_REQ: + rpc_loc_ni_vx_service_interaction_req_s_type service_interaction_req; + default: + void; +}; + +struct rpc_loc_ni_event_s_type { + rpc_loc_ni_event_e_type event; + rpc_loc_ni_event_payload_u_type payload; +}; + +enum rpc_loc_assist_data_request_e_type { + RPC_LOC_ASSIST_DATA_TIME_REQ = 1, + RPC_LOC_ASSIST_DATA_PREDICTED_ORBITS_REQ = 2, + RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ = 3, + RPC_LOC_ASSIST_DATA_MAX = 268435456 +}; + +typedef string rpc_struct_loc_time_download_source_s_type_servers_ptr<256>; /* EVAL:[LOC_API_MAX_SERVER_ADDR_LENGTH]*/ + +typedef rpc_struct_loc_time_download_source_s_type_servers_ptr rpc_struct_loc_time_download_source_s_type_servers[3]; + +struct rpc_loc_time_download_source_s_type { + rpc_uint32 delay_threshold; + rpc_struct_loc_time_download_source_s_type_servers servers; +}; + +typedef string rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr; + +typedef rpc_struct_loc_predicted_orbits_data_source_s_type_servers_ptr rpc_struct_loc_predicted_orbits_data_source_s_type_servers[3]; + +struct rpc_loc_predicted_orbits_data_source_s_type { + rpc_uint32 max_file_size; + rpc_uint32 max_part_size; + rpc_struct_loc_predicted_orbits_data_source_s_type_servers servers; +}; + +struct rpc_loc_pos_inj_request_s_type { + rpc_uint32 flags; + double latitude; + double longitude; + rpc_uint32 position_uncertainty; + rpc_uint64 timestamp; +}; + +union rpc_loc_assist_data_request_payload_u_type switch (rpc_loc_assist_data_request_e_type disc) { + case RPC_LOC_ASSIST_DATA_TIME_REQ: + rpc_loc_time_download_source_s_type time_download; + case RPC_LOC_ASSIST_DATA_PREDICTED_ORBITS_REQ: + rpc_loc_predicted_orbits_data_source_s_type data_download; + case RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ: + rpc_loc_pos_inj_request_s_type pos_injection; + default: + void; +}; + +struct rpc_loc_assist_data_request_s_type { + rpc_loc_assist_data_request_e_type event; + rpc_loc_assist_data_request_payload_u_type payload; +}; + +typedef rpc_uint32 rpc_loc_server_connection_handle; + +enum rpc_loc_server_protocol_e_type { + RPC_LOC_SERVER_PROTOCOL_DEFAULT = 0, + RPC_LOC_SERVER_PROTOCOL_SUPL = 1, + RPC_LOC_SERVER_PROTOCOL_VX_MPC = 2, + RPC_LOC_SERVER_PROTOCOL_VX_PDE = 3, + RPC_LOC_SERVER_PROTOCOL_MAX = 16777216 +}; + +enum rpc_loc_server_connection_e_type { + RPC_LOC_SERVER_CONNECTION_LBS = 0, + RPC_LOC_SERVER_CONNECTION_WWAN_INTERNET, + RPC_LOC_SERVER_CONNECTION_MAX = 16777216 +}; + +enum rpc_loc_server_request_e_type { + RPC_LOC_SERVER_REQUEST_OPEN = 1, + RPC_LOC_SERVER_REQUEST_CLOSE = 2, + RPC_LOC_SERVER_REQUEST_MULTI_OPEN = 3, + RPC_LOC_SERVER_REQUEST_MAX = 268435456 +}; + +struct rpc_loc_server_open_req_s_type { + rpc_loc_server_connection_handle conn_handle; + rpc_loc_server_protocol_e_type protocol; +}; + +struct rpc_loc_server_multi_open_req_s_type { + rpc_loc_server_connection_handle conn_handle; + rpc_loc_server_protocol_e_type protocol; + rpc_loc_server_connection_e_type connection_type; +}; + +struct rpc_loc_server_close_req_s_type { + rpc_loc_server_connection_handle conn_handle; +}; + +union rpc_loc_server_request_u_type switch (rpc_loc_server_request_e_type disc) { + case RPC_LOC_SERVER_REQUEST_OPEN: + rpc_loc_server_open_req_s_type open_req; + case RPC_LOC_SERVER_REQUEST_CLOSE: + rpc_loc_server_close_req_s_type close_req; + case RPC_LOC_SERVER_REQUEST_MULTI_OPEN: + rpc_loc_server_multi_open_req_s_type multi_open_req; + default: + void; +}; + +struct rpc_loc_server_request_s_type { + rpc_loc_server_request_e_type event; + rpc_loc_server_request_u_type payload; +}; + +enum rpc_loc_qwip_request_e_type { + RPC_LOC_QWIP_START_PERIODIC_HI_FREQ_FIXES = 0, + RPC_LOC_QWIP_START_PERIODIC_KEEP_WARM, + RPC_LOC_QWIP_STOP_PERIODIC_FIXES, + RPC_LOC_QWIP_SUSPEND, + RPC_LOC_QWIP_REQUEST_MAX = 268435456 +}; + +struct rpc_loc_qwip_request_s_type { + rpc_loc_qwip_request_e_type request_type; + rpc_uint16 tbf_ms; +}; + +struct rpc_loc_reserved_payload_s_type { + rpc_uint16 data_size; + opaque data<>; +}; + +enum rpc_loc_ioctl_e_type { + RPC_LOC_IOCTL_GET_API_VERSION = 1, + RPC_LOC_IOCTL_SET_FIX_CRITERIA = 2, + RPC_LOC_IOCTL_GET_FIX_CRITERIA = 3, + RPC_LOC_IOCTL_SERVICE_START_INDEX = 400, + RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE = 400, + RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA = 401, + RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_VALIDITY = 402, + RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE = 403, + RPC_LOC_IOCTL_SET_PREDICTED_ORBITS_DATA_AUTO_DOWNLOAD = 404, + RPC_LOC_IOCTL_INJECT_UTC_TIME = 405, + RPC_LOC_IOCTL_INJECT_RTC_VALUE = 406, + RPC_LOC_IOCTL_INJECT_POSITION = 407, + RPC_LOC_IOCTL_QUERY_ENGINE_STATE = 408, + RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS = 409, + RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS = 410, + RPC_LOC_IOCTL_SEND_WIPER_POSITION_REPORT = 411, + RPC_LOC_IOCTL_NOTIFY_WIPER_STATUS = 412, + RPC_LOC_IOCTL_ACCESS_EFS_DATA = 413, + RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG = 414, + RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS = 415, + RPC_LOC_IOCTL_NV_SETTINGS_START_INDEX = 800, + RPC_LOC_IOCTL_SET_ENGINE_LOCK = 800, + RPC_LOC_IOCTL_GET_ENGINE_LOCK = 801, + RPC_LOC_IOCTL_SET_SBAS_CONFIG = 802, + RPC_LOC_IOCTL_GET_SBAS_CONFIG = 803, + RPC_LOC_IOCTL_SET_NMEA_TYPES = 804, + RPC_LOC_IOCTL_GET_NMEA_TYPES = 805, + RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR = 806, + RPC_LOC_IOCTL_GET_CDMA_PDE_SERVER_ADDR = 807, + RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR = 808, + RPC_LOC_IOCTL_GET_CDMA_MPC_SERVER_ADDR = 809, + RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR = 810, + RPC_LOC_IOCTL_GET_UMTS_SLP_SERVER_ADDR = 811, + RPC_LOC_IOCTL_SET_ON_DEMAND_LPM = 812, + RPC_LOC_IOCTL_GET_ON_DEMAND_LPM = 813, + RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL = 814, + RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL = 815, + RPC_LOC_IOCTL_SET_LBS_APN_PROFILE = 816, + RPC_LOC_IOCTL_GET_LBS_APN_PROFILE = 817, + RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE = 818, + RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE = 819, + RPC_LOC_IOCTL_SET_DATA_ENABLE = 820, + RPC_LOC_IOCTL_SET_SUPL_VERSION = 821, + RPC_LOC_IOCTL_GET_SUPL_VERSION = 822, + RPC_LOC_IOCTL_PROPRIETARY_START_INDEX = 1000, + RPC_LOC_IOCTL_DELETE_ASSIST_DATA = 1000, + RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR = 1001, + RPC_LOC_IOCTL_GET_CUSTOM_PDE_SERVER_ADDR = 1002, + RPC_LOC_IOCTL_RESERVED_CMD = 8000, + RPC_LOC_IOCTL_THIRD_PARTY_START_INDEX = 1073741824 +}; + +struct rpc_loc_api_version_s_type { + unsigned char major; + unsigned char minor; +}; + +enum rpc_loc_fix_recurrence_e_type { + RPC_LOC_PERIODIC_FIX = 1, + RPC_LOC_SINGLE_FIX = 2, + RPC_LOC_FIX_SESSION_TYPE_MAX = 268435456 +}; + +enum rpc_loc_operation_mode_e_type { + RPC_LOC_OPER_MODE_DEFAULT = 1, + RPC_LOC_OPER_MODE_MSB = 2, + RPC_LOC_OPER_MODE_MSA = 3, + RPC_LOC_OPER_MODE_STANDALONE = 4, + RPC_LOC_OPER_MODE_SPEED_OPTIMAL = 5, + RPC_LOC_OPER_MODE_ACCURACY_OPTIMAL = 6, + RPC_LOC_OPER_MODE_DATA_OPTIMAL = 7, + RPC_LOC_OPER_MODE_CELL_ID = 8, + RPC_LOC_OPER_MODE_MAX = 268435456 +}; + +enum rpc_loc_notify_e_type { + RPC_LOC_NOTIFY_ON_INTERVAL = 1, + RPC_LOC_NOTIFY_ON_DISTANCE = 2, + RPC_LOC_NOTIFY_ON_ANY = 3, + RPC_LOC_NOTIFY_ON_ALL = 4, + RPC_LOC_NOTIFY_TYPE_MAX = 268435456 +}; + +struct rpc_loc_fix_criteria_s_type { + rpc_uint32 valid_mask; + rpc_loc_fix_recurrence_e_type recurrence_type; + rpc_loc_operation_mode_e_type preferred_operation_mode; + rpc_uint32 preferred_accuracy; + rpc_uint32 preferred_response_time; + rpc_boolean intermediate_pos_report_enabled; + rpc_loc_notify_e_type notify_type; + rpc_uint32 min_interval; + float min_distance; + rpc_uint32 min_dist_sample_interval; +}; + +enum rpc_loc_ni_user_resp_e_type { + RPC_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT = 1, + RPC_LOC_NI_LCS_NOTIFY_VERIFY_DENY = 2, + RPC_LOC_NI_LCS_NOTIFY_VERIFY_NORESP = 3, + RPC_LOC_NI_LCS_NOTIFY_VERIFY_MAX = 268435456 +}; + +struct rpc_loc_user_verify_s_type { + rpc_loc_ni_user_resp_e_type user_resp; + rpc_loc_ni_event_s_type ni_event_pass_back; +}; + +enum rpc_loc_predicted_orbits_data_format_e_type { + RPC_LOC_PREDICTED_ORBITS_XTRA = 0, + RPC_LOC_PREDICTED_ORBITS_FORMAT_MAX = 268435456 +}; + +struct rpc_loc_predicted_orbits_data_s_type { + rpc_loc_predicted_orbits_data_format_e_type format_type; + rpc_uint32 total_size; + rpc_uint8 total_parts; + rpc_uint8 part; + rpc_uint16 part_len; + opaque data_ptr<>; +}; + +struct rpc_loc_predicted_orbits_data_validity_report_s_type { + rpc_uint64 start_time_utc; + rpc_uint16 valid_duration_hrs; +}; + +struct rpc_loc_predicted_orbits_auto_download_config_s_type { + rpc_boolean enable; + unsigned char auto_check_every_hrs; +}; + +struct rpc_loc_assist_data_time_s_type { + rpc_uint64 time_utc; + rpc_uint32 uncertainty; +}; + +typedef rpc_uint64 rpc_loc_assist_pos_valid_mask_type; + +struct rpc_loc_assist_data_pos_s_type { + rpc_loc_assist_pos_valid_mask_type valid_mask; + rpc_uint64 timestamp_utc; + double latitude; + double longitude; + float altitude_wrt_ellipsoid; + float altitude_wrt_mean_sea_level; + float hor_unc_circular; + float vert_unc; + unsigned char confidence_horizontal; + unsigned char confidence_vertical; + rpc_int32 timestamp_age; +}; + +enum rpc_loc_server_open_status_e_type { + RPC_LOC_SERVER_OPEN_SUCCESS = 1, + RPC_LOC_SERVER_OPEN_FAIL = 2, + RPC_LOC_SERVER_OPEN_STATUS_MAX = 268435456 +}; + +enum rpc_loc_server_pdp_type_e_type { + RPC_LOC_SERVER_PDP_IP = 0, + RPC_LOC_SERVER_PDP_PPP, + RPC_LOC_SERVER_PDP_IPV6, + RPC_LOC_SERVER_PDP_IPV4V6, + RPC_LOC_SERVER_PDP_MAX = 268435456 +}; + +struct rpc_loc_server_open_status_s_type { + rpc_loc_server_connection_handle conn_handle; + rpc_loc_server_open_status_e_type open_status; + opaque apn_name[100]; +}; + +struct rpc_loc_server_multi_open_status_s_type { + rpc_loc_server_connection_handle conn_handle; + rpc_loc_server_open_status_e_type open_status; + rpc_loc_server_pdp_type_e_type pdp_type; + opaque apn_name[100]; +}; + +enum rpc_loc_server_close_status_e_type { + RPC_LOC_SERVER_CLOSE_SUCCESS = 1, + RPC_LOC_SERVER_CLOSE_FAIL = 2, + RPC_LOC_SERVER_CLOSE_STATUS_MAX = 268435456 +}; + +struct rpc_loc_server_close_status_s_type { + rpc_loc_server_connection_handle conn_handle; + rpc_loc_server_close_status_e_type close_status; +}; + +struct rpc_loc_wiper_fix_time_s_type { + rpc_uint32 slow_clock_count; +}; + +struct rpc_loc_wiper_fix_pos_s_type { + rpc_int32 lat; + rpc_int32 lon; + rpc_uint16 HEPE; + rpc_uint8 num_of_aps_used; + rpc_uint8 fix_error_code; +}; + +struct rpc_loc_wiper_ap_info_s_type { + opaque mac_addr[6]; + rpc_int32 rssi; + rpc_uint16 channel; + rpc_uint8 ap_qualifier; +}; + +struct rpc_loc_wiper_ap_set_s_type { + rpc_uint8 num_of_aps; + rpc_loc_wiper_ap_info_s_type ap_info[50]; +}; + +struct rpc_loc_wiper_position_report_s_type { + rpc_uint8 wiper_valid_info_flag; + rpc_loc_wiper_fix_time_s_type wiper_fix_time; + rpc_loc_wiper_fix_pos_s_type wiper_fix_position; + rpc_loc_wiper_ap_set_s_type wiper_ap_set; +}; + +enum rpc_loc_wiper_status_e_type { + RPC_LOC_WIPER_STATUS_AVAILABLE = 1, + RPC_LOC_WIPER_STATUS_UNAVAILABLE = 2, + RPC_LOC_WIPER_STATUS_E_SIZE = 268435456 +}; + +enum rpc_loc_fs_operation_e_type { + RPC_LOC_FS_CREATE_WRITE_FILE = 1, + RPC_LOC_FS_APPEND_FILE = 2, + RPC_LOC_FS_DELETE_FILE = 3, + RPC_LOC_FS_READ_FILE = 4, + RPC_LOC_FS_MAX = 268435456 +}; + +struct rpc_loc_efs_data_s_type { + opaque filename[64]; + rpc_loc_fs_operation_e_type operation; + rpc_uint32 total_size; + opaque data_ptr<>; + rpc_uint32 part_len; + rpc_uint8 part; + rpc_uint8 total_parts; + rpc_uint32 reserved; +}; + +enum rpc_loc_error_estimate_config_e_type { + RPC_LOC_ERROR_ESTIMATE_CONFIG_SET = 1, + RPC_LOC_ERROR_ESTIMATE_CONFIG_CLEAR = 2, + RPC_LOC_ERROR_ESTIMATE_MAX = 268435456 +}; + +struct rpc_loc_apn_profiles_type { + rpc_uint32 srv_system_type; + rpc_uint32 pdp_type; + rpc_uint32 reserved; + opaque apn_name[100]; +}; + +enum rpc_loc_lock_e_type { + RPC_LOC_LOCK_NONE = 1, + RPC_LOC_LOCK_MI = 2, + RPC_LOC_LOCK_MT = 3, + RPC_LOC_LOCK_ALL = 4, + RPC_LOC_LOCK_MAX = 268435456 +}; + +typedef rpc_uint32 rpc_loc_nmea_sentence_type; + +typedef rpc_uint32 rpc_loc_assist_data_type; + +struct rpc_loc_assist_data_delete_s_type { + rpc_loc_assist_data_type type; + rpc_uint32 reserved[8]; +}; + +union rpc_loc_ioctl_data_u_type switch (rpc_loc_ioctl_e_type disc) { + case RPC_LOC_IOCTL_SET_FIX_CRITERIA: + rpc_loc_fix_criteria_s_type fix_criteria; + case RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE: + rpc_loc_user_verify_s_type user_verify_resp; + case RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA: + rpc_loc_predicted_orbits_data_s_type predicted_orbits_data; + case RPC_LOC_IOCTL_SET_PREDICTED_ORBITS_DATA_AUTO_DOWNLOAD: + rpc_loc_predicted_orbits_auto_download_config_s_type predicted_orbits_auto_download; + case RPC_LOC_IOCTL_INJECT_UTC_TIME: + rpc_loc_assist_data_time_s_type assistance_data_time; + case RPC_LOC_IOCTL_INJECT_POSITION: + rpc_loc_assist_data_pos_s_type assistance_data_position; + case RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS: + rpc_loc_server_open_status_s_type conn_open_status; + case RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS: + rpc_loc_server_close_status_s_type conn_close_status; + case RPC_LOC_IOCTL_SEND_WIPER_POSITION_REPORT: + rpc_loc_wiper_position_report_s_type wiper_pos; + case RPC_LOC_IOCTL_NOTIFY_WIPER_STATUS: + rpc_loc_wiper_status_e_type wiper_status; + case RPC_LOC_IOCTL_SET_ENGINE_LOCK: + rpc_loc_lock_e_type engine_lock; + case RPC_LOC_IOCTL_SET_SBAS_CONFIG: + rpc_boolean sbas_mode; + case RPC_LOC_IOCTL_SET_NMEA_TYPES: + rpc_loc_nmea_sentence_type nmea_types; + case RPC_LOC_IOCTL_SET_ON_DEMAND_LPM: + rpc_boolean on_demand_lpm; + case RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR: + case RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR: + case RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR: + case RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR: + rpc_loc_server_info_s_type server_addr; + case RPC_LOC_IOCTL_DELETE_ASSIST_DATA: + rpc_loc_assist_data_delete_s_type assist_data_delete; + case RPC_LOC_IOCTL_ACCESS_EFS_DATA: + rpc_loc_efs_data_s_type efs_data; + case RPC_LOC_IOCTL_ERROR_ESTIMATE_CONFIG: + rpc_loc_error_estimate_config_e_type error_estimate_config; + case RPC_LOC_IOCTL_SET_XTRA_T_SESSION_CONTROL: + rpc_uint8 xtra_t_session_control; + case RPC_LOC_IOCTL_SET_LBS_APN_PROFILE: + case RPC_LOC_IOCTL_SET_XTRA_APN_PROFILE: + rpc_loc_apn_profiles_type apn_profiles[6]; + case RPC_LOC_IOCTL_SET_DATA_ENABLE: + rpc_boolean data_enable; + case RPC_LOC_IOCTL_SET_SUPL_VERSION: + rpc_uint32 supl_version; + case RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS: + rpc_loc_server_multi_open_status_s_type multi_conn_open_status; + case RPC_LOC_IOCTL_RESERVED_CMD: + rpc_loc_reserved_payload_s_type reserved; + default: + void; +}; + +union rpc_loc_ioctl_callback_data_u_type switch (rpc_loc_ioctl_e_type disc) { + case RPC_LOC_IOCTL_GET_API_VERSION: + rpc_loc_api_version_s_type api_version; + case RPC_LOC_IOCTL_GET_FIX_CRITERIA: + rpc_loc_fix_criteria_s_type fix_criteria; + case RPC_LOC_IOCTL_GET_ENGINE_LOCK: + rpc_loc_lock_e_type engine_lock; + case RPC_LOC_IOCTL_GET_SBAS_CONFIG: + rpc_boolean sbas_mode; + case RPC_LOC_IOCTL_GET_NMEA_TYPES: + rpc_loc_nmea_sentence_type nmea_types; + case RPC_LOC_IOCTL_GET_ON_DEMAND_LPM: + rpc_boolean on_demand_lpm; + case RPC_LOC_IOCTL_GET_CDMA_PDE_SERVER_ADDR: + case RPC_LOC_IOCTL_GET_CDMA_MPC_SERVER_ADDR: + case RPC_LOC_IOCTL_GET_UMTS_SLP_SERVER_ADDR: + case RPC_LOC_IOCTL_GET_CUSTOM_PDE_SERVER_ADDR: + rpc_loc_server_info_s_type server_addr; + case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE: + rpc_loc_predicted_orbits_data_source_s_type predicted_orbits_data_source; + case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_VALIDITY: + rpc_loc_predicted_orbits_data_validity_report_s_type predicted_orbits_data_validity; + case RPC_LOC_IOCTL_GET_XTRA_T_SESSION_CONTROL: + rpc_uint8 xtra_t_session_control; + case RPC_LOC_IOCTL_GET_LBS_APN_PROFILE: + case RPC_LOC_IOCTL_GET_XTRA_APN_PROFILE: + rpc_loc_apn_profiles_type apn_profiles[6]; + case RPC_LOC_IOCTL_GET_SUPL_VERSION: + rpc_uint32 supl_version; + default: + void; +}; + +struct rpc_loc_ioctl_callback_s_type { + rpc_loc_ioctl_e_type type; + rpc_int32 status; + rpc_loc_ioctl_callback_data_u_type data; +}; + +union rpc_loc_event_payload_u_type switch (unsigned hyper disc) { + case RPC_LOC_EVENT_PARSED_POSITION_REPORT: + rpc_loc_parsed_position_s_type parsed_location_report; + case RPC_LOC_EVENT_SATELLITE_REPORT: + rpc_loc_gnss_info_s_type gnss_report; + case RPC_LOC_EVENT_NMEA_POSITION_REPORT: + case RPC_LOC_EVENT_NMEA_1HZ_REPORT: + rpc_loc_nmea_report_s_type nmea_report; + case RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST: + rpc_loc_ni_event_s_type ni_request; + case RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST: + rpc_loc_assist_data_request_s_type assist_data_request; + case RPC_LOC_EVENT_LOCATION_SERVER_REQUEST: + rpc_loc_server_request_s_type loc_server_request; + case RPC_LOC_EVENT_IOCTL_REPORT: + rpc_loc_ioctl_callback_s_type ioctl_report; + case RPC_LOC_EVENT_STATUS_REPORT: + rpc_loc_status_event_s_type status_report; + case RPC_LOC_EVENT_WPS_NEEDED_REQUEST: + rpc_loc_qwip_request_s_type qwip_request; + case RPC_LOC_EVENT_RESERVED: + rpc_loc_reserved_payload_s_type reserved; + default: + void; +}; + diff --git a/loc_api/libloc_api-rpc/Android.mk b/loc_api/libloc_api-rpc/Android.mk old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api-rpc/gen-1240/Makefile.xdr b/loc_api/libloc_api-rpc/gen-1240/Makefile.xdr old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api.xdr b/loc_api/libloc_api-rpc/gen-1240/loc_api.xdr old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api_cb.xdr b/loc_api/libloc_api-rpc/gen-1240/loc_api_cb.xdr old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api-rpc/gen-1240/loc_api_common.xdr b/loc_api/libloc_api-rpc/gen-1240/loc_api_common.xdr old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api-rpc/gen-3200/Makefile.xdr b/loc_api/libloc_api-rpc/gen-3200/Makefile.xdr old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api-rpc/gen-3200/loc_api.xdr b/loc_api/libloc_api-rpc/gen-3200/loc_api.xdr old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api-rpc/gen-3200/loc_api_cb.xdr b/loc_api/libloc_api-rpc/gen-3200/loc_api_cb.xdr old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api-rpc/gen-3200/loc_api_common.xdr b/loc_api/libloc_api-rpc/gen-3200/loc_api_common.xdr old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api/Android.mk b/loc_api/libloc_api/Android.mk old mode 100755 new mode 100644 diff --git a/loc_api/libloc_api/gps.c b/loc_api/libloc_api/gps.c index 5f6d8095..36bfcb63 100644 --- a/loc_api/libloc_api/gps.c +++ b/loc_api/libloc_api/gps.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009,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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api/loc_eng.cpp b/loc_api/libloc_api/loc_eng.cpp index 68ac002c..944326b0 100644 --- a/loc_api/libloc_api/loc_eng.cpp +++ b/loc_api/libloc_api/loc_eng.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009,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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -78,8 +78,8 @@ static int loc_eng_agps_data_conn_failed(); static int loc_eng_agps_set_server(AGpsType type, const char* hostname, int port); -static int32 loc_event_cb (rpc_loc_client_handle_type client_handle, - rpc_loc_event_mask_type loc_event, +static int32 loc_event_cb (rpc_loc_client_handle_type client_handle, + rpc_loc_event_mask_type loc_event, const rpc_loc_event_payload_u_type* loc_event_payload); static void loc_eng_report_position (const rpc_loc_parsed_position_s_type *location_report_ptr); static void loc_eng_report_sv (const rpc_loc_gnss_info_s_type *gnss_report_ptr); @@ -743,7 +743,7 @@ SIDE EFFECTS ===========================================================================*/ static void loc_eng_report_position (const rpc_loc_parsed_position_s_type *location_report_ptr) { - GpsLocation location; + UlpLocation location; LOGV ("loc_eng_report_position: location report, valid mask = 0x%x, sess status = %d\n", (uint32) location_report_ptr->valid_mask, location_report_ptr->session_status); @@ -831,7 +831,7 @@ static void loc_eng_report_sv (const rpc_loc_gnss_info_s_type *gnss_report_ptr) { GpsSvStatus SvStatus; int num_svs_max, i; - const rpc_loc_sv_info_s_type *sv_info_ptr; + const rpc_loc_sv_info_s_type *sv_info_ptr; LOGV ("loc_eng_report_sv: valid_mask = 0x%x, num of sv = %d\n", (uint32) gnss_report_ptr->valid_mask, @@ -1273,7 +1273,7 @@ static void loc_eng_process_atl_deferred_action (int flags) LOGV("loc_eng_process_atl_deferred_action, agps_status = %d\n", loc_eng_data.agps_status); memset (&ioctl_data, 0, sizeof (rpc_loc_ioctl_data_u_type)); - + if (flags & DEFERRED_ACTION_AGPS_DATA_CLOSED) { ioctl_data.disc = RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS; diff --git a/loc_api/libloc_api/loc_eng.h b/loc_api/libloc_api/loc_eng.h index 553a97e0..b8553316 100644 --- a/loc_api/libloc_api/loc_eng.h +++ b/loc_api/libloc_api/loc_eng.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009,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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api/loc_eng_ioctl.cpp b/loc_api/libloc_api/loc_eng_ioctl.cpp index a43d8cca..dc7b2c11 100644 --- a/loc_api/libloc_api/loc_eng_ioctl.cpp +++ b/loc_api/libloc_api/loc_eng_ioctl.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009,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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api/loc_eng_ioctl.h b/loc_api/libloc_api/loc_eng_ioctl.h index eb0c201a..b8191256 100644 --- a/loc_api/libloc_api/loc_eng_ioctl.h +++ b/loc_api/libloc_api/loc_eng_ioctl.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009,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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api/loc_eng_ni.cpp b/loc_api/libloc_api/loc_eng_ni.cpp index 3df0af14..11d7abac 100644 --- a/loc_api/libloc_api/loc_eng_ni.cpp +++ b/loc_api/libloc_api/loc_eng_ni.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009,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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api/loc_eng_ni.h b/loc_api/libloc_api/loc_eng_ni.h index 193b9f85..cfd2ab18 100644 --- a/loc_api/libloc_api/loc_eng_ni.h +++ b/loc_api/libloc_api/loc_eng_ni.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009,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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api/loc_eng_xtra.cpp b/loc_api/libloc_api/loc_eng_xtra.cpp index 1ec3bf07..0c3e476a 100644 --- a/loc_api/libloc_api/loc_eng_xtra.cpp +++ b/loc_api/libloc_api/loc_eng_xtra.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009,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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api/loc_eng_xtra.h b/loc_api/libloc_api/loc_eng_xtra.h index 82778ae5..a72b1528 100644 --- a/loc_api/libloc_api/loc_eng_xtra.h +++ b/loc_api/libloc_api/loc_eng_xtra.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009,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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api_50001/Android.mk b/loc_api/libloc_api_50001/Android.mk old mode 100755 new mode 100644 index 4af7c1a5..9cd3b197 --- a/loc_api/libloc_api_50001/Android.mk +++ b/loc_api/libloc_api_50001/Android.mk @@ -1,12 +1,6 @@ ifneq ($(BUILD_TINY_ANDROID),true) #Compile this library only for builds with the latest modem image -BIT_ENABLED_BOARD_PLATFORM_LIST := msm7630_fusion -BIT_ENABLED_BOARD_PLATFORM_LIST += msm8660 -ifeq ($(call is-board-platform-in-list,$(BIT_ENABLED_BOARD_PLATFORM_LIST)),true) -FEATURE_GNSS_BIT_API := true -endif # is-board-platform-in-list - LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) @@ -31,6 +25,14 @@ LOCAL_CFLAGS += \ -fno-short-enums \ -D_ANDROID_ +ifeq ($(FEATURE_IPV6), true) +LOCAL_CFLAGS += -DFEATURE_IPV6 +endif #FEATURE_IPV6 + +ifeq ($(FEATURE_DELEXT), true) +LOCAL_CFLAGS += -DFEATURE_DELEXT +endif #FEATURE_DELEXT + LOCAL_C_INCLUDES:= \ $(TARGET_OUT_HEADERS)/gps.utils @@ -44,7 +46,8 @@ LOCAL_COPY_HEADERS:= \ loc_eng_agps.h \ loc_eng_msg.h \ loc_eng_msg_id.h \ - loc_eng_log.h + loc_eng_log.h \ + loc_ulp.h LOCAL_PRELINK_MODULE := false @@ -61,19 +64,15 @@ LOCAL_SHARED_LIBRARIES := \ libcutils \ liblog \ libloc_adapter \ - libgps.utils \ - libdl + libgps.utils LOCAL_SRC_FILES += \ loc_eng.cpp \ loc_eng_agps.cpp \ loc_eng_xtra.cpp \ loc_eng_ni.cpp \ - loc_eng_log.cpp - -ifeq ($(FEATURE_GNSS_BIT_API), true) -LOCAL_CFLAGS += -DFEATURE_GNSS_BIT_API -endif # FEATURE_GNSS_BIT_API + loc_eng_log.cpp \ + loc_eng_nmea.cpp LOCAL_SRC_FILES += \ loc_eng_dmn_conn.cpp \ @@ -86,6 +85,10 @@ LOCAL_CFLAGS += \ -fno-short-enums \ -D_ANDROID_ +ifeq ($(FEATURE_IPV6), true) +LOCAL_CFLAGS += -DFEATURE_IPV6 +endif #FEATURE_IPV6 + LOCAL_C_INCLUDES:= \ $(TARGET_OUT_HEADERS)/gps.utils \ hardware/qcom/gps/loc_api/ulp/inc @@ -118,9 +121,14 @@ LOCAL_CFLAGS += \ -fno-short-enums \ -D_ANDROID_ \ +ifeq ($(FEATURE_IPV6), true) +LOCAL_CFLAGS += -DFEATURE_IPV6 +endif #FEATURE_IPV6 + ## Includes LOCAL_C_INCLUDES:= \ - $(TARGET_OUT_HEADERS)/gps.utils + $(TARGET_OUT_HEADERS)/gps.utils \ + hardware/qcom/gps/loc_api/ulp/inc LOCAL_PRELINK_MODULE := false LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw diff --git a/loc_api/libloc_api_50001/LocApiAdapter.cpp b/loc_api/libloc_api_50001/LocApiAdapter.cpp index a6a1ed94..8e5b1ee1 100644 --- a/loc_api/libloc_api_50001/LocApiAdapter.cpp +++ b/loc_api/libloc_api_50001/LocApiAdapter.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -45,11 +45,13 @@ LocEng::LocEng(void* caller, gps_acquire_wakelock acqwl, gps_release_wakelock relwl, loc_msg_sender msgSender, + loc_msg_sender msgUlpSender, loc_ext_parser posParser, loc_ext_parser svParser) : owner(caller), eventMask(emask), acquireWakelock(acqwl), releaseWakeLock(relwl), sendMsge(msgSender), + sendUlpMsg(msgUlpSender), extPosInfo(NULL == posParser ? noProc : posParser), extSvInfo(NULL == svParser ? noProc : svParser) { @@ -57,7 +59,7 @@ LocEng::LocEng(void* caller, } LocApiAdapter::LocApiAdapter(LocEng &locEng) : - locEngHandle(locEng) + locEngHandle(locEng), fixCriteria(), navigating(false) { LOC_LOGD("LocApiAdapter created"); } @@ -75,21 +77,14 @@ LocApiAdapter* LocApiAdapter::getLocApiAdapter(LocEng &locEng) handle = dlopen ("libloc_api_v02.so", RTLD_NOW); if (!handle) { - LOC_LOGI("%s: dlopen(libloc_api_v02.so) failed, trying to load libloc_api-rpc-qc.so", __FUNCTION__); handle = dlopen ("libloc_api-rpc-qc.so", RTLD_NOW); } - else - LOC_LOGE("%s: dlopen(libloc_api_v02.so) succeeded.", __FUNCTION__); if (!handle) { - LOC_LOGI("%s: dlopen(libloc_api-rpc-qc.so) failed, constructing LocApiAdapter", __FUNCTION__); adapter = new LocApiAdapter(locEng); } else { getLocApiAdapter_t* getHandle = (getLocApiAdapter_t*)dlsym(handle, "getLocApiAdapter"); - if (!getHandle) { - LOC_LOGE("%s: dlsym(getLocApiAdapter) failed", __FUNCTION__); - return NULL; - } + adapter = (*getHandle)(locEng); } @@ -141,21 +136,36 @@ int LocApiAdapter::decodeAddress(char *addr_string, int string_size, return idxOutput; } -void LocApiAdapter::reportPosition(GpsLocation &location, +void LocApiAdapter::reportPosition(UlpLocation &location, + GpsLocationExtended &locationExtended, void* locationExt, - enum loc_sess_status status) + enum loc_sess_status status, + LocPosTechMask loc_technology_mask ) { loc_eng_msg_report_position *msg(new loc_eng_msg_report_position(locEngHandle.owner, location, + locationExtended, locationExt, - status)); - locEngHandle.sendMsge(locEngHandle.owner, msg); + status, + loc_technology_mask)); + if (locEngHandle.sendUlpMsg) { + locEngHandle.sendUlpMsg(locEngHandle.owner, msg); + } else { + locEngHandle.sendMsge(locEngHandle.owner, msg); + } } -void LocApiAdapter::reportSv(GpsSvStatus &svStatus, void* svExt) +void LocApiAdapter::reportSv(GpsSvStatus &svStatus, GpsLocationExtended &locationExtended, void* svExt) { - loc_eng_msg_report_sv *msg(new loc_eng_msg_report_sv(locEngHandle.owner, svStatus, svExt)); - locEngHandle.sendMsge(locEngHandle.owner, msg); + loc_eng_msg_report_sv *msg(new loc_eng_msg_report_sv(locEngHandle.owner, svStatus, locationExtended, svExt)); + + //We want to send SV info to ULP to help it in determining GNSS signal strength + //ULP will forward the SV reports to HAL without any modifications + if (locEngHandle.sendUlpMsg) { + locEngHandle.sendUlpMsg(locEngHandle.owner, msg); + } else { + locEngHandle.sendMsge(locEngHandle.owner, msg); + } } void LocApiAdapter::reportStatus(GpsStatusValue status) @@ -192,9 +202,9 @@ void LocApiAdapter::requestXtraData() void LocApiAdapter::requestTime() { - LOC_LOGD("loc_event_cb: XTRA time download request... not supported"); - // loc_eng_msg *msg(new loc_eng_msg(locEngHandle.owner, LOC_ENG_MSG_REQUEST_TIME)); - // locEngHandle.sendMsge(locEngHandle.owner, msg); + LOC_LOGD("loc_event_cb: XTRA time download request"); + loc_eng_msg *msg(new loc_eng_msg(locEngHandle.owner, LOC_ENG_MSG_REQUEST_TIME)); + locEngHandle.sendMsge(locEngHandle.owner, msg); } void LocApiAdapter::requestLocation() diff --git a/loc_api/libloc_api_50001/LocApiAdapter.h b/loc_api/libloc_api_50001/LocApiAdapter.h index 5e8a1da8..65fac91a 100644 --- a/loc_api/libloc_api_50001/LocApiAdapter.h +++ b/loc_api/libloc_api_50001/LocApiAdapter.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -32,9 +32,13 @@ #include #include #include +#include #include +#include -#define MIN_POSSIBLE_FIX_INTERVAL 1000 /* msec */ +#define MAX_APN_LEN 100 +#define MAX_URL_LEN 256 +#define smaller_of(a, b) (((a) > (b)) ? (b) : (a)) enum loc_api_adapter_err { LOC_API_ADAPTER_ERR_SUCCESS = 0, @@ -85,6 +89,7 @@ struct LocEng { const gps_acquire_wakelock acquireWakelock; const gps_release_wakelock releaseWakeLock; const loc_msg_sender sendMsge; + const loc_msg_sender sendUlpMsg; const loc_ext_parser extPosInfo; const loc_ext_parser extSvInfo; @@ -93,6 +98,7 @@ struct LocEng { gps_acquire_wakelock acqwl, gps_release_wakelock relwl, loc_msg_sender msgSender, + loc_msg_sender msgUlpSender, loc_ext_parser posParser, loc_ext_parser svParser); }; @@ -100,6 +106,8 @@ struct LocEng { class LocApiAdapter { protected: const LocEng locEngHandle; + LocPosMode fixCriteria; + bool navigating; LocApiAdapter(LocEng &locEng); @@ -114,10 +122,14 @@ public: static int decodeAddress(char *addr_string, int string_size, const char *data, int data_size); - void reportPosition(GpsLocation &location, + void reportPosition(UlpLocation &location, + GpsLocationExtended &locationExtended, void* locationExt, - enum loc_sess_status status); - void reportSv(GpsSvStatus &svStatus, void* svExt); + enum loc_sess_status status, + LocPosTechMask loc_technology_mask = LOC_POS_TECH_MASK_DEFAULT); + void reportSv(GpsSvStatus &svStatus, + GpsLocationExtended &locationExtended, + void* svExt); void reportStatus(GpsStatusValue status); void reportNmea(const char* nmea, int length); void reportAgpsStatus(AGpsStatus &agpsStatus); @@ -159,7 +171,7 @@ public: inline virtual enum loc_api_adapter_err setXtraData(char* data, int length) {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;} -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 inline virtual enum loc_api_adapter_err atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bear, AGpsType agpsType) {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;} @@ -172,9 +184,7 @@ public: atlCloseStatus(int handle, int is_succ) {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;} inline virtual enum loc_api_adapter_err - setPositionMode(LocPositionMode mode, GpsPositionRecurrence recurrence, - uint32_t min_interval, uint32_t preferred_accuracy, - uint32_t preferred_time) + setPositionMode(const LocPosMode *posMode) {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;} inline virtual enum loc_api_adapter_err setServer(const char* url, int len) @@ -189,16 +199,37 @@ public: inline virtual enum loc_api_adapter_err setSUPLVersion(uint32_t version) {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;} + inline virtual enum loc_api_adapter_err + setLPPConfig(uint32_t profile) + {LOC_LOGW("%s: default implementation invoked", __func__); + return LOC_API_ADAPTER_ERR_SUCCESS; } inline virtual enum loc_api_adapter_err setSensorControlConfig(int sensorUsage) {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;} inline virtual enum loc_api_adapter_err - setSensorProperties(float gyroBiasVarianceRandomWalk) + 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) {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;} inline virtual enum loc_api_adapter_err setSensorPerfControlConfig(int controlMode, int accelSamplesPerBatch, int accelBatchesPerSec, - int gyroSamplesPerBatch, int gyroBatchesPerSec) + int gyroSamplesPerBatch, int gyroBatchesPerSec, + int accelSamplesPerBatchHigh, int accelBatchesPerSecHigh, + int gyroSamplesPerBatchHigh, int gyroBatchesPerSecHigh, int algorithmConfig) {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;} + inline virtual enum loc_api_adapter_err + setExtPowerConfig(int isBatteryCharging) + {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;} + inline virtual enum loc_api_adapter_err + setAGLONASSProtocol(unsigned long aGlonassProtocol) + {LOC_LOGW("%s: default implementation invoked", __func__); return LOC_API_ADAPTER_ERR_SUCCESS;} + + inline const LocPosMode& getPositionMode() const {return fixCriteria;} + + inline bool isInSession() { return navigating; } + inline virtual void setInSession(bool inSession) { navigating = inSession; } }; extern "C" LocApiAdapter* getLocApiAdapter(LocEng &locEng); diff --git a/loc_api/libloc_api_50001/gps.c b/loc_api/libloc_api_50001/gps.c index c9e4999b..82bc7420 100644 --- a/loc_api/libloc_api_50001/gps.c +++ b/loc_api/libloc_api_50001/gps.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api_50001/loc.cpp b/loc_api/libloc_api_50001/loc.cpp index 154b42e6..18d0fe05 100644 --- a/loc_api/libloc_api_50001/loc.cpp +++ b/loc_api/libloc_api_50001/loc.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2013, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -31,16 +31,28 @@ #define LOG_TAG "LocSvc_afw" #include -#include +#include #include +#include #include #include #include +#include +#include +#include +#include +#include +#include +#include + +//Globals defns +static const ulpInterface * loc_eng_ulp_inf = NULL; +static const ulpInterface * loc_eng_get_ulp_inf(void); static gps_location_callback gps_loc_cb = NULL; static gps_sv_status_callback gps_sv_cb = NULL; -static void loc_cb(GpsLocation* location, void* locExt); +static void loc_cb(UlpLocation* location, void* locExt); static void sv_cb(GpsSvStatus* sv_status, void* svExt); static const GpsGeofencingInterface* get_geofence_interface(void); @@ -56,10 +68,19 @@ static void loc_delete_aiding_data(GpsAidingData f); static int loc_set_position_mode(GpsPositionMode mode, GpsPositionRecurrence recurrence, uint32_t min_interval, uint32_t preferred_accuracy, uint32_t preferred_time); + +//ULP/Hybrid provider Function definitions +static int loc_ulp_network_init(UlpNetworkLocationCallbacks *callbacks); +static int loc_ulp_send_network_position(UlpNetworkPositionReport *position_report); +static int loc_ulp_phone_context_init(UlpPhoneContextCallbacks *callback); +static int loc_ulp_phone_context_settings_update(UlpPhoneContextSettings *settings); +static int loc_ulp_engine_update_criteria(UlpLocationCriteria criteria); static const void* loc_get_extension(const char* name); -#ifdef QCOM_FEATURE_ULP -static int loc_update_criteria(UlpLocationCriteria criteria); -#endif +static ulp_location_callback ulp_loc_cb = NULL; +static int loc_ulp_engine_init(UlpEngineCallbacks* callbacks); +static int loc_ulp_engine_start(); +static int loc_ulp_engine_stop(); + // Defines the GpsInterface in gps.h static const GpsInterface sLocEngInterface = @@ -74,14 +95,11 @@ static const GpsInterface sLocEngInterface = loc_delete_aiding_data, loc_set_position_mode, loc_get_extension -#ifdef QCOM_FEATURE_ULP - ,loc_update_criteria -#endif }; // Function declarations for sLocEngAGpsInterface static void loc_agps_init(AGpsCallbacks* callbacks); -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 static int loc_agps_open(AGpsType agpsType, const char* apn, AGpsBearerType bearerType); static int loc_agps_closed(AGpsType agpsType); @@ -141,7 +159,15 @@ static const AGpsRilInterface sLocEngAGpsRilInterface = loc_agps_ril_update_network_availability }; -#ifdef QCOM_FEATURE_ULP +static const UlpEngineInterface sLocEngUlpEngInterface = +{ + sizeof(UlpEngineInterface), + loc_ulp_engine_init, + loc_ulp_engine_update_criteria, + loc_ulp_engine_start, + loc_ulp_engine_stop +}; + static bool loc_inject_raw_command(char* command, int length); static const InjectRawCmdInterface sLocEngInjectRawCmdInterface = @@ -149,9 +175,23 @@ static const InjectRawCmdInterface sLocEngInjectRawCmdInterface = sizeof(InjectRawCmdInterface), loc_inject_raw_command }; -#endif + +//ULP/Hybrid provider interfaces +static const UlpNetworkInterface sUlpNetworkInterface = +{ + sizeof(UlpNetworkInterface), + loc_ulp_network_init, + loc_ulp_send_network_position +}; +static const UlpPhoneContextInterface sLocEngUlpPhoneContextInterface = +{ + sizeof(UlpPhoneContextInterface), + loc_ulp_phone_context_init, + loc_ulp_phone_context_settings_update +}; static loc_eng_data_s_type loc_afw_data; +static UlpCallbacks ulp_cb_data; static int gss_fd = 0; /*=========================================================================== @@ -195,20 +235,43 @@ const GpsInterface* gps_get_hardware_interface () // for gps.c extern "C" const GpsInterface* get_gps_interface() { - char baseband[PROPERTY_VALUE_MAX]; - property_get("ro.baseband", baseband, "msm"); - if (strcmp(baseband,"apq") == 0) - { + targetEnumType target = TARGET_OTHER; + loc_eng_read_config(); + + //We load up libulp module at this point itself + loc_eng_ulp_inf = loc_eng_get_ulp_inf(); + + target = get_target(); + LOC_LOGD("Target name check returned %s", loc_get_target_name(target)); + //APQ8064 and APQ8030 + if((target == TARGET_APQ8064_STANDALONE) || (target == TARGET_APQ8030_STANDALONE)) { gps_conf.CAPABILITIES &= ~(GPS_CAPABILITY_MSA | GPS_CAPABILITY_MSB); gss_fd = open("/dev/gss", O_RDONLY); - if (gss_fd < 0) { + if (gss_fd < 0) LOC_LOGE("GSS open failed: %s\n", strerror(errno)); + else { + LOC_LOGD("GSS open success! CAPABILITIES %0lx\n", gps_conf.CAPABILITIES); } - LOC_LOGD("GSS open success! CAPABILITIES %0x\n", gps_conf.CAPABILITIES); } - + //MPQ8064 + else if(target == TARGET_MPQ8064) { + LOC_LOGE("No GPS HW on this target (MPQ8064). Not returning interface"); + return NULL; + } return &sLocEngInterface; } + +static void loc_free_msg(void* msg) +{ + delete (loc_eng_msg*)msg; +} + +void loc_ulp_msg_sender(void* loc_eng_data_p, void* msg) +{ + LocEngContext* loc_eng_context = (LocEngContext*)((loc_eng_data_s_type*)loc_eng_data_p)->context; + msg_q_snd((void*)loc_eng_context->ulp_q, msg, loc_free_msg); +} + /*=========================================================================== FUNCTION loc_init @@ -228,7 +291,13 @@ SIDE EFFECTS ===========================================================================*/ static int loc_init(GpsCallbacks* callbacks) { + int retVal = -1; ENTRY_LOG(); + if(callbacks == NULL) { + LOC_LOGE("loc_init failed. cb = NULL\n"); + EXIT_LOG(%d, retVal); + return retVal; + } LOC_API_ADAPTER_EVENT_MASK_T event = LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT | LOC_API_ADAPTER_BIT_SATELLITE_REPORT | @@ -247,14 +316,36 @@ static int loc_init(GpsCallbacks* callbacks) callbacks->release_wakelock_cb, /* release_wakelock_cb */ callbacks->create_thread_cb, /* create_thread_cb */ NULL, /* location_ext_parser */ - NULL /* sv_ext_parser */}; + NULL, /* sv_ext_parser */ + callbacks->request_utc_time_cb /* request_utc_time_cb */}; gps_loc_cb = callbacks->location_cb; gps_sv_cb = callbacks->sv_status_cb; - int ret_val = loc_eng_init(loc_afw_data, &clientCallbacks, event); + if (loc_eng_ulp_inf == NULL) + retVal = loc_eng_init(loc_afw_data, &clientCallbacks, event, + NULL); + else + retVal = loc_eng_init(loc_afw_data, &clientCallbacks, event, + loc_ulp_msg_sender); - EXIT_LOG(%d, ret_val); - return ret_val; + if (ulp_cb_data.phone_context_cb) { + //ULP initilization already occurred so redo intializations here + //to restore callback table + loc_eng_ulp_phone_context_init(loc_afw_data, ulp_cb_data.phone_context_cb); + } + + if (ulp_cb_data.network_location_cb) { + loc_eng_ulp_network_init(loc_afw_data, ulp_cb_data.network_location_cb); + } + + + int ret_val1 = loc_eng_ulp_init(loc_afw_data, loc_eng_ulp_inf); + //Initialize the cached min_interval + loc_afw_data.min_interval_cached = ULP_MIN_INTERVAL_INVALID; + LOC_LOGD("loc_eng_ulp_init returned %d\n",ret_val1); + + EXIT_LOG(%d, retVal); + return retVal; } /*=========================================================================== @@ -279,6 +370,15 @@ static void loc_cleanup() loc_eng_cleanup(loc_afw_data); gps_loc_cb = NULL; gps_sv_cb = NULL; + + /* + * if (get_target() == TARGET_NAME_APQ8064_STANDALONE) + * { + * close(gss_fd); + * LOC_LOGD("GSS shutdown.\n"); + * } + */ + EXIT_LOG(%s, VOID_RET); } @@ -326,8 +426,27 @@ SIDE EFFECTS static int loc_stop() { ENTRY_LOG(); - int ret_val = loc_eng_stop(loc_afw_data); - + int ret_val = -1; + if (loc_afw_data.ulp_initialized) { + //ULP initialized so we need to simulate REMOVE_CRITERIA for + //last client to libulp and we dont need to send loc_eng_stop + UlpLocationCriteria native_criteria; + native_criteria.valid_mask = (ULP_CRITERIA_HAS_ACTION | ULP_CRITERIA_HAS_PROVIDER_SOURCE | ULP_CRITERIA_HAS_RECURRENCE_TYPE | + ULP_CRITERIA_HAS_MIN_INTERVAL); + native_criteria.provider_source = ULP_PROVIDER_SOURCE_GNSS; + native_criteria.min_distance = 0; //This is not used by ULP engine so leaving it 0 for now + native_criteria.recurrence_type = loc_afw_data.recurrence_type_cached; + loc_afw_data.recurrence_type_cached = ULP_LOC_RECURRENCE_PERIODIC; + //For a GPS client horizontal_accuracy & power_consumption are irrelevant + native_criteria.preferred_horizontal_accuracy = ULP_HORZ_ACCURACY_DONT_CARE; + native_criteria.preferred_power_consumption = ULP_POWER_REQ_DONT_CARE; + native_criteria.action = ULP_REMOVE_CRITERIA; + native_criteria.min_interval = loc_afw_data.min_interval_cached; + loc_afw_data.min_interval_cached = ULP_MIN_INTERVAL_INVALID; + ret_val = loc_eng_update_criteria(loc_afw_data, native_criteria); + } else { + ret_val = loc_eng_stop(loc_afw_data); + } EXIT_LOG(%d, ret_val); return ret_val; } @@ -355,21 +474,46 @@ static int loc_set_position_mode(GpsPositionMode mode, uint32_t preferred_time) { ENTRY_LOG(); - LocPositionMode locMode; - switch (mode) { - case GPS_POSITION_MODE_MS_BASED: - locMode = LOC_POSITION_MODE_MS_BASED; - break; - case GPS_POSITION_MODE_MS_ASSISTED: - locMode = LOC_POSITION_MODE_MS_ASSISTED; - break; - default: - locMode = LOC_POSITION_MODE_STANDALONE; - break; + int ret_val = -1; + if (!loc_afw_data.ulp_initialized) { + LocPositionMode locMode; + switch (mode) { + case GPS_POSITION_MODE_MS_BASED: + locMode = LOC_POSITION_MODE_MS_BASED; + break; + case GPS_POSITION_MODE_MS_ASSISTED: + locMode = LOC_POSITION_MODE_MS_ASSISTED; + break; + default: + locMode = LOC_POSITION_MODE_STANDALONE; + break; + } + + LocPosMode params(locMode, recurrence, min_interval, + preferred_accuracy, preferred_time, NULL, NULL); + ret_val = loc_eng_set_position_mode(loc_afw_data, params); + } else { + //ULP initialized so suppress set_position_mode updates to loc_eng + UlpLocationCriteria native_criteria; + native_criteria.valid_mask = (ULP_CRITERIA_HAS_ACTION | ULP_CRITERIA_HAS_PROVIDER_SOURCE | ULP_CRITERIA_HAS_RECURRENCE_TYPE | + ULP_CRITERIA_HAS_MIN_INTERVAL); + native_criteria.provider_source = ULP_PROVIDER_SOURCE_GNSS; + native_criteria.min_distance = 0; //This is not used by ULP engine so leaving it 0 for now + + if (LOC_POSITION_MODE_MS_ASSISTED == mode) + native_criteria.recurrence_type = ULP_LOC_RECURRENCE_SINGLE; + else + native_criteria.recurrence_type = ULP_LOC_RECURRENCE_PERIODIC; + + //For a GPS client horizontal_accuracy & power_consumption are irrelevant + native_criteria.preferred_horizontal_accuracy = ULP_HORZ_ACCURACY_DONT_CARE; + native_criteria.preferred_power_consumption = ULP_POWER_REQ_DONT_CARE; + native_criteria.action = ULP_ADD_CRITERIA; + native_criteria.min_interval = min_interval; + loc_afw_data.min_interval_cached = min_interval; //cache a copy + loc_afw_data.recurrence_type_cached = native_criteria.recurrence_type; //cache a copy + ret_val = loc_eng_update_criteria(loc_afw_data, native_criteria); } - int ret_val = loc_eng_set_position_mode(loc_afw_data, locMode, - recurrence, min_interval, - preferred_accuracy, preferred_time); EXIT_LOG(%d, ret_val); return ret_val; @@ -395,7 +539,6 @@ static int loc_inject_time(GpsUtcTime time, int64_t timeReference, int uncertain { ENTRY_LOG(); int ret_val = loc_eng_inject_time(loc_afw_data, time, timeReference, uncertainty); - EXIT_LOG(%d, ret_val); return ret_val; } @@ -419,9 +562,32 @@ SIDE EFFECTS ===========================================================================*/ static int loc_inject_location(double latitude, double longitude, float accuracy) { + static bool initialized = false; + static bool enable_cpi = true; ENTRY_LOG(); - int ret_val = loc_eng_inject_location(loc_afw_data, latitude, longitude, accuracy); + if(!initialized) + { + char value[PROPERTY_VALUE_MAX]; + memset(value, 0, sizeof(value)); + (void)property_get("persist.gps.qc_nlp_in_use", value, "0"); + if(0 == strcmp(value, "1")) + { + enable_cpi = false; + LOC_LOGI("GPS HAL coarse position injection disabled"); + } + else + { + LOC_LOGI("GPS HAL coarse position injection enabled"); + } + initialized = true; + } + + int ret_val = 0; + if(enable_cpi) + { + ret_val = loc_eng_inject_location(loc_afw_data, latitude, longitude, accuracy); + } EXIT_LOG(%d, ret_val); return ret_val; } @@ -455,7 +621,6 @@ static void loc_delete_aiding_data(GpsAidingData f) EXIT_LOG(%s, VOID_RET); } -#ifdef QCOM_FEATURE_ULP /*=========================================================================== FUNCTION loc_update_criteria @@ -472,7 +637,7 @@ SIDE EFFECTS N/A ===========================================================================*/ -static int loc_update_criteria(UlpLocationCriteria criteria) +int loc_ulp_engine_update_criteria(UlpLocationCriteria criteria) { ENTRY_LOG(); int ret_val = loc_eng_update_criteria(loc_afw_data, criteria); @@ -480,7 +645,6 @@ static int loc_update_criteria(UlpLocationCriteria criteria) EXIT_LOG(%d, ret_val); return ret_val; } -#endif const GpsGeofencingInterface* get_geofence_interface(void) { @@ -532,11 +696,12 @@ SIDE EFFECTS N/A ===========================================================================*/ -static const void* loc_get_extension(const char* name) +const void* loc_get_extension(const char* name) { ENTRY_LOG(); const void* ret_val = NULL; + LOC_LOGD("%s:%d] For Interface = %s\n",__func__, __LINE__, name); if (strcmp(name, GPS_XTRA_INTERFACE) == 0) { ret_val = &sLocEngXTRAInterface; @@ -554,24 +719,38 @@ static const void* loc_get_extension(const char* name) else if (strcmp(name, AGPS_RIL_INTERFACE) == 0) { - ret_val = &sLocEngAGpsRilInterface; + char baseband[PROPERTY_VALUE_MAX]; + property_get("ro.baseband", baseband, "msm"); + if (strcmp(baseband, "csfb") == 0) + { + ret_val = &sLocEngAGpsRilInterface; + } } - - else if (strcmp(name, GPS_GEOFENCING_INTERFACE) == 0) + else if (strcmp(name, ULP_ENGINE_INTERFACE) == 0) { - ret_val = get_geofence_interface(); + ret_val = &sLocEngUlpEngInterface; } -#ifdef QCOM_FEATURE_ULP else if (strcmp(name, ULP_RAW_CMD_INTERFACE) == 0) { ret_val = &sLocEngInjectRawCmdInterface; } -#endif + else if(strcmp(name, ULP_PHONE_CONTEXT_INTERFACE) == 0) + { + ret_val = &sLocEngUlpPhoneContextInterface; + } + else if(strcmp(name, ULP_NETWORK_INTERFACE) == 0) + { + ret_val = &sUlpNetworkInterface; + } + else if (strcmp(name, GPS_GEOFENCING_INTERFACE) == 0) + { + ret_val = get_geofence_interface(); + } + else { LOC_LOGE ("get_extension: Invalid interface passed in\n"); } - EXIT_LOG(%p, ret_val); return ret_val; } @@ -616,7 +795,7 @@ SIDE EFFECTS N/A ===========================================================================*/ -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 static int loc_agps_open(AGpsType agpsType, const char* apn, AGpsBearerType bearerType) { @@ -654,7 +833,7 @@ SIDE EFFECTS N/A ===========================================================================*/ -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 static int loc_agps_closed(AGpsType agpsType) { ENTRY_LOG(); @@ -691,7 +870,7 @@ SIDE EFFECTS N/A ===========================================================================*/ -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 int loc_agps_open_failed(AGpsType agpsType) { ENTRY_LOG(); @@ -875,7 +1054,6 @@ static void loc_agps_ril_update_network_availability(int available, const char* EXIT_LOG(%s, VOID_RET); } -#ifdef QCOM_FEATURE_ULP /*=========================================================================== FUNCTION loc_inject_raw_command @@ -899,19 +1077,21 @@ static bool loc_inject_raw_command(char* command, int length) EXIT_LOG(%s, loc_logger_boolStr[ret_val!=0]); return ret_val; } -#endif - -static void loc_cb(GpsLocation* location, void* locExt) +static void loc_cb(UlpLocation* location, void* locExt) { ENTRY_LOG(); - if (NULL != gps_loc_cb && NULL != location) { -#ifdef QCOM_FEATURE_ULP + if (NULL != location) { CALLBACK_LOG_CALLFLOW("location_cb - from", %d, location->position_source); -#else - CALLBACK_LOG_CALLFLOW("location_cb - at", %llu, location->timestamp); -#endif - gps_loc_cb(location); + if (ULP_LOCATION_IS_FROM_GNSS == location->position_source ) { + if (NULL != gps_loc_cb) { + gps_loc_cb(&location->gpsLocation); + } + } else { + if (NULL != ulp_loc_cb) { + ulp_loc_cb(location); + } + } } EXIT_LOG(%s, VOID_RET); } @@ -925,3 +1105,219 @@ static void sv_cb(GpsSvStatus* sv_status, void* svExt) } EXIT_LOG(%s, VOID_RET); } + +/*=========================================================================== +FUNCTION loc_eng_get_ulp_inf + +DESCRIPTION + This function checks if ULP is enabled, and loads the libulp2.so and + returns its interface + +DEPENDENCIES + None + +RETURN VALUE + interface pointer to libulp: no error + NULL: errors + +SIDE EFFECTS + N/A + +===========================================================================*/ +const ulpInterface * loc_eng_get_ulp_inf(void) +{ + ENTRY_LOG(); + void *handle; + const char *error; + get_ulp_interface* get_ulp_inf; + const ulpInterface* loc_eng_ulpInf = NULL; + + dlerror(); /* Clear any existing error */ + + handle = dlopen ("libulp2.so", RTLD_NOW); + + if (!handle) + { + if ((error = dlerror()) != NULL) { + LOC_LOGE ("%s, dlopen for libulp.so failed, error = %s\n", __func__, error); + } + goto exit; + } + dlerror(); /* Clear any existing error */ + get_ulp_inf = (get_ulp_interface*) dlsym(handle, "ulp_get_interface"); + if ((error = dlerror()) != NULL) { + LOC_LOGE ("%s, dlsym for ulpInterface failed, error = %s\n", __func__, error); + goto exit; + } + + // Initialize the ULP interface + loc_eng_ulpInf = get_ulp_inf(); + +exit: + EXIT_LOG(%d, loc_eng_ulpInf == NULL); + return loc_eng_ulpInf; +} + +/*=========================================================================== +FUNCTION loc_ulp_network_init + +DESCRIPTION + Initialize the ULP network interface. + +DEPENDENCIES + NONE + +RETURN VALUE + 0 + +SIDE EFFECTS + N/A + +===========================================================================*/ +static int loc_ulp_phone_context_init(UlpPhoneContextCallbacks *callbacks) +{ + ENTRY_LOG(); + int ret_val = -1; + if (loc_afw_data.context) { + ret_val = loc_eng_ulp_phone_context_init(loc_afw_data, callbacks); + } else + { + ulp_cb_data.phone_context_cb = callbacks; + } + EXIT_LOG(%d, ret_val); + return ret_val; +} +/*=========================================================================== +FUNCTION loc_ulp_phone_context_settings_update + +DESCRIPTION + This is used to inform the ULP module of phone settings changes carried out + by the users +DEPENDENCIES + N/A + +RETURN VALUE + 0: success + +SIDE EFFECTS + N/A + +===========================================================================*/ + +static int loc_ulp_phone_context_settings_update(UlpPhoneContextSettings *settings) +{ + ENTRY_LOG(); + int ret_val = -1; + ret_val = loc_eng_ulp_phone_context_settings_update(loc_afw_data, settings); + EXIT_LOG(%d, ret_val); + return ret_val; +} + +/*=========================================================================== +FUNCTION loc_ulp_network_init + +DESCRIPTION + Initialize the ULP network interface. + +DEPENDENCIES + NONE + +RETURN VALUE + 0 + +SIDE EFFECTS + N/A + +===========================================================================*/ +static int loc_ulp_network_init(UlpNetworkLocationCallbacks *callbacks) +{ + ENTRY_LOG(); + int ret_val = -1; + if (loc_afw_data.context) { + ret_val = loc_eng_ulp_network_init(loc_afw_data, callbacks); + } else + { + ulp_cb_data.network_location_cb = callbacks; + } + + EXIT_LOG(%d, ret_val); + return ret_val; +} + +/*=========================================================================== +FUNCTION loc_eng_ulp_send_network_position + +DESCRIPTION + Ulp send data + +DEPENDENCIES + NONE + +RETURN VALUE + 0 + +SIDE EFFECTS + N/A + +===========================================================================*/ +int loc_ulp_send_network_position(UlpNetworkPositionReport *position_report) +{ + ENTRY_LOG(); + int ret_val = -1; + ret_val = loc_eng_ulp_send_network_position(loc_afw_data, position_report); + EXIT_LOG(%d, ret_val); + return ret_val; +} + +/*=========================================================================== +FUNCTION loc_ulp_engine_init + +DESCRIPTION + Initialize the ULP Engine interface. + +DEPENDENCIES + NONE + +RETURN VALUE + 0 + +SIDE EFFECTS + N/A + +===========================================================================*/ +static int loc_ulp_engine_init(UlpEngineCallbacks* callbacks) +{ + int retVal = -1; + ENTRY_LOG(); + if(callbacks == NULL) { + LOC_LOGE("loc_ulp_engine_init failed. cb = NULL\n"); + EXIT_LOG(%d, retVal); + return retVal; + } + //Intilize the ulp call back cache at this point + memset(&ulp_cb_data, 0, sizeof(UlpCallbacks)); + ulp_loc_cb = callbacks->location_cb; + retVal = 0; + EXIT_LOG(%d, retVal); + return retVal; +} + +static int loc_ulp_engine_start() +{ + ENTRY_LOG(); + int ret_val = loc_eng_start(loc_afw_data); + + EXIT_LOG(%d, ret_val); + return ret_val; +} + +static int loc_ulp_engine_stop() +{ + ENTRY_LOG(); + int ret_val = loc_eng_stop(loc_afw_data); + + EXIT_LOG(%d, ret_val); + return ret_val; +} + + diff --git a/loc_api/libloc_api_50001/loc.h b/loc_api/libloc_api_50001/loc.h index bf942373..51273ddf 100644 --- a/loc_api/libloc_api_50001/loc.h +++ b/loc_api/libloc_api_50001/loc.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -37,6 +37,9 @@ extern "C" { #include #include #include +#include + +#define MIN_POSSIBLE_FIX_INTERVAL 1000 /* msec */ typedef enum loc_server_type { LOC_AGPS_CDMA_PDE_SERVER, @@ -52,10 +55,11 @@ typedef enum loc_position_mode_type { LOC_POSITION_MODE_RESERVED_1, LOC_POSITION_MODE_RESERVED_2, LOC_POSITION_MODE_RESERVED_3, - LOC_POSITION_MODE_RESERVED_4 + LOC_POSITION_MODE_RESERVED_4, + LOC_POSITION_MODE_RESERVED_5 } LocPositionMode; -typedef void (*loc_location_cb_ext) (GpsLocation* location, void* locExt); +typedef void (*loc_location_cb_ext) (UlpLocation* location, void* locExt); typedef void (*loc_sv_status_cb_ext) (GpsSvStatus* sv_status, void* svExt); typedef void* (*loc_ext_parser)(void* data); @@ -70,14 +74,30 @@ typedef struct { gps_create_thread create_thread_cb; loc_ext_parser location_ext_parser; loc_ext_parser sv_ext_parser; + gps_request_utc_time request_utc_time_cb; } LocCallbacks; +typedef struct { + UlpNetworkLocationCallbacks* network_location_cb; + UlpPhoneContextCallbacks* phone_context_cb; +} UlpCallbacks; + enum loc_sess_status { LOC_SESS_SUCCESS, LOC_SESS_INTERMEDIATE, LOC_SESS_FAILURE }; +typedef uint32_t LocPosTechMask; +#define LOC_POS_TECH_MASK_DEFAULT ((LocPosTechMask)0x00000000) +#define LOC_POS_TECH_MASK_SATELLITE ((LocPosTechMask)0x00000001) +#define LOC_POS_TECH_MASK_CELLID ((LocPosTechMask)0x00000002) +#define LOC_POS_TECH_MASK_WIFI ((LocPosTechMask)0x00000004) +#define LOC_POS_TECH_MASK_SENSORS ((LocPosTechMask)0x00000008) +#define LOC_POS_TECH_MASK_REFERENCE_LOCATION ((LocPosTechMask)0x00000010) +#define LOC_POS_TECH_MASK_INJECTED_COARSE_POSITION ((LocPosTechMask)0x00000020) + +void loc_ulp_msg_sender(void* loc_eng_data_p, void* msg); #ifdef __cplusplus } diff --git a/loc_api/libloc_api_50001/loc_eng.cpp b/loc_api/libloc_api_50001/loc_eng.cpp index 3fe9a77e..8fa87a0b 100644 --- a/loc_api/libloc_api_50001/loc_eng.cpp +++ b/loc_api/libloc_api_50001/loc_eng.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009-2013, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -43,7 +43,6 @@ #include #include #include -#include #include "LocApiAdapter.h" @@ -58,9 +57,9 @@ #include #include #include +#include #include - -#include "ulp.h" +#include #include "log_util.h" #include "loc_eng_log.h" @@ -68,31 +67,106 @@ #define SUCCESS TRUE #define FAILURE FALSE +#ifndef GPS_CONF_FILE +#define GPS_CONF_FILE "/etc/gps.conf" //??? platform independent +#endif + +#ifndef SAP_CONF_FILE +#define SAP_CONF_FILE "/etc/sap.conf" +#endif static void loc_eng_deferred_action_thread(void* context); static void* loc_eng_create_msg_q(); static void loc_eng_free_msg(void* msg); -struct LocEngContext { - // Data variables used by deferred action thread - const void* deferred_q; - const pthread_t deferred_action_thread; - static LocEngContext* get(gps_create_thread threadCreator); - void drop(); - static pthread_mutex_t lock; - static pthread_cond_t cond; -private: - int counter; - static LocEngContext *me; - LocEngContext(gps_create_thread threadCreator); -}; - pthread_mutex_t LocEngContext::lock = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t LocEngContext::cond = PTHREAD_COND_INITIALIZER; LocEngContext* LocEngContext::me = NULL; +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 loc_param_s_type loc_parameter_table[] = +{ + {"INTERMEDIATE_POS", &gps_conf.INTERMEDIATE_POS, NULL, 'n'}, + {"ACCURACY_THRES", &gps_conf.ACCURACY_THRES, NULL, 'n'}, + {"ENABLE_WIPER", &gps_conf.ENABLE_WIPER, NULL, 'n'}, + {"NMEA_PROVIDER", &gps_conf.NMEA_PROVIDER, NULL, 'n'}, + {"SUPL_VER", &gps_conf.SUPL_VER, NULL, 'n'}, + {"CAPABILITIES", &gps_conf.CAPABILITIES, NULL, 'n'}, + {"GYRO_BIAS_RANDOM_WALK", &sap_conf.GYRO_BIAS_RANDOM_WALK, &sap_conf.GYRO_BIAS_RANDOM_WALK_VALID, 'f'}, + {"ACCEL_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, + {"ANGLE_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, + {"RATE_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, + {"VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, + {"SENSOR_ACCEL_BATCHES_PER_SEC", &sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC, NULL, 'n'}, + {"SENSOR_ACCEL_SAMPLES_PER_BATCH", &sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH, NULL, 'n'}, + {"SENSOR_GYRO_BATCHES_PER_SEC", &sap_conf.SENSOR_GYRO_BATCHES_PER_SEC, NULL, 'n'}, + {"SENSOR_GYRO_SAMPLES_PER_BATCH", &sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH, NULL, 'n'}, + {"SENSOR_ACCEL_BATCHES_PER_SEC_HIGH", &sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH, NULL, 'n'}, + {"SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH", &sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH, NULL, 'n'}, + {"SENSOR_GYRO_BATCHES_PER_SEC_HIGH", &sap_conf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH, NULL, 'n'}, + {"SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH", &sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH, NULL, 'n'}, + {"SENSOR_CONTROL_MODE", &sap_conf.SENSOR_CONTROL_MODE, NULL, 'n'}, + {"SENSOR_USAGE", &sap_conf.SENSOR_USAGE, NULL, 'n'}, + {"SENSOR_ALGORITHM_CONFIG_MASK", &sap_conf.SENSOR_ALGORITHM_CONFIG_MASK, NULL, 'n'}, + {"QUIPC_ENABLED", &gps_conf.QUIPC_ENABLED, NULL, 'n'}, + {"LPP_PROFILE", &gps_conf.LPP_PROFILE, NULL, 'n'}, + {"A_GLONASS_POS_PROTOCOL_SELECT", &gps_conf.A_GLONASS_POS_PROTOCOL_SELECT, NULL, 'n'}, +}; + +static void loc_default_parameters(void) +{ + /* defaults */ + gps_conf.INTERMEDIATE_POS = 0; + gps_conf.ACCURACY_THRES = 0; + gps_conf.ENABLE_WIPER = 0; + gps_conf.NMEA_PROVIDER = 0; + gps_conf.SUPL_VER = 0x10000; + gps_conf.CAPABILITIES = 0x7; + + sap_conf.GYRO_BIAS_RANDOM_WALK = 0; + sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC = 2; + sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH = 5; + sap_conf.SENSOR_GYRO_BATCHES_PER_SEC = 2; + sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH = 5; + sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH = 4; + sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH = 25; + sap_conf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH = 4; + sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH = 25; + sap_conf.SENSOR_CONTROL_MODE = 0; /* AUTO */ + sap_conf.SENSOR_USAGE = 0; /* Enabled */ + sap_conf.SENSOR_ALGORITHM_CONFIG_MASK = 0; /* INS Disabled = FALSE*/ + + /* Values MUST be set by OEMs in configuration for sensor-assisted + navigation to work. There are NO default values */ + sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY = 0; + sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY = 0; + sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY = 0; + sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY = 0; + + sap_conf.GYRO_BIAS_RANDOM_WALK_VALID = 0; + sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; + sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; + sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; + sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; + + /* LTE Positioning Profile configuration is disable by default*/ + gps_conf.LPP_PROFILE = 0; + + /*By default no positioning protocol is selected on A-GLONASS system*/ + gps_conf.A_GLONASS_POS_PROTOCOL_SELECT = 0; +} LocEngContext::LocEngContext(gps_create_thread threadCreator) : deferred_q((const void*)loc_eng_create_msg_q()), + + //TODO: should we conditionally create ulp msg q? + ulp_q((const void*)loc_eng_create_msg_q()), + deferred_action_thread(threadCreator("loc_eng",loc_eng_deferred_action_thread, this)), counter(0) { @@ -106,11 +180,6 @@ LocEngContext* LocEngContext::get(gps_create_thread threadCreator) pthread_mutex_lock(&lock); // gonna need mutex protection here... if (NULL == me) { - // gps.conf is not part of the context class. But we only want to parse the conf - // file once. This is the only good place to ensure that. - // In fact one day the conf file should go into context as well. - loc_read_gps_conf(); - me = new LocEngContext(threadCreator); } me->counter++; @@ -134,6 +203,9 @@ void LocEngContext::drop() pthread_cond_wait(&cond, &lock); msg_q_destroy((void**)&deferred_q); + + msg_q_destroy((void**)&ulp_q); + delete me; me = NULL; } @@ -162,13 +234,6 @@ static void loc_eng_handle_engine_down(loc_eng_data_s_type &loc_eng_data) ; static void loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data) ; static char extra_data[100]; - -#ifdef QCOM_FEATURE_ULP -// ULP integration -static const ulpInterface* locEngUlpInf = NULL; -static int loc_eng_ulp_init(void* handle) ; -#endif - /********************************************************************* * Initialization checking macros *********************************************************************/ @@ -221,14 +286,17 @@ SIDE EFFECTS ===========================================================================*/ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks, - LOC_API_ADAPTER_EVENT_MASK_T event) -{ - ENTRY_LOG_CALLFLOW(); + LOC_API_ADAPTER_EVENT_MASK_T event, + void (*loc_external_msg_sender) (void*, void*)) +{ + int ret_val =-1; + + ENTRY_LOG_CALLFLOW(); if (NULL == callbacks || 0 == event) { LOC_LOGE("loc_eng_init: bad parameters cb %p eMask %d", callbacks, event); - EXIT_LOG(%d, 0); - return 0; + EXIT_LOG(%d, ret_val); + return ret_val; } STATE_CHECK((NULL == loc_eng_data.context), @@ -250,7 +318,7 @@ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks, loc_eng_data.nmea_cb = callbacks->nmea_cb; loc_eng_data.acquire_wakelock_cb = callbacks->acquire_wakelock_cb; loc_eng_data.release_wakelock_cb = callbacks->release_wakelock_cb; - + loc_eng_data.request_utc_time_cb = callbacks->request_utc_time_cb; loc_eng_data.intermediateFix = gps_conf.INTERMEDIATE_POS; // initial states taken care of by the memset above @@ -258,16 +326,21 @@ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks, // loc_eng_data.fix_session_status -- GPS_STATUS_NONE; // loc_eng_data.mute_session_state -- LOC_MUTE_SESS_NONE; -#ifdef QCOM_FEATURE_ULP - loc_eng_ulp_init(&loc_eng_data); -#endif + if ((event & LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT) && (gps_conf.NMEA_PROVIDER == NMEA_PROVIDER_AP)) + { + event = event ^ LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT; // unregister for modem NMEA report + loc_eng_data.generateNmea = true; + } + else + { + loc_eng_data.generateNmea = false; + } LocEng locEngHandle(&loc_eng_data, event, loc_eng_data.acquire_wakelock_cb, - loc_eng_data.release_wakelock_cb, loc_eng_msg_sender, + loc_eng_data.release_wakelock_cb, loc_eng_msg_sender, loc_external_msg_sender, callbacks->location_ext_parser, callbacks->sv_ext_parser); loc_eng_data.client_handle = LocApiAdapter::getLocApiAdapter(locEngHandle); - int ret_val =-1; if (NULL == loc_eng_data.client_handle) { // drop the context and declare failure ((LocEngContext*)(loc_eng_data.context))->drop(); @@ -302,29 +375,65 @@ static int loc_eng_reinit(loc_eng_data_s_type &loc_eng_data) msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, supl_msg, loc_eng_free_msg); + loc_eng_msg_lpp_config *lpp_msg(new loc_eng_msg_lpp_config(&loc_eng_data, + gps_conf.LPP_PROFILE)); + msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, + lpp_msg, loc_eng_free_msg); + loc_eng_msg_sensor_control_config *sensor_control_config_msg( - new loc_eng_msg_sensor_control_config(&loc_eng_data, gps_conf.SENSOR_USAGE)); + new loc_eng_msg_sensor_control_config(&loc_eng_data, sap_conf.SENSOR_USAGE)); msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, sensor_control_config_msg, loc_eng_free_msg); - /* Make sure this is specified by the user in the gps.conf file */ - if(gps_conf.GYRO_BIAS_RANDOM_WALK_VALID) + loc_eng_msg_a_glonass_protocol *a_glonass_protocol_msg(new loc_eng_msg_a_glonass_protocol(&loc_eng_data, + gps_conf.A_GLONASS_POS_PROTOCOL_SELECT)); + msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, + a_glonass_protocol_msg, loc_eng_free_msg); + + /* 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 || + sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID || + sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || + sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || + sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID ) { loc_eng_msg_sensor_properties *sensor_properties_msg( - new loc_eng_msg_sensor_properties(&loc_eng_data, gps_conf.GYRO_BIAS_RANDOM_WALK)); + new loc_eng_msg_sensor_properties(&loc_eng_data, + sap_conf.GYRO_BIAS_RANDOM_WALK_VALID, + sap_conf.GYRO_BIAS_RANDOM_WALK, + sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID, + sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY, + sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, + sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY, + sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, + sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY, + sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID, + sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY)); msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, sensor_properties_msg, loc_eng_free_msg); } loc_eng_msg_sensor_perf_control_config *sensor_perf_control_conf_msg( new loc_eng_msg_sensor_perf_control_config(&loc_eng_data, - gps_conf.SENSOR_CONTROL_MODE, - gps_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH, - gps_conf.SENSOR_ACCEL_BATCHES_PER_SEC, - gps_conf.SENSOR_GYRO_SAMPLES_PER_BATCH, - gps_conf.SENSOR_GYRO_BATCHES_PER_SEC)); + sap_conf.SENSOR_CONTROL_MODE, + sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH, + sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC, + sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH, + sap_conf.SENSOR_GYRO_BATCHES_PER_SEC, + sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH, + sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH, + sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH, + sap_conf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH, + sap_conf.SENSOR_ALGORITHM_CONFIG_MASK)); msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, sensor_perf_control_conf_msg, loc_eng_free_msg); + + //Send data disable to modem. This will be set to enable when + //an UPDATE_NETWORK_STATE event is received from Android + loc_eng_msg_set_data_enable *msg(new loc_eng_msg_set_data_enable(&loc_eng_data, NULL, + 0, (agpsStatus ? 1:0))); + msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, + msg, loc_eng_free_msg); } EXIT_LOG(%d, ret_val); @@ -366,7 +475,7 @@ void loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data) loc_eng_data.internet_nif = NULL; } #endif - if (loc_eng_data.navigating) + if (loc_eng_data.client_handle->isInSession()) { LOC_LOGD("loc_eng_cleanup: fix not stopped. stop it now."); loc_eng_stop(loc_eng_data); @@ -380,8 +489,8 @@ void loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data) // De-initialize ulp if (locEngUlpInf != NULL) { - locEngUlpInf->destroy (); locEngUlpInf = NULL; + msg_q_destroy( &loc_eng_data.ulp_q); } if (loc_eng_data.client_handle != NULL) @@ -391,17 +500,8 @@ void loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data) loc_eng_data.client_handle = NULL; } -#ifdef FEATURE_GNSS_BIT_API - { - char baseband[PROPERTY_VALUE_MAX]; - property_get("ro.baseband", baseband, "msm"); - if ((strcmp(baseband,"svlte2a") == 0)) - { - loc_eng_dmn_conn_loc_api_server_unblock(); - loc_eng_dmn_conn_loc_api_server_join(); - } - } -#endif /* FEATURE_GNSS_BIT_API */ + loc_eng_dmn_conn_loc_api_server_unblock(); + loc_eng_dmn_conn_loc_api_server_join(); #endif @@ -430,10 +530,19 @@ int loc_eng_start(loc_eng_data_s_type &loc_eng_data) ENTRY_LOG_CALLFLOW(); INIT_CHECK(loc_eng_data.context, return -1); - loc_eng_msg *msg(new loc_eng_msg(&loc_eng_data, LOC_ENG_MSG_START_FIX)); - msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, - msg, loc_eng_free_msg); - + if(loc_eng_data.ulp_initialized == true) + { + //Pass the start messgage to ULP if present & activated + loc_eng_msg *msg(new loc_eng_msg(&loc_eng_data, ULP_MSG_START_FIX)); + msg_q_snd( (void*)((LocEngContext*)(loc_eng_data.context))->ulp_q, + msg, loc_eng_free_msg); + } + else + { + loc_eng_msg *msg(new loc_eng_msg(&loc_eng_data, LOC_ENG_MSG_START_FIX)); + msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, + msg, loc_eng_free_msg); + } EXIT_LOG(%d, 0); return 0; } @@ -443,21 +552,14 @@ static int loc_eng_start_handler(loc_eng_data_s_type &loc_eng_data) ENTRY_LOG(); int ret_val = LOC_API_ADAPTER_ERR_SUCCESS; - if (!loc_eng_data.navigating) { -#ifdef QCOM_FEATURE_ULP - if (NULL == locEngUlpInf || - locEngUlpInf->start_fix () == 1) { - ret_val = loc_eng_data.client_handle->startFix(); - } -#else + if (!loc_eng_data.client_handle->isInSession()) { ret_val = loc_eng_data.client_handle->startFix(); -#endif if (ret_val == LOC_API_ADAPTER_ERR_SUCCESS || ret_val == LOC_API_ADAPTER_ERR_ENGINE_DOWN) { + loc_eng_data.client_handle->setInSession(TRUE); loc_inform_gps_status(loc_eng_data, GPS_STATUS_SESSION_BEGIN); - loc_eng_data.navigating = TRUE; } } @@ -466,7 +568,7 @@ static int loc_eng_start_handler(loc_eng_data_s_type &loc_eng_data) } /*=========================================================================== -FUNCTION loc_eng_stop +FUNCTION loc_eng_stop_wrapper DESCRIPTION Stops the tracking session @@ -486,9 +588,19 @@ int loc_eng_stop(loc_eng_data_s_type &loc_eng_data) ENTRY_LOG_CALLFLOW(); INIT_CHECK(loc_eng_data.context, return -1); - loc_eng_msg *msg(new loc_eng_msg(&loc_eng_data, LOC_ENG_MSG_STOP_FIX)); - msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, - msg, loc_eng_free_msg); + if(loc_eng_data.ulp_initialized == true) + { + //Pass the start messgage to ULP if present & activated + loc_eng_msg *msg(new loc_eng_msg(&loc_eng_data, ULP_MSG_STOP_FIX)); + msg_q_snd( (void*)((LocEngContext*)(loc_eng_data.context))->ulp_q, + msg, loc_eng_free_msg); + } + else + { + loc_eng_msg *msg(new loc_eng_msg(&loc_eng_data, LOC_ENG_MSG_STOP_FIX)); + msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, + msg, loc_eng_free_msg); + } EXIT_LOG(%d, 0); return 0; @@ -499,14 +611,7 @@ static int loc_eng_stop_handler(loc_eng_data_s_type &loc_eng_data) ENTRY_LOG(); int ret_val = LOC_API_ADAPTER_ERR_SUCCESS; - if (loc_eng_data.navigating) { -#ifdef QCOM_FEATURE_ULP - // Stops the ULP - if (locEngUlpInf != NULL) - { - locEngUlpInf->stop_fix (); - } -#endif + if (loc_eng_data.client_handle->isInSession()) { ret_val = loc_eng_data.client_handle->stopFix(); if (ret_val == LOC_API_ADAPTER_ERR_SUCCESS) @@ -514,7 +619,7 @@ static int loc_eng_stop_handler(loc_eng_data_s_type &loc_eng_data) loc_inform_gps_status(loc_eng_data, GPS_STATUS_SESSION_END); } - loc_eng_data.navigating = FALSE; + loc_eng_data.client_handle->setInSession(FALSE); } EXIT_LOG(%d, ret_val); @@ -561,18 +666,12 @@ SIDE EFFECTS ===========================================================================*/ int loc_eng_set_position_mode(loc_eng_data_s_type &loc_eng_data, - LocPositionMode mode, - GpsPositionRecurrence recurrence, - uint32_t min_interval, - uint32_t preferred_accuracy, - uint32_t preferred_time) + LocPosMode ¶ms) { ENTRY_LOG_CALLFLOW(); INIT_CHECK(loc_eng_data.context, return -1); loc_eng_msg_position_mode *msg( - new loc_eng_msg_position_mode(&loc_eng_data, mode, - recurrence, min_interval, - preferred_accuracy, preferred_time)); + new loc_eng_msg_position_mode(&loc_eng_data, params)); msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, msg, loc_eng_free_msg); @@ -608,7 +707,6 @@ int loc_eng_inject_time(loc_eng_data_s_type &loc_eng_data, GpsUtcTime time, uncertainty)); msg_q_snd((void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, msg, loc_eng_free_msg); - EXIT_LOG(%d, 0); return 0; } @@ -683,6 +781,7 @@ void loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data, GpsAidingData } /*=========================================================================== + FUNCTION loc_inform_gps_state DESCRIPTION @@ -752,7 +851,7 @@ static void loc_eng_agps_reinit(loc_eng_data_s_type &loc_eng_data) loc_eng_data.c2k_host_buf, loc_eng_data.c2k_port_buf); } - EXIT_LOG(%p, VOID_RET); + EXIT_LOG(%s, VOID_RET); } /*=========================================================================== FUNCTION loc_eng_agps_init @@ -777,32 +876,30 @@ void loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data, AGpsCallbacks* callbac STATE_CHECK((NULL == loc_eng_data.agps_status_cb), "agps instance already initialized", return); + if(callbacks == NULL) { + LOC_LOGE("loc_eng_agps_init: bad parameters cb %p", callbacks); + EXIT_LOG(%s, VOID_RET); + return; + } loc_eng_data.agps_status_cb = callbacks->status_cb; loc_eng_data.agnss_nif = new AgpsStateMachine(loc_eng_data.agps_status_cb, - AGPS_TYPE_SUPL); -#ifdef QCOM_FEATURE_IPV6 + AGPS_TYPE_SUPL, + false); +#ifdef FEATURE_IPV6 loc_eng_data.internet_nif = new AgpsStateMachine(loc_eng_data.agps_status_cb, - AGPS_TYPE_WWAN_ANY); -#else - loc_eng_data.internet_nif = new AgpsStateMachine(loc_eng_data.agps_status_cb, - AGPS_TYPE_SUPL); + AGPS_TYPE_WWAN_ANY, + false); + loc_eng_data.wifi_nif = new AgpsStateMachine(loc_eng_data.agps_status_cb, + AGPS_TYPE_WIFI, + true); #endif -#ifdef FEATURE_GNSS_BIT_API - { - char baseband[PROPERTY_VALUE_MAX]; - property_get("ro.baseband", baseband, "msm"); - if ((strcmp(baseband,"svlte2a") == 0)) - { - loc_eng_dmn_conn_loc_api_server_launch(callbacks->create_thread_cb, + loc_eng_dmn_conn_loc_api_server_launch(callbacks->create_thread_cb, NULL, NULL, &loc_eng_data); - } - } -#endif /* FEATURE_GNSS_BIT_API */ loc_eng_agps_reinit(loc_eng_data); - EXIT_LOG(%p, VOID_RET); + EXIT_LOG(%s, VOID_RET); } /*=========================================================================== @@ -822,7 +919,7 @@ SIDE EFFECTS N/A ===========================================================================*/ -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 int loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsType agpsType, const char* apn, AGpsBearerType bearerType) { @@ -893,7 +990,7 @@ SIDE EFFECTS N/A ===========================================================================*/ -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 int loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsType agpsType) { ENTRY_LOG_CALLFLOW(); @@ -940,7 +1037,7 @@ SIDE EFFECTS N/A ===========================================================================*/ -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 int loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data, AGpsType agpsType) { ENTRY_LOG_CALLFLOW(); @@ -1146,6 +1243,14 @@ void loc_eng_agps_ril_update_network_availability(loc_eng_data_s_type &loc_eng_d int available, const char* apn) { ENTRY_LOG_CALLFLOW(); + + //This is to store the status of data availability over the network. + //If GPS is not enabled, the INIT_CHECK will fail and the modem will + //not be updated with the network's availability. Since the data status + //can change before GPS is enabled the, storing the status will enable + //us to inform the modem after GPS is enabled + agpsStatus = available; + INIT_CHECK(loc_eng_data.context, return); if (apn != NULL) { @@ -1197,9 +1302,10 @@ static void loc_eng_report_status (loc_eng_data_s_type &loc_eng_data, GpsStatusV } // Session End is not reported during Android navigating state + boolean navigating = loc_eng_data.client_handle->isInSession(); if (status != GPS_STATUS_NONE && - !(status == GPS_STATUS_SESSION_END && loc_eng_data.navigating) && - !(status == GPS_STATUS_SESSION_BEGIN && !loc_eng_data.navigating)) + !(status == GPS_STATUS_SESSION_END && navigating) && + !(status == GPS_STATUS_SESSION_BEGIN && !navigating)) { if (loc_eng_data.mute_session_state != LOC_MUTE_SESS_IN_SESSION) { @@ -1259,7 +1365,9 @@ void loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data) if (loc_eng_data.agps_status_cb != NULL) { loc_eng_data.agnss_nif->dropAllSubscribers(); +#ifdef FEATURE_IPV6 loc_eng_data.internet_nif->dropAllSubscribers(); +#endif loc_eng_agps_reinit(loc_eng_data); } @@ -1267,15 +1375,10 @@ void loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data) loc_eng_report_status(loc_eng_data, GPS_STATUS_ENGINE_ON); // modem is back up. If we crashed in the middle of navigating, we restart. - if (loc_eng_data.navigating) { - loc_eng_data.client_handle->setPositionMode( - loc_eng_data.position_mode.pMode, - loc_eng_data.position_mode.pRecurrence, - loc_eng_data.position_mode.minInterval, - loc_eng_data.position_mode.preferredAccuracy, - loc_eng_data.position_mode.preferredTime); - // not mutex protected, assuming fw won't call start twice without a - // stop call in between. + if (loc_eng_data.client_handle->isInSession()) { + // This sets the copy in adapter to modem + loc_eng_data.client_handle->setPositionMode(NULL); + loc_eng_data.client_handle->setInSession(false); loc_eng_start_handler(loc_eng_data); } EXIT_LOG(%s, VOID_RET); @@ -1372,10 +1475,7 @@ static void loc_eng_deferred_action_thread(void* arg) case LOC_ENG_MSG_SET_POSITION_MODE: { loc_eng_msg_position_mode *pmMsg = (loc_eng_msg_position_mode*)msg; - loc_eng_data_p->client_handle->setPositionMode(pmMsg->pMode, pmMsg->pRecurrence, - pmMsg->minInterval,pmMsg->preferredAccuracy, - pmMsg->preferredTime); - memcpy((void*)&loc_eng_data_p->position_mode, (void*)pmMsg, sizeof(*pmMsg)); + loc_eng_data_p->client_handle->setPositionMode(&(pmMsg->pMode)); } break; @@ -1411,6 +1511,13 @@ static void loc_eng_deferred_action_thread(void* arg) } break; + case LOC_ENG_MSG_A_GLONASS_PROTOCOL: + { + loc_eng_msg_a_glonass_protocol *svMsg = (loc_eng_msg_a_glonass_protocol*)msg; + loc_eng_data_p->client_handle->setAGLONASSProtocol(svMsg->a_glonass_protocol); + } + break; + case LOC_ENG_MSG_SUPL_VERSION: { loc_eng_msg_suple_version *svMsg = (loc_eng_msg_suple_version*)msg; @@ -1418,6 +1525,13 @@ static void loc_eng_deferred_action_thread(void* arg) } break; + case LOC_ENG_MSG_LPP_CONFIG: + { + loc_eng_msg_lpp_config *svMsg = (loc_eng_msg_lpp_config*)msg; + loc_eng_data_p->client_handle->setLPPConfig(svMsg->lpp_config); + } + break; + case LOC_ENG_MSG_SET_SENSOR_CONTROL_CONFIG: { loc_eng_msg_sensor_control_config *sccMsg = (loc_eng_msg_sensor_control_config*)msg; @@ -1428,7 +1542,16 @@ static void loc_eng_deferred_action_thread(void* arg) case LOC_ENG_MSG_SET_SENSOR_PROPERTIES: { loc_eng_msg_sensor_properties *spMsg = (loc_eng_msg_sensor_properties*)msg; - loc_eng_data_p->client_handle->setSensorProperties(spMsg->gyroBiasVarianceRandomWalk); + loc_eng_data_p->client_handle->setSensorProperties(spMsg->gyroBiasVarianceRandomWalk_valid, + spMsg->gyroBiasVarianceRandomWalk, + spMsg->accelRandomWalk_valid, + spMsg->accelRandomWalk, + spMsg->angleRandomWalk_valid, + spMsg->angleRandomWalk, + spMsg->rateRandomWalk_valid, + spMsg->rateRandomWalk, + spMsg->velocityRandomWalk_valid, + spMsg->velocityRandomWalk); } break; @@ -1436,36 +1559,85 @@ static void loc_eng_deferred_action_thread(void* arg) { loc_eng_msg_sensor_perf_control_config *spccMsg = (loc_eng_msg_sensor_perf_control_config*)msg; loc_eng_data_p->client_handle->setSensorPerfControlConfig(spccMsg->controlMode, spccMsg->accelSamplesPerBatch, spccMsg->accelBatchesPerSec, - spccMsg->gyroSamplesPerBatch, spccMsg->gyroBatchesPerSec); + spccMsg->gyroSamplesPerBatch, spccMsg->gyroBatchesPerSec, + spccMsg->accelSamplesPerBatchHigh, spccMsg->accelBatchesPerSecHigh, + spccMsg->gyroSamplesPerBatchHigh, spccMsg->gyroBatchesPerSecHigh, + spccMsg->algorithmConfig); + } + break; + + case LOC_ENG_MSG_EXT_POWER_CONFIG: + { + loc_eng_msg_ext_power_config *pwrMsg = (loc_eng_msg_ext_power_config*)msg; + loc_eng_data_p->client_handle->setExtPowerConfig(pwrMsg->isBatteryCharging); } break; case LOC_ENG_MSG_REPORT_POSITION: if (loc_eng_data_p->mute_session_state != LOC_MUTE_SESS_IN_SESSION) { + bool reported = false; loc_eng_msg_report_position *rpMsg = (loc_eng_msg_report_position*)msg; if (loc_eng_data_p->location_cb != NULL) { if (LOC_SESS_FAILURE == rpMsg->status) { // in case we want to handle the failure case loc_eng_data_p->location_cb(NULL, NULL); + reported = true; } // what's in the else if is... (line by line) // 1. this is a good fix; or + // 1.1 there is source info; or + // 1.1.1 this is from hybrid provider; + // 1.2 it is a Satellite fix; or + // 1.2.1 it is a sensor fix // 2. (must be intermediate fix... implicit) // 2.1 we accepte intermediate; and // 2.2 it is NOT the case that // 2.2.1 there is inaccuracy; and // 2.2.2 we care about inaccuracy; and // 2.2.3 the inaccuracy exceeds our tolerance - else if (LOC_SESS_SUCCESS == rpMsg->status || + else if ((LOC_SESS_SUCCESS == rpMsg->status && ( + ((LOCATION_HAS_SOURCE_INFO & rpMsg->location.gpsLocation.flags) && + ULP_LOCATION_IS_FROM_HYBRID == rpMsg->location.position_source) || + ((LOC_POS_TECH_MASK_SATELLITE & rpMsg->technology_mask) || + (LOC_POS_TECH_MASK_SENSORS & rpMsg->technology_mask)))) || (LOC_SESS_INTERMEDIATE == loc_eng_data_p->intermediateFix && - !((rpMsg->location.flags & GPS_LOCATION_HAS_ACCURACY) && + !((rpMsg->location.gpsLocation.flags & GPS_LOCATION_HAS_ACCURACY) && (gps_conf.ACCURACY_THRES != 0) && - (rpMsg->location.accuracy > gps_conf.ACCURACY_THRES)))) { - loc_eng_data_p->location_cb((GpsLocation*)&(rpMsg->location), + (rpMsg->location.gpsLocation.accuracy > gps_conf.ACCURACY_THRES)))) { + loc_eng_data_p->location_cb((UlpLocation*)&(rpMsg->location), (void*)rpMsg->locationExt); + reported = true; } } + + // if we have reported this fix + if (reported && + // and if this is a singleshot + GPS_POSITION_RECURRENCE_SINGLE == + loc_eng_data_p->client_handle->getPositionMode().recurrence) { + if (LOC_SESS_INTERMEDIATE == rpMsg->status) { + // modem could be still working for a final fix, + // although we no longer need it. So stopFix(). + loc_eng_data_p->client_handle->stopFix(); + } + // turn off the session flag. + loc_eng_data_p->client_handle->setInSession(false); + } + + if (loc_eng_data_p->generateNmea && rpMsg->location.position_source == ULP_LOCATION_IS_FROM_GNSS) + { + loc_eng_nmea_generate_pos(loc_eng_data_p, rpMsg->location, rpMsg->locationExtended); + } + + // Free the allocated memory for rawData + UlpLocation* gp = (UlpLocation*)&(rpMsg->location); + if (gp != NULL && gp->rawData != NULL) + { + delete (char*)gp->rawData; + gp->rawData = NULL; + gp->rawDataSize = 0; + } } break; @@ -1478,6 +1650,12 @@ static void loc_eng_deferred_action_thread(void* arg) loc_eng_data_p->sv_status_cb((GpsSvStatus*)&(rsMsg->svStatus), (void*)rsMsg->svExt); } + + if (loc_eng_data_p->generateNmea) + { + loc_eng_nmea_generate_sv(loc_eng_data_p, rsMsg->svStatus, rsMsg->locationExtended); + } + } break; @@ -1498,10 +1676,18 @@ static void loc_eng_deferred_action_thread(void* arg) case LOC_ENG_MSG_REQUEST_BIT: { + AgpsStateMachine* stateMachine; loc_eng_msg_request_bit* brqMsg = (loc_eng_msg_request_bit*)msg; - AgpsStateMachine* stateMachine = (brqMsg->isSupl) ? - loc_eng_data_p->agnss_nif : - loc_eng_data_p->internet_nif; + if (brqMsg->ifType == LOC_ENG_IF_REQUEST_TYPE_SUPL) { + stateMachine = loc_eng_data_p->agnss_nif; +#ifdef FEATURE_IPV6 + } else if (brqMsg->ifType == LOC_ENG_IF_REQUEST_TYPE_ANY) { + stateMachine = loc_eng_data_p->internet_nif; +#endif + } else { + LOC_LOGD("%s]%d: unknown I/F request type = 0x%x\n", __func__, __LINE__, brqMsg->ifType); + break; + } BITSubscriber subscriber(stateMachine, brqMsg->ipv4Addr, brqMsg->ipv6Addr); stateMachine->subscribeRsrc((Subscriber*)&subscriber); @@ -1510,10 +1696,18 @@ static void loc_eng_deferred_action_thread(void* arg) case LOC_ENG_MSG_RELEASE_BIT: { + AgpsStateMachine* stateMachine; loc_eng_msg_release_bit* brlMsg = (loc_eng_msg_release_bit*)msg; - AgpsStateMachine* stateMachine = (brlMsg->isSupl) ? - loc_eng_data_p->agnss_nif : - loc_eng_data_p->internet_nif; + if (brlMsg->ifType == LOC_ENG_IF_REQUEST_TYPE_SUPL) { + stateMachine = loc_eng_data_p->agnss_nif; +#ifdef FEATURE_IPV6 + } else if (brlMsg->ifType == LOC_ENG_IF_REQUEST_TYPE_ANY) { + stateMachine = loc_eng_data_p->internet_nif; +#endif + } else { + LOC_LOGD("%s]%d: unknown I/F request type = 0x%x\n", __func__, __LINE__, brlMsg->ifType); + break; + } BITSubscriber subscriber(stateMachine, brlMsg->ipv4Addr, brlMsg->ipv6Addr); stateMachine->unsubscribeRsrc((Subscriber*)&subscriber); @@ -1523,12 +1717,20 @@ static void loc_eng_deferred_action_thread(void* arg) case LOC_ENG_MSG_REQUEST_ATL: { loc_eng_msg_request_atl* arqMsg = (loc_eng_msg_request_atl*)msg; - AgpsStateMachine* stateMachine = (AGPS_TYPE_SUPL == arqMsg->type) ? +#ifdef FEATURE_IPV6 + boolean backwardCompatibleMode = AGPS_TYPE_INVALID == arqMsg->type; + AgpsStateMachine* stateMachine = (AGPS_TYPE_SUPL == arqMsg->type || + backwardCompatibleMode) ? loc_eng_data_p->agnss_nif : loc_eng_data_p->internet_nif; +#else + boolean backwardCompatibleMode = false; + AgpsStateMachine* stateMachine = loc_eng_data_p->agnss_nif; +#endif ATLSubscriber subscriber(arqMsg->handle, stateMachine, - loc_eng_data_p->client_handle); + loc_eng_data_p->client_handle, + backwardCompatibleMode); stateMachine->subscribeRsrc((Subscriber*)&subscriber); } @@ -1539,18 +1741,49 @@ static void loc_eng_deferred_action_thread(void* arg) loc_eng_msg_release_atl* arlMsg = (loc_eng_msg_release_atl*)msg; ATLSubscriber s1(arlMsg->handle, loc_eng_data_p->agnss_nif, - loc_eng_data_p->client_handle); + loc_eng_data_p->client_handle, + false); // attempt to unsubscribe from agnss_nif first if (! loc_eng_data_p->agnss_nif->unsubscribeRsrc((Subscriber*)&s1)) { +#ifdef FEATURE_IPV6 ATLSubscriber s2(arlMsg->handle, loc_eng_data_p->internet_nif, - loc_eng_data_p->client_handle); + loc_eng_data_p->client_handle, + false); // if unsuccessful, try internet_nif loc_eng_data_p->internet_nif->unsubscribeRsrc((Subscriber*)&s2); +#endif } } break; +#ifdef FEATURE_IPV6 + case LOC_ENG_MSG_REQUEST_WIFI: + { + loc_eng_msg_request_wifi *wrqMsg = (loc_eng_msg_request_wifi *)msg; + if (wrqMsg->senderId == LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC || + wrqMsg->senderId == LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM || + wrqMsg->senderId == LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU) { + AgpsStateMachine* stateMachine = loc_eng_data_p->wifi_nif; + WIFISubscriber subscriber(stateMachine, wrqMsg->ssid, wrqMsg->password, wrqMsg->senderId); + stateMachine->subscribeRsrc((Subscriber*)&subscriber); + } else { + LOC_LOGE("%s]%d ERROR: unknown sender ID", __func__, __LINE__); + break; + } + } + break; + + case LOC_ENG_MSG_RELEASE_WIFI: + { + AgpsStateMachine* stateMachine = loc_eng_data_p->wifi_nif; + loc_eng_msg_release_wifi* wrlMsg = (loc_eng_msg_release_wifi*)msg; + WIFISubscriber subscriber(stateMachine, wrlMsg->ssid, wrlMsg->password, wrlMsg->senderId); + stateMachine->unsubscribeRsrc((Subscriber*)&subscriber); + } + break; +#endif + case LOC_ENG_MSG_REQUEST_XTRA_DATA: if (loc_eng_data_p->xtra_module_data.download_request_cb != NULL) { @@ -1559,6 +1792,14 @@ static void loc_eng_deferred_action_thread(void* arg) break; case LOC_ENG_MSG_REQUEST_TIME: + if (loc_eng_data_p->request_utc_time_cb != NULL) + { + loc_eng_data_p->request_utc_time_cb(); + } + else + { + LOC_LOGE("%s] ERROR: Callback function for request_time is NULL", __func__); + } break; case LOC_ENG_MSG_REQUEST_POSITION: @@ -1572,7 +1813,8 @@ static void loc_eng_deferred_action_thread(void* arg) { loc_eng_msg_set_data_enable *unaMsg = (loc_eng_msg_set_data_enable*)msg; loc_eng_data_p->client_handle->enableData(unaMsg->enable); - loc_eng_data_p->client_handle->setAPN(unaMsg->apn, unaMsg->length); + if(unaMsg->apn != NULL) + loc_eng_data_p->client_handle->setAPN(unaMsg->apn, unaMsg->length); } break; @@ -1586,14 +1828,25 @@ static void loc_eng_deferred_action_thread(void* arg) case LOC_ENG_MSG_ATL_OPEN_SUCCESS: { loc_eng_msg_atl_open_success *aosMsg = (loc_eng_msg_atl_open_success*)msg; -#ifdef QCOM_FEATURE_IPV6 - AgpsStateMachine* stateMachine = (AGPS_TYPE_SUPL == aosMsg->agpsType) ? - loc_eng_data_p->agnss_nif : - loc_eng_data_p->internet_nif; + AgpsStateMachine* stateMachine; +#ifdef FEATURE_IPV6 + switch (aosMsg->agpsType) { + case AGPS_TYPE_WIFI: { + stateMachine = loc_eng_data_p->wifi_nif; + break; + } + case AGPS_TYPE_SUPL: { + stateMachine = loc_eng_data_p->agnss_nif; + break; + } + default: { + stateMachine = loc_eng_data_p->internet_nif; + } + } stateMachine->setBearer(aosMsg->bearerType); #else - AgpsStateMachine* stateMachine = loc_eng_data_p->agnss_nif; + stateMachine = loc_eng_data_p->agnss_nif; #endif stateMachine->setAPN(aosMsg->apn, aosMsg->length); stateMachine->onRsrcEvent(RSRC_GRANTED); @@ -1603,14 +1856,24 @@ static void loc_eng_deferred_action_thread(void* arg) case LOC_ENG_MSG_ATL_CLOSED: { loc_eng_msg_atl_closed *acsMsg = (loc_eng_msg_atl_closed*)msg; -#ifdef QCOM_FEATURE_IPV6 - AgpsStateMachine* stateMachine = (AGPS_TYPE_SUPL == acsMsg->agpsType) ? - loc_eng_data_p->agnss_nif : - loc_eng_data_p->internet_nif; + AgpsStateMachine* stateMachine; +#ifdef FEATURE_IPV6 + switch (acsMsg->agpsType) { + case AGPS_TYPE_WIFI: { + stateMachine = loc_eng_data_p->wifi_nif; + break; + } + case AGPS_TYPE_SUPL: { + stateMachine = loc_eng_data_p->agnss_nif; + break; + } + default: { + stateMachine = loc_eng_data_p->internet_nif; + } + } #else - AgpsStateMachine* stateMachine = loc_eng_data_p->agnss_nif; + stateMachine = loc_eng_data_p->agnss_nif; #endif - stateMachine->onRsrcEvent(RSRC_RELEASED); } break; @@ -1618,14 +1881,24 @@ static void loc_eng_deferred_action_thread(void* arg) case LOC_ENG_MSG_ATL_OPEN_FAILED: { loc_eng_msg_atl_open_failed *aofMsg = (loc_eng_msg_atl_open_failed*)msg; -#ifdef QCOM_FEATURE_IPV6 - AgpsStateMachine* stateMachine = (AGPS_TYPE_SUPL == aofMsg->agpsType) ? - loc_eng_data_p->agnss_nif : - loc_eng_data_p->internet_nif; + AgpsStateMachine* stateMachine; +#ifdef FEATURE_IPV6 + switch (aofMsg->agpsType) { + case AGPS_TYPE_WIFI: { + stateMachine = loc_eng_data_p->wifi_nif; + break; + } + case AGPS_TYPE_SUPL: { + stateMachine = loc_eng_data_p->agnss_nif; + break; + } + default: { + stateMachine = loc_eng_data_p->internet_nif; + } + } #else - AgpsStateMachine* stateMachine = loc_eng_data_p->agnss_nif; + stateMachine = loc_eng_data_p->agnss_nif; #endif - stateMachine->onRsrcEvent(RSRC_DENIED); } break; @@ -1638,6 +1911,36 @@ static void loc_eng_deferred_action_thread(void* arg) loc_eng_handle_engine_up(*loc_eng_data_p); break; + case LOC_ENG_MSG_REQUEST_NETWORK_POSIITON: + { + loc_eng_msg_request_network_position *nlprequestmsg = (loc_eng_msg_request_network_position*)msg; + //loc_eng_handle_request_network_position(nlprequestmsg ); + LOC_LOGD("Received n/w position request from ULP.Request type %d Periodicity: %d\n", + nlprequestmsg->networkPosRequest.request_type, + nlprequestmsg->networkPosRequest.interval_ms); + if(loc_eng_data_p->ulp_network_callback != NULL) + { + loc_eng_data_p->ulp_network_callback((UlpNetworkRequestPos*)&(nlprequestmsg->networkPosRequest)); + } + else + LOC_LOGE("Ulp Network call back not initialized"); + } + break; + + case LOC_ENG_MSG_REQUEST_PHONE_CONTEXT: + { + loc_eng_msg_request_phone_context *contextReqMsg = (loc_eng_msg_request_phone_context*)msg; + LOC_LOGD("Received phone context request from ULP.context_type 0x%x,request_type 0x%x ", + contextReqMsg->contextRequest.context_type,contextReqMsg->contextRequest.request_type) + if(loc_eng_data_p->ulp_phone_context_req_cb != NULL) + { + loc_eng_data_p->ulp_phone_context_req_cb((UlpPhoneContextRequest*)&(contextReqMsg->contextRequest)); + } + else + LOC_LOGE("Ulp Phone context request call back not initialized"); + } + break; + default: LOC_LOGE("unsupported msgid = %d\n", msg->msgid); break; @@ -1668,52 +1971,6 @@ static void loc_eng_deferred_action_thread(void* arg) EXIT_LOG(%s, VOID_RET); } -/*=========================================================================== -FUNCTION loc_eng_report_position_ulp - -DESCRIPTION - Report a ULP position - p_ulp_pos_absolute, ULP position in absolute coordinates - -DEPENDENCIES - None - -RETURN VALUE - 0: SUCCESS - others: error - -SIDE EFFECTS - N/A - -===========================================================================*/ -static int loc_eng_report_position_ulp (void* handle, - const GpsLocation* location_report_ptr, - unsigned int ext_data_length, - unsigned char* ext_data) -{ - ENTRY_LOG(); - loc_eng_data_s_type* loc_eng_data_p = (loc_eng_data_s_type*)handle; - - INIT_CHECK(loc_eng_data_p->context && loc_eng_data_p->client_handle, - return -1); - - if (ext_data_length > sizeof (extra_data)) - { - ext_data_length = sizeof (extra_data); - } - - memcpy(extra_data, - ext_data, - ext_data_length); - - loc_eng_data_p->client_handle->reportPosition((GpsLocation&)*location_report_ptr, - NULL, LOC_SESS_SUCCESS); - - EXIT_LOG(%d, 0); - return 0; -} - -#ifdef QCOM_FEATURE_ULP /*=========================================================================== FUNCTION loc_eng_ulp_init @@ -1732,43 +1989,19 @@ SIDE EFFECTS N/A ===========================================================================*/ -static int loc_eng_ulp_init(void* owner) +int loc_eng_ulp_init(loc_eng_data_s_type &loc_eng_data, const ulpInterface * loc_eng_ulpInf) { ENTRY_LOG(); - int ret_val; - void *handle; - const char *error; - get_ulp_interface* get_ulp_inf; - - if (!(gps_conf.CAPABILITIES & ULP_CAPABILITY)) { - LOC_LOGD ("%s, ULP is not supported\n", __func__); - ret_val = -1; - goto exit; - } - - handle = dlopen ("libulp.so", RTLD_NOW); - if (!handle) + int ret_val=-1; + if((loc_eng_ulpInf != NULL) && (((ulpInterface *)loc_eng_ulpInf)->init != NULL)) { - LOC_LOGE ("%s, dlopen for libulp.so failed\n", __func__); - ret_val = -1; - goto exit; + // Initialize the ULP interface + ((ulpInterface *)loc_eng_ulpInf)->init(loc_eng_data); + loc_eng_data.ulp_initialized = TRUE; + ret_val = 0; } - dlerror(); /* Clear any existing error */ - - get_ulp_inf = (get_ulp_interface*) dlsym(handle, "ulp_get_interface"); - if ((error = dlerror()) != NULL) { - LOC_LOGE ("%s, dlsym for ulpInterface failed, error = %s\n", __func__, error); - ret_val = -1; - goto exit; - } - - locEngUlpInf = get_ulp_inf(); - - // Initialize the ULP interface - locEngUlpInf->init (owner, loc_eng_report_position_ulp); - - ret_val = 0; -exit: + else + LOC_LOGE("ulp not initialized. NULL parameter"); EXIT_LOG(%d, ret_val); return ret_val; } @@ -1798,6 +2031,19 @@ bool loc_eng_inject_raw_command(loc_eng_data_s_type &loc_eng_data, LOC_LOGD("loc_eng_send_extra_command: %s\n", command); ret_val = TRUE; + if(loc_eng_data.ulp_initialized == true) + { + ulp_msg_inject_raw_command *msg( + new ulp_msg_inject_raw_command(&loc_eng_data,command, length)); + msg_q_snd( (void*)((LocEngContext*)(loc_eng_data.context))->ulp_q + , msg, loc_eng_free_msg); + ret_val = 0; + }else + { + ret_val = -1; + } + + EXIT_LOG(%s, loc_logger_boolStr[ret_val!=0]); return ret_val; } @@ -1823,9 +2069,205 @@ int loc_eng_update_criteria(loc_eng_data_s_type &loc_eng_data, ENTRY_LOG_CALLFLOW(); INIT_CHECK(loc_eng_data.context, return -1); int ret_val; - ret_val = 0; + + if(loc_eng_data.ulp_initialized == true) + { + LOC_LOGD("SJ:loc_eng_update_criteria: valid 0x%x action:%d, minTime:%ld, minDistance:%f, singleShot:%d, horizontalAccuracy:%d, powerRequirement:%d \n", + criteria.valid_mask, criteria.action, criteria.min_interval, criteria.min_distance, criteria.recurrence_type, criteria.preferred_horizontal_accuracy, + criteria.preferred_power_consumption ); + ulp_msg_update_criteria *msg( + new ulp_msg_update_criteria(&loc_eng_data,criteria)); + msg_q_snd( (void*)((LocEngContext*)(loc_eng_data.context))->ulp_q + , msg, loc_eng_free_msg); + ret_val = 0; + }else + { + ret_val = -1; + } + EXIT_LOG(%d, ret_val); + return ret_val; +} + +/*=========================================================================== +FUNCTION loc_eng_ulp_phone_context_settings_update + +DESCRIPTION + This is used to inform the ULP module of phone settings changes carried out + by the users +DEPENDENCIES + N/A + +RETURN VALUE + 0: success + +SIDE EFFECTS + N/A + +===========================================================================*/ + +int loc_eng_ulp_phone_context_settings_update(loc_eng_data_s_type &loc_eng_data, + UlpPhoneContextSettings *settings) +{ + ENTRY_LOG(); + int ret_val = -1; + + LOC_LOGD("loc_eng_ulp_phone_context_settings: context_type - 0x%x is_agps_enabled - %d " + "is_battery_charging %d ,is_gps_enabled %d, is_network_position_available %d," + "is_wifi_setting_enabled %d, is_agps_setting_enabled %d, is_enh_location_services_enabled %d\n", + settings->context_type ,settings->is_agps_enabled,settings->is_battery_charging, + settings->is_gps_enabled, settings->is_network_position_available, + settings->is_wifi_setting_enabled, settings->is_agps_enabled, + settings->is_enh_location_services_enabled ); + + if(loc_eng_data.ulp_initialized == true) + { + ulp_msg_inject_phone_context_settings *msg + (new ulp_msg_inject_phone_context_settings(&loc_eng_data, *settings)); + msg_q_snd( (void*)((LocEngContext*)(loc_eng_data.context))->ulp_q, msg, loc_eng_free_msg); + ret_val = 0; + } + + // Send battery information to modem for processing. + if(settings->context_type & ULP_PHONE_CONTEXT_BATTERY_CHARGING_STATE) + { + loc_eng_msg_ext_power_config *msg(new loc_eng_msg_ext_power_config(&loc_eng_data, settings->is_battery_charging)); + msg_q_snd( (void*)((LocEngContext*)(loc_eng_data.context))->deferred_q, msg, loc_eng_free_msg); + } EXIT_LOG(%d, ret_val); return ret_val; } -#endif +/*=========================================================================== +FUNCTION loc_eng_ulp_network_init + +DESCRIPTION + Initialize the ULP network interface. + +DEPENDENCIES + NONE + +RETURN VALUE + 0 + +SIDE EFFECTS + N/A + +===========================================================================*/ +int loc_eng_ulp_phone_context_init(loc_eng_data_s_type &loc_eng_data,UlpPhoneContextCallbacks *callback) +{ + int ret_val = -1; + ENTRY_LOG(); + if(callback != NULL) { + loc_eng_data.ulp_phone_context_req_cb = callback->ulp_request_phone_context_cb ; + ret_val = 0; + } + else + LOC_LOGE("loc_eng_ulp_phone_context_init: bad parameters cb %p", callback); + EXIT_LOG(%d, ret_val); + return ret_val; +} + +/*=========================================================================== +FUNCTION loc_eng_ulp_network_init + +DESCRIPTION + Initialize the ULP network interface. + +DEPENDENCIES + NONE + +RETURN VALUE + 0 + +SIDE EFFECTS + N/A + +===========================================================================*/ +int loc_eng_ulp_network_init(loc_eng_data_s_type &loc_eng_data, + UlpNetworkLocationCallbacks *callbacks) +{ + int ret_val = -1; + ENTRY_LOG_CALLFLOW(); + if(callbacks != NULL) { + loc_eng_data.ulp_network_callback = callbacks->ulp_network_location_request_cb; + ret_val = 0; + } + else + LOC_LOGE("loc_eng_ulp_network_init: bad parameters cb %p", callbacks); + EXIT_LOG(%d, ret_val); + return ret_val; +} + + +/*=========================================================================== +FUNCTION loc_eng_ulp_send_network_position + +DESCRIPTION + Ulp send data + +DEPENDENCIES + NONE + +RETURN VALUE + 0 + +SIDE EFFECTS + N/A + +===========================================================================*/ +int loc_eng_ulp_send_network_position(loc_eng_data_s_type &loc_eng_data, + UlpNetworkPositionReport *position_report) +{ + ENTRY_LOG(); + int ret_val = 0; + if(loc_eng_data.ulp_initialized == true) + { + ulp_msg_inject_network_position *msg + (new ulp_msg_inject_network_position(&loc_eng_data, *position_report)); + msg_q_snd( (void*)((LocEngContext*)(loc_eng_data.context))->ulp_q + , msg, loc_eng_free_msg); + ret_val = 0; + }else + { + ret_val = -1; + } + EXIT_LOG(%d, ret_val); + return ret_val; +} + +/*=========================================================================== +FUNCTION loc_eng_read_config + +DESCRIPTION + Initiates the reading of the gps config file stored in /etc dir + +DEPENDENCIES + None + +RETURN VALUE + 0: success + +SIDE EFFECTS + N/A + +===========================================================================*/ +int loc_eng_read_config(void) +{ + ENTRY_LOG_CALLFLOW(); + if(configAlreadyRead == false) + { + // Initialize our defaults before reading of configuration file overwrites them. + loc_default_parameters(); + // We only want to parse the conf file once. This is a good place to ensure that. + // In fact one day the conf file should go into context. + UTIL_READ_CONF(GPS_CONF_FILE, loc_parameter_table); + UTIL_READ_CONF(SAP_CONF_FILE, loc_parameter_table); + configAlreadyRead = true; + } else { + LOC_LOGV("GPS Config file has already been read\n"); + } + + EXIT_LOG(%d, 0); + return 0; +} + diff --git a/loc_api/libloc_api_50001/loc_eng.h b/loc_api/libloc_api_50001/loc_eng.h index 73578ec8..d61cb12b 100644 --- a/loc_api/libloc_api_50001/loc_eng.h +++ b/loc_api/libloc_api_50001/loc_eng.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009-2013, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -36,6 +36,7 @@ extern "C" { // Uncomment to keep all LOG messages (LOGD, LOGI, LOGV, etc.) #define MAX_NUM_ATL_CONNECTIONS 2 + // Define boolean type to be used by libgps on loc api module typedef unsigned char boolean; @@ -67,9 +68,10 @@ typedef unsigned char boolean; #define FAILURE FALSE #define INVALID_ATL_CONNECTION_HANDLE -1 -#define MAX_APN_LEN 100 -#define MAX_URL_LEN 256 -#define smaller_of(a, b) (((a) > (b)) ? (b) : (a)) +enum loc_nmea_provider_e_type { + NMEA_PROVIDER_AP = 0, // Application Processor Provider of NMEA + NMEA_PROVIDER_MP // Modem Processor Provider of NMEA +}; enum loc_mute_session_e_type { LOC_MUTE_SESS_NONE = 0, @@ -77,6 +79,21 @@ enum loc_mute_session_e_type { LOC_MUTE_SESS_IN_SESSION }; +struct LocEngContext { + // Data variables used by deferred action thread + const void* deferred_q; + const void* ulp_q; + const pthread_t deferred_action_thread; + static LocEngContext* get(gps_create_thread threadCreator); + void drop(); + static pthread_mutex_t lock; + static pthread_cond_t cond; +private: + int counter; + static LocEngContext *me; + LocEngContext(gps_create_thread threadCreator); +}; + // Module data typedef struct { @@ -89,6 +106,9 @@ typedef struct gps_ni_notify_callback ni_notify_cb; gps_acquire_wakelock acquire_wakelock_cb; gps_release_wakelock release_wakelock_cb; + gps_request_utc_time request_utc_time_cb; + ulp_network_location_request ulp_network_callback; + ulp_request_phone_context ulp_phone_context_req_cb; boolean intermediateFix; AGpsStatusValue agps_status; // used to defer stopping the GPS engine until AGPS data calls are done @@ -97,11 +117,10 @@ typedef struct loc_eng_xtra_data_s_type xtra_module_data; loc_eng_ni_data_s_type loc_eng_ni_data; - boolean navigating; - // AGPS state machines AgpsStateMachine* agnss_nif; AgpsStateMachine* internet_nif; + AgpsStateMachine* wifi_nif; // GPS engine status GpsStatusValue engine_status; @@ -112,11 +131,16 @@ typedef struct void* context; - loc_eng_msg_position_mode position_mode; - // For muting session broadcast loc_mute_session_e_type mute_session_state; + // For nmea generation + boolean generateNmea; + uint32_t sv_used_mask; + float hdop; + float pdop; + float vdop; + // Address buffers, for addressing setting before init int supl_host_set; char supl_host_buf[101]; @@ -127,12 +151,60 @@ typedef struct int mpc_host_set; char mpc_host_buf[101]; int mpc_port_buf; + bool ulp_initialized; + uint32_t min_interval_cached; + UlpRecurrenceCriteria recurrence_type_cached; } loc_eng_data_s_type; +#include "ulp.h" + +/* GPS.conf support */ +typedef struct loc_gps_cfg_s +{ + unsigned long INTERMEDIATE_POS; + unsigned long ACCURACY_THRES; + unsigned long ENABLE_WIPER; + unsigned long SUPL_VER; + unsigned long CAPABILITIES; + unsigned long QUIPC_ENABLED; + unsigned long LPP_PROFILE; + uint8_t NMEA_PROVIDER; + unsigned long A_GLONASS_POS_PROTOCOL_SELECT; +} loc_gps_cfg_s_type; + +typedef struct +{ + uint8_t GYRO_BIAS_RANDOM_WALK_VALID; + double GYRO_BIAS_RANDOM_WALK; + unsigned long SENSOR_ACCEL_BATCHES_PER_SEC; + unsigned long SENSOR_ACCEL_SAMPLES_PER_BATCH; + unsigned long SENSOR_GYRO_BATCHES_PER_SEC; + unsigned long SENSOR_GYRO_SAMPLES_PER_BATCH; + unsigned long SENSOR_ACCEL_BATCHES_PER_SEC_HIGH; + unsigned long SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH; + unsigned long SENSOR_GYRO_BATCHES_PER_SEC_HIGH; + unsigned long SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH; + unsigned long SENSOR_CONTROL_MODE; + unsigned long SENSOR_USAGE; + unsigned long 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; +} loc_sap_cfg_s_type; + +extern loc_gps_cfg_s_type gps_conf; +extern loc_sap_cfg_s_type sap_conf; int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks, - LOC_API_ADAPTER_EVENT_MASK_T event); + LOC_API_ADAPTER_EVENT_MASK_T event, + void (*loc_external_msg_sender) (void*, void*)); +int loc_eng_ulp_init(loc_eng_data_s_type &loc_eng_data, const ulpInterface * loc_eng_ulpInf); int loc_eng_start(loc_eng_data_s_type &loc_eng_data); int loc_eng_stop(loc_eng_data_s_type &loc_eng_data); void loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data); @@ -145,19 +217,15 @@ int loc_eng_inject_location(loc_eng_data_s_type &loc_eng_data, void loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data, GpsAidingData f); int loc_eng_set_position_mode(loc_eng_data_s_type &loc_eng_data, - LocPositionMode mode, GpsPositionRecurrence recurrence, - uint32_t min_interval, uint32_t preferred_accuracy, - uint32_t preferred_time); + LocPosMode ¶ms); const void* loc_eng_get_extension(loc_eng_data_s_type &loc_eng_data, const char* name); -#ifdef QCOM_FEATURE_ULP int loc_eng_update_criteria(loc_eng_data_s_type &loc_eng_data, UlpLocationCriteria criteria); -#endif void loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data, AGpsCallbacks* callbacks); -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 int loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsType agpsType, const char* apn, AGpsBearerType bearerType); int loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsType agpsType); @@ -196,7 +264,15 @@ extern void loc_eng_ni_request_handler(loc_eng_data_s_type &loc_eng_data, const GpsNiNotification *notif, const void* passThrough); extern void loc_eng_ni_reset_on_engine_restart(loc_eng_data_s_type &loc_eng_data); +int loc_eng_ulp_network_init(loc_eng_data_s_type &loc_eng_data, UlpNetworkLocationCallbacks *callbacks); +int loc_eng_ulp_phone_context_settings_update(loc_eng_data_s_type &loc_eng_data, + UlpPhoneContextSettings *settings); +int loc_eng_ulp_phone_context_init(loc_eng_data_s_type &loc_eng_data, + UlpPhoneContextCallbacks *callback); +int loc_eng_ulp_send_network_position(loc_eng_data_s_type &loc_eng_data, + UlpNetworkPositionReport *position_report); +int loc_eng_read_config(void); #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/loc_api/libloc_api_50001/loc_eng_agps.cpp b/loc_api/libloc_api_50001/loc_eng_agps.cpp index 07475680..5bdae3d7 100644 --- a/loc_api/libloc_api_50001/loc_eng_agps.cpp +++ b/loc_api/libloc_api_50001/loc_eng_agps.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -87,7 +87,7 @@ const int Notification::BROADCAST_INACTIVE = 0x80000002; //====================================================================== -// Subscriber: BITSubscriber / ATLSubscriber +// Subscriber: BITSubscriber / ATLSubscriber / WIFISubscriber //====================================================================== bool Subscriber::forMe(Notification ¬ification) { @@ -120,14 +120,17 @@ bool BITSubscriber::notifyRsrcStatus(Notification ¬ification) case RSRC_UNSUBSCRIBE: case RSRC_RELEASED: loc_eng_dmn_conn_loc_api_server_data_conn( + LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON, GPSONE_LOC_API_IF_RELEASE_SUCCESS); break; case RSRC_DENIED: loc_eng_dmn_conn_loc_api_server_data_conn( + LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON, GPSONE_LOC_API_IF_FAILURE); break; case RSRC_GRANTED: loc_eng_dmn_conn_loc_api_server_data_conn( + LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON, GPSONE_LOC_API_IF_REQUEST_SUCCESS); break; default: @@ -150,20 +153,38 @@ bool ATLSubscriber::notifyRsrcStatus(Notification ¬ification) ((LocApiAdapter*)mLocAdapter)->atlCloseStatus(ID, 1); break; case RSRC_DENIED: + { +#ifdef FEATURE_IPV6 + AGpsType type = mBackwardCompatibleMode ? + AGPS_TYPE_INVALID : mStateMachine->getType(); ((LocApiAdapter*)mLocAdapter)->atlOpenStatus(ID, 0, (char*)mStateMachine->getAPN(), -#ifdef QCOM_FEATURE_IPV6 mStateMachine->getBearer(), + type); +#else + AGpsType type = mStateMachine->getType(); + ((LocApiAdapter*)mLocAdapter)->atlOpenStatus(ID, 0, + (char*)mStateMachine->getAPN(), + type); #endif - mStateMachine->getType()); + } break; case RSRC_GRANTED: + { +#ifdef FEATURE_IPV6 + AGpsType type = mBackwardCompatibleMode ? + AGPS_TYPE_INVALID : mStateMachine->getType(); ((LocApiAdapter*)mLocAdapter)->atlOpenStatus(ID, 1, (char*)mStateMachine->getAPN(), -#ifdef QCOM_FEATURE_IPV6 mStateMachine->getBearer(), + type); +#else + AGpsType type = mStateMachine->getType(); + ((LocApiAdapter*)mLocAdapter)->atlOpenStatus(ID, 1, + (char*)mStateMachine->getAPN(), + type); #endif - mStateMachine->getType()); + } break; default: notify = false; @@ -173,6 +194,39 @@ bool ATLSubscriber::notifyRsrcStatus(Notification ¬ification) return notify; } +#ifdef FEATURE_IPV6 +bool WIFISubscriber::notifyRsrcStatus(Notification ¬ification) +{ + bool notify = forMe(notification); + + if (notify) { + switch(notification.rsrcStatus) + { + case RSRC_UNSUBSCRIBE: + break; + case RSRC_RELEASED: + loc_eng_dmn_conn_loc_api_server_data_conn( + senderId, + GPSONE_LOC_API_IF_RELEASE_SUCCESS); + break; + case RSRC_DENIED: + loc_eng_dmn_conn_loc_api_server_data_conn( + senderId, + GPSONE_LOC_API_IF_FAILURE); + break; + case RSRC_GRANTED: + loc_eng_dmn_conn_loc_api_server_data_conn( + senderId, + GPSONE_LOC_API_IF_REQUEST_SUCCESS); + break; + default: + notify = false; + } + } + + return notify; +} +#endif //====================================================================== // AgpsState: AgpsReleasedState / AgpsPendingState / AgpsAcquiredState @@ -276,23 +330,25 @@ AgpsState* AgpsPendingState::onRsrcEvent(AgpsRsrcStatus event, void* data) Subscriber* subscriber = (Subscriber*) data; if (subscriber->waitForCloseComplete()) { subscriber->setInactive(); - if (!mStateMachine->hasActiveSubscribers()) { - // no more subscribers, move to RELEASED state - nextState = mReleasingState; - } } else { // auto notify this subscriber of the unsubscribe Notification notification(subscriber, event, true); mStateMachine->notifySubscribers(notification); + } - // now check if there is any subscribers left - if (!mStateMachine->hasSubscribers()) { - // no more subscribers, move to RELEASED state - nextState = mReleasedState; + // now check if there is any subscribers left + if (!mStateMachine->hasSubscribers()) { + // no more subscribers, move to RELEASED state + nextState = mReleasedState; - // tell connecivity service we can release NIF - mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN); - } + // tell connecivity service we can release NIF + mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN); + } else if (!mStateMachine->hasActiveSubscribers()) { + // only inactive subscribers, move to RELEASING state + nextState = mReleasingState; + + // tell connecivity service we can release NIF + mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN); } } break; @@ -381,13 +437,13 @@ AgpsState* AgpsAcquiredState::onRsrcEvent(AgpsRsrcStatus event, void* data) // now check if there is any subscribers left if (!mStateMachine->hasSubscribers()) { // no more subscribers, move to RELEASED state - nextState = mReleasingState; + nextState = mReleasedState; // tell connecivity service we can release NIF mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN); } else if (!mStateMachine->hasActiveSubscribers()) { - // no more subscribers, move to RELEASED state - nextState = mReleasedState; + // only inactive subscribers, move to RELEASING state + nextState = mReleasingState; // tell connecivity service we can release NIF mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN); @@ -469,21 +525,14 @@ AgpsState* AgpsReleasingState::onRsrcEvent(AgpsRsrcStatus event, void* data) // now check if there is any subscribers left if (!mStateMachine->hasSubscribers()) { - // no more subscribers, move to RELEASED state - nextState = mReleasingState; - - // tell connecivity service we can release NIF - mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN); - } else if (!mStateMachine->hasActiveSubscribers()) { // no more subscribers, move to RELEASED state nextState = mReleasedState; - - // tell connecivity service we can release NIF - mStateMachine->sendRsrcRequest(GPS_RELEASE_AGPS_DATA_CONN); } } break; + case RSRC_DENIED: + // A race condition subscriber unsubscribes before AFW denies resource. case RSRC_RELEASED: { nextState = mAcquiredState; @@ -503,7 +552,6 @@ AgpsState* AgpsReleasingState::onRsrcEvent(AgpsRsrcStatus event, void* data) break; case RSRC_GRANTED: - case RSRC_DENIED: default: LOC_LOGE("%s: unrecognized event %d", whoami(), event); // no state change. @@ -520,11 +568,13 @@ AgpsState* AgpsReleasingState::onRsrcEvent(AgpsRsrcStatus event, void* data) //====================================================================== AgpsStateMachine::AgpsStateMachine(void (*servicer)(AGpsStatus* status), - AGpsType type) : + AGpsType type, + bool enforceSingleSubscriber) : mServicer(servicer), mType(type), mStatePtr(new AgpsReleasedState(this)), mAPN(NULL), - mAPNLen(0) + mAPNLen(0), + mEnforceSingleSubscriber(enforceSingleSubscriber) { linked_list_init(&mSubscribers); @@ -643,7 +693,7 @@ void AgpsStateMachine::addSubscriber(Subscriber* subscriber) const void AgpsStateMachine::sendRsrcRequest(AGpsStatusValue action) const { Subscriber* s = NULL; - Notification notification(Notification::BROADCAST_ALL); + Notification notification(Notification::BROADCAST_ACTIVE); linked_list_search(mSubscribers, (void**)&s, hasSubscriber, (void*)¬ification, false); @@ -653,12 +703,15 @@ void AgpsStateMachine::sendRsrcRequest(AGpsStatusValue action) const nifRequest.type = mType; nifRequest.status = action; -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 if (s == NULL) { nifRequest.ipv4_addr = INADDR_NONE; nifRequest.ipv6_addr[0] = 0; + nifRequest.ssid[0] = '\0'; + nifRequest.password[0] = '\0'; } else { s->setIPAddresses(nifRequest.ipv4_addr, (char*)nifRequest.ipv6_addr); + s->setWifiInfo(nifRequest.ssid, nifRequest.password); } #else if (s == NULL) { @@ -675,7 +728,12 @@ void AgpsStateMachine::sendRsrcRequest(AGpsStatusValue action) const void AgpsStateMachine::subscribeRsrc(Subscriber *subscriber) { - mStatePtr = mStatePtr->onRsrcEvent(RSRC_SUBSCRIBE, (void*)subscriber); + if (mEnforceSingleSubscriber && hasSubscribers()) { + Notification notification(Notification::BROADCAST_ALL, RSRC_DENIED, true); + notifySubscriber(¬ification, subscriber); + } else { + mStatePtr = mStatePtr->onRsrcEvent(RSRC_SUBSCRIBE, (void*)subscriber); + } } bool AgpsStateMachine::unsubscribeRsrc(Subscriber *subscriber) diff --git a/loc_api/libloc_api_50001/loc_eng_agps.h b/loc_api/libloc_api_50001/loc_eng_agps.h index 1fd0f450..22160c36 100644 --- a/loc_api/libloc_api_50001/loc_eng_agps.h +++ b/loc_api/libloc_api_50001/loc_eng_agps.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -37,6 +37,7 @@ #include #include #include +#include "loc_eng_msg.h" // forward declaration class AgpsStateMachine; @@ -149,20 +150,21 @@ class AgpsStateMachine { char* mAPN; // for convenience, we don't do strlen each time. unsigned int mAPNLen; -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 // bear AGpsBearerType mBearer; #endif // ipv4 address for routing + bool mEnforceSingleSubscriber; public: - AgpsStateMachine(void (*servicer)(AGpsStatus* status), AGpsType type); + AgpsStateMachine(void (*servicer)(AGpsStatus* status), AGpsType type, bool enforceSingleSubscriber); virtual ~AgpsStateMachine(); // self explanatory methods below void setAPN(const char* apn, unsigned int len); inline const char* getAPN() const { return (const char*)mAPN; } -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 inline void setBearer(AGpsBearerType bearer) { mBearer = bearer; } inline AGpsBearerType getBearer() const { return mBearer; } #endif @@ -198,14 +200,16 @@ public: // multiple clients from modem. In the case of BIT, there is only one // cilent from BIT daemon. struct Subscriber { - const int ID; + const uint32_t ID; const AgpsStateMachine* mStateMachine; inline Subscriber(const int id, const AgpsStateMachine* stateMachine) : ID(id), mStateMachine(stateMachine) {} inline virtual ~Subscriber() {} - virtual void setIPAddresses(int &v4, char* v6) = 0; + virtual void setIPAddresses(uint32_t &v4, char* v6) = 0; + inline virtual void setWifiInfo(char* ssid, char* password) + { ssid[0] = 0; password[0] = 0; } inline virtual bool equals(const Subscriber *s) const { return ID == s->ID; } @@ -239,7 +243,7 @@ struct BITSubscriber : public Subscriber { virtual bool notifyRsrcStatus(Notification ¬ification); - inline virtual void setIPAddresses(int &v4, char* v6) + inline virtual void setIPAddresses(uint32_t &v4, char* v6) { v4 = ID; memcpy(v6, ipv6Addr, sizeof(ipv6Addr)); } virtual Subscriber* clone() @@ -256,19 +260,72 @@ private: // ATLSubscriber, created with requests from ATL struct ATLSubscriber : public Subscriber { const LocApiAdapter* mLocAdapter; + const bool mBackwardCompatibleMode; inline ATLSubscriber(const int id, const AgpsStateMachine* stateMachine, - const LocApiAdapter* adapter) : - Subscriber(id, stateMachine), mLocAdapter(adapter) {} + const LocApiAdapter* adapter, + const bool compatibleMode) : + Subscriber(id, stateMachine), mLocAdapter(adapter), + mBackwardCompatibleMode(compatibleMode){} virtual bool notifyRsrcStatus(Notification ¬ification); - inline virtual void setIPAddresses(int &v4, char* v6) + inline virtual void setIPAddresses(uint32_t &v4, char* v6) { v4 = INADDR_NONE; v6[0] = 0; } inline virtual Subscriber* clone() { - return new ATLSubscriber(ID, mStateMachine, mLocAdapter); + return new ATLSubscriber(ID, mStateMachine, mLocAdapter, + mBackwardCompatibleMode); } }; +#ifdef FEATURE_IPV6 +// WIFISubscriber, created with requests from MSAPM or QuIPC +struct WIFISubscriber : public Subscriber { + char * mSSID; + char * mPassword; + loc_if_req_sender_id_e_type senderId; + bool mIsInactive; + inline WIFISubscriber(const AgpsStateMachine* stateMachine, + char * ssid, char * password, loc_if_req_sender_id_e_type sender_id) : + Subscriber(sender_id, stateMachine), + mSSID(NULL == ssid ? NULL : new char[SSID_BUF_SIZE]), + mPassword(NULL == password ? NULL : new char[SSID_BUF_SIZE]), + senderId(sender_id) + { + if (NULL != mSSID) + strlcpy(mSSID, ssid, SSID_BUF_SIZE); + if (NULL != mPassword) + strlcpy(mPassword, password, SSID_BUF_SIZE); + mIsInactive = false; + } + + virtual bool notifyRsrcStatus(Notification ¬ification); + + inline virtual void setIPAddresses(uint32_t &v4, char* v6) {} + + inline virtual void setWifiInfo(char* ssid, char* password) + { + if (NULL != mSSID) + strlcpy(ssid, mSSID, SSID_BUF_SIZE); + else + ssid[0] = '\0'; + if (NULL != mPassword) + strlcpy(password, mPassword, SSID_BUF_SIZE); + else + password[0] = '\0'; + } + + inline virtual bool waitForCloseComplete() { return true; } + + inline virtual void setInactive() { mIsInactive = true; } + inline virtual bool isInactive() { return mIsInactive; } + + virtual Subscriber* clone() + { + return new WIFISubscriber(mStateMachine, mSSID, mPassword, senderId); + } +}; +#endif + #endif //__LOC_ENG_AGPS_H__ diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp b/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp index f2f9a501..86489086 100644 --- a/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp +++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -33,24 +33,78 @@ #include #include #include +#include +#include +#include #include "log_util.h" #include "loc_eng_dmn_conn_glue_msg.h" #include "loc_eng_dmn_conn_handler.h" #include "loc_eng_dmn_conn.h" +#include "loc_eng_msg.h" static int loc_api_server_msgqid; static int loc_api_resp_msgqid; +static int quipc_msgqid; +static int msapm_msgqid; +static int msapu_msgqid; static const char * global_loc_api_q_path = GPSONE_LOC_API_Q_PATH; static const char * global_loc_api_resp_q_path = GPSONE_LOC_API_RESP_Q_PATH; +static const char * global_quipc_ctrl_q_path = QUIPC_CTRL_Q_PATH; +static const char * global_msapm_ctrl_q_path = MSAPM_CTRL_Q_PATH; +static const char * global_msapu_ctrl_q_path = MSAPU_CTRL_Q_PATH; static int loc_api_server_proc_init(void *context) { loc_api_server_msgqid = loc_eng_dmn_conn_glue_msgget(global_loc_api_q_path, O_RDWR); + //change mode/group for the global_loc_api_q_path pipe + int result = chmod (global_loc_api_q_path, 0660); + if (result != 0) + { + LOC_LOGE("failed to change mode for %s, error = %s\n", global_loc_api_q_path, strerror(errno)); + } + + struct group * gps_group = getgrnam("gps"); + if (gps_group != NULL) + { + result = chown (global_loc_api_q_path, -1, gps_group->gr_gid); + if (result != 0) + { + LOC_LOGE("chown for pipe failed, pipe %s, gid = %d, result = %d, error = %s\n", + global_loc_api_q_path, gps_group->gr_gid, result, strerror(errno)); + } + } + else + { + LOC_LOGE("getgrnam for gps failed, error code = %d\n", errno); + } + loc_api_resp_msgqid = loc_eng_dmn_conn_glue_msgget(global_loc_api_resp_q_path, O_RDWR); + //change mode/group for the global_loc_api_resp_q_path pipe + result = chmod (global_loc_api_resp_q_path, 0660); + if (result != 0) + { + LOC_LOGE("failed to change mode for %s, error = %s\n", global_loc_api_resp_q_path, strerror(errno)); + } + + if (gps_group != NULL) + { + result = chown (global_loc_api_resp_q_path, -1, gps_group->gr_gid); + if (result != 0) + { + LOC_LOGE("chown for pipe failed, pipe %s, gid = %d, result = %d, error = %s\n", + global_loc_api_resp_q_path, + gps_group->gr_gid, result, strerror(errno)); + } + } + + quipc_msgqid = loc_eng_dmn_conn_glue_msgget(global_quipc_ctrl_q_path, O_RDWR); + msapm_msgqid = loc_eng_dmn_conn_glue_msgget(global_msapm_ctrl_q_path , O_RDWR); + msapu_msgqid = loc_eng_dmn_conn_glue_msgget(global_msapu_ctrl_q_path , O_RDWR); + LOC_LOGD("%s:%d] loc_api_server_msgqid = %d\n", __func__, __LINE__, loc_api_server_msgqid); return 0; } @@ -80,6 +134,7 @@ static int loc_api_server_proc(void *context) LOC_LOGD("%s:%d] %d listening on %s...\n", __func__, __LINE__, cnt, (char *) context); length = loc_eng_dmn_conn_glue_msgrcv(loc_api_server_msgqid, p_cmsgbuf, sz); if (length <= 0) { + free(p_cmsgbuf); LOC_LOGE("%s:%d] fail receiving msg from gpsone_daemon, retry later\n", __func__, __LINE__); usleep(1000); return 0; @@ -114,6 +169,9 @@ static int loc_api_server_proc_post(void *context) LOC_LOGD("%s:%d]\n", __func__, __LINE__); loc_eng_dmn_conn_glue_msgremove( global_loc_api_q_path, loc_api_server_msgqid); loc_eng_dmn_conn_glue_msgremove( global_loc_api_resp_q_path, loc_api_resp_msgqid); + loc_eng_dmn_conn_glue_msgremove( global_quipc_ctrl_q_path, quipc_msgqid); + loc_eng_dmn_conn_glue_msgremove( global_msapm_ctrl_q_path, msapm_msgqid); + loc_eng_dmn_conn_glue_msgremove( global_msapu_ctrl_q_path, msapu_msgqid); return 0; } @@ -165,16 +223,48 @@ int loc_eng_dmn_conn_loc_api_server_join(void) return 0; } -int loc_eng_dmn_conn_loc_api_server_data_conn(int status) { +int loc_eng_dmn_conn_loc_api_server_data_conn(int sender_id, int status) { struct ctrl_msgbuf cmsgbuf; + LOC_LOGD("%s:%d] quipc_msgqid = %d\n", __func__, __LINE__, quipc_msgqid); cmsgbuf.ctrl_type = GPSONE_LOC_API_RESPONSE; cmsgbuf.cmsg.cmsg_response.result = status; - LOC_LOGD("%s:%d] status = %d",__func__, __LINE__, status); - if (loc_eng_dmn_conn_glue_msgsnd(loc_api_resp_msgqid, & cmsgbuf, sizeof(struct ctrl_msgbuf)) < 0) { - LOC_LOGD("%s:%d] error! conn_glue_msgsnd failed\n", __func__, __LINE__); - return -1; + switch (sender_id) { + case LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC: { + LOC_LOGD("%s:%d] sender_id = LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC", __func__, __LINE__); + if (loc_eng_dmn_conn_glue_msgsnd(quipc_msgqid, & cmsgbuf, sizeof(struct ctrl_msgbuf)) < 0) { + LOC_LOGD("%s:%d] error! conn_glue_msgsnd failed\n", __func__, __LINE__); + return -1; + } + break; + } + case LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM: { + LOC_LOGD("%s:%d] sender_id = LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM", __func__, __LINE__); + if (loc_eng_dmn_conn_glue_msgsnd(msapm_msgqid, & cmsgbuf, sizeof(struct ctrl_msgbuf)) < 0) { + LOC_LOGD("%s:%d] error! conn_glue_msgsnd failed\n", __func__, __LINE__); + return -1; + } + break; + } + case LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU: { + LOC_LOGD("%s:%d] sender_id = LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU", __func__, __LINE__); + if (loc_eng_dmn_conn_glue_msgsnd(msapu_msgqid, & cmsgbuf, sizeof(struct ctrl_msgbuf)) < 0) { + LOC_LOGD("%s:%d] error! conn_glue_msgsnd failed\n", __func__, __LINE__); + return -1; + } + break; + } + case LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON: { + LOC_LOGD("%s:%d] sender_id = LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON", __func__, __LINE__); + if (loc_eng_dmn_conn_glue_msgsnd(loc_api_resp_msgqid, & cmsgbuf, sizeof(struct ctrl_msgbuf)) < 0) { + LOC_LOGD("%s:%d] error! conn_glue_msgsnd failed\n", __func__, __LINE__); + return -1; + } + break; + } + default: { + LOC_LOGD("%s:%d] invalid sender ID!", __func__, __LINE__); + } } return 0; - } diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn.h b/loc_api/libloc_api_50001/loc_eng_dmn_conn.h index 414fd553..c7c100b2 100644 --- a/loc_api/libloc_api_50001/loc_eng_dmn_conn.h +++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -35,11 +35,17 @@ #define GPSONE_LOC_API_Q_PATH "/data/misc/gpsone_d/gpsone_loc_api_q" #define GPSONE_LOC_API_RESP_Q_PATH "/data/misc/gpsone_d/gpsone_loc_api_resp_q" +#define QUIPC_CTRL_Q_PATH "/data/misc/gpsone_d/quipc_ctrl_q" +#define MSAPM_CTRL_Q_PATH "/data/misc/gpsone_d/msapm_ctrl_q" +#define MSAPU_CTRL_Q_PATH "/data/misc/gpsone_d/msapu_ctrl_q" #else #define GPSONE_LOC_API_Q_PATH "/tmp/gpsone_loc_api_q" #define GPSONE_LOC_API_RESP_Q_PATH "/tmp/gpsone_loc_api_resp_q" +#define QUIPC_CTRL_Q_PATH "/tmp/quipc_ctrl_q" +#define MSAPM_CTRL_Q_PATH "/tmp/msapm_ctrl_q" +#define MSAPU_CTRL_Q_PATH "/tmp/msapu_ctrl_q" #endif @@ -47,7 +53,7 @@ int loc_eng_dmn_conn_loc_api_server_launch(thelper_create_thread create_thread const char * loc_api_q_path, const char * ctrl_q_path, void *agps_handle); int loc_eng_dmn_conn_loc_api_server_unblock(void); int loc_eng_dmn_conn_loc_api_server_join(void); -int loc_eng_dmn_conn_loc_api_server_data_conn(int); +int loc_eng_dmn_conn_loc_api_server_data_conn(int, int); #endif /* LOC_ENG_DATA_SERVER_H */ diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c index 9cd19228..6b97a238 100644 --- a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c +++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.h b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.h index 8bc6f2a3..d685c87e 100644 --- a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.h +++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c index 74769088..d0bee29c 100644 --- a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c +++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -64,13 +64,21 @@ int loc_eng_dmn_conn_glue_pipeget(const char * pipe_name, int mode) int result; LOC_LOGD("%s, mode = %d\n", pipe_name, mode); - result = mkfifo(pipe_name, 0666); + result = mkfifo(pipe_name, 0660); if ((result == -1) && (errno != EEXIST)) { LOC_LOGE("failed: %s\n", strerror(errno)); return result; } + // The mode in mkfifo is not honoured and does not provide the + // group permissions. Doing chmod to add group permissions. + result = chmod (pipe_name, 0660); + if (result != 0){ + LOC_LOGE ("%s failed to change mode for %s, error = %s\n", __func__, + pipe_name, strerror(errno)); + } + fd = open(pipe_name, mode); if (fd <= 0) { diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.h b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.h index 3136e411..b2fa3a03 100644 --- a/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.h +++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp b/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp index fd15f001..6c060f64 100644 --- a/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp +++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -47,15 +47,91 @@ int loc_eng_dmn_conn_loc_api_server_if_request_handler(struct ctrl_msgbuf *pmsg, return 1; } - loc_eng_msg_request_bit *msg( - new loc_eng_msg_request_bit(loc_api_handle, - pmsg->cmsg.cmsg_if_request.is_supl, - pmsg->cmsg.cmsg_if_request.ipv4_addr, - (char*)pmsg->cmsg.cmsg_if_request.ipv6_addr)); - loc_eng_msg_sender(loc_api_handle, msg); + if (NULL != loc_api_handle) { + loc_if_req_type_e_type type; + switch (pmsg->cmsg.cmsg_if_request.type) { + case IF_REQUEST_TYPE_SUPL: + { + LOC_LOGD("IF_REQUEST_TYPE_SUPL"); + type = LOC_ENG_IF_REQUEST_TYPE_SUPL; + break; + } + case IF_REQUEST_TYPE_WIFI: + { + LOC_LOGD("IF_REQUEST_TYPE_WIFI"); + type = LOC_ENG_IF_REQUEST_TYPE_WIFI; + break; + } + case IF_REQUEST_TYPE_ANY: + { + LOC_LOGD("IF_REQUEST_TYPE_ANY"); + type = LOC_ENG_IF_REQUEST_TYPE_ANY; + break; + } + default: + { + LOC_LOGD("invalid IF_REQUEST_TYPE!"); + return -1; + } + } + switch (pmsg->cmsg.cmsg_if_request.sender_id) { + case IF_REQUEST_SENDER_ID_QUIPC: + { + LOC_LOGD("IF_REQUEST_SENDER_ID_QUIPC"); + loc_eng_msg_request_wifi *msg( + new loc_eng_msg_request_wifi(loc_api_handle, + type, + LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC, + (char*)pmsg->cmsg.cmsg_if_request.ssid, + (char*)pmsg->cmsg.cmsg_if_request.password)); + loc_eng_msg_sender(loc_api_handle, msg); + break; + } + case IF_REQUEST_SENDER_ID_MSAPM: + { + LOC_LOGD("IF_REQUEST_SENDER_ID_MSAPM"); + loc_eng_msg_request_wifi *msg( + new loc_eng_msg_request_wifi(loc_api_handle, + type, + LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM, + (char*)pmsg->cmsg.cmsg_if_request.ssid, + (char*)pmsg->cmsg.cmsg_if_request.password)); + loc_eng_msg_sender(loc_api_handle, msg); + break; + } + case IF_REQUEST_SENDER_ID_MSAPU: + { + LOC_LOGD("IF_REQUEST_SENDER_ID_MSAPU"); + loc_eng_msg_request_wifi *msg( + new loc_eng_msg_request_wifi(loc_api_handle, + type, + LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU, + (char*)pmsg->cmsg.cmsg_if_request.ssid, + (char*)pmsg->cmsg.cmsg_if_request.password)); + loc_eng_msg_sender(loc_api_handle, msg); + break; + } + case IF_REQUEST_SENDER_ID_GPSONE_DAEMON: + { + LOC_LOGD("IF_REQUEST_SENDER_ID_GPSONE_DAEMON"); + loc_eng_msg_request_bit *msg( + new loc_eng_msg_request_bit(loc_api_handle, + type, + pmsg->cmsg.cmsg_if_request.ipv4_addr, + (char*)pmsg->cmsg.cmsg_if_request.ipv6_addr)); + loc_eng_msg_sender(loc_api_handle, msg); + break; + } + default: + { + LOC_LOGD("invalid IF_REQUEST_SENDER_ID!"); + return -1; + } + } + } #else - loc_eng_dmn_conn_loc_api_server_data_conn(GPSONE_LOC_API_IF_REQUEST_SUCCESS); + loc_eng_dmn_conn_loc_api_server_data_conn(LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON, GPSONE_LOC_API_IF_REQUEST_SUCCESS); #endif return 0; } @@ -64,14 +140,88 @@ int loc_eng_dmn_conn_loc_api_server_if_release_handler(struct ctrl_msgbuf *pmsg, { LOC_LOGD("%s:%d]\n", __func__, __LINE__); #ifndef DEBUG_DMN_LOC_API - loc_eng_msg_release_bit *msg( + loc_if_req_type_e_type type; + switch (pmsg->cmsg.cmsg_if_request.type) { + case IF_REQUEST_TYPE_SUPL: + { + LOC_LOGD("IF_REQUEST_TYPE_SUPL"); + type = LOC_ENG_IF_REQUEST_TYPE_SUPL; + break; + } + case IF_REQUEST_TYPE_WIFI: + { + LOC_LOGD("IF_REQUEST_TYPE_WIFI"); + type = LOC_ENG_IF_REQUEST_TYPE_WIFI; + break; + } + case IF_REQUEST_TYPE_ANY: + { + LOC_LOGD("IF_REQUEST_TYPE_ANY"); + type = LOC_ENG_IF_REQUEST_TYPE_ANY; + break; + } + default: + { + LOC_LOGD("invalid IF_REQUEST_TYPE!"); + return -1; + } + } + switch (pmsg->cmsg.cmsg_if_request.sender_id) { + case IF_REQUEST_SENDER_ID_QUIPC: + { + LOC_LOGD("IF_REQUEST_SENDER_ID_QUIPC"); + loc_eng_msg_release_wifi *msg( + new loc_eng_msg_release_wifi(loc_api_handle, + type, + LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC, + (char*)pmsg->cmsg.cmsg_if_request.ssid, + (char*)pmsg->cmsg.cmsg_if_request.password)); + loc_eng_msg_sender(loc_api_handle, msg); + break; + } + case IF_REQUEST_SENDER_ID_MSAPM: + { + LOC_LOGD("IF_REQUEST_SENDER_ID_MSAPM"); + loc_eng_msg_release_wifi *msg( + new loc_eng_msg_release_wifi(loc_api_handle, + type, + LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM, + (char*)pmsg->cmsg.cmsg_if_request.ssid, + (char*)pmsg->cmsg.cmsg_if_request.password)); + loc_eng_msg_sender(loc_api_handle, msg); + break; + } + case IF_REQUEST_SENDER_ID_MSAPU: + { + LOC_LOGD("IF_REQUEST_SENDER_ID_MSAPU"); + loc_eng_msg_release_wifi *msg( + new loc_eng_msg_release_wifi(loc_api_handle, + type, + LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU, + (char*)pmsg->cmsg.cmsg_if_request.ssid, + (char*)pmsg->cmsg.cmsg_if_request.password)); + loc_eng_msg_sender(loc_api_handle, msg); + break; + } + case IF_REQUEST_SENDER_ID_GPSONE_DAEMON: + { + LOC_LOGD("IF_REQUEST_SENDER_ID_GPSONE_DAEMON"); + loc_eng_msg_release_bit *msg( new loc_eng_msg_release_bit(loc_api_handle, - pmsg->cmsg.cmsg_if_request.is_supl, + type, pmsg->cmsg.cmsg_if_request.ipv4_addr, (char*)pmsg->cmsg.cmsg_if_request.ipv6_addr)); loc_eng_msg_sender(loc_api_handle, msg); + break; + } + default: + { + LOC_LOGD("invalid IF_REQUEST_SENDER_ID!"); + return -1; + } + } #else - loc_eng_dmn_conn_loc_api_server_data_conn(GPSONE_LOC_API_IF_RELEASE_SUCCESS); + loc_eng_dmn_conn_loc_api_server_data_conn(LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON, GPSONE_LOC_API_IF_RELEASE_SUCCESS); #endif return 0; } diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.h b/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.h index 833e971b..1c0edd55 100644 --- a/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.h +++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -32,6 +32,13 @@ #include #include +//for SSID_BUF_SIZE +#include + +#ifndef SSID_BUF_SIZE + #define SSID_BUF_SIZE (32+1) +#endif + enum { /* 0x0 - 0xEF is reserved for daemon internal */ GPSONE_LOC_API_IF_REQUEST = 0xF0, @@ -55,10 +62,27 @@ struct ctrl_msg_unblock { int reserved; }; +typedef enum { + IF_REQUEST_TYPE_SUPL = 0, + IF_REQUEST_TYPE_WIFI, + IF_REQUEST_TYPE_ANY +} ctrl_if_req_type_e_type; + +typedef enum { + IF_REQUEST_SENDER_ID_QUIPC = 0, + IF_REQUEST_SENDER_ID_MSAPM, + IF_REQUEST_SENDER_ID_MSAPU, + IF_REQUEST_SENDER_ID_GPSONE_DAEMON, + IF_REQUEST_SENDER_ID_MODEM +} ctrl_if_req_sender_id_e_type; + struct ctrl_msg_if_request { - unsigned is_supl; /* 1: use Android SUPL connection; 0: use Android default internet connection */ + ctrl_if_req_type_e_type type; + ctrl_if_req_sender_id_e_type sender_id; unsigned long ipv4_addr; unsigned char ipv6_addr[16]; + char ssid[SSID_BUF_SIZE]; + char password[SSID_BUF_SIZE]; }; /* do not change this structure */ diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c b/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c index 478b686f..67e31879 100644 --- a/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c +++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.h b/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.h index 07869f90..89e598b5 100644 --- a/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.h +++ b/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api_50001/loc_eng_log.cpp b/loc_api/libloc_api_50001/loc_eng_log.cpp index d813cd65..895db1db 100644 --- a/loc_api/libloc_api_50001/loc_eng_log.cpp +++ b/loc_api/libloc_api_50001/loc_eng_log.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -31,7 +31,6 @@ #define LOG_TAG "LocSvc_eng" #include "hardware/gps.h" -#include "loc.h" #include "loc_log.h" #include "loc_eng_log.h" #include "loc_eng_msg_id.h" @@ -88,10 +87,27 @@ static loc_name_val_s_type loc_eng_msgs[] = NAME_VAL( LOC_ENG_MSG_RELEASE_ATL ), NAME_VAL( LOC_ENG_MSG_REQUEST_BIT ), NAME_VAL( LOC_ENG_MSG_RELEASE_BIT ), + NAME_VAL( LOC_ENG_MSG_REQUEST_WIFI ), + NAME_VAL( LOC_ENG_MSG_RELEASE_WIFI ), NAME_VAL( LOC_ENG_MSG_REQUEST_NI ), NAME_VAL( LOC_ENG_MSG_INFORM_NI_RESPONSE ), NAME_VAL( LOC_ENG_MSG_REQUEST_XTRA_DATA ), - NAME_VAL( LOC_ENG_MSG_REQUEST_TIME ) + NAME_VAL( LOC_ENG_MSG_REQUEST_TIME ), + NAME_VAL( LOC_ENG_MSG_EXT_POWER_CONFIG ), + NAME_VAL( LOC_ENG_MSG_REQUEST_POSITION ), + NAME_VAL( LOC_ENG_MSG_REQUEST_PHONE_CONTEXT ), + NAME_VAL( LOC_ENG_MSG_REQUEST_NETWORK_POSIITON ), + NAME_VAL( ULP_MSG_UPDATE_CRITERIA ), + NAME_VAL( ULP_MSG_START_FIX ), + NAME_VAL( ULP_MSG_STOP_FIX ), + NAME_VAL( ULP_MSG_INJECT_PHONE_CONTEXT_SETTINGS ), + NAME_VAL( ULP_MSG_INJECT_NETWORK_POSITION ), + NAME_VAL( ULP_MSG_REPORT_QUIPC_POSITION ), + NAME_VAL( ULP_MSG_REQUEST_COARSE_POSITION ), + NAME_VAL( ULP_MSG_MONITOR ), + NAME_VAL( LOC_ENG_MSG_LPP_CONFIG ), + NAME_VAL( ULP_MSG_INJECT_RAW_COMMAND ), + NAME_VAL( LOC_ENG_MSG_A_GLONASS_PROTOCOL ) }; static int loc_eng_msgs_num = sizeof(loc_eng_msgs) / sizeof(loc_name_val_s_type); @@ -111,7 +127,8 @@ static loc_name_val_s_type loc_eng_position_modes[] = NAME_VAL( LOC_POSITION_MODE_RESERVED_1 ), NAME_VAL( LOC_POSITION_MODE_RESERVED_2 ), NAME_VAL( LOC_POSITION_MODE_RESERVED_3 ), - NAME_VAL( LOC_POSITION_MODE_RESERVED_4 ) + NAME_VAL( LOC_POSITION_MODE_RESERVED_4 ), + NAME_VAL( LOC_POSITION_MODE_RESERVED_5 ) }; static int loc_eng_position_mode_num = sizeof(loc_eng_position_modes) / sizeof(loc_name_val_s_type); @@ -150,7 +167,7 @@ static loc_name_val_s_type loc_eng_aiding_data_bits[] = NAME_VAL( GPS_DELETE_SADATA ), NAME_VAL( GPS_DELETE_RTI ), NAME_VAL( GPS_DELETE_CELLDB_INFO ) -#ifdef QCOM_FEATURE_DELEXT +#ifdef FEATURE_DELEXT ,NAME_VAL( GPS_DELETE_ALMANAC_CORR ), NAME_VAL( GPS_DELETE_FREQ_BIAS_EST ), NAME_VAL( GPS_DELETE_EPHEMERIS_GLO ), @@ -172,13 +189,13 @@ const char* loc_get_aiding_data_mask_names(GpsAidingData data) static loc_name_val_s_type loc_eng_agps_types[] = { -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 NAME_VAL( AGPS_TYPE_INVALID ), NAME_VAL( AGPS_TYPE_ANY ), #endif NAME_VAL( AGPS_TYPE_SUPL ), NAME_VAL( AGPS_TYPE_C2K ) -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 ,NAME_VAL( AGPS_TYPE_WWAN_ANY ) #endif }; @@ -233,7 +250,7 @@ const char* loc_get_ni_encoding_name(GpsNiEncodingType encoding) return loc_get_name_from_val(loc_eng_ni_encodings, loc_eng_ni_encoding_num, (long) encoding); } -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 static loc_name_val_s_type loc_eng_agps_bears[] = { NAME_VAL( AGPS_APN_BEARER_INVALID ), diff --git a/loc_api/libloc_api_50001/loc_eng_log.h b/loc_api/libloc_api_50001/loc_eng_log.h index eff1593b..4ee978af 100644 --- a/loc_api/libloc_api_50001/loc_eng_log.h +++ b/loc_api/libloc_api_50001/loc_eng_log.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -37,7 +37,7 @@ extern "C" #include #include -#include "loc_eng_msg_id.h" +#include const char* loc_get_gps_status_name(GpsStatusValue gps_status); const char* loc_get_msg_name(int id); @@ -48,7 +48,7 @@ const char* loc_get_agps_type_name(AGpsType type); const char* loc_get_ni_type_name(GpsNiType type); const char* loc_get_ni_response_name(GpsUserResponseType response); const char* loc_get_ni_encoding_name(GpsNiEncodingType encoding); -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 const char* loc_get_agps_bear_name(AGpsBearerType bear); #endif const char* loc_get_server_type_name(LocServerType type); diff --git a/loc_api/libloc_api_50001/loc_eng_msg.cpp b/loc_api/libloc_api_50001/loc_eng_msg.cpp index 97c0457c..a296dce3 100644 --- a/loc_api/libloc_api_50001/loc_eng_msg.cpp +++ b/loc_api/libloc_api_50001/loc_eng_msg.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api_50001/loc_eng_msg.h b/loc_api/libloc_api_50001/loc_eng_msg.h index 41548f09..df7cc092 100644 --- a/loc_api/libloc_api_50001/loc_eng_msg.h +++ b/loc_api/libloc_api_50001/loc_eng_msg.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -31,18 +31,130 @@ #include +#include #include #include #include "log_util.h" #include "loc.h" -#include "loc_eng_log.h" +#include #include "loc_eng_msg_id.h" +#ifndef SSID_BUF_SIZE + #define SSID_BUF_SIZE (32+1) +#endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ +struct LocPosMode +{ + LocPositionMode mode; + GpsPositionRecurrence recurrence; + uint32_t min_interval; + uint32_t preferred_accuracy; + uint32_t preferred_time; + 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) : + mode(m), recurrence(recr), + min_interval(gap < MIN_POSSIBLE_FIX_INTERVAL ? MIN_POSSIBLE_FIX_INTERVAL : gap), + preferred_accuracy(accu), preferred_time(time) { + memset(credentials, 0, sizeof(credentials)); + memset(provider, 0, sizeof(provider)); + if (NULL != cred) { + memcpy(credentials, cred, sizeof(credentials)-1); + } + if (NULL != prov) { + memcpy(provider, prov, sizeof(provider)-1); + } + } + + LocPosMode() : + mode(LOC_POSITION_MODE_MS_BASED), recurrence(GPS_POSITION_RECURRENCE_PERIODIC), + min_interval(MIN_POSSIBLE_FIX_INTERVAL), preferred_accuracy(50), preferred_time(120000) { + memset(credentials, 0, sizeof(credentials)); + memset(provider, 0, sizeof(provider)); + } + + inline bool equals(const LocPosMode &anotherMode) const + { + return anotherMode.mode == mode && + anotherMode.recurrence == recurrence && + anotherMode.min_interval == min_interval && + anotherMode.preferred_accuracy == preferred_accuracy && + anotherMode.preferred_time == preferred_time && + !strncmp(anotherMode.credentials, credentials, sizeof(credentials)-1) && + !strncmp(anotherMode.provider, provider, sizeof(provider)-1); + } + + inline void logv() const + { + LOC_LOGV ("Position mode: %s\n Position recurrence: %s\n min interval: %d\n preferred accuracy: %d\n preferred time: %d\n credentials: %s provider: %s", + loc_get_position_mode_name(mode), + loc_get_position_recurrence_name(recurrence), + min_interval, + preferred_accuracy, + preferred_time, + credentials, + provider); + } +}; + +/** Flags to indicate which values are valid in a GpsLocationExtended. */ +typedef uint16_t GpsLocationExtendedFlags; +/** GpsLocationExtended has valid pdop, hdop, vdop. */ +#define GPS_LOCATION_EXTENDED_HAS_DOP 0x0001 +/** GpsLocationExtended has valid altitude mean sea level. */ +#define GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL 0x0002 +/** UlpLocation has valid magnetic deviation. */ +#define GPS_LOCATION_EXTENDED_HAS_MAG_DEV 0x0004 +/** UlpLocation has valid mode indicator. */ +#define GPS_LOCATION_EXTENDED_HAS_MODE_IND 0x0008 +/** GpsLocationExtended has valid vertical uncertainty */ +#define GPS_LOCATION_EXTENDED_HAS_VERT_UNC 0x0010 +/** GpsLocationExtended has valid speed uncertainty */ +#define GPS_LOCATION_EXTENDED_HAS_SPEED_UNC 0x0020 + +/** Represents gps location extended. */ +typedef struct { + /** set to sizeof(GpsLocationExtended) */ + size_t size; + /** Contains GpsLocationExtendedFlags bits. */ + uint16_t flags; + /** Contains the Altitude wrt mean sea level */ + float altitudeMeanSeaLevel; + /** Contains Position Dilusion of Precision. */ + float pdop; + /** Contains Horizontal Dilusion of Precision. */ + float hdop; + /** Contains Vertical Dilusion of Precision. */ + float vdop; + /** Contains Magnetic Deviation. */ + float magneticDeviation; + /** vertical uncertainty in meters */ + float vert_unc; + /** speed uncertainty in m/s */ + float speed_unc; +} GpsLocationExtended; + +typedef enum { + LOC_ENG_IF_REQUEST_TYPE_SUPL = 0, + LOC_ENG_IF_REQUEST_TYPE_WIFI, + LOC_ENG_IF_REQUEST_TYPE_ANY +} loc_if_req_type_e_type; + +typedef enum { + LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC = 0, + LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM, + LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU, + LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON, + LOC_ENG_IF_REQUEST_SENDER_ID_MODEM, + LOC_ENG_IF_REQUEST_SENDER_ID_UNKNOWN +} loc_if_req_sender_id_e_type; + struct loc_eng_msg { const void* owner; const int msgid; @@ -50,13 +162,24 @@ struct loc_eng_msg { owner(instance), msgid(id) { LOC_LOGV("creating msg %s", loc_get_msg_name(msgid)); + LOC_LOGV("creating msg ox%x", msgid); } virtual ~loc_eng_msg() { - LOC_LOGV("deleting msg %s", loc_get_msg_name(msgid)); + LOC_LOGV("deleting msg %s (0x%x)", loc_get_msg_name(msgid), msgid); } }; +struct loc_eng_msg_a_glonass_protocol : public loc_eng_msg { + const unsigned long a_glonass_protocol; + inline loc_eng_msg_a_glonass_protocol(void* instance, unsigned long protocol) : + loc_eng_msg(instance, LOC_ENG_MSG_A_GLONASS_PROTOCOL), + a_glonass_protocol(protocol) + { + LOC_LOGV("A-GLONASS protocol: 0x%lx", protocol); + } +}; + struct loc_eng_msg_suple_version : public loc_eng_msg { const int supl_version; inline loc_eng_msg_suple_version(void* instance, int version) : @@ -67,6 +190,26 @@ struct loc_eng_msg_suple_version : public loc_eng_msg { } }; +struct loc_eng_msg_lpp_config : public loc_eng_msg { + const int lpp_config; + inline loc_eng_msg_lpp_config(void *instance, int profile) : + loc_eng_msg(instance, LOC_ENG_MSG_LPP_CONFIG), + lpp_config(profile) + { + LOC_LOGV("lpp profile: %d", profile); + } +}; + +struct loc_eng_msg_ext_power_config : public loc_eng_msg { + const int isBatteryCharging; + inline loc_eng_msg_ext_power_config(void* instance, int isBattCharging) : + loc_eng_msg(instance, LOC_ENG_MSG_EXT_POWER_CONFIG), + isBatteryCharging(isBattCharging) + { + LOC_LOGV("isBatteryCharging: %d", isBatteryCharging); + } +}; + struct loc_eng_msg_sensor_control_config : public loc_eng_msg { const int sensorsDisabled; inline loc_eng_msg_sensor_control_config(void* instance, int disabled) : @@ -78,12 +221,51 @@ struct loc_eng_msg_sensor_control_config : public loc_eng_msg { }; struct loc_eng_msg_sensor_properties : public loc_eng_msg { + const bool gyroBiasVarianceRandomWalk_valid; const float gyroBiasVarianceRandomWalk; - inline loc_eng_msg_sensor_properties(void* instance, float gyroBiasRandomWalk) : + const bool accelRandomWalk_valid; + const float accelRandomWalk; + const bool angleRandomWalk_valid; + const float angleRandomWalk; + const bool rateRandomWalk_valid; + const float rateRandomWalk; + const bool velocityRandomWalk_valid; + const float velocityRandomWalk; + inline loc_eng_msg_sensor_properties(void* instance, bool gyroBiasRandomWalk_valid, float gyroBiasRandomWalk, + bool accelRandomWalk_valid, float accelRandomWalk, + bool angleRandomWalk_valid, float angleRandomWalk, + bool rateRandomWalk_valid, float rateRandomWalk, + bool velocityRandomWalk_valid, float velocityRandomWalk) : loc_eng_msg(instance, LOC_ENG_MSG_SET_SENSOR_PROPERTIES), - gyroBiasVarianceRandomWalk(gyroBiasRandomWalk) + gyroBiasVarianceRandomWalk_valid(gyroBiasRandomWalk_valid), + gyroBiasVarianceRandomWalk(gyroBiasRandomWalk), + accelRandomWalk_valid(accelRandomWalk_valid), + accelRandomWalk(accelRandomWalk), + angleRandomWalk_valid(angleRandomWalk_valid), + angleRandomWalk(angleRandomWalk), + rateRandomWalk_valid(rateRandomWalk_valid), + rateRandomWalk(rateRandomWalk), + velocityRandomWalk_valid(velocityRandomWalk_valid), + velocityRandomWalk(velocityRandomWalk) { - LOC_LOGV("Gyro Bias Random Walk: %f", gyroBiasRandomWalk); + LOC_LOGV("Sensor properties validity, Gyro Random walk: %d Accel Random Walk: %d " + "Angle Random Walk: %d Rate Random Walk: %d " + "Velocity Random Walk: %d", + gyroBiasRandomWalk_valid, + accelRandomWalk_valid, + angleRandomWalk_valid, + rateRandomWalk_valid, + velocityRandomWalk_valid + ); + LOC_LOGV("Sensor properties, Gyro Random walk: %f Accel Random Walk: %f " + "Angle Random Walk: %f Rate Random Walk: %f " + "Velocity Random Walk: %f", + gyroBiasRandomWalk, + accelRandomWalk, + angleRandomWalk, + rateRandomWalk, + velocityRandomWalk + ); } }; @@ -93,55 +275,56 @@ struct loc_eng_msg_sensor_perf_control_config : public loc_eng_msg { const int accelBatchesPerSec; const int gyroSamplesPerBatch; const int gyroBatchesPerSec; + const int accelSamplesPerBatchHigh; + const int accelBatchesPerSecHigh; + const int gyroSamplesPerBatchHigh; + const int gyroBatchesPerSecHigh; + const int algorithmConfig; inline loc_eng_msg_sensor_perf_control_config(void* instance, int controlMode, int accelSamplesPerBatch, int accelBatchesPerSec, - int gyroSamplesPerBatch, int gyroBatchesPerSec) : + int gyroSamplesPerBatch, int gyroBatchesPerSec, + int accelSamplesPerBatchHigh, int accelBatchesPerSecHigh, + int gyroSamplesPerBatchHigh, int gyroBatchesPerSecHigh, + int algorithmConfig) : loc_eng_msg(instance, LOC_ENG_MSG_SET_SENSOR_PERF_CONTROL_CONFIG), controlMode(controlMode), accelSamplesPerBatch(accelSamplesPerBatch), accelBatchesPerSec(accelBatchesPerSec), gyroSamplesPerBatch(gyroSamplesPerBatch), - gyroBatchesPerSec(gyroBatchesPerSec) + gyroBatchesPerSec(gyroBatchesPerSec), + accelSamplesPerBatchHigh(accelSamplesPerBatchHigh), + accelBatchesPerSecHigh(accelBatchesPerSecHigh), + gyroSamplesPerBatchHigh(gyroSamplesPerBatchHigh), + gyroBatchesPerSecHigh(gyroBatchesPerSecHigh), + algorithmConfig(algorithmConfig) { LOC_LOGV("Sensor Perf Control Config (performanceControlMode)(%u) " - "accel(#smp,#batches) (%u,%u) gyro(#smp,#batches) (%u,%u)\n", + "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", controlMode, accelSamplesPerBatch, accelBatchesPerSec, gyroSamplesPerBatch, - gyroBatchesPerSec + gyroBatchesPerSec, + accelSamplesPerBatchHigh, + accelBatchesPerSecHigh, + gyroSamplesPerBatchHigh, + gyroBatchesPerSecHigh, + algorithmConfig ); } }; struct loc_eng_msg_position_mode : public loc_eng_msg { - const LocPositionMode pMode; - const GpsPositionRecurrence pRecurrence; - const uint32_t minInterval; - const uint32_t preferredAccuracy; - const uint32_t preferredTime; - inline loc_eng_msg_position_mode() : - loc_eng_msg(NULL, LOC_ENG_MSG_SET_POSITION_MODE), - pMode(LOC_POSITION_MODE_STANDALONE), - pRecurrence(0), minInterval(0), - preferredAccuracy(0), preferredTime(0) {} + const LocPosMode pMode; inline loc_eng_msg_position_mode(void* instance, - LocPositionMode mode, - GpsPositionRecurrence recurrence, - uint32_t min_interval, - uint32_t preferred_accuracy, - uint32_t preferred_time) : + LocPosMode &mode) : loc_eng_msg(instance, LOC_ENG_MSG_SET_POSITION_MODE), - pMode(mode), pRecurrence(recurrence), minInterval(min_interval), - preferredAccuracy(preferred_accuracy), preferredTime(preferred_time) + pMode(mode) { - LOC_LOGV("Position mode: %s\n Position recurrence: %s\n min interval: %d\n preferred accuracy: %d\n preferred time: %d", - loc_get_position_mode_name(pMode), - loc_get_position_recurrence_name(pRecurrence), - minInterval, - preferredAccuracy, - preferredTime); + pMode.logv(); } }; @@ -185,34 +368,45 @@ struct loc_eng_msg_delete_aiding_data : public loc_eng_msg { }; struct loc_eng_msg_report_position : public loc_eng_msg { - const GpsLocation location; + const UlpLocation location; + const GpsLocationExtended locationExtended; const void* locationExt; const enum loc_sess_status status; - inline loc_eng_msg_report_position(void* instance, GpsLocation &loc, void* locExt, + const LocPosTechMask technology_mask; + inline loc_eng_msg_report_position(void* instance, UlpLocation &loc, GpsLocationExtended &locExtended, void* locExt, enum loc_sess_status st) : loc_eng_msg(instance, LOC_ENG_MSG_REPORT_POSITION), - location(loc), locationExt(locExt), status(st) + location(loc), locationExtended(locExtended), locationExt(locExt), status(st), technology_mask(LOC_POS_TECH_MASK_DEFAULT) { -#ifdef QCOM_FEATURE_ULP - LOC_LOGV("flags: %d\n source: %d\n latitude: %f\n longitude: %f\n altitude: %f\n speed: %f\n bearing: %f\n accuracy: %f\n timestamp: %lld\n rawDataSize: %d\n rawData: %p\n Session status: %s", - location.flags, location.position_source, location.latitude, location.longitude, - location.altitude, location.speed, location.bearing, location.accuracy, - location.timestamp, location.rawDataSize, location.rawData, - loc_get_position_sess_status_name(status)); -#else - LOC_LOGV("flags: %d\n latitude: %f\n longitude: %f\n altitude: %f\n speed: %f\n bearing: %f\n accuracy: %f\n timestamp: %lld\n Session status: %s", - location.flags, location.latitude, location.longitude, - location.altitude, location.speed, location.bearing, location.accuracy, - location.timestamp, loc_get_position_sess_status_name(status)); -#endif + LOC_LOGV("flags: %d\n source: %d\n latitude: %f\n longitude: %f\n altitude: %f\n speed: %f\n bearing: %f\n accuracy: %f\n timestamp: %lld\n rawDataSize: %d\n rawData: %p\n Session status: %d\n Technology mask: %u", + location.gpsLocation.flags, location.position_source, + location.gpsLocation.latitude, location.gpsLocation.longitude, + location.gpsLocation.altitude, location.gpsLocation.speed, + location.gpsLocation.bearing, location.gpsLocation.accuracy, + location.gpsLocation.timestamp, location.rawDataSize, + location.rawData,status,technology_mask); + } + inline loc_eng_msg_report_position(void* instance, UlpLocation &loc, GpsLocationExtended &locExtended, void* locExt, + enum loc_sess_status st, LocPosTechMask technology) : + loc_eng_msg(instance, LOC_ENG_MSG_REPORT_POSITION), + location(loc), locationExtended(locExtended), locationExt(locExt), status(st), technology_mask(technology) + { + LOC_LOGV("flags: %d\n source: %d\n latitude: %f\n longitude: %f\n altitude: %f\n speed: %f\n bearing: %f\n accuracy: %f\n timestamp: %lld\n rawDataSize: %d\n rawData: %p\n Session status: %d\n Technology mask: %u", + location.gpsLocation.flags, location.position_source, + location.gpsLocation.latitude, location.gpsLocation.longitude, + location.gpsLocation.altitude, location.gpsLocation.speed, + location.gpsLocation.bearing, location.gpsLocation.accuracy, + location.gpsLocation.timestamp, location.rawDataSize, + location.rawData,status,technology_mask); } }; struct loc_eng_msg_report_sv : public loc_eng_msg { const GpsSvStatus svStatus; + const GpsLocationExtended locationExtended; const void* svExt; - inline loc_eng_msg_report_sv(void* instance, GpsSvStatus &sv, void* ext) : - loc_eng_msg(instance, LOC_ENG_MSG_REPORT_SV), svStatus(sv), svExt(ext) + inline loc_eng_msg_report_sv(void* instance, GpsSvStatus &sv, GpsLocationExtended &locExtended, void* ext) : + loc_eng_msg(instance, LOC_ENG_MSG_REPORT_SV), svStatus(sv), locationExtended(locExtended), svExt(ext) { LOC_LOGV("num sv: %d\n ephemeris mask: %dxn almanac mask: %x\n used in fix mask: %x\n sv: prn snr elevation azimuth", svStatus.num_svs, svStatus.ephemeris_mask, svStatus.almanac_mask, svStatus.used_in_fix_mask); @@ -256,23 +450,23 @@ struct loc_eng_msg_report_nmea : public loc_eng_msg { }; struct loc_eng_msg_request_bit : public loc_eng_msg { - const unsigned int isSupl; + const loc_if_req_type_e_type ifType; const int ipv4Addr; char* const ipv6Addr; inline loc_eng_msg_request_bit(void* instance, - unsigned int is_supl, + loc_if_req_type_e_type type, int ipv4, char* ipv6) : loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_BIT), - isSupl(is_supl), ipv4Addr(ipv4), + ifType(type), ipv4Addr(ipv4), ipv6Addr(NULL == ipv6 ? NULL : new char[16]) { if (NULL != ipv6Addr) memcpy(ipv6Addr, ipv6, 16); - LOC_LOGV("isSupl: %d, ipv4: %d.%d.%d.%d, ipv6: %s", isSupl, - (unsigned char)ipv4>>24, - (unsigned char)ipv4>>16, - (unsigned char)ipv4>>8, + LOC_LOGV("ifType: %d, ipv4: %d.%d.%d.%d, ipv6: %s", ifType, + (unsigned char)(ipv4>>24), + (unsigned char)(ipv4>>16), + (unsigned char)(ipv4>>8), (unsigned char)ipv4, NULL != ipv6Addr ? ipv6Addr : ""); } @@ -285,24 +479,61 @@ struct loc_eng_msg_request_bit : public loc_eng_msg { } }; +struct loc_eng_msg_request_wifi : public loc_eng_msg { + const loc_if_req_type_e_type ifType; + const loc_if_req_sender_id_e_type senderId; + char* const ssid; + char* const password; + inline loc_eng_msg_request_wifi(void* instance, + loc_if_req_type_e_type type, + loc_if_req_sender_id_e_type sender_id, + char* s, + char* p) : + loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_WIFI), + ifType(type), senderId(sender_id), + ssid(NULL == s ? NULL : new char[SSID_BUF_SIZE]), + password(NULL == p ? NULL : new char[SSID_BUF_SIZE]) + { + if (NULL != ssid) + strlcpy(ssid, s, SSID_BUF_SIZE); + if (NULL != password) + strlcpy(password, p, SSID_BUF_SIZE); + LOC_LOGV("ifType: %d, senderId: %d, ssid: %s, password: %s", + ifType, + senderId, + NULL != ssid ? ssid : "", + NULL != password ? password : ""); + } + + inline ~loc_eng_msg_request_wifi() + { + if (NULL != ssid) { + delete[] ssid; + } + if (NULL != password) { + delete[] password; + } + } +}; + struct loc_eng_msg_release_bit : public loc_eng_msg { - const unsigned int isSupl; + const loc_if_req_type_e_type ifType; const int ipv4Addr; char* const ipv6Addr; inline loc_eng_msg_release_bit(void* instance, - unsigned int is_supl, + loc_if_req_type_e_type type, int ipv4, char* ipv6) : loc_eng_msg(instance, LOC_ENG_MSG_RELEASE_BIT), - isSupl(is_supl), ipv4Addr(ipv4), + ifType(type), ipv4Addr(ipv4), ipv6Addr(NULL == ipv6 ? NULL : new char[16]) { if (NULL != ipv6Addr) memcpy(ipv6Addr, ipv6, 16); - LOC_LOGV("isSupl: %d, ipv4: %d.%d.%d.%d, ipv6: %s", isSupl, - (unsigned char)ipv4>>24, - (unsigned char)ipv4>>16, - (unsigned char)ipv4>>8, + LOC_LOGV("ifType: %d, ipv4: %d.%d.%d.%d, ipv6: %s", ifType, + (unsigned char)(ipv4>>24), + (unsigned char)(ipv4>>16), + (unsigned char)(ipv4>>8), (unsigned char)ipv4, NULL != ipv6Addr ? ipv6Addr : ""); } @@ -315,6 +546,43 @@ struct loc_eng_msg_release_bit : public loc_eng_msg { } }; +struct loc_eng_msg_release_wifi : public loc_eng_msg { + const loc_if_req_type_e_type ifType; + const loc_if_req_sender_id_e_type senderId; + char* const ssid; + char* const password; + inline loc_eng_msg_release_wifi(void* instance, + loc_if_req_type_e_type type, + loc_if_req_sender_id_e_type sender_id, + char* s, + char* p) : + loc_eng_msg(instance, LOC_ENG_MSG_RELEASE_WIFI), + ifType(type), senderId(sender_id), + ssid(NULL == s ? NULL : new char[SSID_BUF_SIZE]), + password(NULL == p ? NULL : new char[SSID_BUF_SIZE]) + { + if (NULL != s) + strlcpy(ssid, s, SSID_BUF_SIZE); + if (NULL != p) + strlcpy(password, p, SSID_BUF_SIZE); + LOC_LOGV("ifType: %d, senderId: %d, ssid: %s, password: %s", + ifType, + senderId, + NULL != ssid ? ssid : "", + NULL != password ? password : ""); + } + + inline ~loc_eng_msg_release_wifi() + { + if (NULL != ssid) { + delete[] ssid; + } + if (NULL != password) { + delete[] password; + } + } +}; + struct loc_eng_msg_request_atl : public loc_eng_msg { const int handle; const AGpsType type; @@ -452,7 +720,7 @@ struct loc_eng_msg_inject_xtra_data : public loc_eng_msg { } }; -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 struct loc_eng_msg_atl_open_success : public loc_eng_msg { const AGpsStatusValue agpsType; const int length; @@ -502,7 +770,7 @@ struct loc_eng_msg_atl_open_success : public loc_eng_msg { }; #endif -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 struct loc_eng_msg_atl_open_failed : public loc_eng_msg { const AGpsStatusValue agpsType; inline loc_eng_msg_atl_open_failed(void* instance, @@ -524,7 +792,7 @@ struct loc_eng_msg_atl_open_failed : public loc_eng_msg { }; #endif -#ifdef QCOM_FEATURE_IPV6 +#ifdef FEATURE_IPV6 struct loc_eng_msg_atl_closed : public loc_eng_msg { const AGpsStatusValue agpsType; inline loc_eng_msg_atl_closed(void* instance, @@ -567,6 +835,118 @@ struct loc_eng_msg_set_data_enable : public loc_eng_msg { } }; +struct loc_eng_msg_request_network_position : public loc_eng_msg { + const UlpNetworkRequestPos networkPosRequest; + inline loc_eng_msg_request_network_position (void* instance, UlpNetworkRequestPos networkPosReq) : + loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_NETWORK_POSIITON), + networkPosRequest(networkPosReq) + { + LOC_LOGV("network position request: desired pos source %d\n request type: %d\n interval ms: %d ", + networkPosReq.desired_position_source, + networkPosReq.request_type, + networkPosReq.interval_ms); + } +}; + +struct loc_eng_msg_request_phone_context : public loc_eng_msg { + const UlpPhoneContextRequest contextRequest; + inline loc_eng_msg_request_phone_context (void* instance, UlpPhoneContextRequest contextReq) : + loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_PHONE_CONTEXT), + contextRequest(contextReq) + { + LOC_LOGV("phone context request: request type 0x%x context type: 0x%x ", + contextRequest.request_type, + contextRequest.context_type); + } +}; + +struct ulp_msg_update_criteria : public loc_eng_msg { + const UlpLocationCriteria locationCriteria; + inline ulp_msg_update_criteria (void* instance, UlpLocationCriteria criteria) : + loc_eng_msg(instance, ULP_MSG_UPDATE_CRITERIA), + locationCriteria(criteria) + { + LOC_LOGV("location criteria: aciton %d\n valid mask: %d\n provider source: %d\n accuracy %d\n recurrence type %d\n min interval %d\n power consumption %d\n intermediate pos %d ", + locationCriteria.action, + locationCriteria.valid_mask, + locationCriteria.provider_source, + locationCriteria.preferred_horizontal_accuracy, + locationCriteria.recurrence_type, + locationCriteria.min_interval, + locationCriteria.preferred_power_consumption, + locationCriteria.intermediate_pos_report_enabled); + } +}; + +struct ulp_msg_inject_raw_command : public loc_eng_msg { + const char* rawCommand; + const int rawCommandLength; + inline ulp_msg_inject_raw_command (void* instance, char* command, int length) : + loc_eng_msg(instance, ULP_MSG_INJECT_RAW_COMMAND), + rawCommand(new char[length]), + rawCommandLength(length) + { + memcpy((void*)rawCommand, (void*)command, length); + LOC_LOGV("inject raw command: command %s\n command length: %d\n ", + rawCommand, + rawCommandLength); + } + + inline ~ulp_msg_inject_raw_command() + { + delete[] rawCommand; + } +}; + +struct ulp_msg_inject_phone_context_settings : public loc_eng_msg { + const UlpPhoneContextSettings phoneSetting; + inline ulp_msg_inject_phone_context_settings(void* instance, UlpPhoneContextSettings setting) : + loc_eng_msg(instance, ULP_MSG_INJECT_PHONE_CONTEXT_SETTINGS), + phoneSetting(setting) + { + LOC_LOGV("context type: %d\n gps enabled: %d\n network position available %d\n wifi setting enabled %d\n battery charging %d" + "is_agps_setting_enabled %d, is_enh_location_services_enabled %d\n", + phoneSetting.context_type, + phoneSetting.is_gps_enabled, + phoneSetting.is_network_position_available, + phoneSetting.is_wifi_setting_enabled, + phoneSetting.is_battery_charging, + phoneSetting.is_agps_enabled, + phoneSetting.is_enh_location_services_enabled); + } +}; + +struct ulp_msg_inject_network_position : public loc_eng_msg { + const UlpNetworkPositionReport networkPosition; + inline ulp_msg_inject_network_position(void* instance, UlpNetworkPositionReport networkPos) : + loc_eng_msg(instance, ULP_MSG_INJECT_NETWORK_POSITION), + networkPosition(networkPos) + { + LOC_LOGV("flags: %d\n source: %d\n latitude: %f\n longitude: %f\n accuracy %f", + networkPosition.valid_flag, + networkPosition.position.pos_source, + networkPosition.position.latitude, + networkPosition.position.longitude, + networkPosition.position.HEPE); + } +}; + +struct ulp_msg_report_quipc_position : public loc_eng_msg { + const UlpLocation location; + const int quipc_error_code; + inline ulp_msg_report_quipc_position(void* instance, UlpLocation &loc, + int quipc_err) : + loc_eng_msg(instance, ULP_MSG_REPORT_QUIPC_POSITION), + location(loc), quipc_error_code(quipc_err) + { + LOC_LOGV("flags: %d\n source: %d\n latitude: %f\n longitude: %f\n altitude: %f\n speed: %f\n bearing: %f\n accuracy: %f\n timestamp: %lld\n rawDataSize: %d\n rawData: %p\n Quipc error: %d", + location.gpsLocation.flags, location.position_source, location.gpsLocation.latitude, location.gpsLocation.longitude, + location.gpsLocation.altitude, location.gpsLocation.speed, location.gpsLocation.bearing, location.gpsLocation.accuracy, + location.gpsLocation.timestamp, location.rawDataSize, location.rawData, + quipc_error_code); + } +}; + void loc_eng_msg_sender(void* loc_eng_data_p, void* msg); int loc_eng_msgget(int * p_req_msgq); int loc_eng_msgremove(int req_msgq); diff --git a/loc_api/libloc_api_50001/loc_eng_msg_id.h b/loc_api/libloc_api_50001/loc_eng_msg_id.h index f05f1f44..bcdf2969 100644 --- a/loc_api/libloc_api_50001/loc_eng_msg_id.h +++ b/loc_api/libloc_api_50001/loc_eng_msg_id.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -76,11 +76,61 @@ enum loc_eng_msg_ids_t { LOC_ENG_MSG_RELEASE_BIT, LOC_ENG_MSG_REQUEST_ATL, LOC_ENG_MSG_RELEASE_ATL, + LOC_ENG_MSG_REQUEST_WIFI, + LOC_ENG_MSG_RELEASE_WIFI, LOC_ENG_MSG_REQUEST_NI, LOC_ENG_MSG_INFORM_NI_RESPONSE, LOC_ENG_MSG_REQUEST_XTRA_DATA, LOC_ENG_MSG_REQUEST_TIME, - LOC_ENG_MSG_REQUEST_POSITION + LOC_ENG_MSG_REQUEST_POSITION, + LOC_ENG_MSG_EXT_POWER_CONFIG, + + // The following messages are added for ulp + LOC_ENG_MSG_REQUEST_PHONE_CONTEXT, + LOC_ENG_MSG_REQUEST_NETWORK_POSIITON, + + /* Following messages are for ulp, start at index 0x600 */ + + // Message is sent by GPS HAL layer to add/remove unique request criteria + ULP_MSG_UPDATE_CRITERIA = 0x600, + + // Message is sent by GPS HAL layer to request ULP to start producing position fixes + + ULP_MSG_START_FIX, + + // Message is sent by Android framework(GpsLocationProvider) + // to request ULP to stop producing position fixes + ULP_MSG_STOP_FIX, + + // Message is sent by Android framework(GpsLocationProvider) + // to inject phone context setting include initial phone context setting and subsequent changes + ULP_MSG_INJECT_PHONE_CONTEXT_SETTINGS, + + // Message is sent by network provider to INJECT the position in UlpNetworkPositionReport format + ULP_MSG_INJECT_NETWORK_POSITION, + + // Message is sent by QUIPC provider in order to report the position in GpsPosition format with QUIPC status + ULP_MSG_REPORT_QUIPC_POSITION, + + // Message is sent by QUIPC module in order to request some info from ULP + ULP_MSG_REQUEST_COARSE_POSITION, + + // Message is sent to ULP module to re-evaluate its subsystems + ULP_MSG_MONITOR, + + // Last ULP MSG + ULP_MSG_LAST = 0x700, + + /* Message is sent by HAL to LOC API to configure LTE Positioning + Profile in modem */ + LOC_ENG_MSG_LPP_CONFIG, + + // Message is sent by Android framework (GpsLocationProvider) + // to inject the raw command + ULP_MSG_INJECT_RAW_COMMAND, + + /* Message is sent by HAL to LOC API to select A-GLONASS protocol */ + LOC_ENG_MSG_A_GLONASS_PROTOCOL, }; #ifdef __cplusplus diff --git a/loc_api/libloc_api_50001/loc_eng_ni.cpp b/loc_api/libloc_api_50001/loc_eng_ni.cpp index c2d78af8..146b15b5 100644 --- a/loc_api/libloc_api_50001/loc_eng_ni.cpp +++ b/loc_api/libloc_api_50001/loc_eng_ni.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -249,7 +249,9 @@ void loc_eng_ni_init(loc_eng_data_s_type &loc_eng_data, GpsNiCallbacks *callback { ENTRY_LOG_CALLFLOW(); - if (NULL == callbacks->notify_cb) { + if(callbacks == NULL) + EXIT_LOG(%s, "loc_eng_ni_init: failed, cb is NULL"); + else if (NULL == callbacks->notify_cb) { EXIT_LOG(%s, "loc_eng_ni_init: failed, no cb."); } else if (NULL != loc_eng_data.ni_notify_cb) { EXIT_LOG(%s, "loc_eng_ni_init: already inited."); diff --git a/loc_api/libloc_api_50001/loc_eng_ni.h b/loc_api/libloc_api_50001/loc_eng_ni.h index 9b1c5f34..9cbc57dc 100644 --- a/loc_api/libloc_api_50001/loc_eng_ni.h +++ b/loc_api/libloc_api_50001/loc_eng_ni.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009,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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api_50001/loc_eng_nmea.cpp b/loc_api/libloc_api_50001/loc_eng_nmea.cpp new file mode 100644 index 00000000..9f087ca5 --- /dev/null +++ b/loc_api/libloc_api_50001/loc_eng_nmea.cpp @@ -0,0 +1,703 @@ +/* Copyright (c) 2012, 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_NDDEBUG 0 +#define LOG_TAG "LocSvc_eng_nmea" + +#include +#include +#include +#include "log_util.h" + +/*=========================================================================== +FUNCTION loc_eng_nmea_send + +DESCRIPTION + send out NMEA sentence + +DEPENDENCIES + NONE + +RETURN VALUE + Total length of the nmea sentence + +SIDE EFFECTS + N/A + +===========================================================================*/ +void loc_eng_nmea_send(char *pNmea, int length, loc_eng_data_s_type *loc_eng_data_p) +{ + 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); + loc_eng_data_p->nmea_cb(now, pNmea, length); + LOC_LOGD("NMEA <%s", pNmea); +} + +/*=========================================================================== +FUNCTION loc_eng_nmea_put_checksum + +DESCRIPTION + Generate NMEA sentences generated based on position report + +DEPENDENCIES + NONE + +RETURN VALUE + Total length of the nmea sentence + +SIDE EFFECTS + N/A + +===========================================================================*/ +int loc_eng_nmea_put_checksum(char *pNmea, int maxSize) +{ + uint8_t checksum = 0; + int length = 0; + + pNmea++; //skip the $ + while (*pNmea != '\0') + { + checksum ^= *pNmea++; + length++; + } + + int checksumLength = snprintf(pNmea,(maxSize-length-1),"*%02X\r\n", checksum); + return (length + checksumLength); +} + +/*=========================================================================== +FUNCTION loc_eng_nmea_generate_pos + +DESCRIPTION + Generate NMEA sentences generated based on position report + +DEPENDENCIES + NONE + +RETURN VALUE + 0 + +SIDE EFFECTS + N/A + +===========================================================================*/ +void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p, + const UlpLocation &location, const GpsLocationExtended &locationExtended) +{ + ENTRY_LOG(); + + char sentence[NMEA_SENTENCE_MAX_LENGTH] = {0}; + char* pMarker = sentence; + int lengthRemaining = sizeof(sentence); + int length = 0; + + time_t utcTime(location.gpsLocation.timestamp/1000); + tm * pTm = gmtime(&utcTime); + int utcYear = pTm->tm_year % 100; // 2 digit year + int utcMonth = pTm->tm_mon + 1; // tm_mon starts at zero + int utcDay = pTm->tm_mday; + int utcHours = pTm->tm_hour; + int utcMinutes = pTm->tm_min; + int utcSeconds = pTm->tm_sec; + + // ------------------ + // ------$GPGSA------ + // ------------------ + + uint32_t svUsedCount = 0; + uint32_t svUsedList[32] = {0}; + uint32_t mask = loc_eng_data_p->sv_used_mask; + for (uint8_t i = 1; mask > 0 && svUsedCount < 32; i++) + { + if (mask & 1) + svUsedList[svUsedCount++] = i; + mask = mask >> 1; + } + // clear the cache so they can't be used again + loc_eng_data_p->sv_used_mask = 0; + + char fixType; + if (svUsedCount == 0) + fixType = '1'; // no fix + else if (svUsedCount <= 3) + fixType = '2'; // 2D fix + else + fixType = '3'; // 3D fix + + length = snprintf(pMarker, lengthRemaining, "$GPGSA,A,%c,", fixType); + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + for (uint8_t i = 0; i < 12; i++) // only the first 12 sv go in sentence + { + if (i < svUsedCount) + length = snprintf(pMarker, lengthRemaining, "%02d,", svUsedList[i]); + else + length = snprintf(pMarker, lengthRemaining, ","); + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + } + + 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, ",,"); + } + + length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence)); + loc_eng_nmea_send(sentence, length, loc_eng_data_p); + + // ------------------ + // ------$GPVTG------ + // ------------------ + + pMarker = sentence; + lengthRemaining = sizeof(sentence); + + if (location.gpsLocation.flags & GPS_LOCATION_HAS_BEARING) + { + float magTrack = location.gpsLocation.bearing; + if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_MAG_DEV) + { + float magTrack = location.gpsLocation.bearing - locationExtended.magneticDeviation; + if (magTrack < 0.0) + magTrack += 360.0; + else if (magTrack > 360.0) + magTrack -= 360.0; + } + + length = snprintf(pMarker, lengthRemaining, "$GPVTG,%.1lf,T,%.1lf,M,", location.gpsLocation.bearing, magTrack); + } + else + { + length = snprintf(pMarker, lengthRemaining, "$GPVTG,,T,,M,"); + } + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + if (location.gpsLocation.flags & GPS_LOCATION_HAS_SPEED) + { + float speedKnots = location.gpsLocation.speed * (3600.0/1852.0); + float speedKmPerHour = location.gpsLocation.speed * 3.6; + + length = snprintf(pMarker, lengthRemaining, "%.1lf,N,%.1lf,K,", speedKnots, speedKmPerHour); + } + else + { + length = snprintf(pMarker, lengthRemaining, ",N,,K,"); + } + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + if (!(location.gpsLocation.flags & GPS_LOCATION_HAS_LAT_LONG)) + length = snprintf(pMarker, lengthRemaining, "%c", 'N'); // N means no fix + else if (LOC_POSITION_MODE_STANDALONE == loc_eng_data_p->client_handle->getPositionMode().mode) + length = snprintf(pMarker, lengthRemaining, "%c", 'A'); // A means autonomous + else + length = snprintf(pMarker, lengthRemaining, "%c", 'D'); // D means differential + + length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence)); + loc_eng_nmea_send(sentence, length, loc_eng_data_p); + + // ------------------ + // ------$GPRMC------ + // ------------------ + + pMarker = sentence; + lengthRemaining = sizeof(sentence); + + length = snprintf(pMarker, lengthRemaining, "$GPRMC,%02d%02d%02d,A," , + utcHours, utcMinutes, utcSeconds); + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + if (location.gpsLocation.flags & GPS_LOCATION_HAS_LAT_LONG) + { + double latitude = location.gpsLocation.latitude; + double longitude = location.gpsLocation.longitude; + char latHemisphere; + char lonHemisphere; + double latMinutes; + double lonMinutes; + + if (latitude > 0) + { + latHemisphere = 'N'; + } + else + { + latHemisphere = 'S'; + latitude *= -1.0; + } + + if (longitude < 0) + { + lonHemisphere = 'W'; + longitude *= -1.0; + } + else + { + lonHemisphere = 'E'; + } + + latMinutes = fmod(latitude * 60.0 , 60.0); + lonMinutes = fmod(longitude * 60.0 , 60.0); + + length = snprintf(pMarker, lengthRemaining, "%02d%09.6lf,%c,%03d%09.6lf,%c,", + (uint8_t)floor(latitude), latMinutes, latHemisphere, + (uint8_t)floor(longitude),lonMinutes, lonHemisphere); + } + else + { + length = snprintf(pMarker, lengthRemaining,",,,,"); + } + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + if (location.gpsLocation.flags & GPS_LOCATION_HAS_SPEED) + { + float speedKnots = location.gpsLocation.speed * (3600.0/1852.0); + length = snprintf(pMarker, lengthRemaining, "%.1lf,", speedKnots); + } + else + { + length = snprintf(pMarker, lengthRemaining, ","); + } + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + if (location.gpsLocation.flags & GPS_LOCATION_HAS_BEARING) + { + length = snprintf(pMarker, lengthRemaining, "%.1lf,", location.gpsLocation.bearing); + } + else + { + length = snprintf(pMarker, lengthRemaining, ","); + } + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + length = snprintf(pMarker, lengthRemaining, "%2.2d%2.2d%2.2d,", + utcDay, utcMonth, utcYear); + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_MAG_DEV) + { + float magneticVariation = locationExtended.magneticDeviation; + char direction; + if (magneticVariation < 0.0) + { + direction = 'W'; + magneticVariation *= -1.0; + } + else + { + direction = 'E'; + } + + length = snprintf(pMarker, lengthRemaining, "%.1lf,%c,", + magneticVariation, direction); + } + else + { + length = snprintf(pMarker, lengthRemaining, ",,"); + } + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + if (!(location.gpsLocation.flags & GPS_LOCATION_HAS_LAT_LONG)) + length = snprintf(pMarker, lengthRemaining, "%c", 'N'); // N means no fix + else if (LOC_POSITION_MODE_STANDALONE == loc_eng_data_p->client_handle->getPositionMode().mode) + length = snprintf(pMarker, lengthRemaining, "%c", 'A'); // A means autonomous + else + length = snprintf(pMarker, lengthRemaining, "%c", 'D'); // D means differential + + length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence)); + loc_eng_nmea_send(sentence, length, loc_eng_data_p); + + // ------------------ + // ------$GPGGA------ + // ------------------ + + pMarker = sentence; + lengthRemaining = sizeof(sentence); + + length = snprintf(pMarker, lengthRemaining, "$GPGGA,%02d%02d%02d," , + utcHours, utcMinutes, utcSeconds); + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + if (location.gpsLocation.flags & GPS_LOCATION_HAS_LAT_LONG) + { + double latitude = location.gpsLocation.latitude; + double longitude = location.gpsLocation.longitude; + char latHemisphere; + char lonHemisphere; + double latMinutes; + double lonMinutes; + + if (latitude > 0) + { + latHemisphere = 'N'; + } + else + { + latHemisphere = 'S'; + latitude *= -1.0; + } + + if (longitude < 0) + { + lonHemisphere = 'W'; + longitude *= -1.0; + } + else + { + lonHemisphere = 'E'; + } + + latMinutes = fmod(latitude * 60.0 , 60.0); + lonMinutes = fmod(longitude * 60.0 , 60.0); + + length = snprintf(pMarker, lengthRemaining, "%02d%09.6lf,%c,%03d%09.6lf,%c,", + (uint8_t)floor(latitude), latMinutes, latHemisphere, + (uint8_t)floor(longitude),lonMinutes, lonHemisphere); + } + else + { + length = snprintf(pMarker, lengthRemaining,",,,,"); + } + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + char gpsQuality; + if (!(location.gpsLocation.flags & GPS_LOCATION_HAS_LAT_LONG)) + gpsQuality = '0'; // 0 means no fix + else if (LOC_POSITION_MODE_STANDALONE == loc_eng_data_p->client_handle->getPositionMode().mode) + gpsQuality = '1'; // 1 means GPS fix + else + gpsQuality = '2'; // 2 means DGPS fix + + if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_DOP) + { // dop is in locationExtended, (QMI) + length = snprintf(pMarker, lengthRemaining, "%c,%02d,%.1f,", + gpsQuality, svUsedCount, locationExtended.hdop); + } + 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, "%c,%02d,%.1f,", + gpsQuality, svUsedCount, loc_eng_data_p->hdop); + } + else + { // no hdop + length = snprintf(pMarker, lengthRemaining, "%c,%02d,,", + gpsQuality, svUsedCount); + } + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL) + { + length = snprintf(pMarker, lengthRemaining, "%.1lf,M,", + locationExtended.altitudeMeanSeaLevel); + } + else + { + length = snprintf(pMarker, lengthRemaining,",,"); + } + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + if ((location.gpsLocation.flags & GPS_LOCATION_HAS_ALTITUDE) && + (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL)) + { + length = snprintf(pMarker, lengthRemaining, "%.1lf,M,,", + location.gpsLocation.altitude - locationExtended.altitudeMeanSeaLevel); + } + else + { + length = snprintf(pMarker, lengthRemaining,",,,"); + } + + length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence)); + loc_eng_nmea_send(sentence, length, loc_eng_data_p); + + // clear the dop cache so they can't be used again + loc_eng_data_p->pdop = 0; + loc_eng_data_p->hdop = 0; + loc_eng_data_p->vdop = 0; + + EXIT_LOG(%d, 0); +} + + + +/*=========================================================================== +FUNCTION loc_eng_nmea_generate_sv + +DESCRIPTION + Generate NMEA sentences generated based on sv report + +DEPENDENCIES + NONE + +RETURN VALUE + 0 + +SIDE EFFECTS + N/A + +===========================================================================*/ +void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p, + const GpsSvStatus &svStatus, const GpsLocationExtended &locationExtended) +{ + ENTRY_LOG(); + + char sentence[NMEA_SENTENCE_MAX_LENGTH] = {0}; + char* pMarker = sentence; + int lengthRemaining = sizeof(sentence); + int length = 0; + + // ------------------ + // ------$GPGSV------ + // ------------------ + + if (svStatus.num_svs <= 0) + { + // no svs in view, so just send a blank $GPGSV sentence + strlcpy(sentence, "$GPGSV,1,1,0,", sizeof(sentence)); + length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence)); + loc_eng_nmea_send(sentence, length, loc_eng_data_p); + } + else + { + int svCount = svStatus.num_svs; + int sentenceCount = svCount / 4; + if (svStatus.num_svs % 4) + sentenceCount++; + int sentenceNumber = 1; + int svNumber = 1; + + while (sentenceNumber <= sentenceCount) + { + pMarker = sentence; + lengthRemaining = sizeof(sentence); + + length = snprintf(pMarker, lengthRemaining, "$GPGSV,%d,%d,%02d", + sentenceCount, sentenceNumber, svCount); + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + for (int i=0; (svNumber <= svCount) && (i < 4); i++, svNumber++) + { + 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 + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + + if (svStatus.sv_list[svNumber-1].snr > 0) + { + length = snprintf(pMarker, lengthRemaining,"%02d", + (int)(0.5 + svStatus.sv_list[svNumber-1].snr)); //float to int + + if (length < 0 || length >= lengthRemaining) + { + LOC_LOGE("NMEA Error in string formatting"); + return; + } + pMarker += length; + lengthRemaining -= length; + } + } + + length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence)); + loc_eng_nmea_send(sentence, length, loc_eng_data_p); + sentenceNumber++; + + } + } + + if (svStatus.used_in_fix_mask == 0) + { // No sv used, so there will be no position report, so send + // blank NMEA sentences + strlcpy(sentence, "$GPGSA,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); + + strlcpy(sentence, "$GPRMC,,V,,,,,,,,,,N", sizeof(sentence)); + length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence)); + loc_eng_nmea_send(sentence, length, loc_eng_data_p); + + strlcpy(sentence, "$GPGGA,,,,,,0,,,,,,,,", sizeof(sentence)); + length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence)); + loc_eng_nmea_send(sentence, length, loc_eng_data_p); + } + else + { // 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.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. + if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_DOP) + { + loc_eng_data_p->pdop = locationExtended.pdop; + loc_eng_data_p->hdop = locationExtended.hdop; + loc_eng_data_p->vdop = locationExtended.vdop; + } + else + { + loc_eng_data_p->pdop = 0; + loc_eng_data_p->hdop = 0; + loc_eng_data_p->vdop = 0; + } + + } + + EXIT_LOG(%d, 0); +} diff --git a/loc_api/libloc_api_50001/loc_eng_nmea.h b/loc_api/libloc_api_50001/loc_eng_nmea.h new file mode 100644 index 00000000..69305937 --- /dev/null +++ b/loc_api/libloc_api_50001/loc_eng_nmea.h @@ -0,0 +1,42 @@ +/* Copyright (c) 2012, 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_ENG_NMEA_H +#define LOC_ENG_NMEA_H + +#include + +#define NMEA_SENTENCE_MAX_LENGTH 200 + +void loc_eng_nmea_send(char *pNmea, int length, loc_eng_data_s_type *loc_eng_data_p); +int loc_eng_nmea_put_checksum(char *pNmea, int maxSize); +void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p, const GpsSvStatus &svStatus, const GpsLocationExtended &locationExtended); +void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p, const UlpLocation &location, const GpsLocationExtended &locationExtended); + +#endif // LOC_ENG_NMEA_H diff --git a/loc_api/libloc_api_50001/loc_eng_xtra.cpp b/loc_api/libloc_api_50001/loc_eng_xtra.cpp index ebc7c6fb..4b2d109d 100644 --- a/loc_api/libloc_api_50001/loc_eng_xtra.cpp +++ b/loc_api/libloc_api_50001/loc_eng_xtra.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -54,12 +54,17 @@ SIDE EFFECTS int loc_eng_xtra_init (loc_eng_data_s_type &loc_eng_data, GpsXtraCallbacks* callbacks) { - loc_eng_xtra_data_s_type *xtra_module_data_ptr; + int ret_val = -1; + loc_eng_xtra_data_s_type *xtra_module_data_ptr; - xtra_module_data_ptr = &loc_eng_data.xtra_module_data; - xtra_module_data_ptr->download_request_cb = callbacks->download_request_cb; - - return 0; + if(callbacks == NULL) + LOC_LOGE("loc_eng_xtra_init: failed, cb is NULL"); + else { + xtra_module_data_ptr = &loc_eng_data.xtra_module_data; + xtra_module_data_ptr->download_request_cb = callbacks->download_request_cb; + ret_val = 0; + } + return ret_val; } /*=========================================================================== diff --git a/loc_api/libloc_api_50001/loc_eng_xtra.h b/loc_api/libloc_api_50001/loc_eng_xtra.h index 7e01e146..614348de 100644 --- a/loc_api/libloc_api_50001/loc_eng_xtra.h +++ b/loc_api/libloc_api_50001/loc_eng_xtra.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2009,2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2009,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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/loc_api/libloc_api_50001/loc_ulp.h b/loc_api/libloc_api_50001/loc_ulp.h new file mode 100644 index 00000000..5822b7ca --- /dev/null +++ b/loc_api/libloc_api_50001/loc_ulp.h @@ -0,0 +1,415 @@ +/* Copyright (c) 2013, 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_ULP_H__ +#define __LOC_ULP_H__ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include +#include +#include + +#define ULP_ENGINE_INTERFACE "ulp-engine-interface" +#define ULP_NETWORK_INTERFACE "ulp-network-interface" +#define ULP_RAW_CMD_INTERFACE "ulp-raw-cmd" +#define ULP_PHONE_CONTEXT_INTERFACE "ulp-phone-context" + +/** Location has valid source information. */ +#define LOCATION_HAS_SOURCE_INFO 0x0020 +/** GpsLocation has valid "is indoor?" flag */ +#define GPS_LOCATION_HAS_IS_INDOOR 0x0040 +/** GpsLocation has valid floor number */ +#define GPS_LOCATION_HAS_FLOOR_NUMBER 0x0080 +/** GpsLocation has valid map URL*/ +#define GPS_LOCATION_HAS_MAP_URL 0x0100 +/** GpsLocation has valid map index */ +#define GPS_LOCATION_HAS_MAP_INDEX 0x0200 + +/** Sizes for indoor fields */ +#define GPS_LOCATION_MAP_URL_SIZE 400 +#define GPS_LOCATION_MAP_INDEX_SIZE 16 + +/** Position source is ULP */ +#define ULP_LOCATION_IS_FROM_HYBRID 0x0001 +/** Position source is GNSS only */ +#define ULP_LOCATION_IS_FROM_GNSS 0x0002 + +#define ULP_MIN_INTERVAL_INVALID 0xffffffff + +/** Represents recurrence of location */ +typedef enum{ + ULP_LOC_RECURRENCE_PERIODIC = 0, + ULP_LOC_RECURRENCE_SINGLE, +}UlpRecurrenceCriteria; + +/** Represents horizontal accuracy options */ +typedef enum { + ULP_HORZ_ACCURACY_DONT_CARE = 0, + ULP_HORZ_ACCURACY_LOW, + ULP_HORZ_ACCURACY_MED, + ULP_HORZ_ACCURACY_HIGH, +}UlpHorzAccuracyCriteria; + +/** Represents accuracy options (for speed, altitude, and + * bearing) */ +typedef enum { + ULP_ACCURACY_DONT_CARE = 0, + ULP_ACCURACY_LOW, + ULP_ACCURACY_HIGH, +}UlpAccuracyCriteria; + +/** Represents power consumption options */ +typedef enum { + ULP_POWER_REQ_DONT_CARE = 0, + ULP_POWER_REQ_LOW, + ULP_POWER_REQ_HIGH, +}UlpPowerCriteria; + +/** Represents data usage options */ +typedef enum { + ULP_DATA_REQ_DONT_CARE = 0, + ULP_DATA_ALLOW, + ULP_DATA_DENY, +}UlpDataUsageCriteria; + +/** Enable the reporting of altitude in location reports */ +#define ULP_ENABLE_ALTITUDE_REPORT 0x01 +/** Enable the reporting of speed in location reports */ +#define ULP_ENABLE_SPEED_REPORT 0x02 +/** Enable the reporting of bearing in location reports */ +#define ULP_ENABLE_BEARING_REPORT 0x04 + +#define ULP_CRITERIA_HAS_ACTION 0x00000001 +#define ULP_CRITERIA_HAS_PROVIDER_SOURCE 0x00000002 +#define ULP_CRITERIA_HAS_RECURRENCE_TYPE 0x00000004 +#define ULP_CRITERIA_HAS_PREFERRED_RESPONSE_TIME 0x00000010 +#define ULP_CRITERIA_HAS_MIN_INTERVAL 0x00000020 +#define ULP_CRITERIA_HAS_MIN_DISTANCE 0x00000040 +#define ULP_CRITERIA_HAS_MIN_DIST_SAMPLE_INTERVAL 0x00000080 +#define ULP_CRITERIA_HAS_DESIRED_OUTPUT_PARAMETER 0x00000100 +#define ULP_CRITERIA_HAS_PREFERRED_HORIZONTAL_ACCURACY 0x00000200 +#define ULP_CRITERIA_HAS_PREFERRED_POWER_CONSUMPTION 0x00000400 +#define ULP_CRITERIA_HAS_PREFERRED_ALTITUDE_ACCURACY 0x00000800 +#define ULP_CRITERIA_HAS_PREFERRED_BEARING_ACCURACY 0x00001000 +#define ULP_CRITERIA_HAS_PREFERRED_DATA_USAGE 0x00002000 +#define ULP_CRITERIA_HAS_INTERMEDIATE_POS_REPORT_ENABLED 0x00004000 + +#define ULP_PROVIDER_SOURCE_GNSS 0x00000001 +#define ULP_PROVIDER_SOURCE_HYBRID 0x00000002 + +#define ULP_ADD_CRITERIA 1 +#define ULP_REMOVE_CRITERIA 2 + +typedef struct { + /** set to sizeof(UlpLocation) */ + size_t size; + GpsLocation gpsLocation; + /* Provider indicator for HYBRID or GPS */ + uint16_t position_source; + /*allows HAL to pass additional information related to the location */ + int rawDataSize; /* in # of bytes */ + void * rawData; + bool is_indoor; + float floor_number; + char map_url[GPS_LOCATION_MAP_URL_SIZE]; + unsigned char map_index[GPS_LOCATION_MAP_INDEX_SIZE]; +} UlpLocation; + +/** Callback with location information. + */ +typedef void (* ulp_location_callback)(UlpLocation* location); + +/** ULP Engine callback structure. */ +typedef struct { + /** set to sizeof(UlpCallbacks) */ + size_t size; + ulp_location_callback location_cb; +} UlpEngineCallbacks; + +typedef struct { + + uint32_t valid_mask; + /* delete or add. This is a mandatory field */ + int action; + /*via gps or hybrid provider*/ + int provider_source; + /** PERIODIC or SINGLE */ + UlpRecurrenceCriteria recurrence_type; + /** obtain position within the specified response time */ + uint32_t preferred_response_time; + /** Send updates after the specified interval */ + uint32_t min_interval; + /** Send updates after device moved a specified distance */ + float min_distance; + uint32_t min_dist_sample_interval; + /** Fields specfied in the mask should be reported in the + * position report (altitude, bearing and speed) */ + uint32_t desired_output_parameter; + /** Desired accuracy for latitude, longitude */ + UlpHorzAccuracyCriteria preferred_horizontal_accuracy; + /** Desired power consumption level */ + UlpPowerCriteria preferred_power_consumption; + /** Desired accuracy for altitude */ + UlpAccuracyCriteria preferred_altitude_accuracy; + /** Desired accuracy for bearing */ + UlpAccuracyCriteria preferred_bearing_accuracy; + UlpDataUsageCriteria preferred_data_usage; + bool intermediate_pos_report_enabled; +} UlpLocationCriteria; + +/** Represents the Ulp Egine interface. */ +typedef struct { + /** set to sizeof(UlpEngineInterface) */ + size_t size; + /** + * Opens the interface and provides the callback routines + * to the implemenation of this interface. + */ + int (*init)( UlpEngineCallbacks* callbacks ); + + /* set criterias of location requests */ + int (*update_criteria) (UlpLocationCriteria criteria ); + + /** Starts navigating. */ + int (*start)( void ); + + /** Stops navigating. */ + int (*stop)( void ); +} UlpEngineInterface; + + +/** Extended interface for raw GPS command support. */ +typedef struct { + /** set to sizeof(ExtraCmdInterface) */ + size_t size; + /** Injects Android extra cmd into the ulp. Clarify if they are blocking calls */ + bool (*inject_raw_cmd)(char* bundle, int bundle_length ); + +} InjectRawCmdInterface; + +/** ULP Network Interface */ +/** Request for network position status */ +#define ULP_NETWORK_POS_STATUS_REQUEST (0x01) +/** Request for periodic network positions */ +#define ULP_NETWORK_POS_START_PERIODIC_REQUEST (0x02) +/** Request last known location */ +#define ULP_NETWORK_POS_GET_LAST_KNOWN_LOCATION_REQUEST (0x03) +/** Cancel request */ +#define ULP_NETWORK_POS_STOP_REQUEST (0x04) + +/** Position was obtained using Wifi Network */ +#define ULP_NETWORK_POSITION_SRC_WIFI (0x01) +/** Position was obtained using Cell Network */ +#define ULP_NETWORK_POSITION_SRC_CELL (0x02) +/** Position was obtained using an Unknown Network */ +#define ULP_NETWORK_POSITION_SRC_UNKNOWN (0x00) + +/** Represents the ULP network request */ +typedef struct { + /** type of request */ + uint16_t request_type; + /** Desired time between network positions/measurements in ms. + * Shall be set to 0 if only one position is requested */ + int interval_ms; + /** network position source to be used */ + uint16_t desired_position_source; +}UlpNetworkRequestPos; + +/** Callback with network position request. */ +typedef void (*ulp_network_location_request)(UlpNetworkRequestPos *req); + +/** ULP Network callback structure. */ +typedef struct { + ulp_network_location_request ulp_network_location_request_cb; +} UlpNetworkLocationCallbacks; + +/** represent a network position */ +typedef struct { + /** source of the position (Wifi, Cell) */ + uint16_t pos_source; + /** latitude in degrees */ + double latitude; + /** longitude in degrees */ + double longitude; + /** Horzizontal error estimate in meters */ + float HEPE; +} UlpNetworkPosition; + +/** Represents access point information */ +typedef struct { + /** Mac adderess */ + char mac_addr[6]; + /** signal strength in dbM */ + int32_t rssi; + /** Beacon channel for access point */ + uint16_t channel; + + /** Bit 0 = AP is used by WiFi positioning system + * Bit 1 = AP doesn't broadcast SSID Bit 2 = AP has encrption + * turned on Bit 3 = AP is in infrastructure mode and not in + * ad-hoc/unknown mode */ + uint8_t ap_qualifier; +} UlpNetworkAccessPointInfo; + +/** Represents Wifi information */ +typedef struct { + /** Number of APs in the calculated position (-1 means + * unknown) */ + uint8_t num_aps_in_pos; + /** Information of the scanned ap's used in the position estimation*/ + UlpNetworkAccessPointInfo *ap_info; +} UlpNetworkWifiInfo; + + +/** Represent network landscape information */ +typedef struct { + /** network type Cell/Wifi */ + uint8_t network_type; + /** network information */ + union { + UlpNetworkWifiInfo wifi_info; + uint32_t cell_info; + } u; +} UlpNetworkLandscape; + +/** network report valid flags */ +/** fix time is valid */ +#define ULP_NETWORK_POSITION_REPORT_HAS_FIX_TIME (0x01) +/** position is valid */ +#define ULP_NETWORK_POSITION_REPORT_HAS_POSITION (0x02) +/** landscape is valid */ +#define ULP_NETWORK_POSITION_REPORT_HAS_LANDSCAPE (0x04) + +/** Represents the network position report */ +typedef struct +{ + /** validity flags */ + uint16_t valid_flag; + /** time fo network fix */ + GpsUtcTime fix_time; + /** network position */ + UlpNetworkPosition position; + /** network landscape */ + UlpNetworkLandscape landscape_info; +}UlpNetworkPositionReport; + +/** represents ULP network interface extension */ +typedef struct +{ + /** set to sizeof(UlpNetworkInterface) */ + size_t size; + /** initialize network interface */ + int ( *init)(UlpNetworkLocationCallbacks *callback); + /** send network position */ + int ( *ulp_send_network_position)(UlpNetworkPositionReport *position_report); +}UlpNetworkInterface; + +/** Information for the ULP Phone context interface */ + +/** the Location settings context supports only ON_CHANGE + * request type */ +#define ULP_PHONE_CONTEXT_GPS_SETTING (0x01) +#define ULP_PHONE_CONTEXT_NETWORK_POSITION_SETTING (0x02) +#define ULP_PHONE_CONTEXT_WIFI_SETTING (0x04) +/** The battery charging state context supports only + * ON_CHANGE request type */ +#define ULP_PHONE_CONTEXT_BATTERY_CHARGING_STATE (0x08) +#define ULP_PHONE_CONTEXT_AGPS_SETTING (0x010) +#define ULP_PHONE_CONTEXT_ENH_LOCATION_SERVICES_SETTING (0x020) + +/** return phone context only once */ +#define ULP_PHONE_CONTEXT_REQUEST_TYPE_SINGLE (0x01) +/** return phone context periodcially */ +#define ULP_PHONE_CONTEXT_REQUEST_TYPE_PERIODIC (0x02) +/** return phone context when it changes */ +#define ULP_PHONE_CONTEXT_REQUEST_TYPE_ON_CHANGE (0x03) + + +/** Represents ULP phone context request */ +typedef struct { + /** context type requested */ + uint16_t context_type; + /** request type */ + uint16_t request_type; + /** interval in ms if request type is periodic */ + int interval_ms; +}UlpPhoneContextRequest; + +/** Callback for phone context request. */ +typedef void (*ulp_request_phone_context)(UlpPhoneContextRequest *req); + +/** ULP Phone Context callback structure. */ +typedef struct { + ulp_request_phone_context ulp_request_phone_context_cb; +}UlpPhoneContextCallbacks; + +/** Represents the phone context settings */ +typedef struct { + /** Phone context information type */ + uint16_t context_type; + + /** network information */ + /** gps setting */ + bool is_gps_enabled; + /** is network positioning enabled */ + bool is_network_position_available; + /** is wifi turned on */ + bool is_wifi_setting_enabled; + /** is battery being currently charged */ + bool is_battery_charging; + /* is agps enabled for single shot */ + bool is_agps_enabled; + /* is Enhanced Location Services enabled by user*/ + bool is_enh_location_services_enabled; +} UlpPhoneContextSettings; + +/** Represent the phone contxt interface */ +typedef struct +{ + /** set to sizeof(UlpPhoneContextInterface) */ + size_t size; + /** Initialize, register callback */ + int (*init)(UlpPhoneContextCallbacks *callback); + /** send the phone context settings */ + int (*ulp_phone_context_settings_update) (UlpPhoneContextSettings *settings ); +}UlpPhoneContextInterface; + + +//int loc_update_criteria(UlpLocationCriteria criteria); +//const void* loc_get_extension(const char* name); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif //__LOC_ULP_H__ diff --git a/loc_api/loc_api_v02/Android.mk b/loc_api/loc_api_v02/Android.mk new file mode 100644 index 00000000..8617f3cb --- /dev/null +++ b/loc_api/loc_api_v02/Android.mk @@ -0,0 +1,50 @@ +ifneq ($(BUILD_TINY_ANDROID),true) + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libloc_api_v02 + +LOCAL_MODULE_TAGS := optional + +LOCAL_SHARED_LIBRARIES := \ + libutils \ + libcutils \ + libqmi_cci \ + libqmi_csi \ + libqmi_common_so \ + libloc_adapter \ + libgps.utils + +LOCAL_SRC_FILES += \ + LocApiV02Adapter.cpp \ + loc_api_v02_log.c \ + loc_api_v02_client.c \ + loc_api_sync_req.c \ + location_service_v02.c + +LOCAL_CFLAGS += \ + -fno-short-enums \ + -D_ANDROID_ + +ifeq ($(FEATURE_IPV6), true) +LOCAL_CFLAGS += -DFEATURE_IPV6 +endif #FEATURE_IPV6 + +ifeq ($(FEATURE_DELEXT), true) +LOCAL_CFLAGS += -DFEATURE_DELEXT +endif #FEATURE_DELEXT + +## 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 + +LOCAL_PRELINK_MODULE := false + +include $(BUILD_SHARED_LIBRARY) + +endif # not BUILD_TINY_ANDROID diff --git a/loc_api/loc_api_v02/LocApiV02Adapter.cpp b/loc_api/loc_api_v02/LocApiV02Adapter.cpp new file mode 100644 index 00000000..d7276e95 --- /dev/null +++ b/loc_api/loc_api_v02/LocApiV02Adapter.cpp @@ -0,0 +1,2257 @@ +/* Copyright (c) 2011-2013, 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_adapter" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include "LocApiV02Adapter.h" +#include "loc_api_v02_client.h" +#include "loc_api_v02_log.h" +#include "loc_api_sync_req.h" +#include "LocApiAdapter.h" +#include "loc_util_log.h" + + +/* Default session id ; TBD needs incrementing for each */ +#define LOC_API_V02_DEF_SESSION_ID (1) + +/* Default minimium interval in ms */ +#define LOC_API_V02_DEF_MIN_INTERVAL (1000) + +/* Default horizontal accuracy in meters*/ +#define LOC_API_V02_DEF_HORZ_ACCURACY (50) + +/* Default timeout in ms; TBD: needs implementing */ +#define LOC_API_V02_DEF_TIMEOUT (120000) + +/* UMTS CP Address key*/ +#define LOC_NI_NOTIF_KEY_ADDRESS "Address" + +/* GPS SV Id offset */ +#define GPS_SV_ID_OFFSET (1) + +/* GLONASS SV Id offset */ +#define GLONASS_SV_ID_OFFSET (65) + +/* SV ID range */ +#define SV_ID_RANGE (32) + + + +/* static event callbacks that call the LocApiV02Adapter callbacks*/ + +/* global event callback, call the eventCb function in loc api adapter v02 + instance */ +static void globalEventCb(locClientHandleType clientHandle, + uint32_t eventId, + const locClientEventIndUnionType eventPayload, + void* pClientCookie) +{ + MODEM_LOG_CALLFLOW(%s, loc_get_v02_event_name(eventId)); + LocApiV02Adapter *locApiV02AdapterInstance = + (LocApiV02Adapter *)pClientCookie; + + LOC_LOGV ("%s:%d] client = %p, event id = %d, client cookie ptr = %p\n", + __func__, __LINE__, clientHandle, eventId, pClientCookie); + + // return if null is passed + if( NULL == locApiV02AdapterInstance) + { + LOC_LOGE ("%s:%d] NULL object passed : client = %p, event id = %d\n", + __func__, __LINE__, clientHandle, eventId); + return; + } + locApiV02AdapterInstance->eventCb(clientHandle, + eventId, + eventPayload); +} + +/* global response callback, it calls the sync request process + indication function to unblock the request that is waiting on this + response indication*/ +static void globalRespCb(locClientHandleType clientHandle, + uint32_t respId, + const locClientRespIndUnionType respPayload, + void* pClientCookie) +{ + MODEM_LOG_CALLFLOW(%s, loc_get_v02_event_name(respId)); + LocApiV02Adapter *locApiV02AdapterInstance = + (LocApiV02Adapter *)pClientCookie; + + + LOC_LOGV ("%s:%d] client = %p, resp id = %d, client cookie ptr = %p\n", + __func__, __LINE__, clientHandle, respId, pClientCookie); + + if( NULL == locApiV02AdapterInstance) + { + LOC_LOGE ("%s:%d] NULL object passed : client = %p, resp id = %d\n", + __func__, __LINE__, clientHandle, respId); + return; + } + // process the sync call + // use pDeleteAssistDataInd as a dummy pointer + loc_sync_process_ind(clientHandle, respId, + (void *)respPayload.pDeleteAssistDataInd); +} + +/* global error callback, it will call the handle service down + function in the loc api adapter instance. */ +static void globalErrorCb (locClientHandleType clientHandle, + locClientErrorEnumType errorId, + void *pClientCookie) +{ + LocApiV02Adapter *locApiV02AdapterInstance = + (LocApiV02Adapter *)pClientCookie; + + LOC_LOGV ("%s:%d] client = %p, error id = %d\n, client cookie ptr = %p\n", + __func__, __LINE__, clientHandle, errorId, pClientCookie); + if( NULL == locApiV02AdapterInstance) + { + LOC_LOGE ("%s:%d] NULL object passed : client = %p, error id = %d\n", + __func__, __LINE__, clientHandle, errorId); + return; + } + locApiV02AdapterInstance->errorCb(clientHandle, + errorId); +} + +/* global structure containing the callbacks */ +locClientCallbacksType globalCallbacks = +{ + sizeof(locClientCallbacksType), + globalEventCb, + globalRespCb, + globalErrorCb +}; + +/* Constructor for LocApiV02Adapter */ +LocApiV02Adapter :: LocApiV02Adapter(LocEng &locEng): + LocApiAdapter(locEng), clientHandle( LOC_CLIENT_INVALID_HANDLE_VALUE), + eventMask(convertMask(locEng.eventMask)) +{ + // initialize loc_sync_req interface + loc_sync_req_init(); +} + +/* Destructor for LocApiV02Adapter */ +LocApiV02Adapter :: ~LocApiV02Adapter() +{ + deInitLocClient(); +} + +/* close Loc API V02 client */ +int LocApiV02Adapter :: deInitLocClient() +{ + return ( eLOC_CLIENT_SUCCESS == locClientClose(&clientHandle)) ? 0 : -1 ; +} + +/* Initialize a loc api v02 client */ +enum loc_api_adapter_err LocApiV02Adapter :: reinit() +{ + locClientStatusEnumType status; + /* If the client is already open close it first */ + if(LOC_CLIENT_INVALID_HANDLE_VALUE != clientHandle) + { + status = locClientClose(&clientHandle); + if( eLOC_CLIENT_SUCCESS != status) + { + LOC_LOGE ("%s:%d]: locClientClose failed, status = %d\n", __func__, + __LINE__, status); + return (LOC_API_ADAPTER_ERR_FAILURE); + } + } + + LOC_LOGV ("%s:%d]: reference to this = %p passed in \n", __func__, + __LINE__, this); + /* initialize the loc api v02 interface, note that + the locClientOpen() function will block if the + service is unavailable for a fixed time out */ + + status = locClientOpen( + eventMask, &globalCallbacks, &clientHandle, (void *)this); + + if (eLOC_CLIENT_SUCCESS != status || + clientHandle == LOC_CLIENT_INVALID_HANDLE_VALUE ) + { + LOC_LOGE ("%s:%d]: locClientOpen failed, status = %s\n", __func__, + __LINE__, loc_get_v02_client_status_name(status)); + return (LOC_API_ADAPTER_ERR_FAILURE); + } + + // return SUCCESS + return (LOC_API_ADAPTER_ERR_SUCCESS); +} + +/* start positioning session */ +enum loc_api_adapter_err LocApiV02Adapter :: startFix() +{ + locClientStatusEnumType status; + locClientReqUnionType req_union; + + qmiLocStartReqMsgT_v02 start_msg; + + qmiLocSetOperationModeReqMsgT_v02 set_mode_msg; + qmiLocSetOperationModeIndMsgT_v02 set_mode_ind; + + // clear all fields, validity masks + memset (&start_msg, 0, sizeof(start_msg)); + memset (&set_mode_msg, 0, sizeof(set_mode_msg)); + memset (&set_mode_ind, 0, sizeof(set_mode_ind)); + + LOC_LOGV("%s:%d]: start \n", __func__, __LINE__); + fixCriteria.logv(); + + // 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? + + if (status != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != set_mode_ind.status) + { + LOC_LOGE ("%s:%d]: set opertion mode failed status = %s, " + "ind..status = %s\n", __func__, __LINE__, + loc_get_v02_client_status_name(status), + loc_get_v02_qmi_status_name(set_mode_ind.status)); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; // error + } + + start_msg.minInterval_valid = 1; + start_msg.minInterval = fixCriteria.min_interval; + + if (fixCriteria.preferred_accuracy >= 0) { + start_msg.horizontalAccuracyLevel_valid = 1; + + if (fixCriteria.preferred_accuracy <= 100) + { + // fix needs high accuracy + start_msg.horizontalAccuracyLevel = eQMI_LOC_ACCURACY_HIGH_V02; + } + else if (fixCriteria.preferred_accuracy <= 1000) + { + //fix needs med accuracy + start_msg.horizontalAccuracyLevel = eQMI_LOC_ACCURACY_MED_V02; + } + else + { + //fix needs low accuracy + start_msg.horizontalAccuracyLevel = eQMI_LOC_ACCURACY_LOW_V02; + } + } + + start_msg.fixRecurrence_valid = 1; + if(GPS_POSITION_RECURRENCE_SINGLE == fixCriteria.recurrence) + { + start_msg.fixRecurrence = eQMI_LOC_RECURRENCE_SINGLE_V02; + } + else + { + start_msg.fixRecurrence = eQMI_LOC_RECURRENCE_PERIODIC_V02; + } + + //dummy session id + // TBD: store session ID, check for session id in pos reports. + start_msg.sessionId = LOC_API_V02_DEF_SESSION_ID; + + if (fixCriteria.credentials[0] != 0) { + int size1 = sizeof(start_msg.applicationId.applicationName); + int size2 = sizeof(fixCriteria.credentials); + int len = ((size1 < size2) ? size1 : size2) - 1; + memcpy(start_msg.applicationId.applicationName, + fixCriteria.credentials, + len); + + size1 = sizeof(start_msg.applicationId.applicationProvider); + size2 = sizeof(fixCriteria.provider); + len = ((size1 < size2) ? size1 : size2) - 1; + memcpy(start_msg.applicationId.applicationProvider, + fixCriteria.provider, + len); + + start_msg.applicationId_valid = 1; + } + + req_union.pStartReq = &start_msg; + + status = locClientSendReq (clientHandle, QMI_LOC_START_REQ_V02, + req_union ); + + if( eLOC_CLIENT_SUCCESS == status) + { + return LOC_API_ADAPTER_ERR_SUCCESS; + } + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; +} + +/* stop a positioning session */ +enum loc_api_adapter_err LocApiV02Adapter :: stopFix() +{ + locClientStatusEnumType status; + locClientReqUnionType req_union; + + qmiLocStopReqMsgT_v02 stop_msg; + + LOC_LOGD(" %s:%d]: stop called \n", __func__, __LINE__); + + memset(&stop_msg, 0, sizeof(stop_msg)); + + // dummy session id + stop_msg.sessionId = LOC_API_V02_DEF_SESSION_ID; + + req_union.pStopReq = &stop_msg; + + status = locClientSendReq(clientHandle, + QMI_LOC_STOP_REQ_V02, + req_union); + + if( eLOC_CLIENT_SUCCESS == status) + { + return LOC_API_ADAPTER_ERR_SUCCESS; + } + + LOC_LOGE("%s:%d]: error = %s\n",__func__, __LINE__, + loc_get_v02_client_status_name(status)); + return (LOC_API_ADAPTER_ERR_GENERAL_FAILURE); +} + +/* set the positioning fix criteria */ +enum loc_api_adapter_err LocApiV02Adapter :: setPositionMode( + const LocPosMode *posMode) +{ + LOC_LOGV ("%s:%d]: posMode %p",__func__, __LINE__, posMode); + + if (NULL != posMode && + !fixCriteria.equals(*posMode)) { + //making a copy of the fix criteria + fixCriteria = *posMode; + + LOC_LOGD ("%s:%d]: new fix criteria", __func__, __LINE__); + + if(true == navigating) + { + //fix is in progress, send a restart + LOC_LOGD ("%s:%d]: fix is in progress restarting the fix with new " + "criteria\n", __func__, __LINE__); + + return( startFix()); + } + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* inject time into the position engine */ +enum loc_api_adapter_err LocApiV02Adapter :: + setTime(GpsUtcTime time, int64_t timeReference, int uncertainty) +{ + locClientReqUnionType req_union; + locClientStatusEnumType status; + qmiLocInjectUtcTimeReqMsgT_v02 inject_time_msg; + qmiLocInjectUtcTimeIndMsgT_v02 inject_time_ind; + + memset(&inject_time_msg, 0, sizeof(inject_time_msg)); + + inject_time_ind.status = eQMI_LOC_GENERAL_FAILURE_V02; + + inject_time_msg.timeUtc = time; + + inject_time_msg.timeUtc += (int64_t)(android::elapsedRealtime() - timeReference); + + inject_time_msg.timeUnc = uncertainty; + + req_union.pInjectUtcTimeReq = &inject_time_msg; + + LOC_LOGV ("%s:%d]: uncertainty = %d\n", __func__, __LINE__, + uncertainty); + + status = loc_sync_send_req(clientHandle, + QMI_LOC_INJECT_UTC_TIME_REQ_V02, + req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT, + QMI_LOC_INJECT_UTC_TIME_IND_V02, + &inject_time_ind); + + if (status != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != inject_time_ind.status) + { + LOC_LOGE ("%s:%d] status = %s, ind..status = %s\n", __func__, __LINE__, + loc_get_v02_client_status_name(status), + loc_get_v02_qmi_status_name(inject_time_ind.status)); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* inject position into the position engine */ +enum loc_api_adapter_err LocApiV02Adapter :: + injectPosition(double latitude, double longitude, float accuracy) +{ + locClientReqUnionType req_union; + locClientStatusEnumType status; + qmiLocInjectPositionReqMsgT_v02 inject_pos_msg; + qmiLocInjectPositionIndMsgT_v02 inject_pos_ind; + + memset(&inject_pos_msg, 0, sizeof(inject_pos_msg)); + + inject_pos_msg.latitude_valid = 1; + inject_pos_msg.latitude = latitude; + + inject_pos_msg.longitude_valid = 1; + inject_pos_msg.longitude = longitude; + + inject_pos_msg.horUncCircular_valid = 1; + + inject_pos_msg.horUncCircular = accuracy; //meters assumed + + inject_pos_msg.horConfidence_valid = 1; + + inject_pos_msg.horConfidence = 63; // 63% (1 std dev assumed) + + /* Log */ + LOC_LOGD("%s:%d]: Lat=%lf, Lon=%lf, Acc=%.2lf\n", __func__, __LINE__, + inject_pos_msg.latitude, inject_pos_msg.longitude, + inject_pos_msg.horUncCircular); + + req_union.pInjectPositionReq = &inject_pos_msg; + + status = loc_sync_send_req(clientHandle, + QMI_LOC_INJECT_POSITION_REQ_V02, + req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT, + QMI_LOC_INJECT_POSITION_IND_V02, + &inject_pos_ind); + + if (status != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != inject_pos_ind.status) + { + LOC_LOGE ("%s:%d]: error! status = %s, inject_pos_ind.status = %s\n", + __func__, __LINE__, + loc_get_v02_client_status_name(status), + loc_get_v02_qmi_status_name(inject_pos_ind.status)); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* delete assistance date */ +enum loc_api_adapter_err LocApiV02Adapter :: deleteAidingData(GpsAidingData f) +{ + locClientReqUnionType req_union; + locClientStatusEnumType status; + qmiLocDeleteAssistDataReqMsgT_v02 delete_req; + qmiLocDeleteAssistDataIndMsgT_v02 delete_resp; + + memset(&delete_req, 0, sizeof(delete_req)); + memset(&delete_resp, 0, sizeof(delete_resp)); + + if( f == GPS_DELETE_ALL ) + { + delete_req.deleteAllFlag = true; + } + + else + { + /* to keep track of svInfoList for GPS and GLO*/ + uint32_t curr_sv_len = 0; + uint32_t curr_sv_idx = 0; + uint32_t sv_id = 0; + + if((f & GPS_DELETE_EPHEMERIS ) || ( f & GPS_DELETE_ALMANAC )) + { + /* do delete for all GPS SV's */ + + curr_sv_len += SV_ID_RANGE; + + sv_id = GPS_SV_ID_OFFSET; + + delete_req.deleteSvInfoList_valid = 1; + + delete_req.deleteSvInfoList_len = curr_sv_len; + + LOC_LOGV("%s:%d]: Delete GPS SV info for index %d to %d" + "and sv id %d to %d \n", + __func__, __LINE__, curr_sv_idx, curr_sv_len - 1, + sv_id, sv_id+SV_ID_RANGE); + + for( uint32_t i = curr_sv_idx; i< curr_sv_len ; i++, sv_id++ ) + { + delete_req.deleteSvInfoList[i].gnssSvId = sv_id; + + delete_req.deleteSvInfoList[i].system = eQMI_LOC_SV_SYSTEM_GPS_V02; + + if(f & GPS_DELETE_EPHEMERIS ) + { + // set ephemeris mask for all GPS SV's + delete_req.deleteSvInfoList[i].deleteSvInfoMask |= + QMI_LOC_MASK_DELETE_EPHEMERIS_V02; + } + + if( f & GPS_DELETE_ALMANAC ) + { + delete_req.deleteSvInfoList[i].deleteSvInfoMask |= + QMI_LOC_MASK_DELETE_ALMANAC_V02; + } + } + // increment the current index + curr_sv_idx += SV_ID_RANGE; + + } + +#ifdef FEATURE_DELEXT + if( f & GPS_DELETE_TIME_GPS ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GPS_TIME_V02; + } +#endif + + if(f & GPS_DELETE_POSITION ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_POSITION_V02; + } + + if(f & GPS_DELETE_TIME ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_TIME_V02; + } + + if(f & GPS_DELETE_IONO ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_IONO_V02; + } + + if(f & GPS_DELETE_UTC ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_UTC_V02; + } + + if(f & GPS_DELETE_HEALTH ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_HEALTH_V02; + } + + if(f & GPS_DELETE_SVDIR ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GPS_SVDIR_V02; + } + if(f & GPS_DELETE_SADATA ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_SADATA_V02; + } + if(f & GPS_DELETE_RTI ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_RTI_V02; + } + if(f & GPS_DELETE_CELLDB_INFO ) + { + delete_req.deleteCellDbDataMask_valid = 1; + delete_req.deleteCellDbDataMask = + ( QMI_LOC_MASK_DELETE_CELLDB_POS_V02 | + QMI_LOC_MASK_DELETE_CELLDB_LATEST_GPS_POS_V02 | + QMI_LOC_MASK_DELETE_CELLDB_OTA_POS_V02 | + QMI_LOC_MASK_DELETE_CELLDB_EXT_REF_POS_V02 | + QMI_LOC_MASK_DELETE_CELLDB_TIMETAG_V02 | + QMI_LOC_MASK_DELETE_CELLDB_CELLID_V02 | + QMI_LOC_MASK_DELETE_CELLDB_CACHED_CELLID_V02 | + QMI_LOC_MASK_DELETE_CELLDB_LAST_SRV_CELL_V02 | + QMI_LOC_MASK_DELETE_CELLDB_CUR_SRV_CELL_V02 | + QMI_LOC_MASK_DELETE_CELLDB_NEIGHBOR_INFO_V02) ; + + } +#ifdef FEATURE_DELEXT + if(f & GPS_DELETE_ALMANAC_CORR ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GPS_ALM_CORR_V02; + } + if(f & GPS_DELETE_FREQ_BIAS_EST ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_FREQ_BIAS_EST_V02; + } + if ( (f & GPS_DELETE_EPHEMERIS_GLO ) || (f & GPS_DELETE_ALMANAC_GLO )) + { + /* do delete for all GLONASS SV's (65 - 96) + */ + curr_sv_len += SV_ID_RANGE; + + sv_id = GLONASS_SV_ID_OFFSET; + + delete_req.deleteSvInfoList_valid = 1; + + delete_req.deleteSvInfoList_len = curr_sv_len; + + LOC_LOGV("%s:%d]: Delete GLO SV info for index %d to %d" + "and sv id %d to %d \n", + __func__, __LINE__, curr_sv_idx, curr_sv_len - 1, + sv_id, sv_id+SV_ID_RANGE); + + + for( uint32_t i = curr_sv_idx; i< curr_sv_len ; i++, sv_id++ ) + { + delete_req.deleteSvInfoList[i].gnssSvId = sv_id; + + delete_req.deleteSvInfoList[i].system = eQMI_LOC_SV_SYSTEM_GLONASS_V02; + + if(f & GPS_DELETE_EPHEMERIS ) + { + // set ephemeris mask for all GPS SV's + delete_req.deleteSvInfoList[i].deleteSvInfoMask |= + QMI_LOC_MASK_DELETE_EPHEMERIS_V02; + } + + if( f & GPS_DELETE_ALMANAC ) + { + delete_req.deleteSvInfoList[i].deleteSvInfoMask |= + QMI_LOC_MASK_DELETE_ALMANAC_V02; + } + } + curr_sv_idx += SV_ID_RANGE; + } + + if(f & GPS_DELETE_SVDIR_GLO ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GLO_SVDIR_V02; + } + + if(f & GPS_DELETE_SVSTEER_GLO ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GLO_SVSTEER_V02; + } + + if(f & GPS_DELETE_ALMANAC_CORR_GLO ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GLO_ALM_CORR_V02; + } + + if(f & GPS_DELETE_TIME_GLO ) + { + delete_req.deleteGnssDataMask_valid = 1; + delete_req.deleteGnssDataMask |= QMI_LOC_MASK_DELETE_GLO_TIME_V02; + } +#endif + } + + req_union.pDeleteAssistDataReq = &delete_req; + + status = loc_sync_send_req(clientHandle, + QMI_LOC_DELETE_ASSIST_DATA_REQ_V02, + req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT, + QMI_LOC_DELETE_ASSIST_DATA_IND_V02, + &delete_resp); + + if (status != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != delete_resp.status) + { + LOC_LOGE ("%s:%d]: error! status = %s, delete_resp.status = %s\n", + __func__, __LINE__, + loc_get_v02_client_status_name(status), + loc_get_v02_qmi_status_name(delete_resp.status)); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* send NI user repsonse to the engine */ +enum loc_api_adapter_err LocApiV02Adapter :: + informNiResponse(GpsUserResponseType userResponse, + const void* passThroughData) +{ + locClientReqUnionType req_union; + locClientStatusEnumType status; + + qmiLocNiUserRespReqMsgT_v02 ni_resp; + qmiLocNiUserRespIndMsgT_v02 ni_resp_ind; + + qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *request_pass_back = + (qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *)passThroughData; + + memset(&ni_resp,0, sizeof(ni_resp)); + + memset(&ni_resp_ind,0, sizeof(ni_resp_ind)); + + switch (userResponse) + { + case GPS_NI_RESPONSE_ACCEPT: + ni_resp.userResp = eQMI_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT_V02; + break; + case GPS_NI_RESPONSE_DENY: + ni_resp.userResp = eQMI_LOC_NI_LCS_NOTIFY_VERIFY_DENY_V02; + break; + case GPS_NI_RESPONSE_NORESP: + ni_resp.userResp = eQMI_LOC_NI_LCS_NOTIFY_VERIFY_NORESP_V02; + break; + default: + return LOC_API_ADAPTER_ERR_INVALID_PARAMETER; + } + + LOC_LOGV(" %s:%d]: NI response: %d\n", __func__, __LINE__, + ni_resp.userResp); + + ni_resp.notificationType = request_pass_back->notificationType; + + // copy SUPL payload from request + if(request_pass_back->NiSuplInd_valid == 1) + { + ni_resp.NiSuplPayload_valid = 1; + memcpy(&(ni_resp.NiSuplPayload), &(request_pass_back->NiSuplInd), + sizeof(qmiLocNiSuplNotifyVerifyStructT_v02)); + + } + // should this be an "else if"?? we don't need to decide + + // copy UMTS-CP payload from request + if( request_pass_back->NiUmtsCpInd_valid == 1 ) + { + ni_resp.NiUmtsCpPayload_valid = 1; + memcpy(&(ni_resp.NiUmtsCpPayload), &(request_pass_back->NiUmtsCpInd), + sizeof(qmiLocNiUmtsCpNotifyVerifyStructT_v02)); + } + + //copy Vx payload from the request + if( request_pass_back->NiVxInd_valid == 1) + { + ni_resp.NiVxPayload_valid = 1; + memcpy(&(ni_resp.NiVxPayload), &(request_pass_back->NiVxInd), + sizeof(qmiLocNiVxNotifyVerifyStructT_v02)); + } + + // copy Vx service interaction payload from the request + if(request_pass_back->NiVxServiceInteractionInd_valid == 1) + { + ni_resp.NiVxServiceInteractionPayload_valid = 1; + memcpy(&(ni_resp.NiVxServiceInteractionPayload), + &(request_pass_back->NiVxServiceInteractionInd), + sizeof(qmiLocNiVxServiceInteractionStructT_v02)); + } + + // 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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* Set UMTs SLP server URL */ +enum loc_api_adapter_err LocApiV02Adapter :: setServer( + const char* url, int len) +{ + locClientReqUnionType req_union; + locClientStatusEnumType status; + qmiLocSetServerReqMsgT_v02 set_server_req; + qmiLocSetServerIndMsgT_v02 set_server_ind; + + if(len <=0 || len > sizeof(set_server_req.urlAddr)) + { + LOC_LOGE("%s:%d]: len = %d greater than max allowed url length\n", + __func__, __LINE__, len); + + return LOC_API_ADAPTER_ERR_INVALID_PARAMETER; + } + + memset(&set_server_req, 0, sizeof(set_server_req)); + + LOC_LOGD("%s:%d]:, url = %s, len = %d\n", __func__, __LINE__, url, len); + + set_server_req.serverType = eQMI_LOC_SERVER_TYPE_UMTS_SLP_V02; + + set_server_req.urlAddr_valid = 1; + + strlcpy(set_server_req.urlAddr, url, sizeof(set_server_req.urlAddr)); + + req_union.pSetServerReq = &set_server_req; + + status = loc_sync_send_req(clientHandle, + QMI_LOC_SET_SERVER_REQ_V02, + req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT, + QMI_LOC_SET_SERVER_IND_V02, + &set_server_ind); + + if (status != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != set_server_ind.status) + { + LOC_LOGE ("%s:%d]: error status = %s, set_server_ind.status = %s\n", + __func__,__LINE__, + loc_get_v02_client_status_name(status), + loc_get_v02_qmi_status_name(set_server_ind.status)); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +enum loc_api_adapter_err LocApiV02Adapter :: + setServer(unsigned int ip, int port, LocServerType type) +{ + locClientReqUnionType req_union; + locClientStatusEnumType status; + qmiLocSetServerReqMsgT_v02 set_server_req; + qmiLocSetServerIndMsgT_v02 set_server_ind; + qmiLocServerTypeEnumT_v02 set_server_cmd; + + switch (type) { + case LOC_AGPS_MPC_SERVER: + set_server_cmd = eQMI_LOC_SERVER_TYPE_CDMA_MPC_V02; + break; + case LOC_AGPS_CUSTOM_PDE_SERVER: + set_server_cmd = eQMI_LOC_SERVER_TYPE_CUSTOM_PDE_V02; + break; + default: + set_server_cmd = eQMI_LOC_SERVER_TYPE_CDMA_PDE_V02; + break; + } + + memset(&set_server_req, 0, sizeof(set_server_req)); + + LOC_LOGD("%s:%d]:, ip = %u, port = %d\n", __func__, __LINE__, ip, port); + + set_server_req.serverType = set_server_cmd; + set_server_req.ipv4Addr_valid = 1; + set_server_req.ipv4Addr.addr = ip; + set_server_req.ipv4Addr.port = port; + + req_union.pSetServerReq = &set_server_req; + + status = loc_sync_send_req(clientHandle, + QMI_LOC_SET_SERVER_REQ_V02, + req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT, + QMI_LOC_SET_SERVER_IND_V02, + &set_server_ind); + + if (status != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != set_server_ind.status) + { + LOC_LOGE ("%s:%d]: error status = %s, set_server_ind.status = %s\n", + __func__,__LINE__, + loc_get_v02_client_status_name(status), + loc_get_v02_qmi_status_name(set_server_ind.status)); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* Inject XTRA data, this module breaks down the XTRA + file into "chunks" and injects them one at a time */ +enum loc_api_adapter_err LocApiV02Adapter :: setXtraData( + char* data, int length) +{ + locClientStatusEnumType status = eLOC_CLIENT_SUCCESS; + int total_parts; + uint8_t part; + uint16_t len_injected; + + locClientReqUnionType req_union; + qmiLocInjectPredictedOrbitsDataReqMsgT_v02 inject_xtra; + qmiLocInjectPredictedOrbitsDataIndMsgT_v02 inject_xtra_ind; + + req_union.pInjectPredictedOrbitsDataReq = &inject_xtra; + + LOC_LOGD("%s:%d]: xtra size = %d\n", __func__, __LINE__, length); + + inject_xtra.formatType_valid = 1; + inject_xtra.formatType = eQMI_LOC_PREDICTED_ORBITS_XTRA_V02; + inject_xtra.totalSize = length; + + total_parts = ((length - 1) / QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02) + 1; + + inject_xtra.totalParts = total_parts; + + len_injected = 0; // O bytes injected + + // XTRA injection starts with part 1 + for (part = 1; part <= total_parts; part++) + { + inject_xtra.partNum = part; + + if (QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02 > (length - len_injected)) + { + inject_xtra.partData_len = length - len_injected; + } + else + { + inject_xtra.partData_len = QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02; + } + + // copy data into the message + memcpy(inject_xtra.partData, data+len_injected, inject_xtra.partData_len); + + LOC_LOGD("[%s:%d] part %d/%d, len = %d, total injected = %d\n", + __func__, __LINE__, + inject_xtra.partNum, total_parts, inject_xtra.partData_len, + len_injected); + + status = loc_sync_send_req( clientHandle, + QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02, + req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT, + QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02, + &inject_xtra_ind); + + if (status != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != inject_xtra_ind.status || + inject_xtra.partNum != inject_xtra_ind.partNum) + { + LOC_LOGE ("%s:%d]: failed status = %s, inject_pos_ind.status = %s," + " part num = %d, ind.partNum = %d\n", __func__, __LINE__, + loc_get_v02_client_status_name(status), + loc_get_v02_qmi_status_name(inject_xtra_ind.status), + inject_xtra.partNum, inject_xtra_ind.partNum); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + break; + } + + len_injected += inject_xtra.partData_len; + LOC_LOGD("%s:%d]: XTRA injected length: %d\n", __func__, __LINE__, + len_injected); + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +#ifdef FEATURE_IPV6 +enum loc_api_adapter_err LocApiV02Adapter :: atlOpenStatus( + int handle, int is_succ, char* apn, AGpsBearerType bear, + AGpsType agpsType) +#else +enum loc_api_adapter_err LocApiV02Adapter :: atlOpenStatus( + int handle, int is_succ, char* apn, + AGpsType agpsType) +#endif +{ + locClientStatusEnumType result = eLOC_CLIENT_SUCCESS; + locClientReqUnionType req_union; + qmiLocInformLocationServerConnStatusReqMsgT_v02 conn_status_req; + qmiLocInformLocationServerConnStatusIndMsgT_v02 conn_status_ind; + +#ifdef FEATURE_IPV6 + LOC_LOGD("%s:%d]: ATL open handle = %d, is_succ = %d, " + "APN = [%s], bearer = %d \n", __func__, __LINE__, + handle, is_succ, apn, bear); +#else + LOC_LOGD("%s:%d]: ATL open handle = %d, is_succ = %d, " + "APN = [%s] \n", __func__, __LINE__, + handle, is_succ, apn); +#endif + + memset(&conn_status_req, 0, sizeof(conn_status_req)); + memset(&conn_status_ind, 0, sizeof(conn_status_ind)); + + // Fill in data + conn_status_req.connHandle = handle; + + conn_status_req.requestType = eQMI_LOC_SERVER_REQUEST_OPEN_V02; + + if(is_succ) + { + conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_SUCCESS_V02; + + strlcpy(conn_status_req.apnProfile.apnName, apn, + sizeof(conn_status_req.apnProfile.apnName) ); + +#ifdef FEATURE_IPV6 + switch(bear) + { + case AGPS_APN_BEARER_IPV4: + conn_status_req.apnProfile.pdnType = + eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4_V02; + break; + + case AGPS_APN_BEARER_IPV6: + conn_status_req.apnProfile.pdnType = + eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV6_V02; + break; + + case AGPS_APN_BEARER_IPV4V6: + conn_status_req.apnProfile.pdnType = + eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4V6_V02; + break; + + default: + LOC_LOGE("%s:%d]:invalid bearer type\n",__func__,__LINE__); + return LOC_API_ADAPTER_ERR_INVALID_HANDLE; + } +#else + conn_status_req.apnProfile.pdnType = + eQMI_LOC_APN_PROFILE_PDN_TYPE_IPV4_V02; +#endif + + conn_status_req.apnProfile_valid = 1; + } + else + { + conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_FAILURE_V02; + } + + req_union.pInformLocationServerConnStatusReq = &conn_status_req; + + result = loc_sync_send_req(clientHandle, + QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02, + req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT, + QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02, + &conn_status_ind); + + if(result != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != conn_status_ind.status) + { + LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ", + __func__, __LINE__, + loc_get_v02_client_status_name(result), + loc_get_v02_qmi_status_name(conn_status_ind.status)); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; + +} + + +/* close atl connection */ +enum loc_api_adapter_err LocApiV02Adapter :: atlCloseStatus( + int handle, int is_succ) +{ + locClientStatusEnumType result = eLOC_CLIENT_SUCCESS; + locClientReqUnionType req_union; + qmiLocInformLocationServerConnStatusReqMsgT_v02 conn_status_req; + qmiLocInformLocationServerConnStatusIndMsgT_v02 conn_status_ind; + + LOC_LOGD("%s:%d]: ATL close handle = %d, is_succ = %d\n", + __func__, __LINE__, handle, is_succ); + + memset(&conn_status_req, 0, sizeof(conn_status_req)); + memset(&conn_status_ind, 0, sizeof(conn_status_ind)); + + // Fill in data + conn_status_req.connHandle = handle; + + conn_status_req.requestType = eQMI_LOC_SERVER_REQUEST_CLOSE_V02; + + if(is_succ) + { + conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_SUCCESS_V02; + } + else + { + conn_status_req.statusType = eQMI_LOC_SERVER_REQ_STATUS_FAILURE_V02; + } + + req_union.pInformLocationServerConnStatusReq = &conn_status_req; + + result = loc_sync_send_req(clientHandle, + QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02, + req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT, + QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02, + &conn_status_ind); + + if(result != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != conn_status_ind.status) + { + LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ", + __func__, __LINE__, + loc_get_v02_client_status_name(result), + loc_get_v02_qmi_status_name(conn_status_ind.status)); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* set the SUPL version */ +enum loc_api_adapter_err LocApiV02Adapter :: setSUPLVersion(uint32_t version) +{ + locClientStatusEnumType result = eLOC_CLIENT_SUCCESS; + locClientReqUnionType req_union; + + qmiLocSetProtocolConfigParametersReqMsgT_v02 supl_config_req; + qmiLocSetProtocolConfigParametersIndMsgT_v02 supl_config_ind; + + LOC_LOGD("%s:%d]: supl version = %d\n", __func__, __LINE__, version); + + + memset(&supl_config_req, 0, sizeof(supl_config_req)); + memset(&supl_config_ind, 0, sizeof(supl_config_ind)); + + supl_config_req.suplVersion_valid = 1; + // SUPL version from MSByte to LSByte: + // (reserved)(major version)(minor version)(serviceIndicator) + + supl_config_req.suplVersion = (version == 0x00020000)? + eQMI_LOC_SUPL_VERSION_2_0_V02 : eQMI_LOC_SUPL_VERSION_1_0_V02; + + req_union.pSetProtocolConfigParametersReq = &supl_config_req; + + result = loc_sync_send_req(clientHandle, + QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02, + req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT, + QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02, + &supl_config_ind); + + if(result != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != supl_config_ind.status) + { + LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ", + __func__, __LINE__, + loc_get_v02_client_status_name(result), + loc_get_v02_qmi_status_name(supl_config_ind.status)); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* set the configuration for LTE positioning profile (LPP) */ +enum loc_api_adapter_err LocApiV02Adapter :: 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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* set the Sensor Configuration */ +enum loc_api_adapter_err LocApiV02Adapter :: setSensorControlConfig(int sensorsDisabled) +{ + locClientStatusEnumType result = eLOC_CLIENT_SUCCESS; + locClientReqUnionType req_union; + + qmiLocSetSensorControlConfigReqMsgT_v02 sensor_config_req; + qmiLocSetSensorControlConfigIndMsgT_v02 sensor_config_ind; + + LOC_LOGD("%s:%d]: sensors disabled = %d\n", __func__, __LINE__, sensorsDisabled); + + memset(&sensor_config_req, 0, sizeof(sensor_config_req)); + memset(&sensor_config_ind, 0, sizeof(sensor_config_ind)); + + sensor_config_req.sensorsUsage_valid = 1; + sensor_config_req.sensorsUsage = (sensorsDisabled == 1) ? eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_DISABLE_V02 + : eQMI_LOC_SENSOR_CONFIG_SENSOR_USE_ENABLE_V02; + + req_union.pSetSensorControlConfigReq = &sensor_config_req; + + result = loc_sync_send_req(clientHandle, + QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02, + req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT, + QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02, + &sensor_config_ind); + + if(result != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != sensor_config_ind.status) + { + LOC_LOGE ("%s:%d]: Error status = %s, ind..status = %s ", + __func__, __LINE__, + loc_get_v02_client_status_name(result), + loc_get_v02_qmi_status_name(sensor_config_ind.status)); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* set the Sensor Properties */ +enum loc_api_adapter_err LocApiV02Adapter :: setSensorProperties(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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* set the Sensor Performance Config */ +enum loc_api_adapter_err LocApiV02Adapter :: setSensorPerfControlConfig(int controlMode, + int accelSamplesPerBatch, int accelBatchesPerSec, + int gyroSamplesPerBatch, int gyroBatchesPerSec, + 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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* set the External Power Config */ +enum loc_api_adapter_err LocApiV02Adapter :: setExtPowerConfig(int isBatteryCharging) +{ + locClientStatusEnumType result = eLOC_CLIENT_SUCCESS; + locClientReqUnionType req_union; + + qmiLocSetExternalPowerConfigReqMsgT_v02 ext_pwr_req; + qmiLocGetExternalPowerConfigIndMsgT_v02 ext_pwr_ind; + + LOC_LOGI("%s:%d]: Ext Pwr Config (isBatteryCharging)(%u)", + __FUNCTION__, + __LINE__, + isBatteryCharging + ); + + memset(&ext_pwr_req, 0, sizeof(ext_pwr_req)); + memset(&ext_pwr_ind, 0, sizeof(ext_pwr_ind)); + + switch(isBatteryCharging) + { + /* Charging */ + case 1: + ext_pwr_req.externalPowerState = eQMI_LOC_EXTERNAL_POWER_CONNECTED_V02; + break; + + /* Not charging */ + case 0: + ext_pwr_req.externalPowerState = eQMI_LOC_EXTERNAL_POWER_NOT_CONNECTED_V02; + break; + + default: + LOC_LOGE("%s:%d]: Invalid ext power state = %d!", + __FUNCTION__, + __LINE__, + isBatteryCharging); + return LOC_API_ADAPTER_ERR_INVALID_PARAMETER; + break; + } + + req_union.pSetExternalPowerConfigReq = &ext_pwr_req; + + result = loc_sync_send_req(clientHandle, + QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02, + req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT, + QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02, + &ext_pwr_ind); + + if(result != eLOC_CLIENT_SUCCESS || + eQMI_LOC_SUCCESS_V02 != ext_pwr_ind.status) + { + LOC_LOGE ("%s:%d]: Error status = %d, ind..status = %d ", + __func__, __LINE__, result, ext_pwr_ind.status); + + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + + return LOC_API_ADAPTER_ERR_SUCCESS; +} + +/* set the Positioning Protocol on A-GLONASS system */ +enum loc_api_adapter_err LocApiV02Adapter :: 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%lx\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 LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + } + return LOC_API_ADAPTER_ERR_SUCCESS; +} + + +/* Convert event mask from loc eng to loc_api_v02 format */ +locClientEventMaskType LocApiV02Adapter :: convertMask( + LOC_API_ADAPTER_EVENT_MASK_T mask) +{ + locClientEventMaskType eventMask = 0; + LOC_LOGD("%s:%d]: adapter mask = %u\n", __func__, __LINE__, mask); + + if(mask & LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT) + eventMask |= QMI_LOC_EVENT_MASK_POSITION_REPORT_V02; + + if(mask & LOC_API_ADAPTER_BIT_SATELLITE_REPORT) + eventMask |= QMI_LOC_EVENT_MASK_GNSS_SV_INFO_V02; + + /* treat NMEA_1Hz and NMEA_POSITION_REPORT the same*/ + if( (mask & LOC_API_ADAPTER_BIT_NMEA_POSITION_REPORT) || + (mask & LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT) ) + eventMask |= QMI_LOC_EVENT_MASK_NMEA_V02; + + if(mask & LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST) + eventMask |= QMI_LOC_EVENT_MASK_NI_NOTIFY_VERIFY_REQ_V02; + + if(mask & LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST) + { + // TBD: This needs to be decoupled in the HAL + eventMask |= QMI_LOC_EVENT_MASK_INJECT_PREDICTED_ORBITS_REQ_V02; + eventMask |= QMI_LOC_EVENT_MASK_INJECT_TIME_REQ_V02; + eventMask |= QMI_LOC_EVENT_MASK_INJECT_POSITION_REQ_V02; + } + + if(mask & LOC_API_ADAPTER_BIT_STATUS_REPORT) + { + eventMask |= (QMI_LOC_EVENT_MASK_ENGINE_STATE_V02); + } + + if(mask & LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST) + eventMask |= QMI_LOC_EVENT_MASK_LOCATION_SERVER_CONNECTION_REQ_V02; + + return eventMask; +} + +/* Convert error from loc_api_v02 to loc eng format*/ +enum loc_api_adapter_err LocApiV02Adapter :: convertErr( + locClientStatusEnumType status) +{ + switch( status) + { + case LOC_API_ADAPTER_ERR_SUCCESS: + return LOC_API_ADAPTER_ERR_SUCCESS; + + case eLOC_CLIENT_FAILURE_GENERAL: + return LOC_API_ADAPTER_ERR_GENERAL_FAILURE; + + case eLOC_CLIENT_FAILURE_UNSUPPORTED: + return LOC_API_ADAPTER_ERR_UNSUPPORTED; + + case eLOC_CLIENT_FAILURE_INVALID_PARAMETER: + return LOC_API_ADAPTER_ERR_INVALID_PARAMETER; + + case eLOC_CLIENT_FAILURE_ENGINE_BUSY: + return LOC_API_ADAPTER_ERR_ENGINE_BUSY; + + case eLOC_CLIENT_FAILURE_PHONE_OFFLINE: + return LOC_API_ADAPTER_ERR_PHONE_OFFLINE; + + case eLOC_CLIENT_FAILURE_TIMEOUT: + return LOC_API_ADAPTER_ERR_TIMEOUT; + + case eLOC_CLIENT_FAILURE_INVALID_HANDLE: + return LOC_API_ADAPTER_ERR_INVALID_HANDLE; + + case eLOC_CLIENT_FAILURE_SERVICE_NOT_PRESENT: + return LOC_API_ADAPTER_ERR_SERVICE_NOT_PRESENT; + + default: + return LOC_API_ADAPTER_ERR_FAILURE; + } +} + +/* convert position report to loc eng format and send the converted + position to loc eng */ + +void LocApiV02Adapter :: reportPosition ( + const qmiLocEventPositionReportIndMsgT_v02 *location_report_ptr) +{ + UlpLocation location; + LocPosTechMask tech_Mask = LOC_POS_TECH_MASK_DEFAULT; + LOC_LOGD("Reporting postion from V2 Adapter\n"); + memset(&location, 0, sizeof (UlpLocation)); + location.size = sizeof(location); + GpsLocationExtended locationExtended; + memset(&locationExtended, 0, sizeof (GpsLocationExtended)); + locationExtended.size = sizeof(locationExtended); + // Process the position from final and intermediate reports + + if( (location_report_ptr->sessionStatus == eQMI_LOC_SESS_STATUS_SUCCESS_V02) || + (location_report_ptr->sessionStatus == eQMI_LOC_SESS_STATUS_IN_PROGRESS_V02) + ) + { + // Latitude & Longitude + if( (location_report_ptr->latitude_valid == 1 ) && + (location_report_ptr->longitude_valid == 1) && + (location_report_ptr->latitude != 0 || + location_report_ptr->longitude!= 0)) + { + location.gpsLocation.flags |= GPS_LOCATION_HAS_LAT_LONG; + location.gpsLocation.latitude = location_report_ptr->latitude; + location.gpsLocation.longitude = location_report_ptr->longitude; + + // Time stamp (UTC) + if(location_report_ptr->timestampUtc_valid == 1) + { + location.gpsLocation.timestamp = location_report_ptr->timestampUtc; + } + + // Altitude + if(location_report_ptr->altitudeWrtEllipsoid_valid == 1 ) + { + location.gpsLocation.flags |= GPS_LOCATION_HAS_ALTITUDE; + location.gpsLocation.altitude = location_report_ptr->altitudeWrtEllipsoid; + } + + // Speed + if((location_report_ptr->speedHorizontal_valid == 1) && + (location_report_ptr->speedVertical_valid ==1 ) ) + { + location.gpsLocation.flags |= GPS_LOCATION_HAS_SPEED; + location.gpsLocation.speed = sqrt( + (location_report_ptr->speedHorizontal * + location_report_ptr->speedHorizontal) + + (location_report_ptr->speedVertical * + location_report_ptr->speedVertical) ); + } + + // Heading + if(location_report_ptr->heading_valid == 1) + { + location.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; + } + + // 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; + } + + LocApiAdapter::reportPosition( location, + locationExtended, + locEngHandle.extPosInfo((void*)location_report_ptr), + (location_report_ptr->sessionStatus + == eQMI_LOC_SESS_STATUS_IN_PROGRESS_V02 ? + LOC_SESS_INTERMEDIATE : LOC_SESS_SUCCESS), + tech_Mask); + } + } + else + { + LocApiAdapter::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 LocApiV02Adapter :: reportSv ( + const qmiLocEventGnssSvInfoIndMsgT_v02 *gnss_report_ptr) +{ + GpsSvStatus SvStatus; + GpsLocationExtended locationExtended; + int num_svs_max, i; + const qmiLocSvInfoStructT_v02 *sv_info_ptr; + + LOC_LOGV ("%s:%d]: num of sv = %d\n", __func__, __LINE__, + gnss_report_ptr->svList_len); + + num_svs_max = 0; + memset (&SvStatus, 0, sizeof (GpsSvStatus)); + memset(&locationExtended, 0, sizeof (GpsLocationExtended)); + locationExtended.size = sizeof(locationExtended); + if(gnss_report_ptr->svList_valid == 1) + { + num_svs_max = gnss_report_ptr->svList_len; + if(num_svs_max > GPS_MAX_SVS) + { + num_svs_max = GPS_MAX_SVS; + } + SvStatus.num_svs = 0; + for(i = 0; i < num_svs_max; i++) + { + sv_info_ptr = &(gnss_report_ptr->svList[i]); + if((sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_SYSTEM_V02) && + (sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_GNSS_SVID_V02) + && (sv_info_ptr->gnssSvId != 0 )) + { + if(sv_info_ptr->system == eQMI_LOC_SV_SYSTEM_GPS_V02) + { + SvStatus.sv_list[SvStatus.num_svs].size = sizeof(GpsSvStatus); + SvStatus.sv_list[SvStatus.num_svs].prn = (int)sv_info_ptr->gnssSvId; + + // We only have the data field to report gps eph and alm mask + if(sv_info_ptr->validMask & + QMI_LOC_SV_INFO_MASK_VALID_SVINFO_MASK_V02) + { + if(sv_info_ptr->svInfoMask & + QMI_LOC_SVINFO_MASK_HAS_EPHEMERIS_V02) + { + SvStatus.ephemeris_mask |= (1 << (sv_info_ptr->gnssSvId-1)); + } + if(sv_info_ptr->svInfoMask & + QMI_LOC_SVINFO_MASK_HAS_ALMANAC_V02) + { + SvStatus.almanac_mask |= (1 << (sv_info_ptr->gnssSvId-1)); + } + } + + if((sv_info_ptr->validMask & + QMI_LOC_SV_INFO_MASK_VALID_PROCESS_STATUS_V02) + && + (sv_info_ptr->svStatus == eQMI_LOC_SV_STATUS_TRACK_V02)) + { + SvStatus.used_in_fix_mask |= (1 << (sv_info_ptr->gnssSvId-1)); + } + } + // SBAS: GPS RPN: 120-151, + // In exteneded measurement report, we follow nmea standard, + // which is from 33-64. + else if(sv_info_ptr->system == eQMI_LOC_SV_SYSTEM_SBAS_V02) + { + SvStatus.sv_list[SvStatus.num_svs].prn = + sv_info_ptr->gnssSvId + 33 - 120; + } + // Gloness: Slot id: 1-32 + // In extended measurement report, we follow nmea standard, + // which is 65-96 + else if(sv_info_ptr->system == eQMI_LOC_SV_SYSTEM_GLONASS_V02) + { + SvStatus.sv_list[SvStatus.num_svs].prn = + sv_info_ptr->gnssSvId + (65-1); + } + // Unsupported SV system + else + { + continue; + } + } + + if(sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_SNR_V02 ) + { + SvStatus.sv_list[SvStatus.num_svs].snr = sv_info_ptr->snr; + } + + if(sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_ELEVATION_V02) + { + SvStatus.sv_list[SvStatus.num_svs].elevation = sv_info_ptr->elevation; + } + + if(sv_info_ptr->validMask & QMI_LOC_SV_INFO_MASK_VALID_AZIMUTH_V02) + { + SvStatus.sv_list[SvStatus.num_svs].azimuth = sv_info_ptr->azimuth; + } + + SvStatus.num_svs++; + } + } + + if (SvStatus.num_svs >= 0) + { + LOC_LOGV ("%s:%d]: firing SV callback\n", __func__, __LINE__); + LocApiAdapter::reportSv(SvStatus, + locationExtended, + locEngHandle.extSvInfo((void*)gnss_report_ptr)); + } +} + +/* convert engine state report to loc eng format and send the converted + report to loc eng */ +void LocApiV02Adapter :: reportEngineState ( + const qmiLocEventEngineStateIndMsgT_v02 *engine_state_ptr) +{ + + LOC_LOGV("%s:%d]: state = %d\n", __func__, __LINE__, + engine_state_ptr->engineState); + + if (engine_state_ptr->engineState == eQMI_LOC_ENGINE_STATE_ON_V02) + { + LocApiAdapter::reportStatus(GPS_STATUS_ENGINE_ON); + LocApiAdapter::reportStatus(GPS_STATUS_SESSION_BEGIN); + } + else if (engine_state_ptr->engineState == eQMI_LOC_ENGINE_STATE_OFF_V02) + { + LocApiAdapter::reportStatus(GPS_STATUS_SESSION_END); + LocApiAdapter::reportStatus(GPS_STATUS_ENGINE_OFF); + } + else + { + LocApiAdapter::reportStatus(GPS_STATUS_NONE); + } + +} + +/* convert fix session state report to loc eng format and send the converted + report to loc eng */ +void LocApiV02Adapter :: reportFixSessionState ( + const qmiLocEventFixSessionStateIndMsgT_v02 *fix_session_state_ptr) +{ + GpsStatusValue status; + LOC_LOGD("%s:%d]: state = %d\n", __func__, __LINE__, + fix_session_state_ptr->sessionState); + + status = GPS_STATUS_NONE; + if (fix_session_state_ptr->sessionState == eQMI_LOC_FIX_SESSION_STARTED_V02) + { + status = GPS_STATUS_SESSION_BEGIN; + } + else if (fix_session_state_ptr->sessionState + == eQMI_LOC_FIX_SESSION_FINISHED_V02) + { + status = GPS_STATUS_SESSION_END; + } + LocApiAdapter::reportStatus(status); +} + +/* convert NMEA report to loc eng format and send the converted + report to loc eng */ +void LocApiV02Adapter :: reportNmea ( + const qmiLocEventNmeaIndMsgT_v02 *nmea_report_ptr) +{ + + LocApiAdapter::reportNmea(nmea_report_ptr->nmea, + strlen(nmea_report_ptr->nmea)); + + LOC_LOGD("%s:%d]: $%c%c%c\n", __func__, __LINE__, + nmea_report_ptr->nmea[3], nmea_report_ptr->nmea[4], + nmea_report_ptr->nmea[5]); +} + +/* convert and report an ATL request to loc engine */ +void LocApiV02Adapter :: reportAtlRequest( + const qmiLocEventLocationServerConnectionReqIndMsgT_v02 * server_request_ptr) +{ + uint32_t connHandle = server_request_ptr->connHandle; + // service ATL open request; copy the WWAN type + if(server_request_ptr->requestType == eQMI_LOC_SERVER_REQUEST_OPEN_V02 ) + { + AGpsType agpsType; +#ifdef FEATURE_IPV6 + switch(server_request_ptr->wwanType) + { + case eQMI_LOC_WWAN_TYPE_INTERNET_V02: + agpsType = AGPS_TYPE_WWAN_ANY; + break; + + case eQMI_LOC_WWAN_TYPE_AGNSS_V02: + agpsType = AGPS_TYPE_SUPL; + break; + + default: + agpsType = AGPS_TYPE_WWAN_ANY; + break; + } +#else + agpsType = AGPS_TYPE_SUPL; +#endif + LocApiAdapter::requestATL(connHandle, agpsType); + } + + // service the ATL close request + else if (server_request_ptr->requestType == eQMI_LOC_SERVER_REQUEST_CLOSE_V02) + { + LocApiAdapter::releaseATL(connHandle); + } +} + +/* conver the NI report to loc eng format and send t loc engine */ +void LocApiV02Adapter :: reportNiRequest( + const qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *ni_req_ptr) +{ + GpsNiNotification notif; + + /* initialize the notification*/ + memset(notif.extras, 0, sizeof notif.extras); + memset(notif.text, 0, sizeof notif.text); + memset(notif.requestor_id, 0, sizeof notif.requestor_id); + + /* NI timeout gets overwritten in LocApiAdapter, + initializing to 0 here */ + notif.timeout = 0; + + notif.text_encoding = GPS_ENC_NONE ; + + notif.requestor_id_encoding = GPS_ENC_UNKNOWN; + + notif.notify_flags = 0; + + notif.default_response = GPS_NI_RESPONSE_NORESP; + + /*Handle Vx request */ + if(ni_req_ptr->NiVxInd_valid == 1) + { + const qmiLocNiVxNotifyVerifyStructT_v02 *vx_req = &(ni_req_ptr->NiVxInd); + + notif.ni_type = GPS_NI_TYPE_VOICE; + + // Requestor ID, the requestor id recieved is NULL terminated + hexcode(notif.requestor_id, sizeof notif.requestor_id, + (char *)vx_req->requestorId, vx_req->requestorId_len ); + } + + /* Handle UMTS CP request*/ + else if(ni_req_ptr->NiUmtsCpInd_valid == 1) + { + const qmiLocNiUmtsCpNotifyVerifyStructT_v02 *umts_cp_req = + &ni_req_ptr->NiUmtsCpInd; + + notif.ni_type = GPS_NI_TYPE_UMTS_CTRL_PLANE; + + /* notificationText should always be a NULL terminated string */ + hexcode(notif.text, sizeof notif.text, + (char *)umts_cp_req->notificationText, + umts_cp_req->notificationText_len); + + /* Store requestor ID */ + hexcode(notif.requestor_id, sizeof(notif.requestor_id), + (char *)umts_cp_req->requestorId.codedString, + umts_cp_req->requestorId.codedString_len); + + /* convert encodings */ + notif.text_encoding = convertNiEncoding(umts_cp_req->dataCodingScheme); + + notif.requestor_id_encoding = + convertNiEncoding(umts_cp_req->requestorId.dataCodingScheme); + + /* LCS address (using extras field) */ + if ( umts_cp_req->clientAddress_len != 0) + { + char lcs_addr[32]; // Decoded LCS address for UMTS CP NI + + // Copy LCS Address into notif.extras in the format: Address = 012345 + strlcat(notif.extras, LOC_NI_NOTIF_KEY_ADDRESS, sizeof (notif.extras)); + strlcat(notif.extras, " = ", sizeof notif.extras); + int addr_len = 0; + const char *address_source = NULL; + address_source = (char *)umts_cp_req->clientAddress; + // client Address is always NULL terminated + addr_len = decodeAddress(lcs_addr, sizeof(lcs_addr), address_source, + umts_cp_req->clientAddress_len); + + // The address is ASCII string + if (addr_len) + { + strlcat(notif.extras, lcs_addr, sizeof notif.extras); + } + } + + } + else if(ni_req_ptr->NiSuplInd_valid == 1) + { + const qmiLocNiSuplNotifyVerifyStructT_v02 *supl_req = + &ni_req_ptr->NiSuplInd; + + notif.ni_type = GPS_NI_TYPE_UMTS_SUPL; + + // Client name + if (supl_req->valid_flags & QMI_LOC_SUPL_CLIENT_NAME_MASK_V02) + { + hexcode(notif.text, sizeof(notif.text), + (char *)supl_req->clientName.formattedString, + supl_req->clientName.formattedString_len); + LOC_LOGV("%s:%d]: SUPL NI: client_name: %s \n", __func__, __LINE__, + notif.text); + } + else + { + LOC_LOGV("%s:%d]: SUPL NI: client_name not present.", + __func__, __LINE__); + } + + // Requestor ID + if (supl_req->valid_flags & QMI_LOC_SUPL_REQUESTOR_ID_MASK_V02) + { + hexcode(notif.requestor_id, sizeof notif.requestor_id, + (char*)supl_req->requestorId.formattedString, + supl_req->requestorId.formattedString_len ); + + LOC_LOGV("%s:%d]: SUPL NI: requestor_id: %s \n", __func__, __LINE__, + notif.requestor_id); + } + else + { + LOC_LOGV("%s:%d]: SUPL NI: requestor_id not present.", + __func__, __LINE__); + } + + // Encoding type + if (supl_req->valid_flags & QMI_LOC_SUPL_DATA_CODING_SCHEME_MASK_V02) + { + notif.text_encoding = convertNiEncoding(supl_req->dataCodingScheme); + + notif.requestor_id_encoding = convertNiEncoding(supl_req->dataCodingScheme); + } + else + { + notif.text_encoding = notif.requestor_id_encoding = GPS_ENC_UNKNOWN; + } + + } //ni_req_ptr->NiSuplInd_valid == 1 + + else + { + LOC_LOGE("%s:%d]: unknown request event \n",__func__, __LINE__); + return; + } + + // Set default_response & notify_flags + convertNiNotifyVerifyType(¬if, ni_req_ptr->notificationType); + + qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *ni_req_copy_ptr = + (qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *)malloc(sizeof(*ni_req_copy_ptr)); + + if( NULL != ni_req_copy_ptr) + { + memcpy(ni_req_copy_ptr, ni_req_ptr, sizeof(*ni_req_copy_ptr)); + + LocApiAdapter::requestNiNotify(notif, (const void*)ni_req_copy_ptr); + } + else + { + LOC_LOGE("%s:%d]: Error copying NI request\n", __func__, __LINE__); + } + +} + +/* convert Ni Encoding type from QMI_LOC to loc eng format */ +GpsNiEncodingType LocApiV02Adapter ::convertNiEncoding( + qmiLocNiDataCodingSchemeEnumT_v02 loc_encoding) +{ + GpsNiEncodingType enc = GPS_ENC_UNKNOWN; + + switch (loc_encoding) + { + case eQMI_LOC_NI_SUPL_UTF8_V02: + enc = GPS_ENC_SUPL_UTF8; + break; + case eQMI_LOC_NI_SUPL_UCS2_V02: + enc = GPS_ENC_SUPL_UCS2; + break; + case eQMI_LOC_NI_SUPL_GSM_DEFAULT_V02: + enc = GPS_ENC_SUPL_GSM_DEFAULT; + break; + case eQMI_LOC_NI_SS_LANGUAGE_UNSPEC_V02: + enc = GPS_ENC_SUPL_GSM_DEFAULT; // SS_LANGUAGE_UNSPEC = GSM + break; + default: + break; + } + + return enc; +} + +/*convert NI notify verify type from QMI LOC to loc eng format*/ +bool LocApiV02Adapter :: convertNiNotifyVerifyType ( + GpsNiNotification *notif, + qmiLocNiNotifyVerifyEnumT_v02 notif_priv) +{ + switch (notif_priv) + { + case eQMI_LOC_NI_USER_NO_NOTIFY_NO_VERIFY_V02: + notif->notify_flags = 0; + break; + + case eQMI_LOC_NI_USER_NOTIFY_ONLY_V02: + notif->notify_flags = GPS_NI_NEED_NOTIFY; + break; + + case eQMI_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP_V02: + notif->notify_flags = GPS_NI_NEED_NOTIFY | GPS_NI_NEED_VERIFY; + notif->default_response = GPS_NI_RESPONSE_ACCEPT; + break; + + case eQMI_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP_V02: + notif->notify_flags = GPS_NI_NEED_NOTIFY | GPS_NI_NEED_VERIFY; + notif->default_response = GPS_NI_RESPONSE_DENY; + break; + + case eQMI_LOC_NI_USER_NOTIFY_VERIFY_PRIVACY_OVERRIDE_V02: + notif->notify_flags = GPS_NI_PRIVACY_OVERRIDE; + break; + + default: + return false; + } + + return true; +} + +/* event callback registered with the loc_api v02 interface */ +void LocApiV02Adapter :: eventCb(locClientHandleType clientHandle, + uint32_t eventId, locClientEventIndUnionType eventPayload) +{ + LOC_LOGD("%s:%d]: event id = %d\n", __func__, __LINE__, + eventId); + + switch(eventId) + { + //Position Report + case QMI_LOC_EVENT_POSITION_REPORT_IND_V02: + reportPosition(eventPayload.pPositionReportEvent); + break; + + // Satellite report + case QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02: + reportSv(eventPayload.pGnssSvInfoReportEvent); + break; + + // Status report + case QMI_LOC_EVENT_ENGINE_STATE_IND_V02: + reportEngineState(eventPayload.pEngineState); + break; + + case QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02: + reportFixSessionState(eventPayload.pFixSessionState); + break; + + // NMEA + case QMI_LOC_EVENT_NMEA_IND_V02: + reportNmea(eventPayload.pNmeaReportEvent); + break; + + // XTRA request + case QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02: + LOC_LOGD("%s:%d]: XTRA download request\n", __func__, + __LINE__); + requestXtraData(); + break; + + // time request + case QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02: + LOC_LOGD("%s:%d]: Time request\n", __func__, + __LINE__); + requestTime(); + break; + + //position request + case QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02: + LOC_LOGD("%s:%d]: Position request\n", __func__, + __LINE__); + //requestPosition(); + break; + + // NI request + case QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02: + reportNiRequest(eventPayload.pNiNotifyVerifyReqEvent); + break; + + // AGPS connection request + case QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02: + reportAtlRequest(eventPayload.pLocationServerConnReqEvent); + break; + } +} + +/* Call the service LocApiAdapter down event*/ +void LocApiV02Adapter :: errorCb(locClientHandleType handle, + locClientErrorEnumType errorId) +{ + if(errorId == eLOC_CLIENT_ERROR_SERVICE_UNAVAILABLE) + { + LOC_LOGE("%s:%d]: Service unavailable error\n", + __func__, __LINE__); + + LocApiAdapter::handleEngineDownEvent(); + + /* immediately send the engine up event so that + the loc engine re-initializes the adapter and the + loc-api_v02 interface */ + + LocApiAdapter::handleEngineUpEvent(); + } +} + +/* return a Loc API adapter */ +LocApiAdapter* getLocApiAdapter(LocEng &locEng) +{ + return(new LocApiV02Adapter(locEng)); +} diff --git a/loc_api/loc_api_v02/LocApiV02Adapter.h b/loc_api/loc_api_v02/LocApiV02Adapter.h new file mode 100644 index 00000000..10ea4069 --- /dev/null +++ b/loc_api/loc_api_v02/LocApiV02Adapter.h @@ -0,0 +1,173 @@ +/* Copyright (c) 2011-2012, 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_ADAPTER_H +#define LOC_API_V_0_2_ADAPTER_H + +#include +#include "loc_api_v02_client.h" +#include +#include + +/* This class derives from the LocApiAdapter class. + The members of this class are responsible for converting + the Loc API V02 data structures into Loc Engine data structures. + This class also implements some of the virtual functions that + handle the requests from loc engine. */ +class LocApiV02Adapter : public LocApiAdapter { + + /* loc api v02 handle*/ + locClientHandleType clientHandle; + + /* events the client is registered for */ + locClientEventMaskType eventMask; + + /* Convert event mask from loc eng to loc_api_v02 format */ + locClientEventMaskType convertMask(LOC_API_ADAPTER_EVENT_MASK_T mask); + + /* Convert error from loc_api_v02 to loc eng format*/ + enum loc_api_adapter_err convertErr(locClientStatusEnumType status); + + /* convert Ni Encoding type from QMI_LOC to loc eng format */ + GpsNiEncodingType convertNiEncoding( + qmiLocNiDataCodingSchemeEnumT_v02 loc_encoding); + + /*convert NI notify verify type from QMI LOC to loc eng format*/ + bool convertNiNotifyVerifyType (GpsNiNotification *notif, + qmiLocNiNotifyVerifyEnumT_v02 notif_priv); + + /* close Loc API V02 client */ + int deInitLocClient(); + + /* convert position report to loc eng format and send the converted + position to loc eng */ + void reportPosition + (const qmiLocEventPositionReportIndMsgT_v02 *location_report_ptr); + + /* convert satellite report to loc eng format and send the converted + report to loc eng */ + void reportSv (const qmiLocEventGnssSvInfoIndMsgT_v02 *gnss_report_ptr); + + /* convert engine state report to loc eng format and send the converted + report to loc eng */ + void reportEngineState ( + const qmiLocEventEngineStateIndMsgT_v02 *engine_state_ptr); + + /* convert fix session report to loc eng format and send the converted + report to loc eng */ + void reportFixSessionState ( + const qmiLocEventFixSessionStateIndMsgT_v02 *fix_session_state_ptr); + + /* convert NMEA report to loc eng format and send the converted + report to loc eng */ + void reportNmea (const qmiLocEventNmeaIndMsgT_v02 *nmea_report_ptr); + + /* convert and report an ATL request to loc engine */ + void reportAtlRequest( + const qmiLocEventLocationServerConnectionReqIndMsgT_v02 + *server_request_ptr); + + /* convert and report NI request to loc eng */ + void reportNiRequest( + const qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *ni_req_ptr); + +public: + LocApiV02Adapter(LocEng &locEng); + ~LocApiV02Adapter(); + + /* event callback registered with the loc_api v02 interface */ + void eventCb(locClientHandleType client_handle, + uint32_t loc_event_id, + locClientEventIndUnionType loc_event_payload); + + /* error callback, this function handles the service unavailable + error */ + void errorCb(locClientHandleType handle, + locClientErrorEnumType errorId); + + virtual enum loc_api_adapter_err reinit(); + + virtual enum loc_api_adapter_err startFix(); + + virtual enum loc_api_adapter_err stopFix(); + + virtual enum loc_api_adapter_err + setPositionMode(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); +#ifdef FEATURE_IPV6 + virtual enum loc_api_adapter_err + atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bear, + AGpsType agpsType); +#else + virtual enum loc_api_adapter_err + atlOpenStatus(int handle, int is_succ, char* apn, + AGpsType agpsType); +#endif + virtual enum loc_api_adapter_err atlCloseStatus(int handle, int is_succ); + virtual enum loc_api_adapter_err setSUPLVersion(uint32_t version); + virtual enum loc_api_adapter_err setLPPConfig(uint32_t profile); + + virtual enum loc_api_adapter_err + setSensorControlConfig(int sensorUsage); + + 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 setExtPowerConfig(int isBatteryCharging); + virtual enum loc_api_adapter_err setAGLONASSProtocol(unsigned long aGlonassProtocol); +}; + +#endif //LOC_API_V_0_2_ADAPTER_H diff --git a/loc_api/loc_api_v02/loc_api_sync_req.c b/loc_api/loc_api_v02/loc_api_sync_req.c new file mode 100644 index 00000000..6a086667 --- /dev/null +++ b/loc_api/loc_api_v02/loc_api_sync_req.c @@ -0,0 +1,547 @@ +/* Copyright (c) 2011-2012, 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 +#include +#include +#include +#include +#include +#include +#include +#include +#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 */ +) +{ + + 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)) + { + // copy the payload to the slot waiting for this ind + size_t payload_size = 0; + + LOC_LOGV("%s:%d]: found slot %d selected for ind %u \n", + __func__, __LINE__, i, ind_id); + + if(true == locClientGetSizeByRespIndId(ind_id, &payload_size) && + NULL != slot->recv_ind_payload_ptr && NULL != ind_payload_ptr) + { + LOC_LOGV("%s:%d]: copying ind payload size = %u \n", + __func__, __LINE__, payload_size); + + memcpy(slot->recv_ind_payload_ptr, ind_payload_ptr, payload_size); + + consumed = true; + + } + /* Received a callback while waiting, wake up thread to check it */ + if (slot->ind_is_waiting) + { + slot->recv_ind_id = ind_id; + + pthread_cond_signal(&slot->ind_arrived_cond); + } + else + { + /* If callback arrives before wait, remember it */ + LOC_LOGV("%s:%d]: ind %u arrived before wait was called \n", + __func__, __LINE__, ind_id); + + slot->ind_has_arrived = true; + } + } + pthread_mutex_unlock(&slot->sync_req_lock); + } + + if (!in_use) { + loc_sync_array.in_use = false; + } + + pthread_mutex_unlock(&loc_sync_call_mutex); +} + +/*=========================================================================== + +FUNCTION loc_alloc_slot + +DESCRIPTION + Allocates a buffer slot for the synchronous API call + +DEPENDENCIES + N/A + +RETURN VALUE + Select ID (>=0) : successful + -1 : buffer full + +SIDE EFFECTS + N/A + +===========================================================================*/ +static int loc_alloc_slot() +{ + int i, select_id = -1; /* no free buffer */ + + pthread_mutex_lock(&loc_sync_call_mutex); + + for (i = 0; i < LOC_SYNC_REQ_BUFFER_SIZE; i++) + { + if (!loc_sync_array.slot_in_use[i]) + { + select_id = i; + loc_sync_array.slot_in_use[i] = 1; + loc_sync_array.in_use = true; + break; + } + } + + pthread_mutex_unlock(&loc_sync_call_mutex); + LOC_LOGV("%s:%d]: returning slot %d\n", + __func__, __LINE__, select_id); + return select_id; +} + +/*=========================================================================== + +FUNCTION loc_free_slot + +DESCRIPTION + Frees a buffer slot after the synchronous API call + +DEPENDENCIES + N/A + +RETURN VALUE + None + +SIDE EFFECTS + N/A + +===========================================================================*/ +static void loc_free_slot(int select_id) +{ + int i; + loc_sync_req_data_s_type *slot; + + pthread_mutex_lock(&loc_sync_call_mutex); + + LOC_LOGD("%s:%d]: freeing slot %d\n", __func__, __LINE__, select_id); + + loc_sync_array.slot_in_use[select_id] = 0; + + slot = &loc_sync_array.slots[select_id]; + + slot->client_handle = LOC_CLIENT_INVALID_HANDLE_VALUE; + slot->ind_is_selected = false; /* is ind selected? */ + slot->ind_is_waiting = false; /* is waiting? */ + slot->ind_has_arrived = false; /* callback has arrived */ + slot->recv_ind_id = 0; /* ind to wait for */ + slot->recv_ind_payload_ptr = NULL; + slot->req_id = 0; + + // check if all slots are now free + for (i = 0; i < LOC_SYNC_REQ_BUFFER_SIZE; i++) + { + if (loc_sync_array.slot_in_use[i]) break; + } + + if (i >= LOC_SYNC_REQ_BUFFER_SIZE) + { + loc_sync_array.in_use = false; + } + + pthread_mutex_unlock(&loc_sync_call_mutex); +} + +/*=========================================================================== + +FUNCTION loc_sync_select_ind + +DESCRIPTION + Selects which indication to wait for. + + +DEPENDENCIES + N/A + +RETURN VALUE + Select ID (>=0) : successful + -ENOMEM : out of buffer + +SIDE EFFECTS + N/A + +===========================================================================*/ +static int loc_sync_select_ind( + locClientHandleType client_handle, /* Client handle */ + uint32_t ind_id, /* ind Id wait for */ + uint32_t req_id, /* req id */ + void * ind_payload_ptr /* ptr where payload should be copied to*/ +) +{ + int select_id = loc_alloc_slot(); + + LOC_LOGV("%s:%d]: client handle %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; + + // Select the callback we are waiting for + select_id = loc_sync_select_ind(client_handle, ind_id, req_id, + ind_payload_ptr); + + if (select_id >= 0) + { + status = locClientSendReq (client_handle, req_id, req_payload); + LOC_LOGV("%s:%d]: select_id = %d,locClientSendReq returned %d\n", + __func__, __LINE__, select_id, status); + + if (status != eLOC_CLIENT_SUCCESS ) + { + loc_free_slot(select_id); + } + else + { + // Wait for the indication callback + if (( rc = loc_sync_wait_for_ind( select_id, + timeout_msec / 1000, + ind_id) ) < 0) + { + if ( rc == -ETIMEDOUT) + status = eLOC_CLIENT_FAILURE_TIMEOUT; + else + status = eLOC_CLIENT_FAILURE_INTERNAL; + + // Callback waiting failed + LOC_LOGE("%s:%d]: loc_api_wait_for_ind failed, err %d, " + "select id %d, status %s", __func__, __LINE__, rc , + select_id, loc_get_v02_client_status_name(status)); + } + else + { + status = eLOC_CLIENT_SUCCESS; + LOC_LOGV("%s:%d]: success (select id %d)\n", + __func__, __LINE__, select_id); + } + } + } /* select id */ + + return status; +} + + diff --git a/loc_api/loc_api_v02/loc_api_sync_req.h b/loc_api/loc_api_v02/loc_api_sync_req.h new file mode 100644 index 00000000..4bd2b462 --- /dev/null +++ b/loc_api/loc_api_v02/loc_api_sync_req.h @@ -0,0 +1,68 @@ +/* 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_SYNC_REQ_H +#define LOC_SYNC_REQ_H + +#ifdef __cplusplus +extern "C" +{ +#endif +#include +#include +#include "loc_api_v02_client.h" + +#define LOC_ENGINE_SYNC_REQUEST_TIMEOUT (1000) // 1 second + +/* Init function */ +extern void loc_sync_req_init(); + + +/* Process Loc API indications to wake up blocked user threads */ +extern void loc_sync_process_ind( + locClientHandleType client_handle, /* handle of the client */ + uint32_t ind_id , /* respInd id */ + void *ind_payload_ptr /* payload */ +); + +/* Thread safe synchronous request, using Loc API status return code */ +extern locClientStatusEnumType loc_sync_send_req +( + locClientHandleType client_handle, + uint32_t req_id, /* req id */ + locClientReqUnionType req_payload, + uint32_t timeout_msec, + uint32_t ind_id, //ind ID to block for, usually the same as req_id */ + void *ind_payload_ptr /* can be NULL*/ +); + +#ifdef __cplusplus +} +#endif + +#endif /* LOC_SYNC_REQ_H */ diff --git a/loc_api/loc_api_v02/loc_api_v02_client.c b/loc_api/loc_api_v02/loc_api_v02_client.c new file mode 100644 index 00000000..882c5276 --- /dev/null +++ b/loc_api/loc_api_v02/loc_api_v02_client.c @@ -0,0 +1,2210 @@ +/* Copyright (c) 2011-2012, 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 +#include +#include + +#include +#include + +#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 + +//timeout in ms that the service waits for qmi-fw notification +#define LOC_CLIENT_SERVICE_TIMEOUT_UNIT (4000) +// total timeout for the service to come up +#define LOC_CLIENT_SERVICE_TIMEOUT_TOTAL (40000) + +/* Table to relate eventId, size and mask value used to enable the event*/ +typedef struct +{ + uint32_t eventId; + size_t eventSize; + locClientEventMaskType eventMask; +}locClientEventIndTableStructT; + + +static locClientEventIndTableStructT locClientEventIndTable[]= { + + // position report ind + { QMI_LOC_EVENT_POSITION_REPORT_IND_V02, + sizeof(qmiLocEventPositionReportIndMsgT_v02), + QMI_LOC_EVENT_MASK_POSITION_REPORT_V02 }, + + // satellite report ind + { QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02, + sizeof(qmiLocEventGnssSvInfoIndMsgT_v02), + QMI_LOC_EVENT_MASK_GNSS_SV_INFO_V02 }, + + // NMEA report ind + { QMI_LOC_EVENT_NMEA_IND_V02, + sizeof(qmiLocEventNmeaIndMsgT_v02), + QMI_LOC_EVENT_MASK_NMEA_V02 }, + + //NI event ind + { QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02, + sizeof(qmiLocEventNiNotifyVerifyReqIndMsgT_v02), + QMI_LOC_EVENT_MASK_NI_NOTIFY_VERIFY_REQ_V02 }, + + //Time Injection Request Ind + { QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02, + sizeof(qmiLocEventInjectTimeReqIndMsgT_v02), + QMI_LOC_EVENT_MASK_INJECT_TIME_REQ_V02 }, + + //Predicted Orbits Injection Request + { QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02, + sizeof(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02), + QMI_LOC_EVENT_MASK_INJECT_PREDICTED_ORBITS_REQ_V02 }, + + //Position Injection Request Ind + { QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02, + sizeof(qmiLocEventInjectPositionReqIndMsgT_v02), + QMI_LOC_EVENT_MASK_INJECT_POSITION_REQ_V02 } , + + //Engine State Report Ind + { QMI_LOC_EVENT_ENGINE_STATE_IND_V02, + sizeof(qmiLocEventEngineStateIndMsgT_v02), + QMI_LOC_EVENT_MASK_ENGINE_STATE_V02 }, + + //Fix Session State Report Ind + { QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02, + sizeof(qmiLocEventFixSessionStateIndMsgT_v02), + QMI_LOC_EVENT_MASK_FIX_SESSION_STATE_V02 }, + + //Wifi Request Indication + { QMI_LOC_EVENT_WIFI_REQ_IND_V02, + sizeof(qmiLocEventWifiReqIndMsgT_v02), + QMI_LOC_EVENT_MASK_WIFI_REQ_V02 }, + + //Sensor Streaming Ready Status Ind + { QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02, + sizeof(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02), + QMI_LOC_EVENT_MASK_SENSOR_STREAMING_READY_STATUS_V02 }, + + // Time Sync Request Indication + { QMI_LOC_EVENT_TIME_SYNC_REQ_IND_V02, + sizeof(qmiLocEventTimeSyncReqIndMsgT_v02), + QMI_LOC_EVENT_MASK_TIME_SYNC_REQ_V02 }, + + //Set Spi Streaming Report Event + { QMI_LOC_EVENT_SET_SPI_STREAMING_REPORT_IND_V02, + sizeof(qmiLocEventSetSpiStreamingReportIndMsgT_v02), + QMI_LOC_EVENT_MASK_SET_SPI_STREAMING_REPORT_V02 }, + + //Location Server Connection Request event + { QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02, + sizeof(qmiLocEventLocationServerConnectionReqIndMsgT_v02), + QMI_LOC_EVENT_MASK_LOCATION_SERVER_CONNECTION_REQ_V02 }, + + // 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}, + + //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 } +}; + +/* table to relate the respInd Id with its size */ +typedef struct +{ + uint32_t respIndId; + size_t respIndSize; +}locClientRespIndTableStructT; + +static locClientRespIndTableStructT locClientRespIndTable[]= { + + // get service revision ind + { QMI_LOC_GET_SERVICE_REVISION_IND_V02, + sizeof(qmiLocGetServiceRevisionIndMsgT_v02)}, + + // Get Fix Criteria Resp Ind + { QMI_LOC_GET_FIX_CRITERIA_IND_V02, + sizeof(qmiLocGetFixCriteriaIndMsgT_v02)}, + + // NI User Resp In + { QMI_LOC_NI_USER_RESPONSE_IND_V02, + sizeof(qmiLocNiUserRespIndMsgT_v02)}, + + //Inject Predicted Orbits Data Resp Ind + { QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02, + sizeof(qmiLocInjectPredictedOrbitsDataIndMsgT_v02)}, + + //Get Predicted Orbits Data Src Resp Ind + { QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02, + sizeof(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02)}, + + // Get Predicted Orbits Data Validity Resp Ind + { QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_IND_V02, + sizeof(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02)}, + + // Inject UTC Time Resp Ind + { QMI_LOC_INJECT_UTC_TIME_IND_V02, + sizeof(qmiLocInjectUtcTimeIndMsgT_v02)}, + + //Inject Position Resp Ind + { QMI_LOC_INJECT_POSITION_IND_V02, + sizeof(qmiLocInjectPositionIndMsgT_v02)}, + + //Set Engine Lock Resp Ind + { QMI_LOC_SET_ENGINE_LOCK_IND_V02, + sizeof(qmiLocSetEngineLockIndMsgT_v02)}, + + //Get Engine Lock Resp Ind + { QMI_LOC_GET_ENGINE_LOCK_IND_V02, + sizeof(qmiLocGetEngineLockIndMsgT_v02)}, + + //Set SBAS Config Resp Ind + { QMI_LOC_SET_SBAS_CONFIG_IND_V02, + sizeof(qmiLocSetSbasConfigIndMsgT_v02)}, + + //Get SBAS Config Resp Ind + { QMI_LOC_GET_SBAS_CONFIG_IND_V02, + sizeof(qmiLocGetSbasConfigIndMsgT_v02)}, + + //Set NMEA Types Resp Ind + { QMI_LOC_SET_NMEA_TYPES_IND_V02, + sizeof(qmiLocSetNmeaTypesIndMsgT_v02)}, + + //Get NMEA Types Resp Ind + { QMI_LOC_GET_NMEA_TYPES_IND_V02, + sizeof(qmiLocGetNmeaTypesIndMsgT_v02)}, + + //Set Low Power Mode Resp Ind + { QMI_LOC_SET_LOW_POWER_MODE_IND_V02, + sizeof(qmiLocSetLowPowerModeIndMsgT_v02)}, + + //Get Low Power Mode Resp Ind + { QMI_LOC_GET_LOW_POWER_MODE_IND_V02, + sizeof(qmiLocGetLowPowerModeIndMsgT_v02)}, + + //Set Server Resp Ind + { QMI_LOC_SET_SERVER_IND_V02, + sizeof(qmiLocSetServerIndMsgT_v02)}, + + //Get Server Resp Ind + { QMI_LOC_GET_SERVER_IND_V02, + sizeof(qmiLocGetServerIndMsgT_v02)}, + + //Delete Assist Data Resp Ind + { QMI_LOC_DELETE_ASSIST_DATA_IND_V02, + sizeof(qmiLocDeleteAssistDataIndMsgT_v02)}, + + //Set XTRA-T Session Control Resp Ind + { QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02, + sizeof(qmiLocSetXtraTSessionControlIndMsgT_v02)}, + + //Get XTRA-T Session Control Resp Ind + { QMI_LOC_GET_XTRA_T_SESSION_CONTROL_IND_V02, + sizeof(qmiLocGetXtraTSessionControlIndMsgT_v02)}, + + //Inject Wifi Position Resp Ind + { QMI_LOC_INJECT_WIFI_POSITION_IND_V02, + sizeof(qmiLocInjectWifiPositionIndMsgT_v02)}, + + //Notify Wifi Status Resp Ind + { QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02, + sizeof(qmiLocNotifyWifiStatusIndMsgT_v02)}, + + //Get Registered Events Resp Ind + { QMI_LOC_GET_REGISTERED_EVENTS_IND_V02, + sizeof(qmiLocGetRegisteredEventsIndMsgT_v02)}, + + //Set Operation Mode Resp Ind + { QMI_LOC_SET_OPERATION_MODE_IND_V02, + sizeof(qmiLocSetOperationModeIndMsgT_v02)}, + + //Get Operation Mode Resp Ind + { QMI_LOC_GET_OPERATION_MODE_IND_V02, + sizeof(qmiLocGetOperationModeIndMsgT_v02)}, + + //Set SPI Status Resp Ind + { QMI_LOC_SET_SPI_STATUS_IND_V02, + sizeof(qmiLocSetSpiStatusIndMsgT_v02)}, + + //Inject Sensor Data Resp Ind + { QMI_LOC_INJECT_SENSOR_DATA_IND_V02, + sizeof(qmiLocInjectSensorDataIndMsgT_v02)}, + + //Inject Time Sync Data Resp Ind + { QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02, + sizeof(qmiLocInjectTimeSyncDataIndMsgT_v02)}, + + //Set Cradle Mount config Resp Ind + { QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02, + sizeof(qmiLocSetCradleMountConfigIndMsgT_v02)}, + + //Get Cradle Mount config Resp Ind + { QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02, + sizeof(qmiLocGetCradleMountConfigIndMsgT_v02)}, + + //Set External Power config Resp Ind + { QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02, + sizeof(qmiLocSetExternalPowerConfigIndMsgT_v02)}, + + //Get External Power config Resp Ind + { QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02, + sizeof(qmiLocGetExternalPowerConfigIndMsgT_v02)}, + + //Location server connection status + { QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02, + sizeof(qmiLocInformLocationServerConnStatusIndMsgT_v02)}, + + //Set Protocol Config Parameters + { QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02, + sizeof(qmiLocSetProtocolConfigParametersIndMsgT_v02)}, + + //Get Protocol Config Parameters + { QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02, + sizeof(qmiLocGetProtocolConfigParametersIndMsgT_v02)}, + + //Set Sensor Control Config + { QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02, + sizeof(qmiLocSetSensorControlConfigIndMsgT_v02)}, + + //Get Sensor Control Config + { QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02, + sizeof(qmiLocGetSensorControlConfigIndMsgT_v02)}, + + //Set Sensor Properties + { QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02, + sizeof(qmiLocSetSensorPropertiesIndMsgT_v02)}, + + //Get Sensor Properties + { QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02, + sizeof(qmiLocGetSensorPropertiesIndMsgT_v02)}, + + //Set Sensor Performance Control Config + { QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02, + sizeof(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02)}, + + //Get Sensor Performance Control Config + { QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02, + sizeof(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02)}, + //Inject SUPL certificate + { QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02, + sizeof(qmiLocInjectSuplCertificateIndMsgT_v02) }, + + //Delete SUPL certificate + { QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02, + sizeof(qmiLocDeleteSuplCertificateIndMsgT_v02) }, + + // Set Position Engine Config + { QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02, + sizeof(qmiLocSetPositionEngineConfigParametersIndMsgT_v02)}, + + // Get Position Engine Config + { QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02, + sizeof(qmiLocGetPositionEngineConfigParametersIndMsgT_v02)}, + + //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)}, + + //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)} +}; + + +/** 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; +} + +/** isClientRegisteredForEvent +* @brief checks the mask to identify if the client has +* registered for the specified event Id +* @param [in] eventIndId +* @param [in] eventRegMask +* @return true if client regstered for event; else false */ + +static bool isClientRegisteredForEvent( + locClientEventMaskType eventRegMask, + uint32_t eventIndId) +{ + size_t idx = 0, eventIndTableSize = 0; + + // look in the event table + eventIndTableSize = + (sizeof(locClientEventIndTable)/sizeof(locClientEventIndTableStructT)); + + for(idx=0; idx>32), + (uint32_t)(eventRegMask & 0xFFFFFFFF), + (uint32_t)(locClientEventIndTable[idx].eventMask >> 32), + (uint32_t)(locClientEventIndTable[idx].eventMask & 0xFFFFFFFF)); + + return(( + eventRegMask & locClientEventIndTable[idx].eventMask)? + true:false); + } + } + LOC_LOGW("%s:%d]: eventId %d not found\n", __func__, __LINE__, + eventIndId); + return false; +} + +/** convertQmiResponseToLocStatus + @brief converts a qmiLocGenRespMsgT to locClientStatusEnumType* + @param [in] pResponse; pointer to the response received from + QMI_LOC service. + @return locClientStatusEnumType corresponding to the + response. +*/ + +static locClientStatusEnumType convertQmiResponseToLocStatus( + qmiLocGenRespMsgT_v02 *pResponse) +{ + locClientStatusEnumType status = eLOC_CLIENT_FAILURE_INTERNAL; + + // if result == SUCCESS don't look at error code + if(pResponse->resp.result == QMI_RESULT_SUCCESS_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; + + default: + status = eLOC_CLIENT_FAILURE_INTERNAL; + break; + } + } + LOC_LOGV("%s:%d]: result = %d, error = %d, status = %d\n", + __func__, __LINE__, pResponse->resp.result, + pResponse->resp.error, status); + return status; +} + +/** convertQmiErrorToLocError + @brief converts a qmi service error type to + locClientErrorEnumType + @param [in] error received QMI service. + @return locClientErrorEnumType corresponding to the error. +*/ + +static locClientErrorEnumType convertQmiErrorToLocError( + qmi_client_error_type error) +{ + locClientErrorEnumType locError ; + switch(error) + { + case QMI_SERVICE_ERR: + locError = eLOC_CLIENT_ERROR_SERVICE_UNAVAILABLE; + break; + + default: + locError = eLOC_CLIENT_ERROR_SERVICE_UNAVAILABLE; + break; + } + LOC_LOGV("%s:%d]: qmi error = %d, loc error = %d\n", + __func__, __LINE__, error, locError); + return locError; +} + +/** locClienHandlePosReportInd + * @brief Validates a position report ind + * @param [in] msg_id + * @param [in] ind_buf + * @param [in] ind_buf_len + * @return true if pos report is valid, false otherwise +*/ +static bool locClientHandlePosReportInd +( + uint32_t msg_id, + const void* ind_buf, + uint32_t ind_buf_len +) +{ + // validate position report + qmiLocEventPositionReportIndMsgT_v02 *posReport = + (qmiLocEventPositionReportIndMsgT_v02 *)ind_buf; + + LOC_LOGV ("%s:%d]: len = %d lat = %f, lon = %f, alt = %f\n", + __func__, __LINE__, ind_buf_len, + posReport->latitude, posReport->longitude, + posReport->altitudeWrtEllipsoid); + + return true; +} +//----------------------------------------------------------------------------- + +/** locClientHandleSatReportInd + * @brief Validates a satellite report indication. Dk + * @param [in] msg_id + * @param [in] ind_buf + * @param [in] ind_buf_len + * @return true if sat report is valid, false otherwise +*/ +static bool locClientHandleSatReportInd +( + uint32_t msg_id, + const void* ind_buf, + uint32_t ind_buf_len +) +{ + // validate sat reports + unsigned int idx = 0; + qmiLocEventGnssSvInfoIndMsgT_v02 *satReport = + (qmiLocEventGnssSvInfoIndMsgT_v02 *)ind_buf; + + LOC_LOGV ("%s:%d]: len = %u , altitude assumed = %u, num SV's = %u" + " validity = %d \n ", __func__, __LINE__, + ind_buf_len, satReport->altitudeAssumed, + satReport->svList_len, satReport->svList_valid); + //Log SV report + for( idx = 0; idx svList_len; idx++ ) + { + LOC_LOGV("%s:%d]: valid_mask = %x, prn = %u, system = %d, " + "status = %d \n", __func__, __LINE__, + satReport->svList[idx].validMask, satReport->svList[idx].gnssSvId, + satReport->svList[idx].system, satReport->svList[idx].svStatus); + } + + return true; +} + + +/** locClientHandleNmeaReportInd + * @brief Validate a NMEA report indication. + * @param [in] msg_id + * @param [in] ind_buf + * @param [in] ind_buf_len + * @return true if nmea report is valid, false otherwise +*/ + + +static bool locClientHandleNmeaReportInd +( + uint32_t msg_id, + const void* ind_buf, + uint32_t ind_buf_len +) +{ + // validate NMEA report + return true; +} + +/** locClientHandleGetServiceRevisionRespInd + * @brief Handles a Get Service Revision Rresponse indication. + * @param [in] msg_id + * @param [in] ind_buf + * @param [in] ind_buf_len + * @return true if service revision is valid, false otherwise +*/ + +static bool locClientHandleGetServiceRevisionRespInd +( + uint32_t msg_id, + const void* ind_buf, + uint32_t ind_buf_len +) +{ + LOC_LOGV("%s:%d] :\n", __func__, __LINE__); + return true; +} + +/** locClientHandleIndication + * @brief looks at each indication and calls the appropriate + * validation handler + * @param [in] indId + * @param [in] indBuffer + * @param [in] indSize + * @return true if indication was validated; else false */ + +static bool locClientHandleIndication( + uint32_t indId, + void* indBuffer, + size_t indSize + ) +{ + bool status = false; + switch(indId) + { + // handle the event indications + //------------------------------------------------------------------------- + + // handle position report + case QMI_LOC_EVENT_POSITION_REPORT_IND_V02: + { + status = locClientHandlePosReportInd(indId, indBuffer, indSize); + break; + } + // handle satellite report + case QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02: + { + status = locClientHandleSatReportInd(indId, indBuffer, indSize); + break; + } + + // handle NMEA report + case QMI_LOC_EVENT_NMEA_IND_V02: + { + status = locClientHandleNmeaReportInd(indId, indBuffer, indSize); + break; + } + + // handle NI Notify Verify Request Ind + case QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02: + { + // locClientHandleNiReqInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + // handle Time Inject request Ind + case QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02: + { + // locClientHandleTimeInjectReqInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + // handle XTRA data Inject request Ind + case QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02: + { + // locClientHandleXtraInjectReqInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + // handle position inject request Ind + case QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02: + { + // locClientHandlePositionInjectReqInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + // handle engine state Ind + case QMI_LOC_EVENT_ENGINE_STATE_IND_V02: + { + // locClientHandleEngineStateInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + // handle fix session state Ind + case QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02: + { + // locClientHandleFixSessionStateInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + // handle Wifi request Ind + case QMI_LOC_EVENT_WIFI_REQ_IND_V02: + { + // locClientHandleWifiReqInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + // handle sensor streaming ready status Ind + case QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02: + { + // locClientHandleSensorStreamingReadyInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + // handle time sync Ind + case QMI_LOC_EVENT_TIME_SYNC_REQ_IND_V02: + { + // locClientHandleTimeSyncReqInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + // handle set streaming report ind + case QMI_LOC_EVENT_SET_SPI_STREAMING_REPORT_IND_V02: + { + // locClientHandleSetSpiStreamingInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02: + { + //locClientHandleLocServerConnReqInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_EVENT_NI_GEOFENCE_NOTIFICATION_IND_V02: + { + //locClientHandleNiGeofenceNotificationInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_EVENT_GEOFENCE_GEN_ALERT_IND_V02: + { + //locClientHandleGeofenceGenAlertInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_EVENT_GEOFENCE_BREACH_NOTIFICATION_IND_V02: + { + //locClientHandleGeofenceBreachInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_EVENT_PEDOMETER_CONTROL_IND_V02 : + { + //locClientHandlePedometerControlInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_EVENT_MOTION_DATA_CONTROL_IND_V02: + { + //locClientHandleMotionDataControlInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + //------------------------------------------------------------------------- + + // handle the response indications + //------------------------------------------------------------------------- + + // Get service Revision response indication + case QMI_LOC_GET_SERVICE_REVISION_IND_V02: + { + status = locClientHandleGetServiceRevisionRespInd(indId, + indBuffer, indSize); + break; + } + + case QMI_LOC_GET_FIX_CRITERIA_IND_V02: + { + status = true; + break; + } + + // predicted orbits data response indication + case QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02: + { + //locClientHandleInjectPredictedOrbitsDataInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + // get predicted orbits source response indication + case QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02: + { + //locClientHandleGetPredictedOrbitsSourceInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + // get predicted orbits validity response indication + case QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_IND_V02: + { + //locClientHandleGetPredictedOrbitsDataValidityInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_INJECT_SENSOR_DATA_IND_V02 : + { + //locClientHandleInjectSensorDataInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02: + { + //locClientHandleGetProtocolConfigParametersInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02: + { + //locClientHandleSetProtocolConfigParametersInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02: + { + //locClientHandleGetExtPowerConfigInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02: + { + //locClientHandleGetCradleMountConfigInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02: + { + //locClientHandleGetSensorControlConfigInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02: + { + //locClientHandleGetSensorPerformanceControlConfigInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02: + { + //locClientHandleGetSensorPropertiesInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02: + { + //locClientHandleSetSensorPerformanceControlConfigInd(user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02: + { + // locClientHandleSetPositionEngineConfigParam( + // user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02: + { + // locClientHandleSetPositionEngineConfigParam( + // user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_ADD_CIRCULAR_GEOFENCE_IND_V02: + { + // locClientHandleAddCircularGeofenceInd( + // user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_DELETE_GEOFENCE_IND_V02: + { + // locClientHandleDeleteGeofenceInd( + // user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_EDIT_GEOFENCE_IND_V02: + { + // locClientHandleEditGeofenceInd( + // user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_QUERY_GEOFENCE_IND_V02: + { + // locClientHandleQueryGeofenceInd( + // user_handle, msg_id, ind_buf, ind_buf_len); + status = true; + break; + } + + case QMI_LOC_GET_BEST_AVAILABLE_POSITION_IND_V02: + { + status = true; + break; + } + case QMI_LOC_GET_ENGINE_LOCK_IND_V02: + { + status = true; + break; + } + + case QMI_LOC_GET_NI_GEOFENCE_ID_LIST_IND_V02: + { + status = true; + break; + } + + case QMI_LOC_PEDOMETER_REPORT_IND_V02: + { + status = true; + break; + } + + // for indications that only have a "status" field + case QMI_LOC_NI_USER_RESPONSE_IND_V02: + case QMI_LOC_INJECT_UTC_TIME_IND_V02: + case QMI_LOC_INJECT_POSITION_IND_V02: + case QMI_LOC_SET_ENGINE_LOCK_IND_V02: + case QMI_LOC_SET_SBAS_CONFIG_IND_V02: + case QMI_LOC_SET_NMEA_TYPES_IND_V02: + case QMI_LOC_SET_LOW_POWER_MODE_IND_V02: + case QMI_LOC_SET_SERVER_IND_V02: + case QMI_LOC_DELETE_ASSIST_DATA_IND_V02: + case QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02: + case QMI_LOC_INJECT_WIFI_POSITION_IND_V02: + case QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02: + case QMI_LOC_SET_OPERATION_MODE_IND_V02: + case QMI_LOC_SET_SPI_STATUS_IND_V02: + case QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02: + case QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02: + case QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02: + case QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02: + case QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02: + case QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02: + case QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02: + case QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02: + case QMI_LOC_INJECT_MOTION_DATA_IND_V02: + case QMI_LOC_INJECT_GSM_CELL_INFO_IND_V02: + case QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_IND_V02: + case QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_IND_V02: + case QMI_LOC_INJECT_WCDMA_CELL_INFO_IND_V02: + case QMI_LOC_INJECT_TDSCDMA_CELL_INFO_IND_V02: + case QMI_LOC_INJECT_SUBSCRIBER_ID_IND_V02: + { + status = true; + break; + } + default: + LOC_LOGW("%s:%d]: unknown ind id %d\n", __func__, __LINE__, + (uint32_t)indId); + status = false; + break; + } + return status; +} + + +/** locClientErrorCb + * @brief handles the QCCI error events, this is called by the + * QCCI infrastructure when the service is no longer + * available. + * @param [in] user handle + * @param [in] error + * @param [in] *err_cb_data + */ + +static void locClientErrorCb +( + qmi_client_type user_handle, + qmi_client_error_type error, + void *err_cb_data +) +{ + locClientCallbackDataType* pCallbackData = + (locClientCallbackDataType *)err_cb_data; + 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; + + // if the client did not register for this event then just drop it + if( (eventIndType == indType) && + ( (NULL == pCallbackData->eventCallback) || + (false == isClientRegisteredForEvent(pCallbackData->eventRegMask, msg_id)) ) ) + { + LOC_LOGW("%s:%d]: client is not registered for event %d\n", + __func__, __LINE__, (uint32_t)msg_id); + return; + } + + // decode the indication + indBuffer = malloc(indSize); + + if(NULL == indBuffer) + { + LOC_LOGE("%s:%d]: memory allocation failed\n", __func__, __LINE__); + return; + } + + // decode the indication + rc = qmi_client_message_decode( + user_handle, + QMI_IDL_INDICATION, + msg_id, + ind_buf, + ind_buf_len, + indBuffer, + indSize); + + if( rc == QMI_NO_ERR ) + { + //validate indication + if (true == locClientHandleIndication(msg_id, indBuffer, indSize)) + { + if(eventIndType == indType) + { + locClientEventIndUnionType eventIndUnion; + + /* copy the eventCallback function pointer from the callback + * data to local variable. This is to protect against the race + * condition between open/close and indication callback. + */ + locClientEventIndCbType localEventCallback = + pCallbackData->eventCallback; + + // dummy event + eventIndUnion.pPositionReportEvent = + (qmiLocEventPositionReportIndMsgT_v02 *)indBuffer; + + /* call the event callback + * To avoid calling the eventCallback after locClientClose + * is called, check pCallbackData->eventCallback again here + */ + if((NULL != localEventCallback) && + (NULL != pCallbackData->eventCallback)) + { + localEventCallback( + (locClientHandleType)pCallbackData, + msg_id, + eventIndUnion, + pCallbackData->pClientCookie); + } + } + else if(respIndType == indType) + { + locClientRespIndUnionType respIndUnion; + + /* copy the respCallback function pointer from the callback + * data to local variable. This is to protect against the race + * condition between open/close and indication callback. + */ + locClientRespIndCbType localRespCallback = + pCallbackData->respCallback; + + // dummy to suppress compiler warnings + respIndUnion.pDeleteAssistDataInd = + (qmiLocDeleteAssistDataIndMsgT_v02 *)indBuffer; + + /* call the response callback + * To avoid calling the respCallback after locClientClose + * is called, check pCallbackData->respCallback again here + */ + if((NULL != localRespCallback) && + (NULL != pCallbackData->respCallback)) + { + localRespCallback( + (locClientHandleType)pCallbackData, + msg_id, + respIndUnion, + pCallbackData->pClientCookie); + } + } + } + else // error handling indication + { + LOC_LOGE("%s:%d]: Error handling the indication %d\n", + __func__, __LINE__, (uint32_t)msg_id); + } + } + else + { + LOC_LOGE("%s:%d]: Error decoding indication %d\n", + __func__, __LINE__, rc); + } + if(indBuffer) + { + free (indBuffer); + } + } + else // Id not found + { + LOC_LOGE("%s:%d]: Error indication not found %d\n", + __func__, __LINE__,(uint32_t)msg_id); + } + return; +} + + +/** locClientRegisterEventMask + * @brief registers the event mask with loc service + * @param [in] clientHandle + * @param [in] eventRegMask + * @return true if indication was validated; else false */ + +static bool locClientRegisterEventMask( + locClientHandleType clientHandle, + locClientEventMaskType eventRegMask) +{ + locClientStatusEnumType status = eLOC_CLIENT_SUCCESS; + locClientReqUnionType reqUnion; + qmiLocRegEventsReqMsgT_v02 regEventsReq; + + memset(®EventsReq, 0, sizeof(regEventsReq)); + + regEventsReq.eventRegMask = eventRegMask; + reqUnion.pRegEventsReq = ®EventsReq; + + status = locClientSendReq(clientHandle, + QMI_LOC_REG_EVENTS_REQ_V02, + reqUnion); + + if(eLOC_CLIENT_SUCCESS != status ) + { + LOC_LOGE("%s:%d] status %s\n", __func__, __LINE__, + loc_get_v02_client_status_name(status) ); + return false; + } + + return true; +} + +/** validateRequest + @brief validates the input request + @param [in] reqId request ID + @param [in] reqPayload Union of pointers to message payload + @param [out] ppOutData Pointer to void *data if successful + @param [out] pOutLen Pointer to length of data if succesful. + @return false on failure, true on Success +*/ + +static bool validateRequest( + uint32_t reqId, + const locClientReqUnionType reqPayload, + void **ppOutData, + uint32_t *pOutLen ) + +{ + bool noPayloadFlag = false; + + LOC_LOGV("%s:%d]: reqId = %d\n", __func__, __LINE__, reqId); + switch(reqId) + { + case QMI_LOC_INFORM_CLIENT_REVISION_REQ_V02: + { + *pOutLen = sizeof(qmiLocInformClientRevisionReqMsgT_v02); + break; + } + + case QMI_LOC_REG_EVENTS_REQ_V02: + { + *pOutLen = sizeof(qmiLocRegEventsReqMsgT_v02); + break; + } + + case QMI_LOC_START_REQ_V02: + { + *pOutLen = sizeof(qmiLocStartReqMsgT_v02); + break; + } + + case QMI_LOC_STOP_REQ_V02: + { + *pOutLen = sizeof(qmiLocStopReqMsgT_v02); + break; + } + + case QMI_LOC_NI_USER_RESPONSE_REQ_V02: + { + *pOutLen = sizeof(qmiLocNiUserRespReqMsgT_v02); + break; + } + + case QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02: + { + *pOutLen = sizeof(qmiLocInjectPredictedOrbitsDataReqMsgT_v02); + break; + } + + case QMI_LOC_INJECT_UTC_TIME_REQ_V02: + { + *pOutLen = sizeof(qmiLocInjectUtcTimeReqMsgT_v02); + break; + } + + case QMI_LOC_INJECT_POSITION_REQ_V02: + { + *pOutLen = sizeof(qmiLocInjectPositionReqMsgT_v02); + break; + } + + case QMI_LOC_SET_ENGINE_LOCK_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetEngineLockReqMsgT_v02); + break; + } + + case QMI_LOC_SET_SBAS_CONFIG_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetSbasConfigReqMsgT_v02); + break; + } + + case QMI_LOC_SET_NMEA_TYPES_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetNmeaTypesReqMsgT_v02); + break; + } + + case QMI_LOC_SET_LOW_POWER_MODE_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetLowPowerModeReqMsgT_v02); + break; + } + + case QMI_LOC_SET_SERVER_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetServerReqMsgT_v02); + break; + } + + case QMI_LOC_DELETE_ASSIST_DATA_REQ_V02: + { + *pOutLen = sizeof(qmiLocDeleteAssistDataReqMsgT_v02); + break; + } + + case QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetXtraTSessionControlReqMsgT_v02); + break; + } + + case QMI_LOC_INJECT_WIFI_POSITION_REQ_V02: + { + *pOutLen = sizeof(qmiLocInjectWifiPositionReqMsgT_v02); + break; + } + + case QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02: + { + *pOutLen = sizeof(qmiLocNotifyWifiStatusReqMsgT_v02); + break; + } + + case QMI_LOC_SET_OPERATION_MODE_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetOperationModeReqMsgT_v02); + break; + } + + case QMI_LOC_SET_SPI_STATUS_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetSpiStatusReqMsgT_v02); + break; + } + + case QMI_LOC_INJECT_SENSOR_DATA_REQ_V02: + { + *pOutLen = sizeof(qmiLocInjectSensorDataReqMsgT_v02); + break; + } + + case QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02: + { + *pOutLen = sizeof(qmiLocInjectTimeSyncDataReqMsgT_v02); + break; + } + + case QMI_LOC_SET_CRADLE_MOUNT_CONFIG_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetCradleMountConfigReqMsgT_v02); + break; + } + + case QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetExternalPowerConfigReqMsgT_v02); + break; + } + + case QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02: + { + *pOutLen = sizeof(qmiLocInformLocationServerConnStatusReqMsgT_v02); + break; + } + + case QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetProtocolConfigParametersReqMsgT_v02); + break; + } + + case QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02: + { + *pOutLen = sizeof(qmiLocGetProtocolConfigParametersReqMsgT_v02); + break; + } + + case QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02: + { + *pOutLen = sizeof(qmiLocSetSensorControlConfigReqMsgT_v02); + break; + } + + case QMI_LOC_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_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; + } + + // 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: + { + 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) +{ + qmi_client_type clnt, notifier; + bool notifierInitFlag = false; + locClientStatusEnumType status = eLOC_CLIENT_SUCCESS; + // instances of this service + qmi_service_info *pServiceInfo = NULL; + + do + { + uint32_t num_services = 0, num_entries = 0; + qmi_client_error_type rc = QMI_NO_ERR; + bool nosignal = false; + qmi_client_os_params os_params; + int timeout = 0; + + // 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, ¬ifier); + 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; + } + + do { + QMI_CCI_OS_SIGNAL_CLEAR(&os_params); + // get the service addressing information + rc = qmi_client_get_service_list(locClientServiceObject, NULL, NULL, + &num_services); + /* If service is not up wait on a signal until the service is up + * or a timeout occurs. */ + if (rc != QMI_NO_ERR) { + QMI_CCI_OS_SIGNAL_WAIT(&os_params, LOC_CLIENT_SERVICE_TIMEOUT_UNIT); + nosignal = QMI_CCI_OS_SIGNAL_TIMED_OUT(&os_params); + if (!nosignal) + rc = qmi_client_get_service_list(locClientServiceObject, NULL, NULL, + &num_services); + } + + timeout += LOC_CLIENT_SERVICE_TIMEOUT_UNIT; + + LOC_LOGV("%s:%d]: qmi_client_get_service_list() rc %d, nosignal %d, " + "total timeout %d", __func__, __LINE__, rc, nosignal, timeout); + } while (timeout < LOC_CLIENT_SERVICE_TIMEOUT_TOTAL && nosignal && rc != QMI_NO_ERR); + + if (0 == num_services || rc != QMI_NO_ERR) { + if (!nosignal) { + LOC_LOGE("%s:%d]: qmi_client_get_service_list failed even though" + "service is up !!! Error %d \n", __func__, __LINE__, rc); + status = eLOC_CLIENT_FAILURE_INTERNAL; + } else { + LOC_LOGE("%s:%d]: qmi_client_get_service_list failed after retries," + " final Err %d", __func__, __LINE__, rc); + status = eLOC_CLIENT_FAILURE_TIMEOUT; + } + break; + } + + pServiceInfo = + (qmi_service_info *)malloc(num_services * sizeof(qmi_service_info)); + + if(NULL == pServiceInfo) + { + LOC_LOGE("%s:%d]: could not allocate memory for serviceInfo !!\n", + __func__, __LINE__); + + status = eLOC_CLIENT_FAILURE_INTERNAL; + break; + } + + //set the number of entries to get equal to the total number of + //services. + num_entries = num_services; + //populate the serviceInfo + rc = qmi_client_get_service_list( locClientServiceObject, pServiceInfo, + &num_entries, &num_services); + + + LOC_LOGV("%s:%d]: qmi_client_get_service_list()" + " returned %d num_entries = %d num_services = %d\n", + __func__, __LINE__, + rc, num_entries, num_services); + + if(rc != QMI_NO_ERR) + { + LOC_LOGE("%s:%d]: qmi_client_get_service_list Error %d \n", + __func__, __LINE__, rc); + + status = eLOC_CLIENT_FAILURE_INTERNAL; + break; + } + + 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(&pServiceInfo[0], locClientServiceObject, + locClientIndCb, (void *) pLocClientCbData, + NULL, &clnt); + + if(rc != QMI_NO_ERR) + { + LOC_LOGE("%s:%d]: qmi_client_init error %d\n", + __func__, __LINE__, rc); + + 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); + } + + if(NULL != pServiceInfo) + { + free((void *)pServiceInfo); + } + + return status; +} +//----------------------- END INTERNAL FUNCTIONS ---------------------------------------- + +/** locClientOpen + @brief Connects a location client to the location engine. If the connection + is successful, returns a handle that the location client uses for + future location operations. + + @param [in] eventRegMask Mask of asynchronous events the client is + interested in receiving + @param [in] eventIndCb Function to be invoked to handle an event. + @param [in] respIndCb Function to be invoked to handle a response + indication. + @param [out] locClientHandle Handle to be used by the client + for any subsequent requests. + + @return + One of the following error codes: + - eLOC_CLIENT_SUCCESS -- If the connection is opened. + - non-zero error code(see locClientStatusEnumType)-- On failure. +*/ + +locClientStatusEnumType locClientOpen ( + locClientEventMaskType eventRegMask, + const locClientCallbacksType* pLocClientCallbacks, + locClientHandleType* pLocClientHandle, + const void* pClientCookie) +{ + locClientStatusEnumType status = eLOC_CLIENT_SUCCESS; + locClientCallbackDataType *pCallbackData = NULL; + + // 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); + + 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); +} + +/** 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 (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); +} + +/** locClientGetSizeByRespIndId + * @brief Get the size of the response indication structure, + * from a specified id + * @param [in] respIndId + * @param [out] pRespIndSize + * @return true if resp ID was found; else false +*/ + +bool locClientGetSizeByRespIndId(uint32_t respIndId, size_t *pRespIndSize) +{ + size_t idx = 0, respIndTableSize = 0; + respIndTableSize = (sizeof(locClientRespIndTable)/sizeof(locClientRespIndTableStructT)); + for(idx=0; idx +#include + +#include "location_service_v02.h" //QMI LOC Service data types definitions + +#include + +/****************************************************************************** + * 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 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 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; + +}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 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 */ + +}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 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 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; + +}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, + 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; + + +/*=========================================================================== + * + * 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 +); + + +/*============================================================================= + 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); + +/*=============================================================================*/ +/** @} */ /* end_addtogroup operation_functions */ + +#ifdef __cplusplus +} +#endif + +#endif /* LOC_API_V02_CLIENT_H*/ diff --git a/loc_api/loc_api_v02/loc_api_v02_log.c b/loc_api/loc_api_v02/loc_api_v02_log.c new file mode 100644 index 00000000..769222b8 --- /dev/null +++ b/loc_api/loc_api_v02/loc_api_v02_log.c @@ -0,0 +1,293 @@ +/* Copyright (c) 2011-2012, 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 +#include + +static loc_name_val_s_type loc_v02_event_name[] = +{ + NAME_VAL(QMI_LOC_INFORM_CLIENT_REVISION_REQ_V02), + NAME_VAL(QMI_LOC_INFORM_CLIENT_REVISION_RESP_V02), + NAME_VAL(QMI_LOC_REG_EVENTS_REQ_V02), + NAME_VAL(QMI_LOC_REG_EVENTS_RESP_V02), + NAME_VAL(QMI_LOC_START_REQ_V02), + NAME_VAL(QMI_LOC_START_RESP_V02), + NAME_VAL(QMI_LOC_STOP_REQ_V02), + NAME_VAL(QMI_LOC_STOP_RESP_V02), + NAME_VAL(QMI_LOC_EVENT_POSITION_REPORT_IND_V02), + NAME_VAL(QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02), + NAME_VAL(QMI_LOC_EVENT_NMEA_IND_V02), + NAME_VAL(QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02), + NAME_VAL(QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02), + NAME_VAL(QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02), + NAME_VAL(QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02), + NAME_VAL(QMI_LOC_EVENT_ENGINE_STATE_IND_V02), + NAME_VAL(QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02), + NAME_VAL(QMI_LOC_EVENT_WIFI_REQ_IND_V02), + NAME_VAL(QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02), + NAME_VAL(QMI_LOC_EVENT_TIME_SYNC_REQ_IND_V02), + NAME_VAL(QMI_LOC_EVENT_SET_SPI_STREAMING_REPORT_IND_V02), + NAME_VAL(QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02), + NAME_VAL(QMI_LOC_GET_SERVICE_REVISION_REQ_V02), + NAME_VAL(QMI_LOC_GET_SERVICE_REVISION_RESP_V02), + NAME_VAL(QMI_LOC_GET_SERVICE_REVISION_IND_V02), + NAME_VAL(QMI_LOC_GET_FIX_CRITERIA_REQ_V02), + NAME_VAL(QMI_LOC_GET_FIX_CRITERIA_RESP_V02), + NAME_VAL(QMI_LOC_GET_FIX_CRITERIA_IND_V02), + NAME_VAL(QMI_LOC_NI_USER_RESPONSE_REQ_V02), + NAME_VAL(QMI_LOC_NI_USER_RESPONSE_RESP_V02), + NAME_VAL(QMI_LOC_NI_USER_RESPONSE_IND_V02), + NAME_VAL(QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02), + NAME_VAL(QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_RESP_V02), + NAME_VAL(QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02), + NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02), + NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_RESP_V02), + NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02), + NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_REQ_V02), + NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_RESP_V02), + NAME_VAL(QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_IND_V02), + NAME_VAL(QMI_LOC_INJECT_UTC_TIME_REQ_V02), + NAME_VAL(QMI_LOC_INJECT_UTC_TIME_RESP_V02), + NAME_VAL(QMI_LOC_INJECT_UTC_TIME_IND_V02), + NAME_VAL(QMI_LOC_INJECT_POSITION_REQ_V02), + NAME_VAL(QMI_LOC_INJECT_POSITION_RESP_V02), + NAME_VAL(QMI_LOC_INJECT_POSITION_IND_V02), + NAME_VAL(QMI_LOC_SET_ENGINE_LOCK_REQ_V02), + NAME_VAL(QMI_LOC_SET_ENGINE_LOCK_RESP_V02), + NAME_VAL(QMI_LOC_SET_ENGINE_LOCK_IND_V02), + NAME_VAL(QMI_LOC_GET_ENGINE_LOCK_REQ_V02), + NAME_VAL(QMI_LOC_GET_ENGINE_LOCK_RESP_V02), + NAME_VAL(QMI_LOC_GET_ENGINE_LOCK_IND_V02), + NAME_VAL(QMI_LOC_SET_SBAS_CONFIG_REQ_V02), + NAME_VAL(QMI_LOC_SET_SBAS_CONFIG_RESP_V02), + NAME_VAL(QMI_LOC_SET_SBAS_CONFIG_IND_V02), + NAME_VAL(QMI_LOC_GET_SBAS_CONFIG_REQ_V02), + NAME_VAL(QMI_LOC_GET_SBAS_CONFIG_RESP_V02), + NAME_VAL(QMI_LOC_GET_SBAS_CONFIG_IND_V02), + NAME_VAL(QMI_LOC_SET_NMEA_TYPES_REQ_V02), + NAME_VAL(QMI_LOC_SET_NMEA_TYPES_RESP_V02), + NAME_VAL(QMI_LOC_SET_NMEA_TYPES_IND_V02), + NAME_VAL(QMI_LOC_GET_NMEA_TYPES_REQ_V02), + NAME_VAL(QMI_LOC_GET_NMEA_TYPES_RESP_V02), + NAME_VAL(QMI_LOC_GET_NMEA_TYPES_IND_V02), + NAME_VAL(QMI_LOC_SET_LOW_POWER_MODE_REQ_V02), + NAME_VAL(QMI_LOC_SET_LOW_POWER_MODE_RESP_V02), + NAME_VAL(QMI_LOC_SET_LOW_POWER_MODE_IND_V02), + NAME_VAL(QMI_LOC_GET_LOW_POWER_MODE_REQ_V02), + NAME_VAL(QMI_LOC_GET_LOW_POWER_MODE_RESP_V02), + NAME_VAL(QMI_LOC_GET_LOW_POWER_MODE_IND_V02), + NAME_VAL(QMI_LOC_SET_SERVER_REQ_V02), + NAME_VAL(QMI_LOC_SET_SERVER_RESP_V02), + NAME_VAL(QMI_LOC_SET_SERVER_IND_V02), + NAME_VAL(QMI_LOC_GET_SERVER_REQ_V02), + NAME_VAL(QMI_LOC_GET_SERVER_RESP_V02), + NAME_VAL(QMI_LOC_GET_SERVER_IND_V02), + NAME_VAL(QMI_LOC_DELETE_ASSIST_DATA_REQ_V02), + NAME_VAL(QMI_LOC_DELETE_ASSIST_DATA_RESP_V02), + NAME_VAL(QMI_LOC_DELETE_ASSIST_DATA_IND_V02), + NAME_VAL(QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02), + NAME_VAL(QMI_LOC_SET_XTRA_T_SESSION_CONTROL_RESP_V02), + NAME_VAL(QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02), + NAME_VAL(QMI_LOC_GET_XTRA_T_SESSION_CONTROL_REQ_V02), + NAME_VAL(QMI_LOC_GET_XTRA_T_SESSION_CONTROL_RESP_V02), + NAME_VAL(QMI_LOC_GET_XTRA_T_SESSION_CONTROL_IND_V02), + NAME_VAL(QMI_LOC_INJECT_WIFI_POSITION_REQ_V02), + NAME_VAL(QMI_LOC_INJECT_WIFI_POSITION_RESP_V02), + NAME_VAL(QMI_LOC_INJECT_WIFI_POSITION_IND_V02), + NAME_VAL(QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02), + NAME_VAL(QMI_LOC_NOTIFY_WIFI_STATUS_RESP_V02), + NAME_VAL(QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02), + NAME_VAL(QMI_LOC_GET_REGISTERED_EVENTS_REQ_V02), + NAME_VAL(QMI_LOC_GET_REGISTERED_EVENTS_RESP_V02), + NAME_VAL(QMI_LOC_GET_REGISTERED_EVENTS_IND_V02), + NAME_VAL(QMI_LOC_SET_OPERATION_MODE_REQ_V02), + NAME_VAL(QMI_LOC_SET_OPERATION_MODE_RESP_V02), + NAME_VAL(QMI_LOC_SET_OPERATION_MODE_IND_V02), + NAME_VAL(QMI_LOC_GET_OPERATION_MODE_REQ_V02), + NAME_VAL(QMI_LOC_GET_OPERATION_MODE_RESP_V02), + NAME_VAL(QMI_LOC_GET_OPERATION_MODE_IND_V02), + NAME_VAL(QMI_LOC_SET_SPI_STATUS_REQ_V02), + NAME_VAL(QMI_LOC_SET_SPI_STATUS_RESP_V02), + NAME_VAL(QMI_LOC_SET_SPI_STATUS_IND_V02), + NAME_VAL(QMI_LOC_INJECT_SENSOR_DATA_REQ_V02), + NAME_VAL(QMI_LOC_INJECT_SENSOR_DATA_RESP_V02), + NAME_VAL(QMI_LOC_INJECT_SENSOR_DATA_IND_V02), + NAME_VAL(QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02), + NAME_VAL(QMI_LOC_INJECT_TIME_SYNC_DATA_RESP_V02), + NAME_VAL(QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02), + NAME_VAL(QMI_LOC_SET_CRADLE_MOUNT_CONFIG_REQ_V02), + NAME_VAL(QMI_LOC_SET_CRADLE_MOUNT_CONFIG_RESP_V02), + NAME_VAL(QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02), + NAME_VAL(QMI_LOC_GET_CRADLE_MOUNT_CONFIG_REQ_V02), + NAME_VAL(QMI_LOC_GET_CRADLE_MOUNT_CONFIG_RESP_V02), + NAME_VAL(QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02), + NAME_VAL(QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02), + NAME_VAL(QMI_LOC_SET_EXTERNAL_POWER_CONFIG_RESP_V02), + NAME_VAL(QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02), + NAME_VAL(QMI_LOC_GET_EXTERNAL_POWER_CONFIG_REQ_V02), + NAME_VAL(QMI_LOC_GET_EXTERNAL_POWER_CONFIG_RESP_V02), + NAME_VAL(QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02), + NAME_VAL(QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02), + NAME_VAL(QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_RESP_V02), + NAME_VAL(QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02), + NAME_VAL(QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02), + NAME_VAL(QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02), + NAME_VAL(QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02), + NAME_VAL(QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02), + NAME_VAL(QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02), + NAME_VAL(QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02), + NAME_VAL(QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02), + NAME_VAL(QMI_LOC_SET_SENSOR_CONTROL_CONFIG_RESP_V02), + NAME_VAL(QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02), + NAME_VAL(QMI_LOC_GET_SENSOR_CONTROL_CONFIG_REQ_V02), + NAME_VAL(QMI_LOC_GET_SENSOR_CONTROL_CONFIG_RESP_V02), + NAME_VAL(QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02), + NAME_VAL(QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02), + NAME_VAL(QMI_LOC_SET_SENSOR_PROPERTIES_RESP_V02), + NAME_VAL(QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02), + NAME_VAL(QMI_LOC_GET_SENSOR_PROPERTIES_REQ_V02), + NAME_VAL(QMI_LOC_GET_SENSOR_PROPERTIES_RESP_V02), + NAME_VAL(QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02), + NAME_VAL(QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02), + NAME_VAL(QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02), + NAME_VAL(QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02), + NAME_VAL(QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02), + NAME_VAL(QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02), + NAME_VAL(QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02), + NAME_VAL(QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02), + NAME_VAL(QMI_LOC_INJECT_SUPL_CERTIFICATE_RESP_V02), + NAME_VAL(QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02), + NAME_VAL(QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02), + NAME_VAL(QMI_LOC_DELETE_SUPL_CERTIFICATE_RESP_V02), + NAME_VAL(QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02), + NAME_VAL(QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02), + NAME_VAL(QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02), + NAME_VAL(QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02), + NAME_VAL(QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02), + NAME_VAL(QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02), + NAME_VAL(QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02), + 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_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) +}; +static int loc_v02_event_num = sizeof(loc_v02_event_name) / sizeof(loc_name_val_s_type); + +const char* loc_get_v02_event_name(uint32_t event) +{ + return loc_get_name_from_val(loc_v02_event_name, loc_v02_event_num, (long) event); +} + +static loc_name_val_s_type loc_v02_client_status_name[] = +{ + NAME_VAL(eLOC_CLIENT_SUCCESS), + NAME_VAL(eLOC_CLIENT_FAILURE_GENERAL), + NAME_VAL(eLOC_CLIENT_FAILURE_UNSUPPORTED), + NAME_VAL(eLOC_CLIENT_FAILURE_INVALID_PARAMETER), + NAME_VAL(eLOC_CLIENT_FAILURE_ENGINE_BUSY), + NAME_VAL(eLOC_CLIENT_FAILURE_PHONE_OFFLINE), + NAME_VAL(eLOC_CLIENT_FAILURE_TIMEOUT), + NAME_VAL(eLOC_CLIENT_FAILURE_SERVICE_NOT_PRESENT), + NAME_VAL(eLOC_CLIENT_FAILURE_SERVICE_VERSION_UNSUPPORTED), + NAME_VAL(eLOC_CLIENT_FAILURE_CLIENT_VERSION_UNSUPPORTED), + NAME_VAL(eLOC_CLIENT_FAILURE_INVALID_HANDLE), + NAME_VAL(eLOC_CLIENT_FAILURE_INTERNAL), + NAME_VAL(eLOC_CLIENT_FAILURE_NOT_INITIALIZED), + NAME_VAL(eLOC_CLIENT_FAILURE_NOT_ENOUGH_MEMORY), +}; +static int loc_v02_client_status_num = sizeof(loc_v02_client_status_name) / sizeof(loc_name_val_s_type); + +const char* loc_get_v02_client_status_name(locClientStatusEnumType status) +{ + return loc_get_name_from_val(loc_v02_client_status_name, loc_v02_client_status_num, (long) status); +} + + +static loc_name_val_s_type loc_v02_qmi_status_name[] = +{ + QMILOCSTATUSENUMT_MIN_ENUM_VAL_V02, + eQMI_LOC_SUCCESS_V02, + eQMI_LOC_GENERAL_FAILURE_V02, + eQMI_LOC_UNSUPPORTED_V02, + eQMI_LOC_INVALID_PARAMETER_V02, + eQMI_LOC_ENGINE_BUSY_V02, + eQMI_LOC_PHONE_OFFLINE_V02, + eQMI_LOC_TIMEOUT_V02, + eQMI_LOC_CONFIG_NOT_SUPPORTED_V02, + eQMI_LOC_INSUFFICIENT_MEMORY_V02, + QMILOCSTATUSENUMT_MAX_ENUM_VAL_V02 +}; +static int loc_v02_qmi_status_num = sizeof(loc_v02_qmi_status_name) / sizeof(loc_name_val_s_type); + +const char* loc_get_v02_qmi_status_name(qmiLocStatusEnumT_v02 status) +{ + return loc_get_name_from_val(loc_v02_qmi_status_name, loc_v02_qmi_status_num, (long) status); +} diff --git a/loc_api/loc_api_v02/loc_api_v02_log.h b/loc_api/loc_api_v02/loc_api_v02_log.h new file mode 100644 index 00000000..8d4670c3 --- /dev/null +++ b/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 +#include + +const char* loc_get_v02_event_name(uint32_t event); +const char* loc_get_v02_client_status_name(locClientStatusEnumType status); +const char* loc_get_v02_qmi_status_name(qmiLocStatusEnumT_v02 status); + + +#ifdef __cplusplus +} +#endif + +#endif /* LOC_API_V02_LOG_H */ diff --git a/loc_api/loc_api_v02/loc_util_log.h b/loc_api/loc_api_v02/loc_util_log.h new file mode 100644 index 00000000..7f4e62d2 --- /dev/null +++ b/loc_api/loc_api_v02/loc_util_log.h @@ -0,0 +1,75 @@ +/* Copyright (c) 2011-2012, 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 + +#if defined(_ANDROID_) +#include "loc_api_v02_log.h" +#include + +#else // no _ANDROID_ + +// 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__) + +#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 +# include +# include + +// 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/loc_api/loc_api_v02/location_service_v02.c b/loc_api/loc_api_v02/location_service_v02.c new file mode 100644 index 00000000..c7ebd6db --- /dev/null +++ b/loc_api/loc_api_v02/location_service_v02.c @@ -0,0 +1,3328 @@ +/* Copyright (c) 2011-2012, 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.0 + It requires encode/decode library version 5 or later + It was generated on: Thu Dec 13 2012 (Spin ) + 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), + 8, 0, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocNiSuplServerInfoStructT_v02, ipv6Addr), + 9, 0, + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING, + QMI_IDL_OFFSET8(qmiLocNiSuplServerInfoStructT_v02, urlAddr), + QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02, + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocNiSuplNotifyVerifyStructT_data_v02[] = { + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocNiSuplNotifyVerifyStructT_v02, valid_flags), + + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocNiSuplNotifyVerifyStructT_v02, suplServerInfo), + 10, 0, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_FLAGS_IS_ARRAY |QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, suplSessionId), + QMI_LOC_NI_SUPL_SLP_SESSION_ID_BYTE_LENGTH_V02, + + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_FLAGS_IS_ARRAY |QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, suplHash), + QMI_LOC_NI_SUPL_HASH_LENGTH_V02, + + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, posMethod), + + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, dataCodingScheme), + + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, requestorId), + 6, 0, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, clientName), + 6, 0, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, suplQop), + 7, 0, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocNiSuplNotifyVerifyStructT_v02, userResponseTimer), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocNiUmtsCpCodedStringStructT_data_v02[] = { + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpCodedStringStructT_v02, dataCodingScheme), + + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpCodedStringStructT_v02, codedString), + QMI_LOC_NI_CODEWORD_MAX_LENGTH_V02, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpCodedStringStructT_v02, codedString) - QMI_IDL_OFFSET8(qmiLocNiUmtsCpCodedStringStructT_v02, codedString_len), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocNiUmtsCpNotifyVerifyStructT_data_v02[] = { + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, valid_flags), + + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, invokeId), + + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, dataCodingScheme), + + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, notificationText), + QMI_LOC_NI_MAX_CLIENT_NAME_LENGTH_V02, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, notificationText) - QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, notificationText_len), + + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, clientAddress), + QMI_LOC_NI_MAX_EXT_CLIENT_ADDRESS_V02, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, clientAddress) - QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, clientAddress_len), + + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, locationType), + + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, requestorId), + 12, 0, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, codewordString), + 12, 0, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, lcsServiceTypeId), + + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocNiUmtsCpNotifyVerifyStructT_v02, userResponseTimer), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocNiVxServiceInteractionStructT_data_v02[] = { + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocNiVxServiceInteractionStructT_v02, niVxReq), + 5, 0, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocNiVxServiceInteractionStructT_v02, serviceInteractionType), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t 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), + 17, 0, + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocPredictedOrbitsAllowedSizesStructT_data_v02[] = { + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocPredictedOrbitsAllowedSizesStructT_v02, maxFileSizeInBytes), + + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocPredictedOrbitsAllowedSizesStructT_v02, maxPartSize), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocPredictedOrbitsServerListStructT_data_v02[] = { + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocPredictedOrbitsServerListStructT_v02, serverList), + QMI_LOC_MAX_PREDICTED_ORBITS_SERVERS_V02, + QMI_IDL_OFFSET8(qmiLocPredictedOrbitsServerListStructT_v02, serverList) - QMI_IDL_OFFSET8(qmiLocPredictedOrbitsServerListStructT_v02, serverList_len), + 17, 0, + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocSensorControlConfigSamplingSpecStructT_data_v02[] = { + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocSensorControlConfigSamplingSpecStructT_v02, samplesPerBatch), + + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocSensorControlConfigSamplingSpecStructT_v02, batchesPerSecond), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocSensorReadyStatusStructT_data_v02[] = { + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocSensorReadyStatusStructT_v02, injectEnable), + + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocSensorReadyStatusStructT_v02, dataFrequency), + 21, 0, + 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 qmiLocPredictedOrbitsDataValidityStructT_data_v02[] = { + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocPredictedOrbitsDataValidityStructT_v02, startTimeInUTC), + + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocPredictedOrbitsDataValidityStructT_v02, durationHours), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocAltitudeSrcInfoStructT_data_v02[] = { + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocAltitudeSrcInfoStructT_v02, source), + + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocAltitudeSrcInfoStructT_v02, linkage), + + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocAltitudeSrcInfoStructT_v02, coverage), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocDeleteSvInfoStructT_data_v02[] = { + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocDeleteSvInfoStructT_v02, gnssSvId), + + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocDeleteSvInfoStructT_v02, system), + + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocDeleteSvInfoStructT_v02, deleteSvInfoMask), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocWifiFixTimeStructT_data_v02[] = { + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocWifiFixTimeStructT_v02, wifiPositionTime), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocWifiFixPosStructT_data_v02[] = { + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocWifiFixPosStructT_v02, lat), + + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocWifiFixPosStructT_v02, lon), + + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocWifiFixPosStructT_v02, hepe), + + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocWifiFixPosStructT_v02, numApsUsed), + + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocWifiFixPosStructT_v02, fixErrorCode), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocWifiApInfoStructT_data_v02[] = { + QMI_IDL_FLAGS_IS_ARRAY |QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocWifiApInfoStructT_v02, macAddr), + QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02, + + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocWifiApInfoStructT_v02, rssi), + + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocWifiApInfoStructT_v02, channel), + + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocWifiApInfoStructT_v02, apQualifier), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLoc3AxisSensorSampleStructT_data_v02[] = { + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleStructT_v02, timeOffset), + + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleStructT_v02, xAxis), + + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleStructT_v02, yAxis), + + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleStructT_v02, zAxis), + + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLoc3AxisSensorSampleListStructT_data_v02[] = { + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleListStructT_v02, timeOfFirstSample), + + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleListStructT_v02, flags), + + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleListStructT_v02, sensorData), + QMI_LOC_SENSOR_DATA_MAX_SAMPLES_V02, + QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleListStructT_v02, sensorData) - QMI_IDL_OFFSET8(qmiLoc3AxisSensorSampleListStructT_v02, sensorData_len), + 30, 0, + 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), + 32, 0, + QMI_IDL_FLAG_END_VALUE +}; + +static const uint8_t qmiLocApnProfilesStructT_data_v02[] = { + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocApnProfilesStructT_v02, pdnType), + + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING, + QMI_IDL_OFFSET8(qmiLocApnProfilesStructT_v02, apnName), + QMI_LOC_MAX_APN_NAME_LENGTH_V02, + + QMI_IDL_FLAG_END_VALUE +}; + +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 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 +}; + +/*Message Definitions*/ +static const uint8_t qmiLocGenRespMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocGenRespMsgT_v02, resp), + 0, 1 +}; + +static const uint8_t qmiLocInformClientRevisionReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInformClientRevisionReqMsgT_v02, revision) +}; + +static const uint8_t qmiLocRegEventsReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocRegEventsReqMsgT_v02, eventRegMask) +}; + +static const uint8_t qmiLocStartReqMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, sessionId), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, fixRecurrence) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, fixRecurrence_valid)), + 0x10, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, fixRecurrence), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, horizontalAccuracyLevel) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, horizontalAccuracyLevel_valid)), + 0x11, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, horizontalAccuracyLevel), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, intermediateReportState) - QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, intermediateReportState_valid)), + 0x12, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocStartReqMsgT_v02, intermediateReportState), + + QMI_IDL_TLV_FLAGS_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_LAST_TLV | 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), + 0, 0 +}; + +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), + 2, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timestampUtc) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timestampUtc_valid)), + 0x25, + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timestampUtc), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, leapSeconds) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, leapSeconds_valid)), + 0x26, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, leapSeconds), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, gpsTime) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, gpsTime_valid)), + 0x27, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, gpsTime), + 1, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timeUnc) - QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timeUnc_valid)), + 0x28, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocEventPositionReportIndMsgT_v02, timeUnc), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, timeSrc) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, timeSrc_valid)), + 0x29, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocEventPositionReportIndMsgT_v02, timeSrc), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, sensorDataUsage) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventPositionReportIndMsgT_v02, sensorDataUsage_valid)), + 0x2A, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET16ARRAY(qmiLocEventPositionReportIndMsgT_v02, sensorDataUsage), + 3, 0, + + 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_LAST_TLV | 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) +}; + +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), + 4, 0 +}; + +static const uint8_t qmiLocEventNmeaIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_STRING, + QMI_IDL_OFFSET8(qmiLocEventNmeaIndMsgT_v02, nmea), + QMI_LOC_NMEA_STRING_MAX_LENGTH_V02 +}; + +static const uint8_t qmiLocEventNiNotifyVerifyReqIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, notificationType), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiVxInd) - QMI_IDL_OFFSET8(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiVxInd_valid)), + 0x10, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiVxInd), + 5, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiSuplInd) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiSuplInd_valid)), + 0x11, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET16ARRAY(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiSuplInd), + 11, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiUmtsCpInd) - QMI_IDL_OFFSET16RELATIVE(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiUmtsCpInd_valid)), + 0x12, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET16ARRAY(qmiLocEventNiNotifyVerifyReqIndMsgT_v02, NiUmtsCpInd), + 13, 0, + + 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), + 14, 0, + + 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), + 15, 0, + + 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), + 16, 0 +}; + +static const uint8_t qmiLocEventInjectTimeReqIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventInjectTimeReqIndMsgT_v02, timeServerInfo) - QMI_IDL_OFFSET8(qmiLocEventInjectTimeReqIndMsgT_v02, timeServerInfo_valid)), + 0x10, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocEventInjectTimeReqIndMsgT_v02, timeServerInfo), + 18, 0 +}; + +static const uint8_t qmiLocEventInjectPredictedOrbitsReqIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02, allowedSizes), + 19, 0, + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02, serverList) - QMI_IDL_OFFSET8(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02, serverList_valid)), + 0x10, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02, serverList), + 20, 0 +}; + +static const uint8_t qmiLocEventInjectPositionReqIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocEventInjectPositionReqIndMsgT_v02, latitude), + + 0x02, + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocEventInjectPositionReqIndMsgT_v02, longitude), + + 0x03, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocEventInjectPositionReqIndMsgT_v02, horUncCircular), + + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x04, + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocEventInjectPositionReqIndMsgT_v02, timestampUtc) +}; + +static const uint8_t qmiLocEventEngineStateIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocEventEngineStateIndMsgT_v02, engineState) +}; + +static const uint8_t qmiLocEventFixSessionStateIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocEventFixSessionStateIndMsgT_v02, sessionState), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventFixSessionStateIndMsgT_v02, sessionId) - QMI_IDL_OFFSET8(qmiLocEventFixSessionStateIndMsgT_v02, sessionId_valid)), + 0x10, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocEventFixSessionStateIndMsgT_v02, sessionId) +}; + +static const uint8_t qmiLocEventWifiReqIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocEventWifiReqIndMsgT_v02, requestType), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventWifiReqIndMsgT_v02, tbfInMs) - QMI_IDL_OFFSET8(qmiLocEventWifiReqIndMsgT_v02, tbfInMs_valid)), + 0x10, + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocEventWifiReqIndMsgT_v02, tbfInMs) +}; + +static const uint8_t qmiLocEventSensorStreamingReadyStatusIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, accelReady) - QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, accelReady_valid)), + 0x10, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocEventSensorStreamingReadyStatusIndMsgT_v02, accelReady), + 22, 0, + + 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), + 22, 0, + + 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), + 22, 0, + + QMI_IDL_TLV_FLAGS_LAST_TLV | 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), + 22, 0 +}; + +static const uint8_t qmiLocEventTimeSyncReqIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocEventTimeSyncReqIndMsgT_v02, refCounter) +}; + +static const uint8_t qmiLocEventSetSpiStreamingReportIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocEventSetSpiStreamingReportIndMsgT_v02, enable) +}; + +static const uint8_t qmiLocEventLocationServerConnectionReqIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocEventLocationServerConnectionReqIndMsgT_v02, connHandle), + + 0x02, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocEventLocationServerConnectionReqIndMsgT_v02, requestType), + + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x03, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocEventLocationServerConnectionReqIndMsgT_v02, wwanType) +}; + +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_LAST_TLV | 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), + 23, 0 +}; + +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) +}; + +/* + * 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_LAST_TLV | 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), + 0, 0 +}; + +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), + 5, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiSuplPayload) - QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiSuplPayload_valid)), + 0x11, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET16ARRAY(qmiLocNiUserRespReqMsgT_v02, NiSuplPayload), + 11, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiUmtsCpPayload) - QMI_IDL_OFFSET16RELATIVE(qmiLocNiUserRespReqMsgT_v02, NiUmtsCpPayload_valid)), + 0x12, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET16ARRAY(qmiLocNiUserRespReqMsgT_v02, NiUmtsCpPayload), + 13, 0, + + 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), + 14, 0, + + 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), + 15, 0, + + 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), + 16, 0 +}; + +static const uint8_t qmiLocNiUserRespIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocNiUserRespIndMsgT_v02, status) +}; + +static const uint8_t qmiLocInjectPredictedOrbitsDataReqMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, totalSize), + + 0x02, + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, totalParts), + + 0x03, + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, partNum), + + 0x04, + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_SZ_IS_16 | QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, partData), + ((QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02) & 0xFF), ((QMI_LOC_MAX_PREDICTED_ORBITS_PART_LEN_V02) >> 8), + QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, partData) - QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, partData_len), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, formatType) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, formatType_valid)), + 0x10, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocInjectPredictedOrbitsDataReqMsgT_v02, formatType) +}; + +static const uint8_t qmiLocInjectPredictedOrbitsDataIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataIndMsgT_v02, partNum) - QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataIndMsgT_v02, partNum_valid)), + 0x10, + QMI_IDL_GENERIC_2_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPredictedOrbitsDataIndMsgT_v02, partNum) +}; + +/* + * qmiLocGetPredictedOrbitsDataSourceReqMsgT is empty + * static const uint8_t qmiLocGetPredictedOrbitsDataSourceReqMsgT_data_v02[] = { + * }; + */ + +static const uint8_t qmiLocGetPredictedOrbitsDataSourceIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, allowedSizes) - QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, allowedSizes_valid)), + 0x10, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, allowedSizes), + 19, 0, + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, serverList) - QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, serverList_valid)), + 0x11, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02, serverList), + 20, 0 +}; + +/* + * qmiLocGetPredictedOrbitsDataValidityReqMsgT is empty + * static const uint8_t qmiLocGetPredictedOrbitsDataValidityReqMsgT_data_v02[] = { + * }; + */ + +static const uint8_t qmiLocGetPredictedOrbitsDataValidityIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02, validityInfo) - QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02, validityInfo_valid)), + 0x10, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02, validityInfo), + 24, 0 +}; + +static const uint8_t qmiLocInjectUtcTimeReqMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectUtcTimeReqMsgT_v02, timeUtc), + + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectUtcTimeReqMsgT_v02, timeUnc) +}; + +static const uint8_t qmiLocInjectUtcTimeIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectUtcTimeIndMsgT_v02, status) +}; + +static const uint8_t qmiLocInjectPositionReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, latitude) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, latitude_valid)), + 0x10, + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, latitude), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, longitude) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, longitude_valid)), + 0x11, + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, longitude), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horUncCircular) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horUncCircular_valid)), + 0x12, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horUncCircular), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horConfidence) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horConfidence_valid)), + 0x13, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horConfidence), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horReliability) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horReliability_valid)), + 0x14, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, horReliability), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtEllipsoid) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtEllipsoid_valid)), + 0x15, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtEllipsoid), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtMeanSeaLevel) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtMeanSeaLevel_valid)), + 0x16, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altitudeWrtMeanSeaLevel), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertUnc) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertUnc_valid)), + 0x17, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertUnc), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertConfidence) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertConfidence_valid)), + 0x18, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertConfidence), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertReliability) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertReliability_valid)), + 0x19, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, vertReliability), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altSourceInfo) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altSourceInfo_valid)), + 0x1A, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, altSourceInfo), + 25, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampUtc) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampUtc_valid)), + 0x1B, + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampUtc), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampAge) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampAge_valid)), + 0x1C, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, timestampAge), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, positionSrc) - QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, positionSrc_valid)), + 0x1D, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionReqMsgT_v02, positionSrc) +}; + +static const uint8_t qmiLocInjectPositionIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectPositionIndMsgT_v02, status) +}; + +static const uint8_t qmiLocSetEngineLockReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetEngineLockReqMsgT_v02, lockType) +}; + +static const uint8_t qmiLocSetEngineLockIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetEngineLockIndMsgT_v02, status) +}; + +/* + * qmiLocGetEngineLockReqMsgT is empty + * static const uint8_t qmiLocGetEngineLockReqMsgT_data_v02[] = { + * }; + */ + +static const uint8_t qmiLocGetEngineLockIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetEngineLockIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetEngineLockIndMsgT_v02, lockType) - QMI_IDL_OFFSET8(qmiLocGetEngineLockIndMsgT_v02, lockType_valid)), + 0x10, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetEngineLockIndMsgT_v02, lockType) +}; + +static const uint8_t qmiLocSetSbasConfigReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocSetSbasConfigReqMsgT_v02, sbasConfig) +}; + +static const uint8_t qmiLocSetSbasConfigIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetSbasConfigIndMsgT_v02, status) +}; + +/* + * qmiLocGetSbasConfigReqMsgT is empty + * static const uint8_t qmiLocGetSbasConfigReqMsgT_data_v02[] = { + * }; + */ + +static const uint8_t qmiLocGetSbasConfigIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetSbasConfigIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSbasConfigIndMsgT_v02, sbasConfig) - QMI_IDL_OFFSET8(qmiLocGetSbasConfigIndMsgT_v02, sbasConfig_valid)), + 0x10, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocGetSbasConfigIndMsgT_v02, sbasConfig) +}; + +static const uint8_t qmiLocSetNmeaTypesReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetNmeaTypesReqMsgT_v02, nmeaSentenceType) +}; + +static const uint8_t qmiLocSetNmeaTypesIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetNmeaTypesIndMsgT_v02, status) +}; + +/* + * qmiLocGetNmeaTypesReqMsgT is empty + * static const uint8_t qmiLocGetNmeaTypesReqMsgT_data_v02[] = { + * }; + */ + +static const uint8_t qmiLocGetNmeaTypesIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetNmeaTypesIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetNmeaTypesIndMsgT_v02, nmeaSentenceType) - QMI_IDL_OFFSET8(qmiLocGetNmeaTypesIndMsgT_v02, nmeaSentenceType_valid)), + 0x10, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetNmeaTypesIndMsgT_v02, nmeaSentenceType) +}; + +static const uint8_t qmiLocSetLowPowerModeReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocSetLowPowerModeReqMsgT_v02, lowPowerMode) +}; + +static const uint8_t qmiLocSetLowPowerModeIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetLowPowerModeIndMsgT_v02, status) +}; + +/* + * qmiLocGetLowPowerModeReqMsgT is empty + * static const uint8_t qmiLocGetLowPowerModeReqMsgT_data_v02[] = { + * }; + */ + +static const uint8_t qmiLocGetLowPowerModeIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetLowPowerModeIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetLowPowerModeIndMsgT_v02, lowPowerMode) - QMI_IDL_OFFSET8(qmiLocGetLowPowerModeIndMsgT_v02, lowPowerMode_valid)), + 0x10, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocGetLowPowerModeIndMsgT_v02, lowPowerMode) +}; + +static const uint8_t qmiLocSetServerReqMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, serverType), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv4Addr) - QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv4Addr_valid)), + 0x10, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv4Addr), + 8, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv6Addr) - QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv6Addr_valid)), + 0x11, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, ipv6Addr), + 9, 0, + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, urlAddr) - QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, urlAddr_valid)), + 0x12, + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_STRING, + QMI_IDL_OFFSET8(qmiLocSetServerReqMsgT_v02, urlAddr), + QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02 +}; + +static const uint8_t qmiLocSetServerIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetServerIndMsgT_v02, status) +}; + +static const uint8_t qmiLocGetServerReqMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetServerReqMsgT_v02, serverType), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetServerReqMsgT_v02, serverAddrTypeMask) - QMI_IDL_OFFSET8(qmiLocGetServerReqMsgT_v02, serverAddrTypeMask_valid)), + 0x10, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocGetServerReqMsgT_v02, serverAddrTypeMask) +}; + +static const uint8_t qmiLocGetServerIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, status), + + 0x02, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, serverType), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv4Addr) - QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv4Addr_valid)), + 0x10, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv4Addr), + 8, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv6Addr) - QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv6Addr_valid)), + 0x11, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, ipv6Addr), + 9, 0, + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, urlAddr) - QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, urlAddr_valid)), + 0x12, + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_STRING, + QMI_IDL_OFFSET8(qmiLocGetServerIndMsgT_v02, urlAddr), + QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02 +}; + +static const uint8_t qmiLocDeleteAssistDataReqMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteAllFlag), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteSvInfoList) - QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteSvInfoList_valid)), + 0x10, + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteSvInfoList), + QMI_LOC_DELETE_MAX_SV_INFO_LENGTH_V02, + QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteSvInfoList) - QMI_IDL_OFFSET8(qmiLocDeleteAssistDataReqMsgT_v02, deleteSvInfoList_len), + 26, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteGnssDataMask) - QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteGnssDataMask_valid)), + 0x11, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocDeleteAssistDataReqMsgT_v02, deleteGnssDataMask), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteCellDbDataMask) - QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteCellDbDataMask_valid)), + 0x12, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocDeleteAssistDataReqMsgT_v02, deleteCellDbDataMask), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteClockInfoMask) - QMI_IDL_OFFSET16RELATIVE(qmiLocDeleteAssistDataReqMsgT_v02, deleteClockInfoMask_valid)), + 0x13, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocDeleteAssistDataReqMsgT_v02, deleteClockInfoMask) +}; + +static const uint8_t qmiLocDeleteAssistDataIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocDeleteAssistDataIndMsgT_v02, status) +}; + +static const uint8_t qmiLocSetXtraTSessionControlReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocSetXtraTSessionControlReqMsgT_v02, xtraTSessionControl) +}; + +static const uint8_t qmiLocSetXtraTSessionControlIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetXtraTSessionControlIndMsgT_v02, status) +}; + +/* + * qmiLocGetXtraTSessionControlReqMsgT is empty + * static const uint8_t qmiLocGetXtraTSessionControlReqMsgT_data_v02[] = { + * }; + */ + +static const uint8_t qmiLocGetXtraTSessionControlIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetXtraTSessionControlIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetXtraTSessionControlIndMsgT_v02, xtraTSessionControl) - QMI_IDL_OFFSET8(qmiLocGetXtraTSessionControlIndMsgT_v02, xtraTSessionControl_valid)), + 0x10, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocGetXtraTSessionControlIndMsgT_v02, xtraTSessionControl) +}; + +static const uint8_t qmiLocInjectWifiPositionReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixTime) - QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixTime_valid)), + 0x10, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixTime), + 27, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixPosition) - QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixPosition_valid)), + 0x11, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, wifiFixPosition), + 28, 0, + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, apInfo) - QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, apInfo_valid)), + 0x12, + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, apInfo), + QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02, + QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, apInfo) - QMI_IDL_OFFSET8(qmiLocInjectWifiPositionReqMsgT_v02, apInfo_len), + 29, 0, + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiPositionReqMsgT_v02, horizontalReliability) - QMI_IDL_OFFSET16RELATIVE(qmiLocInjectWifiPositionReqMsgT_v02, horizontalReliability_valid)), + 0x13, + QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET16ARRAY(qmiLocInjectWifiPositionReqMsgT_v02, horizontalReliability) +}; + +static const uint8_t qmiLocInjectWifiPositionIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectWifiPositionIndMsgT_v02, status) +}; + +static const uint8_t qmiLocNotifyWifiStatusReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocNotifyWifiStatusReqMsgT_v02, wifiStatus) +}; + +static const uint8_t qmiLocNotifyWifiStatusIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocNotifyWifiStatusIndMsgT_v02, status) +}; + +/* + * qmiLocGetRegisteredEventsReqMsgT is empty + * static const uint8_t qmiLocGetRegisteredEventsReqMsgT_data_v02[] = { + * }; + */ + +static const uint8_t qmiLocGetRegisteredEventsIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetRegisteredEventsIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetRegisteredEventsIndMsgT_v02, eventRegMask) - QMI_IDL_OFFSET8(qmiLocGetRegisteredEventsIndMsgT_v02, eventRegMask_valid)), + 0x10, + QMI_IDL_GENERIC_8_BYTE, + QMI_IDL_OFFSET8(qmiLocGetRegisteredEventsIndMsgT_v02, eventRegMask) +}; + +static const uint8_t qmiLocSetOperationModeReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetOperationModeReqMsgT_v02, operationMode) +}; + +static const uint8_t qmiLocSetOperationModeIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetOperationModeIndMsgT_v02, status) +}; + +/* + * qmiLocGetOperationModeReqMsgT is empty + * static const uint8_t qmiLocGetOperationModeReqMsgT_data_v02[] = { + * }; + */ + +static const uint8_t qmiLocGetOperationModeIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetOperationModeIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetOperationModeIndMsgT_v02, operationMode) - QMI_IDL_OFFSET8(qmiLocGetOperationModeIndMsgT_v02, operationMode_valid)), + 0x10, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetOperationModeIndMsgT_v02, operationMode) +}; + +static const uint8_t qmiLocSetSpiStatusReqMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocSetSpiStatusReqMsgT_v02, stationary), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSpiStatusReqMsgT_v02, confidenceStationary) - QMI_IDL_OFFSET8(qmiLocSetSpiStatusReqMsgT_v02, confidenceStationary_valid)), + 0x10, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocSetSpiStatusReqMsgT_v02, confidenceStationary) +}; + +static const uint8_t qmiLocSetSpiStatusIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetSpiStatusIndMsgT_v02, status) +}; + +static const uint8_t qmiLocInjectSensorDataReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, opaqueIdentifier) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, opaqueIdentifier_valid)), + 0x10, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, opaqueIdentifier), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, threeAxisAccelData) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, threeAxisAccelData_valid)), + 0x11, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocInjectSensorDataReqMsgT_v02, threeAxisAccelData), + 31, 0, + + 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), + 31, 0, + + 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), + 33, 0, + + QMI_IDL_TLV_FLAGS_LAST_TLV | 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), + 33, 0 +}; + +static const uint8_t qmiLocInjectSensorDataIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, opaqueIdentifier) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, opaqueIdentifier_valid)), + 0x10, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, opaqueIdentifier), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisAccelSamplesAccepted) - QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisAccelSamplesAccepted_valid)), + 0x11, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectSensorDataIndMsgT_v02, threeAxisAccelSamplesAccepted), + + QMI_IDL_TLV_FLAGS_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_LAST_TLV | 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) +}; + +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), + 34, 0 +}; + +static const uint8_t qmiLocInformLocationServerConnStatusIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInformLocationServerConnStatusIndMsgT_v02, status) +}; + +static const uint8_t qmiLocSetProtocolConfigParametersReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplSecurity) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplSecurity_valid)), + 0x10, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, suplSecurity), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, vxVersion) - QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, vxVersion_valid)), + 0x11, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetProtocolConfigParametersReqMsgT_v02, vxVersion), + + QMI_IDL_TLV_FLAGS_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_LAST_TLV | 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) +}; + +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_LAST_TLV | 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) +}; + +static const uint8_t qmiLocSetSensorControlConfigReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorControlConfigReqMsgT_v02, sensorsUsage) - QMI_IDL_OFFSET8(qmiLocSetSensorControlConfigReqMsgT_v02, sensorsUsage_valid)), + 0x10, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetSensorControlConfigReqMsgT_v02, sensorsUsage) +}; + +static const uint8_t qmiLocSetSensorControlConfigIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetSensorControlConfigIndMsgT_v02, status) +}; + +/* + * qmiLocGetSensorControlConfigReqMsgT is empty + * static const uint8_t qmiLocGetSensorControlConfigReqMsgT_data_v02[] = { + * }; + */ + +static const uint8_t qmiLocGetSensorControlConfigIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetSensorControlConfigIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorControlConfigIndMsgT_v02, sensorsUsage) - QMI_IDL_OFFSET8(qmiLocGetSensorControlConfigIndMsgT_v02, sensorsUsage_valid)), + 0x10, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetSensorControlConfigIndMsgT_v02, sensorsUsage) +}; + +static const uint8_t qmiLocSetSensorPropertiesReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_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_LAST_TLV | 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) +}; + +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_LAST_TLV | 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) +}; + +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), + 21, 0, + + 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), + 21, 0, + + 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), + 21, 0, + + 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), + 21, 0 +}; + +static const uint8_t qmiLocSetSensorPerformanceControlConfigIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02, failedConfiguration) - QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02, failedConfiguration_valid)), + 0x10, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02, failedConfiguration) +}; + +/* + * qmiLocGetSensorPerformanceControlConfigReqMsgT is empty + * static const uint8_t qmiLocGetSensorPerformanceControlConfigReqMsgT_data_v02[] = { + * }; + */ + +static const uint8_t qmiLocGetSensorPerformanceControlConfigIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, performanceControlMode) - QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, performanceControlMode_valid)), + 0x10, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, performanceControlMode), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, accelSamplingSpec) - QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, accelSamplingSpec_valid)), + 0x11, + QMI_IDL_AGGREGATE, + QMI_IDL_OFFSET8(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02, accelSamplingSpec), + 21, 0, + + 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), + 21, 0, + + 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), + 21, 0, + + 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), + 21, 0 +}; + +static const uint8_t qmiLocInjectSuplCertificateReqMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectSuplCertificateReqMsgT_v02, suplCertId), + + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02, + QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_SZ_IS_16 | QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectSuplCertificateReqMsgT_v02, suplCertData), + ((QMI_LOC_MAX_SUPL_CERT_LENGTH_V02) & 0xFF), ((QMI_LOC_MAX_SUPL_CERT_LENGTH_V02) >> 8), + QMI_IDL_OFFSET8(qmiLocInjectSuplCertificateReqMsgT_v02, suplCertData) - QMI_IDL_OFFSET8(qmiLocInjectSuplCertificateReqMsgT_v02, suplCertData_len) +}; + +static const uint8_t qmiLocInjectSuplCertificateIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocInjectSuplCertificateIndMsgT_v02, status) +}; + +static const uint8_t qmiLocDeleteSuplCertificateReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocDeleteSuplCertificateReqMsgT_v02, suplCertId) - QMI_IDL_OFFSET8(qmiLocDeleteSuplCertificateReqMsgT_v02, suplCertId_valid)), + 0x10, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocDeleteSuplCertificateReqMsgT_v02, suplCertId) +}; + +static const uint8_t qmiLocDeleteSuplCertificateIndMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocDeleteSuplCertificateIndMsgT_v02, status) +}; + +static const uint8_t qmiLocSetPositionEngineConfigParametersReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, injectedPositionControl) - QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, injectedPositionControl_valid)), + 0x10, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, injectedPositionControl), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, filterSvUsage) - QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, filterSvUsage_valid)), + 0x11, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, filterSvUsage), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, storeAssistData) - QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, storeAssistData_valid)), + 0x12, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersReqMsgT_v02, storeAssistData) +}; + +static const uint8_t qmiLocSetPositionEngineConfigParametersIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersIndMsgT_v02, failedPositionEngineConfigParamMask) - QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersIndMsgT_v02, failedPositionEngineConfigParamMask_valid)), + 0x10, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocSetPositionEngineConfigParametersIndMsgT_v02, failedPositionEngineConfigParamMask) +}; + +static const uint8_t qmiLocGetPositionEngineConfigParametersReqMsgT_data_v02[] = { + QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersReqMsgT_v02, getPositionEngineConfigParamMask) +}; + +static const uint8_t qmiLocGetPositionEngineConfigParametersIndMsgT_data_v02[] = { + 0x01, + QMI_IDL_GENERIC_4_BYTE, + QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, status), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, injectedPositionControl) - QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, injectedPositionControl_valid)), + 0x10, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, injectedPositionControl), + + QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, filterSvUsage) - QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, filterSvUsage_valid)), + 0x11, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, filterSvUsage), + + QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, storeAssistData) - QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, storeAssistData_valid)), + 0x12, + QMI_IDL_GENERIC_1_BYTE, + QMI_IDL_OFFSET8(qmiLocGetPositionEngineConfigParametersIndMsgT_v02, storeAssistData) +}; + +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), + 35, 0, + + 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_LAST_TLV | 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) +}; + +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), + 35, 0, + + 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 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_LAST_TLV | 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) +}; + +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 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), + 2, 0, + + 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), + 1, 0, + + 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), + 3, 0, + + 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), + 36, 0 +}; + +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), + 37, 0, + + 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), + 38, 0, + + 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), + 39, 0, + + 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) +}; + +/* 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(qmiLocPredictedOrbitsDataValidityStructT_v02), qmiLocPredictedOrbitsDataValidityStructT_data_v02}, + {sizeof(qmiLocAltitudeSrcInfoStructT_v02), qmiLocAltitudeSrcInfoStructT_data_v02}, + {sizeof(qmiLocDeleteSvInfoStructT_v02), qmiLocDeleteSvInfoStructT_data_v02}, + {sizeof(qmiLocWifiFixTimeStructT_v02), qmiLocWifiFixTimeStructT_data_v02}, + {sizeof(qmiLocWifiFixPosStructT_v02), qmiLocWifiFixPosStructT_data_v02}, + {sizeof(qmiLocWifiApInfoStructT_v02), qmiLocWifiApInfoStructT_data_v02}, + {sizeof(qmiLoc3AxisSensorSampleStructT_v02), qmiLoc3AxisSensorSampleStructT_data_v02}, + {sizeof(qmiLoc3AxisSensorSampleListStructT_v02), qmiLoc3AxisSensorSampleListStructT_data_v02}, + {sizeof(qmiLocSensorTemperatureSampleStructT_v02), qmiLocSensorTemperatureSampleStructT_data_v02}, + {sizeof(qmiLocSensorTemperatureSampleListStructT_v02), qmiLocSensorTemperatureSampleListStructT_data_v02}, + {sizeof(qmiLocApnProfilesStructT_v02), qmiLocApnProfilesStructT_data_v02}, + {sizeof(qmiLocCircularGeofenceArgsStructT_v02), qmiLocCircularGeofenceArgsStructT_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} +}; + +/* 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}, + {0, 0}, + {sizeof(qmiLocGetServiceRevisionIndMsgT_v02), qmiLocGetServiceRevisionIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetFixCriteriaIndMsgT_v02), qmiLocGetFixCriteriaIndMsgT_data_v02}, + {sizeof(qmiLocNiUserRespReqMsgT_v02), qmiLocNiUserRespReqMsgT_data_v02}, + {sizeof(qmiLocNiUserRespIndMsgT_v02), qmiLocNiUserRespIndMsgT_data_v02}, + {sizeof(qmiLocInjectPredictedOrbitsDataReqMsgT_v02), qmiLocInjectPredictedOrbitsDataReqMsgT_data_v02}, + {sizeof(qmiLocInjectPredictedOrbitsDataIndMsgT_v02), qmiLocInjectPredictedOrbitsDataIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02), qmiLocGetPredictedOrbitsDataSourceIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetPredictedOrbitsDataValidityIndMsgT_v02), qmiLocGetPredictedOrbitsDataValidityIndMsgT_data_v02}, + {sizeof(qmiLocInjectUtcTimeReqMsgT_v02), qmiLocInjectUtcTimeReqMsgT_data_v02}, + {sizeof(qmiLocInjectUtcTimeIndMsgT_v02), qmiLocInjectUtcTimeIndMsgT_data_v02}, + {sizeof(qmiLocInjectPositionReqMsgT_v02), qmiLocInjectPositionReqMsgT_data_v02}, + {sizeof(qmiLocInjectPositionIndMsgT_v02), qmiLocInjectPositionIndMsgT_data_v02}, + {sizeof(qmiLocSetEngineLockReqMsgT_v02), qmiLocSetEngineLockReqMsgT_data_v02}, + {sizeof(qmiLocSetEngineLockIndMsgT_v02), qmiLocSetEngineLockIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetEngineLockIndMsgT_v02), qmiLocGetEngineLockIndMsgT_data_v02}, + {sizeof(qmiLocSetSbasConfigReqMsgT_v02), qmiLocSetSbasConfigReqMsgT_data_v02}, + {sizeof(qmiLocSetSbasConfigIndMsgT_v02), qmiLocSetSbasConfigIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetSbasConfigIndMsgT_v02), qmiLocGetSbasConfigIndMsgT_data_v02}, + {sizeof(qmiLocSetNmeaTypesReqMsgT_v02), qmiLocSetNmeaTypesReqMsgT_data_v02}, + {sizeof(qmiLocSetNmeaTypesIndMsgT_v02), qmiLocSetNmeaTypesIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetNmeaTypesIndMsgT_v02), qmiLocGetNmeaTypesIndMsgT_data_v02}, + {sizeof(qmiLocSetLowPowerModeReqMsgT_v02), qmiLocSetLowPowerModeReqMsgT_data_v02}, + {sizeof(qmiLocSetLowPowerModeIndMsgT_v02), qmiLocSetLowPowerModeIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetLowPowerModeIndMsgT_v02), qmiLocGetLowPowerModeIndMsgT_data_v02}, + {sizeof(qmiLocSetServerReqMsgT_v02), qmiLocSetServerReqMsgT_data_v02}, + {sizeof(qmiLocSetServerIndMsgT_v02), qmiLocSetServerIndMsgT_data_v02}, + {sizeof(qmiLocGetServerReqMsgT_v02), qmiLocGetServerReqMsgT_data_v02}, + {sizeof(qmiLocGetServerIndMsgT_v02), qmiLocGetServerIndMsgT_data_v02}, + {sizeof(qmiLocDeleteAssistDataReqMsgT_v02), qmiLocDeleteAssistDataReqMsgT_data_v02}, + {sizeof(qmiLocDeleteAssistDataIndMsgT_v02), qmiLocDeleteAssistDataIndMsgT_data_v02}, + {sizeof(qmiLocSetXtraTSessionControlReqMsgT_v02), qmiLocSetXtraTSessionControlReqMsgT_data_v02}, + {sizeof(qmiLocSetXtraTSessionControlIndMsgT_v02), qmiLocSetXtraTSessionControlIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetXtraTSessionControlIndMsgT_v02), qmiLocGetXtraTSessionControlIndMsgT_data_v02}, + {sizeof(qmiLocInjectWifiPositionReqMsgT_v02), qmiLocInjectWifiPositionReqMsgT_data_v02}, + {sizeof(qmiLocInjectWifiPositionIndMsgT_v02), qmiLocInjectWifiPositionIndMsgT_data_v02}, + {sizeof(qmiLocNotifyWifiStatusReqMsgT_v02), qmiLocNotifyWifiStatusReqMsgT_data_v02}, + {sizeof(qmiLocNotifyWifiStatusIndMsgT_v02), qmiLocNotifyWifiStatusIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetRegisteredEventsIndMsgT_v02), qmiLocGetRegisteredEventsIndMsgT_data_v02}, + {sizeof(qmiLocSetOperationModeReqMsgT_v02), qmiLocSetOperationModeReqMsgT_data_v02}, + {sizeof(qmiLocSetOperationModeIndMsgT_v02), qmiLocSetOperationModeIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetOperationModeIndMsgT_v02), qmiLocGetOperationModeIndMsgT_data_v02}, + {sizeof(qmiLocSetSpiStatusReqMsgT_v02), qmiLocSetSpiStatusReqMsgT_data_v02}, + {sizeof(qmiLocSetSpiStatusIndMsgT_v02), qmiLocSetSpiStatusIndMsgT_data_v02}, + {sizeof(qmiLocInjectSensorDataReqMsgT_v02), qmiLocInjectSensorDataReqMsgT_data_v02}, + {sizeof(qmiLocInjectSensorDataIndMsgT_v02), qmiLocInjectSensorDataIndMsgT_data_v02}, + {sizeof(qmiLocInjectTimeSyncDataReqMsgT_v02), qmiLocInjectTimeSyncDataReqMsgT_data_v02}, + {sizeof(qmiLocInjectTimeSyncDataIndMsgT_v02), qmiLocInjectTimeSyncDataIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetCradleMountConfigIndMsgT_v02), qmiLocGetCradleMountConfigIndMsgT_data_v02}, + {sizeof(qmiLocSetCradleMountConfigReqMsgT_v02), qmiLocSetCradleMountConfigReqMsgT_data_v02}, + {sizeof(qmiLocSetCradleMountConfigIndMsgT_v02), qmiLocSetCradleMountConfigIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetExternalPowerConfigIndMsgT_v02), qmiLocGetExternalPowerConfigIndMsgT_data_v02}, + {sizeof(qmiLocSetExternalPowerConfigReqMsgT_v02), qmiLocSetExternalPowerConfigReqMsgT_data_v02}, + {sizeof(qmiLocSetExternalPowerConfigIndMsgT_v02), qmiLocSetExternalPowerConfigIndMsgT_data_v02}, + {sizeof(qmiLocInformLocationServerConnStatusReqMsgT_v02), qmiLocInformLocationServerConnStatusReqMsgT_data_v02}, + {sizeof(qmiLocInformLocationServerConnStatusIndMsgT_v02), qmiLocInformLocationServerConnStatusIndMsgT_data_v02}, + {sizeof(qmiLocSetProtocolConfigParametersReqMsgT_v02), qmiLocSetProtocolConfigParametersReqMsgT_data_v02}, + {sizeof(qmiLocSetProtocolConfigParametersIndMsgT_v02), qmiLocSetProtocolConfigParametersIndMsgT_data_v02}, + {sizeof(qmiLocGetProtocolConfigParametersReqMsgT_v02), qmiLocGetProtocolConfigParametersReqMsgT_data_v02}, + {sizeof(qmiLocGetProtocolConfigParametersIndMsgT_v02), qmiLocGetProtocolConfigParametersIndMsgT_data_v02}, + {sizeof(qmiLocSetSensorControlConfigReqMsgT_v02), qmiLocSetSensorControlConfigReqMsgT_data_v02}, + {sizeof(qmiLocSetSensorControlConfigIndMsgT_v02), qmiLocSetSensorControlConfigIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetSensorControlConfigIndMsgT_v02), qmiLocGetSensorControlConfigIndMsgT_data_v02}, + {sizeof(qmiLocSetSensorPropertiesReqMsgT_v02), qmiLocSetSensorPropertiesReqMsgT_data_v02}, + {sizeof(qmiLocSetSensorPropertiesIndMsgT_v02), qmiLocSetSensorPropertiesIndMsgT_data_v02}, + {sizeof(qmiLocGetSensorPropertiesReqMsgT_v02), qmiLocGetSensorPropertiesReqMsgT_data_v02}, + {sizeof(qmiLocGetSensorPropertiesIndMsgT_v02), qmiLocGetSensorPropertiesIndMsgT_data_v02}, + {sizeof(qmiLocSetSensorPerformanceControlConfigReqMsgT_v02), qmiLocSetSensorPerformanceControlConfigReqMsgT_data_v02}, + {sizeof(qmiLocSetSensorPerformanceControlConfigIndMsgT_v02), qmiLocSetSensorPerformanceControlConfigIndMsgT_data_v02}, + {0, 0}, + {sizeof(qmiLocGetSensorPerformanceControlConfigIndMsgT_v02), qmiLocGetSensorPerformanceControlConfigIndMsgT_data_v02}, + {sizeof(qmiLocInjectSuplCertificateReqMsgT_v02), qmiLocInjectSuplCertificateReqMsgT_data_v02}, + {sizeof(qmiLocInjectSuplCertificateIndMsgT_v02), qmiLocInjectSuplCertificateIndMsgT_data_v02}, + {sizeof(qmiLocDeleteSuplCertificateReqMsgT_v02), qmiLocDeleteSuplCertificateReqMsgT_data_v02}, + {sizeof(qmiLocDeleteSuplCertificateIndMsgT_v02), qmiLocDeleteSuplCertificateIndMsgT_data_v02}, + {sizeof(qmiLocSetPositionEngineConfigParametersReqMsgT_v02), qmiLocSetPositionEngineConfigParametersReqMsgT_data_v02}, + {sizeof(qmiLocSetPositionEngineConfigParametersIndMsgT_v02), qmiLocSetPositionEngineConfigParametersIndMsgT_data_v02}, + {sizeof(qmiLocGetPositionEngineConfigParametersReqMsgT_v02), qmiLocGetPositionEngineConfigParametersReqMsgT_data_v02}, + {sizeof(qmiLocGetPositionEngineConfigParametersIndMsgT_v02), qmiLocGetPositionEngineConfigParametersIndMsgT_data_v02}, + {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(qmiLocEditGeofenceReqMsgT_v02), qmiLocEditGeofenceReqMsgT_data_v02}, + {sizeof(qmiLocEditGeofenceIndMsgT_v02), qmiLocEditGeofenceIndMsgT_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}, + {0, 0}, + {sizeof(qmiLocWWANOutOfServiceNotificationIndMsgT_v02), qmiLocWWANOutOfServiceNotificationIndMsgT_data_v02}, + {sizeof(qmiLocPedometerReportReqMsgT_v02), qmiLocPedometerReportReqMsgT_data_v02}, + {sizeof(qmiLocPedometerReportIndMsgT_v02), qmiLocPedometerReportIndMsgT_data_v02} +}; + +/* Predefine the Type Table Object */ +static const qmi_idl_type_table_object loc_qmi_idl_type_table_object_v02; + +/*Referenced Tables Array*/ +static const qmi_idl_type_table_object *loc_qmi_idl_type_table_object_referenced_tables_v02[] = +{&loc_qmi_idl_type_table_object_v02, &common_qmi_idl_type_table_object_v01}; + +/*Type Table Object*/ +static const qmi_idl_type_table_object loc_qmi_idl_type_table_object_v02 = { + sizeof(loc_type_table_v02)/sizeof(qmi_idl_type_table_entry ), + sizeof(loc_message_table_v02)/sizeof(qmi_idl_message_table_entry), + 1, + loc_type_table_v02, + loc_message_table_v02, + loc_qmi_idl_type_table_object_referenced_tables_v02 +}; + +/*Arrays of service_message_table_entries for commands, responses and indications*/ +static const qmi_idl_service_message_table_entry loc_service_command_messages_v02[] = { + {QMI_LOC_INFORM_CLIENT_REVISION_REQ_V02, 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), 103}, + {QMI_LOC_STOP_REQ_V02, QMI_IDL_TYPE16(0, 4), 4}, + {QMI_LOC_GET_SERVICE_REVISION_REQ_V02, QMI_IDL_TYPE16(0, 24), 0}, + {QMI_LOC_GET_FIX_CRITERIA_REQ_V02, QMI_IDL_TYPE16(0, 26), 0}, + {QMI_LOC_NI_USER_RESPONSE_REQ_V02, QMI_IDL_TYPE16(0, 28), 1345}, + {QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02, QMI_IDL_TYPE16(0, 30), 1053}, + {QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02, QMI_IDL_TYPE16(0, 32), 0}, + {QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_REQ_V02, QMI_IDL_TYPE16(0, 34), 0}, + {QMI_LOC_INJECT_UTC_TIME_REQ_V02, QMI_IDL_TYPE16(0, 36), 18}, + {QMI_LOC_INJECT_POSITION_REQ_V02, QMI_IDL_TYPE16(0, 38), 112}, + {QMI_LOC_SET_ENGINE_LOCK_REQ_V02, QMI_IDL_TYPE16(0, 40), 7}, + {QMI_LOC_GET_ENGINE_LOCK_REQ_V02, QMI_IDL_TYPE16(0, 42), 0}, + {QMI_LOC_SET_SBAS_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 44), 4}, + {QMI_LOC_GET_SBAS_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 46), 0}, + {QMI_LOC_SET_NMEA_TYPES_REQ_V02, QMI_IDL_TYPE16(0, 48), 7}, + {QMI_LOC_GET_NMEA_TYPES_REQ_V02, QMI_IDL_TYPE16(0, 50), 0}, + {QMI_LOC_SET_LOW_POWER_MODE_REQ_V02, QMI_IDL_TYPE16(0, 52), 4}, + {QMI_LOC_GET_LOW_POWER_MODE_REQ_V02, QMI_IDL_TYPE16(0, 54), 0}, + {QMI_LOC_SET_SERVER_REQ_V02, QMI_IDL_TYPE16(0, 56), 297}, + {QMI_LOC_GET_SERVER_REQ_V02, QMI_IDL_TYPE16(0, 58), 11}, + {QMI_LOC_DELETE_ASSIST_DATA_REQ_V02, QMI_IDL_TYPE16(0, 60), 929}, + {QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02, QMI_IDL_TYPE16(0, 62), 4}, + {QMI_LOC_GET_XTRA_T_SESSION_CONTROL_REQ_V02, QMI_IDL_TYPE16(0, 64), 0}, + {QMI_LOC_INJECT_WIFI_POSITION_REQ_V02, QMI_IDL_TYPE16(0, 66), 694}, + {QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 68), 7}, + {QMI_LOC_GET_REGISTERED_EVENTS_REQ_V02, QMI_IDL_TYPE16(0, 70), 0}, + {QMI_LOC_SET_OPERATION_MODE_REQ_V02, QMI_IDL_TYPE16(0, 72), 7}, + {QMI_LOC_GET_OPERATION_MODE_REQ_V02, QMI_IDL_TYPE16(0, 74), 0}, + {QMI_LOC_SET_SPI_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 76), 8}, + {QMI_LOC_INJECT_SENSOR_DATA_REQ_V02, QMI_IDL_TYPE16(0, 78), 2063}, + {QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02, QMI_IDL_TYPE16(0, 80), 21}, + {QMI_LOC_SET_CRADLE_MOUNT_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 84), 11}, + {QMI_LOC_GET_CRADLE_MOUNT_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 82), 0}, + {QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 88), 7}, + {QMI_LOC_GET_EXTERNAL_POWER_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 86), 0}, + {QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02, QMI_IDL_TYPE16(0, 90), 129}, + {QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02, QMI_IDL_TYPE16(0, 92), 53}, + {QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02, QMI_IDL_TYPE16(0, 94), 11}, + {QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 96), 7}, + {QMI_LOC_GET_SENSOR_CONTROL_CONFIG_REQ_V02, QMI_IDL_TYPE16(0, 98), 0}, + {QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02, QMI_IDL_TYPE16(0, 100), 35}, + {QMI_LOC_GET_SENSOR_PROPERTIES_REQ_V02, QMI_IDL_TYPE16(0, 102), 7}, + {QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02, QMI_IDL_TYPE16(0, 104), 42}, + {QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02, QMI_IDL_TYPE16(0, 106), 0}, + {QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02, QMI_IDL_TYPE16(0, 108), 2009}, + {QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02, QMI_IDL_TYPE16(0, 110), 4}, + {QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02, QMI_IDL_TYPE16(0, 112), 12}, + {QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02, QMI_IDL_TYPE16(0, 114), 7}, + {QMI_LOC_ADD_CIRCULAR_GEOFENCE_REQ_V02, QMI_IDL_TYPE16(0, 116), 52}, + {QMI_LOC_DELETE_GEOFENCE_REQ_V02, QMI_IDL_TYPE16(0, 118), 14}, + {QMI_LOC_QUERY_GEOFENCE_REQ_V02, QMI_IDL_TYPE16(0, 120), 14}, + {QMI_LOC_EDIT_GEOFENCE_REQ_V02, QMI_IDL_TYPE16(0, 122), 25}, + {QMI_LOC_GET_BEST_AVAILABLE_POSITION_REQ_V02, QMI_IDL_TYPE16(0, 124), 7}, + {QMI_LOC_INJECT_MOTION_DATA_REQ_V02, QMI_IDL_TYPE16(0, 126), 19}, + {QMI_LOC_GET_NI_GEOFENCE_ID_LIST_REQ_V02, QMI_IDL_TYPE16(0, 128), 7}, + {QMI_LOC_INJECT_GSM_CELL_INFO_REQ_V02, QMI_IDL_TYPE16(0, 130), 30}, + {QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_REQ_V02, QMI_IDL_TYPE16(0, 138), 1036}, + {QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_REQ_V02, QMI_IDL_TYPE16(0, 140), 0}, + {QMI_LOC_PEDOMETER_REPORT_REQ_V02, QMI_IDL_TYPE16(0, 142), 46}, + {QMI_LOC_INJECT_WCDMA_CELL_INFO_REQ_V02, QMI_IDL_TYPE16(0, 132), 36}, + {QMI_LOC_INJECT_TDSCDMA_CELL_INFO_REQ_V02, QMI_IDL_TYPE16(0, 134), 33}, + {QMI_LOC_INJECT_SUBSCRIBER_ID_REQ_V02, QMI_IDL_TYPE16(0, 136), 22} +}; + +static const qmi_idl_service_message_table_entry loc_service_response_messages_v02[] = { + {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} +}; + +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), 388}, + {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), 12}, + {QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02, QMI_IDL_TYPE16(0, 15), 32}, + {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, 25), 532}, + {QMI_LOC_GET_FIX_CRITERIA_IND_V02, QMI_IDL_TYPE16(0, 27), 99}, + {QMI_LOC_NI_USER_RESPONSE_IND_V02, QMI_IDL_TYPE16(0, 29), 7}, + {QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02, QMI_IDL_TYPE16(0, 31), 12}, + {QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02, QMI_IDL_TYPE16(0, 33), 790}, + {QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_IND_V02, QMI_IDL_TYPE16(0, 35), 20}, + {QMI_LOC_INJECT_UTC_TIME_IND_V02, QMI_IDL_TYPE16(0, 37), 7}, + {QMI_LOC_INJECT_POSITION_IND_V02, QMI_IDL_TYPE16(0, 39), 7}, + {QMI_LOC_SET_ENGINE_LOCK_IND_V02, QMI_IDL_TYPE16(0, 41), 7}, + {QMI_LOC_GET_ENGINE_LOCK_IND_V02, QMI_IDL_TYPE16(0, 43), 14}, + {QMI_LOC_SET_SBAS_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 45), 7}, + {QMI_LOC_GET_SBAS_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 47), 11}, + {QMI_LOC_SET_NMEA_TYPES_IND_V02, QMI_IDL_TYPE16(0, 49), 7}, + {QMI_LOC_GET_NMEA_TYPES_IND_V02, QMI_IDL_TYPE16(0, 51), 14}, + {QMI_LOC_SET_LOW_POWER_MODE_IND_V02, QMI_IDL_TYPE16(0, 53), 7}, + {QMI_LOC_GET_LOW_POWER_MODE_IND_V02, QMI_IDL_TYPE16(0, 55), 11}, + {QMI_LOC_SET_SERVER_IND_V02, QMI_IDL_TYPE16(0, 57), 7}, + {QMI_LOC_GET_SERVER_IND_V02, QMI_IDL_TYPE16(0, 59), 304}, + {QMI_LOC_DELETE_ASSIST_DATA_IND_V02, QMI_IDL_TYPE16(0, 61), 7}, + {QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02, QMI_IDL_TYPE16(0, 63), 7}, + {QMI_LOC_GET_XTRA_T_SESSION_CONTROL_IND_V02, QMI_IDL_TYPE16(0, 65), 11}, + {QMI_LOC_INJECT_WIFI_POSITION_IND_V02, QMI_IDL_TYPE16(0, 67), 7}, + {QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02, QMI_IDL_TYPE16(0, 69), 7}, + {QMI_LOC_GET_REGISTERED_EVENTS_IND_V02, QMI_IDL_TYPE16(0, 71), 18}, + {QMI_LOC_SET_OPERATION_MODE_IND_V02, QMI_IDL_TYPE16(0, 73), 7}, + {QMI_LOC_GET_OPERATION_MODE_IND_V02, QMI_IDL_TYPE16(0, 75), 14}, + {QMI_LOC_SET_SPI_STATUS_IND_V02, QMI_IDL_TYPE16(0, 77), 7}, + {QMI_LOC_INJECT_SENSOR_DATA_IND_V02, QMI_IDL_TYPE16(0, 79), 30}, + {QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02, QMI_IDL_TYPE16(0, 81), 7}, + {QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 85), 7}, + {QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 83), 18}, + {QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 89), 7}, + {QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 87), 14}, + {QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02, QMI_IDL_TYPE16(0, 91), 7}, + {QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02, QMI_IDL_TYPE16(0, 93), 18}, + {QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02, QMI_IDL_TYPE16(0, 95), 60}, + {QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 97), 7}, + {QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02, QMI_IDL_TYPE16(0, 99), 14}, + {QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02, QMI_IDL_TYPE16(0, 101), 14}, + {QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02, QMI_IDL_TYPE16(0, 103), 42}, + {QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02, QMI_IDL_TYPE16(0, 105), 14}, + {QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02, QMI_IDL_TYPE16(0, 107), 49}, + {QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02, QMI_IDL_TYPE16(0, 109), 7}, + {QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02, QMI_IDL_TYPE16(0, 111), 7}, + {QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02, QMI_IDL_TYPE16(0, 113), 14}, + {QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02, QMI_IDL_TYPE16(0, 115), 19}, + {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), 78}, + {QMI_LOC_ADD_CIRCULAR_GEOFENCE_IND_V02, QMI_IDL_TYPE16(0, 117), 21}, + {QMI_LOC_DELETE_GEOFENCE_IND_V02, QMI_IDL_TYPE16(0, 119), 21}, + {QMI_LOC_QUERY_GEOFENCE_IND_V02, QMI_IDL_TYPE16(0, 121), 65}, + {QMI_LOC_EDIT_GEOFENCE_IND_V02, QMI_IDL_TYPE16(0, 123), 28}, + {QMI_LOC_GET_BEST_AVAILABLE_POSITION_IND_V02, QMI_IDL_TYPE16(0, 125), 391}, + {QMI_LOC_INJECT_MOTION_DATA_IND_V02, QMI_IDL_TYPE16(0, 127), 7}, + {QMI_LOC_GET_NI_GEOFENCE_ID_LIST_IND_V02, QMI_IDL_TYPE16(0, 129), 82}, + {QMI_LOC_INJECT_GSM_CELL_INFO_IND_V02, QMI_IDL_TYPE16(0, 131), 7}, + {QMI_LOC_INJECT_NETWORK_INITIATED_MESSAGE_IND_V02, QMI_IDL_TYPE16(0, 139), 7}, + {QMI_LOC_WWAN_OUT_OF_SERVICE_NOTIFICATION_IND_V02, QMI_IDL_TYPE16(0, 141), 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, 143), 7}, + {QMI_LOC_INJECT_WCDMA_CELL_INFO_IND_V02, QMI_IDL_TYPE16(0, 133), 7}, + {QMI_LOC_INJECT_TDSCDMA_CELL_INFO_IND_V02, QMI_IDL_TYPE16(0, 135), 7}, + {QMI_LOC_INJECT_SUBSCRIBER_ID_IND_V02, QMI_IDL_TYPE16(0, 137), 7} +}; + +/*Service Object*/ +struct qmi_idl_service_object loc_qmi_idl_service_object_v02 = { + 0x05, + 0x02, + 0x10, + 2248, + { sizeof(loc_service_command_messages_v02)/sizeof(qmi_idl_service_message_table_entry), + sizeof(loc_service_response_messages_v02)/sizeof(qmi_idl_service_message_table_entry), + sizeof(loc_service_indication_messages_v02)/sizeof(qmi_idl_service_message_table_entry) }, + { loc_service_command_messages_v02, loc_service_response_messages_v02, loc_service_indication_messages_v02}, + &loc_qmi_idl_type_table_object_v02, + 0x12, + 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/loc_api/loc_api_v02/location_service_v02.h b/loc_api/loc_api_v02/location_service_v02.h new file mode 100644 index 00000000..57f7c746 --- /dev/null +++ b/loc_api/loc_api_v02/location_service_v02.h @@ -0,0 +1,8783 @@ +/* Copyright (c) 2011-2012, 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_H +#define LOC_SERVICE_H +/** + @file location_service_v02.h + + @brief This is the public header file which defines the loc service Data structures. + + This header file defines the types and structures that were defined in + loc. It contains the constant values defined, enums, structures, + messages, and service message IDs (in that order) Structures that were + defined in the IDL as messages contain mandatory elements, optional + elements, a combination of mandatory and optional elements (mandatory + always come before optionals in the structure), or nothing (null message) + + An optional element in a message is preceded by a uint8_t value that must be + set to true if the element is going to be included. When decoding a received + message, the uint8_t values will be set to true or false by the decode + routine, and should be checked before accessing the values that they + correspond to. + + Variable sized arrays are defined as static sized arrays with an unsigned + integer (32 bit) preceding it that must be set to the number of elements + in the array that are valid. For Example: + + uint32_t test_opaque_len; + uint8_t test_opaque[16]; + + If only 4 elements are added to test_opaque[] then test_opaque_len must be + set to 4 before sending the message. When decoding, the _len value is set + by the decode routine and should be checked so that the correct number of + elements in the array will be accessed. + +*/ + +/*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====* + *THIS IS AN AUTO GENERATED FILE. DO NOT ALTER IN ANY WAY + *====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*/ + +/* This file was generated with Tool version 6.0 + It requires encode/decode library version 5 or later + It was generated on: Thu Dec 13 2012 (Spin ) + 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 +#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 0x12 +/** 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 0x0072; +/** + @} + */ + + +/** @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 + +/** 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 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 + +/** MAC address length in bytes. */ +#define QMI_LOC_WIFI_MAC_ADDR_LENGTH_V02 6 + +/** Maximum number of APs that the sender can report. */ +#define QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02 50 + +/** Maximum number of samples that can be injected in a TLV. */ +#define QMI_LOC_SENSOR_DATA_MAX_SAMPLES_V02 50 + +/** Maximum APN string length allowed. */ +#define QMI_LOC_MAX_APN_NAME_LENGTH_V02 100 + +/** Maximum APN profiles supported. */ +#define QMI_LOC_MAX_APN_PROFILES_V02 6 + +/** Maximum length of the SUPL certificate. */ +#define QMI_LOC_MAX_SUPL_CERT_LENGTH_V02 2000 + +/** 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 +/** + @} + */ + +/** @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 WiFi 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 + GPS 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 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 the UE enters + or leaves the perimeter of a 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. Location engine sends + this event out 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. Location engine sends + this event out to control the injection of motion data. */ +/** @addtogroup loc_qmi_messages + @{ + */ +/** Request Message; Used by the control point to register for events from the + location subsystem. */ +typedef struct { + + /* Mandatory */ + /* Event Registration Mask */ + qmiLocEventRegMaskT_v02 eventRegMask; + /**< Specifies the events that the control point is interested in receiving. + Refer to the definition of the following bitmasks: + - 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 WiFi 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 + GPS 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 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 the UE enters + or leaves the perimeter of a 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. Location engine sends + this event out 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. Location engine sends + this event out to control the injection of motion data. + + 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_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 + - 0x00000001 -- Request periodic fixes \n + - 0x00000002 -- Request a single fix + */ + + /* Optional */ + /* Horizontal Accuracy */ + uint8_t horizontalAccuracyLevel_valid; /**< Must be set to true if horizontalAccuracyLevel is being passed */ + qmiLocAccuracyLevelEnumT_v02 horizontalAccuracyLevel; + /**< Specifies the horizontal accuracy level required by the control point. + If not specified, accuracy defaults to LOW. + + Valid values: \begin{itemize1} + \item 0x00000001 -- LOW: Client requires low horizontal accuracy + \item 0x00000002 -- MED: Client requires medium horizontal accuracy + \item 0x00000003 -- HIGH: Client requires high horizontal accuracy + \vspace{-0.18in} + \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000001 -- ON: Client is interested in receiving intermediate + reports + \item 0x00000002 -- OFF: Client is not interested in receiving + intermediate reports + \vspace{-0.18in} + \end{itemize1} + */ + + /* 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 + */ + + /* 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.*/ +}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) /**< WiFi 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. */ +/** @addtogroup loc_qmi_enums + @{ + */ +typedef enum { + QMILOCSESSIONSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/ + eQMI_LOC_SESS_STATUS_SUCCESS_V02 = 0, /**< Session was successful. */ + eQMI_LOC_SESS_STATUS_IN_PROGRESS_V02 = 1, /**< Session still in progress. Further position reports will be + generated until either the fix criteria specified by the client + are met or the client response timeout occurs. */ + eQMI_LOC_SESS_STATUS_GENERAL_FAILURE_V02 = 2, /**< Session failed. */ + eQMI_LOC_SESS_STATUS_TIMEOUT_V02 = 3, /**< Fix request failed because the session timed out. */ + eQMI_LOC_SESS_STATUS_USER_END_V02 = 4, /**< Fix request failed because the session was ended by the user. */ + eQMI_LOC_SESS_STATUS_BAD_PARAMETER_V02 = 5, /**< Fix request failed due to bad parameters in the request. */ + eQMI_LOC_SESS_STATUS_PHONE_OFFLINE_V02 = 6, /**< Fix request failed because the phone is offline. */ + 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 (i.e., + associating network time with GPS time). */ + eQMI_LOC_TIME_SRC_EXTERNAL_INPUT_V02 = 3, /**< Time is set by an external injection. */ + eQMI_LOC_TIME_SRC_TOW_DECODE_V02 = 4, /**< Time is set after decoding over-the-air GPS navigation data + from one GPS satellite. */ + eQMI_LOC_TIME_SRC_TOW_CONFIRMED_V02 = 5, /**< Time is set after decoding over-the-air GPS navigation data + from multiple satellites. */ + eQMI_LOC_TIME_SRC_TOW_AND_WEEK_CONFIRMED_V02 = 6, /**< Both time of the week and the GPS week number are known. */ + eQMI_LOC_TIME_SRC_NAV_SOLUTION_V02 = 7, /**< Time is set by the position engine after the fix is obtained. */ + eQMI_LOC_TIME_SRC_SOLVE_FOR_TIME_V02 = 8, /**< Time is set by the position engine after performing SFT. + This is done when the clock time uncertainty is large. */ + eQMI_LOC_TIME_SRC_GLO_TOW_DECODE_V02 = 9, /**< Time is set after decoding GLO satellites */ + eQMI_LOC_TIME_SRC_TIME_TRANSFORM_V02 = 10, /**< Time is set after transforming the GPS to GLO time */ + eQMI_LOC_TIME_SRC_WCDMA_SLEEP_TIME_TAGGING_V02 = 11, /**< Time is set by the sleep time tag provided by the WCDMA network */ + eQMI_LOC_TIME_SRC_GSM_SLEEP_TIME_TAGGING_V02 = 12, /**< Time is set by the sleep time tag provided by the GSM network */ + 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 system clock (better known as slow clock). + GNSS time is maintained irrespective of the GNSS receiver state */ + 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: \begin{itemize1} + \item 0x00000000 -- SESS_STATUS_ SUCCESS + \item 0x00000001 -- SESS_STATUS_ IN_PROGRESS + \item 0x00000002 -- SESS_STATUS_ GENERAL_FAILURE + \item 0x00000003 -- SESS_STATUS_ TIMEOUT + \item 0x00000004 -- SESS_STATUS_ USER_END + \item 0x00000005 -- SESS_STATUS_ BAD_PARAMETER + \item 0x00000006 -- SESS_STATUS_ PHONE_OFFLINE + \item 0x00000007 -- SESS_STATUS_ ENGINE_LOCKED + \vspace{-0.18in} \end{itemize1} + */ + + /* 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.\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. \n + Valid values: \begin{itemize1} + \item 0x00000000 -- RELIABILITY_NOT_ SET + \item 0x00000001 -- RELIABILITY_ VERY_LOW + \item 0x00000002 -- RELIABILITY_LOW + \item 0x00000003 -- RELIABILITY_ MEDIUM + \item 0x00000004 -- RELIABILITY_HIGH + \vspace{-0.18in} \end{itemize1} + */ + + /* 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. \n + Valid values: \begin{itemize1} + \item 0x00000000 -- RELIABILITY_NOT_ SET + \item 0x00000001 -- RELIABILITY_ VERY_LOW + \item 0x00000002 -- RELIABILITY_LOW + \item 0x00000003 -- RELIABILITY_ MEDIUM + \item 0x00000004 -- RELIABILITY_HIGH + \vspace{-0.18in} \end{itemize1}*/ + + /* 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: \begin{itemize1} + \item 0x00000001 -- SATELLITE + \item 0x00000002 -- CELLID + \item 0x00000004 -- WIFI + \item 0x00000008 -- SENSORS + \item 0x00000010 -- REFERENCE_ LOCATION + \item 0x00000020 -- INJECTED_COARSE_ POSITION + \vspace{-0.18in} \end{itemize1} */ + + /* Optional */ + /* Dilution of Precision */ + uint8_t DOP_valid; /**< Must be set to true if DOP is being passed */ + qmiLocDOPStructT_v02 DOP; + /**< \n Dilution of precision associated with this position. */ + + /* Optional */ + /* UTC Timestamp */ + uint8_t timestampUtc_valid; /**< Must be set to true if timestampUtc is being passed */ + uint64_t timestampUtc; + /**< UTC timestamp. \n + - 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; + /**< \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 (i.e., + 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 system clock (better known as slow clock). + GNSS time is maintained irrespective of the GNSS receiver state */ + + /* Optional */ + /* Sensor Data Usage */ + uint8_t sensorDataUsage_valid; /**< Must be set to true if sensorDataUsage is being passed */ + qmiLocSensorUsageIndicatorStructT_v02 sensorDataUsage; + /**< \n Whether sensor data was used in computing the position in this + position report. */ + + /* Optional */ + /* Fix Count for This Session */ + uint8_t fixId_valid; /**< Must be set to true if fixId is being passed */ + uint32_t fixId; + /**< Fix count for the session. Starts with 0 and increments by one + for each successive position report for a particular session. */ + + /* 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: \begin{itemize1} + \item Range: \begin{itemize1} + \item For GPS: 1 to 32 + \item For SBAS: 33 to 64 + \item For GLONASS: 65 to 96 + \item For QZSS: 193 to 197 + \vspace{-0.18in} \end{itemize1} \end{itemize1} */ +}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. */ + eQMI_LOC_SV_SYSTEM_GLONASS_V02 = 5, /**< GLONASS 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: \begin{itemize1} + \item 0x00000001 -- eQMI_LOC_SV_ SYSTEM_GPS + \item 0x00000002 -- eQMI_LOC_SV_ SYSTEM_GALILEO + \item 0x00000003 -- eQMI_LOC_SV_ SYSTEM_SBAS + \item 0x00000004 -- eQMI_LOC_SV_ SYSTEM_COMPASS + \item 0x00000005 -- eQMI_LOC_SV_ SYSTEM_GLONASS + \vspace{-0.18in} \end{itemize1} */ + + 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 + \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, \newline 1 = healthy + \vspace{-0.18in} \end{itemize1}*/ + + qmiLocSvStatusEnumT_v02 svStatus; + /**< SV processing status. \n + Valid values:\n + - 0x00000001 -- SV_STATUS_IDLE \n + - 0x00000002 -- SV_STATUS_SEARCH \n + - 0x00000003 -- SV_STATUS_TRACK + */ + + qmiLocSvInfoMaskT_v02 svInfoMask; + /**< Whether almanac and ephemeris information is available. \n + Valid bitmasks: \n + - 0x01 -- SVINFO_HAS_EPHEMERIS \n + - 0x02 -- SVINFO_HAS_ALMANAC + */ + + float elevation; + /**< SV elevation angle.\n + - 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 Source */ + uint8_t altitudeAssumed; + /**< 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]; + /**< \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, and require a response. */ + 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 MSG. */ + eQMI_LOC_NI_VX_ASCII_V02 = 2, /**< Encoding is ASCII. */ + eQMI_LOC_NI_VX_IA5_V02 = 3, /**< Encoding is IA5. */ + eQMI_LOC_NI_VX_UNICODE_V02 = 4, /**< Encoding is UNICODE. */ + eQMI_LOC_NI_VX_SHIFT_JIS_V02 = 5, /**< Encoding is SHIFT JIS. */ + eQMI_LOC_NI_VX_KOREAN_V02 = 6, /**< Encoding is KOREAN. */ + eQMI_LOC_NI_VX_LATIN_HEBREW_V02 = 7, /**< Encoding is LATIN HEBREW. */ + eQMI_LOC_NI_VX_LATIN_V02 = 8, /**< Encoding is LATIN. */ + 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; + /**< 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: \begin{itemize1} + \item 0x00000001 -- NI_VX_MS_ ASSISTED_ONLY + \item 0x00000002 -- NI_VX_MS_BASED_ ONLY + \item 0x00000003 -- NI_VX_MS_ ASSISTED_PREFERRED_ MS_BASED_ALLOWED + \item 0x00000004 -- NI_VX_MS_ BASED_PREFERRED_ MS_ASSISTED_ALLOWED + \vspace{-0.18in} \end{itemize1} + */ + + qmiLocNiVxRequestorIdEncodingSchemeEnumT_v02 encodingScheme; + /**< VX encoding scheme. + + Valid values: \begin{itemize1} + \item 0x00000000 -- NI_VX_OCTET + \item 0x00000001 -- NI_VX_EXN_ PROTOCOL_MSG + \item 0x00000002 -- NI_VX_ASCII + \item 0x00000003 -- NI_VX_IA5 + \item 0x00000004 -- NI_VX_UNICODE + \item 0x00000005 -- NI_VX_SHIFT_JIS + \item 0x00000006 -- NI_VX_KOREAN + \item 0x00000007 -- NI_VX_LATIN_ HEBREW + \item 0x00000008 -- NI_VX_LATIN + \item 0x00000009 -- NI_VX_GSM + \vspace{-0.18in} \end{itemize1} + */ + + 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 logical name format. */ + eQMI_LOC_NI_SUPL_FORMAT_URL_V02 = 3, /**< SUPL URL format. */ + eQMI_LOC_NI_SUPL_FORMAT_SIP_URL_V02 = 4, /**< SUPL SIP URL format. */ + eQMI_LOC_NI_SUPL_FORMAT_MIN_V02 = 5, /**< SUPL MIN format. */ + eQMI_LOC_NI_SUPL_FORMAT_MDN_V02 = 6, /**< SUPL MDN format. */ + eQMI_LOC_NI_SUPL_FORMAT_IMSPUBLIC_IDENTITY_V02 = 7, /**< SUPL IMS public identity */ + 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: \begin{itemize1} + \item 0x00000000 -- FORMAT_LOGICAL_ NAME + \item 0x00000001 -- FORMAT_EMAIL_ ADDRESS + \item 0x00000002 -- FORMAT_MSISDN + \item 0x00000003 -- FORMAT_URL + \item 0x00000004 -- FORMAT_SIP_URL + \item 0x00000005 -- FORMAT_MIN + \item 0x00000006 -- FORMAT_MDN + \item 0x00000007 -- FORMAT_ IMSPUBLIC_IDENTITY + \item 0x7FFFFFFF -- FORMAT_OSS_ UNKNOWN + \vspace{-0.18in} \end{itemize1} + */ + + 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: \begin{itemize1} + \item 0x00000001 -- AGPS_SETASSISTED + \item 0x00000002 -- AGPS_SETBASED + \item 0x00000003 -- AGPS_ SETASSISTED_PREF + \item 0x00000004 -- AGPS_SETBASED_ PREF + \item 0x00000005 -- AUTONOMOUS_GPS + \item 0x00000006 -- AFLT + \item 0x00000007 -- ECID + \item 0x00000008 -- EOTD + \item 0x00000009 -- OTDOA + \item 0x0000000A -- NO_POSITION + \vspace{-0.18in} \end{itemize1} + */ + + qmiLocNiDataCodingSchemeEnumT_v02 dataCodingScheme; + /**< Data coding scheme applies to both the requestor ID and the client + name. + + Valid values: \begin{itemize1} + \item 0x0000000C -- NI_SS_GERMAN + \item 0x0000000D -- NI_SS_ENGLISH + \item 0x0000000E -- NI_SS_ITALIAN + \item 0x0000000F -- NI_SS_FRENCH + \item 0x00000010 -- NI_SS_SPANISH + \item 0x00000011 -- NI_SS_DUTCH + \item 0x00000012 -- NI_SS_SWEDISH + \item 0x00000013 -- NI_SS_DANISH + \item 0x00000014 -- NI_SS_PORTUGUESE + \item 0x00000015 -- NI_SS_FINNISH + \item 0x00000016 -- NI_SS_NORWEGIAN + \item 0x00000017 -- NI_SS_GREEK + \item 0x00000018 -- NI_SS_TURKISH + \item 0x00000019 -- NI_SS_HUNGARIAN + \item 0x0000001A -- NI_SS_POLISH + \item 0x0000001B -- NI_SS_LANGUAGE_ UNSPEC + \item 0x0000001C -- NI_SUPL_UTF8 + \item 0x0000001D -- NI_SUPL_UCS2 + \item 0x0000001E -- NI_SUPL_GSM_ DEFAULT + \vspace{-0.18in} \end{itemize1} + */ + + 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 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: \begin{itemize1} + \item 0x0000000C -- NI_SS_GERMAN + \item 0x0000000D -- NI_SS_ENGLISH + \item 0x0000000E -- NI_SS_ITALIAN + \item 0x0000000F -- NI_SS_FRENCH + \item 0x00000010 -- NI_SS_SPANISH + \item 0x00000011 -- NI_SS_DUTCH + \item 0x00000012 -- NI_SS_SWEDISH + \item 0x00000013 -- NI_SS_DANISH + \item 0x00000014 -- NI_SS_PORTUGUESE + \item 0x00000015 -- NI_SS_FINNISH + \item 0x00000016 -- NI_SS_NORWEGIAN + \item 0x00000017 -- NI_SS_GREEK + \item 0x00000018 -- NI_SS_TURKISH + \item 0x00000019 -- NI_SS_HUNGARIAN + \item 0x0000001A -- NI_SS_POLISH + \item 0x0000001B -- NI_SS_LANGUAGE_ UNSPEC + \item 0x0000001C -- NI_SUPL_UTF8 + \item 0x0000001D -- NI_SUPL_UCS2 + \item 0x0000001E -- NI_SUPL_GSM_ DEFAULT + \vspace{-0.18in} \end{itemize1} + + */ + + 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: \begin{itemize1} + \item 0x0000000C -- NI_SS_GERMAN + \item 0x0000000D -- NI_SS_ENGLISH + \item 0x0000000E -- NI_SS_ITALIAN + \item 0x0000000F -- NI_SS_FRENCH + \item 0x00000010 -- NI_SS_SPANISH + \item 0x00000011 -- NI_SS_DUTCH + \item 0x00000012 -- NI_SS_SWEDISH + \item 0x00000013 -- NI_SS_DANISH + \item 0x00000014 -- NI_SS_PORTUGUESE + \item 0x00000015 -- NI_SS_FINNISH + \item 0x00000016 -- NI_SS_NORWEGIAN + \item 0x00000017 -- NI_SS_GREEK + \item 0x00000018 -- NI_SS_TURKISH + \item 0x00000019 -- NI_SS_HUNGARIAN + \item 0x0000001A -- NI_SS_POLISH + \item 0x0000001B -- NI_SS_LANGUAGE_ UNSPEC + \item 0x0000001C -- NI_SUPL_UTF8 + \item 0x0000001D -- NI_SUPL_UCS2 + \item 0x0000001E -- NI_SUPL_GSM_ DEFAULT + \vspace{-0.18in} \end{itemize1} + */ + + 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: \begin{itemize1} + \item 0x00000001 -- CURRENT_ LOCATION + \item 0x00000002 -- CURRENT_OR_ LAST_KNOWN_LOCATION + \item 0x00000004 -- INITIAL_LOCATION + \vspace{-0.18in} \end{itemize1} + */ + + 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: \begin{itemize1} + \item 0x00000001 -- ONGOING_NI_ INCOMING_MO + \vspace{-0.18in} \end{itemize1} + */ +}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, /**< The SUPL INIT message indicates a request for a single shot + triggered session. */ + eQMI_LOC_SUPL_VER_2_EXT_TRIGGER_TYPE_PERIODIC_V02 = 0, /**< The SUPL INIT message indicates a request for a periodic + triggered session. */ + eQMI_LOC_SUPL_VER_2_EXT_TRIGGER_TYPE_AREA_EVENT_V02 = 1, /**< The 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 (see \hyperref[S4]{[S4]}). + + 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 (see \hyperref[S4]{[S4]}). + + Valid values: \begin{itemize1} + \item 0xFFFFFFFF -- TRIGGER_TYPE_ SINGLE_SHOT + \item 0x00000000 -- TRIGGER_TYPE_ PERIODIC + \item 0x00000001 -- TRIGGER_TYPE_ AREA_EVENT + \vspace{-0.18in} \end{itemize1} */ + + 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]; + /**< The ESLP URL + 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: \begin{itemize1} + \item 0x00000001 -- NO_NOTIFY_NO_ VERIFY + \item 0x00000002 -- NOTIFY_ONLY + \item 0x00000003 -- ALLOW_NO_RESP + \item 0x00000004 -- NOT_ALLOW_NO_ RESP + \item 0x00000005 -- PRIVACY_ OVERRIDE + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Network Initiated Vx Request */ + uint8_t NiVxInd_valid; /**< Must be set to true if NiVxInd is being passed */ + qmiLocNiVxNotifyVerifyStructT_v02 NiVxInd; + /**< \n Optional NI Vx request payload. */ + + /* Optional */ + /* Network Initiated SUPL Request */ + uint8_t NiSuplInd_valid; /**< Must be set to true if NiSuplInd is being passed */ + qmiLocNiSuplNotifyVerifyStructT_v02 NiSuplInd; + /**< \n Optional NI SUPL request payload. */ + + /* Optional */ + /* Network Initiated UMTS Control Plane Request */ + uint8_t NiUmtsCpInd_valid; /**< Must be set to true if NiUmtsCpInd is being passed */ + qmiLocNiUmtsCpNotifyVerifyStructT_v02 NiUmtsCpInd; + /**< \n Optional NI UMTS-CP request payload. */ + + /* Optional */ + /* Network Initiated Service Interaction Request */ + uint8_t NiVxServiceInteractionInd_valid; /**< Must be set to true if NiVxServiceInteractionInd is being passed */ + qmiLocNiVxServiceInteractionStructT_v02 NiVxServiceInteractionInd; + /**< \n Optional NI service interaction payload. */ + + /* Optional */ + /* Network Initiated SUPL Version 2 Extension */ + uint8_t NiSuplVer2ExtInd_valid; /**< Must be set to true if NiSuplVer2ExtInd is being passed */ + qmiLocNiSuplVer2ExtStructT_v02 NiSuplVer2ExtInd; + /**< \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; + /**< This specifies that the corresponding NI notification is an + emergency notification. Emergency notification + can be given even without an 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; + /**< \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; + /**< \n Maximum part and file size allowed to be injected in the engine. */ + + /* Optional */ + /* Server List */ + uint8_t serverList_valid; /**< Must be set to true if serverList is being passed */ + qmiLocPredictedOrbitsServerListStructT_v02 serverList; + /**< \n List of servers that can be used by the client to download + predicted orbits data. */ +}qmiLocEventInjectPredictedOrbitsReqIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Requests the control point to inject a position. */ +typedef struct { + + /* Mandatory */ + /* Latitude */ + double latitude; + /**< Latitude (specified in WGS84 datum). + \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 + - 0x00000001 -- ON \n + - 0x00000002 -- OFF + */ +}qmiLocEventEngineStateIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_enums + @{ + */ +typedef enum { + QMILOCFIXSESSIONSTATEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/ + eQMI_LOC_FIX_SESSION_STARTED_V02 = 1, /**< Location fix session has started. */ + 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 + - 0x00000001 -- STARTED \n + - 0x00000002 -- FINISHED + */ + + /* Optional */ + /* Session ID */ + uint8_t sessionId_valid; /**< Must be set to true if sessionId is being passed */ + uint8_t sessionId; + /**< ID of the session that was specified in the Start request. + This may not be specified for a fix session corresponding to + a network-initiated request. \n + - 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 WiFi request to the control point. */ +typedef struct { + + /* Mandatory */ + /* Request Type */ + qmiLocWifiRequestEnumT_v02 requestType; + /**< Request type as specified in qmiWifiRequestEnumT. + + Valid values: \begin{itemize1} + \item 0x00000000 -- START_PERIODIC_ HI_FREQ_FIXES + \item 0x00000001 -- START_PERIODIC_ KEEP_WARM + \item 0x00000002 -- STOP_PERIODIC_ FIXES + \vspace{-0.18in} \end{itemize1} + */ + + /* 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 */ +}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; + /**< 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; + /**< \n 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; + /**< \n 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; + /**< \n 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; + /**< \n Whether the GNSS location engine is ready to accept gyroscope + temperature 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; + /**< 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. */ + 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 + - 0x00000001 -- OPEN \n + - 0x00000002 -- CLOSE + */ + + /* Mandatory */ + /* WWAN Type */ + qmiLocWWANTypeEnumT_v02 wwanType; + /**< Identifies the WWAN type for this request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- WWAN_TYPE_ INTERNET + \item 0x00000001 -- WWAN_TYPE_ AGNSS + \vspace{-0.18in} \end{itemize1} + */ +}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: \begin{itemize1} + \item 0x00000001 -- NI_GEOFENCE_ ADDED + \item 0x00000002 -- NI_GEOFENCE_ DELETED + \item 0x00000003 -- NI_GEOFENCE_ EDITED + \vspace{-0.18in} \end{itemize1} + */ +}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: \begin{itemize1} + \item 0x00000001 -- GEOFENCE_GEN_ ALERT_GNSS_UNAVAILABLE + \item 0x00000002 -- GEOFENCE_GEN_ ALERT_GNSS_AVAILABLE + \item 0x00000003 -- GEOFENCE_GEN_ ALERT_OOS + \item 0x00000004 -- GEOFENCE_GEN_ ALERT_TIME_INVALID + \vspace{-0.18in} \end{itemize1} + */ +}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_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: \begin{itemize1} + \item 0x00000001 -- GEOFENCE_ BREACH_TYPE_ENTERING + \item 0x00000002 -- GEOFENCE_ BREACH_TYPE_LEAVING + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Geofence Position */ + uint8_t geofencePosition_valid; /**< Must be set to true if geofencePosition is being passed */ + qmiLocGeofencePositionStructT_v02 geofencePosition; + /**< \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. */ +}qmiLocEventGeofenceBreachIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Recommends how pedometer reports should be + sent to the location engine */ +typedef struct { + + /* Mandatory */ + /* Request Pedometer Data */ + uint8_t requestPedometerData; + /**< \n Whether 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; + /**< Whether location engine desires the step count to be reset. + \begin{itemize1} + \item 0x01 (TRUE) -- Pedometer step count should be reset. + \item 0x00 (FALSE) -- Pedometer step count should not 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 + then the location engine desires a pedometer report at every step event. + */ +}qmiLocEventPedometerControlIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Recommends how motion data reports should be + sent to the location engine */ +typedef struct { + + /* Mandatory */ + /* Request Motion Data */ + uint8_t requestMotionData; + /**< \n Whether 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_enums + @{ + */ +typedef enum { + QMILOCSTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/ + eQMI_LOC_SUCCESS_V02 = 0, /**< Request was completed successfully. */ + eQMI_LOC_GENERAL_FAILURE_V02 = 1, /**< Request failed because of a general failure. */ + eQMI_LOC_UNSUPPORTED_V02 = 2, /**< Request failed because it is not supported. */ + eQMI_LOC_INVALID_PARAMETER_V02 = 3, /**< Request failed because it contained invalid parameters. */ + eQMI_LOC_ENGINE_BUSY_V02 = 4, /**< Request failed because the engine is busy. */ + eQMI_LOC_PHONE_OFFLINE_V02 = 5, /**< Request failed because the phone is offline. */ + eQMI_LOC_TIMEOUT_V02 = 6, /**< Request failed because it timed out. */ + eQMI_LOC_CONFIG_NOT_SUPPORTED_V02 = 7, /**< Request failed because an undefined configuration was requested */ + eQMI_LOC_INSUFFICIENT_MEMORY_V02 = 8, /**< Request failed because the engine could not allocate sufficent + memory for the request. */ + QMILOCSTATUSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/ +}qmiLocStatusEnumT_v02; +/** + @} + */ + +/* + * qmiLocGetServiceRevisionReqMsgT is empty + * typedef struct { + * }qmiLocGetServiceRevisionReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Client can query the service revision using this message. */ +typedef struct { + + /* Mandatory */ + /* Get Revision Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get Revision request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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 */ +/** + @} + */ + +/* + * qmiLocGetFixCriteriaReqMsgT is empty + * typedef struct { + * }qmiLocGetFixCriteriaReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Gets the fix criteria from the location engine. */ +typedef struct { + + /* Mandatory */ + /* Get Fix Criteria Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get Fix Criteria request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000001 -- LOW: Client requires low horizontal accuracy + \item 0x00000002 -- MED: Client requires medium horizontal accuracy + \item 0x00000003 -- HIGH: Client requires high horizontal accuracy + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Enable/Disable Intermediate Fixes */ + uint8_t intermediateReportState_valid; /**< Must be set to true if intermediateReportState is being passed */ + qmiLocIntermediateReportStateEnumT_v02 intermediateReportState; + /**< Intermediate Report state (ON, OFF).\n + The client must explicitly set this field to OFF to stop receiving + intermediate position reports. Intermediate position reports are + generated at \n 1 Hz and are ON by default. If intermediate reports + are turned ON, the client receives position reports even if the + accuracy criteria is not met. The status in the position report is + set to IN_PROGRESS for intermediate reports. + + Valid values: \begin{itemize1} + \item 0x00000001 -- ON: Client is interested in receiving intermediate + reports + \item 0x00000002 -- OFF: Client is not interested in receiving + intermediate reports + \vspace{-0.18in} \end{itemize1} + */ + + /* 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; + /**< \n Application provider, name, and version.*/ +}qmiLocGetFixCriteriaIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_enums + @{ + */ +typedef enum { + QMILOCNIUSERRESPENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/ + eQMI_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT_V02 = 1, /**< User accepted notify verify request. */ + eQMI_LOC_NI_LCS_NOTIFY_VERIFY_DENY_V02 = 2, /**< User denied notify verify request. */ + eQMI_LOC_NI_LCS_NOTIFY_VERIFY_NORESP_V02 = 3, /**< User did not respond to 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: \begin{itemize1} + \item 0x00000001 -- NOTIFY_VERIFY_ ACCEPT + \item 0x00000002 -- NOTIFY_VERIFY_ DENY + \item 0x00000003 -- NOTIFY_VERIFY_ NORESP + \vspace{-0.18in} \end{itemize1} + */ + + /* Mandatory */ + /* Notification Type */ + qmiLocNiNotifyVerifyEnumT_v02 notificationType; + /**< Type of notification/verification performed. + + Valid values: \begin{itemize1} + \item 0x00000001 -- NO_NOTIFY_NO_ VERIF + \item 0x00000002 -- NOTIFY_ONLY + \item 0x00000003 -- ALLOW_NO_RESP + \item 0x00000004 -- NOT_ALLOW_NO_ RESP + \item 0x00000005 -- PRIVACY_ OVERRIDE + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Network Initiated Vx Request */ + uint8_t NiVxPayload_valid; /**< Must be set to true if NiVxPayload is being passed */ + qmiLocNiVxNotifyVerifyStructT_v02 NiVxPayload; + /**< \n Optional NI VX request payload. */ + + /* Optional */ + /* Network Initiated SUPL Request */ + uint8_t NiSuplPayload_valid; /**< Must be set to true if NiSuplPayload is being passed */ + qmiLocNiSuplNotifyVerifyStructT_v02 NiSuplPayload; + /**< \n Optional NI SUPL request payload. */ + + /* Optional */ + /* Network Initiated UMTS Control Plane Request */ + uint8_t NiUmtsCpPayload_valid; /**< Must be set to true if NiUmtsCpPayload is being passed */ + qmiLocNiUmtsCpNotifyVerifyStructT_v02 NiUmtsCpPayload; + /**< \n Optional NI UMTS-CP request payload. */ + + /* Optional */ + /* Network Initiated Service Interaction Request */ + uint8_t NiVxServiceInteractionPayload_valid; /**< Must be set to true if NiVxServiceInteractionPayload is being passed */ + qmiLocNiVxServiceInteractionStructT_v02 NiVxServiceInteractionPayload; + /**< \n Optional NI service interaction payload. */ + + /* Optional */ + /* Network Initiated SUPL Version 2 Extension */ + uint8_t NiSuplVer2ExtPayload_valid; /**< Must be set to true if NiSuplVer2ExtPayload is being passed */ + qmiLocNiSuplVer2ExtStructT_v02 NiSuplVer2ExtPayload; + /**< \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; + /**< 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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}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. + + Valid values: \begin{itemize1} + \item 0x00000000 -- PREDICTED_ ORBITS_XTRA + \vspace{-0.18in} \end{itemize1} + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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 */ +/** + @} + */ + +/* + * qmiLocGetPredictedOrbitsDataSourceReqMsgT is empty + * typedef struct { + * }qmiLocGetPredictedOrbitsDataSourceReqMsgT_v02; + */ + +/** @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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Allowed Sizes */ + uint8_t allowedSizes_valid; /**< Must be set to true if allowedSizes is being passed */ + qmiLocPredictedOrbitsAllowedSizesStructT_v02 allowedSizes; + /**< \n Maximum part and file size allowed to be injected in the engine. */ + + /* Optional */ + /* Server List */ + uint8_t serverList_valid; /**< Must be set to true if serverList is being passed */ + qmiLocPredictedOrbitsServerListStructT_v02 serverList; + /**< \n List of servers that can be used by the client to download + predicted orbits data. */ +}qmiLocGetPredictedOrbitsDataSourceIndMsgT_v02; /* Message */ +/** + @} + */ + +/* + * qmiLocGetPredictedOrbitsDataValidityReqMsgT is empty + * typedef struct { + * }qmiLocGetPredictedOrbitsDataValidityReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_aggregates + @{ + */ +typedef struct { + + uint64_t startTimeInUTC; + /**< Predicted orbits data is valid starting from this time. \n + - 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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocInjectUtcTimeIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_enums + @{ + */ +typedef enum { + QMILOCALTSRCENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/ + eQMI_LOC_ALT_SRC_UNKNOWN_V02 = 0, /**< Source is unknown. */ + eQMI_LOC_ALT_SRC_GPS_V02 = 1, /**< GPS is the source. */ + eQMI_LOC_ALT_SRC_CELL_ID_V02 = 2, /**< Cell ID provided the source. */ + eQMI_LOC_ALT_SRC_ENHANCED_CELL_ID_V02 = 3, /**< Source is enhanced cell ID. */ + eQMI_LOC_ALT_SRC_WIFI_V02 = 4, /**< WiFi is the source. */ + eQMI_LOC_ALT_SRC_TERRESTRIAL_V02 = 5, /**< Terrestrial source. */ + eQMI_LOC_ALT_SRC_TERRESTRIAL_HYBRID_V02 = 6, /**< Hybrid terrestrial source. */ + eQMI_LOC_ALT_SRC_ALTITUDE_DATABASE_V02 = 7, /**< Altitude database is the source. */ + eQMI_LOC_ALT_SRC_BAROMETRIC_ALTIMETER_V02 = 8, /**< Barometric altimeter is the source. */ + 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: \begin{itemize1} + \item 0x00000000 -- ALT_SRC_ UNKNOWN + \item 0x00000001 -- ALT_SRC_GPS + \item 0x00000002 -- ALT_SRC_CELL_ID + \item 0x00000003 -- ALT_SRC_ ENHANCED_CELL_ID + \item 0x00000004 -- ALT_SRC_WIFI + \item 0x00000005 -- ALT_SRC_ TERRESTRIAL + \item 0x00000006 -- ALT_SRC_ TERRESTRIAL_HYBRID + \item 0x00000007 -- ALT_SRC_ ALTITUDE_DATABASE + \item 0x00000008 -- ALT_SRC_ BAROMETRIC_ALTIMETER + \item 0x00000009 -- ALT_SRC_OTHER + \vspace{-0.18in} \end{itemize1} + */ + + qmiLocAltSrcLinkageEnumT_v02 linkage; + /**< Specifies the dependency between the horizontal and + altitude position components. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SRC_LINKAGE_ NOT_SPECIFIED + \item 0x00000001 -- SRC_LINKAGE_ FULLY_INTERDEPENDENT + \item 0x00000002 -- SRC_LINKAGE_ DEPENDS_ON_LAT_LONG + \item 0x00000003 -- SRC_LINKAGE_ FULLY_INDEPENDENT + \vspace{-0.18in} \end{itemize1} + */ + + qmiLocAltSrcUncertaintyCoverageEnumT_v02 coverage; + /**< Specifies the region of uncertainty. + + Valid values: \begin{itemize1} + \item 0x00000000 -- UNCERTAINTY_ NOT_SPECIFIED + \item 0x00000001 -- UNCERTAINTY_ POINT: Altitude uncertainty is valid + at the injected horizontal position coordinates + only. + \item 0x00000002 -- UNCERTAINTY_ FULL: Altitude uncertainty applies to + the position of the device regardless of + horizontal position (within the horizontal + uncertainty region, if provided). + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocAltitudeSrcInfoStructT_v02; /* Type */ +/** + @} + */ + +/** @addtogroup loc_qmi_enums + @{ + */ +typedef enum { + QMILOCPOSITIONSRCENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/ + eQMI_LOC_POSITION_SRC_GNSS_V02 = 0, /**< Position source is GNSS. */ + eQMI_LOC_POSITION_SRC_CELLID_V02 = 1, /**< Position source is Cell ID. */ + eQMI_LOC_POSITION_SRC_ENH_CELLID_V02 = 2, /**< Position source is Enhanced Cell ID. */ + eQMI_LOC_POSITION_SRC_WIFI_V02 = 3, /**< Position source is WiFi. */ + eQMI_LOC_POSITION_SRC_TERRESTRIAL_V02 = 4, /**< Position source is Terrestrial. */ + eQMI_LOC_POSITION_SRC_GNSS_TERRESTRIAL_HYBRID_V02 = 5, /**< Position source is GNSS Terrestrial Hybrid. */ + 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 (\hyperref[S4]{[S4]}). + \begin{itemize1} + \item Units: Percent (0 to 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 horizontal uncertainty. + If not specified, the default value will be 50. */ + + /* Optional */ + /* Horizontal Reliability */ + uint8_t horReliability_valid; /**< Must be set to true if horReliability is being passed */ + qmiLocReliabilityEnumT_v02 horReliability; + /**< Specifies the reliability of the horizontal position. + + Valid values: \begin{itemize1} + \item 0x00000000 -- eQMI_LOC_ RELIABILITY_NOT_SET + \item 0x00000001 -- eQMI_LOC_ RELIABILITY_VERY_LOW + \item 0x00000002 -- eQMI_LOC_ RELIABILITY_LOW + \item 0x00000003 -- eQMI_LOC_ RELIABILITY_MEDIUM + \item 0x00000004 -- eQMI_LOC_ RELIABILITY_HIGH + \vspace{-0.18in} \end{itemize1} + */ + + /* 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 (\hyperref[S4]{[S4]}). + \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: \begin{itemize1} + \item 0x00000000 -- eQMI_LOC_ RELIABILITY_NOT_SET + \item 0x00000001 -- eQMI_LOC_ RELIABILITY_VERY_LOW + \item 0x00000002 -- eQMI_LOC_ RELIABILITY_LOW + \item 0x00000003 -- eQMI_LOC_ RELIABILITY_MEDIUM + \item 0x00000004 -- eQMI_LOC_ RELIABILITY_HIGH + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Altitude Source Info */ + uint8_t altSourceInfo_valid; /**< Must be set to true if altSourceInfo is being passed */ + qmiLocAltitudeSrcInfoStructT_v02 altSourceInfo; + /**< \n Specifies information regarding the altitude source. */ + + /* Optional */ + /* UTC Timestamp */ + uint8_t timestampUtc_valid; /**< Must be set to true if timestampUtc is being passed */ + uint64_t timestampUtc; + /**< UTC timestamp. \n + - 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: \begin{itemize1} + \item 0x00000000 -- eQMI_LOC_ POSITION_SRC_GNSS + \item 0x00000001 -- eQMI_LOC_ POSITION_SRC_CELLID + \item 0x00000002 -- eQMI_LOC_ POSITION_SRC_ENH_CELLID + \item 0x00000003 -- eQMI_LOC_ POSITION_SRC_WIFI + \item 0x00000004 -- eQMI_LOC_ POSITION_SRC_TERRESTRIAL + \item 0x00000005 -- eQMI_LOC_ POSITION_SRC_GNSS_ TERRESTRIAL_HYBRID + \item 0x00000006 -- eQMI_LOC_ POSITION_SRC_OTHER + \end{itemize1} \vspace{0.05in} + + 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. + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}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 + - 0x00000001 -- LOCK_NONE \n + - 0x00000002 -- LOCK_MI \n + - 0x00000003 -- LOCK_MT \n + - 0x00000004 -- LOCK_ALL + + */ +}qmiLocSetEngineLockReqMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Sets the location engine lock. */ +typedef struct { + + /* Mandatory */ + /* Set Engine Lock Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Set Engine Lock request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocSetEngineLockIndMsgT_v02; /* Message */ +/** + @} + */ + +/* + * qmiLocGetEngineLockReqMsgT is empty + * typedef struct { + * }qmiLocGetEngineLockReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Gets the location engine lock. */ +typedef struct { + + /* Mandatory */ + /* Get Engine Lock Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get Engine Lock request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Lock Type */ + uint8_t lockType_valid; /**< Must be set to true if lockType is being passed */ + qmiLocLockEnumT_v02 lockType; + /**< Type of lock. + + Valid values: \n + - 0x00000001 -- LOCK_NONE \n + - 0x00000002 -- LOCK_MI \n + - 0x00000003 -- LOCK_MT \n + - 0x00000004 -- LOCK_ALL + */ +}qmiLocGetEngineLockIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Request Message; Sets the SBAS configuration. */ +typedef struct { + + /* Mandatory */ + /* SBAS Config */ + uint8_t sbasConfig; + /**< Whether SBAS configuration is enabled. + \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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocSetSbasConfigIndMsgT_v02; /* Message */ +/** + @} + */ + +/* + * qmiLocGetSbasConfigReqMsgT is empty + * typedef struct { + * }qmiLocGetSbasConfigReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Gets the SBAS configuration from the location engine. */ +typedef struct { + + /* Mandatory */ + /* Get SBAS Config Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get SBAS Configuration request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* SBAS Config */ + uint8_t sbasConfig_valid; /**< Must be set to true if sbasConfig is being passed */ + uint8_t sbasConfig; + /**< Whether SBAS configuration is enabled. + \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. */ +/** @addtogroup loc_qmi_messages + @{ + */ +/** Request Message; Sets the NMEA types. */ +typedef struct { + + /* Mandatory */ + /* NMEA Sentence Types */ + qmiLocNmeaSentenceMaskT_v02 nmeaSentenceType; + /**< Bitmasks of NMEA types to enable. + + Valid bitmasks: \n + - 0x00000001 -- NMEA_MASK_GGA \n + - 0x00000002 -- NMEA_MASK_RMC \n + - 0x00000004 -- NMEA_MASK_GSV \n + - 0x00000008 -- NMEA_MASK_GSA \n + - 0x00000010 -- NMEA_MASK_VTG \n + - 0x00000020 -- NMEA_MASK_PQXFI \n + - 0x00000040 -- NMEA_MASK_PSTIS + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocSetNmeaTypesIndMsgT_v02; /* Message */ +/** + @} + */ + +/* + * qmiLocGetNmeaTypesReqMsgT is empty + * typedef struct { + * }qmiLocGetNmeaTypesReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Gets the NMEA types from the location engine. */ +typedef struct { + + /* Mandatory */ + /* Get NMEA Types Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get NMEA Types request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* NMEA Sentence Types */ + uint8_t nmeaSentenceType_valid; /**< Must be set to true if nmeaSentenceType is being passed */ + qmiLocNmeaSentenceMaskT_v02 nmeaSentenceType; + /**< NMEA types to enable. + + Valid bitmasks: \n + - 0x0000ffff -- NMEA_MASK_ALL \n + - 0x00000001 -- NMEA_MASK_GGA \n + - 0x00000002 -- NMEA_MASK_RMC \n + - 0x00000004 -- NMEA_MASK_GSV \n + - 0x00000008 -- NMEA_MASK_GSA \n + - 0x00000010 -- NMEA_MASK_VTG \n + - 0x00000020 -- NMEA_MASK_PQXFI \n + - 0x00000040 -- NMEA_MASK_PSTIS + */ +}qmiLocGetNmeaTypesIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Request Message; Enables/disables Low Power Mode (LPM) configuration. */ +typedef struct { + + /* Mandatory */ + /* Enable Low Power Mode */ + uint8_t lowPowerMode; + /**< Whether to enable Low Power mode:\n + - 0x01 (TRUE) -- Enable LPM \n + - 0x00 (FALSE) -- Disable LPM */ +}qmiLocSetLowPowerModeReqMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Enables/disables Low Power Mode (LPM) configuration. */ +typedef struct { + + /* Mandatory */ + /* Set LPM Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Set Low Power Mode request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocSetLowPowerModeIndMsgT_v02; /* Message */ +/** + @} + */ + +/* + * qmiLocGetLowPowerModeReqMsgT is empty + * typedef struct { + * }qmiLocGetLowPowerModeReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Gets the LPM status from the location engine. */ +typedef struct { + + /* Mandatory */ + /* Get LPM Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get LPM request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Enable/Disable LPM */ + uint8_t lowPowerMode_valid; /**< Must be set to true if lowPowerMode is being passed */ + uint8_t lowPowerMode; + /**< Whether to enable Low Power mode:\n + - 0x01 (TRUE) -- Enable LPM \n + - 0x00 (FALSE) -- Disable LPM */ +}qmiLocGetLowPowerModeIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_enums + @{ + */ +typedef enum { + QMILOCSERVERTYPEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/ + eQMI_LOC_SERVER_TYPE_CDMA_PDE_V02 = 1, /**< Server type is CDMA PDE. */ + eQMI_LOC_SERVER_TYPE_CDMA_MPC_V02 = 2, /**< Server type is CDMA MPC. */ + eQMI_LOC_SERVER_TYPE_UMTS_SLP_V02 = 3, /**< Server type is UMTS SLP. */ + 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 + - 0x00000001 -- CDMA_PDE \n + - 0x00000002 -- CDMA_MPC \n + - 0x00000003 -- UMTS_SLP \n + - 0x00000004 -- CUSTOM_PDE + */ + + /* Optional */ + /* IPV4 Address */ + uint8_t ipv4Addr_valid; /**< Must be set to true if ipv4Addr is being passed */ + qmiLocIpV4AddrStructType_v02 ipv4Addr; + /**< \n IPV4 address and port. */ + + /* Optional */ + /* IPV6 Address */ + uint8_t ipv6Addr_valid; /**< Must be set to true if ipv6Addr is being passed */ + qmiLocIpV6AddrStructType_v02 ipv6Addr; + /**< \n IPV6 address and port. */ + + /* Optional */ + /* Uniform Resource Locator */ + uint8_t urlAddr_valid; /**< Must be set to true if urlAddr is being passed */ + char urlAddr[QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02 + 1]; + /**< URL address. + \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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocSetServerIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Request Message; Gets the location server from the location engine. */ +typedef struct { + + /* Mandatory */ + /* Server Type */ + qmiLocServerTypeEnumT_v02 serverType; + /**< Type of server, as defined in qmiLocServerTypeEnumT. + + Valid values: \n + - 0x00000001 -- CDMA_PDE \n + - 0x00000002 -- CDMA_MPC \n + - 0x00000003 -- UMTS_SLP \n + - 0x00000004 -- CUSTOM_PDE + */ + + /* Optional */ + /* Server Address Type */ + uint8_t serverAddrTypeMask_valid; /**< Must be set to true if serverAddrTypeMask is being passed */ + qmiLocServerAddrTypeMaskT_v02 serverAddrTypeMask; + /**< Type of address the client wants. If unspecified, the + indication will contain all the types of addresses + it has for the specified server type. + + Valid bitmasks: \n + - 0x01 -- IPV4 \n + - 0x02 -- IPV6 \n + - 0x04 -- URL + */ +}qmiLocGetServerReqMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Gets the location server from the location engine. */ +typedef struct { + + /* Mandatory */ + /* Get Server Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get Server request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* Mandatory */ + /* Server Type */ + qmiLocServerTypeEnumT_v02 serverType; + /**< Type of server, as defined in qmiLocServerTypeEnumT. + + Valid values: \n + - 0x00000001 -- CDMA_PDE \n + - 0x00000002 -- CDMA_MPC \n + - 0x00000003 -- UMTS_SLP \n + - 0x00000004 -- CUSTOM_PDE + */ + + /* Optional */ + /* IPV4 Address */ + uint8_t ipv4Addr_valid; /**< Must be set to true if ipv4Addr is being passed */ + qmiLocIpV4AddrStructType_v02 ipv4Addr; + /**< \n IPV4 address and port. */ + + /* Optional */ + /* IPV6 Address */ + uint8_t ipv6Addr_valid; /**< Must be set to true if ipv6Addr is being passed */ + qmiLocIpV6AddrStructType_v02 ipv6Addr; + /**< \n IPV6 address and port. */ + + /* Optional */ + /* Uniform Resource Locator */ + uint8_t urlAddr_valid; /**< Must be set to true if urlAddr is being passed */ + char urlAddr[QMI_LOC_MAX_SERVER_ADDR_LENGTH_V02 + 1]; + /**< URL. + \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 */ +typedef uint32_t qmiLocDeleteCelldbDataMaskT_v02; +#define QMI_LOC_MASK_DELETE_CELLDB_POS_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000001) /**< Mask to delete cell database position */ +#define QMI_LOC_MASK_DELETE_CELLDB_LATEST_GPS_POS_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000002) /**< Mask to delete cell database latest GPS position */ +#define QMI_LOC_MASK_DELETE_CELLDB_OTA_POS_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000004) /**< Mask to delete cell database OTA position */ +#define QMI_LOC_MASK_DELETE_CELLDB_EXT_REF_POS_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000008) /**< Mask to delete cell database external reference position */ +#define QMI_LOC_MASK_DELETE_CELLDB_TIMETAG_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000010) /**< Mask to delete cell database time tag */ +#define QMI_LOC_MASK_DELETE_CELLDB_CELLID_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000020) /**< Mask to delete cell database cell ID */ +#define QMI_LOC_MASK_DELETE_CELLDB_CACHED_CELLID_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000040) /**< Mask to delete cell database cached cell ID */ +#define QMI_LOC_MASK_DELETE_CELLDB_LAST_SRV_CELL_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000080) /**< Mask to delete cell database last service cell */ +#define QMI_LOC_MASK_DELETE_CELLDB_CUR_SRV_CELL_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000100) /**< Mask to delete cell database current service cell */ +#define QMI_LOC_MASK_DELETE_CELLDB_NEIGHBOR_INFO_V02 ((qmiLocDeleteCelldbDataMaskT_v02)0x00000200) /**< Mask to delete cell database neighbor information */ +typedef uint32_t qmiLocDeleteClockInfoMaskT_v02; +#define QMI_LOC_MASK_DELETE_CLOCK_INFO_TIME_EST_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000001) /**< Mask to delete time estimate from clock information */ +#define QMI_LOC_MASK_DELETE_CLOCK_INFO_FREQ_EST_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000002) /**< Mask to delete frequency estimate from clock information */ +#define QMI_LOC_MASK_DELETE_CLOCK_INFO_WEEK_NUMBER_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000004) /**< Mask to delete week number from clock information */ +#define QMI_LOC_MASK_DELETE_CLOCK_INFO_RTC_TIME_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000008) /**< Mask to delete RTC time from clock information */ +#define QMI_LOC_MASK_DELETE_CLOCK_INFO_TIME_TRANSFER_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000010) /**< Mask to delete time transfer from clock information */ +#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GPSTIME_EST_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000020) /**< Mask to delete GPS time estimate from clock information */ +#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GLOTIME_EST_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000040) /**< Mask to delete GLONASS time estimate from clock information */ +#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GLODAY_NUMBER_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000080) /**< Mask to delete GLONASS day number from clock information */ +#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GLO4YEAR_NUMBER_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000100) /**< Mask to delete GLONASS four year number from clock information */ +#define QMI_LOC_MASK_DELETE_CLOCK_INFO_GLO_RF_GRP_DELAY_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000200) /**< Mask to delete GLONASS RF GRP delay from clock information */ +#define QMI_LOC_MASK_DELETE_CLOCK_INFO_DISABLE_TT_V02 ((qmiLocDeleteClockInfoMaskT_v02)0x00000400) /**< Mask to delete disable TT from clock information */ +typedef uint8_t qmiLocDeleteSvInfoMaskT_v02; +#define QMI_LOC_MASK_DELETE_EPHEMERIS_V02 ((qmiLocDeleteSvInfoMaskT_v02)0x01) /**< Delete ephemeris for the satellite */ +#define QMI_LOC_MASK_DELETE_ALMANAC_V02 ((qmiLocDeleteSvInfoMaskT_v02)0x02) /**< Delete almanac for the satellite */ +/** @addtogroup loc_qmi_aggregates + @{ + */ +typedef struct { + + uint16_t gnssSvId; + /**< SV ID of the satellite whose data is to be deleted. + \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: \begin{itemize1} + \item 0x00000001 -- eQMI_LOC_SV_ SYSTEM_GPS + \item 0x00000002 -- eQMI_LOC_SV_ SYSTEM_GALILEO + \item 0x00000003 -- eQMI_LOC_SV_ SYSTEM_SBAS + \item 0x00000004 -- eQMI_LOC_SV_ SYSTEM_COMPASS + \item 0x00000005 -- eQMI_LOC_SV_ SYSTEM_GLONASS + \vspace{-0.18in} \end{itemize1} + */ + + qmiLocDeleteSvInfoMaskT_v02 deleteSvInfoMask; + /**< Indicates if the ephemeris or almanac for a satellite + is to be deleted. \n + Valid values: \n + - 0x01 -- DELETE_EPHEMERIS \n + - 0x02 -- DELETE_ALMANAC + */ +}qmiLocDeleteSvInfoStructT_v02; /* Type */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Request Message; This command is used to delete the location engine + assistance data */ +typedef struct { + + /* Mandatory */ + /* Delete All */ + uint8_t deleteAllFlag; + /**< Whether all assistance data is to be deleted. + + Valid values: \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]; + /**< \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: \begin{itemize1} + \item 0x00000001 -- DELETE_GPS_SVDIR + \item 0x00000002 -- DELETE_GPS_ SVSTEER + \item 0x00000004 -- DELETE_GPS_TIME + \item 0x00000008 -- DELETE_GPS_ALM_ CORR + \item 0x00000010 -- DELETE_GLO_ SVDIR + \item 0x00000020 -- DELETE_GLO_ SVSTEER + \item 0x00000040 -- DELETE_GLO_TIME + \item 0x00000080 -- DELETE_GLO_ALM_ CORR + \item 0x00000100 -- DELETE_SBAS_ SVDIR + \item 0x00000200 -- DELETE_SBAS_ SVSTEER + \item 0x00000400 -- DELETE_POSITION + \item 0x00000800 -- DELETE_TIME + \item 0x00001000 -- DELETE_IONO + \item 0x00002000 -- DELETE_UTC + \item 0x00004000 -- DELETE_HEALTH + \item 0x00008000 -- DELETE_SADATA + \item 0x00010000 -- DELETE_RTI + \item 0x00020000 -- DELETE_SV_NO_ EXIST + \item 0x00040000 -- DELETE_FREQ_ BIAS_EST + \vspace{-0.18in} \end{itemize1} + */ + + /* 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 values: \begin{itemize1} + \item 0x00000001 -- DELETE_CLOCK_ INFO_TIME_EST + \item 0x00000002 -- DELETE_CLOCK_ INFO_FREQ_EST + \item 0x00000004 -- DELETE_CLOCK_ INFO_WEEK_NUMBER + \item 0x00000008 -- DELETE_CLOCK_ INFO_RTC_TIME + \item 0x00000010 -- DELETE_CLOCK_ INFO_TIME_TRANSFER + \item 0x00000020 -- DELETE_CLOCK_ INFO_GPSTIME_EST + \item 0x00000040 -- DELETE_CLOCK_ INFO_GLOTIME_EST + \item 0x00000080 -- DELETE_CLOCK_ INFO_GLODAY_NUMBER + \item 0x00000100 -- DELETE_CLOCK_ INFO_GLO4YEAR_NUMBER + \item 0x00000200 -- DELETE_CLOCK_ INFO_GLO_RF_GRP_DELAY + \item 0x00000400 -- DELETE_CLOCK_ INFO_DISABLE_TT + \vspace{-0.18in} \end{itemize1} + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocDeleteAssistDataIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Request Message; Enables/disables XTRA-T session control. */ +typedef struct { + + /* Mandatory */ + /* Enable XTRA-T */ + uint8_t xtraTSessionControl; + /**< Whether to enable XTRA-T:\n + - 0x01 (TRUE) -- Enable XTRA-T \n + - 0x00 (FALSE) -- Disable XTRA-T */ +}qmiLocSetXtraTSessionControlReqMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Enables/disables XTRA-T session control. */ +typedef struct { + + /* Mandatory */ + /* Set XTRA-T Session Control Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Set XTRA-T Session Control request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocSetXtraTSessionControlIndMsgT_v02; /* Message */ +/** + @} + */ + +/* + * qmiLocGetXtraTSessionControlReqMsgT is empty + * typedef struct { + * }qmiLocGetXtraTSessionControlReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Gets the XTRA-T session control value from the location + engine. */ +typedef struct { + + /* Mandatory */ + /* Get XTRA-T Session Control Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get XTRA-T Session Control request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Enable/Disable XTRA-T */ + uint8_t xtraTSessionControl_valid; /**< Must be set to true if xtraTSessionControl is being passed */ + uint8_t xtraTSessionControl; + /**< Whether to enable XTRA-T:\n + - 0x01 (TRUE) -- Enable XTRA-T \n + - 0x00 (FALSE) -- Disable XTRA-T */ +}qmiLocGetXtraTSessionControlIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_aggregates + @{ + */ +typedef struct { + + uint32_t wifiPositionTime; + /**< Common counter (typically, the number of milliseconds since bootup). + This field is only to be provided if the modem and host processors are + synchronized. */ +}qmiLocWifiFixTimeStructT_v02; /* Type */ +/** + @} + */ + +/** @addtogroup loc_qmi_enums + @{ + */ +typedef enum { + QMILOCWIFIFIXERRORCODEENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/ + eQMI_LOC_WIFI_FIX_ERROR_SUCCESS_V02 = 0, /**< WiFi fix is successful. */ + eQMI_LOC_WIFI_FIX_ERROR_WIFI_NOT_AVAILABLE_V02 = 1, /**< WiFi fix failed because WiFi is not available on the device. */ + eQMI_LOC_WIFI_FIX_ERROR_NO_AP_FOUND_V02 = 2, /**< WiFi fix failed because no access points were found. */ + eQMI_LOC_WIFI_FIX_ERROR_UNAUTHORIZED_V02 = 3, /**< WiFi fix failed because the server denied access due to bad authorization + code. */ + eQMI_LOC_WIFI_FIX_ERROR_SERVER_UNAVAILABLE_V02 = 4, /**< WiFi fix failed because the WiFi server was unavailable. */ + eQMI_LOC_WIFI_FIX_ERROR_LOCATION_CANNOT_BE_DETERMINED_V02 = 5, /**< WiFi fix failed even though APs were found and the server could be reached. + This may be because the APs found are not in the database. */ + eQMI_LOC_WIFI_FIX_ERROR_UNKNOWN_V02 = 6, /**< WiFi 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; + /**< WiFi position latitude. \n + - Type: Floating point \n + - Units: Degrees */ + + double lon; + /**< WiFi position longitude. \n + - Type: Floating point \n + - Units: Degrees */ + + uint16_t hepe; + /**< WiFi position HEPE.\n + - Units: Meters */ + + uint8_t numApsUsed; + /**< Number of Access Points (AP) used to generate a fix. */ + + qmiLocWifiFixErrorCodeEnumT_v02 fixErrorCode; + /**< WiFi position error code; set to 0 if the fix succeeds. This position + is only used by a module if the value is 0. If there was a failure, + the error code provided by the WiFi positioning system can be provided + here. + + Valid values: \begin{itemize1} + \item 0x00000000 -- ERROR_SUCCESS + \item 0x00000001 -- ERROR_WIFI_NOT_ AVAILABLE + \item 0x00000002 -- ERROR_NO_AP_ FOUND + \item 0x00000003 -- ERROR_ UNAUTHORIZED + \item 0x00000004 -- ERROR_SERVER_ UNAVAILABLE + \item 0x00000005 -- ERROR_LOCATION_ CANNOT_BE_DETERMINED + \item 0x00000006 -- ERROR_UNKNOWN + \vspace{-0.18in} \end{itemize1} + */ +}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; + /**< WiFi 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_messages + @{ + */ +/** Request Message; Injects the WiFi position. */ +typedef struct { + + /* Optional */ + /* WiFi Fix Time */ + uint8_t wifiFixTime_valid; /**< Must be set to true if wifiFixTime is being passed */ + qmiLocWifiFixTimeStructT_v02 wifiFixTime; + /**< \n Time of WiFi position fix. */ + + /* Optional */ + /* WiFi Position */ + uint8_t wifiFixPosition_valid; /**< Must be set to true if wifiFixPosition is being passed */ + qmiLocWifiFixPosStructT_v02 wifiFixPosition; + /**< \n WiFi position fix. */ + + /* Optional */ + /* WiFi Access Point Information */ + uint8_t apInfo_valid; /**< Must be set to true if apInfo is being passed */ + uint32_t apInfo_len; /**< Must be set to # of elements in apInfo */ + qmiLocWifiApInfoStructT_v02 apInfo[QMI_LOC_WIFI_MAX_REPORTED_APS_PER_MSG_V02]; + /**< \n AP scan list. */ + + /* Optional */ + /* Horizontal Reliability */ + uint8_t horizontalReliability_valid; /**< Must be set to true if horizontalReliability is being passed */ + qmiLocReliabilityEnumT_v02 horizontalReliability; + /**< Specifies the reliability of the horizontal position. + + Valid values: \begin{itemize1} + \item 0x00000000 -- eQMI_LOC_ RELIABILITY_NOT_SET + \item 0x00000001 -- eQMI_LOC_ RELIABILITY_VERY_LOW + \item 0x00000002 -- eQMI_LOC_ RELIABILITY_LOW + \item 0x00000003 -- eQMI_LOC_ RELIABILITY_MEDIUM + \item 0x00000004 -- eQMI_LOC_ RELIABILITY_HIGH + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocInjectWifiPositionReqMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Injects the WiFi position. */ +typedef struct { + + /* Mandatory */ + /* Inject WiFi Position Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Inject WiFi Position request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocInjectWifiPositionIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_enums + @{ + */ +typedef enum { + QMILOCWIFISTATUSENUMT_MIN_ENUM_VAL_V02 = -2147483647, /**< To force a 32 bit signed enum. Do not change or use*/ + eQMI_LOC_WIFI_STATUS_AVAILABLE_V02 = 1, /**< WiFi is available. */ + eQMI_LOC_WIFI_STATUS_UNAVAILABLE_V02 = 2, /**< WiFi 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 WiFi status. */ +typedef struct { + + /* Mandatory */ + /* Availablility of WiFi */ + qmiLocWifiStatusEnumT_v02 wifiStatus; + /**< WiFi status information. + + Valid values: \begin{itemize1} + \item 0x00000001 -- WIFI_STATUS_ AVAILABLE + \item 0x00000002 -- WIFI_STATUS_ UNAVAILABLE + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocNotifyWifiStatusReqMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Notifies the location engine of the WiFi status. */ +typedef struct { + + /* Mandatory */ + /* Status of Notify WiFi Status Request */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Notify WiFi Status request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocNotifyWifiStatusIndMsgT_v02; /* Message */ +/** + @} + */ + +/* + * qmiLocGetRegisteredEventsReqMsgT is empty + * typedef struct { + * }qmiLocGetRegisteredEventsReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Gets the mask of the events for which a client has + registered. */ +typedef struct { + + /* Mandatory */ + /* Get Registered Events Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get Registered Events request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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 WiFi 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 + GPS 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 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 the UE enters + or leaves the perimeter of a 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. Location engine sends + this event out 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. Location engine sends + this event out to control the injection of motion data. + */ +}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 valid only for a GSM/UMTS network. */ + 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. This command is not to be used + by multiple clients concurrently. */ +typedef struct { + + /* Mandatory */ + /* Operation Mode */ + qmiLocOperationModeEnumT_v02 operationMode; + /**< Preferred operation mode. + \label{operationMode} + + Valid values: \begin{itemize1} + \item 0x00000001 -- OPER_MODE_ DEFAULT + \item 0x00000002 -- OPER_MODE_MSB + \item 0x00000003 -- OPER_MODE_MSA + \item 0x00000004 -- OPER_MODE_ STANDALONE + \item 0x00000005 -- OPER_MODE_ CELL_ID + \item 0x00000006 -- OPER_MODE_ WWAN + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocSetOperationModeReqMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Tells the engine to use the specified operation mode while + making the position fixes. This command is not to be used + by multiple clients concurrently. */ +typedef struct { + + /* Mandatory */ + /* Set Operation Mode Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Set Operation Mode request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocSetOperationModeIndMsgT_v02; /* Message */ +/** + @} + */ + +/* + * qmiLocGetOperationModeReqMsgT is empty + * typedef struct { + * }qmiLocGetOperationModeReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Gets the current operation mode from the engine. */ +typedef struct { + + /* Mandatory */ + /* Get Operation Mode Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get Operation Mode request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000001 -- OPER_MODE_ DEFAULT + \item 0x00000002 -- OPER_MODE_MSB + \item 0x00000003 -- OPER_MODE_MSA + \item 0x00000004 -- OPER_MODE_ STANDALONE + \item 0x00000005 -- OPER_MODE_ CELL_ID + \item 0x00000006 -- OPER_MODE_ WWAN + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocGetOperationModeIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Request Message; Used by the control point to set the SPI status, which + indicates whether the device is stationary. */ +typedef struct { + + /* Mandatory */ + /* Stationary Status */ + uint8_t stationary; + /**< Whether the device is stationary: + \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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}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. */ +/** @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, /**< The sensor time source is unspecified */ + eQMI_LOC_SENSOR_TIME_SOURCE_COMMON_V02 = 1, /**< The 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: ( (rads)/(seconds) ) */ + + float yAxis; + /**< Sensor y-axis sample. \n + - Units Accelerometer: ( (meters)/(seconds^2) ) \n + - Units Gyroscope: ( (rads)/(seconds) ) */ + + float zAxis; + /**< Sensor z-axis sample. \n + - Units Accelerometer: ( (meters)/(seconds^2) ) \n + - Units Gyroscope: ( (rads)/(seconds) ) */ +}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: \begin{itemize1} + \item 0x01 -- SIGN_REVERSAL + \item 0X02 -- SENSOR_TIME_IS_ MODEM_TIME + \vspace{-0.18in} \end{itemize1} */ + + 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 + - Type: Unsigned integer \n + - Units: Milliseconds */ + + float temperature; + /**< Sensor temperature. \n + - Type: Floating point \n + - Units: Degree Celsius \n + - Range: -50 to +100.00 Degree Celsius */ +}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. Values :\n + - eQMI_LOC_SENSOR_TIME_SOURCE_UNSPECIFIED (0) -- The sensor time source is unspecified + - eQMI_LOC_SENSOR_TIME_SOURCE_COMMON (1) -- The 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 + - Type: Unsigned integer \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; + /**< \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; + /**< \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. Location service will use + this field to identify the time reference used in the accelerometer data + timestamps. If not specified the location service will assume that the + time source for the accelereometer data is unknown. Values: \n + - eQMI_LOC_SENSOR_TIME_SOURCE_UNSPECIFIED (0) -- The sensor time source is unspecified + - eQMI_LOC_SENSOR_TIME_SOURCE_COMMON (1) -- The 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. Location service will use + this field to identify the time reference used in the gyroscope data + timestamps.If not specified the locations ervice will assume that the + time source for the gyroscope data is unknown. Values: \n + - eQMI_LOC_SENSOR_TIME_SOURCE_UNSPECIFIED (0) -- The sensor time source is unspecified + - eQMI_LOC_SENSOR_TIME_SOURCE_COMMON (1) -- The 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; + /**< Accelerometer 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; + /**< Gyroscope temperature samples. This data is optional and does not + have to be included in the message along with gyroscope data. */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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 Samples Accepted */ + uint8_t accelTemperatureSamplesAccepted_valid; /**< Must be set to true if accelTemperatureSamplesAccepted is being passed */ + uint8_t accelTemperatureSamplesAccepted; + /**< This field 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; + /**< This field 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. */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}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; +/** + @} + */ + +/* + * qmiLocGetCradleMountConfigReqMsgT is empty + * typedef struct { + * }qmiLocGetCradleMountConfigReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Used by the control point to get the current + cradle mount configuration. */ +typedef struct { + + /* Mandatory */ + /* Get Cradle Mount Config Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get Cradle Mount Configuration request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000000 -- CRADLE_STATE_ NOT_MOUNTED + \item 0x00000001 -- CRADLE_STATE_ MOUNTED + \item 0x00000002 -- CRADLE_STATE_ UNKNOWN + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000000 -- CRADLE_STATE_ NOT_MOUNTED + \item 0x00000001 -- CRADLE_STATE_ MOUNTED + \item 0x00000002 -- CRADLE_STATE_ UNKNOWN + \vspace{-0.18in} \end{itemize1} */ + + /* 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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}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; +/** + @} + */ + +/* + * qmiLocGetExternalPowerConfigReqMsgT is empty + * typedef struct { + * }qmiLocGetExternalPowerConfigReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Used by the control point to get the current + external power configuration. */ +typedef struct { + + /* Mandatory */ + /* Get Ext Power Config Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get External Power Configuration request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000000 -- EXTERNAL_ POWER_NOT_CONNECTED + \item 0x00000001 -- EXTERNAL_ POWER_CONNECTED + \item 0x00000002 -- EXTERNAL_ POWER_UNKNOWN + \vspace{-0.18in} \end{itemize1} + */ +}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: \begin{itemize1} + \item 0x00000000 -- EXTERNAL_ POWER_NOT_CONNECTED + \item 0x00000001 -- EXTERNAL_ POWER_CONNECTED + \item 0x00000002 -- EXTERNAL_ POWER_UNKNOWN + \vspace{-0.18in} \end{itemize1} + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}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 + - 0x00000001 -- PDN_TYPE_IPV4 \n + - 0x00000002 -- PDN_TYPE_IPV6 \n + - 0x00000003 -- PDN_TYPE_IPV4V6 \n + - 0x00000004 -- PDN_TYPE_PPP + */ + + char apnName[QMI_LOC_MAX_APN_NAME_LENGTH_V02 + 1]; + /**< APN name. + \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_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 + - 0x00000001 -- OPEN \n + - 0x00000002 -- CLOSE + */ + + /* Mandatory */ + /* Connection Status */ + qmiLocServerReqStatusEnumT_v02 statusType; + /**< Status of the Connection request. + + Valid values: \n + - 0x00000001 -- STATUS_SUCCESS = 1 \n + - 0x00000002 -- STATUS_FAILURE = 2 + + */ + + /* Optional */ + /* APN Profile */ + uint8_t apnProfile_valid; /**< Must be set to true if apnProfile is being passed */ + qmiLocApnProfilesStructT_v02 apnProfile; + /**< \n 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_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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}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. */ + 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. + The QMI_LOC_LPP_CONFIG_ENABLE_USER_PLANE should 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, /**< SHA1 Hash Algorithm for SUPL Version 2.0 or higher */ + eQMI_LOC_SUPL_HASH_ALGO_SHA256_V02 = 1, /**< SHA-256 Hash Algorithm for SUPL Version 2.0 or higher */ + 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 emergency while on WCDMA */ + eQMI_LOC_EMERGENCY_PROTOCOL_WCDMA_UP_V02 = 1, /**< use SUPL 2.0 emergency services during emergency while on WCDMA */ + QMILOCEMERGENCYPROTOCOLENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/ +}qmiLocEmergencyProtocolEnumT_v02; +/** + @} + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Request Message; Used by the control point to configure parameters stored + in the nonvolatile memory. */ +typedef struct { + + /* Optional */ + /* SUPL Security */ + uint8_t suplSecurity_valid; /**< Must be set to true if suplSecurity is being passed */ + uint8_t suplSecurity; + /**< Indicates whether SUPL security is enabled. + \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: \begin{itemize1} + \item 0x00000001 -- VX_VERSION_ V1_ONLY + \item 0x00000002 -- VX_VERSION_ V2_ONLY + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* SUPL Version */ + uint8_t suplVersion_valid; /**< Must be set to true if suplVersion is being passed */ + qmiLocSuplVersionEnumT_v02 suplVersion; + /**< SUPL version. + + Valid values: \n + - 0x00000001 -- SUPL_VERSION_1_0 \n + - 0x00000002 -- SUPL_VERSION_2_0 + */ + + /* 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. + The QMI_LOC_LPP_CONFIG_ENABLE_USER_PLANE should 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 that needs to be used. Values: \n + - eQMI_LOC_SUPL_HASH_ALGO_SHA1 (0) -- SHA1 Hash Algorithm for SUPL Version 2.0 or higher + - eQMI_LOC_SUPL_HASH_ALGO_SHA256 (1) -- SHA-256 Hash Algorithm for SUPL Version 2.0 or higher + */ + + /* Optional */ + /* SUPL TLS Version */ + uint8_t suplTlsVersion_valid; /**< Must be set to true if suplTlsVersion is being passed */ + qmiLocSuplTlsVersionEnumT_v02 suplTlsVersion; + /**< SUPL TLS (Transport Layer Security) Version. This configuration is only + applicable to SUPL 2.0 or higher as SUPL 1.0 always uses TLS version 1.0. + 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 emergency. + Note: Currently only can select on WCDMA. FOR GSM and 1x UE + will always allow only Control plane NI trigger for positioning. + For LTE, UE Can allow either SUPL or Control plane NI trigger. + Values: \n + - eQMI_LOC_EMERGENCY_PROTOCOL_WCDMA_CP (0) -- use Control plane protocol during emergency while on WCDMA + - eQMI_LOC_EMERGENCY_PROTOCOL_WCDMA_UP (1) -- use SUPL 2.0 emergency services during emergency while on WCDMA + */ +}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. */ +/** @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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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 a 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. + */ +}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. + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000001 -- VX_VERSION_V1_ ONLY + \item 0x00000002 -- VX_VERSION_V2_ ONLY + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* SUPL Version */ + uint8_t suplVersion_valid; /**< Must be set to true if suplVersion is being passed */ + qmiLocSuplVersionEnumT_v02 suplVersion; + /**< SUPL version. + + Valid values: \n + - 0x00000001 -- SUPL_VERSION_1_0 \n + - 0x00000002 -- SUPL_VERSION_2_0 + */ + + /* 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. + The QMI_LOC_LPP_CONFIG_ENABLE_USER_PLANE should 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 that needs to be used. Values: \n + - eQMI_LOC_SUPL_HASH_ALGO_SHA1 (0) -- SHA1 Hash Algorithm for SUPL Version 2.0 or higher + - eQMI_LOC_SUPL_HASH_ALGO_SHA256 (1) -- SHA-256 Hash Algorithm for SUPL Version 2.0 or higher + */ + + /* Optional */ + /* SUPL TLS Version */ + uint8_t suplTlsVersion_valid; /**< Must be set to true if suplTlsVersion is being passed */ + qmiLocSuplTlsVersionEnumT_v02 suplTlsVersion; + /**< SUPL TLS (Transport Layer Security) Version. This configuration is only + applicable to SUPL 2.0 or higher as SUPL 1.0 always uses TLS version 1.0. + 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; + /**< The protocol to be used during emergency. + Values: \n + - eQMI_LOC_EMERGENCY_PROTOCOL_WCDMA_CP (0) -- use Control plane protocol during emergency while on WCDMA + - eQMI_LOC_EMERGENCY_PROTOCOL_WCDMA_UP (1) -- use SUPL 2.0 emergency services during emergency while on WCDMA + */ +}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_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: \begin{itemize1} + \item 0x00000000 -- SENSORS_USE_ ENABLED: + Sensors data is to be requested whenever a position request is + received. If sensors data is injected, the GNSS location engine + attempts to improve the heading and positioning performance using + sensors. This is the default. + \item 0x00000001 -- SENSORS_USE_ DISABLED: + Inertial sensors are not to be used to aid in heading and + position improvement. + \vspace{-0.18in} \end{itemize1} + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocSetSensorControlConfigIndMsgT_v02; /* Message */ +/** + @} + */ + +/* + * qmiLocGetSensorControlConfigReqMsgT is empty + * typedef struct { + * }qmiLocGetSensorControlConfigReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Retrieves the current sensor control configuration. */ +typedef struct { + + /* Mandatory */ + /* Get Sensor Control Config Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get Sensors Control Configuration request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000000 -- SENSORS_USE_ ENABLED: + Sensors data is to be requested whenever a position request is + received. If sensors data is injected, the GNSS location engine + attempts to improve the heading and positioning performance using + sensors. This is the default. + \item 0x00000001 -- SENSORS_USE_ DISABLED: + Inertial sensors are not to be used to aid in the heading and + position improvement. + \vspace{-0.18in} \end{itemize1} + */ +}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. */ +/** @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 + + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \item 0x00000007 -- CONFIG_NOT_ SUPPORTED + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Failed Set Sensor Properties */ + uint8_t failedSensorPropertiesMask_valid; /**< Must be set to true if failedSensorPropertiesMask is being passed */ + qmiLocSensorPropertiesMaskT_v02 failedSensorPropertiesMask; + /**< This field will be sent only if the status is not a success. + Identifies the parameters that were not set successfully. + + Valid bitmasks: \begin{itemize1} + \item 0x00000001 -- GYRO_BIAS_ VARIANCE_RANDOM_WALK + \item 0x00000002 -- VELOCITY_ RANDOM_WALK_SPECTRAL_ DENSITY + \item 0x00000004 -- ACCELERATION_ RANDOM_WALK_SPECTRAL_ DENSITY + \item 0x00000008 -- ANGLE_RANDOM_ WALK_SPECTRAL_DENSITY + \item 0x00000010 -- RATE_RANDOM_ WALK_SPECTRAL_DENSITY + \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: \begin{itemize1} + \item 0x00000001 -- GYRO_BIAS_ VARIANCE_RANDOM_WALK + \item 0x00000002 -- VELOCITY_ RANDOM_WALK_SPECTRAL_ DENSITY + \item 0x00000004 -- ACCELERATION_ RANDOM_WALK_SPECTRAL_ DENSITY + \item 0x00000008 -- ANGLE_RANDOM_ WALK_SPECTRAL_DENSITY + \item 0x00000010 -- RATE_RANDOM_ WALK_SPECTRAL_DENSITY + \vspace{-0.18in} \end{itemize1} + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \item 0x00000007 -- CONFIG_NOT_ SUPPORTED + \vspace{-0.18in} \end{itemize1} + */ + + /* 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 + + */ +}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: \begin{itemize1} + \item 0x00000000 -- AUTO: \n + The GNSS location engine can decide when to request sensor data + injection based on internal criteria. This is the default. + \item 0x00000001 -- FORCED: \n + The GNSS location engine must request use of sensors every time + the GNSS location engine turns on. + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Accelerometer Sampling Specification */ + uint8_t accelSamplingSpec_valid; /**< Must be set to true if accelSamplingSpec is being passed */ + qmiLocSensorControlConfigSamplingSpecStructT_v02 accelSamplingSpec; + /**< \n \vspace{0.06in} 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; + /**< \n \vspace{0.06in} 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; + /**< \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; + /**< \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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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 */ +/** + @} + */ + +/* + * qmiLocGetSensorPerformanceControlConfigReqMsgT is empty + * typedef struct { + * }qmiLocGetSensorPerformanceControlConfigReqMsgT_v02; + */ + +/** @addtogroup loc_qmi_messages + @{ + */ +/** Indication Message; Retrieves the current sensor performance control + configuration. */ +typedef struct { + + /* Mandatory */ + /* Get Sensor Perf Control Config Status */ + qmiLocStatusEnumT_v02 status; + /**< Status of the Get Sensor Performance Control Configuration request. + + Valid values: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000000 -- AUTO: \n + The GNSS location engine can decide when to request sensor data + injection based on internal criteria. This is the default. + \item 0x0000001 -- FORCED: \n + The GNSS location engine must request use of the sensors every time + the GNSS location engine turns on. + \vspace{-0.18in} \end{itemize1} + */ + + /* Optional */ + /* Accelerometer Sampling Specification */ + uint8_t accelSamplingSpec_valid; /**< Must be set to true if accelSamplingSpec is being passed */ + qmiLocSensorControlConfigSamplingSpecStructT_v02 accelSamplingSpec; + /**< \n Sets the nominal rate at which the GNSS location engine is to request + acceleration data 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 2Hz batching rate. + */ + + /* Optional */ + /* Gyroscope Sampling Specification */ + uint8_t gyroSamplingSpec_valid; /**< Must be set to true if gyroSamplingSpec is being passed */ + qmiLocSensorControlConfigSamplingSpecStructT_v02 gyroSamplingSpec; + /**< \n Sets the nominal rate at which the GNSS location engine is to request + gyro data 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; + /**< \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; + /**< \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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}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. */ +/** @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. + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000001 -- INJECTED_ POSITION_CONTROL + \item 0x00000002 -- FILTER_SV_USAGE + \item 0x00000004 -- STORE_ASSIST_ DATA + \vspace{-0.18in} \end{itemize1} + */ +}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: \begin{itemize1} + \item 0x00000001 -- INJECTED_ POSITION_CONTROL + \item 0x00000002 -- FILTER_SV_USAGE + \item 0x00000004 -- STORE_ASSIST_ DATA + \vspace{-0.18in} \end{itemize1} + */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ + + /* 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. + */ +}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 + lower rate. The gap between 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. This is the default setting. */ + eQMI_LOC_GEOFENCE_RESPONSIVENESS_HIGH_V02 = 0x03, /**< The Geofence is monitored for a breach at a + high rate. The gap between actual breach and + the time it is reported is low. This results + in higher power usage. */ + QMILOCGEOFENCERESPONSIVENESSENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/ +}qmiLocGeofenceResponsivenessEnumT_v02; +/** + @} + */ + +/** @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, /**< The Geofence engine indicates a breach with + low confidence. This setting results in lower + power usage. This setting can impact the "yield" because + incorrect breach events may be sent. */ + eQMI_LOC_GEOFENCE_CONFIDENCE_MED_V02 = 0x02, /**< The Geofence engine indicates a breach with + medium confidence. This is the default setting. */ + eQMI_LOC_GEOFENCE_CONFIDENCE_HIGH_V02 = 0x03, /**< The 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_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 inside a Geofence. */ + eQMI_LOC_GEOFENCE_POSITION_OUTSIDE_V02 = 0x02, /**< Position outside a Geofence. */ + QMILOCGEOFENCEPOSITIONENUMT_MAX_ENUM_VAL_V02 = 2147483647 /**< To force a 32 bit signed enum. Do not change or use*/ +}qmiLocGeofencePositionEnumT_v02; +/** + @} + */ + +/** @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: \begin{itemize1} + \item 0x00000001 -- GEOFENCE_ RESPONSIVENESS_LOW + \item 0x00000002 -- GEOFENCE_ RESPONSIVENESS_MED + \item 0x00000003 -- GEOFENCE_ RESPONSIVENESS_HIGH + \vspace{-0.18in} \end{itemize1} */ + + /* 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: \begin{itemize1} + \item 0x00000001 -- GEOFENCE_ CONFIDENCE_LOW + \item 0x00000002 -- GEOFENCE_ CONFIDENCE_MED + \item 0x00000003 -- GEOFENCE_ CONFIDENCE_HIGH + \vspace{-0.18in} \end{itemize1} */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \item 0x00000008 -- INSUFFICIENT_ MEMORY + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} */ + + /* 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, /**< The Geofence was initiated by a network-initiated client. */ + eQMI_LOC_GEOFENCE_ORIGIN_DEVICE_V02 = 2, /**< The 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, /**< The Geofence is being actively monitored. */ + eQMI_LOC_GEOFENCE_STATE_SUSPEND_V02 = 2, /**< The 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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} */ + + /* 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: \begin{itemize1} + \item 0x00000001 -- GEOFENCE_ ORIGIN_NETWORK + \item 0x00000002 -- GEOFENCE_ ORIGIN_DEVICE + \vspace{-0.18in} \end{itemize1} + */ + + /* 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: \begin{itemize1} + \item 0x00000001 -- GEOFENCE_ POSITION_INSIDE + \item 0x00000002 -- GEOFENCE_ POSITION_OUTSIDE + \vspace{-0.18in} \end{itemize1} */ + + /* 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: \begin{itemize1} + \item 0x00000001 -- GEOFENCE_STATE_ ACTIVE + \item 0x00000002 -- GEOFENCE_STATE_ SUSPEND + \vspace{-0.18in} \end{itemize1} */ +}qmiLocQueryGeofenceIndMsgT_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: \begin{itemize1} + \item 0x00000001 -- GEOFENCE_STATE_ ACTIVE + \item 0x00000002 -- GEOFENCE_STATE_ SUSPEND + \vspace{-0.18in} \end{itemize1} */ + + /* 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} */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} */ + + /* 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 + @{ + */ +/** 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 + - 0x00000000 -- SUCCESS \n + - 0x00000001 -- GENERAL_FAILURE \n + - 0x00000002 -- UNSUPPORTED \n + - 0x00000004 -- ENGINE_BUSY \n + - 0x00000006 -- TIMEOUT */ + + /* 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: \begin{itemize1} + \item 0x00000000 -- RELIABILITY_NOT_ SET + \item 0x00000001 -- RELIABILITY_ VERY_LOW + \item 0x00000002 -- RELIABILITY_LOW + \item 0x00000003 -- RELIABILITY_ MEDIUM + \item 0x00000004 -- RELIABILITY_HIGH + \vspace{-0.18in} \end{itemize1} */ + + /* 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: \begin{itemize1} + \item 0x00000000 -- RELIABILITY_NOT_ SET + \item 0x00000001 -- RELIABILITY_ VERY_LOW + \item 0x00000002 -- RELIABILITY_LOW + \item 0x00000003 -- RELIABILITY_ MEDIUM + \item 0x00000004 -- RELIABILITY_HIGH + \vspace{-0.18in} \end{itemize1}*/ + + /* 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: \begin{itemize1} + \item 0x00000001 -- SATELLITE + \item 0x00000002 -- CELLID + \item 0x00000004 -- WIFI + \item 0x00000008 -- SENSORS + \item 0x00000010 -- REFERENCE_ LOCATION + \item 0x00000020 -- INJECTED_COARSE_ POSITION + \vspace{-0.18in} \end{itemize1} */ + + /* 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 (i.e., + 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 system clock (better known as slow clock). + GNSS time is maintained irrespective of the GNSS receiver state + */ + + /* 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: \begin{itemize1} + \item Range: \begin{itemize1} + \item For GPS: 1 to 32 + \item For SBAS: 33 to 64 + \item For GLONASS: 65 to 96 + \item For QZSS: 193 to 197 + \vspace{-0.18in} \end{itemize1} \end{itemize1} */ +}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: \begin{itemize1} + \item eQMI_LOC_MOTION_ STATE_UNKNOWN (0) -- Device state is not known. + \item eQMI_LOC_MOTION_ STATE_STATIONARY (1) -- Device state is Stationary. + \item eQMI_LOC_MOTION_ STATE_IN_MOTION (2) -- Device state is In Motion. + \vspace{0.1in} \end{itemize1} + + Absolute rest and relative rest are both indicated by setting motion_state + to Stationary. The relative rest state can be distinguished from absolute + rest by reducing probability_of_state. + */ + + qmiLocMotionModeEnumT_v02 motion_mode; + /**< Modes of user motion. + + Valid values: \begin{itemize1} + \item eQMI_LOC_MOTION_MODE_ UNKNOWN (0) -- Device movement is not known. + \item eQMI_LOC_MOTION_MODE_ STATIONARY (1) -- Device is not moving. + \item eQMI_LOC_MOTION_MODE_ PEDESTRIAN_UNKNOWN (200) -- Device movement + is in Pedestrian mode; nothing else is known about the movement. + \item eQMI_LOC_MOTION_MODE_ PEDESTRIAN_WALKING (201) -- Device movement + is in Pedestrian Walking mode. + \item eQMI_LOC_MOTION_MODE_ PEDESTRIAN_RUNNING (202) -- Device movement + is in Pedestrian Running mode. + \item eQMI_LOC_MOTION_MODE_ VEHICLE_UNKNOWN (300) -- Device movement is + in Vehicular mode; nothing else is known about the movement. + \vspace{0.1in} \end{itemize1} + + The motion_mode value is independent of the motion_state value. + */ + + 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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}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 + - 0x00000000 -- SUCCESS \n + - 0x00000001 -- GENERAL_FAILURE \n + - 0x00000002 -- UNSUPPORTED \n + - 0x00000004 -- ENGINE_BUSY \n + - 0x00000006 -- TIMEOUT */ + + /* 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[R2]{[R2]}. */ + + uint32_t MNC; + /**< GSM mobile network code. Refer to \hyperref[R2]{[R2]}. */ + + uint32_t LAC; + /**< GSM location area code. Refer to \hyperref[R2]{[R2]}. */ + + uint32_t CID; + /**< GSM cell identification. Refer to \hyperref[R2]{[R2]}. */ +}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; + /**< \n Identifies the GSM cell on which the device is currently camped. */ + + /* Mandatory */ + /* Roaming Status */ + uint8_t roamingStatus; + /**< 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; + /**< The round trip delay between the MS and the BS, in unit of 3.69 microseconds. + Refer to 3GPP TS 05.10 and 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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000006 -- TIMEOUT + \vspace{-018in} \end{itemize1} */ +}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 ITU-T E.212 \hyperref[R2]{[R2]}. */ + + uint32_t mnc; + /**< WCDMA mobile network code. Refer to \hyperref[R2]{[R2]}. */ + + uint32_t cid; + /**< WCDMA Cell Identity. Refer to \hyperref[R2]{[R2]}. */ +}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; + /**< Whether the device is roaming. + Valid values: \begin{itemize1} + \item eQMI_LOC_PHONE_NOT_ROAMING -- Device not roaming, i.e. its camped on + its home network + \item eQMI_LOC_PHONE_ROAMING -- Device is currently roaming, i.e. its camped + on a roaming network. + \vspace{0.1in} \end{itemize1} */ + + /* Optional */ + uint8_t freq_valid; /**< Must be set to true if freq is being passed */ + uint32_t freq; + /**< FrequencyInfo of the serving cell. Valid range is 0 to 16383. Refer to TS 25.331 */ + + /* Optional */ + uint8_t psc_valid; /**< Must be set to true if psc is being passed */ + uint32_t psc; + /**< PrimaryScramblingCode of the serving cell. Valid range is 0 to 511. Refer to 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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000006 -- TIMEOUT + \vspace{-018in} \end{itemize1} */ +}qmiLocInjectWCDMACellInfoIndMsgT_v02; /* Message */ +/** + @} + */ + +/** @addtogroup loc_qmi_aggregates + @{ + */ +typedef struct { + + uint32_t mcc; + /**< TDSCDMA mobile country code. Refer to ITU-T E.212 \hyperref[R2]{[R2]}. */ + + uint32_t mnc; + /**< TDSCDMA mobile network code. Refer to \hyperref[R2]{[R2]}. */ + + uint32_t cid; + /**< TDSCDMA Cell Identity. Refer to TS 25.331. */ + + uint32_t lac; + /**< TDSCDMA location area code. Refer to \hyperref[R2]{[R2]}. */ +}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; + /**< Whether the device is roaming. + Valid values: \begin{itemize1} + \item eQMI_LOC_PHONE_NOT_ROAMING -- Device not roaming, i.e. its camped on + its home network + \item eQMI_LOC_PHONE_ROAMING -- Device is currently roaming, i.e. its camped + on a roaming network. + \vspace{0.1in} \end{itemize1} */ + + /* Optional */ + uint8_t freq_valid; /**< Must be set to true if freq is being passed */ + uint32_t freq; + /**< FrequencyInfo of the serving cell. Valid range is 0 to 16383. Refer to 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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000006 -- TIMEOUT + \vspace{-018in} \end{itemize1} */ +}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; + /**< \n The IMSI number of the preferred RAT. Refer to \hyperref[R2]{[R2]}.*/ + + /* Optional */ + /* Preferred MSISDN */ + uint8_t preferredMSISDN_valid; /**< Must be set to true if preferredMSISDN is being passed */ + uint64_t preferredMSISDN; + /**< \n The MSISDN number of the preferred RAT. Refer to \hyperref[R2]{[R2]}.*/ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000006 -- TIMEOUT + \vspace{-018in} \end{itemize1} */ +}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: + - 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_0-20110527-C \hyperref[S5]{[S5]}. */ +}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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000006 -- TIMEOUT + \item 0x00000008 -- INSUFFICIENT_ MEMORY + \vspace{-0.18in} \end{itemize1} */ +}qmiLocInjectNetworkInitiatedMessageIndMsgT_v02; /* Message */ +/** + @} + */ + +/* + * qmiLocWWANOutOfServiceNotificationReqMsgT is empty + * typedef struct { + * }qmiLocWWANOutOfServiceNotificationReqMsgT_v02; + */ + +/** @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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_ PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}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. Location service will use + this field to identify the time reference used in the + pedometer data timestamp. Values: \n + - eQMI_LOC_SENSOR_TIME_SOURCE_UNSPECIFIED (0) -- The sensor time source is unspecified + - eQMI_LOC_SENSOR_TIME_SOURCE_COMMON (1) -- The time source is common between the sensors and + the location engine*/ + + /* Mandatory */ + /* Pedometer report timestamp */ + uint32_t timestamp; + /**< Timestamp of the last step event in this report, i.e timestamp + of the step event that caused this report to be generated. + The timestamp is in the time reference scale that is + used by the pedometer time source. \n + - Unit: Milliseconds */ + + /* Mandatory */ + /* Time Interval */ + uint32_t timeInterval; + /**< Time interval during which the step count was calculated. Subtracting + timeInterval from the timestamp field will yield the the time when + the step detection for the first step in this report started. + Unit : Milliseconds. */ + + /* Mandatory */ + /* Step Count */ + uint32_t stepCount; + /**< Number for 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, i.e if the stepCount is one. + Range: 0 to 100. + Note: The report will be 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. + Units: steps/second + 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: \begin{itemize1} + \item 0x00000000 -- SUCCESS + \item 0x00000001 -- GENERAL_FAILURE + \item 0x00000002 -- UNSUPPORTED + \item 0x00000003 -- INVALID_PARAMETER + \item 0x00000004 -- ENGINE_BUSY + \item 0x00000005 -- PHONE_OFFLINE + \item 0x00000006 -- TIMEOUT + \vspace{-0.18in} \end{itemize1} + */ +}qmiLocPedometerReportIndMsgT_v02; /* Message */ +/** + @} + */ + +/*Service Message Definition*/ +/** @addtogroup loc_qmi_msg_ids + @{ + */ +#define QMI_LOC_INFORM_CLIENT_REVISION_REQ_V02 0x0020 +#define QMI_LOC_INFORM_CLIENT_REVISION_RESP_V02 0x0020 +#define QMI_LOC_REG_EVENTS_REQ_V02 0x0021 +#define QMI_LOC_REG_EVENTS_RESP_V02 0x0021 +#define QMI_LOC_START_REQ_V02 0x0022 +#define QMI_LOC_START_RESP_V02 0x0022 +#define QMI_LOC_STOP_REQ_V02 0x0023 +#define QMI_LOC_STOP_RESP_V02 0x0023 +#define QMI_LOC_EVENT_POSITION_REPORT_IND_V02 0x0024 +#define QMI_LOC_EVENT_GNSS_SV_INFO_IND_V02 0x0025 +#define QMI_LOC_EVENT_NMEA_IND_V02 0x0026 +#define QMI_LOC_EVENT_NI_NOTIFY_VERIFY_REQ_IND_V02 0x0027 +#define QMI_LOC_EVENT_INJECT_TIME_REQ_IND_V02 0x0028 +#define QMI_LOC_EVENT_INJECT_PREDICTED_ORBITS_REQ_IND_V02 0x0029 +#define QMI_LOC_EVENT_INJECT_POSITION_REQ_IND_V02 0x002A +#define QMI_LOC_EVENT_ENGINE_STATE_IND_V02 0x002B +#define QMI_LOC_EVENT_FIX_SESSION_STATE_IND_V02 0x002C +#define QMI_LOC_EVENT_WIFI_REQ_IND_V02 0x002D +#define QMI_LOC_EVENT_SENSOR_STREAMING_READY_STATUS_IND_V02 0x002E +#define QMI_LOC_EVENT_TIME_SYNC_REQ_IND_V02 0x002F +#define QMI_LOC_EVENT_SET_SPI_STREAMING_REPORT_IND_V02 0x0030 +#define QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02 0x0031 +#define QMI_LOC_GET_SERVICE_REVISION_REQ_V02 0x0032 +#define QMI_LOC_GET_SERVICE_REVISION_RESP_V02 0x0032 +#define QMI_LOC_GET_SERVICE_REVISION_IND_V02 0x0032 +#define QMI_LOC_GET_FIX_CRITERIA_REQ_V02 0x0033 +#define QMI_LOC_GET_FIX_CRITERIA_RESP_V02 0x0033 +#define QMI_LOC_GET_FIX_CRITERIA_IND_V02 0x0033 +#define QMI_LOC_NI_USER_RESPONSE_REQ_V02 0x0034 +#define QMI_LOC_NI_USER_RESPONSE_RESP_V02 0x0034 +#define QMI_LOC_NI_USER_RESPONSE_IND_V02 0x0034 +#define QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_REQ_V02 0x0035 +#define QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_RESP_V02 0x0035 +#define QMI_LOC_INJECT_PREDICTED_ORBITS_DATA_IND_V02 0x0035 +#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_REQ_V02 0x0036 +#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_RESP_V02 0x0036 +#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_SOURCE_IND_V02 0x0036 +#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_REQ_V02 0x0037 +#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_RESP_V02 0x0037 +#define QMI_LOC_GET_PREDICTED_ORBITS_DATA_VALIDITY_IND_V02 0x0037 +#define QMI_LOC_INJECT_UTC_TIME_REQ_V02 0x0038 +#define QMI_LOC_INJECT_UTC_TIME_RESP_V02 0x0038 +#define QMI_LOC_INJECT_UTC_TIME_IND_V02 0x0038 +#define QMI_LOC_INJECT_POSITION_REQ_V02 0x0039 +#define QMI_LOC_INJECT_POSITION_RESP_V02 0x0039 +#define QMI_LOC_INJECT_POSITION_IND_V02 0x0039 +#define QMI_LOC_SET_ENGINE_LOCK_REQ_V02 0x003A +#define QMI_LOC_SET_ENGINE_LOCK_RESP_V02 0x003A +#define QMI_LOC_SET_ENGINE_LOCK_IND_V02 0x003A +#define QMI_LOC_GET_ENGINE_LOCK_REQ_V02 0x003B +#define QMI_LOC_GET_ENGINE_LOCK_RESP_V02 0x003B +#define QMI_LOC_GET_ENGINE_LOCK_IND_V02 0x003B +#define QMI_LOC_SET_SBAS_CONFIG_REQ_V02 0x003C +#define QMI_LOC_SET_SBAS_CONFIG_RESP_V02 0x003C +#define QMI_LOC_SET_SBAS_CONFIG_IND_V02 0x003C +#define QMI_LOC_GET_SBAS_CONFIG_REQ_V02 0x003D +#define QMI_LOC_GET_SBAS_CONFIG_RESP_V02 0x003D +#define QMI_LOC_GET_SBAS_CONFIG_IND_V02 0x003D +#define QMI_LOC_SET_NMEA_TYPES_REQ_V02 0x003E +#define QMI_LOC_SET_NMEA_TYPES_RESP_V02 0x003E +#define QMI_LOC_SET_NMEA_TYPES_IND_V02 0x003E +#define QMI_LOC_GET_NMEA_TYPES_REQ_V02 0x003F +#define QMI_LOC_GET_NMEA_TYPES_RESP_V02 0x003F +#define QMI_LOC_GET_NMEA_TYPES_IND_V02 0x003F +#define QMI_LOC_SET_LOW_POWER_MODE_REQ_V02 0x0040 +#define QMI_LOC_SET_LOW_POWER_MODE_RESP_V02 0x0040 +#define QMI_LOC_SET_LOW_POWER_MODE_IND_V02 0x0040 +#define QMI_LOC_GET_LOW_POWER_MODE_REQ_V02 0x0041 +#define QMI_LOC_GET_LOW_POWER_MODE_RESP_V02 0x0041 +#define QMI_LOC_GET_LOW_POWER_MODE_IND_V02 0x0041 +#define QMI_LOC_SET_SERVER_REQ_V02 0x0042 +#define QMI_LOC_SET_SERVER_RESP_V02 0x0042 +#define QMI_LOC_SET_SERVER_IND_V02 0x0042 +#define QMI_LOC_GET_SERVER_REQ_V02 0x0043 +#define QMI_LOC_GET_SERVER_RESP_V02 0x0043 +#define QMI_LOC_GET_SERVER_IND_V02 0x0043 +#define QMI_LOC_DELETE_ASSIST_DATA_REQ_V02 0x0044 +#define QMI_LOC_DELETE_ASSIST_DATA_RESP_V02 0x0044 +#define QMI_LOC_DELETE_ASSIST_DATA_IND_V02 0x0044 +#define QMI_LOC_SET_XTRA_T_SESSION_CONTROL_REQ_V02 0x0045 +#define QMI_LOC_SET_XTRA_T_SESSION_CONTROL_RESP_V02 0x0045 +#define QMI_LOC_SET_XTRA_T_SESSION_CONTROL_IND_V02 0x0045 +#define QMI_LOC_GET_XTRA_T_SESSION_CONTROL_REQ_V02 0x0046 +#define QMI_LOC_GET_XTRA_T_SESSION_CONTROL_RESP_V02 0x0046 +#define QMI_LOC_GET_XTRA_T_SESSION_CONTROL_IND_V02 0x0046 +#define QMI_LOC_INJECT_WIFI_POSITION_REQ_V02 0x0047 +#define QMI_LOC_INJECT_WIFI_POSITION_RESP_V02 0x0047 +#define QMI_LOC_INJECT_WIFI_POSITION_IND_V02 0x0047 +#define QMI_LOC_NOTIFY_WIFI_STATUS_REQ_V02 0x0048 +#define QMI_LOC_NOTIFY_WIFI_STATUS_RESP_V02 0x0048 +#define QMI_LOC_NOTIFY_WIFI_STATUS_IND_V02 0x0048 +#define QMI_LOC_GET_REGISTERED_EVENTS_REQ_V02 0x0049 +#define QMI_LOC_GET_REGISTERED_EVENTS_RESP_V02 0x0049 +#define QMI_LOC_GET_REGISTERED_EVENTS_IND_V02 0x0049 +#define QMI_LOC_SET_OPERATION_MODE_REQ_V02 0x004A +#define QMI_LOC_SET_OPERATION_MODE_RESP_V02 0x004A +#define QMI_LOC_SET_OPERATION_MODE_IND_V02 0x004A +#define QMI_LOC_GET_OPERATION_MODE_REQ_V02 0x004B +#define QMI_LOC_GET_OPERATION_MODE_RESP_V02 0x004B +#define QMI_LOC_GET_OPERATION_MODE_IND_V02 0x004B +#define QMI_LOC_SET_SPI_STATUS_REQ_V02 0x004C +#define QMI_LOC_SET_SPI_STATUS_RESP_V02 0x004C +#define QMI_LOC_SET_SPI_STATUS_IND_V02 0x004C +#define QMI_LOC_INJECT_SENSOR_DATA_REQ_V02 0x004D +#define QMI_LOC_INJECT_SENSOR_DATA_RESP_V02 0x004D +#define QMI_LOC_INJECT_SENSOR_DATA_IND_V02 0x004D +#define QMI_LOC_INJECT_TIME_SYNC_DATA_REQ_V02 0x004E +#define QMI_LOC_INJECT_TIME_SYNC_DATA_RESP_V02 0x004E +#define QMI_LOC_INJECT_TIME_SYNC_DATA_IND_V02 0x004E +#define QMI_LOC_SET_CRADLE_MOUNT_CONFIG_REQ_V02 0x004F +#define QMI_LOC_SET_CRADLE_MOUNT_CONFIG_RESP_V02 0x004F +#define QMI_LOC_SET_CRADLE_MOUNT_CONFIG_IND_V02 0x004F +#define QMI_LOC_GET_CRADLE_MOUNT_CONFIG_REQ_V02 0x0050 +#define QMI_LOC_GET_CRADLE_MOUNT_CONFIG_RESP_V02 0x0050 +#define QMI_LOC_GET_CRADLE_MOUNT_CONFIG_IND_V02 0x0050 +#define QMI_LOC_SET_EXTERNAL_POWER_CONFIG_REQ_V02 0x0051 +#define QMI_LOC_SET_EXTERNAL_POWER_CONFIG_RESP_V02 0x0051 +#define QMI_LOC_SET_EXTERNAL_POWER_CONFIG_IND_V02 0x0051 +#define QMI_LOC_GET_EXTERNAL_POWER_CONFIG_REQ_V02 0x0052 +#define QMI_LOC_GET_EXTERNAL_POWER_CONFIG_RESP_V02 0x0052 +#define QMI_LOC_GET_EXTERNAL_POWER_CONFIG_IND_V02 0x0052 +#define QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02 0x0053 +#define QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_RESP_V02 0x0053 +#define QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_IND_V02 0x0053 +#define QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02 0x0054 +#define QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02 0x0054 +#define QMI_LOC_SET_PROTOCOL_CONFIG_PARAMETERS_IND_V02 0x0054 +#define QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_REQ_V02 0x0055 +#define QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_RESP_V02 0x0055 +#define QMI_LOC_GET_PROTOCOL_CONFIG_PARAMETERS_IND_V02 0x0055 +#define QMI_LOC_SET_SENSOR_CONTROL_CONFIG_REQ_V02 0x0056 +#define QMI_LOC_SET_SENSOR_CONTROL_CONFIG_RESP_V02 0x0056 +#define QMI_LOC_SET_SENSOR_CONTROL_CONFIG_IND_V02 0x0056 +#define QMI_LOC_GET_SENSOR_CONTROL_CONFIG_REQ_V02 0x0057 +#define QMI_LOC_GET_SENSOR_CONTROL_CONFIG_RESP_V02 0x0057 +#define QMI_LOC_GET_SENSOR_CONTROL_CONFIG_IND_V02 0x0057 +#define QMI_LOC_SET_SENSOR_PROPERTIES_REQ_V02 0x0058 +#define QMI_LOC_SET_SENSOR_PROPERTIES_RESP_V02 0x0058 +#define QMI_LOC_SET_SENSOR_PROPERTIES_IND_V02 0x0058 +#define QMI_LOC_GET_SENSOR_PROPERTIES_REQ_V02 0x0059 +#define QMI_LOC_GET_SENSOR_PROPERTIES_RESP_V02 0x0059 +#define QMI_LOC_GET_SENSOR_PROPERTIES_IND_V02 0x0059 +#define QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02 0x005A +#define QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02 0x005A +#define QMI_LOC_SET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02 0x005A +#define QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_REQ_V02 0x005B +#define QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_RESP_V02 0x005B +#define QMI_LOC_GET_SENSOR_PERFORMANCE_CONTROL_CONFIGURATION_IND_V02 0x005B +#define QMI_LOC_INJECT_SUPL_CERTIFICATE_REQ_V02 0x005C +#define QMI_LOC_INJECT_SUPL_CERTIFICATE_RESP_V02 0x005C +#define QMI_LOC_INJECT_SUPL_CERTIFICATE_IND_V02 0x005C +#define QMI_LOC_DELETE_SUPL_CERTIFICATE_REQ_V02 0x005D +#define QMI_LOC_DELETE_SUPL_CERTIFICATE_RESP_V02 0x005D +#define QMI_LOC_DELETE_SUPL_CERTIFICATE_IND_V02 0x005D +#define QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02 0x005E +#define QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02 0x005E +#define QMI_LOC_SET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02 0x005E +#define QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_REQ_V02 0x005F +#define QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_RESP_V02 0x005F +#define QMI_LOC_GET_POSITION_ENGINE_CONFIG_PARAMETERS_IND_V02 0x005F +#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 +/** + @} + */ + +/* Service Object Accessor */ +/** @addtogroup wms_qmi_accessor + @{ + */ +/** This function is used internally by the autogenerated code. Clients should use the + macro loc_get_service_object_v02( ) that takes in no arguments. */ +qmi_idl_service_object_type loc_get_service_object_internal_v02 + ( int32_t idl_maj_version, int32_t idl_min_version, int32_t library_version ); + +/** This macro should be used to get the service object */ +#define loc_get_service_object_v02( ) \ + loc_get_service_object_internal_v02( \ + LOC_V02_IDL_MAJOR_VERS, LOC_V02_IDL_MINOR_VERS, \ + LOC_V02_IDL_TOOL_VERS ) +/** + @} + */ + + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/loc_api/ulp/inc/ulp.h b/loc_api/ulp/inc/ulp.h index 6321bb9c..94f2ebd8 100644 --- a/loc_api/ulp/inc/ulp.h +++ b/loc_api/ulp/inc/ulp.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -36,14 +36,7 @@ extern "C" #endif #include - -typedef int (ulp_report_position_cb) -( - void* owner, - const GpsLocation* location_report_ptr, - unsigned int ext_data_length, - unsigned char* ext_data -); +#include "loc_eng.h" /** Represents the standard ulp module interface. */ typedef struct { @@ -51,24 +44,14 @@ typedef struct { size_t size; /** - * Starts the ulp module. 0: success + * Starts the libulp module. 0: success */ - int (*init)( void* owner, ulp_report_position_cb* cb); + int (*init)(loc_eng_data_s_type &loc_eng_data); - /** Starts the ulp engine. 0: success */ - int (*start_fix)( void ); - - /** Stops the ulp engine. 0: success */ - int (*stop_fix)( void ); - - /** Closes the interface */ - int (*destroy)( void ); - -} ulpInterface; +}ulpInterface; typedef const ulpInterface* (get_ulp_interface) (void); - #ifdef __cplusplus } #endif diff --git a/utils/Android.mk b/utils/Android.mk old mode 100755 new mode 100644 index ff2810b0..912dcae4 --- a/utils/Android.mk +++ b/utils/Android.mk @@ -16,12 +16,15 @@ LOCAL_SRC_FILES += \ loc_log.cpp \ loc_cfg.cpp \ msg_q.c \ - linked_list.c + linked_list.c \ + loc_target.cpp LOCAL_CFLAGS += \ -fno-short-enums \ -D_ANDROID_ +LOCAL_LDFLAGS += -Wl,--export-dynamic + ## Includes LOCAL_C_INCLUDES:= @@ -31,7 +34,8 @@ LOCAL_COPY_HEADERS:= \ loc_cfg.h \ log_util.h \ linked_list.h \ - msg_q.h + msg_q.h \ + loc_target.h LOCAL_MODULE := libgps.utils diff --git a/utils/linked_list.c b/utils/linked_list.c index 16f2aa22..31ec52d2 100644 --- a/utils/linked_list.c +++ b/utils/linked_list.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/utils/linked_list.h b/utils/linked_list.h index cfc945a7..a85f09a3 100644 --- a/utils/linked_list.h +++ b/utils/linked_list.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * diff --git a/utils/loc_cfg.cpp b/utils/loc_cfg.cpp index de960788..e4a47722 100644 --- a/utils/loc_cfg.cpp +++ b/utils/loc_cfg.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2013, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -47,76 +47,17 @@ *============================================================================*/ /* Parameter data */ -loc_gps_cfg_s_type gps_conf; +static uint8_t DEBUG_LEVEL = 3; +static uint8_t TIMESTAMP = 0; /* Parameter spec table */ - -loc_param_s_type loc_parameter_table[] = +static loc_param_s_type loc_parameter_table[] = { - {"INTERMEDIATE_POS", &gps_conf.INTERMEDIATE_POS, 'n'}, - {"ACCURACY_THRES", &gps_conf.ACCURACY_THRES, 'n'}, - {"ENABLE_WIPER", &gps_conf.ENABLE_WIPER, 'n'}, - /* DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info - 4 - Debug, 5 - Verbose */ - {"DEBUG_LEVEL", &gps_conf.DEBUG_LEVEL, 'n'}, - {"SUPL_VER", &gps_conf.SUPL_VER, 'n'}, - {"CAPABILITIES", &gps_conf.CAPABILITIES, 'n'}, - {"TIMESTAMP", &gps_conf.TIMESTAMP, 'n'}, - {"GYRO_BIAS_RANDOM_WALK", &gps_conf.GYRO_BIAS_RANDOM_WALK, 'f'}, - {"SENSOR_ACCEL_BATCHES_PER_SEC", &gps_conf.SENSOR_ACCEL_BATCHES_PER_SEC, 'n'}, - {"SENSOR_ACCEL_SAMPLES_PER_BATCH", &gps_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH, 'n'}, - {"SENSOR_GYRO_BATCHES_PER_SEC", &gps_conf.SENSOR_GYRO_BATCHES_PER_SEC, 'n'}, - {"SENSOR_GYRO_SAMPLES_PER_BATCH", &gps_conf.SENSOR_GYRO_SAMPLES_PER_BATCH, 'n'}, - {"SENSOR_CONTROL_MODE", &gps_conf.SENSOR_CONTROL_MODE, 'n'}, - {"SENSOR_USAGE", &gps_conf.SENSOR_USAGE, 'n'}, + {"DEBUG_LEVEL", &DEBUG_LEVEL, NULL, 'n'}, + {"TIMESTAMP", &TIMESTAMP, NULL, 'n'}, }; - int loc_param_num = sizeof(loc_parameter_table) / sizeof(loc_param_s_type); -/*=========================================================================== -FUNCTION loc_default_parameters - -DESCRIPTION - Resets the parameters to default - -DEPENDENCIES - N/A - -RETURN VALUE - None - -SIDE EFFECTS - N/A -===========================================================================*/ - -static void loc_default_parameters() -{ - /* defaults */ - gps_conf.INTERMEDIATE_POS = 0; - gps_conf.ACCURACY_THRES = 0; - gps_conf.ENABLE_WIPER = 0; - gps_conf.DEBUG_LEVEL = 3; /* debug level */ - gps_conf.SUPL_VER = 0x10000; - gps_conf.CAPABILITIES = 0x7; - gps_conf.TIMESTAMP = 0; - - gps_conf.GYRO_BIAS_RANDOM_WALK = 0; - - gps_conf.SENSOR_ACCEL_BATCHES_PER_SEC = 2; - gps_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH = 5; - gps_conf.SENSOR_GYRO_BATCHES_PER_SEC = 2; - gps_conf.SENSOR_GYRO_SAMPLES_PER_BATCH = 5; - gps_conf.SENSOR_CONTROL_MODE = 0; /* AUTO */ - gps_conf.SENSOR_USAGE = 0; /* Enabled */ - - /* Value MUST be set by OEMs in configuration for sensor-assisted - navigation to work. There is NO default value */ - gps_conf.GYRO_BIAS_RANDOM_WALK_VALID = 0; - - /* reset logging mechanism */ - loc_logger_init(gps_conf.DEBUG_LEVEL, 0); -} - /*=========================================================================== FUNCTION trim_space @@ -161,11 +102,26 @@ void trim_space(char *org_string) if (last_nonspace) { *last_nonspace = '\0'; } } +typedef struct loc_param_v_type +{ + char* param_name; + + char* param_str_value; + int param_int_value; + double param_double_value; +}loc_param_v_type; + /*=========================================================================== -FUNCTION loc_read_gps_conf +FUNCTION loc_set_config_entry DESCRIPTION - Reads the gps.conf file and sets global parameter data + Potentially sets a given configuration table entry based on the passed in + configuration value. This is done by using a string comparison of the + parameter names and those found in the configuration file. + +PARAMETERS: + config_entry: configuration entry in the table to possibly set + config_value: value to store in the entry if the parameter names match DEPENDENCIES N/A @@ -176,97 +132,151 @@ RETURN VALUE SIDE EFFECTS N/A ===========================================================================*/ -void loc_read_gps_conf(void) +void loc_set_config_entry(loc_param_s_type* config_entry, loc_param_v_type* config_value) +{ + if(NULL == config_entry || NULL == config_value) + { + LOC_LOGE("%s: INVALID config entry or parameter", __FUNCTION__); + return; + } + + if (strcmp(config_entry->param_name, config_value->param_name) == 0 && + config_entry->param_ptr) + { + switch (config_entry->param_type) + { + case 's': + if (strcmp(config_value->param_str_value, "NULL") == 0) + { + *((char*)config_entry->param_ptr) = '\0'; + } + else { + strlcpy((char*) config_entry->param_ptr, + config_value->param_str_value, + LOC_MAX_PARAM_STRING + 1); + } + /* Log INI values */ + LOC_LOGD("%s: PARAM %s = %s", __FUNCTION__, config_entry->param_name, (char*)config_entry->param_ptr); + + if(NULL != config_entry->param_set) + { + *(config_entry->param_set) = 1; + } + break; + case 'n': + *((int *)config_entry->param_ptr) = config_value->param_int_value; + /* Log INI values */ + LOC_LOGD("%s: PARAM %s = %d", __FUNCTION__, config_entry->param_name, config_value->param_int_value); + + if(NULL != config_entry->param_set) + { + *(config_entry->param_set) = 1; + } + break; + case 'f': + *((double *)config_entry->param_ptr) = config_value->param_double_value; + /* Log INI values */ + LOC_LOGD("%s: PARAM %s = %f", __FUNCTION__, config_entry->param_name, config_value->param_double_value); + + if(NULL != config_entry->param_set) + { + *(config_entry->param_set) = 1; + } + break; + default: + LOC_LOGE("%s: PARAM %s parameter type must be n, f, or s", __FUNCTION__, config_entry->param_name); + } + } +} + +/*=========================================================================== +FUNCTION loc_read_conf + +DESCRIPTION + Reads the specified configuration file and sets defined values based on + the passed in configuration table. This table maps strings to values to + set along with the type of each of these values. + +PARAMETERS: + conf_file_name: configuration file to read + config_table: table definition of strings to places to store information + table_length: length of the configuration table + +DEPENDENCIES + N/A + +RETURN VALUE + None + +SIDE EFFECTS + N/A +===========================================================================*/ +void loc_read_conf(const char* conf_file_name, loc_param_s_type* config_table, uint32_t table_length) { FILE *gps_conf_fp = NULL; char input_buf[LOC_MAX_PARAM_LINE]; /* declare a char array */ char *lasts; - char *param_name, *param_str_value; - int param_int_value = 0; - double param_double_value = 0; - int i; + loc_param_v_type config_value; + uint32_t i; - loc_default_parameters(); - - if((gps_conf_fp = fopen(GPS_CONF_FILE, "r")) != NULL) + if((gps_conf_fp = fopen(conf_file_name, "r")) != NULL) { - LOC_LOGD("%s: using %s", __FUNCTION__, GPS_CONF_FILE); + LOC_LOGD("%s: using %s", __FUNCTION__, conf_file_name); } else { - LOC_LOGW("%s: no %s file, using defaults", __FUNCTION__, GPS_CONF_FILE); + LOC_LOGW("%s: no %s file found", __FUNCTION__, conf_file_name); + loc_logger_init(DEBUG_LEVEL, TIMESTAMP); return; /* no parameter file */ } + /* Clear all validity bits */ + for(i = 0; NULL != config_table && i < table_length; i++) + { + if(NULL != config_table[i].param_set) + { + *(config_table[i].param_set) = 0; + } + } + while(fgets(input_buf, LOC_MAX_PARAM_LINE, gps_conf_fp) != NULL) { + memset(&config_value, 0, sizeof(config_value)); + /* Separate variable and value */ - param_name = strtok_r(input_buf, "=", &lasts); - if (param_name == NULL) continue; /* skip lines that do not contain "=" */ - param_str_value = strtok_r(NULL, "=", &lasts); - if (param_str_value == NULL) continue; /* skip lines that do not contain two operands */ + config_value.param_name = strtok_r(input_buf, "=", &lasts); + if (config_value.param_name == NULL) continue; /* skip lines that do not contain "=" */ + config_value.param_str_value = strtok_r(NULL, "=", &lasts); + if (config_value.param_str_value == NULL) continue; /* skip lines that do not contain two operands */ /* Trim leading and trailing spaces */ - trim_space(param_name); - trim_space(param_str_value); - - // printf("*(%s) = (%s)\n", param_name, param_str_value); + trim_space(config_value.param_name); + trim_space(config_value.param_str_value); /* Parse numerical value */ - if (param_str_value[0] == '0' && tolower(param_str_value[1]) == 'x') + if (config_value.param_str_value[0] == '0' && tolower(config_value.param_str_value[1]) == 'x') { /* hex */ - param_int_value = (int) strtol(¶m_str_value[2], (char**) NULL, 16); + config_value.param_int_value = (int) strtol(&config_value.param_str_value[2], (char**) NULL, 16); } else { - param_double_value = (double) atof(param_str_value); /* float */ - param_int_value = atoi(param_str_value); /* dec */ + config_value.param_double_value = (double) atof(config_value.param_str_value); /* float */ + config_value.param_int_value = atoi(config_value.param_str_value); /* dec */ } - if (strcmp("GYRO_BIAS_RANDOM_WALK", param_name) == 0) + for(i = 0; NULL != config_table && i < table_length; i++) { - gps_conf.GYRO_BIAS_RANDOM_WALK_VALID = 1; + loc_set_config_entry(&config_table[i], &config_value); } for(i = 0; i < loc_param_num; i++) { - if (strcmp(loc_parameter_table[i].param_name, param_name) == 0 && - loc_parameter_table[i].param_ptr) - { - switch (loc_parameter_table[i].param_type) - { - case 's': - if (strcmp(param_str_value, "NULL") == 0) - { - *((char*)loc_parameter_table[i].param_ptr) = '\0'; - } - else { - strlcpy((char*) loc_parameter_table[i].param_ptr, - param_str_value, - LOC_MAX_PARAM_STRING + 1); - } - /* Log INI values */ - LOC_LOGD("%s: PARAM %s = %s", __FUNCTION__, param_name, (char*)loc_parameter_table[i].param_ptr); - break; - case 'n': - *((int *)loc_parameter_table[i].param_ptr) = param_int_value; - /* Log INI values */ - LOC_LOGD("%s: PARAM %s = %d", __FUNCTION__, param_name, param_int_value); - break; - case 'f': - *((double *)loc_parameter_table[i].param_ptr) = param_double_value; - /* Log INI values */ - LOC_LOGD("%s: PARAM %s = %f", __FUNCTION__, param_name, param_double_value); - break; - default: - LOC_LOGE("%s: PARAM %s parameter type must be n or n", __FUNCTION__, param_name); - } - } + loc_set_config_entry(&loc_parameter_table[i], &config_value); } } fclose(gps_conf_fp); /* Initialize logging mechanism with parsed data */ - loc_logger_init(gps_conf.DEBUG_LEVEL, gps_conf.TIMESTAMP); + loc_logger_init(DEBUG_LEVEL, TIMESTAMP); } diff --git a/utils/loc_cfg.h b/utils/loc_cfg.h index ffeb83c4..df833389 100644 --- a/utils/loc_cfg.h +++ b/utils/loc_cfg.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2013, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -30,14 +30,17 @@ #ifndef LOC_CFG_H #define LOC_CFG_H -#define LOC_MAX_PARAM_NAME 36 +#include + +#define LOC_MAX_PARAM_NAME 48 #define LOC_MAX_PARAM_STRING 80 #define LOC_MAX_PARAM_LINE 80 -// Don't want to overwrite the pre-def'ed value -#ifndef GPS_CONF_FILE -#define GPS_CONF_FILE "/etc/gps.conf" //??? platform independent -#endif +#define UTIL_READ_CONF_DEFAULT(filename) \ + loc_read_conf((filename), NULL, 0); + +#define UTIL_READ_CONF(filename, config_table) \ + loc_read_conf((filename), (config_table), sizeof(config_table) / sizeof(config_table[0])) /*============================================================================= * @@ -48,30 +51,12 @@ typedef struct { char param_name[LOC_MAX_PARAM_NAME]; void *param_ptr; - char param_type; /* 'n' for number; 's' for string */ + uint8_t *param_set; /* was this value set by config file? */ + char param_type; /* 'n' for number, + 's' for string, + 'f' for float */ } loc_param_s_type; -/* GPS.conf support */ -typedef struct loc_gps_cfg_s -{ - unsigned long INTERMEDIATE_POS; - unsigned long ACCURACY_THRES; - unsigned long ENABLE_WIPER; - unsigned long DEBUG_LEVEL; - unsigned long SUPL_VER; - unsigned long CAPABILITIES; - unsigned long TIMESTAMP; - unsigned long GYRO_BIAS_RANDOM_WALK_VALID; - double GYRO_BIAS_RANDOM_WALK; - unsigned long SENSOR_ACCEL_BATCHES_PER_SEC; - unsigned long SENSOR_ACCEL_SAMPLES_PER_BATCH; - unsigned long SENSOR_GYRO_BATCHES_PER_SEC; - unsigned long SENSOR_GYRO_SAMPLES_PER_BATCH; - unsigned long SENSOR_CONTROL_MODE; - unsigned long SENSOR_USAGE; - // char string_val[LOC_MAX_PARAM_STRING + 1]; /* An example string value */ -} loc_gps_cfg_s_type; - /*============================================================================= * * MODULE EXTERNAL DATA @@ -82,14 +67,14 @@ typedef struct loc_gps_cfg_s extern "C" { #endif -extern loc_gps_cfg_s_type gps_conf; - /*============================================================================= * * MODULE EXPORTED FUNCTIONS * *============================================================================*/ -extern void loc_read_gps_conf(void); +extern void loc_read_conf(const char* conf_file_name, + loc_param_s_type* config_table, + uint32_t table_length); #ifdef __cplusplus } diff --git a/utils/loc_log.cpp b/utils/loc_log.cpp index e4fb76c4..ecdfc8f5 100644 --- a/utils/loc_log.cpp +++ b/utils/loc_log.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -34,7 +34,6 @@ #include #include "loc_log.h" #include "msg_q.h" - #include "log_util.h" // Logging Improvements @@ -100,6 +99,36 @@ const char* log_succ_fail_string(int is_succ) return is_succ? "successful" : "failed"; } +//Target names +loc_name_val_s_type target_name[] = +{ + NAME_VAL(TARGET_OTHER), + NAME_VAL(TARGET_APQ8064_STANDALONE), + NAME_VAL(TARGET_APQ8064_FUSION3), + NAME_VAL(TARGET_MPQ8064), + NAME_VAL(TARGET_MSM8930), + NAME_VAL(TARGET_APQ8030_STANDALONE) +}; + +static int target_name_num = sizeof(target_name)/sizeof(loc_name_val_s_type); + +/*=========================================================================== + +FUNCTION loc_get_target_name + +DESCRIPTION + Returns pointer to a string that contains name of the target + + XX:XX:XX.000\0 + +RETURN VALUE + The target name string + +===========================================================================*/ +const char *loc_get_target_name(targetEnumType target) +{ + return loc_get_name_from_val(target_name, target_name_num, (long)target); +} /*=========================================================================== diff --git a/utils/loc_log.h b/utils/loc_log.h index 8b071a48..abe29b77 100644 --- a/utils/loc_log.h +++ b/utils/loc_log.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -36,6 +36,7 @@ extern "C" #endif #include +#include "loc_target.h" typedef struct { @@ -54,6 +55,7 @@ typedef struct const char* loc_get_name_from_mask(loc_name_val_s_type table[], int table_size, long mask); const char* loc_get_name_from_val(loc_name_val_s_type table[], int table_size, long value); const char* loc_get_msg_q_status(int status); +const char* loc_get_target_name(targetEnumType target); extern const char* log_succ_fail_string(int is_succ); diff --git a/utils/loc_target.cpp b/utils/loc_target.cpp new file mode 100644 index 00000000..92eaa45f --- /dev/null +++ b/utils/loc_target.cpp @@ -0,0 +1,118 @@ +/* Copyright (c) 2012, 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 +#include +#include +#include +#include +#include +#include +#include +#include "loc_target.h" +#include "loc_log.h" +#include "log_util.h" + +#define APQ8064_ID_1 "109" +#define APQ8064_ID_2 "153" +#define MPQ8064_ID_1 "130" +#define MSM8930_ID_1 "142" +#define MSM8930_ID_2 "116" +#define APQ8030_ID_1 "157" +#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 IS_STR_END(c) ((c) == '\0' || (c) == '\n' || (c) == '\r') +#define LENGTH(s) (sizeof(s) - 1) +#define GPS_CHECK_NO_ERROR 0 +#define GPS_CHECK_NO_GPS_HW 1 + +static int gss_fd = 0; + +static int read_a_line(const char * file_path, char * line, int line_size) +{ + FILE *fp; + int result = 0; + + * line = '\0'; + fp = fopen(file_path, "r" ); + if( fp == NULL ) { + LOC_LOGE("open failed: %s: %s\n", file_path, strerror(errno)); + result = -1; + } else { + int len; + fgets(line, line_size, fp); + len = strlen(line); + len = len < line_size - 1? len : line_size - 1; + line[len] = '\0'; + LOC_LOGD("cat %s: %s", file_path, line); + fclose(fp); + } + return result; +} + +targetEnumType get_target(void) +{ + targetEnumType target = TARGET_OTHER; + + char hw_platform[] = "/sys/devices/system/soc/soc0/hw_platform"; + char id[] = "/sys/devices/system/soc/soc0/id"; + char mdm[] = "/dev/mdm"; // No such file or directory + + char rd_hw_platform[LINE_LEN]; + char rd_id[LINE_LEN]; + char rd_mdm[LINE_LEN]; + + read_a_line(hw_platform, rd_hw_platform, LINE_LEN); + read_a_line( id, rd_id, LINE_LEN); + + if( (!memcmp(rd_hw_platform, STR_LIQUID, LENGTH(STR_LIQUID)) && IS_STR_END(rd_hw_platform[LENGTH(STR_LIQUID)])) || + (!memcmp(rd_hw_platform, STR_SURF, LENGTH(STR_SURF)) && IS_STR_END(rd_hw_platform[LENGTH(STR_SURF)])) || + (!memcmp(rd_hw_platform, STR_MTP, LENGTH(STR_MTP)) && IS_STR_END(rd_hw_platform[LENGTH(STR_MTP)]))) { + if (!read_a_line( mdm, rd_mdm, LINE_LEN)) + target = TARGET_APQ8064_FUSION3; + else if( (!memcmp(rd_id, APQ8064_ID_1, LENGTH(APQ8064_ID_1)) && IS_STR_END(rd_id[LENGTH(APQ8064_ID_1)])) || + (!memcmp(rd_id, APQ8064_ID_2, LENGTH(APQ8064_ID_2)) && IS_STR_END(rd_id[LENGTH(APQ8064_ID_2)])) ) + target = TARGET_APQ8064_STANDALONE; + else if((!memcmp(rd_id, APQ8030_ID_1, LENGTH(APQ8030_ID_1)) && IS_STR_END(rd_id[LENGTH(APQ8030_ID_1)]))) + target = TARGET_APQ8030_STANDALONE; + } + else if (!memcmp(rd_id, APQ8074_ID_1, LENGTH(APQ8074_ID_1)) && IS_STR_END(rd_id[LENGTH(APQ8074_ID_1)])) + target = TARGET_APQ8064_STANDALONE; + else if( !memcmp(rd_id, MPQ8064_ID_1, LENGTH(MPQ8064_ID_1)) && IS_STR_END(rd_id[LENGTH(MPQ8064_ID_1)]) ) + target = TARGET_MPQ8064; + else if( (!memcmp(rd_id, MSM8930_ID_1, LENGTH(MSM8930_ID_1)) && IS_STR_END(rd_id[LENGTH(MSM8930_ID_1)])) || + (!memcmp(rd_id, MSM8930_ID_2, LENGTH(MSM8930_ID_2)) && IS_STR_END(rd_id[LENGTH(MSM8930_ID_2)])) ) + target = TARGET_MSM8930; + return target; +} diff --git a/utils/loc_target.h b/utils/loc_target.h new file mode 100644 index 00000000..32c64b56 --- /dev/null +++ b/utils/loc_target.h @@ -0,0 +1,52 @@ +/* Copyright (c) 2012, 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_TARGET_H +#define LOC_TARGET_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef enum { + TARGET_OTHER = 0, + TARGET_APQ8064_STANDALONE, + TARGET_APQ8064_FUSION3, + TARGET_MPQ8064, + TARGET_MSM8930, + TARGET_APQ8030_STANDALONE +}targetEnumType; + +targetEnumType get_target(void); + +#ifdef __cplusplus +} +#endif + +#endif /*LOC_TARGET_H*/ diff --git a/utils/log_util.h b/utils/log_util.h index b3dae3c3..56dca624 100644 --- a/utils/log_util.h +++ b/utils/log_util.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -86,15 +86,15 @@ else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGW("W/"__VA_ARGS__); } #define LOC_LOGI(...) \ if (loc_logger.DEBUG_LEVEL >= 3) { ALOGE("I/"__VA_ARGS__); } \ -else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGI("W/"__VA_ARGS__); } +else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGI("I/"__VA_ARGS__); } #define LOC_LOGD(...) \ if (loc_logger.DEBUG_LEVEL >= 4) { ALOGE("D/"__VA_ARGS__); } \ -else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGD("W/"__VA_ARGS__); } +else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGD("D/"__VA_ARGS__); } #define LOC_LOGV(...) \ if (loc_logger.DEBUG_LEVEL >= 5) { ALOGE("V/"__VA_ARGS__); } \ -else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGV("W/"__VA_ARGS__); } +else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGV("V/"__VA_ARGS__); } #else /* DEBUG_DMN_LOC_API */ @@ -135,7 +135,6 @@ else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGV("W/"__VA_ARGS__); } #define EXIT_LOG(SPEC, VAL) LOG_V(EXIT_TAG, __func__, SPEC, VAL) -#ifdef DEBUG_TRACE_CALLFLOW // Used for logging callflow from Android Framework #define ENTRY_LOG_CALLFLOW() LOG_I(FROM_AFW, __func__, %s, "") // Used for logging callflow to Modem @@ -144,12 +143,6 @@ else if (loc_logger.DEBUG_LEVEL <= 0) { ALOGV("W/"__VA_ARGS__); } #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) -#else -#define ENTRY_LOG_CALLFLOW() -#define EXIT_LOG_CALLFLOW(SPEC, VAL) -#define MODEM_LOG_CALLFLOW(SPEC, VAL) -#define CALLBACK_LOG_CALLFLOW(CB, SPEC, VAL) -#endif #ifdef __cplusplus } diff --git a/utils/msg_q.c b/utils/msg_q.c index 252921ef..2c264170 100644 --- a/utils/msg_q.c +++ b/utils/msg_q.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2011-2012, 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. * @@ -249,7 +249,7 @@ msq_q_err_type msg_q_rcv(void* msg_q_data, void** msg_obj) pthread_mutex_unlock(&p_msg_q->list_mutex); - LOC_LOGD("%s: Received message %p rv = %d\n", __FUNCTION__, *msg_obj, rv); + LOC_LOGD("%s: Received message 0x%08X rv = %d\n", __FUNCTION__, *msg_obj, rv); return rv; } diff --git a/utils/msg_q.h b/utils/msg_q.h index 4171540a..d3d5cc5d 100644 --- a/utils/msg_q.h +++ b/utils/msg_q.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. +/* 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 @@ -9,7 +9,7 @@ * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * * 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. *