1b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Copyright (c) 2017 The Linux Foundation. All rights reserved. 2b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 3b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Redistribution and use in source and binary forms, with or without 4b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * modification, are permitted provided that the following conditions are 5b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * met: 6b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * * Redistributions of source code must retain the above copyright 7b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * notice, this list of conditions and the following disclaimer. 8b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * * Redistributions in binary form must reproduce the above 9b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * copyright notice, this list of conditions and the following 10b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * disclaimer in the documentation and/or other materials provided 11b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * with the distribution. 12b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * * Neither the name of The Linux Foundation nor the names of its 13b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * contributors may be used to endorse or promote products derived 14b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * from this software without specific prior written permission. 15b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 16b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel */ 28b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 29b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#ifndef LOCATION_H 30b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define LOCATION_H 31b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 32b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include <stdint.h> 33b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include <functional> 34b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 35b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define GNSS_NI_REQUESTOR_MAX 256 36b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define GNSS_NI_MESSAGE_ID_MAX 2048 37b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define GNSS_SV_MAX 64 38b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define GNSS_MEASUREMENTS_MAX 64 39b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 40b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 41b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS = 0, 42b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_GENERAL_FAILURE, 43b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_CALLBACK_MISSING, 44b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_INVALID_PARAMETER, 45b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_EXISTS, 46b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN, 47b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ALREADY_STARTED, 48b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_GEOFENCES_AT_MAX, 49b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_NOT_SUPPORTED 50b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} LocationError; 51b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 52b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel// Flags to indicate which values are valid in a Location 53b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint16_t LocationFlagsMask; 54b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 55b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_HAS_LAT_LONG_BIT = (1<<0), // location has valid latitude and longitude 56b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_HAS_ALTITUDE_BIT = (1<<1), // location has valid altitude 57b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_HAS_SPEED_BIT = (1<<2), // location has valid speed 58b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_HAS_BEARING_BIT = (1<<3), // location has valid bearing 59b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_HAS_ACCURACY_BIT = (1<<4), // location has valid accuracy 60b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} LocationFlagsBits; 61b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 62b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint16_t LocationTechnologyMask; 63b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 64b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_TECHNOLOGY_GNSS_BIT = (1<<0), // location was calculated using GNSS 65b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_TECHNOLOGY_CELL_BIT = (1<<1), // location was calculated using Cell 66b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_TECHNOLOGY_WIFI_BIT = (1<<2), // location was calculated using WiFi 67b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_TECHNOLOGY_SENSORS_BIT = (1<<3), // location was calculated using Sensors 68b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} LocationTechnologyBits; 69b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 70b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 71b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_RELIABILITY_NOT_SET = 0, 72b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_RELIABILITY_VERY_LOW, 73b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_RELIABILITY_LOW, 74b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_RELIABILITY_MEDIUM, 75b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_RELIABILITY_HIGH, 76b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} LocationReliability; 77b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 78b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint32_t GnssLocationInfoFlagMask; 79b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 80b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_LOCATION_INFO_ALTITUDE_MEAN_SEA_LEVEL_BIT = (1<<0), // valid altitude mean sea level 81b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_LOCATION_INFO_DOP_BIT = (1<<1), // valid pdop, hdop, and vdop 82b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT = (1<<2), // valid magnetic deviation 83b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_LOCATION_INFO_VER_ACCURACY_BIT = (1<<3), // valid vertical accuracy 84b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_LOCATION_INFO_SPEED_ACCURACY_BIT = (1<<4), // valid speed accuracy 85b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_LOCATION_INFO_BEARING_ACCURACY_BIT = (1<<5), // valid bearing accuracy 86b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT = (1<<6), // valid horizontal reliability 87b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_LOCATION_INFO_VER_RELIABILITY_BIT = (1<<7), // valid vertical reliability 88b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MAJOR_BIT = (1<<8), // valid elipsode semi major 89b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MINOR_BIT = (1<<9), // valid elipsode semi minor 90b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_AZIMUTH_BIT = (1<<10),// valid accuracy elipsode azimuth 91b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssLocationInfoFlagBits; 92b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 93b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 94b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GEOFENCE_BREACH_ENTER = 0, 95b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GEOFENCE_BREACH_EXIT, 96b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GEOFENCE_BREACH_DWELL_IN, 97b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GEOFENCE_BREACH_DWELL_OUT, 98b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GEOFENCE_BREACH_UNKNOWN, 99b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GeofenceBreachType; 100b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 101b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint16_t GeofenceBreachTypeMask; 102b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 103b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GEOFENCE_BREACH_ENTER_BIT = (1<<0), 104b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GEOFENCE_BREACH_EXIT_BIT = (1<<1), 105b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GEOFENCE_BREACH_DWELL_IN_BIT = (1<<2), 106b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GEOFENCE_BREACH_DWELL_OUT_BIT = (1<<3), 107b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GeofenceBreachTypeBits; 108b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 109b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 110b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GEOFENCE_STATUS_AVAILABILE_NO = 0, 111b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GEOFENCE_STATUS_AVAILABILE_YES, 112b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GeofenceStatusAvailable; 113b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 114b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint32_t LocationCapabilitiesMask; 115b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 116b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel // supports startTracking API with minInterval param 117b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT = (1<<0), 118b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel // supports startBatching API with minInterval param 119b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_CAPABILITIES_TIME_BASED_BATCHING_BIT = (1<<1), 120b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel // supports startTracking API with minDistance param 121b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_CAPABILITIES_DISTANCE_BASED_TRACKING_BIT = (1<<2), 122b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel // supports startBatching API with minDistance param 123b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_CAPABILITIES_DISTANCE_BASED_BATCHING_BIT = (1<<3), 124b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel // supports addGeofences API 125b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_CAPABILITIES_GEOFENCE_BIT = (1<<4), 126b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel // supports GnssMeasurementsCallback 127b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_CAPABILITIES_GNSS_MEASUREMENTS_BIT = (1<<5), 128b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel // supports startTracking/startBatching API with LocationOptions.mode of MSB (Ms Based) 129b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_CAPABILITIES_GNSS_MSB_BIT = (1<<6), 130b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel // supports startTracking/startBatching API with LocationOptions.mode of MSA (MS Assisted) 131b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_CAPABILITIES_GNSS_MSA_BIT = (1<<7), 132b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} LocationCapabilitiesBits; 133b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 134b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 135b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_TECHNOLOGY_TYPE_GNSS = 0, 136b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} LocationTechnologyType; 137b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 138b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel// Configures how GPS is locked when GPS is disabled (through GnssDisable) 139b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 140b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_GPS_LOCK_NONE = 0, // gps is not locked when GPS is disabled (GnssDisable) 141b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_GPS_LOCK_MO, // gps mobile originated (MO) is locked when GPS is disabled 142b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_GPS_LOCK_NI, // gps network initiated (NI) is locked when GPS is disabled 143b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_GPS_LOCK_MO_AND_NI,// gps MO and NI is locked when GPS is disabled 144b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfigGpsLock; 145b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 146b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel// SUPL version 147b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 148b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_SUPL_VERSION_1_0_0 = 1, 149b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_SUPL_VERSION_2_0_0, 150b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_SUPL_VERSION_2_0_2, 151b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfigSuplVersion; 152b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 153b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel// LTE Positioning Profile 154b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 155b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_LPP_PROFILE_RRLP_ON_LTE = 0, // RRLP on LTE (Default) 156b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_LPP_PROFILE_USER_PLANE, // LPP User Plane (UP) on LTE 157b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_LPP_PROFILE_CONTROL_PLANE, // LPP_Control_Plane (CP) 158b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_LPP_PROFILE_USER_PLANE_AND_CONTROL_PLANE, // Both LPP UP and CP 159b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfigLppProfile; 160b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 161b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel// Technology for LPPe Control Plane 162b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint16_t GnssConfigLppeControlPlaneMask; 163b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 164b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_LPPE_CONTROL_PLANE_DBH_BIT = (1<<0), // DBH 165b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_LPPE_CONTROL_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS 166b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfigLppeControlPlaneBits; 167b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 168b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel// Technology for LPPe User Plane 169b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint16_t GnssConfigLppeUserPlaneMask; 170b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 171b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_LPPE_USER_PLANE_DBH_BIT = (1<<0), // DBH 172b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_LPPE_USER_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS 173b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfigLppeUserPlaneBits; 174b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 175b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel// Positioning Protocol on A-GLONASS system 176b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint16_t GnssConfigAGlonassPositionProtocolMask; 177b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 178b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_RRC_CONTROL_PLANE_BIT = (1<<0), // RRC Control Plane 179b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_RRLP_USER_PLANE_BIT = (1<<1), // RRLP User Plane 180b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_LLP_USER_PLANE_BIT = (1<<2), // LPP User Plane 181b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_LLP_CONTROL_PLANE_BIT = (1<<3), // LPP Control Plane 182b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfigAGlonassPositionProtocolBits; 183b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 184b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 185b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_NO = 0, 186b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_YES, 187b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfigEmergencyPdnForEmergencySupl; 188b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 189b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 190b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_NO = 0, 191b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_YES, 192b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfigSuplEmergencyServices; 193b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 194b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint16_t GnssConfigSuplModeMask; 195b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 196b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_SUPL_MODE_MSB = (1<<0), 197b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_SUPL_MODE_MSA = (1<<1), 198b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfigSuplModeBits; 199b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 200b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint32_t GnssConfigFlagsMask; 201b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 202b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT = (1<<0), 203b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_FLAGS_SUPL_VERSION_VALID_BIT = (1<<1), 204b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_FLAGS_SET_ASSISTANCE_DATA_VALID_BIT = (1<<2), 205b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT = (1<<3), 206b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_FLAGS_LPPE_CONTROL_PLANE_VALID_BIT = (1<<4), 207b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_FLAGS_LPPE_USER_PLANE_VALID_BIT = (1<<5), 208b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT = (1<<6), 209b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_FLAGS_EM_PDN_FOR_EM_SUPL_VALID_BIT = (1<<7), 210b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_FLAGS_SUPL_EM_SERVICES_BIT = (1<<8), 211b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_CONFIG_FLAGS_SUPL_MODE_BIT = (1<<9), 212b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfigFlagsBits; 213b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 214b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 215b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_ENCODING_TYPE_NONE = 0, 216b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_ENCODING_TYPE_GSM_DEFAULT, 217b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_ENCODING_TYPE_UTF8, 218b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_ENCODING_TYPE_UCS2, 219b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssNiEncodingType; 220b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 221b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 222b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_TYPE_VOICE = 0, 223b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_TYPE_SUPL, 224b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_TYPE_CONTROL_PLANE, 225b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_TYPE_EMERGENCY_SUPL 226b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssNiType; 227b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 228b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint16_t GnssNiOptionsMask; 229b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 230b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_OPTIONS_NOTIFICATION = (1<<0), 231b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_OPTIONS_VERIFICATION = (1<<1), 232b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_OPTIONS_PRIVACY_OVERRIDE = (1<<2), 233b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssNiOptionsBits; 234b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 235b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 236b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_RESPONSE_ACCEPT = 1, 237b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_RESPONSE_DENY, 238b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_RESPONSE_NO_RESPONSE, 239b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_NI_RESPONSE_IGNORE, 240b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssNiResponse; 241b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 242b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 243b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SV_TYPE_UNKNOWN = 0, 244b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SV_TYPE_GPS, 245b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SV_TYPE_SBAS, 246b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SV_TYPE_GLONASS, 247b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SV_TYPE_QZSS, 248b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SV_TYPE_BEIDOU, 249b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SV_TYPE_GALILEO, 250b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssSvType; 251b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 252b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint16_t GnssSvOptionsMask; 253b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 254b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SV_OPTIONS_HAS_EPHEMER_BIT = (1<<0), 255b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SV_OPTIONS_HAS_ALMANAC_BIT = (1<<1), 256b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SV_OPTIONS_USED_IN_FIX_BIT = (1<<2), 257b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssSvOptionsBits; 258b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 259b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 260b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_ASSISTANCE_TYPE_SUPL = 0, 261b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_ASSISTANCE_TYPE_C2K, 262b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssAssistanceType; 263b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 264b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 265b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SUPL_MODE_STANDALONE = 0, 266b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SUPL_MODE_MSB, 267b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_SUPL_MODE_MSA, 268b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssSuplMode; 269b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 270b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint16_t GnssMeasurementsAdrStateMask; 271b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 272b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_UNKNOWN = 0, 273b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_VALID_BIT = (1<<0), 274b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_RESET_BIT = (1<<1), 275b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_CYCLE_SLIP_BIT = (1<<2), 276b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssMeasurementsAdrStateBits; 277b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 278b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint32_t GnssMeasurementsDataFlagsMask; 279b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 280b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_SV_ID_BIT = (1<<0), 281b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_SV_TYPE_BIT = (1<<1), 282b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_STATE_BIT = (1<<2), 283b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_BIT = (1<<3), 284b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_UNCERTAINTY_BIT = (1<<4), 285b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_CARRIER_TO_NOISE_BIT = (1<<5), 286b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_BIT = (1<<6), 287b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_UNCERTAINTY_BIT = (1<<7), 288b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_ADR_STATE_BIT = (1<<8), 289b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_ADR_BIT = (1<<9), 290b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_ADR_UNCERTAINTY_BIT = (1<<10), 291b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_CARRIER_FREQUENCY_BIT = (1<<11), 292b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_CARRIER_CYCLES_BIT = (1<<12), 293b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_BIT = (1<<13), 294b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_UNCERTAINTY_BIT = (1<<14), 295b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_MULTIPATH_INDICATOR_BIT = (1<<15), 296b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_DATA_SIGNAL_TO_NOISE_RATIO_BIT = (1<<16), 297b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssMeasurementsDataFlagsBits; 298b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 299b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint32_t GnssMeasurementsStateMask; 300b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 301b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_UNKNOWN_BIT = 0, 302b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_CODE_LOCK_BIT = (1<<0), 303b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_BIT_SYNC_BIT = (1<<1), 304b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_SUBFRAME_SYNC_BIT = (1<<2), 305b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_TOW_DECODED_BIT = (1<<3), 306b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_MSEC_AMBIGUOUS_BIT = (1<<4), 307b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_SYMBOL_SYNC_BIT = (1<<5), 308b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_GLO_STRING_SYNC_BIT = (1<<6), 309b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_GLO_TOD_DECODED_BIT = (1<<7), 310b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_BDS_D2_BIT_SYNC_BIT = (1<<8), 311b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_BDS_D2_SUBFRAME_SYNC_BIT = (1<<9), 312b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_GAL_E1BC_CODE_LOCK_BIT = (1<<10), 313b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_GAL_E1C_2ND_CODE_LOCK_BIT = (1<<11), 314b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_GAL_E1B_PAGE_SYNC_BIT = (1<<12), 315b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_STATE_SBAS_SYNC_BIT = (1<<13), 316b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssMeasurementsStateBits; 317b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 318b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 319b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_UNKNOWN = 0, 320b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_PRESENT, 321b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_NOT_PRESENT, 322b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssMeasurementsMultipathIndicator; 323b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 324b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint32_t GnssMeasurementsClockFlagsMask; 325b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 326b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_CLOCK_FLAGS_LEAP_SECOND_BIT = (1<<0), 327b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_BIT = (1<<1), 328b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_UNCERTAINTY_BIT = (1<<2), 329b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_CLOCK_FLAGS_FULL_BIAS_BIT = (1<<3), 330b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_BIT = (1<<4), 331b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_UNCERTAINTY_BIT = (1<<5), 332b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_BIT = (1<<6), 333b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_UNCERTAINTY_BIT = (1<<7), 334b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_MEASUREMENTS_CLOCK_FLAGS_HW_CLOCK_DISCONTINUITY_COUNT_BIT = (1<<8), 335b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssMeasurementsClockFlagsBits; 336b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 337b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint32_t GnssAidingDataSvMask; 338b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 339b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_EPHEMERIS = (1<<0), // ephemeris 340b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_ALMANAC = (1<<1), // almanac 341b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_HEALTH = (1<<2), // health 342b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_DIRECTION = (1<<3), // direction 343b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_STEER = (1<<4), // steer 344b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_ALMANAC_CORR = (1<<5), // almanac correction 345b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_BLACKLIST = (1<<6), // blacklist SVs 346b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_SA_DATA = (1<<7), // sensitivity assistance data 347b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_NO_EXIST = (1<<8), // SV does not exist 348b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_IONOSPHERE = (1<<9), // ionosphere correction 349b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_TIME = (1<<10),// reset satellite time 350b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssAidingDataSvBits; 351b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 352b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint32_t GnssAidingDataSvTypeMask; 353b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 354b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_TYPE_GPS = (1<<0), 355b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_TYPE_GLONASS = (1<<1), 356b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_TYPE_QZSS = (1<<2), 357b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_TYPE_BEIDOU = (1<<3), 358b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_SV_TYPE_GALILEO = (1<<4), 359b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssAidingDataSvTypeBits; 360b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 361b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 362b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssAidingDataSvMask svMask; // bitwise OR of GnssAidingDataSvBits 363b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssAidingDataSvTypeMask svTypeMask; // bitwise OR of GnssAidingDataSvTypeBits 364b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssAidingDataSv; 365b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 366b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint32_t GnssAidingDataCommonMask; 367b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 368b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_COMMON_POSITION = (1<<0), // position estimate 369b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_COMMON_TIME = (1<<1), // reset all clock values 370b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_COMMON_UTC = (1<<2), // UTC estimate 371b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_COMMON_RTI = (1<<3), // RTI 372b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_COMMON_FREQ_BIAS_EST = (1<<4), // frequency bias estimate 373b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GNSS_AIDING_DATA_COMMON_CELLDB = (1<<5), // all celldb info 374b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssAidingDataCommonBits; 375b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 376b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 377b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssAidingDataCommonMask mask; // bitwise OR of GnssAidingDataCommonBits 378b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssAidingDataCommon; 379b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 380b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 381b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel bool deleteAll; // if true, delete all aiding data and ignore other params 382b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssAidingDataSv sv; // SV specific aiding data 383b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssAidingDataCommon common; // common aiding data 384b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssAidingData; 385b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 386b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 387b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(Location) 388b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocationFlagsMask flags; // bitwise OR of LocationFlagsBits to mark which params are valid 389b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint64_t timestamp; // UTC timestamp for location fix, milliseconds since January 1, 1970 390b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double latitude; // in degrees 391b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double longitude; // in degrees 392b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double altitude; // in meters above the WGS 84 reference ellipsoid 393b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float speed; // in meters per second 394b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float bearing; // in degrees; range [0, 360) 395b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float accuracy; // in meters 396b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocationTechnologyMask techMask; 397b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} Location; 398b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 399b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 400b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(LocationOptions) 401b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t minInterval; // in milliseconds 402b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t minDistance; // in meters. if minDistance > 0, gnssSvCallback/gnssNmeaCallback/ 403b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel // gnssMeasurementsCallback may not be called 404b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssSuplMode mode; // Standalone/MS-Based/MS-Assisted 405b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} LocationOptions; 406b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 407b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 408b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GeofenceOption) 409b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GeofenceBreachTypeMask breachTypeMask; // bitwise OR of GeofenceBreachTypeBits 410b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t responsiveness; // in milliseconds 411b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t dwellTime; // in seconds 412b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GeofenceOption; 413b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 414b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 415b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GeofenceInfo) 416b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double latitude; // in degrees 417b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double longitude; // in degrees 418b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double radius; // in meters 419b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GeofenceInfo; 420b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 421b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 422b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GeofenceBreachNotification) 423b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t count; // number of ids in array 424b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t* ids; // array of ids that have breached 425b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel Location location; // location associated with breach 426b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GeofenceBreachType type; // type of breach 427b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint64_t timestamp; // timestamp of breach 428b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GeofenceBreachNotification; 429b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 430b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 431b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GeofenceBreachNotification) 432b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GeofenceStatusAvailable available; // GEOFENCE_STATUS_AVAILABILE_NO/_YES 433b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocationTechnologyType techType; // GNSS 434b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GeofenceStatusNotification; 435b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 436b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 437b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GnssLocationInfo) 438b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssLocationInfoFlagMask flags; // bitwise OR of GnssLocationInfoBits for param validity 439b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float altitudeMeanSeaLevel; // altitude wrt mean sea level 440b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float pdop; // position dilusion of precision 441b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float hdop; // horizontal dilusion of precision 442b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float vdop; // vertical dilusion of precision 443b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float magneticDeviation; // magnetic deviation 444b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float verAccuracy; // vertical accuracy in meters 445b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float speedAccuracy; // speed accuracy in meters/second 446b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float bearingAccuracy; // bearing accuracy in degrees (0 to 359.999) 447b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocationReliability horReliability; // horizontal reliability 448b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocationReliability verReliability; // vertical reliability 449b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float horUncEllipseSemiMajor; // horizontal elliptical accuracy semi-major axis 450b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float horUncEllipseSemiMinor; // horizontal elliptical accuracy semi-minor axis 451b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float horUncEllipseOrientAzimuth; // horizontal elliptical accuracy azimuth 452b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssLocationInfoNotification; 453b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 454b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 455b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GnssNiNotification) 456b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssNiType type; // type of NI (Voice, SUPL, Control Plane) 457b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssNiOptionsMask options; // bitwise OR of GnssNiOptionsBits 458b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t timeout; // time (seconds) to wait for user input 459b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssNiResponse timeoutResponse; // the response that should be sent when timeout expires 460b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel char requestor[GNSS_NI_REQUESTOR_MAX]; // the requestor that is making the request 461b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssNiEncodingType requestorEncoding; // the encoding type for requestor 462b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel char message[GNSS_NI_MESSAGE_ID_MAX]; // the message to show user 463b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssNiEncodingType messageEncoding; // the encoding type for message 464b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel char extras[GNSS_NI_MESSAGE_ID_MAX]; 465b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssNiNotification; 466b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 467b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 468b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GnssSv) 469b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint16_t svId; // Unique Identifier 470b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssSvType type; // type of SV (GPS, SBAS, GLONASS, QZSS, BEIDOU, GALILEO) 471b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float cN0Dbhz; // signal strength 472b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float elevation; // elevation of SV (in degrees) 473b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float azimuth; // azimuth of SV (in degrees) 474b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssSvOptionsMask gnssSvOptionsMask; // Bitwise OR of GnssSvOptionsBits 475b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssSv; 476b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 477b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 478b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GnssConfigSetAssistanceServer) 479b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssAssistanceType type; // SUPL or C2K 480b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel const char* hostName; // null terminated string 481b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t port; // port of server 482b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfigSetAssistanceServer; 483b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 484b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 485b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GnssMeasurementsData) 486b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssMeasurementsDataFlagsMask flags; // bitwise OR of GnssMeasurementsDataFlagsBits 487b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int16_t svId; 488b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssSvType svType; 489b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double timeOffsetNs; 490b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssMeasurementsStateMask stateMask; // bitwise OR of GnssMeasurementsStateBits 491b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int64_t receivedSvTimeNs; 492b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int64_t receivedSvTimeUncertaintyNs; 493b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double carrierToNoiseDbHz; 494b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double pseudorangeRateMps; 495b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double pseudorangeRateUncertaintyMps; 496b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssMeasurementsAdrStateMask adrStateMask; // bitwise OR of GnssMeasurementsAdrStateBits 497b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double adrMeters; 498b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double adrUncertaintyMeters; 499b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel float carrierFrequencyHz; 500b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int64_t carrierCycles; 501b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double carrierPhase; 502b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double carrierPhaseUncertainty; 503b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssMeasurementsMultipathIndicator multipathIndicator; 504b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double signalToNoiseRatioDb; 505b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssMeasurementsData; 506b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 507b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 508b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GnssMeasurementsClock) 509b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssMeasurementsClockFlagsMask flags; // bitwise OR of GnssMeasurementsClockFlagsBits 510b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int16_t leapSecond; 511b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int64_t timeNs; 512b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double timeUncertaintyNs; 513b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int64_t fullBiasNs; 514b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double biasNs; 515b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double biasUncertaintyNs; 516b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double driftNsps; 517b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel double driftUncertaintyNsps; 518b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t hwClockDiscontinuityCount; 519b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssMeasurementsClock; 520b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 521b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 522b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GnssSvNotification) 523b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t count; // number of SVs in the GnssSv array 524b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssSv gnssSvs[GNSS_SV_MAX]; // information on a number of SVs 525b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssSvNotification; 526b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 527b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 528b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GnssNmeaNotification) 529b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint64_t timestamp; // timestamp 530b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel const char* nmea; // nmea text 531b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t length; // length of the nmea text 532b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssNmeaNotification; 533b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 534b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 535b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GnssMeasurementsNotification) 536b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t count; // number of items in GnssMeasurements array 537b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssMeasurementsData measurements[GNSS_MEASUREMENTS_MAX]; 538b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssMeasurementsClock clock; // clock 539b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssMeasurementsNotification; 540b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 541b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 542b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(GnssConfig) 543b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssConfigFlagsMask flags; // bitwise OR of GnssConfigFlagsBits to mark which params are valid 544b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssConfigGpsLock gpsLock; 545b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssConfigSuplVersion suplVersion; 546b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssConfigSetAssistanceServer assistanceServer; 547b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssConfigLppProfile lppProfile; 548b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssConfigLppeControlPlaneMask lppeControlPlaneMask; 549b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssConfigLppeUserPlaneMask lppeUserPlaneMask; 550b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssConfigAGlonassPositionProtocolMask aGlonassPositionProtocolMask; 551b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssConfigEmergencyPdnForEmergencySupl emergencyPdnForEmergencySupl; 552b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssConfigSuplEmergencyServices suplEmergencyServices; 553b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssConfigSuplModeMask suplModeMask; //bitwise OR of GnssConfigSuplModeBits 554b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} GnssConfig; 555b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 556b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Provides the capabilities of the system 557b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel capabilities callback is called once soon after createInstance is called */ 558b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 559b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocationCapabilitiesMask capabilitiesMask // bitwise OR of LocationCapabilitiesBits 560b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> capabilitiesCallback; 561b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 562b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Used by tracking, batching, and miscellanous APIs 563b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback is called for every Tracking, Batching API, and Miscellanous API */ 564b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 565b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocationError err, // if not SUCCESS, then id is not valid 566b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t id // id to be associated to the request 567b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> responseCallback; 568b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 569b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Used by APIs that gets more than one LocationError in it's response 570b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel collectiveResponseCallback is called for every geofence API call. 571b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel ids array and LocationError array are only valid until collectiveResponseCallback returns. */ 572b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 573b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t count, // number of locations in arrays 574b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocationError* errs, // array of LocationError associated to the request 575b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t* ids // array of ids to be associated to the request 576b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> collectiveResponseCallback; 577b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 578b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Used for startTracking API, optional can be NULL 579b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel trackingCallback is called when delivering a location in a tracking session 580b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel broadcasted to all clients, no matter if a session has started by client */ 581b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 582b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel Location location 583b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> trackingCallback; 584b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 585b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Used for startBatching API, optional can be NULL 586b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel batchingCallback is called when delivering locations in a batching session. 587b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel broadcasted to all clients, no matter if a session has started by client */ 588b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 589b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t count, // number of locations in array 590b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel Location* location // array of locations 591b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> batchingCallback; 592b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 593b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Gives GNSS Location information, optional can be NULL 594b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssLocationInfoCallback is called only during a tracking session 595b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel broadcasted to all clients, no matter if a session has started by client */ 596b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 597b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssLocationInfoNotification gnssLocationInfoNotification 598b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> gnssLocationInfoCallback; 599b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 600b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Used for addGeofences API, optional can be NULL 601b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel geofenceBreachCallback is called when any number of geofences have a state change */ 602b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 603b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GeofenceBreachNotification geofenceBreachNotification 604b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> geofenceBreachCallback; 605b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 606b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Used for addGeofences API, optional can be NULL 607b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel geofenceStatusCallback is called when any number of geofences have a status change */ 608b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 609b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GeofenceStatusNotification geofenceStatusNotification 610b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> geofenceStatusCallback; 611b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 612b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Network Initiated request, optional can be NULL 613b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel This callback should be responded to by calling gnssNiResponse */ 614b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 615b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t id, // id that should be used to respond by calling gnssNiResponse 616b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssNiNotification gnssNiNotification 617b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> gnssNiCallback; 618b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 619b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Gives GNSS SV information, optional can be NULL 620b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssSvCallback is called only during a tracking session 621b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel broadcasted to all clients, no matter if a session has started by client */ 622b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 623b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssSvNotification gnssSvNotification 624b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> gnssSvCallback; 625b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 626b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Gives GNSS NMEA data, optional can be NULL 627b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssNmeaCallback is called only during a tracking session 628b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel broadcasted to all clients, no matter if a session has started by client */ 629b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 630b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssNmeaNotification gnssNmeaNotification 631b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> gnssNmeaCallback; 632b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 633b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Gives GNSS Measurements information, optional can be NULL 634b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssMeasurementsCallback is called only during a tracking session 635b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel broadcasted to all clients, no matter if a session has started by client */ 636b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 637b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel GnssMeasurementsNotification gnssMeasurementsNotification 638b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel)> gnssMeasurementsCallback; 639b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 640b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 641b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(LocationCallbacks) 642b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel capabilitiesCallback capabilitiesCb; // mandatory 643b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback responseCb; // mandatory 644b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel collectiveResponseCallback collectiveResponseCb; // mandatory 645b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel trackingCallback trackingCb; // optional 646b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel batchingCallback batchingCb; // optional 647b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel geofenceBreachCallback geofenceBreachCb; // optional 648b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel geofenceStatusCallback geofenceStatusCb; // optional 649b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssLocationInfoCallback gnssLocationInfoCb; // optional 650b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssNiCallback gnssNiCb; // optional 651b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssSvCallback gnssSvCb; // optional 652b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssNmeaCallback gnssNmeaCb; // optional 653b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssMeasurementsCallback gnssMeasurementsCb; // optional 654b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} LocationCallbacks; 655b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 656b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass LocationAPI 657b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 658b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 659b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocationAPI(); 660b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel ~LocationAPI(); 661b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 662b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelpublic: 663b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* creates an instance to LocationAPI object. 664b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel Will return NULL if mandatory parameters are invalid or if the maximum number 665b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel of instances have been reached */ 666b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel static LocationAPI* createInstance(LocationCallbacks&); 667b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 668b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* destroy/cleans up the instance, which should be called when LocationAPI object is 669b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel no longer needed. LocationAPI* returned from createInstance will no longer valid 670b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel after destroy is called */ 671b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void destroy(); 672b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 673b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* updates/changes the callbacks that will be called. 674b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mandatory callbacks must be present for callbacks to be successfully updated 675b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel no return value */ 676b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void updateCallbacks(LocationCallbacks&); 677b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 678b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* ================================== TRACKING ================================== */ 679b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 680b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* startTracking starts a tracking session, which returns a session id that will be 681b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel used by the other tracking APIs and also in the responseCallback to match command 682b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel with response. locations are reported on the trackingCallback passed in createInstance 683b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel periodically according to LocationOptions. 684b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback returns: 685b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if session was successfully started 686b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ALREADY_STARTED if a startTracking session is already in progress 687b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_CALLBACK_MISSING if no trackingCallback was passed in createInstance 688b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_INVALID_PARAMETER if LocationOptions parameter is invalid */ 689b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t startTracking(LocationOptions&); // returns session id 690b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 691b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* stopTracking stops a tracking session associated with id parameter. 692b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback returns: 693b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful 694b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN if id is not associated with a tracking session */ 695b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void stopTracking(uint32_t id); 696b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 697b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* updateTrackingOptions changes the LocationOptions of a tracking session associated with id 698b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback returns: 699b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful 700b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_INVALID_PARAMETER if LocationOptions parameters are invalid 701b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN if id is not associated with a tracking session */ 702b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void updateTrackingOptions(uint32_t id, LocationOptions&); 703b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 704b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* ================================== BATCHING ================================== */ 705b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 706b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* startBatching starts a batching session, which returns a session id that will be 707b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel used by the other batching APIs and also in the responseCallback to match command 708b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel with response. locations are reported on the batchingCallback passed in createInstance 709b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel periodically according to LocationOptions. A batching session starts tracking on 710b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel the low power processor and delivers them in batches by the batchingCallback when 711b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel the batch is full or when getBatchedLocations is called. This allows for the processor 712b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel that calls this API to sleep when the low power processor can batch locations in the 713b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel backgroup and wake up the processor calling the API only when the batch is full, thus 714b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel saving power 715b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback returns: 716b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if session was successful 717b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ALREADY_STARTED if a startBatching session is already in progress 718b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_CALLBACK_MISSING if no batchingCallback was passed in createInstance 719b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_INVALID_PARAMETER if a parameter is invalid 720b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_NOT_SUPPORTED if batching is not supported */ 721b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t startBatching(LocationOptions&); // returns session id 722b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 723b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* stopBatching stops a batching session associated with id parameter. 724b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback returns: 725b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful 726b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN if id is not associated with batching session */ 727b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void stopBatching(uint32_t id); 728b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 729b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* updateBatchingOptions changes the LocationOptions of a batching session associated with id 730b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback returns: 731b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful 732b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_INVALID_PARAMETER if LocationOptions parameters are invalid 733b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN if id is not associated with a batching session */ 734b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void updateBatchingOptions(uint32_t id, LocationOptions&); 735b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 736b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* getBatchedLocations gets a number of locations that are currently stored/batched 737b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel on the low power processor, delivered by the batchingCallback passed in createInstance. 738b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel Location are then deleted from the batch stored on the low power processor. 739b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback returns: 740b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful, will be followed by batchingCallback call 741b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_CALLBACK_MISSING if no batchingCallback was passed in createInstance 742b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN if id is not associated with a batching session */ 743b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void getBatchedLocations(uint32_t id, size_t count); 744b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 745b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* ================================== GEOFENCE ================================== */ 746b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 747b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* addGeofences adds any number of geofences and returns an array of geofence ids that 748b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel will be used by the other geofence APIs and also in the collectiveResponseCallback to 749b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel match command with response. The geofenceBreachCallback will deliver the status of each 750b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel geofence according to the GeofenceOption for each. The geofence id array returned will 751b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel be valid until the collectiveResponseCallback is called and has returned. 752b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel collectiveResponseCallback returns: 753b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if session was successful 754b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_CALLBACK_MISSING if no geofenceBreachCallback 755b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_INVALID_PARAMETER if any parameters are invalid 756b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_NOT_SUPPORTED if geofence is not supported */ 757b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t* addGeofences(size_t count, GeofenceOption*, GeofenceInfo*); // returns id array 758b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 759b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* removeGeofences removes any number of geofences. Caller should delete ids array after 760b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel removeGeofences returneds. 761b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel collectiveResponseCallback returns: 762b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful 763b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN if id is not associated with a geofence session */ 764b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void removeGeofences(size_t count, uint32_t* ids); 765b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 766b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* modifyGeofences modifies any number of geofences. Caller should delete ids array after 767b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel modifyGeofences returns. 768b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel collectiveResponseCallback returns: 769b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful 770b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN if id is not associated with a geofence session 771b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_INVALID_PARAMETER if any parameters are invalid */ 772b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void modifyGeofences(size_t count, uint32_t* ids, GeofenceOption* options); 773b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 774b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* pauseGeofences pauses any number of geofences, which is similar to removeGeofences, 775b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel only that they can be resumed at any time. Caller should delete ids array after 776b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel pauseGeofences returns. 777b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel collectiveResponseCallback returns: 778b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful 779b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN if id is not associated with a geofence session */ 780b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void pauseGeofences(size_t count, uint32_t* ids); 781b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 782b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* resumeGeofences resumes any number of geofences that are currently paused. Caller should 783b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel delete ids array after resumeGeofences returns. 784b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel collectiveResponseCallback returns: 785b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful 786b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN if id is not associated with a geofence session */ 787b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void resumeGeofences(size_t count, uint32_t* ids); 788b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 789b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* ================================== GNSS ====================================== */ 790b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 791b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* gnssNiResponse is called in response to a gnssNiCallback. 792b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback returns: 793b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if session was successful 794b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_INVALID_PARAMETER if any parameters in GnssNiResponse are invalid 795b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN if id does not match a gnssNiCallback */ 796b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void gnssNiResponse(uint32_t id, GnssNiResponse response); 797b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 798b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 799b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef struct { 800b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel size_t size; // set to sizeof(LocationControlCallbacks) 801b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback responseCb; // mandatory 802b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel collectiveResponseCallback collectiveResponseCb; // mandatory 803b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} LocationControlCallbacks; 804b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 805b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass LocationControlAPI 806b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 807b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 808b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocationControlAPI(); 809b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel ~LocationControlAPI(); 810b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 811b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelpublic: 812b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* creates an instance to LocationControlAPI object. 813b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel Will return NULL if mandatory parameters are invalid or if the maximum number 814b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel of instances have been reached. Only once instance allowed */ 815b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel static LocationControlAPI* createInstance(LocationControlCallbacks&); 816b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 817b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* destroy/cleans up the instance, which should be called when LocationControlAPI object is 818b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel no longer needed. LocationControlAPI* returned from createInstance will no longer valid 819b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel after destroy is called */ 820b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void destroy(); 821b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 822b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* enable will enable specific location technology to be used for calculation locations and 823b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel will effectively start a control session if call is successful, which returns a session id 824b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel that will be returned in responseCallback to match command with response. The session id is 825b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel also needed to call the disable command. 826b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel This effect is global for all clients of LocationAPI 827b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback returns: 828b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful 829b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ALREADY_STARTED if an enable was already called for this techType 830b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_INVALID_PARAMETER if any parameters are invalid 831b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_GENERAL_FAILURE if failure for any other reason */ 832b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t enable(LocationTechnologyType techType); 833b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 834b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* disable will disable specific location technology to be used for calculation locations and 835b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel effectively ends the control session if call is successful. 836b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel id parameter is the session id that was returned in enable responseCallback for techType. 837b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel The session id is no longer valid after disable's responseCallback returns success. 838b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel This effect is global for all clients of LocationAPI 839b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback returns: 840b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful 841b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_ID_UNKNOWN if id was not returned from responseCallback from enable 842b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_GENERAL_FAILURE if failure for any other reason */ 843b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void disable(uint32_t id); 844b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 845b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* gnssUpdateConfig updates the gnss specific configuration, which returns a session id array 846b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel with an id for each of the bits set in GnssConfig.flags, order from low bits to high bits. 847b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel The response for each config that is set will be returned in collectiveResponseCallback. 848b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel The session id array returned will be valid until the collectiveResponseCallback is called 849b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel and has returned. This effect is global for all clients of LocationAPI 850b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel collectiveResponseCallback returns: 851b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if session was successful 852b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_INVALID_PARAMETER if any other parameters are invalid 853b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_GENERAL_FAILURE if failure for any other reason */ 854b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t* gnssUpdateConfig(GnssConfig config); 855b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 856b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* delete specific gnss aiding data for testing, which returns a session id 857b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel that will be returned in responseCallback to match command with response. 858b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel Only allowed in userdebug builds. This effect is global for all clients of LocationAPI 859b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel responseCallback returns: 860b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_SUCCESS if successful 861b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_INVALID_PARAMETER if any parameters are invalid 862b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOCATION_ERROR_NOT_SUPPORTED if build is not userdebug */ 863b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel uint32_t gnssDeleteAidingData(GnssAidingData& data); 864b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 865b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 866b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#endif /* LOCATION_H */ 867