blob: 0b1fafde9213b74613d5e1023606bc8a5a59340f [file] [log] [blame]
Wei Chenf8883782019-07-25 13:51:58 -07001/* 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 Munagala880fdd92019-05-07 12:32:34 +053040#define GNSS_SV_MAX (128)
Mike Caileanb95f05c2019-04-08 11:17:31 -070041#define GNSS_MEASUREMENTS_MAX (128)
Katz Yamada0fc49e82018-02-28 11:22:58 -080042#define GNSS_UTC_TIME_OFFSET (3657)
43
Saurabh Srivastava331c6d92019-04-24 22:34:24 +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
Mike Cailean4149abc2019-02-04 16:28:51 -080052#define GNSS_MAX_NAME_LENGTH (8)
53
Katz Yamada0fc49e82018-02-28 11:22:58 -080054typedef enum {
55 LOCATION_ERROR_SUCCESS = 0,
56 LOCATION_ERROR_GENERAL_FAILURE,
57 LOCATION_ERROR_CALLBACK_MISSING,
58 LOCATION_ERROR_INVALID_PARAMETER,
59 LOCATION_ERROR_ID_EXISTS,
60 LOCATION_ERROR_ID_UNKNOWN,
61 LOCATION_ERROR_ALREADY_STARTED,
62 LOCATION_ERROR_GEOFENCES_AT_MAX,
63 LOCATION_ERROR_NOT_SUPPORTED
64} LocationError;
65
66// Flags to indicate which values are valid in a Location
67typedef uint16_t LocationFlagsMask;
68typedef enum {
69 LOCATION_HAS_LAT_LONG_BIT = (1<<0), // location has valid latitude and longitude
70 LOCATION_HAS_ALTITUDE_BIT = (1<<1), // location has valid altitude
71 LOCATION_HAS_SPEED_BIT = (1<<2), // location has valid speed
72 LOCATION_HAS_BEARING_BIT = (1<<3), // location has valid bearing
73 LOCATION_HAS_ACCURACY_BIT = (1<<4), // location has valid accuracy
74 LOCATION_HAS_VERTICAL_ACCURACY_BIT = (1<<5), // location has valid vertical accuracy
75 LOCATION_HAS_SPEED_ACCURACY_BIT = (1<<6), // location has valid speed accuracy
76 LOCATION_HAS_BEARING_ACCURACY_BIT = (1<<7), // location has valid bearing accuracy
haohuang17015dd2018-04-16 15:12:49 +080077 LOCATION_HAS_SPOOF_MASK = (1<<8), // location has valid spoof mask
Katz Yamada0fc49e82018-02-28 11:22:58 -080078} LocationFlagsBits;
79
80typedef uint16_t LocationTechnologyMask;
81typedef enum {
82 LOCATION_TECHNOLOGY_GNSS_BIT = (1<<0), // location was calculated using GNSS
83 LOCATION_TECHNOLOGY_CELL_BIT = (1<<1), // location was calculated using Cell
84 LOCATION_TECHNOLOGY_WIFI_BIT = (1<<2), // location was calculated using WiFi
85 LOCATION_TECHNOLOGY_SENSORS_BIT = (1<<3), // location was calculated using Sensors
86} LocationTechnologyBits;
87
haohuang17015dd2018-04-16 15:12:49 +080088typedef uint32_t LocationSpoofMask;
89typedef enum {
90 LOCATION_POSTION_SPOOFED = (1<<0), // location position spoofed
91 LOCATION_TIME_SPOOFED = (1<<1), // location time spoofed
92 LOCATION_NAVIGATION_DATA_SPOOFED = (1<<2), // location navigation data spoofed
93} LocationSpoofBits;
94
Katz Yamada0fc49e82018-02-28 11:22:58 -080095typedef enum {
96 LOCATION_RELIABILITY_NOT_SET = 0,
97 LOCATION_RELIABILITY_VERY_LOW,
98 LOCATION_RELIABILITY_LOW,
99 LOCATION_RELIABILITY_MEDIUM,
100 LOCATION_RELIABILITY_HIGH,
101} LocationReliability;
102
103typedef uint32_t GnssLocationNavSolutionMask;
104typedef enum {
105 LOCATION_SBAS_CORRECTION_IONO_BIT = (1<<0), // SBAS ionospheric correction is used
106 LOCATION_SBAS_CORRECTION_FAST_BIT = (1<<1), // SBAS fast correction is used
107 LOCATION_SBAS_CORRECTION_LONG_BIT = (1<<2), // SBAS long-tem correction is used
108 LOCATION_SBAS_INTEGRITY_BIT = (1<<3), // SBAS integrity information is used
109 LOCATION_NAV_CORRECTION_DGNSS_BIT = (1<<4), // Position Report is DGNSS corrected
110 LOCATION_NAV_CORRECTION_RTK_BIT = (1<<5), // Position Report is RTK corrected
111 LOCATION_NAV_CORRECTION_PPP_BIT = (1<<6) // Position Report is PPP corrected
112} GnssLocationNavSolutionBits;
113
114typedef uint32_t GnssLocationPosTechMask;
115typedef enum {
116 LOCATION_POS_TECH_DEFAULT_BIT = 0,
117 LOCATION_POS_TECH_SATELLITE_BIT = (1<<0),
118 LOCATION_POS_TECH_CELLID_BIT = (1<<1),
119 LOCATION_POS_TECH_WIFI_BIT = (1<<2),
120 LOCATION_POS_TECH_SENSORS_BIT = (1<<3),
121 LOCATION_POS_TECH_REFERENCE_LOCATION_BIT = (1<<4),
122 LOCATION_POS_TECH_INJECTED_COARSE_POSITION_BIT = (1<<5),
123 LOCATION_POS_TECH_AFLT_BIT = (1<<6),
124 LOCATION_POS_TECH_HYBRID_BIT = (1<<7),
125 LOCATION_POS_TECH_PPE_BIT = (1<<8)
126} GnssLocationPosTechBits;
127
128typedef uint32_t GnssLocationPosDataMask;
129typedef enum {
130 LOCATION_NAV_DATA_HAS_LONG_ACCEL_BIT = (1<<0), // Navigation data has Forward Acceleration
131 LOCATION_NAV_DATA_HAS_LAT_ACCEL_BIT = (1<<1), // Navigation data has Sideward Acceleration
132 LOCATION_NAV_DATA_HAS_VERT_ACCEL_BIT = (1<<2), // Navigation data has Vertical Acceleration
133 LOCATION_NAV_DATA_HAS_YAW_RATE_BIT = (1<<3), // Navigation data has Heading Rate
Naresh Munagala02cddf02018-06-21 10:44:51 +0530134 LOCATION_NAV_DATA_HAS_PITCH_BIT = (1<<4), // Navigation data has Body pitch
135 // Navigation data has Forward Acceleration uncertainty
136 LOCATION_NAV_DATA_HAS_LONG_ACCEL_UNC_BIT = (1<<5),
137 // Navigation data has Sideward Acceleration uncertainty
138 LOCATION_NAV_DATA_HAS_LAT_ACCEL_UNC_BIT = (1<<6),
139 // Navigation data has Vertical Acceleration uncertainty
140 LOCATION_NAV_DATA_HAS_VERT_ACCEL_UNC_BIT = (1<<7),
141 // Navigation data has Heading Rate uncertainty
142 LOCATION_NAV_DATA_HAS_YAW_RATE_UNC_BIT = (1<<8),
143 // Navigation data has Body pitch uncertainty
144 LOCATION_NAV_DATA_HAS_PITCH_UNC_BIT = (1<<9)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800145} GnssLocationPosDataBits;
146
147typedef uint32_t GnssLocationInfoFlagMask;
148typedef enum {
149 GNSS_LOCATION_INFO_ALTITUDE_MEAN_SEA_LEVEL_BIT = (1<<0), // valid altitude mean sea level
150 GNSS_LOCATION_INFO_DOP_BIT = (1<<1), // valid pdop, hdop, and vdop
151 GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT = (1<<2), // valid magnetic deviation
152 GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT = (1<<3), // valid horizontal reliability
153 GNSS_LOCATION_INFO_VER_RELIABILITY_BIT = (1<<4), // valid vertical reliability
154 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MAJOR_BIT = (1<<5), // valid elipsode semi major
155 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MINOR_BIT = (1<<6), // valid elipsode semi minor
156 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_AZIMUTH_BIT = (1<<7), // valid accuracy elipsode azimuth
Wei Chen81f47db2019-04-30 15:02:43 -0700157 GNSS_LOCATION_INFO_GNSS_SV_USED_DATA_BIT = (1<<8), // valid svUsedInPosition,
158 // numOfMeasReceived
159 // and measUsageInfo
Katz Yamada0fc49e82018-02-28 11:22:58 -0800160 GNSS_LOCATION_INFO_NAV_SOLUTION_MASK_BIT = (1<<9), // valid navSolutionMask
161 GNSS_LOCATION_INFO_POS_TECH_MASK_BIT = (1<<10),// valid LocPosTechMask
162 GNSS_LOCATION_INFO_SV_SOURCE_INFO_BIT = (1<<11),// valid LocSvInfoSource
163 GNSS_LOCATION_INFO_POS_DYNAMICS_DATA_BIT = (1<<12),// valid position dynamics data
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700164 GNSS_LOCATION_INFO_EXT_DOP_BIT = (1<<13),// valid gdop, tdop
165 GNSS_LOCATION_INFO_NORTH_STD_DEV_BIT = (1<<14),// valid North standard deviation
166 GNSS_LOCATION_INFO_EAST_STD_DEV_BIT = (1<<15),// valid East standard deviation
167 GNSS_LOCATION_INFO_NORTH_VEL_BIT = (1<<16),// valid North Velocity
168 GNSS_LOCATION_INFO_EAST_VEL_BIT = (1<<17),// valid East Velocity
169 GNSS_LOCATION_INFO_UP_VEL_BIT = (1<<18),// valid Up Velocity
170 GNSS_LOCATION_INFO_NORTH_VEL_UNC_BIT = (1<<19),// valid North Velocity Uncertainty
171 GNSS_LOCATION_INFO_EAST_VEL_UNC_BIT = (1<<20),// valid East Velocity Uncertainty
172 GNSS_LOCATION_INFO_UP_VEL_UNC_BIT = (1<<21),// valid Up Velocity Uncertainty
173 GNSS_LOCATION_INFO_LEAP_SECONDS_BIT = (1<<22),// valid leap seconds
Wei Chen81f47db2019-04-30 15:02:43 -0700174 GNSS_LOCATION_INFO_TIME_UNC_BIT = (1<<23),// valid time uncertainty
Wei Chen49f7e152019-04-19 15:21:27 -0700175 GNSS_LOCATION_INFO_NUM_SV_USED_IN_POSITION_BIT = (1<<24), // number of SV used in position
176 GNSS_LOCATION_INFO_CALIBRATION_CONFIDENCE_BIT = (1<<25), // valid sensor cal confidence
177 GNSS_LOCATION_INFO_CALIBRATION_STATUS_BIT = (1<<26), // valid sensor cal status
Wei Chen1a1232c2019-07-18 15:50:55 -0700178 GNSS_LOCATION_INFO_OUTPUT_ENG_TYPE_BIT = (1<<27), // valid output engine type
179 GNSS_LOCATION_INFO_OUTPUT_ENG_MASK_BIT = (1<<28), // valid output engine mask
Wei Chencac9fbf2020-03-02 13:04:33 -0800180 GNSS_LOCATION_INFO_CONFORMITY_INDEX_BIT = (1<<29), // valid conformity index
Katz Yamada0fc49e82018-02-28 11:22:58 -0800181} GnssLocationInfoFlagBits;
182
183typedef enum {
184 GEOFENCE_BREACH_ENTER = 0,
185 GEOFENCE_BREACH_EXIT,
186 GEOFENCE_BREACH_DWELL_IN,
187 GEOFENCE_BREACH_DWELL_OUT,
188 GEOFENCE_BREACH_UNKNOWN,
189} GeofenceBreachType;
190
191typedef uint16_t GeofenceBreachTypeMask;
192typedef enum {
193 GEOFENCE_BREACH_ENTER_BIT = (1<<0),
194 GEOFENCE_BREACH_EXIT_BIT = (1<<1),
195 GEOFENCE_BREACH_DWELL_IN_BIT = (1<<2),
196 GEOFENCE_BREACH_DWELL_OUT_BIT = (1<<3),
197} GeofenceBreachTypeBits;
198
199typedef enum {
200 GEOFENCE_STATUS_AVAILABILE_NO = 0,
201 GEOFENCE_STATUS_AVAILABILE_YES,
202} GeofenceStatusAvailable;
203
204typedef uint32_t LocationCapabilitiesMask;
205typedef enum {
206 // supports startTracking API with minInterval param
207 LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT = (1<<0),
208 // supports startBatching API with minInterval param
209 LOCATION_CAPABILITIES_TIME_BASED_BATCHING_BIT = (1<<1),
210 // supports startTracking API with minDistance param
211 LOCATION_CAPABILITIES_DISTANCE_BASED_TRACKING_BIT = (1<<2),
212 // supports startBatching API with minDistance param
213 LOCATION_CAPABILITIES_DISTANCE_BASED_BATCHING_BIT = (1<<3),
214 // supports addGeofences API
215 LOCATION_CAPABILITIES_GEOFENCE_BIT = (1<<4),
216 // supports GnssMeasurementsCallback
217 LOCATION_CAPABILITIES_GNSS_MEASUREMENTS_BIT = (1<<5),
218 // supports startTracking/startBatching API with LocationOptions.mode of MSB (Ms Based)
219 LOCATION_CAPABILITIES_GNSS_MSB_BIT = (1<<6),
220 // supports startTracking/startBatching API with LocationOptions.mode of MSA (MS Assisted)
221 LOCATION_CAPABILITIES_GNSS_MSA_BIT = (1<<7),
222 // supports debug nmea sentences in the debugNmeaCallback
223 LOCATION_CAPABILITIES_DEBUG_NMEA_BIT = (1<<8),
224 // support outdoor trip batching
Dante Russo271cfd82018-06-04 16:55:56 -0700225 LOCATION_CAPABILITIES_OUTDOOR_TRIP_BATCHING_BIT = (1<<9),
226 // support constellation enablement
227 LOCATION_CAPABILITIES_CONSTELLATION_ENABLEMENT_BIT = (1<<10),
228 // support agpm
229 LOCATION_CAPABILITIES_AGPM_BIT = (1<<11),
Mike Caileanb884edb2019-05-02 17:09:25 -0700230 // support location privacy
231 LOCATION_CAPABILITIES_PRIVACY_BIT = (1<<12),
Mike Caileanb1cb9072020-03-16 11:45:01 -0700232 // support measurement corrections
233 LOCATION_CAPABILITIES_MEASUREMENTS_CORRECTION_BIT = (1<<13),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800234} LocationCapabilitiesBits;
235
236typedef enum {
237 LOCATION_TECHNOLOGY_TYPE_GNSS = 0,
238} LocationTechnologyType;
239
240// Configures how GPS is locked when GPS is disabled (through GnssDisable)
Hoss Zhou1839fb12018-12-20 15:05:08 +0800241enum {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800242 GNSS_CONFIG_GPS_LOCK_NONE = 0, // gps is not locked when GPS is disabled (GnssDisable)
243 GNSS_CONFIG_GPS_LOCK_MO, // gps mobile originated (MO) is locked when GPS is disabled
244 GNSS_CONFIG_GPS_LOCK_NI, // gps network initiated (NI) is locked when GPS is disabled
245 GNSS_CONFIG_GPS_LOCK_MO_AND_NI,// gps MO and NI is locked when GPS is disabled
Hoss Zhou1839fb12018-12-20 15:05:08 +0800246};
247typedef int32_t GnssConfigGpsLock;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800248
249// SUPL version
250typedef enum {
251 GNSS_CONFIG_SUPL_VERSION_1_0_0 = 1,
252 GNSS_CONFIG_SUPL_VERSION_2_0_0,
253 GNSS_CONFIG_SUPL_VERSION_2_0_2,
Nilesh Ghardec7b63822019-11-20 17:59:43 +0530254 GNSS_CONFIG_SUPL_VERSION_2_0_4,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800255} GnssConfigSuplVersion;
256
257// LTE Positioning Profile
258typedef enum {
259 GNSS_CONFIG_LPP_PROFILE_RRLP_ON_LTE = 0, // RRLP on LTE (Default)
260 GNSS_CONFIG_LPP_PROFILE_USER_PLANE, // LPP User Plane (UP) on LTE
261 GNSS_CONFIG_LPP_PROFILE_CONTROL_PLANE, // LPP_Control_Plane (CP)
262 GNSS_CONFIG_LPP_PROFILE_USER_PLANE_AND_CONTROL_PLANE, // Both LPP UP and CP
263} GnssConfigLppProfile;
264
265// Technology for LPPe Control Plane
266typedef uint16_t GnssConfigLppeControlPlaneMask;
267typedef enum {
268 GNSS_CONFIG_LPPE_CONTROL_PLANE_DBH_BIT = (1<<0), // DBH
269 GNSS_CONFIG_LPPE_CONTROL_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS
270 GNSS_CONFIG_LPPE_CONTROL_PLANE_SRN_AP_MEASUREMENTS_BIT = (1<<2), // SRN_AP_MEASUREMENTS
271 GNSS_CONFIG_LPPE_CONTROL_PLANE_SENSOR_BARO_MEASUREMENTS_BIT = (1<<3),
272 // SENSOR_BARO_MEASUREMENTS
273} GnssConfigLppeControlPlaneBits;
274
275// Technology for LPPe User Plane
276typedef uint16_t GnssConfigLppeUserPlaneMask;
277typedef enum {
278 GNSS_CONFIG_LPPE_USER_PLANE_DBH_BIT = (1<<0), // DBH
279 GNSS_CONFIG_LPPE_USER_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS
280 GNSS_CONFIG_LPPE_USER_PLANE_SRN_AP_MEASUREMENTS_BIT = (1<<2), // SRN_AP_MEASUREMENTS
281 GNSS_CONFIG_LPPE_USER_PLANE_SENSOR_BARO_MEASUREMENTS_BIT = (1<<3),
282 // SENSOR_BARO_MEASUREMENTS
283} GnssConfigLppeUserPlaneBits;
284
285// Positioning Protocol on A-GLONASS system
286typedef uint16_t GnssConfigAGlonassPositionProtocolMask;
287typedef enum {
288 GNSS_CONFIG_RRC_CONTROL_PLANE_BIT = (1<<0), // RRC Control Plane
289 GNSS_CONFIG_RRLP_USER_PLANE_BIT = (1<<1), // RRLP User Plane
290 GNSS_CONFIG_LLP_USER_PLANE_BIT = (1<<2), // LPP User Plane
291 GNSS_CONFIG_LLP_CONTROL_PLANE_BIT = (1<<3), // LPP Control Plane
292} GnssConfigAGlonassPositionProtocolBits;
293
294typedef enum {
295 GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_NO = 0,
296 GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_YES,
297} GnssConfigEmergencyPdnForEmergencySupl;
298
299typedef enum {
300 GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_NO = 0,
301 GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_YES,
302} GnssConfigSuplEmergencyServices;
303
304typedef uint16_t GnssConfigSuplModeMask;
305typedef enum {
306 GNSS_CONFIG_SUPL_MODE_MSB_BIT = (1<<0),
307 GNSS_CONFIG_SUPL_MODE_MSA_BIT = (1<<1),
308} GnssConfigSuplModeBits;
309
310typedef uint32_t GnssConfigFlagsMask;
311typedef enum {
312 GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT = (1<<0),
313 GNSS_CONFIG_FLAGS_SUPL_VERSION_VALID_BIT = (1<<1),
314 GNSS_CONFIG_FLAGS_SET_ASSISTANCE_DATA_VALID_BIT = (1<<2),
315 GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT = (1<<3),
316 GNSS_CONFIG_FLAGS_LPPE_CONTROL_PLANE_VALID_BIT = (1<<4),
317 GNSS_CONFIG_FLAGS_LPPE_USER_PLANE_VALID_BIT = (1<<5),
318 GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT = (1<<6),
319 GNSS_CONFIG_FLAGS_EM_PDN_FOR_EM_SUPL_VALID_BIT = (1<<7),
320 GNSS_CONFIG_FLAGS_SUPL_EM_SERVICES_BIT = (1<<8),
321 GNSS_CONFIG_FLAGS_SUPL_MODE_BIT = (1<<9),
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +0530322 GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT = (1<<10),
Mike Caileanb0462412019-02-11 09:11:09 -0800323 GNSS_CONFIG_FLAGS_EMERGENCY_EXTENSION_SECONDS_BIT = (1<<11),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800324} GnssConfigFlagsBits;
325
326typedef enum {
327 GNSS_NI_ENCODING_TYPE_NONE = 0,
328 GNSS_NI_ENCODING_TYPE_GSM_DEFAULT,
329 GNSS_NI_ENCODING_TYPE_UTF8,
330 GNSS_NI_ENCODING_TYPE_UCS2,
331} GnssNiEncodingType;
332
333typedef enum {
334 GNSS_NI_TYPE_VOICE = 0,
335 GNSS_NI_TYPE_SUPL,
336 GNSS_NI_TYPE_CONTROL_PLANE,
337 GNSS_NI_TYPE_EMERGENCY_SUPL
338} GnssNiType;
339
340typedef uint16_t GnssNiOptionsMask;
341typedef enum {
342 GNSS_NI_OPTIONS_NOTIFICATION_BIT = (1<<0),
343 GNSS_NI_OPTIONS_VERIFICATION_BIT = (1<<1),
344 GNSS_NI_OPTIONS_PRIVACY_OVERRIDE_BIT = (1<<2),
345} GnssNiOptionsBits;
346
347typedef enum {
348 GNSS_NI_RESPONSE_ACCEPT = 1,
349 GNSS_NI_RESPONSE_DENY,
350 GNSS_NI_RESPONSE_NO_RESPONSE,
351 GNSS_NI_RESPONSE_IGNORE,
352} GnssNiResponse;
353
354typedef enum {
355 GNSS_SV_TYPE_UNKNOWN = 0,
356 GNSS_SV_TYPE_GPS,
357 GNSS_SV_TYPE_SBAS,
358 GNSS_SV_TYPE_GLONASS,
359 GNSS_SV_TYPE_QZSS,
360 GNSS_SV_TYPE_BEIDOU,
361 GNSS_SV_TYPE_GALILEO,
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530362 GNSS_SV_TYPE_NAVIC,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800363} GnssSvType;
364
365typedef enum {
366 GNSS_EPH_TYPE_UNKNOWN = 0,
367 GNSS_EPH_TYPE_EPHEMERIS,
368 GNSS_EPH_TYPE_ALMANAC,
369} GnssEphemerisType;
370
371typedef enum {
372 GNSS_EPH_SOURCE_UNKNOWN = 0,
373 GNSS_EPH_SOURCE_DEMODULATED,
374 GNSS_EPH_SOURCE_SUPL_PROVIDED,
375 GNSS_EPH_SOURCE_OTHER_SERVER_PROVIDED,
376 GNSS_EPH_SOURCE_LOCAL,
377} GnssEphemerisSource;
378
379typedef enum {
380 GNSS_EPH_HEALTH_UNKNOWN = 0,
381 GNSS_EPH_HEALTH_GOOD,
382 GNSS_EPH_HEALTH_BAD,
383} GnssEphemerisHealth;
384
385typedef uint16_t GnssSvOptionsMask;
386typedef enum {
Mike Cailean7dfa87b2018-02-06 16:36:27 -0800387 GNSS_SV_OPTIONS_HAS_EPHEMER_BIT = (1<<0),
388 GNSS_SV_OPTIONS_HAS_ALMANAC_BIT = (1<<1),
389 GNSS_SV_OPTIONS_USED_IN_FIX_BIT = (1<<2),
390 GNSS_SV_OPTIONS_HAS_CARRIER_FREQUENCY_BIT = (1<<3),
Mike Caileandff6ef52019-08-27 16:41:07 -0700391 GNSS_SV_OPTIONS_HAS_GNSS_SIGNAL_TYPE_BIT = (1<<4)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800392} GnssSvOptionsBits;
393
394typedef enum {
395 GNSS_ASSISTANCE_TYPE_SUPL = 0,
396 GNSS_ASSISTANCE_TYPE_C2K,
Mike Caileane7872802019-01-25 10:15:19 -0800397 GNSS_ASSISTANCE_TYPE_SUPL_EIMS,
398 GNSS_ASSISTANCE_TYPE_SUPL_IMS,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800399} GnssAssistanceType;
400
401typedef enum {
402 GNSS_SUPL_MODE_STANDALONE = 0,
403 GNSS_SUPL_MODE_MSB,
404 GNSS_SUPL_MODE_MSA,
405} GnssSuplMode;
406
407typedef enum {
408 BATCHING_MODE_ROUTINE = 0, // positions are reported when batched positions memory is full
409 BATCHING_MODE_TRIP, // positions are reported when a certain distance is covered
410 BATCHING_MODE_NO_AUTO_REPORT // no report of positions automatically, instead queried on demand
411} BatchingMode;
412
413typedef enum {
414 BATCHING_STATUS_TRIP_COMPLETED = 0,
415 BATCHING_STATUS_POSITION_AVAILABE,
416 BATCHING_STATUS_POSITION_UNAVAILABLE
417} BatchingStatus;
418
419typedef uint16_t GnssMeasurementsAdrStateMask;
420typedef enum {
Mike Cailean4149abc2019-02-04 16:28:51 -0800421 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_UNKNOWN = 0,
422 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_VALID_BIT = (1<<0),
423 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_RESET_BIT = (1<<1),
424 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_CYCLE_SLIP_BIT = (1<<2),
425 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_HALF_CYCLE_RESOLVED_BIT = (1<<3),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800426} GnssMeasurementsAdrStateBits;
427
Mike Cailean4149abc2019-02-04 16:28:51 -0800428typedef enum {
429 GNSS_MEASUREMENTS_CODE_TYPE_A = 0,
430 GNSS_MEASUREMENTS_CODE_TYPE_B = 1,
431 GNSS_MEASUREMENTS_CODE_TYPE_C = 2,
432 GNSS_MEASUREMENTS_CODE_TYPE_I = 3,
433 GNSS_MEASUREMENTS_CODE_TYPE_L = 4,
434 GNSS_MEASUREMENTS_CODE_TYPE_M = 5,
435 GNSS_MEASUREMENTS_CODE_TYPE_P = 6,
436 GNSS_MEASUREMENTS_CODE_TYPE_Q = 7,
437 GNSS_MEASUREMENTS_CODE_TYPE_S = 8,
438 GNSS_MEASUREMENTS_CODE_TYPE_W = 9,
439 GNSS_MEASUREMENTS_CODE_TYPE_X = 10,
440 GNSS_MEASUREMENTS_CODE_TYPE_Y = 11,
441 GNSS_MEASUREMENTS_CODE_TYPE_Z = 12,
442 GNSS_MEASUREMENTS_CODE_TYPE_N = 13,
443 GNSS_MEASUREMENTS_CODE_TYPE_OTHER = 255,
444} GnssMeasurementsCodeType;
445
Katz Yamada0fc49e82018-02-28 11:22:58 -0800446typedef uint32_t GnssMeasurementsDataFlagsMask;
447typedef enum {
448 GNSS_MEASUREMENTS_DATA_SV_ID_BIT = (1<<0),
449 GNSS_MEASUREMENTS_DATA_SV_TYPE_BIT = (1<<1),
450 GNSS_MEASUREMENTS_DATA_STATE_BIT = (1<<2),
451 GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_BIT = (1<<3),
452 GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_UNCERTAINTY_BIT = (1<<4),
453 GNSS_MEASUREMENTS_DATA_CARRIER_TO_NOISE_BIT = (1<<5),
454 GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_BIT = (1<<6),
455 GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_UNCERTAINTY_BIT = (1<<7),
456 GNSS_MEASUREMENTS_DATA_ADR_STATE_BIT = (1<<8),
457 GNSS_MEASUREMENTS_DATA_ADR_BIT = (1<<9),
458 GNSS_MEASUREMENTS_DATA_ADR_UNCERTAINTY_BIT = (1<<10),
459 GNSS_MEASUREMENTS_DATA_CARRIER_FREQUENCY_BIT = (1<<11),
460 GNSS_MEASUREMENTS_DATA_CARRIER_CYCLES_BIT = (1<<12),
461 GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_BIT = (1<<13),
462 GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_UNCERTAINTY_BIT = (1<<14),
463 GNSS_MEASUREMENTS_DATA_MULTIPATH_INDICATOR_BIT = (1<<15),
464 GNSS_MEASUREMENTS_DATA_SIGNAL_TO_NOISE_RATIO_BIT = (1<<16),
465 GNSS_MEASUREMENTS_DATA_AUTOMATIC_GAIN_CONTROL_BIT = (1<<17),
Mike Caileanb1cb9072020-03-16 11:45:01 -0700466 GNSS_MEASUREMENTS_DATA_RECEIVER_ISB_BIT = (1<<18),
467 GNSS_MEASUREMENTS_DATA_RECEIVER_ISB_UNCERTAINTY_BIT = (1<<19),
468 GNSS_MEASUREMENTS_DATA_SATELLITE_ISB_BIT = (1<<20),
469 GNSS_MEASUREMENTS_DATA_SATELLITE_ISB_UNCERTAINTY_BIT = (1<<21),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800470} GnssMeasurementsDataFlagsBits;
471
472typedef uint32_t GnssMeasurementsStateMask;
473typedef enum {
474 GNSS_MEASUREMENTS_STATE_UNKNOWN_BIT = 0,
475 GNSS_MEASUREMENTS_STATE_CODE_LOCK_BIT = (1<<0),
476 GNSS_MEASUREMENTS_STATE_BIT_SYNC_BIT = (1<<1),
477 GNSS_MEASUREMENTS_STATE_SUBFRAME_SYNC_BIT = (1<<2),
478 GNSS_MEASUREMENTS_STATE_TOW_DECODED_BIT = (1<<3),
479 GNSS_MEASUREMENTS_STATE_MSEC_AMBIGUOUS_BIT = (1<<4),
480 GNSS_MEASUREMENTS_STATE_SYMBOL_SYNC_BIT = (1<<5),
481 GNSS_MEASUREMENTS_STATE_GLO_STRING_SYNC_BIT = (1<<6),
482 GNSS_MEASUREMENTS_STATE_GLO_TOD_DECODED_BIT = (1<<7),
483 GNSS_MEASUREMENTS_STATE_BDS_D2_BIT_SYNC_BIT = (1<<8),
484 GNSS_MEASUREMENTS_STATE_BDS_D2_SUBFRAME_SYNC_BIT = (1<<9),
485 GNSS_MEASUREMENTS_STATE_GAL_E1BC_CODE_LOCK_BIT = (1<<10),
486 GNSS_MEASUREMENTS_STATE_GAL_E1C_2ND_CODE_LOCK_BIT = (1<<11),
487 GNSS_MEASUREMENTS_STATE_GAL_E1B_PAGE_SYNC_BIT = (1<<12),
488 GNSS_MEASUREMENTS_STATE_SBAS_SYNC_BIT = (1<<13),
Mike Cailean4149abc2019-02-04 16:28:51 -0800489 GNSS_MEASUREMENTS_STATE_TOW_KNOWN_BIT = (1<<14),
490 GNSS_MEASUREMENTS_STATE_GLO_TOD_KNOWN_BIT = (1<<15),
491 GNSS_MEASUREMENTS_STATE_2ND_CODE_LOCK_BIT = (1<<16),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800492} GnssMeasurementsStateBits;
493
Mike Caileanb1cb9072020-03-16 11:45:01 -0700494typedef uint16_t GnssSingleSatCorrectionMask;
495typedef enum {
496 GNSS_MC_UNKNOWN_BIT = 0,
497 GNSS_MC_HAS_SAT_IS_LOS_PROBABILITY_BIT = (1 << 0),
498 GNSS_MC_HAS_EXCESS_PATH_LENGTH_BIT = (1 << 1),
499 GNSS_MC_HAS_EXCESS_PATH_LENGTH_UNC_BIT = (1 << 2),
500 GNSS_MC_HAS_REFLECTING_PLANE_BIT = (1 << 3),
501} GnssSingleSatCorrectionBits;
502
Katz Yamada0fc49e82018-02-28 11:22:58 -0800503typedef enum {
504 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_UNKNOWN = 0,
505 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_PRESENT,
506 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_NOT_PRESENT,
507} GnssMeasurementsMultipathIndicator;
508
509typedef uint32_t GnssMeasurementsClockFlagsMask;
510typedef enum {
511 GNSS_MEASUREMENTS_CLOCK_FLAGS_LEAP_SECOND_BIT = (1<<0),
512 GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_BIT = (1<<1),
513 GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_UNCERTAINTY_BIT = (1<<2),
514 GNSS_MEASUREMENTS_CLOCK_FLAGS_FULL_BIAS_BIT = (1<<3),
515 GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_BIT = (1<<4),
516 GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_UNCERTAINTY_BIT = (1<<5),
517 GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_BIT = (1<<6),
518 GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_UNCERTAINTY_BIT = (1<<7),
519 GNSS_MEASUREMENTS_CLOCK_FLAGS_HW_CLOCK_DISCONTINUITY_COUNT_BIT = (1<<8),
520} GnssMeasurementsClockFlagsBits;
521
522typedef uint32_t GnssAidingDataSvMask;
523typedef enum {
524 GNSS_AIDING_DATA_SV_EPHEMERIS_BIT = (1<<0), // ephemeris
525 GNSS_AIDING_DATA_SV_ALMANAC_BIT = (1<<1), // almanac
526 GNSS_AIDING_DATA_SV_HEALTH_BIT = (1<<2), // health
527 GNSS_AIDING_DATA_SV_DIRECTION_BIT = (1<<3), // direction
528 GNSS_AIDING_DATA_SV_STEER_BIT = (1<<4), // steer
529 GNSS_AIDING_DATA_SV_ALMANAC_CORR_BIT = (1<<5), // almanac correction
530 GNSS_AIDING_DATA_SV_BLACKLIST_BIT = (1<<6), // blacklist SVs
531 GNSS_AIDING_DATA_SV_SA_DATA_BIT = (1<<7), // sensitivity assistance data
532 GNSS_AIDING_DATA_SV_NO_EXIST_BIT = (1<<8), // SV does not exist
533 GNSS_AIDING_DATA_SV_IONOSPHERE_BIT = (1<<9), // ionosphere correction
534 GNSS_AIDING_DATA_SV_TIME_BIT = (1<<10),// reset satellite time
Bhavna Sharma5a8d1712018-08-22 09:45:25 -0700535 GNSS_AIDING_DATA_SV_MB_DATA = (1<<11),// delete multiband data
536 GNSS_AIDING_DATA_SV_POLY_BIT = (1<<12),// poly
Katz Yamada0fc49e82018-02-28 11:22:58 -0800537} GnssAidingDataSvBits;
538
539typedef uint32_t GnssAidingDataSvTypeMask;
540typedef enum {
541 GNSS_AIDING_DATA_SV_TYPE_GPS_BIT = (1<<0),
542 GNSS_AIDING_DATA_SV_TYPE_GLONASS_BIT = (1<<1),
543 GNSS_AIDING_DATA_SV_TYPE_QZSS_BIT = (1<<2),
544 GNSS_AIDING_DATA_SV_TYPE_BEIDOU_BIT = (1<<3),
545 GNSS_AIDING_DATA_SV_TYPE_GALILEO_BIT = (1<<4),
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530546 GNSS_AIDING_DATA_SV_TYPE_NAVIC_BIT = (1<<5),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800547} GnssAidingDataSvTypeBits;
548
Wei Chen8e04d012018-12-04 15:55:00 -0800549/* Gnss constellation type mask */
550typedef uint16_t GnssConstellationTypeMask;
551typedef enum {
552 GNSS_CONSTELLATION_TYPE_GPS_BIT = (1<<0),
553 GNSS_CONSTELLATION_TYPE_GLONASS_BIT = (1<<1),
554 GNSS_CONSTELLATION_TYPE_QZSS_BIT = (1<<2),
555 GNSS_CONSTELLATION_TYPE_BEIDOU_BIT = (1<<3),
556 GNSS_CONSTELLATION_TYPE_GALILEO_BIT = (1<<4),
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530557 GNSS_CONSTELLATION_TYPE_SBAS_BIT = (1<<5),
Wei Chenf8883782019-07-25 13:51:58 -0700558 GNSS_CONSTELLATION_TYPE_NAVIC_BIT = (1<<6),
Wei Chen8e04d012018-12-04 15:55:00 -0800559} GnssConstellationTypeBits;
560
561#define GNSS_CONSTELLATION_TYPE_MASK_ALL\
562 (GNSS_CONSTELLATION_TYPE_GPS_BIT | GNSS_CONSTELLATION_TYPE_GLONASS_BIT |\
563 GNSS_CONSTELLATION_TYPE_QZSS_BIT | GNSS_CONSTELLATION_TYPE_BEIDOU_BIT |\
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530564 GNSS_CONSTELLATION_TYPE_GALILEO_BIT | GNSS_CONSTELLATION_TYPE_SBAS_BIT |\
565 GNSS_CONSTELLATION_TYPE_NAVIC_BIT)
Wei Chen8e04d012018-12-04 15:55:00 -0800566
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700567/** GNSS Signal Type and RF Band */
568typedef uint32_t GnssSignalTypeMask;
569typedef enum {
570 /** GPS L1CA Signal */
571 GNSS_SIGNAL_GPS_L1CA = (1<<0),
572 /** GPS L1C Signal */
573 GNSS_SIGNAL_GPS_L1C = (1<<1),
574 /** GPS L2 RF Band */
575 GNSS_SIGNAL_GPS_L2 = (1<<2),
576 /** GPS L5 RF Band */
577 GNSS_SIGNAL_GPS_L5 = (1<<3),
578 /** GLONASS G1 (L1OF) RF Band */
579 GNSS_SIGNAL_GLONASS_G1 = (1<<4),
580 /** GLONASS G2 (L2OF) RF Band */
581 GNSS_SIGNAL_GLONASS_G2 = (1<<5),
582 /** GALILEO E1 RF Band */
583 GNSS_SIGNAL_GALILEO_E1 = (1<<6),
584 /** GALILEO E5A RF Band */
585 GNSS_SIGNAL_GALILEO_E5A = (1<<7),
586 /** GALILEO E5B RF Band */
Hoss Zhou48b4e042018-09-03 15:27:08 +0800587 GNSS_SIGNAL_GALILEO_E5B = (1<<8),
Wei Chen755bba22019-10-08 14:28:08 -0700588 /** BEIDOU B1 RF Band */
589 GNSS_SIGNAL_BEIDOU_B1 = (1<<9),
590 /** BEIDOU B2 RF Band */
591 GNSS_SIGNAL_BEIDOU_B2 = (1<<10),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700592 /** QZSS L1CA RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700593 GNSS_SIGNAL_QZSS_L1CA = (1<<11),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700594 /** QZSS L1S RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700595 GNSS_SIGNAL_QZSS_L1S = (1<<12),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700596 /** QZSS L2 RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700597 GNSS_SIGNAL_QZSS_L2 = (1<<13),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700598 /** QZSS L5 RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700599 GNSS_SIGNAL_QZSS_L5 = (1<<14),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700600 /** SBAS L1 RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700601 GNSS_SIGNAL_SBAS_L1 = (1<<15),
602 /** BEIDOU B1I RF Band */
603 GNSS_SIGNAL_BEIDOU_B1I = (1<<16),
604 /** BEIDOU B1C RF Band */
605 GNSS_SIGNAL_BEIDOU_B1C = (1<<17),
606 /** BEIDOU B2I RF Band */
607 GNSS_SIGNAL_BEIDOU_B2I = (1<<18),
608 /** BEIDOU B2AI RF Band */
609 GNSS_SIGNAL_BEIDOU_B2AI = (1<<19),
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530610 /** NAVIC L5 RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700611 GNSS_SIGNAL_NAVIC_L5 = (1<<20),
Mike Cailean64514a52019-06-10 13:48:15 -0700612 /** BEIDOU B2A_Q RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700613 GNSS_SIGNAL_BEIDOU_B2AQ = (1<<21),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700614} GnssSignalTypeBits;
615
Bhavna Sharma7445c502019-01-15 16:29:48 -0800616#define GNSS_SIGNAL_TYPE_MASK_ALL\
617 (GNSS_SIGNAL_GPS_L1CA | GNSS_SIGNAL_GPS_L1C | GNSS_SIGNAL_GPS_L2 |\
618 GNSS_SIGNAL_GPS_L5| GNSS_SIGNAL_GLONASS_G1 | GNSS_SIGNAL_GLONASS_G2 |\
619 GNSS_SIGNAL_GALILEO_E1 | GNSS_SIGNAL_GALILEO_E5A | GNSS_SIGNAL_GALILEO_E5B |\
620 GNSS_SIGNAL_BEIDOU_B1I | GNSS_SIGNAL_BEIDOU_B1C | GNSS_SIGNAL_BEIDOU_B2I|\
621 GNSS_SIGNAL_BEIDOU_B2AI | GNSS_SIGNAL_QZSS_L1CA | GNSS_SIGNAL_QZSS_L1S |\
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530622 GNSS_SIGNAL_QZSS_L2| GNSS_SIGNAL_QZSS_L5 | GNSS_SIGNAL_SBAS_L1 |\
Mike Cailean90cbefa2019-06-14 10:03:51 -0700623 GNSS_SIGNAL_NAVIC_L5 | GNSS_SIGNAL_BEIDOU_B2AQ)
Bhavna Sharma7445c502019-01-15 16:29:48 -0800624
Katz Yamada0fc49e82018-02-28 11:22:58 -0800625typedef enum
626{
Wei Chen8e04d012018-12-04 15:55:00 -0800627 GNSS_LOC_SV_SYSTEM_UNKNOWN = 0,
628 /** unknown sv system. */
Wei Chen49f7e152019-04-19 15:21:27 -0700629 GNSS_LOC_SV_SYSTEM_MIN = 1,
630 /**< Min enum of valid SV system. */
Katz Yamada0fc49e82018-02-28 11:22:58 -0800631 GNSS_LOC_SV_SYSTEM_GPS = 1,
632 /**< GPS satellite. */
633 GNSS_LOC_SV_SYSTEM_GALILEO = 2,
634 /**< GALILEO satellite. */
635 GNSS_LOC_SV_SYSTEM_SBAS = 3,
636 /**< SBAS satellite. */
Wei Chen8e04d012018-12-04 15:55:00 -0800637 GNSS_LOC_SV_SYSTEM_GLONASS = 4,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800638 /**< GLONASS satellite. */
Wei Chen8e04d012018-12-04 15:55:00 -0800639 GNSS_LOC_SV_SYSTEM_BDS = 5,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800640 /**< BDS satellite. */
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530641 GNSS_LOC_SV_SYSTEM_QZSS = 6,
642 /**< QZSS satellite. */
Wei Chen49f7e152019-04-19 15:21:27 -0700643 GNSS_LOC_SV_SYSTEM_NAVIC = 7,
Wei Chenf8883782019-07-25 13:51:58 -0700644 /**< NAVIC satellite. */
Wei Chen49f7e152019-04-19 15:21:27 -0700645 GNSS_LOC_SV_SYSTEM_MAX = 7,
646 /**< Max enum of valid SV system. */
Katz Yamada0fc49e82018-02-28 11:22:58 -0800647} Gnss_LocSvSystemEnumType;
648
Mike Cailean75cfd432018-06-07 16:54:35 -0700649typedef enum {
650 GNSS_LOC_SIGNAL_TYPE_GPS_L1CA = 0, /**< GPS L1CA Signal */
651 GNSS_LOC_SIGNAL_TYPE_GPS_L1C = 1, /**< GPS L1C Signal */
652 GNSS_LOC_SIGNAL_TYPE_GPS_L2C_L = 2, /**< GPS L2C_L RF Band */
653 GNSS_LOC_SIGNAL_TYPE_GPS_L5_Q = 3, /**< GPS L5_Q RF Band */
654 GNSS_LOC_SIGNAL_TYPE_GLONASS_G1 = 4, /**< GLONASS G1 (L1OF) RF Band */
655 GNSS_LOC_SIGNAL_TYPE_GLONASS_G2 = 5, /**< GLONASS G2 (L2OF) RF Band */
656 GNSS_LOC_SIGNAL_TYPE_GALILEO_E1_C = 6, /**< GALILEO E1_C RF Band */
657 GNSS_LOC_SIGNAL_TYPE_GALILEO_E5A_Q = 7, /**< GALILEO E5A_Q RF Band */
658 GNSS_LOC_SIGNAL_TYPE_GALILEO_E5B_Q = 8, /**< GALILEO E5B_Q RF Band */
659 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B1_I = 9, /**< BEIDOU B1_I RF Band */
660 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B1C = 10, /**< BEIDOU B1C RF Band */
661 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2_I = 11, /**< BEIDOU B2_I RF Band */
662 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2A_I = 12, /**< BEIDOU B2A_I RF Band */
663 GNSS_LOC_SIGNAL_TYPE_QZSS_L1CA = 13, /**< QZSS L1CA RF Band */
664 GNSS_LOC_SIGNAL_TYPE_QZSS_L1S = 14, /**< QZSS L1S RF Band */
665 GNSS_LOC_SIGNAL_TYPE_QZSS_L2C_L = 15, /**< QZSS L2C_L RF Band */
666 GNSS_LOC_SIGNAL_TYPE_QZSS_L5_Q = 16, /**< QZSS L5_Q RF Band */
667 GNSS_LOC_SIGNAL_TYPE_SBAS_L1_CA = 17, /**< SBAS L1_CA RF Band */
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530668 GNSS_LOC_SIGNAL_TYPE_NAVIC_L5 = 18, /**< NAVIC L5 RF Band */
Mike Cailean64514a52019-06-10 13:48:15 -0700669 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2A_Q = 19, /**< BEIDOU B2A_Q RF Band */
670 GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES = 20 /**< Maximum number of signal types */
Mike Cailean75cfd432018-06-07 16:54:35 -0700671} Gnss_LocSignalEnumType;
672
Wei Chen1a1232c2019-07-18 15:50:55 -0700673typedef uint32_t PositioningEngineMask;
674typedef enum {
675 STANDARD_POSITIONING_ENGINE = (1 << 0),
676 DEAD_RECKONING_ENGINE = (1 << 1),
677 PRECISE_POSITIONING_ENGINE = (1 << 2)
678} PositioningEngineBits;
Wei Chen6c354392019-08-16 14:59:23 -0700679#define POSITION_ENGINE_MASK_ALL \
680 (STANDARD_POSITIONING_ENGINE|DEAD_RECKONING_ENGINE|PRECISE_POSITIONING_ENGINE)
Wei Chen1a1232c2019-07-18 15:50:55 -0700681
Mike Cailean75cfd432018-06-07 16:54:35 -0700682typedef uint64_t GnssDataMask;
683typedef enum {
684 // Jammer Indicator is available
685 GNSS_LOC_DATA_JAMMER_IND_BIT = (1ULL << 0),
686 // AGC is available
687 GNSS_LOC_DATA_AGC_BIT = (1ULL << 1)
688} GnssDataBits;
689
Katz Yamada0fc49e82018-02-28 11:22:58 -0800690typedef uint32_t GnssSystemTimeStructTypeFlags;
691typedef enum {
692 GNSS_SYSTEM_TIME_WEEK_VALID = (1 << 0),
693 GNSS_SYSTEM_TIME_WEEK_MS_VALID = (1 << 1),
694 GNSS_SYSTEM_CLK_TIME_BIAS_VALID = (1 << 2),
695 GNSS_SYSTEM_CLK_TIME_BIAS_UNC_VALID = (1 << 3),
696 GNSS_SYSTEM_REF_FCOUNT_VALID = (1 << 4),
697 GNSS_SYSTEM_NUM_CLOCK_RESETS_VALID = (1 << 5)
698} GnssSystemTimeTypeBits;
699
700typedef uint32_t GnssGloTimeStructTypeFlags;
701typedef enum {
702 GNSS_CLO_DAYS_VALID = (1 << 0),
Wei Chen8e04d012018-12-04 15:55:00 -0800703 GNSS_GLO_MSEC_VALID = (1 << 1),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800704 GNSS_GLO_CLK_TIME_BIAS_VALID = (1 << 2),
705 GNSS_GLO_CLK_TIME_BIAS_UNC_VALID = (1 << 3),
706 GNSS_GLO_REF_FCOUNT_VALID = (1 << 4),
707 GNSS_GLO_NUM_CLOCK_RESETS_VALID = (1 << 5),
708 GNSS_GLO_FOUR_YEAR_VALID = (1 << 6)
709} GnssGloTimeTypeBits;
710
711typedef struct {
712 GnssAidingDataSvMask svMask; // bitwise OR of GnssAidingDataSvBits
713 GnssAidingDataSvTypeMask svTypeMask; // bitwise OR of GnssAidingDataSvTypeBits
714} GnssAidingDataSv;
715
716typedef uint32_t GnssAidingDataCommonMask;
717typedef enum {
718 GNSS_AIDING_DATA_COMMON_POSITION_BIT = (1<<0), // position estimate
719 GNSS_AIDING_DATA_COMMON_TIME_BIT = (1<<1), // reset all clock values
720 GNSS_AIDING_DATA_COMMON_UTC_BIT = (1<<2), // UTC estimate
721 GNSS_AIDING_DATA_COMMON_RTI_BIT = (1<<3), // RTI
722 GNSS_AIDING_DATA_COMMON_FREQ_BIAS_EST_BIT = (1<<4), // frequency bias estimate
723 GNSS_AIDING_DATA_COMMON_CELLDB_BIT = (1<<5), // all celldb info
724} GnssAidingDataCommonBits;
725
726typedef struct {
727 GnssAidingDataCommonMask mask; // bitwise OR of GnssAidingDataCommonBits
728} GnssAidingDataCommon;
729
730typedef struct {
731 bool deleteAll; // if true, delete all aiding data and ignore other params
732 GnssAidingDataSv sv; // SV specific aiding data
733 GnssAidingDataCommon common; // common aiding data
Bhavna Sharmabf3d36c2019-06-21 14:32:15 -0700734 PositioningEngineMask posEngineMask; // engines to perform the delete operation on.
Katz Yamada0fc49e82018-02-28 11:22:58 -0800735} GnssAidingData;
736
Wei Chen49f7e152019-04-19 15:21:27 -0700737typedef uint16_t DrCalibrationStatusMask;
738typedef enum {
739 // Indicate that roll calibration is needed. Need to take more turns on level ground
740 DR_ROLL_CALIBRATION_NEEDED = (1<<0),
741 // Indicate that pitch calibration is needed. Need to take more turns on level ground
742 DR_PITCH_CALIBRATION_NEEDED = (1<<1),
743 // Indicate that yaw calibration is needed. Need to accelerate in a straight line
744 DR_YAW_CALIBRATION_NEEDED = (1<<2),
745 // Indicate that odo calibration is needed. Need to accelerate in a straight line
746 DR_ODO_CALIBRATION_NEEDED = (1<<3),
747 // Indicate that gyro calibration is needed. Need to take more turns on level ground
748 DR_GYRO_CALIBRATION_NEEDED = (1<<4)
749} DrCalibrationStatusBits;
750
Katz Yamada0fc49e82018-02-28 11:22:58 -0800751typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800752 uint32_t size; // set to sizeof(Location)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800753 LocationFlagsMask flags; // bitwise OR of LocationFlagsBits to mark which params are valid
754 uint64_t timestamp; // UTC timestamp for location fix, milliseconds since January 1, 1970
755 double latitude; // in degrees
756 double longitude; // in degrees
757 double altitude; // in meters above the WGS 84 reference ellipsoid
758 float speed; // in meters per second
759 float bearing; // in degrees; range [0, 360)
760 float accuracy; // in meters
761 float verticalAccuracy; // in meters
762 float speedAccuracy; // in meters/second
763 float bearingAccuracy; // in degrees (0 to 359.999)
764 LocationTechnologyMask techMask;
haohuang17015dd2018-04-16 15:12:49 +0800765 LocationSpoofMask spoofMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800766} Location;
767
Wei Chen1a1232c2019-07-18 15:50:55 -0700768typedef enum {
769 LOC_REQ_ENGINE_FUSED_BIT = (1<<0),
770 LOC_REQ_ENGINE_SPE_BIT = (1<<1),
771 LOC_REQ_ENGINE_PPE_BIT = (1<<2),
772} LocReqEngineTypeMask;
773
774typedef enum {
775 LOC_OUTPUT_ENGINE_FUSED = 0,
776 /** This is the GNSS fix from modem */
777 LOC_OUTPUT_ENGINE_SPE = 1,
778 /** This is the GNSS fix with correction PPP/RTK correction */
779 LOC_OUTPUT_ENGINE_PPE = 2,
780 LOC_OUTPUT_ENGINE_COUNT,
781} LocOutputEngineType;
782
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530783struct LocationOptions {
Wei Chen1d823b02018-12-14 16:22:17 -0800784 uint32_t size; // set to sizeof(LocationOptions)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800785 uint32_t minInterval; // in milliseconds
786 uint32_t minDistance; // in meters. if minDistance > 0, gnssSvCallback/gnssNmeaCallback/
787 // gnssMeasurementsCallback may not be called
788 GnssSuplMode mode; // Standalone/MS-Based/MS-Assisted
Wei Chen1a1232c2019-07-18 15:50:55 -0700789 // behavior when this field is 0:
790 // if engine hub is running, this will be fused fix,
791 // if engine hub is not running, this will be SPE fix
792 LocReqEngineTypeMask locReqEngTypeMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800793
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530794 inline LocationOptions() :
Wei Chen1a1232c2019-07-18 15:50:55 -0700795 size(0), minInterval(0), minDistance(0), mode(GNSS_SUPL_MODE_STANDALONE),
796 locReqEngTypeMask((LocReqEngineTypeMask)0) {}
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530797};
798
799typedef enum {
800 GNSS_POWER_MODE_INVALID = 0,
801 GNSS_POWER_MODE_M1, /* Improved Accuracy Mode */
802 GNSS_POWER_MODE_M2, /* Normal Mode */
803 GNSS_POWER_MODE_M3, /* Background Mode */
804 GNSS_POWER_MODE_M4, /* Background Mode */
805 GNSS_POWER_MODE_M5 /* Background Mode */
806} GnssPowerMode;
807
808struct TrackingOptions : LocationOptions {
809 GnssPowerMode powerMode; /* Power Mode to be used for time based tracking
810 sessions */
811 uint32_t tbm; /* Time interval between measurements specified in millis.
812 Applicable to background power modes */
813
814 inline TrackingOptions() :
815 LocationOptions(), powerMode(GNSS_POWER_MODE_INVALID), tbm(0) {}
Wei Chen1d823b02018-12-14 16:22:17 -0800816 inline TrackingOptions(uint32_t s, GnssPowerMode m, uint32_t t) :
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530817 LocationOptions(), powerMode(m), tbm(t) { LocationOptions::size = s; }
818 inline TrackingOptions(const LocationOptions& options) :
819 LocationOptions(options), powerMode(GNSS_POWER_MODE_INVALID), tbm(0) {}
820 inline void setLocationOptions(const LocationOptions& options) {
Wei Chen1a1232c2019-07-18 15:50:55 -0700821 size = sizeof(TrackingOptions);
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530822 minInterval = options.minInterval;
823 minDistance = options.minDistance;
824 mode = options.mode;
Wei Chen1a1232c2019-07-18 15:50:55 -0700825 locReqEngTypeMask = options.locReqEngTypeMask;
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530826 }
Harikrishnan Hariharan59269e12018-07-01 00:43:09 +0530827 inline LocationOptions getLocationOptions() {
828 LocationOptions locOption;
829 locOption.size = sizeof(locOption);
830 locOption.minDistance = minDistance;
831 locOption.minInterval = minInterval;
832 locOption.mode = mode;
Wei Chen1a1232c2019-07-18 15:50:55 -0700833 locOption.locReqEngTypeMask = locReqEngTypeMask;
Harikrishnan Hariharan59269e12018-07-01 00:43:09 +0530834 return locOption;
835 }
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530836};
837
838struct BatchingOptions : LocationOptions {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800839 BatchingMode batchingMode;
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530840
841 inline BatchingOptions() :
842 LocationOptions(), batchingMode(BATCHING_MODE_ROUTINE) {}
Wei Chen1d823b02018-12-14 16:22:17 -0800843 inline BatchingOptions(uint32_t s, BatchingMode m) :
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530844 LocationOptions(), batchingMode(m) { LocationOptions::size = s; }
845 inline BatchingOptions(const LocationOptions& options) :
846 LocationOptions(options), batchingMode(BATCHING_MODE_ROUTINE) {}
847 inline void setLocationOptions(const LocationOptions& options) {
848 minInterval = options.minInterval;
849 minDistance = options.minDistance;
850 mode = options.mode;
851 }
852};
Katz Yamada0fc49e82018-02-28 11:22:58 -0800853
854typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800855 uint32_t size;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800856 BatchingStatus batchingStatus;
857} BatchingStatusInfo;
858
859typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800860 uint32_t size; // set to sizeof(GeofenceOption)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800861 GeofenceBreachTypeMask breachTypeMask; // bitwise OR of GeofenceBreachTypeBits
862 uint32_t responsiveness; // in milliseconds
863 uint32_t dwellTime; // in seconds
864} GeofenceOption;
865
866typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800867 uint32_t size; // set to sizeof(GeofenceInfo)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800868 double latitude; // in degrees
869 double longitude; // in degrees
870 double radius; // in meters
871} GeofenceInfo;
872
873typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800874 uint32_t size; // set to sizeof(GeofenceBreachNotification)
875 uint32_t count; // number of ids in array
Katz Yamada0fc49e82018-02-28 11:22:58 -0800876 uint32_t* ids; // array of ids that have breached
877 Location location; // location associated with breach
878 GeofenceBreachType type; // type of breach
879 uint64_t timestamp; // timestamp of breach
880} GeofenceBreachNotification;
881
882typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800883 uint32_t size; // set to sizeof(GeofenceBreachNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800884 GeofenceStatusAvailable available; // GEOFENCE_STATUS_AVAILABILE_NO/_YES
885 LocationTechnologyType techType; // GNSS
886} GeofenceStatusNotification;
887
888typedef struct {
889 uint64_t gpsSvUsedIdsMask;
890 uint64_t gloSvUsedIdsMask;
891 uint64_t galSvUsedIdsMask;
892 uint64_t bdsSvUsedIdsMask;
893 uint64_t qzssSvUsedIdsMask;
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530894 uint64_t navicSvUsedIdsMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800895} GnssLocationSvUsedInPosition;
896
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700897typedef struct {
898 /** GnssSignalType mask */
899 GnssSignalTypeMask gnssSignalType;
900 /** Specifies GNSS Constellation Type */
901 Gnss_LocSvSystemEnumType gnssConstellation;
Wei Chen394d3012019-12-10 16:07:23 -0800902 /** Unique SV Identifier.
903 * For SV Range of supported constellation, please refer to
904 * the comment section of svId in GnssSv.
905 * For GLONASS: When slot-number to SV ID mapping is unknown, set as 255.
906 */
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700907 uint16_t gnssSvId;
908} GnssMeasUsageInfo;
909
Katz Yamada0fc49e82018-02-28 11:22:58 -0800910/** @struct
911 Body Frame parameters
912*/
913typedef struct {
914 GnssLocationPosDataMask bodyFrameDataMask; // Contains Body frame LocPosDataMask bits
915 float longAccel; // Forward Acceleration in body frame (m/s2)
916 float latAccel; // Sideward Acceleration in body frame (m/s2)
917 float vertAccel; // Vertical Acceleration in body frame (m/s2)
918 float yawRate; // Heading Rate (Radians/second)
919 float pitch; // Body pitch (Radians)
Naresh Munagala02cddf02018-06-21 10:44:51 +0530920 float longAccelUnc; // Uncertainty of Forward Acceleration in body frame
921 float latAccelUnc; // Uncertainty of Side-ward Acceleration in body frame
922 float vertAccelUnc; // Uncertainty of Vertical Acceleration in body frame
923 float yawRateUnc; // Uncertainty of Heading Rate
924 float pitchUnc; // Uncertainty of Body pitch
Katz Yamada0fc49e82018-02-28 11:22:58 -0800925} GnssLocationPositionDynamics;
926
927typedef struct {
928 /** Validity mask for below fields */
929 GnssSystemTimeStructTypeFlags validityMask;
930 /** Extended week number at reference tick.
931 Unit: Week.
932 Set to 65535 if week number is unknown.
933 For GPS:
934 Calculated from midnight, Jan. 6, 1980.
935 OTA decoded 10 bit GPS week is extended to map between:
936 [NV6264 to (NV6264 + 1023)].
937 NV6264: Minimum GPS week number configuration.
938 Default value of NV6264: 1738
939 For BDS:
940 Calculated from 00:00:00 on January 1, 2006 of Coordinated Universal Time (UTC).
941 For GAL:
942 Calculated from 00:00 UT on Sunday August 22, 1999 (midnight between August 21 and August 22).
943 */
944 uint16_t systemWeek;
945 /** Time in to the current week at reference tick.
946 Unit: Millisecond. Range: 0 to 604799999.
947 Check for systemClkTimeUncMs before use */
948 uint32_t systemMsec;
949 /** System clock time bias (sub-millisecond)
950 Units: Millisecond
951 Note: System time (TOW Millisecond) = systemMsec - systemClkTimeBias.
952 Check for systemClkTimeUncMs before use. */
953 float systemClkTimeBias;
954 /** Single sided maximum time bias uncertainty
955 Units: Millisecond */
956 float systemClkTimeUncMs;
957 /** FCount (free running HW timer) value. Don't use for relative time purpose
958 due to possible discontinuities.
959 Unit: Millisecond */
960 uint32_t refFCount;
961 /** Number of clock resets/discontinuities detected, affecting the local hardware counter value. */
962 uint32_t numClockResets;
963} GnssSystemTimeStructType;
964
965typedef struct {
966 /** GLONASS day number in four years. Refer to GLONASS ICD.
967 Applicable only for GLONASS and shall be ignored for other constellations.
968 If unknown shall be set to 65535 */
969 uint16_t gloDays;
970 /** Validity mask for below fields */
971 GnssGloTimeStructTypeFlags validityMask;
972 /** GLONASS time of day in Millisecond. Refer to GLONASS ICD.
973 Units: Millisecond
974 Check for gloClkTimeUncMs before use */
975 uint32_t gloMsec;
976 /** GLONASS clock time bias (sub-millisecond)
977 Units: Millisecond
978 Note: GLO time (TOD Millisecond) = gloMsec - gloClkTimeBias.
979 Check for gloClkTimeUncMs before use. */
980 float gloClkTimeBias;
981 /** Single sided maximum time bias uncertainty
982 Units: Millisecond */
983 float gloClkTimeUncMs;
984 /** FCount (free running HW timer) value. Don't use for relative time purpose
985 due to possible discontinuities.
986 Unit: Millisecond */
987 uint32_t refFCount;
988 /** Number of clock resets/discontinuities detected, affecting the local hardware counter value. */
989 uint32_t numClockResets;
990 /** GLONASS four year number from 1996. Refer to GLONASS ICD.
991 Applicable only for GLONASS and shall be ignored for other constellations.
992 If unknown shall be set to 255 */
993 uint8_t gloFourYear;
994} GnssGloTimeStructType;
995
996typedef union {
997 GnssSystemTimeStructType gpsSystemTime;
998 GnssSystemTimeStructType galSystemTime;
999 GnssSystemTimeStructType bdsSystemTime;
1000 GnssSystemTimeStructType qzssSystemTime;
Saurabh Srivastava331c6d92019-04-24 22:34:24 +05301001 GnssGloTimeStructType gloSystemTime;
1002 GnssSystemTimeStructType navicSystemTime;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001003} SystemTimeStructUnion;
1004 /** Time applicability of PVT report */
1005typedef struct {
1006 /** Specifies GNSS system time reported. Mandatory field */
1007 Gnss_LocSvSystemEnumType gnssSystemTimeSrc;
1008 /** Reporting of GPS system time is recommended.
1009 If GPS time is unknown & other satellite system time is known,
1010 it should be reported.
1011 Mandatory field
1012 */
1013 SystemTimeStructUnion u;
1014} GnssSystemTime;
1015
1016typedef struct {
Wei Chen061857b2019-06-10 10:10:53 -07001017 uint32_t size; // set to sizeof(GnssLocationInfo)
1018 Location location; // basic locaiton info, latitude, longitude, and etc
Katz Yamada0fc49e82018-02-28 11:22:58 -08001019 GnssLocationInfoFlagMask flags; // bitwise OR of GnssLocationInfoBits for param validity
1020 float altitudeMeanSeaLevel; // altitude wrt mean sea level
1021 float pdop; // position dilusion of precision
1022 float hdop; // horizontal dilusion of precision
1023 float vdop; // vertical dilusion of precision
1024 float gdop; // geometric dilution of precision
1025 float tdop; // time dilution of precision
1026 float magneticDeviation; // magnetic deviation
1027 LocationReliability horReliability; // horizontal reliability
1028 LocationReliability verReliability; // vertical reliability
1029 float horUncEllipseSemiMajor; // horizontal elliptical accuracy semi-major axis
1030 float horUncEllipseSemiMinor; // horizontal elliptical accuracy semi-minor axis
1031 float horUncEllipseOrientAzimuth; // horizontal elliptical accuracy azimuth
Bhavna Sharmaee8213f2018-05-25 14:34:08 -07001032 float northStdDeviation; // North standard deviation Unit: Meters
1033 float eastStdDeviation; // East standard deviation. Unit: Meters
Katz Yamada0fc49e82018-02-28 11:22:58 -08001034 float northVelocity; // North Velocity.Unit: Meters/sec
Bhavna Sharmaee8213f2018-05-25 14:34:08 -07001035 float eastVelocity; // East Velocity Unit Meters/sec
1036 float upVelocity; // Up Velocity. Unit Meters/sec
Katz Yamada0fc49e82018-02-28 11:22:58 -08001037 float northVelocityStdDeviation;
1038 float eastVelocityStdDeviation;
1039 float upVelocityStdDeviation;
Wei Chen81f47db2019-04-30 15:02:43 -07001040 uint16_t numSvUsedInPosition;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001041 GnssLocationSvUsedInPosition svUsedInPosition;// Gnss sv used in position data
1042 GnssLocationNavSolutionMask navSolutionMask; // Nav solution mask to indicate sbas corrections
1043 GnssLocationPosTechMask posTechMask; // Position technology used in computing this fix
1044 GnssLocationPositionDynamics bodyFrameData; // Body Frame Dynamics: 4wayAcceleration and
1045 // pitch set with validity
1046 GnssSystemTime gnssSystemTime; // GNSS System Time
Bhavna Sharmaee8213f2018-05-25 14:34:08 -07001047 uint8_t numOfMeasReceived; // Number of measurements received for use in fix.
1048 GnssMeasUsageInfo measUsageInfo[GNSS_SV_MAX]; // GNSS Measurement Usage info
1049 uint8_t leapSeconds; // leap second
1050 float timeUncMs; // Time uncertainty in milliseconds
Wei Chen49f7e152019-04-19 15:21:27 -07001051 uint8_t calibrationConfidence; // Sensor calibration confidence percent,
1052 // in range of [0, 100]
1053 DrCalibrationStatusMask calibrationStatus; // Sensor calibration status
Wei Chen1a1232c2019-07-18 15:50:55 -07001054 // location engine type. When the fix. when the type is set to
1055 // LOC_ENGINE_SRC_FUSED, the fix is the propagated/aggregated
1056 // reports from all engines running on the system (e.g.:
Kevin Tang12095912019-08-06 16:38:12 -07001057 // DR/SPE/PPE). To check which location engine contributes to
1058 // the fused output, check for locOutputEngMask.
Wei Chen1a1232c2019-07-18 15:50:55 -07001059 LocOutputEngineType locOutputEngType;
1060 // when loc output eng type is set to fused, this field
1061 // indicates the set of engines contribute to the fix.
1062 PositioningEngineMask locOutputEngMask;
Wei Chencac9fbf2020-03-02 13:04:33 -08001063 /* When robust location is enabled, this field
1064 * will how well the various input data considered for
1065 * navigation solution conform to expectations.
1066 * Range: 0 (least conforming) to 1 (most conforming) */
1067 float conformityIndex;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001068} GnssLocationInfoNotification;
1069
1070typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001071 uint32_t size; // set to sizeof(GnssNiNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001072 GnssNiType type; // type of NI (Voice, SUPL, Control Plane)
1073 GnssNiOptionsMask options; // bitwise OR of GnssNiOptionsBits
1074 uint32_t timeout; // time (seconds) to wait for user input
1075 GnssNiResponse timeoutResponse; // the response that should be sent when timeout expires
1076 char requestor[GNSS_NI_REQUESTOR_MAX]; // the requestor that is making the request
1077 GnssNiEncodingType requestorEncoding; // the encoding type for requestor
1078 char message[GNSS_NI_MESSAGE_ID_MAX]; // the message to show user
1079 GnssNiEncodingType messageEncoding; // the encoding type for message
1080 char extras[GNSS_NI_MESSAGE_ID_MAX];
1081} GnssNiNotification;
1082
Naresh Munagalad56857e2019-08-05 13:56:17 +05301083// carrier frequency of the signal tracked
1084#define GPS_L1CA_CARRIER_FREQUENCY (1575420000.0)
1085#define GPS_L1C_CARRIER_FREQUENCY (1575420000.0)
1086#define GPS_L2C_L_CARRIER_FREQUENCY (1227600000.0)
1087#define GPS_L5_Q_CARRIER_FREQUENCY (1176450000.0)
1088#define GLONASS_G1_CARRIER_FREQUENCY (1602000000.0)
1089#define GLONASS_G2_CARRIER_FREQUENCY (1246000000.0)
1090#define GALILEO_E1_C_CARRIER_FREQUENCY (1575420000.0)
1091#define GALILEO_E5A_Q_CARRIER_FREQUENCY (1176450000.0)
1092#define GALILEO_E5B_Q_CARRIER_FREQUENCY (1207140000.0)
1093#define BEIDOU_B1_I_CARRIER_FREQUENCY (1561098000.0)
1094#define BEIDOU_B1C_CARRIER_FREQUENCY (1575420000.0)
1095#define BEIDOU_B2_I_CARRIER_FREQUENCY (1207140000.0)
1096#define BEIDOU_B2A_I_CARRIER_FREQUENCY (1176450000.0)
1097#define BEIDOU_B2A_Q_CARRIER_FREQUENCY (1176450000.0)
1098#define QZSS_L1CA_CARRIER_FREQUENCY (1575420000.0)
1099#define QZSS_L1S_CARRIER_FREQUENCY (1575420000.0)
1100#define QZSS_L2C_L_CARRIER_FREQUENCY (1227600000.0)
1101#define QZSS_L5_Q_CARRIER_FREQUENCY (1176450000.0)
1102#define SBAS_L1_CA_CARRIER_FREQUENCY (1575420000.0)
1103#define NAVIC_L5_CARRIER_FREQUENCY (1176450000.0)
1104
Katz Yamada0fc49e82018-02-28 11:22:58 -08001105typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001106 uint32_t size; // set to sizeof(GnssSv)
Wei Chen394d3012019-12-10 16:07:23 -08001107 // Unique SV Identifier.
1108 // SV Range for supported constellation is specified as below:
1109 // - For GPS: 1 to 32
1110 // - For GLONASS: 65 to 96
1111 // - For SBAS: 120 to 158 and 183 to 191
1112 // - For QZSS: 193 to 197
1113 // - For BDS: 201 to 237
1114 // - For GAL: 301 to 336
1115 // - For NAVIC: 401 to 41
1116 uint16_t svId;
Nilesh Ghardee368c9a2020-03-05 08:18:52 +05301117 GnssSvType type; // type of SV (GPS, SBAS, GLONASS, QZSS, BEIDOU, GALILEO, NAVIC)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001118 float cN0Dbhz; // signal strength
1119 float elevation; // elevation of SV (in degrees)
1120 float azimuth; // azimuth of SV (in degrees)
1121 GnssSvOptionsMask gnssSvOptionsMask; // Bitwise OR of GnssSvOptionsBits
Mike Cailean7dfa87b2018-02-06 16:36:27 -08001122 float carrierFrequencyHz; // carrier frequency of the signal tracked
Bhavna Sharma21249412018-07-17 14:48:32 -07001123 GnssSignalTypeMask gnssSignalTypeMask; // Specifies GNSS signal type
Mike Caileanb1cb9072020-03-16 11:45:01 -07001124 double basebandCarrierToNoiseDbHz; // baseband signal strength
Katz Yamada0fc49e82018-02-28 11:22:58 -08001125} GnssSv;
1126
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301127struct GnssConfigSetAssistanceServer {
Wei Chen1d823b02018-12-14 16:22:17 -08001128 uint32_t size; // set to sizeof(GnssConfigSetAssistanceServer)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001129 GnssAssistanceType type; // SUPL or C2K
1130 const char* hostName; // null terminated string
1131 uint32_t port; // port of server
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301132
1133 inline bool equals(const GnssConfigSetAssistanceServer& config) {
1134 if (config.type == type && config.port == port &&
1135 ((NULL == config.hostName && NULL == hostName) ||
1136 (NULL != config.hostName && NULL != hostName &&
1137 0 == strcmp(config.hostName, hostName)))) {
1138 return true;
1139 }
1140 return false;
1141 }
1142};
Katz Yamada0fc49e82018-02-28 11:22:58 -08001143
1144typedef struct {
Wei Chen394d3012019-12-10 16:07:23 -08001145 // set to sizeof(GnssMeasurementsData)
1146 uint32_t size;
1147 // bitwise OR of GnssMeasurementsDataFlagsBits
1148 GnssMeasurementsDataFlagsMask flags;
1149 // Unique SV Identifier
1150 // For SV Range of supported constellation,
1151 // please refer to the comment section of svId in GnssSv.
Katz Yamada0fc49e82018-02-28 11:22:58 -08001152 int16_t svId;
1153 GnssSvType svType;
1154 double timeOffsetNs;
1155 GnssMeasurementsStateMask stateMask; // bitwise OR of GnssMeasurementsStateBits
1156 int64_t receivedSvTimeNs;
1157 int64_t receivedSvTimeUncertaintyNs;
1158 double carrierToNoiseDbHz;
1159 double pseudorangeRateMps;
1160 double pseudorangeRateUncertaintyMps;
1161 GnssMeasurementsAdrStateMask adrStateMask; // bitwise OR of GnssMeasurementsAdrStateBits
1162 double adrMeters;
1163 double adrUncertaintyMeters;
1164 float carrierFrequencyHz;
1165 int64_t carrierCycles;
1166 double carrierPhase;
1167 double carrierPhaseUncertainty;
1168 GnssMeasurementsMultipathIndicator multipathIndicator;
1169 double signalToNoiseRatioDb;
1170 double agcLevelDb;
Mike Cailean4149abc2019-02-04 16:28:51 -08001171 GnssMeasurementsCodeType codeType;
1172 char otherCodeTypeName[GNSS_MAX_NAME_LENGTH];
Mike Caileanb1cb9072020-03-16 11:45:01 -07001173 double basebandCarrierToNoiseDbHz;
1174 GnssSignalTypeMask gnssSignalType;
1175 double receiverInterSignalBiasNs;
1176 double receiverInterSignalBiasUncertaintyNs;
1177 double satelliteInterSignalBiasNs;
1178 double satelliteInterSignalBiasUncertaintyNs;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001179} GnssMeasurementsData;
1180
1181typedef struct {
Mike Caileanb1cb9072020-03-16 11:45:01 -07001182 GnssSvType svType;
1183 float carrierFrequencyHz;
1184 GnssMeasurementsCodeType codeType;
1185 char otherCodeTypeName[GNSS_MAX_NAME_LENGTH];
1186} GnssMeasurementsSignalType;
1187
1188typedef struct {
1189 uint32_t size; // set to sizeof(GnssReflectingPlane)
1190 double latitudeDegrees;
1191 double longitudeDegrees;
1192 double altitudeMeters;
1193 double azimuthDegrees;
1194} GnssReflectingPlane;
1195
1196typedef struct {
1197 uint32_t size; // set to sizeof(GnssSingleSatCorrection)
1198 GnssSingleSatCorrectionMask flags;
1199 GnssSvType svType;
1200 uint16_t svId;
1201 float carrierFrequencyHz;
1202 float probSatIsLos;
1203 float excessPathLengthMeters;
1204 float excessPathLengthUncertaintyMeters;
1205 GnssReflectingPlane reflectingPlane;
1206} GnssSingleSatCorrection;
1207
1208typedef struct {
1209 uint32_t size; // set to sizeof(GnssMeasurementCorrections)
1210 double latitudeDegrees;
1211 double longitudeDegrees;
1212 double altitudeMeters;
1213 double horizontalPositionUncertaintyMeters;
1214 double verticalPositionUncertaintyMeters;
1215 uint64_t toaGpsNanosecondsOfWeek;
1216 std::vector<GnssSingleSatCorrection> satCorrections;
1217 bool hasEnvironmentBearing;
1218 float environmentBearingDegrees;
1219 float environmentBearingUncertaintyDegrees;
1220} GnssMeasurementCorrections;
1221
1222typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001223 uint32_t size; // set to sizeof(GnssMeasurementsClock)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001224 GnssMeasurementsClockFlagsMask flags; // bitwise OR of GnssMeasurementsClockFlagsBits
1225 int16_t leapSecond;
1226 int64_t timeNs;
1227 double timeUncertaintyNs;
1228 int64_t fullBiasNs;
1229 double biasNs;
1230 double biasUncertaintyNs;
1231 double driftNsps;
1232 double driftUncertaintyNsps;
1233 uint32_t hwClockDiscontinuityCount;
Mike Caileanb1cb9072020-03-16 11:45:01 -07001234 GnssMeasurementsSignalType referenceSignalTypeForIsb;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001235} GnssMeasurementsClock;
1236
1237typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001238 uint32_t size; // set to sizeof(GnssSvNotification)
1239 uint32_t count; // number of SVs in the GnssSv array
Bhavna Sharma21249412018-07-17 14:48:32 -07001240 bool gnssSignalTypeMaskValid;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001241 GnssSv gnssSvs[GNSS_SV_MAX]; // information on a number of SVs
1242} GnssSvNotification;
1243
1244typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001245 uint32_t size; // set to sizeof(GnssNmeaNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001246 uint64_t timestamp; // timestamp
1247 const char* nmea; // nmea text
Wei Chen1d823b02018-12-14 16:22:17 -08001248 uint32_t length; // length of the nmea text
Katz Yamada0fc49e82018-02-28 11:22:58 -08001249} GnssNmeaNotification;
1250
1251typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001252 uint32_t size; // set to sizeof(GnssDataNotification)
Mike Cailean75cfd432018-06-07 16:54:35 -07001253 GnssDataMask gnssDataMask[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // bitwise OR of GnssDataBits
1254 double jammerInd[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // Jammer Indication
1255 double agc[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // Automatic gain control
1256} GnssDataNotification;
1257
1258typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001259 uint32_t size; // set to sizeof(GnssMeasurementsNotification)
1260 uint32_t count; // number of items in GnssMeasurements array
Katz Yamada0fc49e82018-02-28 11:22:58 -08001261 GnssMeasurementsData measurements[GNSS_MEASUREMENTS_MAX];
1262 GnssMeasurementsClock clock; // clock
1263} GnssMeasurementsNotification;
1264
Wei Chen28776872019-12-19 09:58:09 -08001265#define GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE 12
1266#define GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE 3
1267#define GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE 9
1268#define GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE 4
1269
1270typedef uint16_t GnssSvPolyStatusMask;
1271#define GNSS_SV_POLY_SRC_ALM_CORR_V02 ((GnssSvPolyStatusMask)0x01)
1272#define GNSS_SV_POLY_GLO_STR4_V02 ((GnssSvPolyStatusMask)0x02)
1273#define GNSS_SV_POLY_DELETE_V02 ((GnssSvPolyStatusMask)0x04)
1274#define GNSS_SV_POLY_SRC_GAL_FNAV_OR_INAV_V02 ((GnssSvPolyStatusMask)0x08)
1275typedef uint16_t GnssSvPolyStatusMaskValidity;
1276#define GNSS_SV_POLY_SRC_ALM_CORR_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x01)
1277#define GNSS_SV_POLY_GLO_STR4_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x02)
1278#define GNSS_SV_POLY_DELETE_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x04)
1279#define GNSS_SV_POLY_SRC_GAL_FNAV_OR_INAV_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x08)
1280
1281typedef struct {
1282 uint32_t size;
1283 uint16_t gnssSvId;
1284 /* GPS: 1-32, GLO: 65-96, 0: Invalid,
1285 SBAS: 120-151, BDS:201-237,GAL:301 to 336
1286 All others are reserved
1287 */
1288 int8_t freqNum;
1289 /* Freq index, only valid if u_SysInd is GLO */
1290
1291 GnssSvPolyStatusMaskValidity svPolyStatusMaskValidity;
1292 GnssSvPolyStatusMask svPolyStatusMask;
1293
1294 uint32_t is_valid;
1295
1296 uint16_t iode;
1297 /* Ephemeris reference time
1298 GPS:Issue of Data Ephemeris used [unitless].
1299 GLO: Tb 7-bit, refer to ICD02
1300 */
1301 double T0;
1302 /* Reference time for polynominal calculations
1303 GPS: Secs in week.
1304 GLO: Full secs since Jan/01/96
1305 */
1306 double polyCoeffXYZ0[GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE];
1307 /* C0X, C0Y, C0Z */
1308 double polyCoefXYZN[GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE];
1309 /* C1X, C2X ... C2Z, C3Z */
1310 float polyCoefOther[GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE];
1311 /* C0T, C1T, C2T, C3T */
1312 float svPosUnc; /* SV position uncertainty [m]. */
1313 float ionoDelay; /* Ionospheric delay at d_T0 [m]. */
1314 float ionoDot; /* Iono delay rate [m/s]. */
1315 float sbasIonoDelay;/* SBAS Ionospheric delay at d_T0 [m]. */
1316 float sbasIonoDot; /* SBAS Iono delay rate [m/s]. */
1317 float tropoDelay; /* Tropospheric delay [m]. */
1318 float elevation; /* Elevation [rad] at d_T0 */
1319 float elevationDot; /* Elevation rate [rad/s] */
1320 float elevationUnc; /* SV elevation [rad] uncertainty */
1321 double velCoef[GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE];
1322 /* Coefficients of velocity poly */
1323 uint32_t enhancedIOD; /* Enhanced Reference Time */
1324 float gpsIscL1ca;
1325 float gpsIscL2c;
1326 float gpsIscL5I5;
1327 float gpsIscL5Q5;
1328 float gpsTgd;
1329 float gloTgdG1G2;
1330 float bdsTgdB1;
1331 float bdsTgdB2;
1332 float bdsTgdB2a;
1333 float bdsIscB2a;
1334 float galBgdE1E5a;
1335 float galBgdE1E5b;
1336 float navicTgdL5;
1337} GnssSvPolynomial;
1338
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301339typedef uint32_t GnssSvId;
1340
1341struct GnssSvIdSource{
Wei Chen1d823b02018-12-14 16:22:17 -08001342 uint32_t size; // set to sizeof(GnssSvIdSource)
1343 GnssSvType constellation; // constellation for the sv to blacklist
Wei Chen394d3012019-12-10 16:07:23 -08001344 GnssSvId svId; // Unique SV Identifier,
1345 // For SV Range of supported constellation,
1346 // please refer to the comment section of svId in GnssSv.
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301347};
1348inline bool operator ==(GnssSvIdSource const& left, GnssSvIdSource const& right) {
1349 return left.size == right.size &&
1350 left.constellation == right.constellation && left.svId == right.svId;
1351}
1352
1353#define GNSS_SV_CONFIG_ALL_BITS_ENABLED_MASK ((uint64_t)0xFFFFFFFFFFFFFFFF)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001354typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001355 uint32_t size; // set to sizeof(GnssSvIdConfig)
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301356
1357 // GLONASS - SV 65 maps to bit 0
1358#define GNSS_SV_CONFIG_GLO_INITIAL_SV_ID 65
1359 uint64_t gloBlacklistSvMask;
1360
1361 // BEIDOU - SV 201 maps to bit 0
1362#define GNSS_SV_CONFIG_BDS_INITIAL_SV_ID 201
1363 uint64_t bdsBlacklistSvMask;
1364
1365 // QZSS - SV 193 maps to bit 0
1366#define GNSS_SV_CONFIG_QZSS_INITIAL_SV_ID 193
1367 uint64_t qzssBlacklistSvMask;
1368
1369 // GAL - SV 301 maps to bit 0
1370#define GNSS_SV_CONFIG_GAL_INITIAL_SV_ID 301
1371 uint64_t galBlacklistSvMask;
Wei Chen6c354392019-08-16 14:59:23 -07001372
1373 // SBAS - SV 120 to 158, maps to 0 to 38
1374 // SV 183 to 191, maps to 39 to 47
1375#define GNSS_SV_CONFIG_SBAS_INITIAL_SV_ID 120
1376#define GNSS_SV_CONFIG_SBAS_INITIAL_SV_LENGTH 39
1377#define GNSS_SV_CONFIG_SBAS_INITIAL2_SV_ID 183
1378 uint64_t sbasBlacklistSvMask;
Nilesh Ghardee368c9a2020-03-05 08:18:52 +05301379
1380 //Navic - SV 401 maps to bit 0
1381#define GNSS_SV_CONFIG_NAVIC_INITIAL_SV_ID 401
1382 uint64_t navicBlacklistSvMask;
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301383} GnssSvIdConfig;
1384
1385struct GnssConfig{
Wei Chen1d823b02018-12-14 16:22:17 -08001386 uint32_t size; // set to sizeof(GnssConfig)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001387 GnssConfigFlagsMask flags; // bitwise OR of GnssConfigFlagsBits to mark which params are valid
1388 GnssConfigGpsLock gpsLock;
1389 GnssConfigSuplVersion suplVersion;
1390 GnssConfigSetAssistanceServer assistanceServer;
1391 GnssConfigLppProfile lppProfile;
1392 GnssConfigLppeControlPlaneMask lppeControlPlaneMask;
1393 GnssConfigLppeUserPlaneMask lppeUserPlaneMask;
1394 GnssConfigAGlonassPositionProtocolMask aGlonassPositionProtocolMask;
1395 GnssConfigEmergencyPdnForEmergencySupl emergencyPdnForEmergencySupl;
1396 GnssConfigSuplEmergencyServices suplEmergencyServices;
1397 GnssConfigSuplModeMask suplModeMask; //bitwise OR of GnssConfigSuplModeBits
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301398 std::vector<GnssSvIdSource> blacklistedSvIds;
Mike Caileanb0462412019-02-11 09:11:09 -08001399 uint32_t emergencyExtensionSeconds;
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301400
1401 inline bool equals(const GnssConfig& config) {
1402 if (flags == config.flags &&
1403 gpsLock == config.gpsLock &&
1404 suplVersion == config.suplVersion &&
1405 assistanceServer.equals(config.assistanceServer) &&
1406 lppProfile == config.lppProfile &&
1407 lppeControlPlaneMask == config.lppeControlPlaneMask &&
1408 lppeUserPlaneMask == config.lppeUserPlaneMask &&
1409 aGlonassPositionProtocolMask == config.aGlonassPositionProtocolMask &&
1410 emergencyPdnForEmergencySupl == config.emergencyPdnForEmergencySupl &&
1411 suplEmergencyServices == config.suplEmergencyServices &&
1412 suplModeMask == config.suplModeMask &&
Mike Caileanb0462412019-02-11 09:11:09 -08001413 blacklistedSvIds == config.blacklistedSvIds &&
1414 emergencyExtensionSeconds == config.emergencyExtensionSeconds) {
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301415 return true;
1416 }
1417 return false;
1418 }
1419};
Katz Yamada0fc49e82018-02-28 11:22:58 -08001420
1421typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001422 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001423 bool mValid;
1424 Location mLocation;
1425 double verticalAccuracyMeters;
1426 double speedAccuracyMetersPerSecond;
1427 double bearingAccuracyDegrees;
1428 timespec mUtcReported;
1429} GnssDebugLocation;
1430
1431typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001432 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001433 bool mValid;
1434 int64_t timeEstimate;
1435 float timeUncertaintyNs;
1436 float frequencyUncertaintyNsPerSec;
1437} GnssDebugTime;
1438
1439typedef struct {
Wei Chen394d3012019-12-10 16:07:23 -08001440 // set to sizeof
1441 uint32_t size;
1442 // Unique SV Identifier
1443 // For SV Range of supported constellation,
1444 // please refer to the comment section of svId in GnssSv.
Katz Yamada0fc49e82018-02-28 11:22:58 -08001445 uint32_t svid;
1446 GnssSvType constellation;
1447 GnssEphemerisType mEphemerisType;
1448 GnssEphemerisSource mEphemerisSource;
1449 GnssEphemerisHealth mEphemerisHealth;
1450 float ephemerisAgeSeconds;
1451 bool serverPredictionIsAvailable;
1452 float serverPredictionAgeSeconds;
1453} GnssDebugSatelliteInfo;
1454
1455typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001456 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001457 GnssDebugLocation mLocation;
1458 GnssDebugTime mTime;
1459 std::vector<GnssDebugSatelliteInfo> mSatelliteInfo;
1460} GnssDebugReport;
1461
Wei Chen21b9c4e2018-09-19 10:59:28 -07001462typedef uint32_t LeapSecondSysInfoMask;
1463typedef enum {
1464 // current leap second info is available. This info will only
1465 // be available if the leap second change info is not available.
1466 //
1467 // If leap second change info is avaiable, to figure out
1468 // the current leap second info, compare current gps time with
1469 // the gps timestamp of leap second change to know whether to choose
1470 // leapSecondBefore or leapSecondAfter as current leap second.
1471 LEAP_SECOND_SYS_INFO_CURRENT_LEAP_SECONDS_BIT = (1ULL << 0),
1472 // the last known leap change event is available.
1473 // The info can be available on two scenario:
1474 // 1: this leap second change event has been scheduled and yet to happen
1475 // 2: this leap second change event has already happened and next
1476 // leap second change event has not yet been scheduled.
1477 LEAP_SECOND_SYS_INFO_LEAP_SECOND_CHANGE_BIT = (1ULL << 1),
1478} LeapSecondSysInfoDataBits;
1479
1480struct LeapSecondChangeInfo {
1481 // GPS timestamp that corrresponds to the last known
1482 // leap second change event.
1483 //
1484 // The info can be available on two scenario:
1485 // 1: this leap second change event has been scheduled and yet to happen
1486 // 2: this leap second change event has already happened and next
1487 // leap second change event has not yet been scheduled.
1488 GnssSystemTimeStructType gpsTimestampLsChange;
1489 // Number of leap seconds prior to the leap second change event
1490 // that corresponds to the timestamp at gpsTimestampLsChange.
1491 uint8_t leapSecondsBeforeChange;
1492 // Number of leap seconds after the leap second change event
1493 // that corresponds to the timestamp at gpsTimestampLsChange.
1494 uint8_t leapSecondsAfterChange;
1495};
1496
1497struct LeapSecondSystemInfo {
1498 LeapSecondSysInfoMask leapSecondInfoMask;
1499 uint8_t leapSecondCurrent;
1500 LeapSecondChangeInfo leapSecondChangeInfo;
1501};
1502
1503typedef uint32_t LocationSystemInfoMask;
1504typedef enum {
1505 // contains current leap second or leap second change info
1506 LOCATION_SYS_INFO_LEAP_SECOND = (1ULL << 0),
1507} LocationSystemInfoDataBits;
1508
1509struct LocationSystemInfo {
1510 LocationSystemInfoMask systemInfoMask;
1511 LeapSecondSystemInfo leapSecondSysInfo;
1512};
1513
Wei Chen6c354392019-08-16 14:59:23 -07001514/* Mask indicating enabled or disabled constellations */
1515typedef uint64_t GnssSvTypesMask;
1516typedef enum {
1517 GNSS_SV_TYPES_MASK_GLO_BIT = (1<<0),
1518 GNSS_SV_TYPES_MASK_BDS_BIT = (1<<1),
1519 GNSS_SV_TYPES_MASK_QZSS_BIT = (1<<2),
1520 GNSS_SV_TYPES_MASK_GAL_BIT = (1<<3),
1521 GNSS_SV_TYPES_MASK_NAVIC_BIT = (1<<4),
1522} GnssSvTypesMaskBits;
1523
1524/* This SV Type config is injected directly to GNSS Adapter
1525 * bypassing Location API */
1526typedef struct {
1527 uint32_t size; // set to sizeof(GnssSvTypeConfig)
1528 // Enabled Constellations
1529 GnssSvTypesMask enabledSvTypesMask;
1530 // Disabled Constellations
1531 GnssSvTypesMask blacklistedSvTypesMask;
1532} GnssSvTypeConfig;
1533
1534// Specify parameters related to lever arm
1535struct LeverArmParams {
1536 // Offset along the vehicle forward axis
1537 float forwardOffsetMeters;
1538 // Offset along the vehicle starboard axis
1539 float sidewaysOffsetMeters;
1540 // Offset along the vehicle up axis
1541 float upOffsetMeters;
1542};
1543
1544typedef uint32_t LeverArmTypeMask;
1545
1546enum LeverArmTypeBits {
1547 // Lever arm regarding the VRP (Vehicle Reference Point) w.r.t
1548 // the origin (at the GPS Antenna)
1549 LEVER_ARM_TYPE_GNSS_TO_VRP_BIT = (1<<0),
1550 // Lever arm regarding GNSS Antenna w.r.t the origin at the IMU
1551 // e.g.: inertial measurement unit for DR (dead reckoning
1552 // engine)
1553 LEVER_ARM_TYPE_DR_IMU_TO_GNSS_BIT = (1<<1),
1554 // Lever arm regarding GNSS Antenna w.r.t the origin at the
1555 // IMU (inertial measurement unit) for VEPP (vision enhanced
1556 // precise positioning engine)
1557 LEVER_ARM_TYPE_VEPP_IMU_TO_GNSS_BIT = (1<<2)
1558};
1559
1560struct LeverArmConfigInfo {
1561 // Valid mask for the types of lever arm parameters provided
1562 LeverArmTypeMask leverArmValidMask;
1563 // Lever arm regarding the VRP (Vehicle Reference Point) w.r.t the origin
1564 // (at the GPS Antenna)
1565 LeverArmParams gnssToVRP;
1566 // Lever arm parameters regarding GNSS Antenna w.r.t the origin at the IMU
1567 // (inertial measurement unit) for DR (dead reckoning engine)
1568 LeverArmParams drImuToGnss;
1569 // Lever arm regarding GNSS Antenna w.r.t the origin at the IMU
1570 // (inertial measurement unit) for VEPP (vision enhanced precise position engine)
1571 LeverArmParams veppImuToGnss;
1572};
1573
Katz Yamada0fc49e82018-02-28 11:22:58 -08001574/* Provides the capabilities of the system
1575 capabilities callback is called once soon after createInstance is called */
1576typedef std::function<void(
1577 LocationCapabilitiesMask capabilitiesMask // bitwise OR of LocationCapabilitiesBits
1578)> capabilitiesCallback;
1579
1580/* Used by tracking, batching, and miscellanous APIs
1581 responseCallback is called for every Tracking, Batching API, and Miscellanous API */
1582typedef std::function<void(
1583 LocationError err, // if not SUCCESS, then id is not valid
1584 uint32_t id // id to be associated to the request
1585)> responseCallback;
1586
1587/* Used by APIs that gets more than one LocationError in it's response
1588 collectiveResponseCallback is called for every geofence API call.
1589 ids array and LocationError array are only valid until collectiveResponseCallback returns. */
1590typedef std::function<void(
Wei Chen1d823b02018-12-14 16:22:17 -08001591 uint32_t count, // number of locations in arrays
Katz Yamada0fc49e82018-02-28 11:22:58 -08001592 LocationError* errs, // array of LocationError associated to the request
1593 uint32_t* ids // array of ids to be associated to the request
1594)> collectiveResponseCallback;
1595
1596/* Used for startTracking API, optional can be NULL
1597 trackingCallback is called when delivering a location in a tracking session
1598 broadcasted to all clients, no matter if a session has started by client */
1599typedef std::function<void(
1600 Location location
1601)> trackingCallback;
1602
1603/* Used for startBatching API, optional can be NULL
1604 batchingCallback is called when delivering locations in a batching session.
1605 broadcasted to all clients, no matter if a session has started by client */
1606typedef std::function<void(
Wei Chen1d823b02018-12-14 16:22:17 -08001607 uint32_t count, // number of locations in array
Katz Yamada0fc49e82018-02-28 11:22:58 -08001608 Location* location, // array of locations
1609 BatchingOptions batchingOptions // Batching options
1610)> batchingCallback;
1611
1612typedef std::function<void(
1613 BatchingStatusInfo batchingStatus, // batch status
1614 std::list<uint32_t> & listOfCompletedTrips
1615)> batchingStatusCallback;
1616
1617/* Gives GNSS Location information, optional can be NULL
1618 gnssLocationInfoCallback is called only during a tracking session
1619 broadcasted to all clients, no matter if a session has started by client */
1620typedef std::function<void(
1621 GnssLocationInfoNotification gnssLocationInfoNotification
1622)> gnssLocationInfoCallback;
1623
Wei Chen1a1232c2019-07-18 15:50:55 -07001624/* Gives default combined location information from all engines and
1625 location information individually from selected engines.
1626 This callback is only used when there are multiple engines
1627 running in the system.
1628
1629 optional can be NULL
1630
1631 engineLocationsInfoCallback is called only during a tracking session
1632 broadcasted to all clients, no matter if a session has started by client */
1633typedef std::function<void(
1634 uint32_t count,
1635 GnssLocationInfoNotification* engineLocationInfoNotification
1636)> engineLocationsInfoCallback;
1637
Katz Yamada0fc49e82018-02-28 11:22:58 -08001638/* Used for addGeofences API, optional can be NULL
1639 geofenceBreachCallback is called when any number of geofences have a state change */
1640typedef std::function<void(
1641 GeofenceBreachNotification geofenceBreachNotification
1642)> geofenceBreachCallback;
1643
1644/* Used for addGeofences API, optional can be NULL
1645 geofenceStatusCallback is called when any number of geofences have a status change */
1646typedef std::function<void(
1647 GeofenceStatusNotification geofenceStatusNotification
1648)> geofenceStatusCallback;
1649
1650/* Network Initiated request, optional can be NULL
1651 This callback should be responded to by calling gnssNiResponse */
1652typedef std::function<void(
1653 uint32_t id, // id that should be used to respond by calling gnssNiResponse
1654 GnssNiNotification gnssNiNotification
1655)> gnssNiCallback;
1656
1657/* Gives GNSS SV information, optional can be NULL
1658 gnssSvCallback is called only during a tracking session
1659 broadcasted to all clients, no matter if a session has started by client */
1660typedef std::function<void(
1661 GnssSvNotification gnssSvNotification
1662)> gnssSvCallback;
1663
1664/* Gives GNSS NMEA data, optional can be NULL
1665 gnssNmeaCallback is called only during a tracking session
1666 broadcasted to all clients, no matter if a session has started by client */
1667typedef std::function<void(
1668 GnssNmeaNotification gnssNmeaNotification
1669)> gnssNmeaCallback;
1670
Mike Cailean75cfd432018-06-07 16:54:35 -07001671/* Gives GNSS data, optional can be NULL
1672 gnssDataCallback is called only during a tracking session
1673 broadcasted to all clients, no matter if a session has started by client */
1674typedef std::function<void(
1675 GnssDataNotification gnssDataNotification
1676)> gnssDataCallback;
1677
Katz Yamada0fc49e82018-02-28 11:22:58 -08001678/* Gives GNSS Measurements information, optional can be NULL
1679 gnssMeasurementsCallback is called only during a tracking session
1680 broadcasted to all clients, no matter if a session has started by client */
1681typedef std::function<void(
1682 GnssMeasurementsNotification gnssMeasurementsNotification
1683)> gnssMeasurementsCallback;
1684
Wei Chen28776872019-12-19 09:58:09 -08001685/* Gives GNSS SV poly information, optional can be NULL
1686 gnssSvPolyCallback is called only during a tracking session
1687 broadcasted to all clients that registers for the poly */
1688typedef std::function<void(
1689 GnssSvPolynomial gnssSvPolynomialNotification
1690)> gnssSvPolynomialCallback;
1691
1692
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301693/* Provides the current GNSS configuration to the client */
1694typedef std::function<void(
1695 GnssConfig& config
1696)> gnssConfigCallback;
1697
Wei Chen21b9c4e2018-09-19 10:59:28 -07001698/* LocationSystemInfoCb is for receiving rare occuring location
1699 system information update. optional, can be NULL.
1700*/
1701typedef std::function<void(
1702 LocationSystemInfo locationSystemInfo
1703)> locationSystemInfoCallback;
1704
Wei Chene2329862018-11-15 09:41:26 -08001705typedef std::function<void(
1706)> locationApiDestroyCompleteCallback;
1707
Bhavna Sharma49c60ab2019-01-24 16:18:38 -08001708typedef uint16_t LocationAdapterTypeMask;
1709typedef enum {
1710 LOCATION_ADAPTER_GNSS_TYPE_BIT = (1<<0), // adapter type is GNSS
Dante Russo5c1e23c2019-03-06 09:36:20 -08001711 LOCATION_ADAPTER_BATCHING_TYPE_BIT = (1<<1), // adapter type is BATCHING
Bhavna Sharma49c60ab2019-01-24 16:18:38 -08001712 LOCATION_ADAPTER_GEOFENCE_TYPE_BIT = (1<<2) // adapter type is geo fence
1713} LocationAdapterTypeBits;
1714
Katz Yamada0fc49e82018-02-28 11:22:58 -08001715typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001716 uint32_t size; // set to sizeof(LocationCallbacks)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001717 capabilitiesCallback capabilitiesCb; // mandatory
1718 responseCallback responseCb; // mandatory
1719 collectiveResponseCallback collectiveResponseCb; // mandatory
1720 trackingCallback trackingCb; // optional
1721 batchingCallback batchingCb; // optional
1722 geofenceBreachCallback geofenceBreachCb; // optional
1723 geofenceStatusCallback geofenceStatusCb; // optional
1724 gnssLocationInfoCallback gnssLocationInfoCb; // optional
1725 gnssNiCallback gnssNiCb; // optional
1726 gnssSvCallback gnssSvCb; // optional
1727 gnssNmeaCallback gnssNmeaCb; // optional
Mike Cailean75cfd432018-06-07 16:54:35 -07001728 gnssDataCallback gnssDataCb; // optional
Katz Yamada0fc49e82018-02-28 11:22:58 -08001729 gnssMeasurementsCallback gnssMeasurementsCb; // optional
1730 batchingStatusCallback batchingStatusCb; // optional
Wei Chen21b9c4e2018-09-19 10:59:28 -07001731 locationSystemInfoCallback locationSystemInfoCb; // optional
Wei Chen1a1232c2019-07-18 15:50:55 -07001732 engineLocationsInfoCallback engineLocationsInfoCb; // optional
Wei Chen28776872019-12-19 09:58:09 -08001733 gnssSvPolynomialCallback gnssSvPolynomialCb; // optional
Katz Yamada0fc49e82018-02-28 11:22:58 -08001734} LocationCallbacks;
1735
Mike Caileanb1cb9072020-03-16 11:45:01 -07001736typedef struct {
1737 uint32_t size; // set to sizeof
1738 double x;
1739 double xUncertainty;
1740 double y;
1741 double yUncertainty;
1742 double z;
1743 double zUncertainty;
1744} GnssCoordinate;
1745
1746typedef struct {
1747 uint32_t size; // set to sizeof
1748 double carrierFrequencyMHz;
1749 GnssCoordinate phaseCenterOffsetCoordinateMillimeters;
1750 std::vector<std::vector<double>> phaseCenterVariationCorrectionMillimeters;
1751 std::vector<std::vector<double>> phaseCenterVariationCorrectionUncertaintyMillimeters;
1752 std::vector<std::vector<double>> signalGainCorrectionDbi;
1753 std::vector<std::vector<double>> signalGainCorrectionUncertaintyDbi;
1754} GnssAntennaInformation;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001755#endif /* LOCATIONDATATYPES_H */