blob: 1164bbd08f2c29db1106c8c03645dac6079a50fd [file] [log] [blame]
Wei Chen87a7fc02019-12-19 09:58:09 -08001/* Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
Katz Yamada0fc49e82018-02-28 11:22:58 -08002 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
12 * * Neither the name of The Linux Foundation nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef LOCATIONDATATYPES_H
30#define LOCATIONDATATYPES_H
31
32#include <vector>
33#include <stdint.h>
34#include <functional>
35#include <list>
Harikrishnan Hariharan59269e12018-07-01 00:43:09 +053036#include <string.h>
Katz Yamada0fc49e82018-02-28 11:22:58 -080037
38#define GNSS_NI_REQUESTOR_MAX (256)
39#define GNSS_NI_MESSAGE_ID_MAX (2048)
Naresh Munagala8d22b602019-05-07 12:32:34 +053040#define GNSS_SV_MAX (128)
Katz Yamada0fc49e82018-02-28 11:22:58 -080041#define GNSS_MEASUREMENTS_MAX (64)
42#define GNSS_UTC_TIME_OFFSET (3657)
43
Nilesh Gharde554985a2020-01-28 15:05:44 +053044#define GNSS_BUGREPORT_GPS_MIN (1)
45#define GNSS_BUGREPORT_SBAS_MIN (120)
46#define GNSS_BUGREPORT_GLO_MIN (1)
47#define GNSS_BUGREPORT_QZSS_MIN (193)
48#define GNSS_BUGREPORT_BDS_MIN (1)
49#define GNSS_BUGREPORT_GAL_MIN (1)
50#define GNSS_BUGREPORT_NAVIC_MIN (1)
Katz Yamada0fc49e82018-02-28 11:22:58 -080051
52typedef enum {
53 LOCATION_ERROR_SUCCESS = 0,
54 LOCATION_ERROR_GENERAL_FAILURE,
55 LOCATION_ERROR_CALLBACK_MISSING,
56 LOCATION_ERROR_INVALID_PARAMETER,
57 LOCATION_ERROR_ID_EXISTS,
58 LOCATION_ERROR_ID_UNKNOWN,
59 LOCATION_ERROR_ALREADY_STARTED,
60 LOCATION_ERROR_GEOFENCES_AT_MAX,
61 LOCATION_ERROR_NOT_SUPPORTED
62} LocationError;
63
64// Flags to indicate which values are valid in a Location
65typedef uint16_t LocationFlagsMask;
66typedef enum {
67 LOCATION_HAS_LAT_LONG_BIT = (1<<0), // location has valid latitude and longitude
68 LOCATION_HAS_ALTITUDE_BIT = (1<<1), // location has valid altitude
69 LOCATION_HAS_SPEED_BIT = (1<<2), // location has valid speed
70 LOCATION_HAS_BEARING_BIT = (1<<3), // location has valid bearing
71 LOCATION_HAS_ACCURACY_BIT = (1<<4), // location has valid accuracy
72 LOCATION_HAS_VERTICAL_ACCURACY_BIT = (1<<5), // location has valid vertical accuracy
73 LOCATION_HAS_SPEED_ACCURACY_BIT = (1<<6), // location has valid speed accuracy
74 LOCATION_HAS_BEARING_ACCURACY_BIT = (1<<7), // location has valid bearing accuracy
haohuang17015dd2018-04-16 15:12:49 +080075 LOCATION_HAS_SPOOF_MASK = (1<<8), // location has valid spoof mask
Katz Yamada0fc49e82018-02-28 11:22:58 -080076} LocationFlagsBits;
77
78typedef uint16_t LocationTechnologyMask;
79typedef enum {
80 LOCATION_TECHNOLOGY_GNSS_BIT = (1<<0), // location was calculated using GNSS
81 LOCATION_TECHNOLOGY_CELL_BIT = (1<<1), // location was calculated using Cell
82 LOCATION_TECHNOLOGY_WIFI_BIT = (1<<2), // location was calculated using WiFi
83 LOCATION_TECHNOLOGY_SENSORS_BIT = (1<<3), // location was calculated using Sensors
84} LocationTechnologyBits;
85
haohuang17015dd2018-04-16 15:12:49 +080086typedef uint32_t LocationSpoofMask;
87typedef enum {
88 LOCATION_POSTION_SPOOFED = (1<<0), // location position spoofed
89 LOCATION_TIME_SPOOFED = (1<<1), // location time spoofed
90 LOCATION_NAVIGATION_DATA_SPOOFED = (1<<2), // location navigation data spoofed
91} LocationSpoofBits;
92
Katz Yamada0fc49e82018-02-28 11:22:58 -080093typedef enum {
94 LOCATION_RELIABILITY_NOT_SET = 0,
95 LOCATION_RELIABILITY_VERY_LOW,
96 LOCATION_RELIABILITY_LOW,
97 LOCATION_RELIABILITY_MEDIUM,
98 LOCATION_RELIABILITY_HIGH,
99} LocationReliability;
100
101typedef uint32_t GnssLocationNavSolutionMask;
102typedef enum {
103 LOCATION_SBAS_CORRECTION_IONO_BIT = (1<<0), // SBAS ionospheric correction is used
104 LOCATION_SBAS_CORRECTION_FAST_BIT = (1<<1), // SBAS fast correction is used
105 LOCATION_SBAS_CORRECTION_LONG_BIT = (1<<2), // SBAS long-tem correction is used
106 LOCATION_SBAS_INTEGRITY_BIT = (1<<3), // SBAS integrity information is used
107 LOCATION_NAV_CORRECTION_DGNSS_BIT = (1<<4), // Position Report is DGNSS corrected
108 LOCATION_NAV_CORRECTION_RTK_BIT = (1<<5), // Position Report is RTK corrected
109 LOCATION_NAV_CORRECTION_PPP_BIT = (1<<6) // Position Report is PPP corrected
110} GnssLocationNavSolutionBits;
111
112typedef uint32_t GnssLocationPosTechMask;
113typedef enum {
114 LOCATION_POS_TECH_DEFAULT_BIT = 0,
115 LOCATION_POS_TECH_SATELLITE_BIT = (1<<0),
116 LOCATION_POS_TECH_CELLID_BIT = (1<<1),
117 LOCATION_POS_TECH_WIFI_BIT = (1<<2),
118 LOCATION_POS_TECH_SENSORS_BIT = (1<<3),
119 LOCATION_POS_TECH_REFERENCE_LOCATION_BIT = (1<<4),
120 LOCATION_POS_TECH_INJECTED_COARSE_POSITION_BIT = (1<<5),
121 LOCATION_POS_TECH_AFLT_BIT = (1<<6),
122 LOCATION_POS_TECH_HYBRID_BIT = (1<<7),
123 LOCATION_POS_TECH_PPE_BIT = (1<<8)
124} GnssLocationPosTechBits;
125
126typedef uint32_t GnssLocationPosDataMask;
127typedef enum {
128 LOCATION_NAV_DATA_HAS_LONG_ACCEL_BIT = (1<<0), // Navigation data has Forward Acceleration
129 LOCATION_NAV_DATA_HAS_LAT_ACCEL_BIT = (1<<1), // Navigation data has Sideward Acceleration
130 LOCATION_NAV_DATA_HAS_VERT_ACCEL_BIT = (1<<2), // Navigation data has Vertical Acceleration
131 LOCATION_NAV_DATA_HAS_YAW_RATE_BIT = (1<<3), // Navigation data has Heading Rate
Naresh Munagala02cddf02018-06-21 10:44:51 +0530132 LOCATION_NAV_DATA_HAS_PITCH_BIT = (1<<4), // Navigation data has Body pitch
133 // Navigation data has Forward Acceleration uncertainty
134 LOCATION_NAV_DATA_HAS_LONG_ACCEL_UNC_BIT = (1<<5),
135 // Navigation data has Sideward Acceleration uncertainty
136 LOCATION_NAV_DATA_HAS_LAT_ACCEL_UNC_BIT = (1<<6),
137 // Navigation data has Vertical Acceleration uncertainty
138 LOCATION_NAV_DATA_HAS_VERT_ACCEL_UNC_BIT = (1<<7),
139 // Navigation data has Heading Rate uncertainty
140 LOCATION_NAV_DATA_HAS_YAW_RATE_UNC_BIT = (1<<8),
141 // Navigation data has Body pitch uncertainty
142 LOCATION_NAV_DATA_HAS_PITCH_UNC_BIT = (1<<9)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800143} GnssLocationPosDataBits;
144
Naresh Munagalaaf069602020-02-17 06:33:10 +0530145typedef uint32_t GnssLocationPosDataMaskExt;
146typedef enum {
147 // Navigation data has pitch rate
148 LOCATION_NAV_DATA_HAS_PITCH_RATE_BIT = (1<<0),
149 // Navigation data has body pitch rate uncertainty
150 LOCATION_NAV_DATA_HAS_PITCH_RATE_UNC_BIT = (1<<1),
151 // Navigation data has body roll
152 LOCATION_NAV_DATA_HAS_ROLL_BIT = (1<<2),
153 // Navigation data has body roll uncertainty
154 LOCATION_NAV_DATA_HAS_ROLL_UNC_BIT = (1<<3),
155 // Navigation data has body rate roll
156 LOCATION_NAV_DATA_HAS_ROLL_RATE_BIT = (1<<4),
157 // Navigation data has body roll rate uncertainty
158 LOCATION_NAV_DATA_HAS_ROLL_RATE_UNC_BIT = (1<<5),
159 // Navigation data has body yaw
160 LOCATION_NAV_DATA_HAS_YAW_BIT = (1<<6),
161 // Navigation data has body roll uncertainty
162 LOCATION_NAV_DATA_HAS_YAW_UNC_BIT = (1<<7)
163} GnssLocationPosDataBitsExt;
164
Katz Yamada0fc49e82018-02-28 11:22:58 -0800165typedef uint32_t GnssLocationInfoFlagMask;
166typedef enum {
167 GNSS_LOCATION_INFO_ALTITUDE_MEAN_SEA_LEVEL_BIT = (1<<0), // valid altitude mean sea level
168 GNSS_LOCATION_INFO_DOP_BIT = (1<<1), // valid pdop, hdop, and vdop
169 GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT = (1<<2), // valid magnetic deviation
170 GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT = (1<<3), // valid horizontal reliability
171 GNSS_LOCATION_INFO_VER_RELIABILITY_BIT = (1<<4), // valid vertical reliability
172 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MAJOR_BIT = (1<<5), // valid elipsode semi major
173 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MINOR_BIT = (1<<6), // valid elipsode semi minor
174 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_AZIMUTH_BIT = (1<<7), // valid accuracy elipsode azimuth
Wei Chen7c797102019-04-30 15:02:43 -0700175 GNSS_LOCATION_INFO_GNSS_SV_USED_DATA_BIT = (1<<8), // valid svUsedInPosition,
176 // numOfMeasReceived
177 // and measUsageInfo
Katz Yamada0fc49e82018-02-28 11:22:58 -0800178 GNSS_LOCATION_INFO_NAV_SOLUTION_MASK_BIT = (1<<9), // valid navSolutionMask
179 GNSS_LOCATION_INFO_POS_TECH_MASK_BIT = (1<<10),// valid LocPosTechMask
180 GNSS_LOCATION_INFO_SV_SOURCE_INFO_BIT = (1<<11),// valid LocSvInfoSource
181 GNSS_LOCATION_INFO_POS_DYNAMICS_DATA_BIT = (1<<12),// valid position dynamics data
Naresh Munagalaaf069602020-02-17 06:33:10 +0530182 // and Position Dynamics Ext
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700183 GNSS_LOCATION_INFO_EXT_DOP_BIT = (1<<13),// valid gdop, tdop
184 GNSS_LOCATION_INFO_NORTH_STD_DEV_BIT = (1<<14),// valid North standard deviation
185 GNSS_LOCATION_INFO_EAST_STD_DEV_BIT = (1<<15),// valid East standard deviation
186 GNSS_LOCATION_INFO_NORTH_VEL_BIT = (1<<16),// valid North Velocity
187 GNSS_LOCATION_INFO_EAST_VEL_BIT = (1<<17),// valid East Velocity
188 GNSS_LOCATION_INFO_UP_VEL_BIT = (1<<18),// valid Up Velocity
189 GNSS_LOCATION_INFO_NORTH_VEL_UNC_BIT = (1<<19),// valid North Velocity Uncertainty
190 GNSS_LOCATION_INFO_EAST_VEL_UNC_BIT = (1<<20),// valid East Velocity Uncertainty
191 GNSS_LOCATION_INFO_UP_VEL_UNC_BIT = (1<<21),// valid Up Velocity Uncertainty
192 GNSS_LOCATION_INFO_LEAP_SECONDS_BIT = (1<<22),// valid leap seconds
Wei Chen7c797102019-04-30 15:02:43 -0700193 GNSS_LOCATION_INFO_TIME_UNC_BIT = (1<<23),// valid time uncertainty
Wei Chena9b8abd2019-04-19 15:21:27 -0700194 GNSS_LOCATION_INFO_NUM_SV_USED_IN_POSITION_BIT = (1<<24), // number of SV used in position
195 GNSS_LOCATION_INFO_CALIBRATION_CONFIDENCE_BIT = (1<<25), // valid sensor cal confidence
196 GNSS_LOCATION_INFO_CALIBRATION_STATUS_BIT = (1<<26), // valid sensor cal status
Wei Chena28f8132019-07-18 15:50:55 -0700197 GNSS_LOCATION_INFO_OUTPUT_ENG_TYPE_BIT = (1<<27), // valid output engine type
198 GNSS_LOCATION_INFO_OUTPUT_ENG_MASK_BIT = (1<<28), // valid output engine mask
Wei Chen2f8ef912020-02-14 14:48:53 -0800199 GNSS_LOCATION_INFO_CONFORMITY_INDEX_BIT = (1<<29), // valid conformity index
Wei Chen6fea13b2020-02-21 16:58:58 -0800200 GNSS_LOCATION_INFO_LLA_VRP_BASED_BIT = (1<<30), // valid VRP-based lat/long/alt
201 GNSS_LOCATION_INFO_ENU_VELOCITY_VRP_BASED_BIT = (1<<31), // VRP-based east/north/up vel
Katz Yamada0fc49e82018-02-28 11:22:58 -0800202} GnssLocationInfoFlagBits;
203
204typedef enum {
205 GEOFENCE_BREACH_ENTER = 0,
206 GEOFENCE_BREACH_EXIT,
207 GEOFENCE_BREACH_DWELL_IN,
208 GEOFENCE_BREACH_DWELL_OUT,
209 GEOFENCE_BREACH_UNKNOWN,
210} GeofenceBreachType;
211
212typedef uint16_t GeofenceBreachTypeMask;
213typedef enum {
214 GEOFENCE_BREACH_ENTER_BIT = (1<<0),
215 GEOFENCE_BREACH_EXIT_BIT = (1<<1),
216 GEOFENCE_BREACH_DWELL_IN_BIT = (1<<2),
217 GEOFENCE_BREACH_DWELL_OUT_BIT = (1<<3),
218} GeofenceBreachTypeBits;
219
220typedef enum {
221 GEOFENCE_STATUS_AVAILABILE_NO = 0,
222 GEOFENCE_STATUS_AVAILABILE_YES,
223} GeofenceStatusAvailable;
224
225typedef uint32_t LocationCapabilitiesMask;
226typedef enum {
227 // supports startTracking API with minInterval param
228 LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT = (1<<0),
229 // supports startBatching API with minInterval param
230 LOCATION_CAPABILITIES_TIME_BASED_BATCHING_BIT = (1<<1),
231 // supports startTracking API with minDistance param
232 LOCATION_CAPABILITIES_DISTANCE_BASED_TRACKING_BIT = (1<<2),
233 // supports startBatching API with minDistance param
234 LOCATION_CAPABILITIES_DISTANCE_BASED_BATCHING_BIT = (1<<3),
235 // supports addGeofences API
236 LOCATION_CAPABILITIES_GEOFENCE_BIT = (1<<4),
237 // supports GnssMeasurementsCallback
238 LOCATION_CAPABILITIES_GNSS_MEASUREMENTS_BIT = (1<<5),
239 // supports startTracking/startBatching API with LocationOptions.mode of MSB (Ms Based)
240 LOCATION_CAPABILITIES_GNSS_MSB_BIT = (1<<6),
241 // supports startTracking/startBatching API with LocationOptions.mode of MSA (MS Assisted)
242 LOCATION_CAPABILITIES_GNSS_MSA_BIT = (1<<7),
243 // supports debug nmea sentences in the debugNmeaCallback
244 LOCATION_CAPABILITIES_DEBUG_NMEA_BIT = (1<<8),
245 // support outdoor trip batching
Dante Russo271cfd82018-06-04 16:55:56 -0700246 LOCATION_CAPABILITIES_OUTDOOR_TRIP_BATCHING_BIT = (1<<9),
247 // support constellation enablement
248 LOCATION_CAPABILITIES_CONSTELLATION_ENABLEMENT_BIT = (1<<10),
249 // support agpm
250 LOCATION_CAPABILITIES_AGPM_BIT = (1<<11),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800251} LocationCapabilitiesBits;
252
253typedef enum {
254 LOCATION_TECHNOLOGY_TYPE_GNSS = 0,
255} LocationTechnologyType;
256
257// Configures how GPS is locked when GPS is disabled (through GnssDisable)
Hoss Zhou11035502018-12-20 15:05:08 +0800258enum {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800259 GNSS_CONFIG_GPS_LOCK_NONE = 0, // gps is not locked when GPS is disabled (GnssDisable)
260 GNSS_CONFIG_GPS_LOCK_MO, // gps mobile originated (MO) is locked when GPS is disabled
261 GNSS_CONFIG_GPS_LOCK_NI, // gps network initiated (NI) is locked when GPS is disabled
262 GNSS_CONFIG_GPS_LOCK_MO_AND_NI,// gps MO and NI is locked when GPS is disabled
Hoss Zhou11035502018-12-20 15:05:08 +0800263};
264typedef int32_t GnssConfigGpsLock;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800265
266// SUPL version
267typedef enum {
268 GNSS_CONFIG_SUPL_VERSION_1_0_0 = 1,
269 GNSS_CONFIG_SUPL_VERSION_2_0_0,
270 GNSS_CONFIG_SUPL_VERSION_2_0_2,
271} GnssConfigSuplVersion;
272
273// LTE Positioning Profile
274typedef enum {
275 GNSS_CONFIG_LPP_PROFILE_RRLP_ON_LTE = 0, // RRLP on LTE (Default)
276 GNSS_CONFIG_LPP_PROFILE_USER_PLANE, // LPP User Plane (UP) on LTE
277 GNSS_CONFIG_LPP_PROFILE_CONTROL_PLANE, // LPP_Control_Plane (CP)
278 GNSS_CONFIG_LPP_PROFILE_USER_PLANE_AND_CONTROL_PLANE, // Both LPP UP and CP
279} GnssConfigLppProfile;
280
281// Technology for LPPe Control Plane
282typedef uint16_t GnssConfigLppeControlPlaneMask;
283typedef enum {
284 GNSS_CONFIG_LPPE_CONTROL_PLANE_DBH_BIT = (1<<0), // DBH
285 GNSS_CONFIG_LPPE_CONTROL_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS
286 GNSS_CONFIG_LPPE_CONTROL_PLANE_SRN_AP_MEASUREMENTS_BIT = (1<<2), // SRN_AP_MEASUREMENTS
287 GNSS_CONFIG_LPPE_CONTROL_PLANE_SENSOR_BARO_MEASUREMENTS_BIT = (1<<3),
288 // SENSOR_BARO_MEASUREMENTS
289} GnssConfigLppeControlPlaneBits;
290
291// Technology for LPPe User Plane
292typedef uint16_t GnssConfigLppeUserPlaneMask;
293typedef enum {
294 GNSS_CONFIG_LPPE_USER_PLANE_DBH_BIT = (1<<0), // DBH
295 GNSS_CONFIG_LPPE_USER_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS
296 GNSS_CONFIG_LPPE_USER_PLANE_SRN_AP_MEASUREMENTS_BIT = (1<<2), // SRN_AP_MEASUREMENTS
297 GNSS_CONFIG_LPPE_USER_PLANE_SENSOR_BARO_MEASUREMENTS_BIT = (1<<3),
298 // SENSOR_BARO_MEASUREMENTS
299} GnssConfigLppeUserPlaneBits;
300
301// Positioning Protocol on A-GLONASS system
302typedef uint16_t GnssConfigAGlonassPositionProtocolMask;
303typedef enum {
304 GNSS_CONFIG_RRC_CONTROL_PLANE_BIT = (1<<0), // RRC Control Plane
305 GNSS_CONFIG_RRLP_USER_PLANE_BIT = (1<<1), // RRLP User Plane
306 GNSS_CONFIG_LLP_USER_PLANE_BIT = (1<<2), // LPP User Plane
307 GNSS_CONFIG_LLP_CONTROL_PLANE_BIT = (1<<3), // LPP Control Plane
308} GnssConfigAGlonassPositionProtocolBits;
309
310typedef enum {
311 GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_NO = 0,
312 GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_YES,
313} GnssConfigEmergencyPdnForEmergencySupl;
314
315typedef enum {
316 GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_NO = 0,
317 GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_YES,
318} GnssConfigSuplEmergencyServices;
319
320typedef uint16_t GnssConfigSuplModeMask;
321typedef enum {
322 GNSS_CONFIG_SUPL_MODE_MSB_BIT = (1<<0),
323 GNSS_CONFIG_SUPL_MODE_MSA_BIT = (1<<1),
324} GnssConfigSuplModeBits;
325
326typedef uint32_t GnssConfigFlagsMask;
327typedef enum {
328 GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT = (1<<0),
329 GNSS_CONFIG_FLAGS_SUPL_VERSION_VALID_BIT = (1<<1),
330 GNSS_CONFIG_FLAGS_SET_ASSISTANCE_DATA_VALID_BIT = (1<<2),
331 GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT = (1<<3),
332 GNSS_CONFIG_FLAGS_LPPE_CONTROL_PLANE_VALID_BIT = (1<<4),
333 GNSS_CONFIG_FLAGS_LPPE_USER_PLANE_VALID_BIT = (1<<5),
334 GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT = (1<<6),
335 GNSS_CONFIG_FLAGS_EM_PDN_FOR_EM_SUPL_VALID_BIT = (1<<7),
336 GNSS_CONFIG_FLAGS_SUPL_EM_SERVICES_BIT = (1<<8),
337 GNSS_CONFIG_FLAGS_SUPL_MODE_BIT = (1<<9),
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +0530338 GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT = (1<<10),
Wei Chena57d05b2020-02-26 14:08:37 -0800339 GNSS_CONFIG_FLAGS_ROBUST_LOCATION_BIT = (1<<11),
Wei Chenac1ad0e2020-03-05 11:56:25 -0800340 GNSS_CONFIG_FLAGS_MIN_GPS_WEEK_BIT = (1<<12),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800341} GnssConfigFlagsBits;
342
343typedef enum {
344 GNSS_NI_ENCODING_TYPE_NONE = 0,
345 GNSS_NI_ENCODING_TYPE_GSM_DEFAULT,
346 GNSS_NI_ENCODING_TYPE_UTF8,
347 GNSS_NI_ENCODING_TYPE_UCS2,
348} GnssNiEncodingType;
349
350typedef enum {
351 GNSS_NI_TYPE_VOICE = 0,
352 GNSS_NI_TYPE_SUPL,
353 GNSS_NI_TYPE_CONTROL_PLANE,
354 GNSS_NI_TYPE_EMERGENCY_SUPL
355} GnssNiType;
356
357typedef uint16_t GnssNiOptionsMask;
358typedef enum {
359 GNSS_NI_OPTIONS_NOTIFICATION_BIT = (1<<0),
360 GNSS_NI_OPTIONS_VERIFICATION_BIT = (1<<1),
361 GNSS_NI_OPTIONS_PRIVACY_OVERRIDE_BIT = (1<<2),
362} GnssNiOptionsBits;
363
364typedef enum {
365 GNSS_NI_RESPONSE_ACCEPT = 1,
366 GNSS_NI_RESPONSE_DENY,
367 GNSS_NI_RESPONSE_NO_RESPONSE,
368 GNSS_NI_RESPONSE_IGNORE,
369} GnssNiResponse;
370
371typedef enum {
372 GNSS_SV_TYPE_UNKNOWN = 0,
373 GNSS_SV_TYPE_GPS,
374 GNSS_SV_TYPE_SBAS,
375 GNSS_SV_TYPE_GLONASS,
376 GNSS_SV_TYPE_QZSS,
377 GNSS_SV_TYPE_BEIDOU,
378 GNSS_SV_TYPE_GALILEO,
Nilesh Gharde554985a2020-01-28 15:05:44 +0530379 GNSS_SV_TYPE_NAVIC,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800380} GnssSvType;
381
382typedef enum {
383 GNSS_EPH_TYPE_UNKNOWN = 0,
384 GNSS_EPH_TYPE_EPHEMERIS,
385 GNSS_EPH_TYPE_ALMANAC,
386} GnssEphemerisType;
387
388typedef enum {
389 GNSS_EPH_SOURCE_UNKNOWN = 0,
390 GNSS_EPH_SOURCE_DEMODULATED,
391 GNSS_EPH_SOURCE_SUPL_PROVIDED,
392 GNSS_EPH_SOURCE_OTHER_SERVER_PROVIDED,
393 GNSS_EPH_SOURCE_LOCAL,
394} GnssEphemerisSource;
395
396typedef enum {
397 GNSS_EPH_HEALTH_UNKNOWN = 0,
398 GNSS_EPH_HEALTH_GOOD,
399 GNSS_EPH_HEALTH_BAD,
400} GnssEphemerisHealth;
401
402typedef uint16_t GnssSvOptionsMask;
403typedef enum {
Mike Cailean7dfa87b2018-02-06 16:36:27 -0800404 GNSS_SV_OPTIONS_HAS_EPHEMER_BIT = (1<<0),
405 GNSS_SV_OPTIONS_HAS_ALMANAC_BIT = (1<<1),
406 GNSS_SV_OPTIONS_USED_IN_FIX_BIT = (1<<2),
407 GNSS_SV_OPTIONS_HAS_CARRIER_FREQUENCY_BIT = (1<<3),
Mike Caileand28e1ca2019-08-27 16:41:07 -0700408 GNSS_SV_OPTIONS_HAS_GNSS_SIGNAL_TYPE_BIT = (1<<4)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800409} GnssSvOptionsBits;
410
411typedef enum {
412 GNSS_ASSISTANCE_TYPE_SUPL = 0,
413 GNSS_ASSISTANCE_TYPE_C2K,
414} GnssAssistanceType;
415
416typedef enum {
417 GNSS_SUPL_MODE_STANDALONE = 0,
418 GNSS_SUPL_MODE_MSB,
419 GNSS_SUPL_MODE_MSA,
420} GnssSuplMode;
421
422typedef enum {
423 BATCHING_MODE_ROUTINE = 0, // positions are reported when batched positions memory is full
424 BATCHING_MODE_TRIP, // positions are reported when a certain distance is covered
425 BATCHING_MODE_NO_AUTO_REPORT // no report of positions automatically, instead queried on demand
426} BatchingMode;
427
428typedef enum {
429 BATCHING_STATUS_TRIP_COMPLETED = 0,
430 BATCHING_STATUS_POSITION_AVAILABE,
431 BATCHING_STATUS_POSITION_UNAVAILABLE
432} BatchingStatus;
433
434typedef uint16_t GnssMeasurementsAdrStateMask;
435typedef enum {
436 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_UNKNOWN = 0,
437 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_VALID_BIT = (1<<0),
438 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_RESET_BIT = (1<<1),
439 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_CYCLE_SLIP_BIT = (1<<2),
440} GnssMeasurementsAdrStateBits;
441
442typedef uint32_t GnssMeasurementsDataFlagsMask;
443typedef enum {
444 GNSS_MEASUREMENTS_DATA_SV_ID_BIT = (1<<0),
445 GNSS_MEASUREMENTS_DATA_SV_TYPE_BIT = (1<<1),
446 GNSS_MEASUREMENTS_DATA_STATE_BIT = (1<<2),
447 GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_BIT = (1<<3),
448 GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_UNCERTAINTY_BIT = (1<<4),
449 GNSS_MEASUREMENTS_DATA_CARRIER_TO_NOISE_BIT = (1<<5),
450 GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_BIT = (1<<6),
451 GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_UNCERTAINTY_BIT = (1<<7),
452 GNSS_MEASUREMENTS_DATA_ADR_STATE_BIT = (1<<8),
453 GNSS_MEASUREMENTS_DATA_ADR_BIT = (1<<9),
454 GNSS_MEASUREMENTS_DATA_ADR_UNCERTAINTY_BIT = (1<<10),
455 GNSS_MEASUREMENTS_DATA_CARRIER_FREQUENCY_BIT = (1<<11),
456 GNSS_MEASUREMENTS_DATA_CARRIER_CYCLES_BIT = (1<<12),
457 GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_BIT = (1<<13),
458 GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_UNCERTAINTY_BIT = (1<<14),
459 GNSS_MEASUREMENTS_DATA_MULTIPATH_INDICATOR_BIT = (1<<15),
460 GNSS_MEASUREMENTS_DATA_SIGNAL_TO_NOISE_RATIO_BIT = (1<<16),
461 GNSS_MEASUREMENTS_DATA_AUTOMATIC_GAIN_CONTROL_BIT = (1<<17),
462} GnssMeasurementsDataFlagsBits;
463
464typedef uint32_t GnssMeasurementsStateMask;
465typedef enum {
466 GNSS_MEASUREMENTS_STATE_UNKNOWN_BIT = 0,
467 GNSS_MEASUREMENTS_STATE_CODE_LOCK_BIT = (1<<0),
468 GNSS_MEASUREMENTS_STATE_BIT_SYNC_BIT = (1<<1),
469 GNSS_MEASUREMENTS_STATE_SUBFRAME_SYNC_BIT = (1<<2),
470 GNSS_MEASUREMENTS_STATE_TOW_DECODED_BIT = (1<<3),
471 GNSS_MEASUREMENTS_STATE_MSEC_AMBIGUOUS_BIT = (1<<4),
472 GNSS_MEASUREMENTS_STATE_SYMBOL_SYNC_BIT = (1<<5),
473 GNSS_MEASUREMENTS_STATE_GLO_STRING_SYNC_BIT = (1<<6),
474 GNSS_MEASUREMENTS_STATE_GLO_TOD_DECODED_BIT = (1<<7),
475 GNSS_MEASUREMENTS_STATE_BDS_D2_BIT_SYNC_BIT = (1<<8),
476 GNSS_MEASUREMENTS_STATE_BDS_D2_SUBFRAME_SYNC_BIT = (1<<9),
477 GNSS_MEASUREMENTS_STATE_GAL_E1BC_CODE_LOCK_BIT = (1<<10),
478 GNSS_MEASUREMENTS_STATE_GAL_E1C_2ND_CODE_LOCK_BIT = (1<<11),
479 GNSS_MEASUREMENTS_STATE_GAL_E1B_PAGE_SYNC_BIT = (1<<12),
480 GNSS_MEASUREMENTS_STATE_SBAS_SYNC_BIT = (1<<13),
481} GnssMeasurementsStateBits;
482
483typedef enum {
484 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_UNKNOWN = 0,
485 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_PRESENT,
486 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_NOT_PRESENT,
487} GnssMeasurementsMultipathIndicator;
488
489typedef uint32_t GnssMeasurementsClockFlagsMask;
490typedef enum {
491 GNSS_MEASUREMENTS_CLOCK_FLAGS_LEAP_SECOND_BIT = (1<<0),
492 GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_BIT = (1<<1),
493 GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_UNCERTAINTY_BIT = (1<<2),
494 GNSS_MEASUREMENTS_CLOCK_FLAGS_FULL_BIAS_BIT = (1<<3),
495 GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_BIT = (1<<4),
496 GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_UNCERTAINTY_BIT = (1<<5),
497 GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_BIT = (1<<6),
498 GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_UNCERTAINTY_BIT = (1<<7),
499 GNSS_MEASUREMENTS_CLOCK_FLAGS_HW_CLOCK_DISCONTINUITY_COUNT_BIT = (1<<8),
500} GnssMeasurementsClockFlagsBits;
501
502typedef uint32_t GnssAidingDataSvMask;
503typedef enum {
504 GNSS_AIDING_DATA_SV_EPHEMERIS_BIT = (1<<0), // ephemeris
505 GNSS_AIDING_DATA_SV_ALMANAC_BIT = (1<<1), // almanac
506 GNSS_AIDING_DATA_SV_HEALTH_BIT = (1<<2), // health
507 GNSS_AIDING_DATA_SV_DIRECTION_BIT = (1<<3), // direction
508 GNSS_AIDING_DATA_SV_STEER_BIT = (1<<4), // steer
509 GNSS_AIDING_DATA_SV_ALMANAC_CORR_BIT = (1<<5), // almanac correction
510 GNSS_AIDING_DATA_SV_BLACKLIST_BIT = (1<<6), // blacklist SVs
511 GNSS_AIDING_DATA_SV_SA_DATA_BIT = (1<<7), // sensitivity assistance data
512 GNSS_AIDING_DATA_SV_NO_EXIST_BIT = (1<<8), // SV does not exist
513 GNSS_AIDING_DATA_SV_IONOSPHERE_BIT = (1<<9), // ionosphere correction
514 GNSS_AIDING_DATA_SV_TIME_BIT = (1<<10),// reset satellite time
Bhavna Sharma5a8d1712018-08-22 09:45:25 -0700515 GNSS_AIDING_DATA_SV_MB_DATA = (1<<11),// delete multiband data
516 GNSS_AIDING_DATA_SV_POLY_BIT = (1<<12),// poly
Katz Yamada0fc49e82018-02-28 11:22:58 -0800517} GnssAidingDataSvBits;
518
519typedef uint32_t GnssAidingDataSvTypeMask;
520typedef enum {
521 GNSS_AIDING_DATA_SV_TYPE_GPS_BIT = (1<<0),
522 GNSS_AIDING_DATA_SV_TYPE_GLONASS_BIT = (1<<1),
523 GNSS_AIDING_DATA_SV_TYPE_QZSS_BIT = (1<<2),
524 GNSS_AIDING_DATA_SV_TYPE_BEIDOU_BIT = (1<<3),
525 GNSS_AIDING_DATA_SV_TYPE_GALILEO_BIT = (1<<4),
Nilesh Gharde554985a2020-01-28 15:05:44 +0530526 GNSS_AIDING_DATA_SV_TYPE_NAVIC_BIT = (1<<5),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800527} GnssAidingDataSvTypeBits;
528
Wei Chen8e04d012018-12-04 15:55:00 -0800529/* Gnss constellation type mask */
530typedef uint16_t GnssConstellationTypeMask;
531typedef enum {
532 GNSS_CONSTELLATION_TYPE_GPS_BIT = (1<<0),
533 GNSS_CONSTELLATION_TYPE_GLONASS_BIT = (1<<1),
534 GNSS_CONSTELLATION_TYPE_QZSS_BIT = (1<<2),
535 GNSS_CONSTELLATION_TYPE_BEIDOU_BIT = (1<<3),
536 GNSS_CONSTELLATION_TYPE_GALILEO_BIT = (1<<4),
Wei Chen9c217c02019-07-25 13:51:58 -0700537 GNSS_CONSTELLATION_TYPE_SBAS_BIT = (1<<5),
Nilesh Gharde554985a2020-01-28 15:05:44 +0530538 GNSS_CONSTELLATION_TYPE_NAVIC_BIT = (1<<6)
Wei Chen8e04d012018-12-04 15:55:00 -0800539} GnssConstellationTypeBits;
540
541#define GNSS_CONSTELLATION_TYPE_MASK_ALL\
542 (GNSS_CONSTELLATION_TYPE_GPS_BIT | GNSS_CONSTELLATION_TYPE_GLONASS_BIT |\
543 GNSS_CONSTELLATION_TYPE_QZSS_BIT | GNSS_CONSTELLATION_TYPE_BEIDOU_BIT |\
Nilesh Gharde554985a2020-01-28 15:05:44 +0530544 GNSS_CONSTELLATION_TYPE_GALILEO_BIT | GNSS_CONSTELLATION_TYPE_SBAS_BIT |\
545 GNSS_CONSTELLATION_TYPE_NAVIC_BIT)
Wei Chen8e04d012018-12-04 15:55:00 -0800546
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700547/** GNSS Signal Type and RF Band */
548typedef uint32_t GnssSignalTypeMask;
549typedef enum {
550 /** GPS L1CA Signal */
551 GNSS_SIGNAL_GPS_L1CA = (1<<0),
552 /** GPS L1C Signal */
553 GNSS_SIGNAL_GPS_L1C = (1<<1),
554 /** GPS L2 RF Band */
555 GNSS_SIGNAL_GPS_L2 = (1<<2),
556 /** GPS L5 RF Band */
557 GNSS_SIGNAL_GPS_L5 = (1<<3),
558 /** GLONASS G1 (L1OF) RF Band */
559 GNSS_SIGNAL_GLONASS_G1 = (1<<4),
560 /** GLONASS G2 (L2OF) RF Band */
561 GNSS_SIGNAL_GLONASS_G2 = (1<<5),
562 /** GALILEO E1 RF Band */
563 GNSS_SIGNAL_GALILEO_E1 = (1<<6),
564 /** GALILEO E5A RF Band */
565 GNSS_SIGNAL_GALILEO_E5A = (1<<7),
566 /** GALILEO E5B RF Band */
Hoss Zhou48b4e042018-09-03 15:27:08 +0800567 GNSS_SIGNAL_GALILEO_E5B = (1<<8),
Wei Chenf54142c2019-10-08 14:28:08 -0700568 /** BEIDOU B1 RF Band */
569 GNSS_SIGNAL_BEIDOU_B1 = (1<<9),
570 /** BEIDOU B2 RF Band */
571 GNSS_SIGNAL_BEIDOU_B2 = (1<<10),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700572 /** QZSS L1CA RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700573 GNSS_SIGNAL_QZSS_L1CA = (1<<11),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700574 /** QZSS L1S RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700575 GNSS_SIGNAL_QZSS_L1S = (1<<12),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700576 /** QZSS L2 RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700577 GNSS_SIGNAL_QZSS_L2 = (1<<13),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700578 /** QZSS L5 RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700579 GNSS_SIGNAL_QZSS_L5 = (1<<14),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700580 /** SBAS L1 RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700581 GNSS_SIGNAL_SBAS_L1 = (1<<15),
582 /** BEIDOU B1I RF Band */
583 GNSS_SIGNAL_BEIDOU_B1I = (1<<16),
584 /** BEIDOU B1C RF Band */
585 GNSS_SIGNAL_BEIDOU_B1C = (1<<17),
586 /** BEIDOU B2I RF Band */
587 GNSS_SIGNAL_BEIDOU_B2I = (1<<18),
588 /** BEIDOU B2AI RF Band */
589 GNSS_SIGNAL_BEIDOU_B2AI = (1<<19),
Mike Caileanfb671a92019-06-10 13:48:15 -0700590 /** NAVIC L5 RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700591 GNSS_SIGNAL_NAVIC_L5 = (1<<20),
Mike Caileanfb671a92019-06-10 13:48:15 -0700592 /** BEIDOU B2A_Q RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700593 GNSS_SIGNAL_BEIDOU_B2AQ = (1<<21),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700594} GnssSignalTypeBits;
595
Bhavna Sharma7445c502019-01-15 16:29:48 -0800596#define GNSS_SIGNAL_TYPE_MASK_ALL\
597 (GNSS_SIGNAL_GPS_L1CA | GNSS_SIGNAL_GPS_L1C | GNSS_SIGNAL_GPS_L2 |\
598 GNSS_SIGNAL_GPS_L5| GNSS_SIGNAL_GLONASS_G1 | GNSS_SIGNAL_GLONASS_G2 |\
599 GNSS_SIGNAL_GALILEO_E1 | GNSS_SIGNAL_GALILEO_E5A | GNSS_SIGNAL_GALILEO_E5B |\
600 GNSS_SIGNAL_BEIDOU_B1I | GNSS_SIGNAL_BEIDOU_B1C | GNSS_SIGNAL_BEIDOU_B2I|\
601 GNSS_SIGNAL_BEIDOU_B2AI | GNSS_SIGNAL_QZSS_L1CA | GNSS_SIGNAL_QZSS_L1S |\
Mike Caileanfb671a92019-06-10 13:48:15 -0700602 GNSS_SIGNAL_QZSS_L2| GNSS_SIGNAL_QZSS_L5 | GNSS_SIGNAL_SBAS_L1 |\
603 GNSS_SIGNAL_NAVIC_L5 | GNSS_SIGNAL_BEIDOU_B2AQ)
Bhavna Sharma7445c502019-01-15 16:29:48 -0800604
Katz Yamada0fc49e82018-02-28 11:22:58 -0800605typedef enum
606{
Wei Chen8e04d012018-12-04 15:55:00 -0800607 GNSS_LOC_SV_SYSTEM_UNKNOWN = 0,
608 /** unknown sv system. */
Wei Chena9b8abd2019-04-19 15:21:27 -0700609 GNSS_LOC_SV_SYSTEM_MIN = 1,
610 /**< Min enum of valid SV system. */
Katz Yamada0fc49e82018-02-28 11:22:58 -0800611 GNSS_LOC_SV_SYSTEM_GPS = 1,
612 /**< GPS satellite. */
613 GNSS_LOC_SV_SYSTEM_GALILEO = 2,
614 /**< GALILEO satellite. */
615 GNSS_LOC_SV_SYSTEM_SBAS = 3,
616 /**< SBAS satellite. */
Wei Chen8e04d012018-12-04 15:55:00 -0800617 GNSS_LOC_SV_SYSTEM_GLONASS = 4,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800618 /**< GLONASS satellite. */
Wei Chen8e04d012018-12-04 15:55:00 -0800619 GNSS_LOC_SV_SYSTEM_BDS = 5,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800620 /**< BDS satellite. */
Wei Chena9b8abd2019-04-19 15:21:27 -0700621 GNSS_LOC_SV_SYSTEM_QZSS = 6,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800622 /**< QZSS satellite. */
Wei Chen9c217c02019-07-25 13:51:58 -0700623 GNSS_LOC_SV_SYSTEM_NAVIC = 7,
624 /**< NAVIC satellite. */
625 GNSS_LOC_SV_SYSTEM_MAX = 7,
Wei Chena9b8abd2019-04-19 15:21:27 -0700626 /**< Max enum of valid SV system. */
Katz Yamada0fc49e82018-02-28 11:22:58 -0800627} Gnss_LocSvSystemEnumType;
628
Mike Cailean75cfd432018-06-07 16:54:35 -0700629typedef enum {
630 GNSS_LOC_SIGNAL_TYPE_GPS_L1CA = 0, /**< GPS L1CA Signal */
631 GNSS_LOC_SIGNAL_TYPE_GPS_L1C = 1, /**< GPS L1C Signal */
632 GNSS_LOC_SIGNAL_TYPE_GPS_L2C_L = 2, /**< GPS L2C_L RF Band */
633 GNSS_LOC_SIGNAL_TYPE_GPS_L5_Q = 3, /**< GPS L5_Q RF Band */
634 GNSS_LOC_SIGNAL_TYPE_GLONASS_G1 = 4, /**< GLONASS G1 (L1OF) RF Band */
635 GNSS_LOC_SIGNAL_TYPE_GLONASS_G2 = 5, /**< GLONASS G2 (L2OF) RF Band */
636 GNSS_LOC_SIGNAL_TYPE_GALILEO_E1_C = 6, /**< GALILEO E1_C RF Band */
637 GNSS_LOC_SIGNAL_TYPE_GALILEO_E5A_Q = 7, /**< GALILEO E5A_Q RF Band */
638 GNSS_LOC_SIGNAL_TYPE_GALILEO_E5B_Q = 8, /**< GALILEO E5B_Q RF Band */
639 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B1_I = 9, /**< BEIDOU B1_I RF Band */
640 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B1C = 10, /**< BEIDOU B1C RF Band */
641 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2_I = 11, /**< BEIDOU B2_I RF Band */
642 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2A_I = 12, /**< BEIDOU B2A_I RF Band */
643 GNSS_LOC_SIGNAL_TYPE_QZSS_L1CA = 13, /**< QZSS L1CA RF Band */
644 GNSS_LOC_SIGNAL_TYPE_QZSS_L1S = 14, /**< QZSS L1S RF Band */
645 GNSS_LOC_SIGNAL_TYPE_QZSS_L2C_L = 15, /**< QZSS L2C_L RF Band */
646 GNSS_LOC_SIGNAL_TYPE_QZSS_L5_Q = 16, /**< QZSS L5_Q RF Band */
647 GNSS_LOC_SIGNAL_TYPE_SBAS_L1_CA = 17, /**< SBAS L1_CA RF Band */
Mike Caileanfb671a92019-06-10 13:48:15 -0700648 GNSS_LOC_SIGNAL_TYPE_NAVIC_L5 = 18, /**< NAVIC L5 RF Band */
649 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2A_Q = 19, /**< BEIDOU B2A_Q RF Band */
650 GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES = 20 /**< Maximum number of signal types */
Mike Cailean75cfd432018-06-07 16:54:35 -0700651} Gnss_LocSignalEnumType;
652
Bhavna Sharma43365b42019-06-21 14:32:15 -0700653typedef uint32_t PositioningEngineMask;
654typedef enum {
655 STANDARD_POSITIONING_ENGINE = (1 << 0),
Wei Chena28f8132019-07-18 15:50:55 -0700656 DEAD_RECKONING_ENGINE = (1 << 1),
657 PRECISE_POSITIONING_ENGINE = (1 << 2)
Bhavna Sharma43365b42019-06-21 14:32:15 -0700658} PositioningEngineBits;
Wei Chen688372b2019-08-16 14:59:23 -0700659#define POSITION_ENGINE_MASK_ALL \
660 (STANDARD_POSITIONING_ENGINE|DEAD_RECKONING_ENGINE|PRECISE_POSITIONING_ENGINE)
Bhavna Sharma43365b42019-06-21 14:32:15 -0700661
Mike Cailean75cfd432018-06-07 16:54:35 -0700662typedef uint64_t GnssDataMask;
663typedef enum {
664 // Jammer Indicator is available
665 GNSS_LOC_DATA_JAMMER_IND_BIT = (1ULL << 0),
666 // AGC is available
667 GNSS_LOC_DATA_AGC_BIT = (1ULL << 1)
668} GnssDataBits;
669
Katz Yamada0fc49e82018-02-28 11:22:58 -0800670typedef uint32_t GnssSystemTimeStructTypeFlags;
671typedef enum {
672 GNSS_SYSTEM_TIME_WEEK_VALID = (1 << 0),
673 GNSS_SYSTEM_TIME_WEEK_MS_VALID = (1 << 1),
674 GNSS_SYSTEM_CLK_TIME_BIAS_VALID = (1 << 2),
675 GNSS_SYSTEM_CLK_TIME_BIAS_UNC_VALID = (1 << 3),
676 GNSS_SYSTEM_REF_FCOUNT_VALID = (1 << 4),
677 GNSS_SYSTEM_NUM_CLOCK_RESETS_VALID = (1 << 5)
678} GnssSystemTimeTypeBits;
679
680typedef uint32_t GnssGloTimeStructTypeFlags;
681typedef enum {
682 GNSS_CLO_DAYS_VALID = (1 << 0),
Wei Chen8e04d012018-12-04 15:55:00 -0800683 GNSS_GLO_MSEC_VALID = (1 << 1),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800684 GNSS_GLO_CLK_TIME_BIAS_VALID = (1 << 2),
685 GNSS_GLO_CLK_TIME_BIAS_UNC_VALID = (1 << 3),
686 GNSS_GLO_REF_FCOUNT_VALID = (1 << 4),
687 GNSS_GLO_NUM_CLOCK_RESETS_VALID = (1 << 5),
688 GNSS_GLO_FOUR_YEAR_VALID = (1 << 6)
689} GnssGloTimeTypeBits;
690
691typedef struct {
692 GnssAidingDataSvMask svMask; // bitwise OR of GnssAidingDataSvBits
693 GnssAidingDataSvTypeMask svTypeMask; // bitwise OR of GnssAidingDataSvTypeBits
694} GnssAidingDataSv;
695
696typedef uint32_t GnssAidingDataCommonMask;
697typedef enum {
698 GNSS_AIDING_DATA_COMMON_POSITION_BIT = (1<<0), // position estimate
699 GNSS_AIDING_DATA_COMMON_TIME_BIT = (1<<1), // reset all clock values
700 GNSS_AIDING_DATA_COMMON_UTC_BIT = (1<<2), // UTC estimate
701 GNSS_AIDING_DATA_COMMON_RTI_BIT = (1<<3), // RTI
702 GNSS_AIDING_DATA_COMMON_FREQ_BIAS_EST_BIT = (1<<4), // frequency bias estimate
703 GNSS_AIDING_DATA_COMMON_CELLDB_BIT = (1<<5), // all celldb info
704} GnssAidingDataCommonBits;
705
706typedef struct {
707 GnssAidingDataCommonMask mask; // bitwise OR of GnssAidingDataCommonBits
708} GnssAidingDataCommon;
709
710typedef struct {
711 bool deleteAll; // if true, delete all aiding data and ignore other params
712 GnssAidingDataSv sv; // SV specific aiding data
713 GnssAidingDataCommon common; // common aiding data
Bhavna Sharma43365b42019-06-21 14:32:15 -0700714 PositioningEngineMask posEngineMask; // engines to perform the delete operation on.
Katz Yamada0fc49e82018-02-28 11:22:58 -0800715} GnssAidingData;
716
Wei Chena9b8abd2019-04-19 15:21:27 -0700717typedef uint16_t DrCalibrationStatusMask;
718typedef enum {
719 // Indicate that roll calibration is needed. Need to take more turns on level ground
720 DR_ROLL_CALIBRATION_NEEDED = (1<<0),
721 // Indicate that pitch calibration is needed. Need to take more turns on level ground
722 DR_PITCH_CALIBRATION_NEEDED = (1<<1),
723 // Indicate that yaw calibration is needed. Need to accelerate in a straight line
724 DR_YAW_CALIBRATION_NEEDED = (1<<2),
725 // Indicate that odo calibration is needed. Need to accelerate in a straight line
726 DR_ODO_CALIBRATION_NEEDED = (1<<3),
727 // Indicate that gyro calibration is needed. Need to take more turns on level ground
728 DR_GYRO_CALIBRATION_NEEDED = (1<<4)
729} DrCalibrationStatusBits;
730
Katz Yamada0fc49e82018-02-28 11:22:58 -0800731typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800732 uint32_t size; // set to sizeof(Location)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800733 LocationFlagsMask flags; // bitwise OR of LocationFlagsBits to mark which params are valid
734 uint64_t timestamp; // UTC timestamp for location fix, milliseconds since January 1, 1970
735 double latitude; // in degrees
736 double longitude; // in degrees
737 double altitude; // in meters above the WGS 84 reference ellipsoid
738 float speed; // in meters per second
739 float bearing; // in degrees; range [0, 360)
740 float accuracy; // in meters
741 float verticalAccuracy; // in meters
742 float speedAccuracy; // in meters/second
743 float bearingAccuracy; // in degrees (0 to 359.999)
744 LocationTechnologyMask techMask;
haohuang17015dd2018-04-16 15:12:49 +0800745 LocationSpoofMask spoofMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800746} Location;
747
Wei Chena28f8132019-07-18 15:50:55 -0700748// TBD: check whether we need all the types
749typedef enum {
750 LOC_REQ_ENGINE_FUSED_BIT = (1<<0), // Keep this
751 LOC_REQ_ENGINE_SPE_BIT = (1<<1),
752 LOC_REQ_ENGINE_PPE_BIT = (1<<2),
753} LocReqEngineTypeMask;
754
755typedef enum {
756 LOC_OUTPUT_ENGINE_FUSED = 0,
757 /** This is the GNSS fix from modem */
758 LOC_OUTPUT_ENGINE_SPE = 1,
759 /** This is the GNSS fix with correction PPP/RTK correction */
760 LOC_OUTPUT_ENGINE_PPE = 2,
761 LOC_OUTPUT_ENGINE_COUNT,
762} LocOutputEngineType;
763
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530764struct LocationOptions {
Wei Chen1d823b02018-12-14 16:22:17 -0800765 uint32_t size; // set to sizeof(LocationOptions)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800766 uint32_t minInterval; // in milliseconds
767 uint32_t minDistance; // in meters. if minDistance > 0, gnssSvCallback/gnssNmeaCallback/
768 // gnssMeasurementsCallback may not be called
769 GnssSuplMode mode; // Standalone/MS-Based/MS-Assisted
Wei Chena28f8132019-07-18 15:50:55 -0700770 // behavior when this field is 0:
771 // if engine hub is running, this will be fused fix,
772 // if engine hub is not running, this will be SPE fix
773 LocReqEngineTypeMask locReqEngTypeMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800774
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530775 inline LocationOptions() :
Wei Chena28f8132019-07-18 15:50:55 -0700776 size(0), minInterval(0), minDistance(0), mode(GNSS_SUPL_MODE_STANDALONE),
777 locReqEngTypeMask((LocReqEngineTypeMask)0) {}
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530778};
779
780typedef enum {
781 GNSS_POWER_MODE_INVALID = 0,
782 GNSS_POWER_MODE_M1, /* Improved Accuracy Mode */
783 GNSS_POWER_MODE_M2, /* Normal Mode */
784 GNSS_POWER_MODE_M3, /* Background Mode */
785 GNSS_POWER_MODE_M4, /* Background Mode */
786 GNSS_POWER_MODE_M5 /* Background Mode */
787} GnssPowerMode;
788
789struct TrackingOptions : LocationOptions {
790 GnssPowerMode powerMode; /* Power Mode to be used for time based tracking
791 sessions */
792 uint32_t tbm; /* Time interval between measurements specified in millis.
793 Applicable to background power modes */
794
795 inline TrackingOptions() :
796 LocationOptions(), powerMode(GNSS_POWER_MODE_INVALID), tbm(0) {}
Wei Chen1d823b02018-12-14 16:22:17 -0800797 inline TrackingOptions(uint32_t s, GnssPowerMode m, uint32_t t) :
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530798 LocationOptions(), powerMode(m), tbm(t) { LocationOptions::size = s; }
799 inline TrackingOptions(const LocationOptions& options) :
800 LocationOptions(options), powerMode(GNSS_POWER_MODE_INVALID), tbm(0) {}
801 inline void setLocationOptions(const LocationOptions& options) {
Wei Chena28f8132019-07-18 15:50:55 -0700802 size = sizeof(TrackingOptions);
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530803 minInterval = options.minInterval;
804 minDistance = options.minDistance;
805 mode = options.mode;
Wei Chena28f8132019-07-18 15:50:55 -0700806 locReqEngTypeMask = options.locReqEngTypeMask;
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530807 }
Harikrishnan Hariharan59269e12018-07-01 00:43:09 +0530808 inline LocationOptions getLocationOptions() {
809 LocationOptions locOption;
810 locOption.size = sizeof(locOption);
811 locOption.minDistance = minDistance;
812 locOption.minInterval = minInterval;
813 locOption.mode = mode;
Wei Chena28f8132019-07-18 15:50:55 -0700814 locOption.locReqEngTypeMask = locReqEngTypeMask;
Harikrishnan Hariharan59269e12018-07-01 00:43:09 +0530815 return locOption;
816 }
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530817};
818
819struct BatchingOptions : LocationOptions {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800820 BatchingMode batchingMode;
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530821
822 inline BatchingOptions() :
823 LocationOptions(), batchingMode(BATCHING_MODE_ROUTINE) {}
Wei Chen1d823b02018-12-14 16:22:17 -0800824 inline BatchingOptions(uint32_t s, BatchingMode m) :
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530825 LocationOptions(), batchingMode(m) { LocationOptions::size = s; }
826 inline BatchingOptions(const LocationOptions& options) :
827 LocationOptions(options), batchingMode(BATCHING_MODE_ROUTINE) {}
828 inline void setLocationOptions(const LocationOptions& options) {
829 minInterval = options.minInterval;
830 minDistance = options.minDistance;
831 mode = options.mode;
832 }
833};
Katz Yamada0fc49e82018-02-28 11:22:58 -0800834
835typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800836 uint32_t size;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800837 BatchingStatus batchingStatus;
838} BatchingStatusInfo;
839
840typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800841 uint32_t size; // set to sizeof(GeofenceOption)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800842 GeofenceBreachTypeMask breachTypeMask; // bitwise OR of GeofenceBreachTypeBits
843 uint32_t responsiveness; // in milliseconds
844 uint32_t dwellTime; // in seconds
845} GeofenceOption;
846
847typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800848 uint32_t size; // set to sizeof(GeofenceInfo)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800849 double latitude; // in degrees
850 double longitude; // in degrees
851 double radius; // in meters
852} GeofenceInfo;
853
854typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800855 uint32_t size; // set to sizeof(GeofenceBreachNotification)
856 uint32_t count; // number of ids in array
Katz Yamada0fc49e82018-02-28 11:22:58 -0800857 uint32_t* ids; // array of ids that have breached
858 Location location; // location associated with breach
859 GeofenceBreachType type; // type of breach
860 uint64_t timestamp; // timestamp of breach
861} GeofenceBreachNotification;
862
863typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800864 uint32_t size; // set to sizeof(GeofenceBreachNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800865 GeofenceStatusAvailable available; // GEOFENCE_STATUS_AVAILABILE_NO/_YES
866 LocationTechnologyType techType; // GNSS
867} GeofenceStatusNotification;
868
869typedef struct {
870 uint64_t gpsSvUsedIdsMask;
871 uint64_t gloSvUsedIdsMask;
872 uint64_t galSvUsedIdsMask;
873 uint64_t bdsSvUsedIdsMask;
874 uint64_t qzssSvUsedIdsMask;
Nilesh Gharde554985a2020-01-28 15:05:44 +0530875 uint64_t navicSvUsedIdsMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800876} GnssLocationSvUsedInPosition;
877
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700878typedef struct {
879 /** GnssSignalType mask */
880 GnssSignalTypeMask gnssSignalType;
881 /** Specifies GNSS Constellation Type */
882 Gnss_LocSvSystemEnumType gnssConstellation;
Wei Chen53d69432019-12-10 16:07:23 -0800883 /** Unique SV Identifier.
884 * For SV Range of supported constellation, please refer to
885 * the comment section of svId in GnssSv. */
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700886 uint16_t gnssSvId;
887} GnssMeasUsageInfo;
888
Katz Yamada0fc49e82018-02-28 11:22:58 -0800889/** @struct
890 Body Frame parameters
891*/
892typedef struct {
893 GnssLocationPosDataMask bodyFrameDataMask; // Contains Body frame LocPosDataMask bits
894 float longAccel; // Forward Acceleration in body frame (m/s2)
895 float latAccel; // Sideward Acceleration in body frame (m/s2)
896 float vertAccel; // Vertical Acceleration in body frame (m/s2)
897 float yawRate; // Heading Rate (Radians/second)
898 float pitch; // Body pitch (Radians)
Naresh Munagala02cddf02018-06-21 10:44:51 +0530899 float longAccelUnc; // Uncertainty of Forward Acceleration in body frame
900 float latAccelUnc; // Uncertainty of Side-ward Acceleration in body frame
901 float vertAccelUnc; // Uncertainty of Vertical Acceleration in body frame
902 float yawRateUnc; // Uncertainty of Heading Rate
903 float pitchUnc; // Uncertainty of Body pitch
Katz Yamada0fc49e82018-02-28 11:22:58 -0800904} GnssLocationPositionDynamics;
905
906typedef struct {
Naresh Munagalaaf069602020-02-17 06:33:10 +0530907 GnssLocationPosDataMaskExt bodyFrameDataMask; // Contains Ext Body frame LocPosDataMask bits
908 float pitchRate; // Body pitch rate (Radians/second)
909 float pitchRateUnc; // Uncertainty of pitch rate (Radians/second)
910 float roll; // Roll of body frame. Clockwise positive. (radian
911 float rollUnc; // Uncertainty of Roll, 68% confidence level (radian)
912 float rollRate; // Roll rate of body frame. Clockwise positive. (radian/second)
913 float rollRateUnc; // Uncertainty of Roll rate, 68% confidence level (radian/second)
914 float yaw; // Yaw of body frame. Clockwise positive (radian)
915 float yawUnc; // Uncertainty of Yaw, 68% confidence level (radian)
916} GnssLocationPositionDynamicsExt;
917
918
919typedef struct {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800920 /** Validity mask for below fields */
921 GnssSystemTimeStructTypeFlags validityMask;
922 /** Extended week number at reference tick.
923 Unit: Week.
924 Set to 65535 if week number is unknown.
925 For GPS:
926 Calculated from midnight, Jan. 6, 1980.
927 OTA decoded 10 bit GPS week is extended to map between:
928 [NV6264 to (NV6264 + 1023)].
929 NV6264: Minimum GPS week number configuration.
930 Default value of NV6264: 1738
931 For BDS:
932 Calculated from 00:00:00 on January 1, 2006 of Coordinated Universal Time (UTC).
933 For GAL:
934 Calculated from 00:00 UT on Sunday August 22, 1999 (midnight between August 21 and August 22).
935 */
936 uint16_t systemWeek;
937 /** Time in to the current week at reference tick.
938 Unit: Millisecond. Range: 0 to 604799999.
939 Check for systemClkTimeUncMs before use */
940 uint32_t systemMsec;
941 /** System clock time bias (sub-millisecond)
942 Units: Millisecond
943 Note: System time (TOW Millisecond) = systemMsec - systemClkTimeBias.
944 Check for systemClkTimeUncMs before use. */
945 float systemClkTimeBias;
946 /** Single sided maximum time bias uncertainty
947 Units: Millisecond */
948 float systemClkTimeUncMs;
949 /** FCount (free running HW timer) value. Don't use for relative time purpose
950 due to possible discontinuities.
951 Unit: Millisecond */
952 uint32_t refFCount;
953 /** Number of clock resets/discontinuities detected, affecting the local hardware counter value. */
954 uint32_t numClockResets;
955} GnssSystemTimeStructType;
956
957typedef struct {
958 /** GLONASS day number in four years. Refer to GLONASS ICD.
959 Applicable only for GLONASS and shall be ignored for other constellations.
960 If unknown shall be set to 65535 */
961 uint16_t gloDays;
962 /** Validity mask for below fields */
963 GnssGloTimeStructTypeFlags validityMask;
964 /** GLONASS time of day in Millisecond. Refer to GLONASS ICD.
965 Units: Millisecond
966 Check for gloClkTimeUncMs before use */
967 uint32_t gloMsec;
968 /** GLONASS clock time bias (sub-millisecond)
969 Units: Millisecond
970 Note: GLO time (TOD Millisecond) = gloMsec - gloClkTimeBias.
971 Check for gloClkTimeUncMs before use. */
972 float gloClkTimeBias;
973 /** Single sided maximum time bias uncertainty
974 Units: Millisecond */
975 float gloClkTimeUncMs;
976 /** FCount (free running HW timer) value. Don't use for relative time purpose
977 due to possible discontinuities.
978 Unit: Millisecond */
979 uint32_t refFCount;
980 /** Number of clock resets/discontinuities detected, affecting the local hardware counter value. */
981 uint32_t numClockResets;
982 /** GLONASS four year number from 1996. Refer to GLONASS ICD.
983 Applicable only for GLONASS and shall be ignored for other constellations.
984 If unknown shall be set to 255 */
985 uint8_t gloFourYear;
986} GnssGloTimeStructType;
987
988typedef union {
989 GnssSystemTimeStructType gpsSystemTime;
990 GnssSystemTimeStructType galSystemTime;
991 GnssSystemTimeStructType bdsSystemTime;
992 GnssSystemTimeStructType qzssSystemTime;
Nilesh Gharde554985a2020-01-28 15:05:44 +0530993 GnssGloTimeStructType gloSystemTime;
994 GnssSystemTimeStructType navicSystemTime;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800995} SystemTimeStructUnion;
996 /** Time applicability of PVT report */
997typedef struct {
998 /** Specifies GNSS system time reported. Mandatory field */
999 Gnss_LocSvSystemEnumType gnssSystemTimeSrc;
1000 /** Reporting of GPS system time is recommended.
1001 If GPS time is unknown & other satellite system time is known,
1002 it should be reported.
1003 Mandatory field
1004 */
1005 SystemTimeStructUnion u;
1006} GnssSystemTime;
1007
1008typedef struct {
Wei Chen6fea13b2020-02-21 16:58:58 -08001009 double latitude; // in degree
1010 double longitude; // in degree
1011 float altitude; // altitude wrt to ellipsoid
1012} LLAInfo;
1013
1014typedef struct {
Wei Chend256bc52019-06-10 10:10:53 -07001015 uint32_t size; // set to sizeof(GnssLocationInfo)
1016 Location location; // basic locaiton info, latitude, longitude, and etc
Katz Yamada0fc49e82018-02-28 11:22:58 -08001017 GnssLocationInfoFlagMask flags; // bitwise OR of GnssLocationInfoBits for param validity
1018 float altitudeMeanSeaLevel; // altitude wrt mean sea level
1019 float pdop; // position dilusion of precision
1020 float hdop; // horizontal dilusion of precision
1021 float vdop; // vertical dilusion of precision
1022 float gdop; // geometric dilution of precision
1023 float tdop; // time dilution of precision
1024 float magneticDeviation; // magnetic deviation
1025 LocationReliability horReliability; // horizontal reliability
1026 LocationReliability verReliability; // vertical reliability
1027 float horUncEllipseSemiMajor; // horizontal elliptical accuracy semi-major axis
1028 float horUncEllipseSemiMinor; // horizontal elliptical accuracy semi-minor axis
1029 float horUncEllipseOrientAzimuth; // horizontal elliptical accuracy azimuth
Bhavna Sharmaee8213f2018-05-25 14:34:08 -07001030 float northStdDeviation; // North standard deviation Unit: Meters
1031 float eastStdDeviation; // East standard deviation. Unit: Meters
Katz Yamada0fc49e82018-02-28 11:22:58 -08001032 float northVelocity; // North Velocity.Unit: Meters/sec
Bhavna Sharmaee8213f2018-05-25 14:34:08 -07001033 float eastVelocity; // East Velocity Unit Meters/sec
1034 float upVelocity; // Up Velocity. Unit Meters/sec
Katz Yamada0fc49e82018-02-28 11:22:58 -08001035 float northVelocityStdDeviation;
1036 float eastVelocityStdDeviation;
1037 float upVelocityStdDeviation;
Wei Chen7c797102019-04-30 15:02:43 -07001038 uint16_t numSvUsedInPosition;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001039 GnssLocationSvUsedInPosition svUsedInPosition;// Gnss sv used in position data
1040 GnssLocationNavSolutionMask navSolutionMask; // Nav solution mask to indicate sbas corrections
1041 GnssLocationPosTechMask posTechMask; // Position technology used in computing this fix
1042 GnssLocationPositionDynamics bodyFrameData; // Body Frame Dynamics: 4wayAcceleration and
1043 // pitch set with validity
1044 GnssSystemTime gnssSystemTime; // GNSS System Time
Bhavna Sharmaee8213f2018-05-25 14:34:08 -07001045 uint8_t numOfMeasReceived; // Number of measurements received for use in fix.
1046 GnssMeasUsageInfo measUsageInfo[GNSS_SV_MAX]; // GNSS Measurement Usage info
1047 uint8_t leapSeconds; // leap second
1048 float timeUncMs; // Time uncertainty in milliseconds
Wei Chena9b8abd2019-04-19 15:21:27 -07001049 uint8_t calibrationConfidence; // Sensor calibration confidence percent,
1050 // in range of [0, 100]
1051 DrCalibrationStatusMask calibrationStatus; // Sensor calibration status
Wei Chena28f8132019-07-18 15:50:55 -07001052 // location engine type. When the fix. when the type is set to
1053 // LOC_ENGINE_SRC_FUSED, the fix is the propagated/aggregated
1054 // reports from all engines running on the system (e.g.:
Kevin Tang2283fa02019-08-06 16:38:12 -07001055 // DR/SPE/PPE). To check which location engine contributes to
1056 // the fused output, check for locOutputEngMask.
Wei Chena28f8132019-07-18 15:50:55 -07001057 LocOutputEngineType locOutputEngType;
1058 // when loc output eng type is set to fused, this field
1059 // indicates the set of engines contribute to the fix.
1060 PositioningEngineMask locOutputEngMask;
Wei Chen6fea13b2020-02-21 16:58:58 -08001061 // When robust location is enabled, this field
1062 // will how well the various input data considered for
1063 // navigation solution conform to expectations.
1064 // Range: 0 (least conforming) to 1 (most conforming)
Wei Chen2f8ef912020-02-14 14:48:53 -08001065 float conformityIndex;
Naresh Munagalaaf069602020-02-17 06:33:10 +05301066 GnssLocationPositionDynamicsExt bodyFrameDataExt; // Additional Body Frame Dynamics
Wei Chen6fea13b2020-02-21 16:58:58 -08001067 // VRR-based latitude/longitude/altitude
1068 LLAInfo llaVRPBased;
1069 // VRR-based east, north, and up velocity
1070 float enuVelocityVRPBased[3];
Wei Chena28f8132019-07-18 15:50:55 -07001071} GnssLocationInfoNotification;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001072
1073typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001074 uint32_t size; // set to sizeof(GnssNiNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001075 GnssNiType type; // type of NI (Voice, SUPL, Control Plane)
1076 GnssNiOptionsMask options; // bitwise OR of GnssNiOptionsBits
1077 uint32_t timeout; // time (seconds) to wait for user input
1078 GnssNiResponse timeoutResponse; // the response that should be sent when timeout expires
1079 char requestor[GNSS_NI_REQUESTOR_MAX]; // the requestor that is making the request
1080 GnssNiEncodingType requestorEncoding; // the encoding type for requestor
1081 char message[GNSS_NI_MESSAGE_ID_MAX]; // the message to show user
1082 GnssNiEncodingType messageEncoding; // the encoding type for message
1083 char extras[GNSS_NI_MESSAGE_ID_MAX];
1084} GnssNiNotification;
1085
Naresh Munagala5ae3d712019-08-05 13:56:17 +05301086// carrier frequency of the signal tracked
1087#define GPS_L1CA_CARRIER_FREQUENCY (1575420000.0)
1088#define GPS_L1C_CARRIER_FREQUENCY (1575420000.0)
1089#define GPS_L2C_L_CARRIER_FREQUENCY (1227600000.0)
1090#define GPS_L5_Q_CARRIER_FREQUENCY (1176450000.0)
1091#define GLONASS_G1_CARRIER_FREQUENCY (1602000000.0)
1092#define GLONASS_G2_CARRIER_FREQUENCY (1246000000.0)
1093#define GALILEO_E1_C_CARRIER_FREQUENCY (1575420000.0)
1094#define GALILEO_E5A_Q_CARRIER_FREQUENCY (1176450000.0)
1095#define GALILEO_E5B_Q_CARRIER_FREQUENCY (1207140000.0)
1096#define BEIDOU_B1_I_CARRIER_FREQUENCY (1561098000.0)
1097#define BEIDOU_B1C_CARRIER_FREQUENCY (1575420000.0)
1098#define BEIDOU_B2_I_CARRIER_FREQUENCY (1207140000.0)
1099#define BEIDOU_B2A_I_CARRIER_FREQUENCY (1176450000.0)
1100#define BEIDOU_B2A_Q_CARRIER_FREQUENCY (1176450000.0)
1101#define QZSS_L1CA_CARRIER_FREQUENCY (1575420000.0)
1102#define QZSS_L1S_CARRIER_FREQUENCY (1575420000.0)
1103#define QZSS_L2C_L_CARRIER_FREQUENCY (1227600000.0)
1104#define QZSS_L5_Q_CARRIER_FREQUENCY (1176450000.0)
1105#define SBAS_L1_CA_CARRIER_FREQUENCY (1575420000.0)
Nilesh Gharde554985a2020-01-28 15:05:44 +05301106#define NAVIC_L5_CARRIER_FREQUENCY (1176450000.0)
Naresh Munagala5ae3d712019-08-05 13:56:17 +05301107
Katz Yamada0fc49e82018-02-28 11:22:58 -08001108typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001109 uint32_t size; // set to sizeof(GnssSv)
Wei Chen53d69432019-12-10 16:07:23 -08001110 // Unique SV Identifier.
1111 // SV Range for supported constellation is specified as below:
1112 // - For GPS: 1 to 32
1113 // - For GLONASS: 65 to 96
1114 // - For SBAS: 120 to 158 and 183 to 191
1115 // - For QZSS: 193 to 197
1116 // - For BDS: 201 to 237
1117 // - For GAL: 301 to 336
Nilesh Gharde554985a2020-01-28 15:05:44 +05301118 // - For NAVIC: 401 to 414
Wei Chen53d69432019-12-10 16:07:23 -08001119 uint16_t svId;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001120 GnssSvType type; // type of SV (GPS, SBAS, GLONASS, QZSS, BEIDOU, GALILEO)
1121 float cN0Dbhz; // signal strength
1122 float elevation; // elevation of SV (in degrees)
1123 float azimuth; // azimuth of SV (in degrees)
1124 GnssSvOptionsMask gnssSvOptionsMask; // Bitwise OR of GnssSvOptionsBits
Mike Cailean7dfa87b2018-02-06 16:36:27 -08001125 float carrierFrequencyHz; // carrier frequency of the signal tracked
Bhavna Sharma21249412018-07-17 14:48:32 -07001126 GnssSignalTypeMask gnssSignalTypeMask; // Specifies GNSS signal type
Katz Yamada0fc49e82018-02-28 11:22:58 -08001127} GnssSv;
1128
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301129struct GnssConfigSetAssistanceServer {
Wei Chen1d823b02018-12-14 16:22:17 -08001130 uint32_t size; // set to sizeof(GnssConfigSetAssistanceServer)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001131 GnssAssistanceType type; // SUPL or C2K
1132 const char* hostName; // null terminated string
1133 uint32_t port; // port of server
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301134
1135 inline bool equals(const GnssConfigSetAssistanceServer& config) {
1136 if (config.type == type && config.port == port &&
1137 ((NULL == config.hostName && NULL == hostName) ||
1138 (NULL != config.hostName && NULL != hostName &&
1139 0 == strcmp(config.hostName, hostName)))) {
1140 return true;
1141 }
1142 return false;
1143 }
1144};
Katz Yamada0fc49e82018-02-28 11:22:58 -08001145
1146typedef struct {
Wei Chen53d69432019-12-10 16:07:23 -08001147 // set to sizeof(GnssMeasurementsData)
1148 uint32_t size;
1149 // bitwise OR of GnssMeasurementsDataFlagsBits
1150 GnssMeasurementsDataFlagsMask flags;
1151 // Unique SV Identifier
1152 // For SV Range of supported constellation,
1153 // please refer to the comment section of svId in GnssSv.
Katz Yamada0fc49e82018-02-28 11:22:58 -08001154 int16_t svId;
1155 GnssSvType svType;
1156 double timeOffsetNs;
1157 GnssMeasurementsStateMask stateMask; // bitwise OR of GnssMeasurementsStateBits
1158 int64_t receivedSvTimeNs;
1159 int64_t receivedSvTimeUncertaintyNs;
1160 double carrierToNoiseDbHz;
1161 double pseudorangeRateMps;
1162 double pseudorangeRateUncertaintyMps;
1163 GnssMeasurementsAdrStateMask adrStateMask; // bitwise OR of GnssMeasurementsAdrStateBits
1164 double adrMeters;
1165 double adrUncertaintyMeters;
1166 float carrierFrequencyHz;
1167 int64_t carrierCycles;
1168 double carrierPhase;
1169 double carrierPhaseUncertainty;
1170 GnssMeasurementsMultipathIndicator multipathIndicator;
1171 double signalToNoiseRatioDb;
1172 double agcLevelDb;
Hoss Zhou81b7f102020-03-19 16:53:04 +08001173 int16_t gloFrequency;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001174} GnssMeasurementsData;
1175
1176typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001177 uint32_t size; // set to sizeof(GnssMeasurementsClock)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001178 GnssMeasurementsClockFlagsMask flags; // bitwise OR of GnssMeasurementsClockFlagsBits
1179 int16_t leapSecond;
1180 int64_t timeNs;
1181 double timeUncertaintyNs;
1182 int64_t fullBiasNs;
1183 double biasNs;
1184 double biasUncertaintyNs;
1185 double driftNsps;
1186 double driftUncertaintyNsps;
1187 uint32_t hwClockDiscontinuityCount;
1188} GnssMeasurementsClock;
1189
1190typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001191 uint32_t size; // set to sizeof(GnssSvNotification)
1192 uint32_t count; // number of SVs in the GnssSv array
Bhavna Sharma21249412018-07-17 14:48:32 -07001193 bool gnssSignalTypeMaskValid;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001194 GnssSv gnssSvs[GNSS_SV_MAX]; // information on a number of SVs
1195} GnssSvNotification;
1196
1197typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001198 uint32_t size; // set to sizeof(GnssNmeaNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001199 uint64_t timestamp; // timestamp
1200 const char* nmea; // nmea text
Wei Chen1d823b02018-12-14 16:22:17 -08001201 uint32_t length; // length of the nmea text
Katz Yamada0fc49e82018-02-28 11:22:58 -08001202} GnssNmeaNotification;
1203
1204typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001205 uint32_t size; // set to sizeof(GnssDataNotification)
Mike Cailean75cfd432018-06-07 16:54:35 -07001206 GnssDataMask gnssDataMask[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // bitwise OR of GnssDataBits
1207 double jammerInd[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // Jammer Indication
1208 double agc[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // Automatic gain control
1209} GnssDataNotification;
1210
1211typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001212 uint32_t size; // set to sizeof(GnssMeasurementsNotification)
1213 uint32_t count; // number of items in GnssMeasurements array
Katz Yamada0fc49e82018-02-28 11:22:58 -08001214 GnssMeasurementsData measurements[GNSS_MEASUREMENTS_MAX];
1215 GnssMeasurementsClock clock; // clock
1216} GnssMeasurementsNotification;
1217
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301218typedef uint32_t GnssSvId;
1219
1220struct GnssSvIdSource{
Wei Chen1d823b02018-12-14 16:22:17 -08001221 uint32_t size; // set to sizeof(GnssSvIdSource)
1222 GnssSvType constellation; // constellation for the sv to blacklist
Wei Chen53d69432019-12-10 16:07:23 -08001223 GnssSvId svId; // Unique SV Identifier,
1224 // For SV Range of supported constellation,
1225 // please refer to the comment section of svId in GnssSv.
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301226};
1227inline bool operator ==(GnssSvIdSource const& left, GnssSvIdSource const& right) {
1228 return left.size == right.size &&
1229 left.constellation == right.constellation && left.svId == right.svId;
1230}
1231
1232#define GNSS_SV_CONFIG_ALL_BITS_ENABLED_MASK ((uint64_t)0xFFFFFFFFFFFFFFFF)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001233typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001234 uint32_t size; // set to sizeof(GnssSvIdConfig)
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301235
1236 // GLONASS - SV 65 maps to bit 0
1237#define GNSS_SV_CONFIG_GLO_INITIAL_SV_ID 65
1238 uint64_t gloBlacklistSvMask;
1239
1240 // BEIDOU - SV 201 maps to bit 0
1241#define GNSS_SV_CONFIG_BDS_INITIAL_SV_ID 201
1242 uint64_t bdsBlacklistSvMask;
1243
1244 // QZSS - SV 193 maps to bit 0
1245#define GNSS_SV_CONFIG_QZSS_INITIAL_SV_ID 193
1246 uint64_t qzssBlacklistSvMask;
1247
1248 // GAL - SV 301 maps to bit 0
1249#define GNSS_SV_CONFIG_GAL_INITIAL_SV_ID 301
1250 uint64_t galBlacklistSvMask;
Wei Chen688372b2019-08-16 14:59:23 -07001251
1252 // SBAS - SV 120 to 158, maps to 0 to 38
1253 // SV 183 to 191, maps to 39 to 47
1254#define GNSS_SV_CONFIG_SBAS_INITIAL_SV_ID 120
1255#define GNSS_SV_CONFIG_SBAS_INITIAL_SV_LENGTH 39
1256#define GNSS_SV_CONFIG_SBAS_INITIAL2_SV_ID 183
1257 uint64_t sbasBlacklistSvMask;
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301258} GnssSvIdConfig;
1259
Wei Chen45c8da02020-03-18 12:06:01 -07001260// Specify the valid mask for robust location configure
1261// defined in GnssConfigRobustLocation.
Wei Chena57d05b2020-02-26 14:08:37 -08001262enum GnssConfigRobustLocationValidMask {
1263 // GnssConfigRobustLocation has valid enabled field.
1264 GNSS_CONFIG_ROBUST_LOCATION_ENABLED_VALID_BIT = (1<<0),
1265 // GnssConfigRobustLocation has valid enabledForE911 field.
1266 GNSS_CONFIG_ROBUST_LOCATION_ENABLED_FOR_E911_VALID_BIT = (1<<1),
Wei Chen45c8da02020-03-18 12:06:01 -07001267 // GnssConfigRobustLocation has valid version field.
1268 GNSS_CONFIG_ROBUST_LOCATION_VERSION_VALID_BIT = (1<<2),
1269};
1270
1271struct GnssConfigRobustLocationVersion {
1272 // Major version number
1273 uint8_t major;
1274 // Minor version number
1275 uint16_t minor;
1276 inline bool equals(const GnssConfigRobustLocationVersion& version) const {
1277 return (version.major == major && version.minor == minor);
1278 }
Wei Chena57d05b2020-02-26 14:08:37 -08001279};
1280
1281// specify the robust location configuration used by modem GNSS engine
1282struct GnssConfigRobustLocation {
1283 GnssConfigRobustLocationValidMask validMask;
1284 bool enabled;
1285 bool enabledForE911;
Wei Chen45c8da02020-03-18 12:06:01 -07001286 GnssConfigRobustLocationVersion version;
Wei Chena57d05b2020-02-26 14:08:37 -08001287
1288 inline bool equals(const GnssConfigRobustLocation& config) const {
1289 if (config.validMask == validMask &&
1290 config.enabled == enabled &&
Wei Chen45c8da02020-03-18 12:06:01 -07001291 config.enabledForE911 == enabledForE911 &&
1292 config.version.equals(version)) {
Wei Chena57d05b2020-02-26 14:08:37 -08001293 return true;
1294 }
1295 return false;
1296 }
1297};
1298
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301299struct GnssConfig{
Wei Chen1d823b02018-12-14 16:22:17 -08001300 uint32_t size; // set to sizeof(GnssConfig)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001301 GnssConfigFlagsMask flags; // bitwise OR of GnssConfigFlagsBits to mark which params are valid
1302 GnssConfigGpsLock gpsLock;
1303 GnssConfigSuplVersion suplVersion;
1304 GnssConfigSetAssistanceServer assistanceServer;
1305 GnssConfigLppProfile lppProfile;
1306 GnssConfigLppeControlPlaneMask lppeControlPlaneMask;
1307 GnssConfigLppeUserPlaneMask lppeUserPlaneMask;
1308 GnssConfigAGlonassPositionProtocolMask aGlonassPositionProtocolMask;
1309 GnssConfigEmergencyPdnForEmergencySupl emergencyPdnForEmergencySupl;
1310 GnssConfigSuplEmergencyServices suplEmergencyServices;
1311 GnssConfigSuplModeMask suplModeMask; //bitwise OR of GnssConfigSuplModeBits
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301312 std::vector<GnssSvIdSource> blacklistedSvIds;
Wei Chena57d05b2020-02-26 14:08:37 -08001313 GnssConfigRobustLocation robustLocationConfig;
Wei Chenac1ad0e2020-03-05 11:56:25 -08001314 uint16_t minGpsWeek;
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301315
1316 inline bool equals(const GnssConfig& config) {
1317 if (flags == config.flags &&
1318 gpsLock == config.gpsLock &&
1319 suplVersion == config.suplVersion &&
1320 assistanceServer.equals(config.assistanceServer) &&
1321 lppProfile == config.lppProfile &&
1322 lppeControlPlaneMask == config.lppeControlPlaneMask &&
1323 lppeUserPlaneMask == config.lppeUserPlaneMask &&
1324 aGlonassPositionProtocolMask == config.aGlonassPositionProtocolMask &&
1325 emergencyPdnForEmergencySupl == config.emergencyPdnForEmergencySupl &&
1326 suplEmergencyServices == config.suplEmergencyServices &&
1327 suplModeMask == config.suplModeMask &&
Wei Chena57d05b2020-02-26 14:08:37 -08001328 blacklistedSvIds == config.blacklistedSvIds &&
Wei Chenac1ad0e2020-03-05 11:56:25 -08001329 robustLocationConfig.equals(config.robustLocationConfig) &&
1330 minGpsWeek == config.minGpsWeek) {
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301331 return true;
1332 }
1333 return false;
1334 }
1335};
Katz Yamada0fc49e82018-02-28 11:22:58 -08001336
1337typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001338 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001339 bool mValid;
1340 Location mLocation;
1341 double verticalAccuracyMeters;
1342 double speedAccuracyMetersPerSecond;
1343 double bearingAccuracyDegrees;
1344 timespec mUtcReported;
1345} GnssDebugLocation;
1346
1347typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001348 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001349 bool mValid;
1350 int64_t timeEstimate;
1351 float timeUncertaintyNs;
1352 float frequencyUncertaintyNsPerSec;
1353} GnssDebugTime;
1354
1355typedef struct {
Wei Chen53d69432019-12-10 16:07:23 -08001356 // set to sizeof
1357 uint32_t size;
1358 // Unique SV Identifier
1359 // For SV Range of supported constellation,
1360 // please refer to the comment section of svId in GnssSv.
Katz Yamada0fc49e82018-02-28 11:22:58 -08001361 uint32_t svid;
1362 GnssSvType constellation;
1363 GnssEphemerisType mEphemerisType;
1364 GnssEphemerisSource mEphemerisSource;
1365 GnssEphemerisHealth mEphemerisHealth;
1366 float ephemerisAgeSeconds;
1367 bool serverPredictionIsAvailable;
1368 float serverPredictionAgeSeconds;
1369} GnssDebugSatelliteInfo;
1370
1371typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001372 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001373 GnssDebugLocation mLocation;
1374 GnssDebugTime mTime;
1375 std::vector<GnssDebugSatelliteInfo> mSatelliteInfo;
1376} GnssDebugReport;
1377
Wei Chen21b9c4e2018-09-19 10:59:28 -07001378typedef uint32_t LeapSecondSysInfoMask;
1379typedef enum {
1380 // current leap second info is available. This info will only
1381 // be available if the leap second change info is not available.
1382 //
1383 // If leap second change info is avaiable, to figure out
1384 // the current leap second info, compare current gps time with
1385 // the gps timestamp of leap second change to know whether to choose
1386 // leapSecondBefore or leapSecondAfter as current leap second.
1387 LEAP_SECOND_SYS_INFO_CURRENT_LEAP_SECONDS_BIT = (1ULL << 0),
1388 // the last known leap change event is available.
1389 // The info can be available on two scenario:
1390 // 1: this leap second change event has been scheduled and yet to happen
1391 // 2: this leap second change event has already happened and next
1392 // leap second change event has not yet been scheduled.
1393 LEAP_SECOND_SYS_INFO_LEAP_SECOND_CHANGE_BIT = (1ULL << 1),
1394} LeapSecondSysInfoDataBits;
1395
1396struct LeapSecondChangeInfo {
1397 // GPS timestamp that corrresponds to the last known
1398 // leap second change event.
1399 //
1400 // The info can be available on two scenario:
1401 // 1: this leap second change event has been scheduled and yet to happen
1402 // 2: this leap second change event has already happened and next
1403 // leap second change event has not yet been scheduled.
1404 GnssSystemTimeStructType gpsTimestampLsChange;
1405 // Number of leap seconds prior to the leap second change event
1406 // that corresponds to the timestamp at gpsTimestampLsChange.
1407 uint8_t leapSecondsBeforeChange;
1408 // Number of leap seconds after the leap second change event
1409 // that corresponds to the timestamp at gpsTimestampLsChange.
1410 uint8_t leapSecondsAfterChange;
1411};
1412
1413struct LeapSecondSystemInfo {
1414 LeapSecondSysInfoMask leapSecondInfoMask;
1415 uint8_t leapSecondCurrent;
1416 LeapSecondChangeInfo leapSecondChangeInfo;
1417};
1418
1419typedef uint32_t LocationSystemInfoMask;
1420typedef enum {
1421 // contains current leap second or leap second change info
1422 LOCATION_SYS_INFO_LEAP_SECOND = (1ULL << 0),
1423} LocationSystemInfoDataBits;
1424
1425struct LocationSystemInfo {
1426 LocationSystemInfoMask systemInfoMask;
1427 LeapSecondSystemInfo leapSecondSysInfo;
1428};
1429
Wei Chen688372b2019-08-16 14:59:23 -07001430/* Mask indicating enabled or disabled constellations */
1431typedef uint64_t GnssSvTypesMask;
1432typedef enum {
1433 GNSS_SV_TYPES_MASK_GLO_BIT = (1<<0),
1434 GNSS_SV_TYPES_MASK_BDS_BIT = (1<<1),
1435 GNSS_SV_TYPES_MASK_QZSS_BIT = (1<<2),
Nilesh Gharde554985a2020-01-28 15:05:44 +05301436 GNSS_SV_TYPES_MASK_GAL_BIT = (1<<3),
1437 GNSS_SV_TYPES_MASK_NAVIC_BIT = (1<<4),
Wei Chen688372b2019-08-16 14:59:23 -07001438} GnssSvTypesMaskBits;
1439
1440/* This SV Type config is injected directly to GNSS Adapter
1441 * bypassing Location API */
1442typedef struct {
1443 uint32_t size; // set to sizeof(GnssSvTypeConfig)
1444 // Enabled Constellations
1445 GnssSvTypesMask enabledSvTypesMask;
1446 // Disabled Constellations
1447 GnssSvTypesMask blacklistedSvTypesMask;
1448} GnssSvTypeConfig;
1449
1450// Specify parameters related to lever arm
1451struct LeverArmParams {
1452 // Offset along the vehicle forward axis
1453 float forwardOffsetMeters;
1454 // Offset along the vehicle starboard axis
1455 float sidewaysOffsetMeters;
1456 // Offset along the vehicle up axis
1457 float upOffsetMeters;
1458};
1459
1460typedef uint32_t LeverArmTypeMask;
1461
1462enum LeverArmTypeBits {
1463 // Lever arm regarding the VRP (Vehicle Reference Point) w.r.t
1464 // the origin (at the GPS Antenna)
1465 LEVER_ARM_TYPE_GNSS_TO_VRP_BIT = (1<<0),
1466 // Lever arm regarding GNSS Antenna w.r.t the origin at the IMU
1467 // e.g.: inertial measurement unit for DR (dead reckoning
1468 // engine)
1469 LEVER_ARM_TYPE_DR_IMU_TO_GNSS_BIT = (1<<1),
1470 // Lever arm regarding GNSS Antenna w.r.t the origin at the
1471 // IMU (inertial measurement unit) for VEPP (vision enhanced
1472 // precise positioning engine)
1473 LEVER_ARM_TYPE_VEPP_IMU_TO_GNSS_BIT = (1<<2)
1474};
1475
1476struct LeverArmConfigInfo {
1477 // Valid mask for the types of lever arm parameters provided
1478 LeverArmTypeMask leverArmValidMask;
1479 // Lever arm regarding the VRP (Vehicle Reference Point) w.r.t the origin
1480 // (at the GPS Antenna)
1481 LeverArmParams gnssToVRP;
1482 // Lever arm parameters regarding GNSS Antenna w.r.t the origin at the IMU
1483 // (inertial measurement unit) for DR (dead reckoning engine)
1484 LeverArmParams drImuToGnss;
1485 // Lever arm regarding GNSS Antenna w.r.t the origin at the IMU
1486 // (inertial measurement unit) for VEPP (vision enhanced precise position engine)
1487 LeverArmParams veppImuToGnss;
1488};
1489
Katz Yamada0fc49e82018-02-28 11:22:58 -08001490/* Provides the capabilities of the system
1491 capabilities callback is called once soon after createInstance is called */
1492typedef std::function<void(
1493 LocationCapabilitiesMask capabilitiesMask // bitwise OR of LocationCapabilitiesBits
1494)> capabilitiesCallback;
1495
1496/* Used by tracking, batching, and miscellanous APIs
1497 responseCallback is called for every Tracking, Batching API, and Miscellanous API */
1498typedef std::function<void(
1499 LocationError err, // if not SUCCESS, then id is not valid
1500 uint32_t id // id to be associated to the request
1501)> responseCallback;
1502
1503/* Used by APIs that gets more than one LocationError in it's response
1504 collectiveResponseCallback is called for every geofence API call.
1505 ids array and LocationError array are only valid until collectiveResponseCallback returns. */
1506typedef std::function<void(
Wei Chen1d823b02018-12-14 16:22:17 -08001507 uint32_t count, // number of locations in arrays
Katz Yamada0fc49e82018-02-28 11:22:58 -08001508 LocationError* errs, // array of LocationError associated to the request
1509 uint32_t* ids // array of ids to be associated to the request
1510)> collectiveResponseCallback;
1511
1512/* Used for startTracking API, optional can be NULL
1513 trackingCallback is called when delivering a location in a tracking session
1514 broadcasted to all clients, no matter if a session has started by client */
1515typedef std::function<void(
1516 Location location
1517)> trackingCallback;
1518
1519/* Used for startBatching API, optional can be NULL
1520 batchingCallback is called when delivering locations in a batching session.
1521 broadcasted to all clients, no matter if a session has started by client */
1522typedef std::function<void(
Wei Chen1d823b02018-12-14 16:22:17 -08001523 uint32_t count, // number of locations in array
Katz Yamada0fc49e82018-02-28 11:22:58 -08001524 Location* location, // array of locations
1525 BatchingOptions batchingOptions // Batching options
1526)> batchingCallback;
1527
1528typedef std::function<void(
1529 BatchingStatusInfo batchingStatus, // batch status
1530 std::list<uint32_t> & listOfCompletedTrips
1531)> batchingStatusCallback;
1532
1533/* Gives GNSS Location information, optional can be NULL
1534 gnssLocationInfoCallback is called only during a tracking session
1535 broadcasted to all clients, no matter if a session has started by client */
1536typedef std::function<void(
1537 GnssLocationInfoNotification gnssLocationInfoNotification
1538)> gnssLocationInfoCallback;
1539
Wei Chena28f8132019-07-18 15:50:55 -07001540/* Gives default combined location information from all engines and
1541 location information individually from selected engines.
1542 This callback is only used when there are multiple engines
1543 running in the system.
1544
1545 optional can be NULL
1546
1547 engineLocationsInfoCallback is called only during a tracking session
1548 broadcasted to all clients, no matter if a session has started by client */
1549typedef std::function<void(
1550 uint32_t count,
1551 GnssLocationInfoNotification* engineLocationInfoNotification
1552)> engineLocationsInfoCallback;
1553
Katz Yamada0fc49e82018-02-28 11:22:58 -08001554/* Used for addGeofences API, optional can be NULL
1555 geofenceBreachCallback is called when any number of geofences have a state change */
1556typedef std::function<void(
1557 GeofenceBreachNotification geofenceBreachNotification
1558)> geofenceBreachCallback;
1559
1560/* Used for addGeofences API, optional can be NULL
1561 geofenceStatusCallback is called when any number of geofences have a status change */
1562typedef std::function<void(
1563 GeofenceStatusNotification geofenceStatusNotification
1564)> geofenceStatusCallback;
1565
1566/* Network Initiated request, optional can be NULL
1567 This callback should be responded to by calling gnssNiResponse */
1568typedef std::function<void(
1569 uint32_t id, // id that should be used to respond by calling gnssNiResponse
1570 GnssNiNotification gnssNiNotification
1571)> gnssNiCallback;
1572
1573/* Gives GNSS SV information, optional can be NULL
1574 gnssSvCallback is called only during a tracking session
1575 broadcasted to all clients, no matter if a session has started by client */
1576typedef std::function<void(
1577 GnssSvNotification gnssSvNotification
1578)> gnssSvCallback;
1579
1580/* Gives GNSS NMEA data, optional can be NULL
1581 gnssNmeaCallback is called only during a tracking session
1582 broadcasted to all clients, no matter if a session has started by client */
1583typedef std::function<void(
1584 GnssNmeaNotification gnssNmeaNotification
1585)> gnssNmeaCallback;
1586
Mike Cailean75cfd432018-06-07 16:54:35 -07001587/* Gives GNSS data, optional can be NULL
1588 gnssDataCallback is called only during a tracking session
1589 broadcasted to all clients, no matter if a session has started by client */
1590typedef std::function<void(
1591 GnssDataNotification gnssDataNotification
1592)> gnssDataCallback;
1593
Katz Yamada0fc49e82018-02-28 11:22:58 -08001594/* Gives GNSS Measurements information, optional can be NULL
1595 gnssMeasurementsCallback is called only during a tracking session
1596 broadcasted to all clients, no matter if a session has started by client */
1597typedef std::function<void(
1598 GnssMeasurementsNotification gnssMeasurementsNotification
1599)> gnssMeasurementsCallback;
1600
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301601/* Provides the current GNSS configuration to the client */
1602typedef std::function<void(
Wei Chena57d05b2020-02-26 14:08:37 -08001603 uint32_t session_id,
1604 const GnssConfig& config
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301605)> gnssConfigCallback;
1606
Wei Chen21b9c4e2018-09-19 10:59:28 -07001607/* LocationSystemInfoCb is for receiving rare occuring location
1608 system information update. optional, can be NULL.
1609*/
1610typedef std::function<void(
1611 LocationSystemInfo locationSystemInfo
1612)> locationSystemInfoCallback;
1613
Wei Chene2329862018-11-15 09:41:26 -08001614typedef std::function<void(
1615)> locationApiDestroyCompleteCallback;
1616
Bhavna Sharma49c60ab2019-01-24 16:18:38 -08001617typedef uint16_t LocationAdapterTypeMask;
1618typedef enum {
1619 LOCATION_ADAPTER_GNSS_TYPE_BIT = (1<<0), // adapter type is GNSS
1620 LOCATION_ADAPTER_FLP_TYPE_BIT = (1<<1), // adapter type is FLP
1621 LOCATION_ADAPTER_GEOFENCE_TYPE_BIT = (1<<2) // adapter type is geo fence
1622} LocationAdapterTypeBits;
1623
Katz Yamada0fc49e82018-02-28 11:22:58 -08001624typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001625 uint32_t size; // set to sizeof(LocationCallbacks)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001626 capabilitiesCallback capabilitiesCb; // mandatory
1627 responseCallback responseCb; // mandatory
1628 collectiveResponseCallback collectiveResponseCb; // mandatory
1629 trackingCallback trackingCb; // optional
1630 batchingCallback batchingCb; // optional
1631 geofenceBreachCallback geofenceBreachCb; // optional
1632 geofenceStatusCallback geofenceStatusCb; // optional
1633 gnssLocationInfoCallback gnssLocationInfoCb; // optional
1634 gnssNiCallback gnssNiCb; // optional
1635 gnssSvCallback gnssSvCb; // optional
1636 gnssNmeaCallback gnssNmeaCb; // optional
Mike Cailean75cfd432018-06-07 16:54:35 -07001637 gnssDataCallback gnssDataCb; // optional
Katz Yamada0fc49e82018-02-28 11:22:58 -08001638 gnssMeasurementsCallback gnssMeasurementsCb; // optional
1639 batchingStatusCallback batchingStatusCb; // optional
Wei Chen21b9c4e2018-09-19 10:59:28 -07001640 locationSystemInfoCallback locationSystemInfoCb; // optional
Wei Chena28f8132019-07-18 15:50:55 -07001641 engineLocationsInfoCallback engineLocationsInfoCb; // optional
Katz Yamada0fc49e82018-02-28 11:22:58 -08001642} LocationCallbacks;
1643
1644#endif /* LOCATIONDATATYPES_H */