18c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved. 28c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 38c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * Redistribution and use in source and binary forms, with or without 48c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * modification, are permitted provided that the following conditions are 58c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * met: 68c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * * Redistributions of source code must retain the above copyright 78c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * notice, this list of conditions and the following disclaimer. 88c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * * Redistributions in binary form must reproduce the above 98c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * copyright notice, this list of conditions and the following 108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * disclaimer in the documentation and/or other materials provided 118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * with the distribution. 128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * * Neither the name of The Linux Foundation nor the names of its 138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * contributors may be used to endorse or promote products derived 148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * from this software without specific prior written permission. 158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam */ 288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifndef GPS_EXTENDED_C_H 308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_EXTENDED_C_H 318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifdef __cplusplus 338c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern "C" { 348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif /* __cplusplus */ 358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <ctype.h> 378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <stdbool.h> 388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <stdlib.h> 398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <string.h> 408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <hardware/gps.h> 418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Location has valid source information. */ 438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOCATION_HAS_SOURCE_INFO 0x0020 448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocation has valid "is indoor?" flag */ 458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_HAS_IS_INDOOR 0x0040 468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocation has valid floor number */ 478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_HAS_FLOOR_NUMBER 0x0080 488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocation has valid map URL*/ 498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_HAS_MAP_URL 0x0100 508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocation has valid map index */ 518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_HAS_MAP_INDEX 0x0200 528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Sizes for indoor fields */ 548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_MAP_URL_SIZE 400 558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_MAP_INDEX_SIZE 16 568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Position source is ULP */ 588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define ULP_LOCATION_IS_FROM_HYBRID 0x0001 598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Position source is GNSS only */ 608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define ULP_LOCATION_IS_FROM_GNSS 0x0002 618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Position source is ZPP only */ 628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define ULP_LOCATION_IS_FROM_ZPP 0x0004 638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Position is from a Geofence Breach Event */ 648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define ULP_LOCATION_IS_FROM_GEOFENCE 0X0008 658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Positioin is from Hardware FLP */ 668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define ULP_LOCATION_IS_FROM_HW_FLP 0x0010 678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define ULP_LOCATION_IS_FROM_NLP 0x0020 688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define ULP_MIN_INTERVAL_INVALID 0xffffffff 708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*Emergency SUPL*/ 728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_NI_TYPE_EMERGENCY_SUPL 4 738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_CERTIFICATE_MAX_LENGTH 2000 758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_CERTIFICATE_MAX_SLOTS 10 768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Batching default ID for dummy batching session*/ 788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_BATCHING_DEFAULT_ID 1 798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** This cap is used to decide the FLP session cache 818c2d3d5afc51d3f35150f748f263870367771b6fEd Tamsize on AP. If the BATCH_SIZE in flp.conf is less than 828c2d3d5afc51d3f35150f748f263870367771b6fEd TamGPS_AP_BATCHING_SIZE_CAP, FLP session cache size will 838c2d3d5afc51d3f35150f748f263870367771b6fEd Tambe twice the BATCH_SIZE defined in flp.conf. Otherwise, 848c2d3d5afc51d3f35150f748f263870367771b6fEd TamFLP session cache size will be equal to the BATCH_SIZE.*/ 858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_AP_BATCHING_SIZE_CAP 40 868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_BATCHING_OPERATION_SUCCEESS 1 888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_BATCHING_OPERATION_FAILURE 0 898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GPS extended batching flags*/ 918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_EXT_BATCHING_ON_FULL 0x0000001 928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_EXT_BATCHING_ON_FIX 0x0000002 938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Reasons of GPS reports batched locations*/ 958c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef enum loc_batching_reported_type { 968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_BATCHING_ON_FULL_IND_REPORT, 978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_BATCHING_ON_FIX_IND_REPORT, 988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_BATCHING_ON_QUERY_REPORT 998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}LocBatchingReportedType; 1008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1018c2d3d5afc51d3f35150f748f263870367771b6fEd Tamenum loc_registration_mask_status { 1028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_REGISTRATION_MASK_ENABLED, 1038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_REGISTRATION_MASK_DISABLED 1048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 1058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1068c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef struct { 1078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** set to sizeof(UlpLocation) */ 1088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam size_t size; 1098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsLocation gpsLocation; 1108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /* Provider indicator for HYBRID or GPS */ 1118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uint16_t position_source; 1128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /*allows HAL to pass additional information related to the location */ 1138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int rawDataSize; /* in # of bytes */ 1148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam void * rawData; 1158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam bool is_indoor; 1168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float floor_number; 1178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam char map_url[GPS_LOCATION_MAP_URL_SIZE]; 1188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam unsigned char map_index[GPS_LOCATION_MAP_INDEX_SIZE]; 1198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} UlpLocation; 1208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** AGPS type */ 1228c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef int16_t AGpsExtType; 1238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_TYPE_INVALID -1 1248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_TYPE_ANY 0 1258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_TYPE_SUPL 1 1268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_TYPE_C2K 2 1278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_TYPE_WWAN_ANY 3 1288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_TYPE_WIFI 4 1298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_TYPE_SUPL_ES 5 1308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** SSID length */ 1328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define SSID_BUF_SIZE (32+1) 1338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1348c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef int16_t AGpsBearerType; 1358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_APN_BEARER_INVALID -1 1368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_APN_BEARER_IPV4 0 1378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_APN_BEARER_IPV6 1 1388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define AGPS_APN_BEARER_IPV4V6 2 1398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GPS extended callback structure. */ 1418c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef struct { 1428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** set to sizeof(GpsCallbacks) */ 1438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam size_t size; 1448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_set_capabilities set_capabilities_cb; 1458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_acquire_wakelock acquire_wakelock_cb; 1468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_release_wakelock release_wakelock_cb; 1478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_create_thread create_thread_cb; 1488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_request_utc_time request_utc_time_cb; 1498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} GpsExtCallbacks; 1508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GPS extended batch options */ 1528c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef struct { 1538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam double max_power_allocation_mW; 1548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uint32_t sources_to_use; 1558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uint32_t flags; 1568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int64_t period_ns; 1578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} GpsExtBatchOptions; 1588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Callback to report the xtra server url to the client. 1608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * The client should use this url when downloading xtra unless overwritten 1618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * in the gps.conf file 1628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam */ 1638c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef void (* report_xtra_server)(const char*, const char*, const char*); 1648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Callback structure for the XTRA interface. */ 1668c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef struct { 1678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_xtra_download_request download_request_cb; 1688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_create_thread create_thread_cb; 1698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam report_xtra_server report_xtra_server_cb; 1708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} GpsXtraExtCallbacks; 1718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Represents the status of AGPS. */ 1738c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef struct { 1748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** set to sizeof(AGpsExtStatus) */ 1758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam size_t size; 1768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AGpsExtType type; 1788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AGpsStatusValue status; 1798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uint32_t ipv4_addr; 1808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam struct sockaddr_storage addr; 1818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam char ssid[SSID_BUF_SIZE]; 1828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam char password[SSID_BUF_SIZE]; 1838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} AGpsExtStatus; 1848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Callback with AGPS status information. 1868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * Can only be called from a thread created by create_thread_cb. 1878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam */ 1888c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef void (* agps_status_extended)(AGpsExtStatus* status); 1898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Callback structure for the AGPS interface. */ 1918c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef struct { 1928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam agps_status_extended status_cb; 1938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_create_thread create_thread_cb; 1948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} AGpsExtCallbacks; 1958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GPS NI callback structure. */ 1988c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef struct 1998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 2008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** 2018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * Sends the notification request from HAL to GPSLocationProvider. 2028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam */ 2038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_ni_notify_callback notify_cb; 2048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_create_thread create_thread_cb; 2058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} GpsNiExtCallbacks; 2068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2078c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef enum loc_server_type { 2088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_AGPS_CDMA_PDE_SERVER, 2098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_AGPS_CUSTOM_PDE_SERVER, 2108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_AGPS_MPC_SERVER, 2118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_AGPS_SUPL_SERVER 2128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} LocServerType; 2138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2148c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef enum loc_position_mode_type { 2158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POSITION_MODE_INVALID = -1, 2168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POSITION_MODE_STANDALONE = 0, 2178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POSITION_MODE_MS_BASED, 2188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POSITION_MODE_MS_ASSISTED, 2198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POSITION_MODE_RESERVED_1, 2208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POSITION_MODE_RESERVED_2, 2218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POSITION_MODE_RESERVED_3, 2228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POSITION_MODE_RESERVED_4, 2238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POSITION_MODE_RESERVED_5 2248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} LocPositionMode; 2268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define MIN_POSSIBLE_FIX_INTERVAL 1000 /* msec */ 2288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocationExtended has valid latitude and longitude. */ 2308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_EXTENDED_HAS_LAT_LONG (1U<<0) 2318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocationExtended has valid altitude. */ 2328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_EXTENDED_HAS_ALTITUDE (1U<<1) 2338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocationExtended has valid speed. */ 2348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_EXTENDED_HAS_SPEED (1U<<2) 2358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocationExtended has valid bearing. */ 2368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_EXTENDED_HAS_BEARING (1U<<4) 2378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocationExtended has valid accuracy. */ 2388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_EXTENDED_HAS_ACCURACY (1U<<8) 2398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GPS extended supports geofencing */ 2418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_EXTENDED_CAPABILITY_GEOFENCE 0x0000001 2428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GPS extended supports batching */ 2438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_EXTENDED_CAPABILITY_BATCHING 0x0000002 2448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Flags to indicate which values are valid in a GpsLocationExtended. */ 2468c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef uint16_t GpsLocationExtendedFlags; 2478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocationExtended has valid pdop, hdop, vdop. */ 2488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_EXTENDED_HAS_DOP 0x0001 2498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocationExtended has valid altitude mean sea level. */ 2508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL 0x0002 2518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** UlpLocation has valid magnetic deviation. */ 2528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_EXTENDED_HAS_MAG_DEV 0x0004 2538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** UlpLocation has valid mode indicator. */ 2548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_EXTENDED_HAS_MODE_IND 0x0008 2558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocationExtended has valid vertical uncertainty */ 2568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_EXTENDED_HAS_VERT_UNC 0x0010 2578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** GpsLocationExtended has valid speed uncertainty */ 2588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_LOCATION_EXTENDED_HAS_SPEED_UNC 0x0020 2598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/** Represents gps location extended. */ 2618c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef struct { 2628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** set to sizeof(GpsLocationExtended) */ 2638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam size_t size; 2648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** Contains GpsLocationExtendedFlags bits. */ 2658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uint16_t flags; 2668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** Contains the Altitude wrt mean sea level */ 2678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float altitudeMeanSeaLevel; 2688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** Contains Position Dilusion of Precision. */ 2698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float pdop; 2708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** Contains Horizontal Dilusion of Precision. */ 2718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float hdop; 2728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** Contains Vertical Dilusion of Precision. */ 2738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float vdop; 2748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** Contains Magnetic Deviation. */ 2758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float magneticDeviation; 2768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** vertical uncertainty in meters */ 2778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float vert_unc; 2788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /** speed uncertainty in m/s */ 2798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float speed_unc; 2808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} GpsLocationExtended; 2818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2828c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef struct GpsExtLocation_s { 2838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam size_t size; 2848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uint16_t flags; 2858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam double latitude; 2868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam double longitude; 2878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam double altitude; 2888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float speed; 2898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float bearing; 2908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float accuracy; 2918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int64_t timestamp; 2928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uint32_t sources_used; 2938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} GpsExtLocation; 2948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2958c2d3d5afc51d3f35150f748f263870367771b6fEd Tamenum loc_sess_status { 2968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_SESS_SUCCESS, 2978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_SESS_INTERMEDIATE, 2988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_SESS_FAILURE 2998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 3008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3018c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef uint32_t LocPosTechMask; 3028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_POS_TECH_MASK_DEFAULT ((LocPosTechMask)0x00000000) 3038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_POS_TECH_MASK_SATELLITE ((LocPosTechMask)0x00000001) 3048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_POS_TECH_MASK_CELLID ((LocPosTechMask)0x00000002) 3058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_POS_TECH_MASK_WIFI ((LocPosTechMask)0x00000004) 3068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_POS_TECH_MASK_SENSORS ((LocPosTechMask)0x00000008) 3078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_POS_TECH_MASK_REFERENCE_LOCATION ((LocPosTechMask)0x00000010) 3088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_POS_TECH_MASK_INJECTED_COARSE_POSITION ((LocPosTechMask)0x00000020) 3098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_POS_TECH_MASK_AFLT ((LocPosTechMask)0x00000040) 3108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_POS_TECH_MASK_HYBRID ((LocPosTechMask)0x00000080) 3118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3128c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef enum { 3138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC = 0, 3148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM, 3158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU, 3168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON, 3178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_ENG_IF_REQUEST_SENDER_ID_MODEM, 3188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_ENG_IF_REQUEST_SENDER_ID_UNKNOWN 3198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} loc_if_req_sender_id_e_type; 3208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define smaller_of(a, b) (((a) > (b)) ? (b) : (a)) 3238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define MAX_APN_LEN 100 3248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// This will be overridden by the individual adapters 3268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// if necessary. 3278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define DEFAULT_IMPL(rtv) \ 3288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ \ 3298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("%s: default implementation invoked", __func__); \ 3308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return rtv; \ 3318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3338c2d3d5afc51d3f35150f748f263870367771b6fEd Tamenum loc_api_adapter_err { 3348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_SUCCESS = 0, 3358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_GENERAL_FAILURE = 1, 3368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_UNSUPPORTED = 2, 3378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_INVALID_HANDLE = 4, 3388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_INVALID_PARAMETER = 5, 3398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_ENGINE_BUSY = 6, 3408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_PHONE_OFFLINE = 7, 3418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_TIMEOUT = 8, 3428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_SERVICE_NOT_PRESENT = 9, 3438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_INTERNAL = 10, 3448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /* equating engine down to phone offline, as they are the same errror */ 3468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_ENGINE_DOWN = LOC_API_ADAPTER_ERR_PHONE_OFFLINE, 3478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_FAILURE = 101, 3488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_ERR_UNKNOWN 3498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 3508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3518c2d3d5afc51d3f35150f748f263870367771b6fEd Tamenum loc_api_adapter_event_index { 3528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REPORT_POSITION = 0, // Position report comes in loc_parsed_position_s_type 3538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REPORT_SATELLITE, // Satellite in view report 3548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REPORT_NMEA_1HZ, // NMEA report at 1HZ rate 3558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REPORT_NMEA_POSITION, // NMEA report at position report rate 3568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REQUEST_NI_NOTIFY_VERIFY, // NI notification/verification request 3578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REQUEST_ASSISTANCE_DATA, // Assistance data, eg: time, predicted orbits request 3588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REQUEST_LOCATION_SERVER, // Request for location server 3598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REPORT_IOCTL, // Callback report for loc_ioctl 3608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REPORT_STATUS, // Misc status report: eg, engine state 3618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REQUEST_WIFI, // 3628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_SENSOR_STATUS, // 3638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REQUEST_TIME_SYNC, // 3648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REPORT_SPI, // 3658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REPORT_NI_GEOFENCE, // 3668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_GEOFENCE_GEN_ALERT, // 3678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REPORT_GENFENCE_BREACH, // 3688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_PEDOMETER_CTRL, // 3698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_MOTION_CTRL, // 3708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_REQUEST_WIFI_AP_DATA, // Wifi ap data 3718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_BATCH_FULL, // Batching on full 3728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_BATCHED_POSITION_REPORT, // Batching on fix 3738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_BATCHED_GENFENCE_BREACH_REPORT, // 3748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_GDT_UPLOAD_BEGIN_REQ, // GDT upload start request 3758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_GDT_UPLOAD_END_REQ, // GDT upload end request 3768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_GNSS_MEASUREMENT, // GNSS Measurement report 3778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_EVENT_MAX 3798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 3808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT (1<<LOC_API_ADAPTER_REPORT_POSITION) 3828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_SATELLITE_REPORT (1<<LOC_API_ADAPTER_REPORT_SATELLITE) 3838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT (1<<LOC_API_ADAPTER_REPORT_NMEA_1HZ) 3848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_NMEA_POSITION_REPORT (1<<LOC_API_ADAPTER_REPORT_NMEA_POSITION) 3858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST (1<<LOC_API_ADAPTER_REQUEST_NI_NOTIFY_VERIFY) 3868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST (1<<LOC_API_ADAPTER_REQUEST_ASSISTANCE_DATA) 3878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST (1<<LOC_API_ADAPTER_REQUEST_LOCATION_SERVER) 3888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_IOCTL_REPORT (1<<LOC_API_ADAPTER_REPORT_IOCTL) 3898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_STATUS_REPORT (1<<LOC_API_ADAPTER_REPORT_STATUS) 3908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_REQUEST_WIFI (1<<LOC_API_ADAPTER_REQUEST_WIFI) 3918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_SENSOR_STATUS (1<<LOC_API_ADAPTER_SENSOR_STATUS) 3928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_REQUEST_TIME_SYNC (1<<LOC_API_ADAPTER_REQUEST_TIME_SYNC) 3938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_REPORT_SPI (1<<LOC_API_ADAPTER_REPORT_SPI) 3948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_REPORT_NI_GEOFENCE (1<<LOC_API_ADAPTER_REPORT_NI_GEOFENCE) 3958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_GEOFENCE_GEN_ALERT (1<<LOC_API_ADAPTER_GEOFENCE_GEN_ALERT) 3968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_REPORT_GENFENCE_BREACH (1<<LOC_API_ADAPTER_REPORT_GENFENCE_BREACH) 3978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_BATCHED_GENFENCE_BREACH_REPORT (1<<LOC_API_ADAPTER_BATCHED_GENFENCE_BREACH_REPORT) 3988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_PEDOMETER_CTRL (1<<LOC_API_ADAPTER_PEDOMETER_CTRL) 3998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_MOTION_CTRL (1<<LOC_API_ADAPTER_MOTION_CTRL) 4008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_REQUEST_WIFI_AP_DATA (1<<LOC_API_ADAPTER_REQUEST_WIFI_AP_DATA) 4018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_BATCH_FULL (1<<LOC_API_ADAPTER_BATCH_FULL) 4028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_BATCHED_POSITION_REPORT (1<<LOC_API_ADAPTER_BATCHED_POSITION_REPORT) 4038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_GDT_UPLOAD_BEGIN_REQ (1<<LOC_API_ADAPTER_GDT_UPLOAD_BEGIN_REQ) 4048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_GDT_UPLOAD_END_REQ (1<<LOC_API_ADAPTER_GDT_UPLOAD_END_REQ) 4058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT (1<<LOC_API_ADAPTER_GNSS_MEASUREMENT) 4068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 4078c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef unsigned int LOC_API_ADAPTER_EVENT_MASK_T; 4088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 4098c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef enum loc_api_adapter_msg_to_check_supported { 4108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_MESSAGE_LOCATION_BATCHING, // Batching 4118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_MESSAGE_BATCHED_GENFENCE_BREACH, // Geofence Batched Breach 4128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 4138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_MESSAGE_MAX 4148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} LocCheckingMessagesID; 4158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 4168c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef uint32_t LOC_GPS_LOCK_MASK; 4178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define isGpsLockNone(lock) ((lock) == 0) 4188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define isGpsLockMO(lock) ((lock) & ((LOC_GPS_LOCK_MASK)1)) 4198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define isGpsLockMT(lock) ((lock) & ((LOC_GPS_LOCK_MASK)2)) 4208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define isGpsLockAll(lock) (((lock) & ((LOC_GPS_LOCK_MASK)3)) == 3) 4218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 4228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifdef __cplusplus 4238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 4248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif /* __cplusplus */ 4258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 4268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif /* GPS_EXTENDED_C_H */ 4278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 428