blob: 6a1f0cde089c9bae046dd3a86bb532258d451e81 [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
Naresh Munagalaaf069602020-02-17 06:33:10 +0530147typedef uint32_t GnssLocationPosDataMaskExt;
148typedef enum {
149 // Navigation data has pitch rate
150 LOCATION_NAV_DATA_HAS_PITCH_RATE_BIT = (1<<0),
151 // Navigation data has body pitch rate uncertainty
152 LOCATION_NAV_DATA_HAS_PITCH_RATE_UNC_BIT = (1<<1),
153 // Navigation data has body roll
154 LOCATION_NAV_DATA_HAS_ROLL_BIT = (1<<2),
155 // Navigation data has body roll uncertainty
156 LOCATION_NAV_DATA_HAS_ROLL_UNC_BIT = (1<<3),
157 // Navigation data has body rate roll
158 LOCATION_NAV_DATA_HAS_ROLL_RATE_BIT = (1<<4),
159 // Navigation data has body roll rate uncertainty
160 LOCATION_NAV_DATA_HAS_ROLL_RATE_UNC_BIT = (1<<5),
161 // Navigation data has body yaw
162 LOCATION_NAV_DATA_HAS_YAW_BIT = (1<<6),
163 // Navigation data has body roll uncertainty
164 LOCATION_NAV_DATA_HAS_YAW_UNC_BIT = (1<<7)
165} GnssLocationPosDataBitsExt;
166
Katz Yamada0fc49e82018-02-28 11:22:58 -0800167typedef uint32_t GnssLocationInfoFlagMask;
168typedef enum {
169 GNSS_LOCATION_INFO_ALTITUDE_MEAN_SEA_LEVEL_BIT = (1<<0), // valid altitude mean sea level
170 GNSS_LOCATION_INFO_DOP_BIT = (1<<1), // valid pdop, hdop, and vdop
171 GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT = (1<<2), // valid magnetic deviation
172 GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT = (1<<3), // valid horizontal reliability
173 GNSS_LOCATION_INFO_VER_RELIABILITY_BIT = (1<<4), // valid vertical reliability
174 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MAJOR_BIT = (1<<5), // valid elipsode semi major
175 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MINOR_BIT = (1<<6), // valid elipsode semi minor
176 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_AZIMUTH_BIT = (1<<7), // valid accuracy elipsode azimuth
Wei Chen81f47db2019-04-30 15:02:43 -0700177 GNSS_LOCATION_INFO_GNSS_SV_USED_DATA_BIT = (1<<8), // valid svUsedInPosition,
178 // numOfMeasReceived
179 // and measUsageInfo
Katz Yamada0fc49e82018-02-28 11:22:58 -0800180 GNSS_LOCATION_INFO_NAV_SOLUTION_MASK_BIT = (1<<9), // valid navSolutionMask
181 GNSS_LOCATION_INFO_POS_TECH_MASK_BIT = (1<<10),// valid LocPosTechMask
182 GNSS_LOCATION_INFO_SV_SOURCE_INFO_BIT = (1<<11),// valid LocSvInfoSource
183 GNSS_LOCATION_INFO_POS_DYNAMICS_DATA_BIT = (1<<12),// valid position dynamics data
Naresh Munagalaaf069602020-02-17 06:33:10 +0530184 // and Position Dynamics Ext
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700185 GNSS_LOCATION_INFO_EXT_DOP_BIT = (1<<13),// valid gdop, tdop
186 GNSS_LOCATION_INFO_NORTH_STD_DEV_BIT = (1<<14),// valid North standard deviation
187 GNSS_LOCATION_INFO_EAST_STD_DEV_BIT = (1<<15),// valid East standard deviation
188 GNSS_LOCATION_INFO_NORTH_VEL_BIT = (1<<16),// valid North Velocity
189 GNSS_LOCATION_INFO_EAST_VEL_BIT = (1<<17),// valid East Velocity
190 GNSS_LOCATION_INFO_UP_VEL_BIT = (1<<18),// valid Up Velocity
191 GNSS_LOCATION_INFO_NORTH_VEL_UNC_BIT = (1<<19),// valid North Velocity Uncertainty
192 GNSS_LOCATION_INFO_EAST_VEL_UNC_BIT = (1<<20),// valid East Velocity Uncertainty
193 GNSS_LOCATION_INFO_UP_VEL_UNC_BIT = (1<<21),// valid Up Velocity Uncertainty
194 GNSS_LOCATION_INFO_LEAP_SECONDS_BIT = (1<<22),// valid leap seconds
Wei Chen81f47db2019-04-30 15:02:43 -0700195 GNSS_LOCATION_INFO_TIME_UNC_BIT = (1<<23),// valid time uncertainty
Wei Chen49f7e152019-04-19 15:21:27 -0700196 GNSS_LOCATION_INFO_NUM_SV_USED_IN_POSITION_BIT = (1<<24), // number of SV used in position
197 GNSS_LOCATION_INFO_CALIBRATION_CONFIDENCE_BIT = (1<<25), // valid sensor cal confidence
198 GNSS_LOCATION_INFO_CALIBRATION_STATUS_BIT = (1<<26), // valid sensor cal status
Wei Chen1a1232c2019-07-18 15:50:55 -0700199 GNSS_LOCATION_INFO_OUTPUT_ENG_TYPE_BIT = (1<<27), // valid output engine type
200 GNSS_LOCATION_INFO_OUTPUT_ENG_MASK_BIT = (1<<28), // valid output engine mask
Wei Chencac9fbf2020-03-02 13:04:33 -0800201 GNSS_LOCATION_INFO_CONFORMITY_INDEX_BIT = (1<<29), // valid conformity index
Wei Chen6fea13b2020-02-21 16:58:58 -0800202 GNSS_LOCATION_INFO_LLA_VRP_BASED_BIT = (1<<30), // valid VRP-based lat/long/alt
203 GNSS_LOCATION_INFO_ENU_VELOCITY_VRP_BASED_BIT = (1<<31), // VRP-based east/north/up vel
Katz Yamada0fc49e82018-02-28 11:22:58 -0800204} GnssLocationInfoFlagBits;
205
206typedef enum {
207 GEOFENCE_BREACH_ENTER = 0,
208 GEOFENCE_BREACH_EXIT,
209 GEOFENCE_BREACH_DWELL_IN,
210 GEOFENCE_BREACH_DWELL_OUT,
211 GEOFENCE_BREACH_UNKNOWN,
212} GeofenceBreachType;
213
214typedef uint16_t GeofenceBreachTypeMask;
215typedef enum {
216 GEOFENCE_BREACH_ENTER_BIT = (1<<0),
217 GEOFENCE_BREACH_EXIT_BIT = (1<<1),
218 GEOFENCE_BREACH_DWELL_IN_BIT = (1<<2),
219 GEOFENCE_BREACH_DWELL_OUT_BIT = (1<<3),
220} GeofenceBreachTypeBits;
221
222typedef enum {
223 GEOFENCE_STATUS_AVAILABILE_NO = 0,
224 GEOFENCE_STATUS_AVAILABILE_YES,
225} GeofenceStatusAvailable;
226
227typedef uint32_t LocationCapabilitiesMask;
228typedef enum {
229 // supports startTracking API with minInterval param
230 LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT = (1<<0),
231 // supports startBatching API with minInterval param
232 LOCATION_CAPABILITIES_TIME_BASED_BATCHING_BIT = (1<<1),
233 // supports startTracking API with minDistance param
234 LOCATION_CAPABILITIES_DISTANCE_BASED_TRACKING_BIT = (1<<2),
235 // supports startBatching API with minDistance param
236 LOCATION_CAPABILITIES_DISTANCE_BASED_BATCHING_BIT = (1<<3),
237 // supports addGeofences API
238 LOCATION_CAPABILITIES_GEOFENCE_BIT = (1<<4),
239 // supports GnssMeasurementsCallback
240 LOCATION_CAPABILITIES_GNSS_MEASUREMENTS_BIT = (1<<5),
241 // supports startTracking/startBatching API with LocationOptions.mode of MSB (Ms Based)
242 LOCATION_CAPABILITIES_GNSS_MSB_BIT = (1<<6),
243 // supports startTracking/startBatching API with LocationOptions.mode of MSA (MS Assisted)
244 LOCATION_CAPABILITIES_GNSS_MSA_BIT = (1<<7),
245 // supports debug nmea sentences in the debugNmeaCallback
246 LOCATION_CAPABILITIES_DEBUG_NMEA_BIT = (1<<8),
247 // support outdoor trip batching
Dante Russo271cfd82018-06-04 16:55:56 -0700248 LOCATION_CAPABILITIES_OUTDOOR_TRIP_BATCHING_BIT = (1<<9),
249 // support constellation enablement
250 LOCATION_CAPABILITIES_CONSTELLATION_ENABLEMENT_BIT = (1<<10),
251 // support agpm
252 LOCATION_CAPABILITIES_AGPM_BIT = (1<<11),
Mike Caileanb884edb2019-05-02 17:09:25 -0700253 // support location privacy
254 LOCATION_CAPABILITIES_PRIVACY_BIT = (1<<12),
Mike Caileanb1cb9072020-03-16 11:45:01 -0700255 // support measurement corrections
256 LOCATION_CAPABILITIES_MEASUREMENTS_CORRECTION_BIT = (1<<13),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800257} LocationCapabilitiesBits;
258
259typedef enum {
260 LOCATION_TECHNOLOGY_TYPE_GNSS = 0,
261} LocationTechnologyType;
262
263// Configures how GPS is locked when GPS is disabled (through GnssDisable)
Hoss Zhou1839fb12018-12-20 15:05:08 +0800264enum {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800265 GNSS_CONFIG_GPS_LOCK_NONE = 0, // gps is not locked when GPS is disabled (GnssDisable)
266 GNSS_CONFIG_GPS_LOCK_MO, // gps mobile originated (MO) is locked when GPS is disabled
267 GNSS_CONFIG_GPS_LOCK_NI, // gps network initiated (NI) is locked when GPS is disabled
268 GNSS_CONFIG_GPS_LOCK_MO_AND_NI,// gps MO and NI is locked when GPS is disabled
Hoss Zhou1839fb12018-12-20 15:05:08 +0800269};
270typedef int32_t GnssConfigGpsLock;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800271
272// SUPL version
273typedef enum {
274 GNSS_CONFIG_SUPL_VERSION_1_0_0 = 1,
275 GNSS_CONFIG_SUPL_VERSION_2_0_0,
276 GNSS_CONFIG_SUPL_VERSION_2_0_2,
Nilesh Ghardec7b63822019-11-20 17:59:43 +0530277 GNSS_CONFIG_SUPL_VERSION_2_0_4,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800278} GnssConfigSuplVersion;
279
280// LTE Positioning Profile
281typedef enum {
282 GNSS_CONFIG_LPP_PROFILE_RRLP_ON_LTE = 0, // RRLP on LTE (Default)
283 GNSS_CONFIG_LPP_PROFILE_USER_PLANE, // LPP User Plane (UP) on LTE
284 GNSS_CONFIG_LPP_PROFILE_CONTROL_PLANE, // LPP_Control_Plane (CP)
285 GNSS_CONFIG_LPP_PROFILE_USER_PLANE_AND_CONTROL_PLANE, // Both LPP UP and CP
286} GnssConfigLppProfile;
287
288// Technology for LPPe Control Plane
289typedef uint16_t GnssConfigLppeControlPlaneMask;
290typedef enum {
291 GNSS_CONFIG_LPPE_CONTROL_PLANE_DBH_BIT = (1<<0), // DBH
292 GNSS_CONFIG_LPPE_CONTROL_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS
293 GNSS_CONFIG_LPPE_CONTROL_PLANE_SRN_AP_MEASUREMENTS_BIT = (1<<2), // SRN_AP_MEASUREMENTS
294 GNSS_CONFIG_LPPE_CONTROL_PLANE_SENSOR_BARO_MEASUREMENTS_BIT = (1<<3),
295 // SENSOR_BARO_MEASUREMENTS
296} GnssConfigLppeControlPlaneBits;
297
298// Technology for LPPe User Plane
299typedef uint16_t GnssConfigLppeUserPlaneMask;
300typedef enum {
301 GNSS_CONFIG_LPPE_USER_PLANE_DBH_BIT = (1<<0), // DBH
302 GNSS_CONFIG_LPPE_USER_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS
303 GNSS_CONFIG_LPPE_USER_PLANE_SRN_AP_MEASUREMENTS_BIT = (1<<2), // SRN_AP_MEASUREMENTS
304 GNSS_CONFIG_LPPE_USER_PLANE_SENSOR_BARO_MEASUREMENTS_BIT = (1<<3),
305 // SENSOR_BARO_MEASUREMENTS
306} GnssConfigLppeUserPlaneBits;
307
308// Positioning Protocol on A-GLONASS system
309typedef uint16_t GnssConfigAGlonassPositionProtocolMask;
310typedef enum {
311 GNSS_CONFIG_RRC_CONTROL_PLANE_BIT = (1<<0), // RRC Control Plane
312 GNSS_CONFIG_RRLP_USER_PLANE_BIT = (1<<1), // RRLP User Plane
313 GNSS_CONFIG_LLP_USER_PLANE_BIT = (1<<2), // LPP User Plane
314 GNSS_CONFIG_LLP_CONTROL_PLANE_BIT = (1<<3), // LPP Control Plane
315} GnssConfigAGlonassPositionProtocolBits;
316
317typedef enum {
318 GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_NO = 0,
319 GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_YES,
320} GnssConfigEmergencyPdnForEmergencySupl;
321
322typedef enum {
323 GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_NO = 0,
324 GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_YES,
325} GnssConfigSuplEmergencyServices;
326
327typedef uint16_t GnssConfigSuplModeMask;
328typedef enum {
329 GNSS_CONFIG_SUPL_MODE_MSB_BIT = (1<<0),
330 GNSS_CONFIG_SUPL_MODE_MSA_BIT = (1<<1),
331} GnssConfigSuplModeBits;
332
333typedef uint32_t GnssConfigFlagsMask;
334typedef enum {
335 GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT = (1<<0),
336 GNSS_CONFIG_FLAGS_SUPL_VERSION_VALID_BIT = (1<<1),
337 GNSS_CONFIG_FLAGS_SET_ASSISTANCE_DATA_VALID_BIT = (1<<2),
338 GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT = (1<<3),
339 GNSS_CONFIG_FLAGS_LPPE_CONTROL_PLANE_VALID_BIT = (1<<4),
340 GNSS_CONFIG_FLAGS_LPPE_USER_PLANE_VALID_BIT = (1<<5),
341 GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT = (1<<6),
342 GNSS_CONFIG_FLAGS_EM_PDN_FOR_EM_SUPL_VALID_BIT = (1<<7),
343 GNSS_CONFIG_FLAGS_SUPL_EM_SERVICES_BIT = (1<<8),
344 GNSS_CONFIG_FLAGS_SUPL_MODE_BIT = (1<<9),
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +0530345 GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT = (1<<10),
Mike Caileanb0462412019-02-11 09:11:09 -0800346 GNSS_CONFIG_FLAGS_EMERGENCY_EXTENSION_SECONDS_BIT = (1<<11),
Srivastava, Saurabhaa949382020-04-16 15:25:00 +0530347 GNSS_CONFIG_FLAGS_ROBUST_LOCATION_BIT = (1<<12),
348 GNSS_CONFIG_FLAGS_MIN_GPS_WEEK_BIT = (1<<13),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800349} GnssConfigFlagsBits;
350
351typedef enum {
352 GNSS_NI_ENCODING_TYPE_NONE = 0,
353 GNSS_NI_ENCODING_TYPE_GSM_DEFAULT,
354 GNSS_NI_ENCODING_TYPE_UTF8,
355 GNSS_NI_ENCODING_TYPE_UCS2,
356} GnssNiEncodingType;
357
358typedef enum {
359 GNSS_NI_TYPE_VOICE = 0,
360 GNSS_NI_TYPE_SUPL,
361 GNSS_NI_TYPE_CONTROL_PLANE,
362 GNSS_NI_TYPE_EMERGENCY_SUPL
363} GnssNiType;
364
365typedef uint16_t GnssNiOptionsMask;
366typedef enum {
367 GNSS_NI_OPTIONS_NOTIFICATION_BIT = (1<<0),
368 GNSS_NI_OPTIONS_VERIFICATION_BIT = (1<<1),
369 GNSS_NI_OPTIONS_PRIVACY_OVERRIDE_BIT = (1<<2),
370} GnssNiOptionsBits;
371
372typedef enum {
373 GNSS_NI_RESPONSE_ACCEPT = 1,
374 GNSS_NI_RESPONSE_DENY,
375 GNSS_NI_RESPONSE_NO_RESPONSE,
376 GNSS_NI_RESPONSE_IGNORE,
377} GnssNiResponse;
378
379typedef enum {
380 GNSS_SV_TYPE_UNKNOWN = 0,
381 GNSS_SV_TYPE_GPS,
382 GNSS_SV_TYPE_SBAS,
383 GNSS_SV_TYPE_GLONASS,
384 GNSS_SV_TYPE_QZSS,
385 GNSS_SV_TYPE_BEIDOU,
386 GNSS_SV_TYPE_GALILEO,
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530387 GNSS_SV_TYPE_NAVIC,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800388} GnssSvType;
389
390typedef enum {
391 GNSS_EPH_TYPE_UNKNOWN = 0,
392 GNSS_EPH_TYPE_EPHEMERIS,
393 GNSS_EPH_TYPE_ALMANAC,
394} GnssEphemerisType;
395
396typedef enum {
397 GNSS_EPH_SOURCE_UNKNOWN = 0,
398 GNSS_EPH_SOURCE_DEMODULATED,
399 GNSS_EPH_SOURCE_SUPL_PROVIDED,
400 GNSS_EPH_SOURCE_OTHER_SERVER_PROVIDED,
401 GNSS_EPH_SOURCE_LOCAL,
402} GnssEphemerisSource;
403
404typedef enum {
405 GNSS_EPH_HEALTH_UNKNOWN = 0,
406 GNSS_EPH_HEALTH_GOOD,
407 GNSS_EPH_HEALTH_BAD,
408} GnssEphemerisHealth;
409
410typedef uint16_t GnssSvOptionsMask;
411typedef enum {
Mike Cailean7dfa87b2018-02-06 16:36:27 -0800412 GNSS_SV_OPTIONS_HAS_EPHEMER_BIT = (1<<0),
413 GNSS_SV_OPTIONS_HAS_ALMANAC_BIT = (1<<1),
414 GNSS_SV_OPTIONS_USED_IN_FIX_BIT = (1<<2),
415 GNSS_SV_OPTIONS_HAS_CARRIER_FREQUENCY_BIT = (1<<3),
Mike Caileandff6ef52019-08-27 16:41:07 -0700416 GNSS_SV_OPTIONS_HAS_GNSS_SIGNAL_TYPE_BIT = (1<<4)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800417} GnssSvOptionsBits;
418
419typedef enum {
420 GNSS_ASSISTANCE_TYPE_SUPL = 0,
421 GNSS_ASSISTANCE_TYPE_C2K,
Mike Caileane7872802019-01-25 10:15:19 -0800422 GNSS_ASSISTANCE_TYPE_SUPL_EIMS,
423 GNSS_ASSISTANCE_TYPE_SUPL_IMS,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800424} GnssAssistanceType;
425
426typedef enum {
427 GNSS_SUPL_MODE_STANDALONE = 0,
428 GNSS_SUPL_MODE_MSB,
429 GNSS_SUPL_MODE_MSA,
430} GnssSuplMode;
431
432typedef enum {
433 BATCHING_MODE_ROUTINE = 0, // positions are reported when batched positions memory is full
434 BATCHING_MODE_TRIP, // positions are reported when a certain distance is covered
435 BATCHING_MODE_NO_AUTO_REPORT // no report of positions automatically, instead queried on demand
436} BatchingMode;
437
438typedef enum {
439 BATCHING_STATUS_TRIP_COMPLETED = 0,
440 BATCHING_STATUS_POSITION_AVAILABE,
441 BATCHING_STATUS_POSITION_UNAVAILABLE
442} BatchingStatus;
443
444typedef uint16_t GnssMeasurementsAdrStateMask;
445typedef enum {
Mike Cailean4149abc2019-02-04 16:28:51 -0800446 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_UNKNOWN = 0,
447 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_VALID_BIT = (1<<0),
448 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_RESET_BIT = (1<<1),
449 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_CYCLE_SLIP_BIT = (1<<2),
450 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_HALF_CYCLE_RESOLVED_BIT = (1<<3),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800451} GnssMeasurementsAdrStateBits;
452
Mike Cailean4149abc2019-02-04 16:28:51 -0800453typedef enum {
454 GNSS_MEASUREMENTS_CODE_TYPE_A = 0,
455 GNSS_MEASUREMENTS_CODE_TYPE_B = 1,
456 GNSS_MEASUREMENTS_CODE_TYPE_C = 2,
457 GNSS_MEASUREMENTS_CODE_TYPE_I = 3,
458 GNSS_MEASUREMENTS_CODE_TYPE_L = 4,
459 GNSS_MEASUREMENTS_CODE_TYPE_M = 5,
460 GNSS_MEASUREMENTS_CODE_TYPE_P = 6,
461 GNSS_MEASUREMENTS_CODE_TYPE_Q = 7,
462 GNSS_MEASUREMENTS_CODE_TYPE_S = 8,
463 GNSS_MEASUREMENTS_CODE_TYPE_W = 9,
464 GNSS_MEASUREMENTS_CODE_TYPE_X = 10,
465 GNSS_MEASUREMENTS_CODE_TYPE_Y = 11,
466 GNSS_MEASUREMENTS_CODE_TYPE_Z = 12,
467 GNSS_MEASUREMENTS_CODE_TYPE_N = 13,
468 GNSS_MEASUREMENTS_CODE_TYPE_OTHER = 255,
469} GnssMeasurementsCodeType;
470
Katz Yamada0fc49e82018-02-28 11:22:58 -0800471typedef uint32_t GnssMeasurementsDataFlagsMask;
472typedef enum {
473 GNSS_MEASUREMENTS_DATA_SV_ID_BIT = (1<<0),
474 GNSS_MEASUREMENTS_DATA_SV_TYPE_BIT = (1<<1),
475 GNSS_MEASUREMENTS_DATA_STATE_BIT = (1<<2),
476 GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_BIT = (1<<3),
477 GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_UNCERTAINTY_BIT = (1<<4),
478 GNSS_MEASUREMENTS_DATA_CARRIER_TO_NOISE_BIT = (1<<5),
479 GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_BIT = (1<<6),
480 GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_UNCERTAINTY_BIT = (1<<7),
481 GNSS_MEASUREMENTS_DATA_ADR_STATE_BIT = (1<<8),
482 GNSS_MEASUREMENTS_DATA_ADR_BIT = (1<<9),
483 GNSS_MEASUREMENTS_DATA_ADR_UNCERTAINTY_BIT = (1<<10),
484 GNSS_MEASUREMENTS_DATA_CARRIER_FREQUENCY_BIT = (1<<11),
485 GNSS_MEASUREMENTS_DATA_CARRIER_CYCLES_BIT = (1<<12),
486 GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_BIT = (1<<13),
487 GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_UNCERTAINTY_BIT = (1<<14),
488 GNSS_MEASUREMENTS_DATA_MULTIPATH_INDICATOR_BIT = (1<<15),
489 GNSS_MEASUREMENTS_DATA_SIGNAL_TO_NOISE_RATIO_BIT = (1<<16),
490 GNSS_MEASUREMENTS_DATA_AUTOMATIC_GAIN_CONTROL_BIT = (1<<17),
Mike Cailean39fe80d2020-04-09 09:26:08 -0700491 GNSS_MEASUREMENTS_DATA_FULL_ISB_BIT = (1<<18),
492 GNSS_MEASUREMENTS_DATA_FULL_ISB_UNCERTAINTY_BIT = (1<<19),
Mike Caileanb1cb9072020-03-16 11:45:01 -0700493 GNSS_MEASUREMENTS_DATA_SATELLITE_ISB_BIT = (1<<20),
494 GNSS_MEASUREMENTS_DATA_SATELLITE_ISB_UNCERTAINTY_BIT = (1<<21),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800495} GnssMeasurementsDataFlagsBits;
496
497typedef uint32_t GnssMeasurementsStateMask;
498typedef enum {
499 GNSS_MEASUREMENTS_STATE_UNKNOWN_BIT = 0,
500 GNSS_MEASUREMENTS_STATE_CODE_LOCK_BIT = (1<<0),
501 GNSS_MEASUREMENTS_STATE_BIT_SYNC_BIT = (1<<1),
502 GNSS_MEASUREMENTS_STATE_SUBFRAME_SYNC_BIT = (1<<2),
503 GNSS_MEASUREMENTS_STATE_TOW_DECODED_BIT = (1<<3),
504 GNSS_MEASUREMENTS_STATE_MSEC_AMBIGUOUS_BIT = (1<<4),
505 GNSS_MEASUREMENTS_STATE_SYMBOL_SYNC_BIT = (1<<5),
506 GNSS_MEASUREMENTS_STATE_GLO_STRING_SYNC_BIT = (1<<6),
507 GNSS_MEASUREMENTS_STATE_GLO_TOD_DECODED_BIT = (1<<7),
508 GNSS_MEASUREMENTS_STATE_BDS_D2_BIT_SYNC_BIT = (1<<8),
509 GNSS_MEASUREMENTS_STATE_BDS_D2_SUBFRAME_SYNC_BIT = (1<<9),
510 GNSS_MEASUREMENTS_STATE_GAL_E1BC_CODE_LOCK_BIT = (1<<10),
511 GNSS_MEASUREMENTS_STATE_GAL_E1C_2ND_CODE_LOCK_BIT = (1<<11),
512 GNSS_MEASUREMENTS_STATE_GAL_E1B_PAGE_SYNC_BIT = (1<<12),
513 GNSS_MEASUREMENTS_STATE_SBAS_SYNC_BIT = (1<<13),
Mike Cailean4149abc2019-02-04 16:28:51 -0800514 GNSS_MEASUREMENTS_STATE_TOW_KNOWN_BIT = (1<<14),
515 GNSS_MEASUREMENTS_STATE_GLO_TOD_KNOWN_BIT = (1<<15),
516 GNSS_MEASUREMENTS_STATE_2ND_CODE_LOCK_BIT = (1<<16),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800517} GnssMeasurementsStateBits;
518
Mike Caileanb1cb9072020-03-16 11:45:01 -0700519typedef uint16_t GnssSingleSatCorrectionMask;
520typedef enum {
Mike Cailean67af8dc2020-02-07 17:39:18 -0800521 GNSS_MEAS_CORR_UNKNOWN_BIT = 0,
522 GNSS_MEAS_CORR_HAS_SAT_IS_LOS_PROBABILITY_BIT = (1 << 0),
523 GNSS_MEAS_CORR_HAS_EXCESS_PATH_LENGTH_BIT = (1 << 1),
524 GNSS_MEAS_CORR_HAS_EXCESS_PATH_LENGTH_UNC_BIT = (1 << 2),
525 GNSS_MEAS_CORR_HAS_REFLECTING_PLANE_BIT = (1 << 3),
Mike Caileanb1cb9072020-03-16 11:45:01 -0700526} GnssSingleSatCorrectionBits;
527
Katz Yamada0fc49e82018-02-28 11:22:58 -0800528typedef enum {
529 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_UNKNOWN = 0,
530 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_PRESENT,
531 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_NOT_PRESENT,
532} GnssMeasurementsMultipathIndicator;
533
534typedef uint32_t GnssMeasurementsClockFlagsMask;
535typedef enum {
536 GNSS_MEASUREMENTS_CLOCK_FLAGS_LEAP_SECOND_BIT = (1<<0),
537 GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_BIT = (1<<1),
538 GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_UNCERTAINTY_BIT = (1<<2),
539 GNSS_MEASUREMENTS_CLOCK_FLAGS_FULL_BIAS_BIT = (1<<3),
540 GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_BIT = (1<<4),
541 GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_UNCERTAINTY_BIT = (1<<5),
542 GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_BIT = (1<<6),
543 GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_UNCERTAINTY_BIT = (1<<7),
544 GNSS_MEASUREMENTS_CLOCK_FLAGS_HW_CLOCK_DISCONTINUITY_COUNT_BIT = (1<<8),
545} GnssMeasurementsClockFlagsBits;
546
547typedef uint32_t GnssAidingDataSvMask;
548typedef enum {
549 GNSS_AIDING_DATA_SV_EPHEMERIS_BIT = (1<<0), // ephemeris
550 GNSS_AIDING_DATA_SV_ALMANAC_BIT = (1<<1), // almanac
551 GNSS_AIDING_DATA_SV_HEALTH_BIT = (1<<2), // health
552 GNSS_AIDING_DATA_SV_DIRECTION_BIT = (1<<3), // direction
553 GNSS_AIDING_DATA_SV_STEER_BIT = (1<<4), // steer
554 GNSS_AIDING_DATA_SV_ALMANAC_CORR_BIT = (1<<5), // almanac correction
555 GNSS_AIDING_DATA_SV_BLACKLIST_BIT = (1<<6), // blacklist SVs
556 GNSS_AIDING_DATA_SV_SA_DATA_BIT = (1<<7), // sensitivity assistance data
557 GNSS_AIDING_DATA_SV_NO_EXIST_BIT = (1<<8), // SV does not exist
558 GNSS_AIDING_DATA_SV_IONOSPHERE_BIT = (1<<9), // ionosphere correction
559 GNSS_AIDING_DATA_SV_TIME_BIT = (1<<10),// reset satellite time
Bhavna Sharma5a8d1712018-08-22 09:45:25 -0700560 GNSS_AIDING_DATA_SV_MB_DATA = (1<<11),// delete multiband data
561 GNSS_AIDING_DATA_SV_POLY_BIT = (1<<12),// poly
Katz Yamada0fc49e82018-02-28 11:22:58 -0800562} GnssAidingDataSvBits;
563
564typedef uint32_t GnssAidingDataSvTypeMask;
565typedef enum {
566 GNSS_AIDING_DATA_SV_TYPE_GPS_BIT = (1<<0),
567 GNSS_AIDING_DATA_SV_TYPE_GLONASS_BIT = (1<<1),
568 GNSS_AIDING_DATA_SV_TYPE_QZSS_BIT = (1<<2),
569 GNSS_AIDING_DATA_SV_TYPE_BEIDOU_BIT = (1<<3),
570 GNSS_AIDING_DATA_SV_TYPE_GALILEO_BIT = (1<<4),
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530571 GNSS_AIDING_DATA_SV_TYPE_NAVIC_BIT = (1<<5),
Wei Chen579b2cb2020-03-26 16:27:43 -0700572 GNSS_AIDING_DATA_SV_TYPE_MAX = (1<<6),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800573} GnssAidingDataSvTypeBits;
Wei Chen579b2cb2020-03-26 16:27:43 -0700574#define GNSS_AIDING_DATA_SV_TYPE_MASK_ALL (GNSS_AIDING_DATA_SV_TYPE_MAX-1)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800575
Wei Chen8e04d012018-12-04 15:55:00 -0800576/* Gnss constellation type mask */
577typedef uint16_t GnssConstellationTypeMask;
578typedef enum {
579 GNSS_CONSTELLATION_TYPE_GPS_BIT = (1<<0),
580 GNSS_CONSTELLATION_TYPE_GLONASS_BIT = (1<<1),
581 GNSS_CONSTELLATION_TYPE_QZSS_BIT = (1<<2),
582 GNSS_CONSTELLATION_TYPE_BEIDOU_BIT = (1<<3),
583 GNSS_CONSTELLATION_TYPE_GALILEO_BIT = (1<<4),
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530584 GNSS_CONSTELLATION_TYPE_SBAS_BIT = (1<<5),
Wei Chenf8883782019-07-25 13:51:58 -0700585 GNSS_CONSTELLATION_TYPE_NAVIC_BIT = (1<<6),
Wei Chen8e04d012018-12-04 15:55:00 -0800586} GnssConstellationTypeBits;
587
588#define GNSS_CONSTELLATION_TYPE_MASK_ALL\
589 (GNSS_CONSTELLATION_TYPE_GPS_BIT | GNSS_CONSTELLATION_TYPE_GLONASS_BIT |\
590 GNSS_CONSTELLATION_TYPE_QZSS_BIT | GNSS_CONSTELLATION_TYPE_BEIDOU_BIT |\
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530591 GNSS_CONSTELLATION_TYPE_GALILEO_BIT | GNSS_CONSTELLATION_TYPE_SBAS_BIT |\
592 GNSS_CONSTELLATION_TYPE_NAVIC_BIT)
Wei Chen8e04d012018-12-04 15:55:00 -0800593
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700594/** GNSS Signal Type and RF Band */
595typedef uint32_t GnssSignalTypeMask;
596typedef enum {
597 /** GPS L1CA Signal */
598 GNSS_SIGNAL_GPS_L1CA = (1<<0),
599 /** GPS L1C Signal */
600 GNSS_SIGNAL_GPS_L1C = (1<<1),
601 /** GPS L2 RF Band */
602 GNSS_SIGNAL_GPS_L2 = (1<<2),
603 /** GPS L5 RF Band */
604 GNSS_SIGNAL_GPS_L5 = (1<<3),
605 /** GLONASS G1 (L1OF) RF Band */
606 GNSS_SIGNAL_GLONASS_G1 = (1<<4),
607 /** GLONASS G2 (L2OF) RF Band */
608 GNSS_SIGNAL_GLONASS_G2 = (1<<5),
609 /** GALILEO E1 RF Band */
610 GNSS_SIGNAL_GALILEO_E1 = (1<<6),
611 /** GALILEO E5A RF Band */
612 GNSS_SIGNAL_GALILEO_E5A = (1<<7),
613 /** GALILEO E5B RF Band */
Hoss Zhou48b4e042018-09-03 15:27:08 +0800614 GNSS_SIGNAL_GALILEO_E5B = (1<<8),
Wei Chen755bba22019-10-08 14:28:08 -0700615 /** BEIDOU B1 RF Band */
616 GNSS_SIGNAL_BEIDOU_B1 = (1<<9),
617 /** BEIDOU B2 RF Band */
618 GNSS_SIGNAL_BEIDOU_B2 = (1<<10),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700619 /** QZSS L1CA RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700620 GNSS_SIGNAL_QZSS_L1CA = (1<<11),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700621 /** QZSS L1S RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700622 GNSS_SIGNAL_QZSS_L1S = (1<<12),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700623 /** QZSS L2 RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700624 GNSS_SIGNAL_QZSS_L2 = (1<<13),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700625 /** QZSS L5 RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700626 GNSS_SIGNAL_QZSS_L5 = (1<<14),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700627 /** SBAS L1 RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700628 GNSS_SIGNAL_SBAS_L1 = (1<<15),
629 /** BEIDOU B1I RF Band */
630 GNSS_SIGNAL_BEIDOU_B1I = (1<<16),
631 /** BEIDOU B1C RF Band */
632 GNSS_SIGNAL_BEIDOU_B1C = (1<<17),
633 /** BEIDOU B2I RF Band */
634 GNSS_SIGNAL_BEIDOU_B2I = (1<<18),
635 /** BEIDOU B2AI RF Band */
636 GNSS_SIGNAL_BEIDOU_B2AI = (1<<19),
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530637 /** NAVIC L5 RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700638 GNSS_SIGNAL_NAVIC_L5 = (1<<20),
Mike Cailean64514a52019-06-10 13:48:15 -0700639 /** BEIDOU B2A_Q RF Band */
Wei Chen755bba22019-10-08 14:28:08 -0700640 GNSS_SIGNAL_BEIDOU_B2AQ = (1<<21),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700641} GnssSignalTypeBits;
642
Bhavna Sharma7445c502019-01-15 16:29:48 -0800643#define GNSS_SIGNAL_TYPE_MASK_ALL\
644 (GNSS_SIGNAL_GPS_L1CA | GNSS_SIGNAL_GPS_L1C | GNSS_SIGNAL_GPS_L2 |\
645 GNSS_SIGNAL_GPS_L5| GNSS_SIGNAL_GLONASS_G1 | GNSS_SIGNAL_GLONASS_G2 |\
646 GNSS_SIGNAL_GALILEO_E1 | GNSS_SIGNAL_GALILEO_E5A | GNSS_SIGNAL_GALILEO_E5B |\
647 GNSS_SIGNAL_BEIDOU_B1I | GNSS_SIGNAL_BEIDOU_B1C | GNSS_SIGNAL_BEIDOU_B2I|\
648 GNSS_SIGNAL_BEIDOU_B2AI | GNSS_SIGNAL_QZSS_L1CA | GNSS_SIGNAL_QZSS_L1S |\
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530649 GNSS_SIGNAL_QZSS_L2| GNSS_SIGNAL_QZSS_L5 | GNSS_SIGNAL_SBAS_L1 |\
Mike Cailean90cbefa2019-06-14 10:03:51 -0700650 GNSS_SIGNAL_NAVIC_L5 | GNSS_SIGNAL_BEIDOU_B2AQ)
Bhavna Sharma7445c502019-01-15 16:29:48 -0800651
Katz Yamada0fc49e82018-02-28 11:22:58 -0800652typedef enum
653{
Wei Chen8e04d012018-12-04 15:55:00 -0800654 GNSS_LOC_SV_SYSTEM_UNKNOWN = 0,
655 /** unknown sv system. */
Wei Chen49f7e152019-04-19 15:21:27 -0700656 GNSS_LOC_SV_SYSTEM_MIN = 1,
657 /**< Min enum of valid SV system. */
Katz Yamada0fc49e82018-02-28 11:22:58 -0800658 GNSS_LOC_SV_SYSTEM_GPS = 1,
659 /**< GPS satellite. */
660 GNSS_LOC_SV_SYSTEM_GALILEO = 2,
661 /**< GALILEO satellite. */
662 GNSS_LOC_SV_SYSTEM_SBAS = 3,
663 /**< SBAS satellite. */
Wei Chen8e04d012018-12-04 15:55:00 -0800664 GNSS_LOC_SV_SYSTEM_GLONASS = 4,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800665 /**< GLONASS satellite. */
Wei Chen8e04d012018-12-04 15:55:00 -0800666 GNSS_LOC_SV_SYSTEM_BDS = 5,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800667 /**< BDS satellite. */
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530668 GNSS_LOC_SV_SYSTEM_QZSS = 6,
669 /**< QZSS satellite. */
Wei Chen49f7e152019-04-19 15:21:27 -0700670 GNSS_LOC_SV_SYSTEM_NAVIC = 7,
Wei Chenf8883782019-07-25 13:51:58 -0700671 /**< NAVIC satellite. */
Wei Chen49f7e152019-04-19 15:21:27 -0700672 GNSS_LOC_SV_SYSTEM_MAX = 7,
673 /**< Max enum of valid SV system. */
Katz Yamada0fc49e82018-02-28 11:22:58 -0800674} Gnss_LocSvSystemEnumType;
675
Mike Cailean75cfd432018-06-07 16:54:35 -0700676typedef enum {
677 GNSS_LOC_SIGNAL_TYPE_GPS_L1CA = 0, /**< GPS L1CA Signal */
678 GNSS_LOC_SIGNAL_TYPE_GPS_L1C = 1, /**< GPS L1C Signal */
679 GNSS_LOC_SIGNAL_TYPE_GPS_L2C_L = 2, /**< GPS L2C_L RF Band */
680 GNSS_LOC_SIGNAL_TYPE_GPS_L5_Q = 3, /**< GPS L5_Q RF Band */
681 GNSS_LOC_SIGNAL_TYPE_GLONASS_G1 = 4, /**< GLONASS G1 (L1OF) RF Band */
682 GNSS_LOC_SIGNAL_TYPE_GLONASS_G2 = 5, /**< GLONASS G2 (L2OF) RF Band */
683 GNSS_LOC_SIGNAL_TYPE_GALILEO_E1_C = 6, /**< GALILEO E1_C RF Band */
684 GNSS_LOC_SIGNAL_TYPE_GALILEO_E5A_Q = 7, /**< GALILEO E5A_Q RF Band */
685 GNSS_LOC_SIGNAL_TYPE_GALILEO_E5B_Q = 8, /**< GALILEO E5B_Q RF Band */
686 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B1_I = 9, /**< BEIDOU B1_I RF Band */
687 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B1C = 10, /**< BEIDOU B1C RF Band */
688 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2_I = 11, /**< BEIDOU B2_I RF Band */
689 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2A_I = 12, /**< BEIDOU B2A_I RF Band */
690 GNSS_LOC_SIGNAL_TYPE_QZSS_L1CA = 13, /**< QZSS L1CA RF Band */
691 GNSS_LOC_SIGNAL_TYPE_QZSS_L1S = 14, /**< QZSS L1S RF Band */
692 GNSS_LOC_SIGNAL_TYPE_QZSS_L2C_L = 15, /**< QZSS L2C_L RF Band */
693 GNSS_LOC_SIGNAL_TYPE_QZSS_L5_Q = 16, /**< QZSS L5_Q RF Band */
694 GNSS_LOC_SIGNAL_TYPE_SBAS_L1_CA = 17, /**< SBAS L1_CA RF Band */
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530695 GNSS_LOC_SIGNAL_TYPE_NAVIC_L5 = 18, /**< NAVIC L5 RF Band */
Mike Cailean64514a52019-06-10 13:48:15 -0700696 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2A_Q = 19, /**< BEIDOU B2A_Q RF Band */
697 GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES = 20 /**< Maximum number of signal types */
Mike Cailean75cfd432018-06-07 16:54:35 -0700698} Gnss_LocSignalEnumType;
699
Wei Chen1a1232c2019-07-18 15:50:55 -0700700typedef uint32_t PositioningEngineMask;
701typedef enum {
702 STANDARD_POSITIONING_ENGINE = (1 << 0),
703 DEAD_RECKONING_ENGINE = (1 << 1),
704 PRECISE_POSITIONING_ENGINE = (1 << 2)
705} PositioningEngineBits;
Wei Chen6c354392019-08-16 14:59:23 -0700706#define POSITION_ENGINE_MASK_ALL \
707 (STANDARD_POSITIONING_ENGINE|DEAD_RECKONING_ENGINE|PRECISE_POSITIONING_ENGINE)
Wei Chen1a1232c2019-07-18 15:50:55 -0700708
Mike Cailean75cfd432018-06-07 16:54:35 -0700709typedef uint64_t GnssDataMask;
710typedef enum {
711 // Jammer Indicator is available
712 GNSS_LOC_DATA_JAMMER_IND_BIT = (1ULL << 0),
713 // AGC is available
714 GNSS_LOC_DATA_AGC_BIT = (1ULL << 1)
715} GnssDataBits;
716
Katz Yamada0fc49e82018-02-28 11:22:58 -0800717typedef uint32_t GnssSystemTimeStructTypeFlags;
718typedef enum {
719 GNSS_SYSTEM_TIME_WEEK_VALID = (1 << 0),
720 GNSS_SYSTEM_TIME_WEEK_MS_VALID = (1 << 1),
721 GNSS_SYSTEM_CLK_TIME_BIAS_VALID = (1 << 2),
722 GNSS_SYSTEM_CLK_TIME_BIAS_UNC_VALID = (1 << 3),
723 GNSS_SYSTEM_REF_FCOUNT_VALID = (1 << 4),
724 GNSS_SYSTEM_NUM_CLOCK_RESETS_VALID = (1 << 5)
725} GnssSystemTimeTypeBits;
726
727typedef uint32_t GnssGloTimeStructTypeFlags;
728typedef enum {
729 GNSS_CLO_DAYS_VALID = (1 << 0),
Wei Chen8e04d012018-12-04 15:55:00 -0800730 GNSS_GLO_MSEC_VALID = (1 << 1),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800731 GNSS_GLO_CLK_TIME_BIAS_VALID = (1 << 2),
732 GNSS_GLO_CLK_TIME_BIAS_UNC_VALID = (1 << 3),
733 GNSS_GLO_REF_FCOUNT_VALID = (1 << 4),
734 GNSS_GLO_NUM_CLOCK_RESETS_VALID = (1 << 5),
735 GNSS_GLO_FOUR_YEAR_VALID = (1 << 6)
736} GnssGloTimeTypeBits;
737
738typedef struct {
739 GnssAidingDataSvMask svMask; // bitwise OR of GnssAidingDataSvBits
740 GnssAidingDataSvTypeMask svTypeMask; // bitwise OR of GnssAidingDataSvTypeBits
741} GnssAidingDataSv;
742
743typedef uint32_t GnssAidingDataCommonMask;
744typedef enum {
745 GNSS_AIDING_DATA_COMMON_POSITION_BIT = (1<<0), // position estimate
746 GNSS_AIDING_DATA_COMMON_TIME_BIT = (1<<1), // reset all clock values
747 GNSS_AIDING_DATA_COMMON_UTC_BIT = (1<<2), // UTC estimate
748 GNSS_AIDING_DATA_COMMON_RTI_BIT = (1<<3), // RTI
749 GNSS_AIDING_DATA_COMMON_FREQ_BIAS_EST_BIT = (1<<4), // frequency bias estimate
750 GNSS_AIDING_DATA_COMMON_CELLDB_BIT = (1<<5), // all celldb info
751} GnssAidingDataCommonBits;
752
753typedef struct {
754 GnssAidingDataCommonMask mask; // bitwise OR of GnssAidingDataCommonBits
755} GnssAidingDataCommon;
756
757typedef struct {
758 bool deleteAll; // if true, delete all aiding data and ignore other params
759 GnssAidingDataSv sv; // SV specific aiding data
760 GnssAidingDataCommon common; // common aiding data
Bhavna Sharmabf3d36c2019-06-21 14:32:15 -0700761 PositioningEngineMask posEngineMask; // engines to perform the delete operation on.
Katz Yamada0fc49e82018-02-28 11:22:58 -0800762} GnssAidingData;
763
Wei Chen49f7e152019-04-19 15:21:27 -0700764typedef uint16_t DrCalibrationStatusMask;
765typedef enum {
766 // Indicate that roll calibration is needed. Need to take more turns on level ground
767 DR_ROLL_CALIBRATION_NEEDED = (1<<0),
768 // Indicate that pitch calibration is needed. Need to take more turns on level ground
769 DR_PITCH_CALIBRATION_NEEDED = (1<<1),
770 // Indicate that yaw calibration is needed. Need to accelerate in a straight line
771 DR_YAW_CALIBRATION_NEEDED = (1<<2),
772 // Indicate that odo calibration is needed. Need to accelerate in a straight line
773 DR_ODO_CALIBRATION_NEEDED = (1<<3),
774 // Indicate that gyro calibration is needed. Need to take more turns on level ground
775 DR_GYRO_CALIBRATION_NEEDED = (1<<4)
776} DrCalibrationStatusBits;
777
Katz Yamada0fc49e82018-02-28 11:22:58 -0800778typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800779 uint32_t size; // set to sizeof(Location)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800780 LocationFlagsMask flags; // bitwise OR of LocationFlagsBits to mark which params are valid
781 uint64_t timestamp; // UTC timestamp for location fix, milliseconds since January 1, 1970
782 double latitude; // in degrees
783 double longitude; // in degrees
784 double altitude; // in meters above the WGS 84 reference ellipsoid
785 float speed; // in meters per second
786 float bearing; // in degrees; range [0, 360)
787 float accuracy; // in meters
788 float verticalAccuracy; // in meters
789 float speedAccuracy; // in meters/second
790 float bearingAccuracy; // in degrees (0 to 359.999)
791 LocationTechnologyMask techMask;
haohuang17015dd2018-04-16 15:12:49 +0800792 LocationSpoofMask spoofMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800793} Location;
794
Wei Chen1a1232c2019-07-18 15:50:55 -0700795typedef enum {
796 LOC_REQ_ENGINE_FUSED_BIT = (1<<0),
797 LOC_REQ_ENGINE_SPE_BIT = (1<<1),
798 LOC_REQ_ENGINE_PPE_BIT = (1<<2),
799} LocReqEngineTypeMask;
800
801typedef enum {
802 LOC_OUTPUT_ENGINE_FUSED = 0,
803 /** This is the GNSS fix from modem */
804 LOC_OUTPUT_ENGINE_SPE = 1,
805 /** This is the GNSS fix with correction PPP/RTK correction */
806 LOC_OUTPUT_ENGINE_PPE = 2,
807 LOC_OUTPUT_ENGINE_COUNT,
808} LocOutputEngineType;
809
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530810struct LocationOptions {
Wei Chen1d823b02018-12-14 16:22:17 -0800811 uint32_t size; // set to sizeof(LocationOptions)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800812 uint32_t minInterval; // in milliseconds
813 uint32_t minDistance; // in meters. if minDistance > 0, gnssSvCallback/gnssNmeaCallback/
814 // gnssMeasurementsCallback may not be called
815 GnssSuplMode mode; // Standalone/MS-Based/MS-Assisted
Wei Chen1a1232c2019-07-18 15:50:55 -0700816 // behavior when this field is 0:
817 // if engine hub is running, this will be fused fix,
818 // if engine hub is not running, this will be SPE fix
819 LocReqEngineTypeMask locReqEngTypeMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800820
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530821 inline LocationOptions() :
Wei Chen1a1232c2019-07-18 15:50:55 -0700822 size(0), minInterval(0), minDistance(0), mode(GNSS_SUPL_MODE_STANDALONE),
823 locReqEngTypeMask((LocReqEngineTypeMask)0) {}
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530824};
825
826typedef enum {
827 GNSS_POWER_MODE_INVALID = 0,
828 GNSS_POWER_MODE_M1, /* Improved Accuracy Mode */
829 GNSS_POWER_MODE_M2, /* Normal Mode */
830 GNSS_POWER_MODE_M3, /* Background Mode */
831 GNSS_POWER_MODE_M4, /* Background Mode */
832 GNSS_POWER_MODE_M5 /* Background Mode */
833} GnssPowerMode;
834
835struct TrackingOptions : LocationOptions {
836 GnssPowerMode powerMode; /* Power Mode to be used for time based tracking
837 sessions */
838 uint32_t tbm; /* Time interval between measurements specified in millis.
839 Applicable to background power modes */
840
841 inline TrackingOptions() :
842 LocationOptions(), powerMode(GNSS_POWER_MODE_INVALID), tbm(0) {}
Wei Chen1d823b02018-12-14 16:22:17 -0800843 inline TrackingOptions(uint32_t s, GnssPowerMode m, uint32_t t) :
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530844 LocationOptions(), powerMode(m), tbm(t) { LocationOptions::size = s; }
845 inline TrackingOptions(const LocationOptions& options) :
846 LocationOptions(options), powerMode(GNSS_POWER_MODE_INVALID), tbm(0) {}
847 inline void setLocationOptions(const LocationOptions& options) {
Wei Chen1a1232c2019-07-18 15:50:55 -0700848 size = sizeof(TrackingOptions);
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530849 minInterval = options.minInterval;
850 minDistance = options.minDistance;
851 mode = options.mode;
Wei Chen1a1232c2019-07-18 15:50:55 -0700852 locReqEngTypeMask = options.locReqEngTypeMask;
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530853 }
Harikrishnan Hariharan59269e12018-07-01 00:43:09 +0530854 inline LocationOptions getLocationOptions() {
855 LocationOptions locOption;
856 locOption.size = sizeof(locOption);
857 locOption.minDistance = minDistance;
858 locOption.minInterval = minInterval;
859 locOption.mode = mode;
Wei Chen1a1232c2019-07-18 15:50:55 -0700860 locOption.locReqEngTypeMask = locReqEngTypeMask;
Harikrishnan Hariharan59269e12018-07-01 00:43:09 +0530861 return locOption;
862 }
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530863};
864
865struct BatchingOptions : LocationOptions {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800866 BatchingMode batchingMode;
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530867
868 inline BatchingOptions() :
869 LocationOptions(), batchingMode(BATCHING_MODE_ROUTINE) {}
Wei Chen1d823b02018-12-14 16:22:17 -0800870 inline BatchingOptions(uint32_t s, BatchingMode m) :
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530871 LocationOptions(), batchingMode(m) { LocationOptions::size = s; }
872 inline BatchingOptions(const LocationOptions& options) :
873 LocationOptions(options), batchingMode(BATCHING_MODE_ROUTINE) {}
874 inline void setLocationOptions(const LocationOptions& options) {
875 minInterval = options.minInterval;
876 minDistance = options.minDistance;
877 mode = options.mode;
878 }
879};
Katz Yamada0fc49e82018-02-28 11:22:58 -0800880
881typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800882 uint32_t size;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800883 BatchingStatus batchingStatus;
884} BatchingStatusInfo;
885
886typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800887 uint32_t size; // set to sizeof(GeofenceOption)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800888 GeofenceBreachTypeMask breachTypeMask; // bitwise OR of GeofenceBreachTypeBits
889 uint32_t responsiveness; // in milliseconds
890 uint32_t dwellTime; // in seconds
891} GeofenceOption;
892
893typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800894 uint32_t size; // set to sizeof(GeofenceInfo)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800895 double latitude; // in degrees
896 double longitude; // in degrees
897 double radius; // in meters
898} GeofenceInfo;
899
900typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800901 uint32_t size; // set to sizeof(GeofenceBreachNotification)
902 uint32_t count; // number of ids in array
Katz Yamada0fc49e82018-02-28 11:22:58 -0800903 uint32_t* ids; // array of ids that have breached
904 Location location; // location associated with breach
905 GeofenceBreachType type; // type of breach
906 uint64_t timestamp; // timestamp of breach
907} GeofenceBreachNotification;
908
909typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800910 uint32_t size; // set to sizeof(GeofenceBreachNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800911 GeofenceStatusAvailable available; // GEOFENCE_STATUS_AVAILABILE_NO/_YES
912 LocationTechnologyType techType; // GNSS
913} GeofenceStatusNotification;
914
915typedef struct {
916 uint64_t gpsSvUsedIdsMask;
917 uint64_t gloSvUsedIdsMask;
918 uint64_t galSvUsedIdsMask;
919 uint64_t bdsSvUsedIdsMask;
920 uint64_t qzssSvUsedIdsMask;
Saurabh Srivastava331c6d92019-04-24 22:34:24 +0530921 uint64_t navicSvUsedIdsMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800922} GnssLocationSvUsedInPosition;
923
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700924typedef struct {
925 /** GnssSignalType mask */
926 GnssSignalTypeMask gnssSignalType;
927 /** Specifies GNSS Constellation Type */
928 Gnss_LocSvSystemEnumType gnssConstellation;
Wei Chen394d3012019-12-10 16:07:23 -0800929 /** Unique SV Identifier.
930 * For SV Range of supported constellation, please refer to
931 * the comment section of svId in GnssSv.
932 * For GLONASS: When slot-number to SV ID mapping is unknown, set as 255.
933 */
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700934 uint16_t gnssSvId;
935} GnssMeasUsageInfo;
936
Katz Yamada0fc49e82018-02-28 11:22:58 -0800937/** @struct
938 Body Frame parameters
939*/
940typedef struct {
941 GnssLocationPosDataMask bodyFrameDataMask; // Contains Body frame LocPosDataMask bits
942 float longAccel; // Forward Acceleration in body frame (m/s2)
943 float latAccel; // Sideward Acceleration in body frame (m/s2)
944 float vertAccel; // Vertical Acceleration in body frame (m/s2)
945 float yawRate; // Heading Rate (Radians/second)
946 float pitch; // Body pitch (Radians)
Naresh Munagala02cddf02018-06-21 10:44:51 +0530947 float longAccelUnc; // Uncertainty of Forward Acceleration in body frame
948 float latAccelUnc; // Uncertainty of Side-ward Acceleration in body frame
949 float vertAccelUnc; // Uncertainty of Vertical Acceleration in body frame
950 float yawRateUnc; // Uncertainty of Heading Rate
951 float pitchUnc; // Uncertainty of Body pitch
Katz Yamada0fc49e82018-02-28 11:22:58 -0800952} GnssLocationPositionDynamics;
953
954typedef struct {
Naresh Munagalaaf069602020-02-17 06:33:10 +0530955 GnssLocationPosDataMaskExt bodyFrameDataMask; // Contains Ext Body frame LocPosDataMask bits
956 float pitchRate; // Body pitch rate (Radians/second)
957 float pitchRateUnc; // Uncertainty of pitch rate (Radians/second)
958 float roll; // Roll of body frame. Clockwise positive. (radian
959 float rollUnc; // Uncertainty of Roll, 68% confidence level (radian)
960 float rollRate; // Roll rate of body frame. Clockwise positive. (radian/second)
961 float rollRateUnc; // Uncertainty of Roll rate, 68% confidence level (radian/second)
962 float yaw; // Yaw of body frame. Clockwise positive (radian)
963 float yawUnc; // Uncertainty of Yaw, 68% confidence level (radian)
964} GnssLocationPositionDynamicsExt;
965
966
967typedef struct {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800968 /** Validity mask for below fields */
969 GnssSystemTimeStructTypeFlags validityMask;
970 /** Extended week number at reference tick.
971 Unit: Week.
972 Set to 65535 if week number is unknown.
973 For GPS:
974 Calculated from midnight, Jan. 6, 1980.
975 OTA decoded 10 bit GPS week is extended to map between:
976 [NV6264 to (NV6264 + 1023)].
977 NV6264: Minimum GPS week number configuration.
978 Default value of NV6264: 1738
979 For BDS:
980 Calculated from 00:00:00 on January 1, 2006 of Coordinated Universal Time (UTC).
981 For GAL:
982 Calculated from 00:00 UT on Sunday August 22, 1999 (midnight between August 21 and August 22).
983 */
984 uint16_t systemWeek;
985 /** Time in to the current week at reference tick.
986 Unit: Millisecond. Range: 0 to 604799999.
987 Check for systemClkTimeUncMs before use */
988 uint32_t systemMsec;
989 /** System clock time bias (sub-millisecond)
990 Units: Millisecond
991 Note: System time (TOW Millisecond) = systemMsec - systemClkTimeBias.
992 Check for systemClkTimeUncMs before use. */
993 float systemClkTimeBias;
994 /** Single sided maximum time bias uncertainty
995 Units: Millisecond */
996 float systemClkTimeUncMs;
997 /** FCount (free running HW timer) value. Don't use for relative time purpose
998 due to possible discontinuities.
999 Unit: Millisecond */
1000 uint32_t refFCount;
1001 /** Number of clock resets/discontinuities detected, affecting the local hardware counter value. */
1002 uint32_t numClockResets;
1003} GnssSystemTimeStructType;
1004
1005typedef struct {
1006 /** GLONASS day number in four years. Refer to GLONASS ICD.
1007 Applicable only for GLONASS and shall be ignored for other constellations.
1008 If unknown shall be set to 65535 */
1009 uint16_t gloDays;
1010 /** Validity mask for below fields */
1011 GnssGloTimeStructTypeFlags validityMask;
1012 /** GLONASS time of day in Millisecond. Refer to GLONASS ICD.
1013 Units: Millisecond
1014 Check for gloClkTimeUncMs before use */
1015 uint32_t gloMsec;
1016 /** GLONASS clock time bias (sub-millisecond)
1017 Units: Millisecond
1018 Note: GLO time (TOD Millisecond) = gloMsec - gloClkTimeBias.
1019 Check for gloClkTimeUncMs before use. */
1020 float gloClkTimeBias;
1021 /** Single sided maximum time bias uncertainty
1022 Units: Millisecond */
1023 float gloClkTimeUncMs;
1024 /** FCount (free running HW timer) value. Don't use for relative time purpose
1025 due to possible discontinuities.
1026 Unit: Millisecond */
1027 uint32_t refFCount;
1028 /** Number of clock resets/discontinuities detected, affecting the local hardware counter value. */
1029 uint32_t numClockResets;
1030 /** GLONASS four year number from 1996. Refer to GLONASS ICD.
1031 Applicable only for GLONASS and shall be ignored for other constellations.
1032 If unknown shall be set to 255 */
1033 uint8_t gloFourYear;
1034} GnssGloTimeStructType;
1035
1036typedef union {
1037 GnssSystemTimeStructType gpsSystemTime;
1038 GnssSystemTimeStructType galSystemTime;
1039 GnssSystemTimeStructType bdsSystemTime;
1040 GnssSystemTimeStructType qzssSystemTime;
Saurabh Srivastava331c6d92019-04-24 22:34:24 +05301041 GnssGloTimeStructType gloSystemTime;
1042 GnssSystemTimeStructType navicSystemTime;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001043} SystemTimeStructUnion;
1044 /** Time applicability of PVT report */
1045typedef struct {
1046 /** Specifies GNSS system time reported. Mandatory field */
1047 Gnss_LocSvSystemEnumType gnssSystemTimeSrc;
1048 /** Reporting of GPS system time is recommended.
1049 If GPS time is unknown & other satellite system time is known,
1050 it should be reported.
1051 Mandatory field
1052 */
1053 SystemTimeStructUnion u;
1054} GnssSystemTime;
1055
1056typedef struct {
Wei Chen6fea13b2020-02-21 16:58:58 -08001057 double latitude; // in degree
1058 double longitude; // in degree
1059 float altitude; // altitude wrt to ellipsoid
1060} LLAInfo;
1061
1062typedef struct {
Wei Chen061857b2019-06-10 10:10:53 -07001063 uint32_t size; // set to sizeof(GnssLocationInfo)
1064 Location location; // basic locaiton info, latitude, longitude, and etc
Katz Yamada0fc49e82018-02-28 11:22:58 -08001065 GnssLocationInfoFlagMask flags; // bitwise OR of GnssLocationInfoBits for param validity
1066 float altitudeMeanSeaLevel; // altitude wrt mean sea level
1067 float pdop; // position dilusion of precision
1068 float hdop; // horizontal dilusion of precision
1069 float vdop; // vertical dilusion of precision
1070 float gdop; // geometric dilution of precision
1071 float tdop; // time dilution of precision
1072 float magneticDeviation; // magnetic deviation
1073 LocationReliability horReliability; // horizontal reliability
1074 LocationReliability verReliability; // vertical reliability
1075 float horUncEllipseSemiMajor; // horizontal elliptical accuracy semi-major axis
1076 float horUncEllipseSemiMinor; // horizontal elliptical accuracy semi-minor axis
1077 float horUncEllipseOrientAzimuth; // horizontal elliptical accuracy azimuth
Bhavna Sharmaee8213f2018-05-25 14:34:08 -07001078 float northStdDeviation; // North standard deviation Unit: Meters
1079 float eastStdDeviation; // East standard deviation. Unit: Meters
Katz Yamada0fc49e82018-02-28 11:22:58 -08001080 float northVelocity; // North Velocity.Unit: Meters/sec
Bhavna Sharmaee8213f2018-05-25 14:34:08 -07001081 float eastVelocity; // East Velocity Unit Meters/sec
1082 float upVelocity; // Up Velocity. Unit Meters/sec
Katz Yamada0fc49e82018-02-28 11:22:58 -08001083 float northVelocityStdDeviation;
1084 float eastVelocityStdDeviation;
1085 float upVelocityStdDeviation;
Wei Chen81f47db2019-04-30 15:02:43 -07001086 uint16_t numSvUsedInPosition;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001087 GnssLocationSvUsedInPosition svUsedInPosition;// Gnss sv used in position data
1088 GnssLocationNavSolutionMask navSolutionMask; // Nav solution mask to indicate sbas corrections
1089 GnssLocationPosTechMask posTechMask; // Position technology used in computing this fix
1090 GnssLocationPositionDynamics bodyFrameData; // Body Frame Dynamics: 4wayAcceleration and
1091 // pitch set with validity
1092 GnssSystemTime gnssSystemTime; // GNSS System Time
Bhavna Sharmaee8213f2018-05-25 14:34:08 -07001093 uint8_t numOfMeasReceived; // Number of measurements received for use in fix.
1094 GnssMeasUsageInfo measUsageInfo[GNSS_SV_MAX]; // GNSS Measurement Usage info
1095 uint8_t leapSeconds; // leap second
1096 float timeUncMs; // Time uncertainty in milliseconds
Wei Chen49f7e152019-04-19 15:21:27 -07001097 uint8_t calibrationConfidence; // Sensor calibration confidence percent,
1098 // in range of [0, 100]
1099 DrCalibrationStatusMask calibrationStatus; // Sensor calibration status
Wei Chen1a1232c2019-07-18 15:50:55 -07001100 // location engine type. When the fix. when the type is set to
1101 // LOC_ENGINE_SRC_FUSED, the fix is the propagated/aggregated
1102 // reports from all engines running on the system (e.g.:
Kevin Tang12095912019-08-06 16:38:12 -07001103 // DR/SPE/PPE). To check which location engine contributes to
1104 // the fused output, check for locOutputEngMask.
Wei Chen1a1232c2019-07-18 15:50:55 -07001105 LocOutputEngineType locOutputEngType;
1106 // when loc output eng type is set to fused, this field
1107 // indicates the set of engines contribute to the fix.
1108 PositioningEngineMask locOutputEngMask;
Wei Chen6fea13b2020-02-21 16:58:58 -08001109 // When robust location is enabled, this field
1110 // will how well the various input data considered for
1111 // navigation solution conform to expectations.
1112 // Range: 0 (least conforming) to 1 (most conforming)
Wei Chencac9fbf2020-03-02 13:04:33 -08001113 float conformityIndex;
Naresh Munagalaaf069602020-02-17 06:33:10 +05301114 GnssLocationPositionDynamicsExt bodyFrameDataExt; // Additional Body Frame Dynamics
Wei Chen6fea13b2020-02-21 16:58:58 -08001115 // VRR-based latitude/longitude/altitude
1116 LLAInfo llaVRPBased;
1117 // VRR-based east, north, and up velocity
1118 float enuVelocityVRPBased[3];
Katz Yamada0fc49e82018-02-28 11:22:58 -08001119} GnssLocationInfoNotification;
1120
1121typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001122 uint32_t size; // set to sizeof(GnssNiNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001123 GnssNiType type; // type of NI (Voice, SUPL, Control Plane)
1124 GnssNiOptionsMask options; // bitwise OR of GnssNiOptionsBits
1125 uint32_t timeout; // time (seconds) to wait for user input
1126 GnssNiResponse timeoutResponse; // the response that should be sent when timeout expires
1127 char requestor[GNSS_NI_REQUESTOR_MAX]; // the requestor that is making the request
1128 GnssNiEncodingType requestorEncoding; // the encoding type for requestor
1129 char message[GNSS_NI_MESSAGE_ID_MAX]; // the message to show user
1130 GnssNiEncodingType messageEncoding; // the encoding type for message
1131 char extras[GNSS_NI_MESSAGE_ID_MAX];
1132} GnssNiNotification;
1133
Naresh Munagalad56857e2019-08-05 13:56:17 +05301134// carrier frequency of the signal tracked
1135#define GPS_L1CA_CARRIER_FREQUENCY (1575420000.0)
1136#define GPS_L1C_CARRIER_FREQUENCY (1575420000.0)
1137#define GPS_L2C_L_CARRIER_FREQUENCY (1227600000.0)
1138#define GPS_L5_Q_CARRIER_FREQUENCY (1176450000.0)
1139#define GLONASS_G1_CARRIER_FREQUENCY (1602000000.0)
1140#define GLONASS_G2_CARRIER_FREQUENCY (1246000000.0)
1141#define GALILEO_E1_C_CARRIER_FREQUENCY (1575420000.0)
1142#define GALILEO_E5A_Q_CARRIER_FREQUENCY (1176450000.0)
1143#define GALILEO_E5B_Q_CARRIER_FREQUENCY (1207140000.0)
1144#define BEIDOU_B1_I_CARRIER_FREQUENCY (1561098000.0)
1145#define BEIDOU_B1C_CARRIER_FREQUENCY (1575420000.0)
1146#define BEIDOU_B2_I_CARRIER_FREQUENCY (1207140000.0)
1147#define BEIDOU_B2A_I_CARRIER_FREQUENCY (1176450000.0)
1148#define BEIDOU_B2A_Q_CARRIER_FREQUENCY (1176450000.0)
1149#define QZSS_L1CA_CARRIER_FREQUENCY (1575420000.0)
1150#define QZSS_L1S_CARRIER_FREQUENCY (1575420000.0)
1151#define QZSS_L2C_L_CARRIER_FREQUENCY (1227600000.0)
1152#define QZSS_L5_Q_CARRIER_FREQUENCY (1176450000.0)
1153#define SBAS_L1_CA_CARRIER_FREQUENCY (1575420000.0)
1154#define NAVIC_L5_CARRIER_FREQUENCY (1176450000.0)
1155
Katz Yamada0fc49e82018-02-28 11:22:58 -08001156typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001157 uint32_t size; // set to sizeof(GnssSv)
Wei Chen394d3012019-12-10 16:07:23 -08001158 // Unique SV Identifier.
1159 // SV Range for supported constellation is specified as below:
1160 // - For GPS: 1 to 32
1161 // - For GLONASS: 65 to 96
1162 // - For SBAS: 120 to 158 and 183 to 191
1163 // - For QZSS: 193 to 197
Mike Caileana581e542020-04-01 09:40:13 -07001164 // - For BDS: 201 to 263
Wei Chen394d3012019-12-10 16:07:23 -08001165 // - For GAL: 301 to 336
Nilesh Gharde554985a2020-01-28 15:05:44 +05301166 // - For NAVIC: 401 to 414
Wei Chen394d3012019-12-10 16:07:23 -08001167 uint16_t svId;
Nilesh Ghardee368c9a2020-03-05 08:18:52 +05301168 GnssSvType type; // type of SV (GPS, SBAS, GLONASS, QZSS, BEIDOU, GALILEO, NAVIC)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001169 float cN0Dbhz; // signal strength
1170 float elevation; // elevation of SV (in degrees)
1171 float azimuth; // azimuth of SV (in degrees)
1172 GnssSvOptionsMask gnssSvOptionsMask; // Bitwise OR of GnssSvOptionsBits
Mike Cailean7dfa87b2018-02-06 16:36:27 -08001173 float carrierFrequencyHz; // carrier frequency of the signal tracked
Bhavna Sharma21249412018-07-17 14:48:32 -07001174 GnssSignalTypeMask gnssSignalTypeMask; // Specifies GNSS signal type
Mike Caileanb1cb9072020-03-16 11:45:01 -07001175 double basebandCarrierToNoiseDbHz; // baseband signal strength
Katz Yamada0fc49e82018-02-28 11:22:58 -08001176} GnssSv;
1177
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301178struct GnssConfigSetAssistanceServer {
Wei Chen1d823b02018-12-14 16:22:17 -08001179 uint32_t size; // set to sizeof(GnssConfigSetAssistanceServer)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001180 GnssAssistanceType type; // SUPL or C2K
1181 const char* hostName; // null terminated string
1182 uint32_t port; // port of server
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301183
1184 inline bool equals(const GnssConfigSetAssistanceServer& config) {
1185 if (config.type == type && config.port == port &&
1186 ((NULL == config.hostName && NULL == hostName) ||
1187 (NULL != config.hostName && NULL != hostName &&
1188 0 == strcmp(config.hostName, hostName)))) {
1189 return true;
1190 }
1191 return false;
1192 }
1193};
Katz Yamada0fc49e82018-02-28 11:22:58 -08001194
1195typedef struct {
Wei Chen394d3012019-12-10 16:07:23 -08001196 // set to sizeof(GnssMeasurementsData)
1197 uint32_t size;
1198 // bitwise OR of GnssMeasurementsDataFlagsBits
1199 GnssMeasurementsDataFlagsMask flags;
1200 // Unique SV Identifier
1201 // For SV Range of supported constellation,
1202 // please refer to the comment section of svId in GnssSv.
Katz Yamada0fc49e82018-02-28 11:22:58 -08001203 int16_t svId;
1204 GnssSvType svType;
1205 double timeOffsetNs;
1206 GnssMeasurementsStateMask stateMask; // bitwise OR of GnssMeasurementsStateBits
1207 int64_t receivedSvTimeNs;
1208 int64_t receivedSvTimeUncertaintyNs;
1209 double carrierToNoiseDbHz;
1210 double pseudorangeRateMps;
1211 double pseudorangeRateUncertaintyMps;
1212 GnssMeasurementsAdrStateMask adrStateMask; // bitwise OR of GnssMeasurementsAdrStateBits
1213 double adrMeters;
1214 double adrUncertaintyMeters;
1215 float carrierFrequencyHz;
1216 int64_t carrierCycles;
1217 double carrierPhase;
1218 double carrierPhaseUncertainty;
1219 GnssMeasurementsMultipathIndicator multipathIndicator;
1220 double signalToNoiseRatioDb;
1221 double agcLevelDb;
Mike Cailean4149abc2019-02-04 16:28:51 -08001222 GnssMeasurementsCodeType codeType;
1223 char otherCodeTypeName[GNSS_MAX_NAME_LENGTH];
Mike Caileanb1cb9072020-03-16 11:45:01 -07001224 double basebandCarrierToNoiseDbHz;
1225 GnssSignalTypeMask gnssSignalType;
Mike Cailean39fe80d2020-04-09 09:26:08 -07001226 double fullInterSignalBiasNs;
1227 double fullInterSignalBiasUncertaintyNs;
Mike Caileanb1cb9072020-03-16 11:45:01 -07001228 double satelliteInterSignalBiasNs;
1229 double satelliteInterSignalBiasUncertaintyNs;
Hoss Zhou81b7f102020-03-19 16:53:04 +08001230 int16_t gloFrequency;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001231} GnssMeasurementsData;
1232
1233typedef struct {
Mike Caileanb1cb9072020-03-16 11:45:01 -07001234 GnssSvType svType;
1235 float carrierFrequencyHz;
1236 GnssMeasurementsCodeType codeType;
1237 char otherCodeTypeName[GNSS_MAX_NAME_LENGTH];
1238} GnssMeasurementsSignalType;
1239
1240typedef struct {
1241 uint32_t size; // set to sizeof(GnssReflectingPlane)
1242 double latitudeDegrees;
1243 double longitudeDegrees;
1244 double altitudeMeters;
1245 double azimuthDegrees;
1246} GnssReflectingPlane;
1247
1248typedef struct {
1249 uint32_t size; // set to sizeof(GnssSingleSatCorrection)
1250 GnssSingleSatCorrectionMask flags;
1251 GnssSvType svType;
1252 uint16_t svId;
1253 float carrierFrequencyHz;
1254 float probSatIsLos;
1255 float excessPathLengthMeters;
1256 float excessPathLengthUncertaintyMeters;
1257 GnssReflectingPlane reflectingPlane;
1258} GnssSingleSatCorrection;
1259
1260typedef struct {
1261 uint32_t size; // set to sizeof(GnssMeasurementCorrections)
1262 double latitudeDegrees;
1263 double longitudeDegrees;
1264 double altitudeMeters;
1265 double horizontalPositionUncertaintyMeters;
1266 double verticalPositionUncertaintyMeters;
1267 uint64_t toaGpsNanosecondsOfWeek;
1268 std::vector<GnssSingleSatCorrection> satCorrections;
1269 bool hasEnvironmentBearing;
1270 float environmentBearingDegrees;
1271 float environmentBearingUncertaintyDegrees;
1272} GnssMeasurementCorrections;
1273
1274typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001275 uint32_t size; // set to sizeof(GnssMeasurementsClock)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001276 GnssMeasurementsClockFlagsMask flags; // bitwise OR of GnssMeasurementsClockFlagsBits
1277 int16_t leapSecond;
1278 int64_t timeNs;
1279 double timeUncertaintyNs;
1280 int64_t fullBiasNs;
1281 double biasNs;
1282 double biasUncertaintyNs;
1283 double driftNsps;
1284 double driftUncertaintyNsps;
1285 uint32_t hwClockDiscontinuityCount;
Mike Caileanb1cb9072020-03-16 11:45:01 -07001286 GnssMeasurementsSignalType referenceSignalTypeForIsb;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001287} GnssMeasurementsClock;
1288
1289typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001290 uint32_t size; // set to sizeof(GnssSvNotification)
1291 uint32_t count; // number of SVs in the GnssSv array
Bhavna Sharma21249412018-07-17 14:48:32 -07001292 bool gnssSignalTypeMaskValid;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001293 GnssSv gnssSvs[GNSS_SV_MAX]; // information on a number of SVs
1294} GnssSvNotification;
1295
1296typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001297 uint32_t size; // set to sizeof(GnssNmeaNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001298 uint64_t timestamp; // timestamp
1299 const char* nmea; // nmea text
Wei Chen1d823b02018-12-14 16:22:17 -08001300 uint32_t length; // length of the nmea text
Katz Yamada0fc49e82018-02-28 11:22:58 -08001301} GnssNmeaNotification;
1302
1303typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001304 uint32_t size; // set to sizeof(GnssDataNotification)
Mike Cailean75cfd432018-06-07 16:54:35 -07001305 GnssDataMask gnssDataMask[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // bitwise OR of GnssDataBits
1306 double jammerInd[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // Jammer Indication
1307 double agc[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // Automatic gain control
1308} GnssDataNotification;
1309
1310typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001311 uint32_t size; // set to sizeof(GnssMeasurementsNotification)
1312 uint32_t count; // number of items in GnssMeasurements array
Katz Yamada0fc49e82018-02-28 11:22:58 -08001313 GnssMeasurementsData measurements[GNSS_MEASUREMENTS_MAX];
1314 GnssMeasurementsClock clock; // clock
1315} GnssMeasurementsNotification;
1316
Wei Chen28776872019-12-19 09:58:09 -08001317#define GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE 12
1318#define GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE 3
1319#define GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE 9
1320#define GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE 4
1321
1322typedef uint16_t GnssSvPolyStatusMask;
1323#define GNSS_SV_POLY_SRC_ALM_CORR_V02 ((GnssSvPolyStatusMask)0x01)
1324#define GNSS_SV_POLY_GLO_STR4_V02 ((GnssSvPolyStatusMask)0x02)
1325#define GNSS_SV_POLY_DELETE_V02 ((GnssSvPolyStatusMask)0x04)
1326#define GNSS_SV_POLY_SRC_GAL_FNAV_OR_INAV_V02 ((GnssSvPolyStatusMask)0x08)
1327typedef uint16_t GnssSvPolyStatusMaskValidity;
1328#define GNSS_SV_POLY_SRC_ALM_CORR_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x01)
1329#define GNSS_SV_POLY_GLO_STR4_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x02)
1330#define GNSS_SV_POLY_DELETE_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x04)
1331#define GNSS_SV_POLY_SRC_GAL_FNAV_OR_INAV_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x08)
1332
1333typedef struct {
Mike Caileana581e542020-04-01 09:40:13 -07001334 uint32_t size;
1335 uint16_t gnssSvId;
Srivastava, Saurabhaa949382020-04-16 15:25:00 +05301336 /** Unique SV Identifier.
1337 * For SV Range of supported constellation, please refer to the
Mike Caileana581e542020-04-01 09:40:13 -07001338 * comment section of svId in GnssSv.
Wei Chen28776872019-12-19 09:58:09 -08001339 */
1340 int8_t freqNum;
Srivastava, Saurabhaa949382020-04-16 15:25:00 +05301341 /** Freq index, only valid if u_SysInd is GLO */
Wei Chen28776872019-12-19 09:58:09 -08001342
1343 GnssSvPolyStatusMaskValidity svPolyStatusMaskValidity;
1344 GnssSvPolyStatusMask svPolyStatusMask;
1345
1346 uint32_t is_valid;
1347
1348 uint16_t iode;
1349 /* Ephemeris reference time
1350 GPS:Issue of Data Ephemeris used [unitless].
1351 GLO: Tb 7-bit, refer to ICD02
1352 */
1353 double T0;
1354 /* Reference time for polynominal calculations
1355 GPS: Secs in week.
1356 GLO: Full secs since Jan/01/96
1357 */
1358 double polyCoeffXYZ0[GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE];
1359 /* C0X, C0Y, C0Z */
1360 double polyCoefXYZN[GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE];
1361 /* C1X, C2X ... C2Z, C3Z */
1362 float polyCoefOther[GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE];
1363 /* C0T, C1T, C2T, C3T */
1364 float svPosUnc; /* SV position uncertainty [m]. */
1365 float ionoDelay; /* Ionospheric delay at d_T0 [m]. */
1366 float ionoDot; /* Iono delay rate [m/s]. */
1367 float sbasIonoDelay;/* SBAS Ionospheric delay at d_T0 [m]. */
1368 float sbasIonoDot; /* SBAS Iono delay rate [m/s]. */
1369 float tropoDelay; /* Tropospheric delay [m]. */
1370 float elevation; /* Elevation [rad] at d_T0 */
1371 float elevationDot; /* Elevation rate [rad/s] */
1372 float elevationUnc; /* SV elevation [rad] uncertainty */
1373 double velCoef[GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE];
1374 /* Coefficients of velocity poly */
1375 uint32_t enhancedIOD; /* Enhanced Reference Time */
1376 float gpsIscL1ca;
1377 float gpsIscL2c;
1378 float gpsIscL5I5;
1379 float gpsIscL5Q5;
1380 float gpsTgd;
1381 float gloTgdG1G2;
1382 float bdsTgdB1;
1383 float bdsTgdB2;
1384 float bdsTgdB2a;
1385 float bdsIscB2a;
1386 float galBgdE1E5a;
1387 float galBgdE1E5b;
1388 float navicTgdL5;
1389} GnssSvPolynomial;
1390
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301391typedef uint32_t GnssSvId;
1392
1393struct GnssSvIdSource{
Wei Chen1d823b02018-12-14 16:22:17 -08001394 uint32_t size; // set to sizeof(GnssSvIdSource)
1395 GnssSvType constellation; // constellation for the sv to blacklist
Wei Chen394d3012019-12-10 16:07:23 -08001396 GnssSvId svId; // Unique SV Identifier,
1397 // For SV Range of supported constellation,
1398 // please refer to the comment section of svId in GnssSv.
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301399};
1400inline bool operator ==(GnssSvIdSource const& left, GnssSvIdSource const& right) {
1401 return left.size == right.size &&
1402 left.constellation == right.constellation && left.svId == right.svId;
1403}
1404
1405#define GNSS_SV_CONFIG_ALL_BITS_ENABLED_MASK ((uint64_t)0xFFFFFFFFFFFFFFFF)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001406typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001407 uint32_t size; // set to sizeof(GnssSvIdConfig)
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301408
1409 // GLONASS - SV 65 maps to bit 0
1410#define GNSS_SV_CONFIG_GLO_INITIAL_SV_ID 65
1411 uint64_t gloBlacklistSvMask;
1412
1413 // BEIDOU - SV 201 maps to bit 0
1414#define GNSS_SV_CONFIG_BDS_INITIAL_SV_ID 201
1415 uint64_t bdsBlacklistSvMask;
1416
1417 // QZSS - SV 193 maps to bit 0
1418#define GNSS_SV_CONFIG_QZSS_INITIAL_SV_ID 193
1419 uint64_t qzssBlacklistSvMask;
1420
1421 // GAL - SV 301 maps to bit 0
1422#define GNSS_SV_CONFIG_GAL_INITIAL_SV_ID 301
1423 uint64_t galBlacklistSvMask;
Wei Chen6c354392019-08-16 14:59:23 -07001424
1425 // SBAS - SV 120 to 158, maps to 0 to 38
1426 // SV 183 to 191, maps to 39 to 47
1427#define GNSS_SV_CONFIG_SBAS_INITIAL_SV_ID 120
1428#define GNSS_SV_CONFIG_SBAS_INITIAL_SV_LENGTH 39
1429#define GNSS_SV_CONFIG_SBAS_INITIAL2_SV_ID 183
1430 uint64_t sbasBlacklistSvMask;
Nilesh Ghardee368c9a2020-03-05 08:18:52 +05301431
1432 //Navic - SV 401 maps to bit 0
1433#define GNSS_SV_CONFIG_NAVIC_INITIAL_SV_ID 401
1434 uint64_t navicBlacklistSvMask;
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301435} GnssSvIdConfig;
1436
Wei Chen45c8da02020-03-18 12:06:01 -07001437// Specify the valid mask for robust location configure
1438// defined in GnssConfigRobustLocation.
Wei Chena57d05b2020-02-26 14:08:37 -08001439enum GnssConfigRobustLocationValidMask {
1440 // GnssConfigRobustLocation has valid enabled field.
1441 GNSS_CONFIG_ROBUST_LOCATION_ENABLED_VALID_BIT = (1<<0),
1442 // GnssConfigRobustLocation has valid enabledForE911 field.
1443 GNSS_CONFIG_ROBUST_LOCATION_ENABLED_FOR_E911_VALID_BIT = (1<<1),
Wei Chen45c8da02020-03-18 12:06:01 -07001444 // GnssConfigRobustLocation has valid version field.
1445 GNSS_CONFIG_ROBUST_LOCATION_VERSION_VALID_BIT = (1<<2),
1446};
1447
1448struct GnssConfigRobustLocationVersion {
1449 // Major version number
1450 uint8_t major;
1451 // Minor version number
1452 uint16_t minor;
1453 inline bool equals(const GnssConfigRobustLocationVersion& version) const {
1454 return (version.major == major && version.minor == minor);
1455 }
Wei Chena57d05b2020-02-26 14:08:37 -08001456};
1457
1458// specify the robust location configuration used by modem GNSS engine
1459struct GnssConfigRobustLocation {
1460 GnssConfigRobustLocationValidMask validMask;
1461 bool enabled;
1462 bool enabledForE911;
Wei Chen45c8da02020-03-18 12:06:01 -07001463 GnssConfigRobustLocationVersion version;
Wei Chena57d05b2020-02-26 14:08:37 -08001464
1465 inline bool equals(const GnssConfigRobustLocation& config) const {
1466 if (config.validMask == validMask &&
1467 config.enabled == enabled &&
Wei Chen45c8da02020-03-18 12:06:01 -07001468 config.enabledForE911 == enabledForE911 &&
1469 config.version.equals(version)) {
Wei Chena57d05b2020-02-26 14:08:37 -08001470 return true;
1471 }
1472 return false;
1473 }
1474};
1475
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301476struct GnssConfig{
Wei Chen1d823b02018-12-14 16:22:17 -08001477 uint32_t size; // set to sizeof(GnssConfig)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001478 GnssConfigFlagsMask flags; // bitwise OR of GnssConfigFlagsBits to mark which params are valid
1479 GnssConfigGpsLock gpsLock;
1480 GnssConfigSuplVersion suplVersion;
1481 GnssConfigSetAssistanceServer assistanceServer;
1482 GnssConfigLppProfile lppProfile;
1483 GnssConfigLppeControlPlaneMask lppeControlPlaneMask;
1484 GnssConfigLppeUserPlaneMask lppeUserPlaneMask;
1485 GnssConfigAGlonassPositionProtocolMask aGlonassPositionProtocolMask;
1486 GnssConfigEmergencyPdnForEmergencySupl emergencyPdnForEmergencySupl;
1487 GnssConfigSuplEmergencyServices suplEmergencyServices;
1488 GnssConfigSuplModeMask suplModeMask; //bitwise OR of GnssConfigSuplModeBits
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301489 std::vector<GnssSvIdSource> blacklistedSvIds;
Mike Caileanb0462412019-02-11 09:11:09 -08001490 uint32_t emergencyExtensionSeconds;
Wei Chena57d05b2020-02-26 14:08:37 -08001491 GnssConfigRobustLocation robustLocationConfig;
Wei Chenac1ad0e2020-03-05 11:56:25 -08001492 uint16_t minGpsWeek;
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301493
1494 inline bool equals(const GnssConfig& config) {
1495 if (flags == config.flags &&
1496 gpsLock == config.gpsLock &&
1497 suplVersion == config.suplVersion &&
1498 assistanceServer.equals(config.assistanceServer) &&
1499 lppProfile == config.lppProfile &&
1500 lppeControlPlaneMask == config.lppeControlPlaneMask &&
1501 lppeUserPlaneMask == config.lppeUserPlaneMask &&
1502 aGlonassPositionProtocolMask == config.aGlonassPositionProtocolMask &&
1503 emergencyPdnForEmergencySupl == config.emergencyPdnForEmergencySupl &&
1504 suplEmergencyServices == config.suplEmergencyServices &&
1505 suplModeMask == config.suplModeMask &&
Mike Caileanb0462412019-02-11 09:11:09 -08001506 blacklistedSvIds == config.blacklistedSvIds &&
Srivastava, Saurabhaa949382020-04-16 15:25:00 +05301507 emergencyExtensionSeconds == config.emergencyExtensionSeconds &&
Wei Chenac1ad0e2020-03-05 11:56:25 -08001508 robustLocationConfig.equals(config.robustLocationConfig) &&
1509 minGpsWeek == config.minGpsWeek) {
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301510 return true;
1511 }
1512 return false;
1513 }
1514};
Katz Yamada0fc49e82018-02-28 11:22:58 -08001515
1516typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001517 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001518 bool mValid;
1519 Location mLocation;
1520 double verticalAccuracyMeters;
1521 double speedAccuracyMetersPerSecond;
1522 double bearingAccuracyDegrees;
1523 timespec mUtcReported;
1524} GnssDebugLocation;
1525
1526typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001527 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001528 bool mValid;
1529 int64_t timeEstimate;
1530 float timeUncertaintyNs;
1531 float frequencyUncertaintyNsPerSec;
1532} GnssDebugTime;
1533
1534typedef struct {
Wei Chen394d3012019-12-10 16:07:23 -08001535 // set to sizeof
1536 uint32_t size;
1537 // Unique SV Identifier
1538 // For SV Range of supported constellation,
1539 // please refer to the comment section of svId in GnssSv.
Katz Yamada0fc49e82018-02-28 11:22:58 -08001540 uint32_t svid;
1541 GnssSvType constellation;
1542 GnssEphemerisType mEphemerisType;
1543 GnssEphemerisSource mEphemerisSource;
1544 GnssEphemerisHealth mEphemerisHealth;
1545 float ephemerisAgeSeconds;
1546 bool serverPredictionIsAvailable;
1547 float serverPredictionAgeSeconds;
1548} GnssDebugSatelliteInfo;
1549
1550typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001551 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001552 GnssDebugLocation mLocation;
1553 GnssDebugTime mTime;
1554 std::vector<GnssDebugSatelliteInfo> mSatelliteInfo;
1555} GnssDebugReport;
1556
Wei Chen21b9c4e2018-09-19 10:59:28 -07001557typedef uint32_t LeapSecondSysInfoMask;
1558typedef enum {
1559 // current leap second info is available. This info will only
1560 // be available if the leap second change info is not available.
1561 //
1562 // If leap second change info is avaiable, to figure out
1563 // the current leap second info, compare current gps time with
1564 // the gps timestamp of leap second change to know whether to choose
1565 // leapSecondBefore or leapSecondAfter as current leap second.
1566 LEAP_SECOND_SYS_INFO_CURRENT_LEAP_SECONDS_BIT = (1ULL << 0),
1567 // the last known leap change event is available.
1568 // The info can be available on two scenario:
1569 // 1: this leap second change event has been scheduled and yet to happen
1570 // 2: this leap second change event has already happened and next
1571 // leap second change event has not yet been scheduled.
1572 LEAP_SECOND_SYS_INFO_LEAP_SECOND_CHANGE_BIT = (1ULL << 1),
1573} LeapSecondSysInfoDataBits;
1574
1575struct LeapSecondChangeInfo {
1576 // GPS timestamp that corrresponds to the last known
1577 // leap second change event.
1578 //
1579 // The info can be available on two scenario:
1580 // 1: this leap second change event has been scheduled and yet to happen
1581 // 2: this leap second change event has already happened and next
1582 // leap second change event has not yet been scheduled.
1583 GnssSystemTimeStructType gpsTimestampLsChange;
1584 // Number of leap seconds prior to the leap second change event
1585 // that corresponds to the timestamp at gpsTimestampLsChange.
1586 uint8_t leapSecondsBeforeChange;
1587 // Number of leap seconds after the leap second change event
1588 // that corresponds to the timestamp at gpsTimestampLsChange.
1589 uint8_t leapSecondsAfterChange;
1590};
1591
1592struct LeapSecondSystemInfo {
1593 LeapSecondSysInfoMask leapSecondInfoMask;
1594 uint8_t leapSecondCurrent;
1595 LeapSecondChangeInfo leapSecondChangeInfo;
1596};
1597
1598typedef uint32_t LocationSystemInfoMask;
1599typedef enum {
1600 // contains current leap second or leap second change info
1601 LOCATION_SYS_INFO_LEAP_SECOND = (1ULL << 0),
1602} LocationSystemInfoDataBits;
1603
1604struct LocationSystemInfo {
1605 LocationSystemInfoMask systemInfoMask;
1606 LeapSecondSystemInfo leapSecondSysInfo;
1607};
1608
Wei Chen6c354392019-08-16 14:59:23 -07001609/* Mask indicating enabled or disabled constellations */
1610typedef uint64_t GnssSvTypesMask;
1611typedef enum {
1612 GNSS_SV_TYPES_MASK_GLO_BIT = (1<<0),
1613 GNSS_SV_TYPES_MASK_BDS_BIT = (1<<1),
1614 GNSS_SV_TYPES_MASK_QZSS_BIT = (1<<2),
1615 GNSS_SV_TYPES_MASK_GAL_BIT = (1<<3),
Nilesh Gharde554985a2020-01-28 15:05:44 +05301616 GNSS_SV_TYPES_MASK_NAVIC_BIT = (1<<4),
Wei Chen6c354392019-08-16 14:59:23 -07001617} GnssSvTypesMaskBits;
1618
1619/* This SV Type config is injected directly to GNSS Adapter
1620 * bypassing Location API */
1621typedef struct {
1622 uint32_t size; // set to sizeof(GnssSvTypeConfig)
1623 // Enabled Constellations
1624 GnssSvTypesMask enabledSvTypesMask;
1625 // Disabled Constellations
1626 GnssSvTypesMask blacklistedSvTypesMask;
1627} GnssSvTypeConfig;
1628
1629// Specify parameters related to lever arm
1630struct LeverArmParams {
1631 // Offset along the vehicle forward axis
1632 float forwardOffsetMeters;
1633 // Offset along the vehicle starboard axis
1634 float sidewaysOffsetMeters;
1635 // Offset along the vehicle up axis
1636 float upOffsetMeters;
1637};
1638
1639typedef uint32_t LeverArmTypeMask;
1640
1641enum LeverArmTypeBits {
1642 // Lever arm regarding the VRP (Vehicle Reference Point) w.r.t
1643 // the origin (at the GPS Antenna)
1644 LEVER_ARM_TYPE_GNSS_TO_VRP_BIT = (1<<0),
1645 // Lever arm regarding GNSS Antenna w.r.t the origin at the IMU
1646 // e.g.: inertial measurement unit for DR (dead reckoning
1647 // engine)
1648 LEVER_ARM_TYPE_DR_IMU_TO_GNSS_BIT = (1<<1),
1649 // Lever arm regarding GNSS Antenna w.r.t the origin at the
1650 // IMU (inertial measurement unit) for VEPP (vision enhanced
1651 // precise positioning engine)
1652 LEVER_ARM_TYPE_VEPP_IMU_TO_GNSS_BIT = (1<<2)
1653};
1654
1655struct LeverArmConfigInfo {
1656 // Valid mask for the types of lever arm parameters provided
1657 LeverArmTypeMask leverArmValidMask;
1658 // Lever arm regarding the VRP (Vehicle Reference Point) w.r.t the origin
1659 // (at the GPS Antenna)
1660 LeverArmParams gnssToVRP;
1661 // Lever arm parameters regarding GNSS Antenna w.r.t the origin at the IMU
1662 // (inertial measurement unit) for DR (dead reckoning engine)
1663 LeverArmParams drImuToGnss;
1664 // Lever arm regarding GNSS Antenna w.r.t the origin at the IMU
1665 // (inertial measurement unit) for VEPP (vision enhanced precise position engine)
1666 LeverArmParams veppImuToGnss;
1667};
1668
Wei Chen0907ae12020-03-16 16:28:24 -07001669// Specify vehicle body-to-Sensor mount parameters to be used
1670// by dead reckoning positioning engine.
1671struct BodyToSensorMountParams {
1672 // The misalignment of the sensor board along the
1673 // horizontal plane of the vehicle chassis measured looking
1674 // from the vehicle to forward direction. In unit of degree.
1675 float rollOffset;
1676 // The misalignment along the horizontal plane of the vehicle
1677 // chassis measured looking from the vehicle to the right
1678 // side. Positive pitch indicates vehicle is inclined such
1679 // that forward wheels are at higher elevation than rear
1680 // wheels. In unit of degree.
1681 float yawOffset;
1682 // The angle between the vehicle forward direction and the
1683 // sensor axis as seen from the top of the vehicle, and
1684 // measured in counterclockwise direction. In unit of degree.
1685 float pitchOffset;
1686 // Single uncertainty number that may be the largest of the
1687 // roll, pitch and yaw offset uncertainties.
1688 float offsetUnc;
1689};
1690
Katz Yamada0fc49e82018-02-28 11:22:58 -08001691/* Provides the capabilities of the system
1692 capabilities callback is called once soon after createInstance is called */
1693typedef std::function<void(
1694 LocationCapabilitiesMask capabilitiesMask // bitwise OR of LocationCapabilitiesBits
1695)> capabilitiesCallback;
1696
1697/* Used by tracking, batching, and miscellanous APIs
1698 responseCallback is called for every Tracking, Batching API, and Miscellanous API */
1699typedef std::function<void(
1700 LocationError err, // if not SUCCESS, then id is not valid
1701 uint32_t id // id to be associated to the request
1702)> responseCallback;
1703
1704/* Used by APIs that gets more than one LocationError in it's response
1705 collectiveResponseCallback is called for every geofence API call.
1706 ids array and LocationError array are only valid until collectiveResponseCallback returns. */
1707typedef std::function<void(
Wei Chen1d823b02018-12-14 16:22:17 -08001708 uint32_t count, // number of locations in arrays
Katz Yamada0fc49e82018-02-28 11:22:58 -08001709 LocationError* errs, // array of LocationError associated to the request
1710 uint32_t* ids // array of ids to be associated to the request
1711)> collectiveResponseCallback;
1712
1713/* Used for startTracking API, optional can be NULL
1714 trackingCallback is called when delivering a location in a tracking session
1715 broadcasted to all clients, no matter if a session has started by client */
1716typedef std::function<void(
1717 Location location
1718)> trackingCallback;
1719
1720/* Used for startBatching API, optional can be NULL
1721 batchingCallback is called when delivering locations in a batching session.
1722 broadcasted to all clients, no matter if a session has started by client */
1723typedef std::function<void(
Wei Chen1d823b02018-12-14 16:22:17 -08001724 uint32_t count, // number of locations in array
Katz Yamada0fc49e82018-02-28 11:22:58 -08001725 Location* location, // array of locations
1726 BatchingOptions batchingOptions // Batching options
1727)> batchingCallback;
1728
1729typedef std::function<void(
1730 BatchingStatusInfo batchingStatus, // batch status
1731 std::list<uint32_t> & listOfCompletedTrips
1732)> batchingStatusCallback;
1733
1734/* Gives GNSS Location information, optional can be NULL
1735 gnssLocationInfoCallback is called only during a tracking session
1736 broadcasted to all clients, no matter if a session has started by client */
1737typedef std::function<void(
1738 GnssLocationInfoNotification gnssLocationInfoNotification
1739)> gnssLocationInfoCallback;
1740
Wei Chen1a1232c2019-07-18 15:50:55 -07001741/* Gives default combined location information from all engines and
1742 location information individually from selected engines.
1743 This callback is only used when there are multiple engines
1744 running in the system.
1745
1746 optional can be NULL
1747
1748 engineLocationsInfoCallback is called only during a tracking session
1749 broadcasted to all clients, no matter if a session has started by client */
1750typedef std::function<void(
1751 uint32_t count,
1752 GnssLocationInfoNotification* engineLocationInfoNotification
1753)> engineLocationsInfoCallback;
1754
Katz Yamada0fc49e82018-02-28 11:22:58 -08001755/* Used for addGeofences API, optional can be NULL
1756 geofenceBreachCallback is called when any number of geofences have a state change */
1757typedef std::function<void(
1758 GeofenceBreachNotification geofenceBreachNotification
1759)> geofenceBreachCallback;
1760
1761/* Used for addGeofences API, optional can be NULL
1762 geofenceStatusCallback is called when any number of geofences have a status change */
1763typedef std::function<void(
1764 GeofenceStatusNotification geofenceStatusNotification
1765)> geofenceStatusCallback;
1766
1767/* Network Initiated request, optional can be NULL
1768 This callback should be responded to by calling gnssNiResponse */
1769typedef std::function<void(
1770 uint32_t id, // id that should be used to respond by calling gnssNiResponse
1771 GnssNiNotification gnssNiNotification
1772)> gnssNiCallback;
1773
1774/* Gives GNSS SV information, optional can be NULL
1775 gnssSvCallback is called only during a tracking session
1776 broadcasted to all clients, no matter if a session has started by client */
1777typedef std::function<void(
1778 GnssSvNotification gnssSvNotification
1779)> gnssSvCallback;
1780
1781/* Gives GNSS NMEA data, optional can be NULL
1782 gnssNmeaCallback is called only during a tracking session
1783 broadcasted to all clients, no matter if a session has started by client */
1784typedef std::function<void(
1785 GnssNmeaNotification gnssNmeaNotification
1786)> gnssNmeaCallback;
1787
Mike Cailean75cfd432018-06-07 16:54:35 -07001788/* Gives GNSS data, optional can be NULL
1789 gnssDataCallback is called only during a tracking session
1790 broadcasted to all clients, no matter if a session has started by client */
1791typedef std::function<void(
1792 GnssDataNotification gnssDataNotification
1793)> gnssDataCallback;
1794
Katz Yamada0fc49e82018-02-28 11:22:58 -08001795/* Gives GNSS Measurements information, optional can be NULL
1796 gnssMeasurementsCallback is called only during a tracking session
1797 broadcasted to all clients, no matter if a session has started by client */
1798typedef std::function<void(
1799 GnssMeasurementsNotification gnssMeasurementsNotification
1800)> gnssMeasurementsCallback;
1801
Wei Chen28776872019-12-19 09:58:09 -08001802/* Gives GNSS SV poly information, optional can be NULL
1803 gnssSvPolyCallback is called only during a tracking session
1804 broadcasted to all clients that registers for the poly */
1805typedef std::function<void(
1806 GnssSvPolynomial gnssSvPolynomialNotification
1807)> gnssSvPolynomialCallback;
1808
1809
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301810/* Provides the current GNSS configuration to the client */
1811typedef std::function<void(
Wei Chena57d05b2020-02-26 14:08:37 -08001812 uint32_t session_id,
1813 const GnssConfig& config
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301814)> gnssConfigCallback;
1815
Wei Chen21b9c4e2018-09-19 10:59:28 -07001816/* LocationSystemInfoCb is for receiving rare occuring location
1817 system information update. optional, can be NULL.
1818*/
1819typedef std::function<void(
1820 LocationSystemInfo locationSystemInfo
1821)> locationSystemInfoCallback;
1822
Wei Chene2329862018-11-15 09:41:26 -08001823typedef std::function<void(
1824)> locationApiDestroyCompleteCallback;
1825
Bhavna Sharma49c60ab2019-01-24 16:18:38 -08001826typedef uint16_t LocationAdapterTypeMask;
1827typedef enum {
1828 LOCATION_ADAPTER_GNSS_TYPE_BIT = (1<<0), // adapter type is GNSS
Dante Russo5c1e23c2019-03-06 09:36:20 -08001829 LOCATION_ADAPTER_BATCHING_TYPE_BIT = (1<<1), // adapter type is BATCHING
Bhavna Sharma49c60ab2019-01-24 16:18:38 -08001830 LOCATION_ADAPTER_GEOFENCE_TYPE_BIT = (1<<2) // adapter type is geo fence
1831} LocationAdapterTypeBits;
1832
Katz Yamada0fc49e82018-02-28 11:22:58 -08001833typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001834 uint32_t size; // set to sizeof(LocationCallbacks)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001835 capabilitiesCallback capabilitiesCb; // mandatory
1836 responseCallback responseCb; // mandatory
1837 collectiveResponseCallback collectiveResponseCb; // mandatory
1838 trackingCallback trackingCb; // optional
1839 batchingCallback batchingCb; // optional
1840 geofenceBreachCallback geofenceBreachCb; // optional
1841 geofenceStatusCallback geofenceStatusCb; // optional
1842 gnssLocationInfoCallback gnssLocationInfoCb; // optional
1843 gnssNiCallback gnssNiCb; // optional
1844 gnssSvCallback gnssSvCb; // optional
1845 gnssNmeaCallback gnssNmeaCb; // optional
Mike Cailean75cfd432018-06-07 16:54:35 -07001846 gnssDataCallback gnssDataCb; // optional
Katz Yamada0fc49e82018-02-28 11:22:58 -08001847 gnssMeasurementsCallback gnssMeasurementsCb; // optional
1848 batchingStatusCallback batchingStatusCb; // optional
Wei Chen21b9c4e2018-09-19 10:59:28 -07001849 locationSystemInfoCallback locationSystemInfoCb; // optional
Wei Chen1a1232c2019-07-18 15:50:55 -07001850 engineLocationsInfoCallback engineLocationsInfoCb; // optional
Wei Chen28776872019-12-19 09:58:09 -08001851 gnssSvPolynomialCallback gnssSvPolynomialCb; // optional
Katz Yamada0fc49e82018-02-28 11:22:58 -08001852} LocationCallbacks;
1853
Mike Caileanb1cb9072020-03-16 11:45:01 -07001854typedef struct {
1855 uint32_t size; // set to sizeof
1856 double x;
1857 double xUncertainty;
1858 double y;
1859 double yUncertainty;
1860 double z;
1861 double zUncertainty;
1862} GnssCoordinate;
1863
1864typedef struct {
1865 uint32_t size; // set to sizeof
1866 double carrierFrequencyMHz;
1867 GnssCoordinate phaseCenterOffsetCoordinateMillimeters;
1868 std::vector<std::vector<double>> phaseCenterVariationCorrectionMillimeters;
1869 std::vector<std::vector<double>> phaseCenterVariationCorrectionUncertaintyMillimeters;
1870 std::vector<std::vector<double>> signalGainCorrectionDbi;
1871 std::vector<std::vector<double>> signalGainCorrectionUncertaintyDbi;
1872} GnssAntennaInformation;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001873#endif /* LOCATIONDATATYPES_H */