blob: 97b54e8f0a7aeadde007ccaefef4ef5259a7974a [file] [log] [blame]
Wei Chen87a7fc02019-12-19 09:58:09 -08001/* Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
Katz Yamada0fc49e82018-02-28 11:22:58 -08002 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
12 * * Neither the name of The Linux Foundation nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef LOCATIONDATATYPES_H
30#define LOCATIONDATATYPES_H
31
32#include <vector>
33#include <stdint.h>
34#include <functional>
35#include <list>
Harikrishnan Hariharan59269e12018-07-01 00:43:09 +053036#include <string.h>
Katz Yamada0fc49e82018-02-28 11:22:58 -080037
38#define GNSS_NI_REQUESTOR_MAX (256)
39#define GNSS_NI_MESSAGE_ID_MAX (2048)
Naresh Munagala8d22b602019-05-07 12:32:34 +053040#define GNSS_SV_MAX (128)
Katz Yamada0fc49e82018-02-28 11:22:58 -080041#define GNSS_MEASUREMENTS_MAX (64)
42#define GNSS_UTC_TIME_OFFSET (3657)
43
44#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
51typedef enum {
52 LOCATION_ERROR_SUCCESS = 0,
53 LOCATION_ERROR_GENERAL_FAILURE,
54 LOCATION_ERROR_CALLBACK_MISSING,
55 LOCATION_ERROR_INVALID_PARAMETER,
56 LOCATION_ERROR_ID_EXISTS,
57 LOCATION_ERROR_ID_UNKNOWN,
58 LOCATION_ERROR_ALREADY_STARTED,
59 LOCATION_ERROR_GEOFENCES_AT_MAX,
60 LOCATION_ERROR_NOT_SUPPORTED
61} LocationError;
62
63// Flags to indicate which values are valid in a Location
64typedef uint16_t LocationFlagsMask;
65typedef enum {
66 LOCATION_HAS_LAT_LONG_BIT = (1<<0), // location has valid latitude and longitude
67 LOCATION_HAS_ALTITUDE_BIT = (1<<1), // location has valid altitude
68 LOCATION_HAS_SPEED_BIT = (1<<2), // location has valid speed
69 LOCATION_HAS_BEARING_BIT = (1<<3), // location has valid bearing
70 LOCATION_HAS_ACCURACY_BIT = (1<<4), // location has valid accuracy
71 LOCATION_HAS_VERTICAL_ACCURACY_BIT = (1<<5), // location has valid vertical accuracy
72 LOCATION_HAS_SPEED_ACCURACY_BIT = (1<<6), // location has valid speed accuracy
73 LOCATION_HAS_BEARING_ACCURACY_BIT = (1<<7), // location has valid bearing accuracy
haohuang17015dd2018-04-16 15:12:49 +080074 LOCATION_HAS_SPOOF_MASK = (1<<8), // location has valid spoof mask
Katz Yamada0fc49e82018-02-28 11:22:58 -080075} LocationFlagsBits;
76
77typedef uint16_t LocationTechnologyMask;
78typedef enum {
79 LOCATION_TECHNOLOGY_GNSS_BIT = (1<<0), // location was calculated using GNSS
80 LOCATION_TECHNOLOGY_CELL_BIT = (1<<1), // location was calculated using Cell
81 LOCATION_TECHNOLOGY_WIFI_BIT = (1<<2), // location was calculated using WiFi
82 LOCATION_TECHNOLOGY_SENSORS_BIT = (1<<3), // location was calculated using Sensors
83} LocationTechnologyBits;
84
haohuang17015dd2018-04-16 15:12:49 +080085typedef uint32_t LocationSpoofMask;
86typedef enum {
87 LOCATION_POSTION_SPOOFED = (1<<0), // location position spoofed
88 LOCATION_TIME_SPOOFED = (1<<1), // location time spoofed
89 LOCATION_NAVIGATION_DATA_SPOOFED = (1<<2), // location navigation data spoofed
90} LocationSpoofBits;
91
Katz Yamada0fc49e82018-02-28 11:22:58 -080092typedef enum {
93 LOCATION_RELIABILITY_NOT_SET = 0,
94 LOCATION_RELIABILITY_VERY_LOW,
95 LOCATION_RELIABILITY_LOW,
96 LOCATION_RELIABILITY_MEDIUM,
97 LOCATION_RELIABILITY_HIGH,
98} LocationReliability;
99
100typedef uint32_t GnssLocationNavSolutionMask;
101typedef enum {
102 LOCATION_SBAS_CORRECTION_IONO_BIT = (1<<0), // SBAS ionospheric correction is used
103 LOCATION_SBAS_CORRECTION_FAST_BIT = (1<<1), // SBAS fast correction is used
104 LOCATION_SBAS_CORRECTION_LONG_BIT = (1<<2), // SBAS long-tem correction is used
105 LOCATION_SBAS_INTEGRITY_BIT = (1<<3), // SBAS integrity information is used
106 LOCATION_NAV_CORRECTION_DGNSS_BIT = (1<<4), // Position Report is DGNSS corrected
107 LOCATION_NAV_CORRECTION_RTK_BIT = (1<<5), // Position Report is RTK corrected
108 LOCATION_NAV_CORRECTION_PPP_BIT = (1<<6) // Position Report is PPP corrected
109} GnssLocationNavSolutionBits;
110
111typedef uint32_t GnssLocationPosTechMask;
112typedef enum {
113 LOCATION_POS_TECH_DEFAULT_BIT = 0,
114 LOCATION_POS_TECH_SATELLITE_BIT = (1<<0),
115 LOCATION_POS_TECH_CELLID_BIT = (1<<1),
116 LOCATION_POS_TECH_WIFI_BIT = (1<<2),
117 LOCATION_POS_TECH_SENSORS_BIT = (1<<3),
118 LOCATION_POS_TECH_REFERENCE_LOCATION_BIT = (1<<4),
119 LOCATION_POS_TECH_INJECTED_COARSE_POSITION_BIT = (1<<5),
120 LOCATION_POS_TECH_AFLT_BIT = (1<<6),
121 LOCATION_POS_TECH_HYBRID_BIT = (1<<7),
122 LOCATION_POS_TECH_PPE_BIT = (1<<8)
123} GnssLocationPosTechBits;
124
125typedef uint32_t GnssLocationPosDataMask;
126typedef enum {
127 LOCATION_NAV_DATA_HAS_LONG_ACCEL_BIT = (1<<0), // Navigation data has Forward Acceleration
128 LOCATION_NAV_DATA_HAS_LAT_ACCEL_BIT = (1<<1), // Navigation data has Sideward Acceleration
129 LOCATION_NAV_DATA_HAS_VERT_ACCEL_BIT = (1<<2), // Navigation data has Vertical Acceleration
130 LOCATION_NAV_DATA_HAS_YAW_RATE_BIT = (1<<3), // Navigation data has Heading Rate
Naresh Munagala02cddf02018-06-21 10:44:51 +0530131 LOCATION_NAV_DATA_HAS_PITCH_BIT = (1<<4), // Navigation data has Body pitch
132 // Navigation data has Forward Acceleration uncertainty
133 LOCATION_NAV_DATA_HAS_LONG_ACCEL_UNC_BIT = (1<<5),
134 // Navigation data has Sideward Acceleration uncertainty
135 LOCATION_NAV_DATA_HAS_LAT_ACCEL_UNC_BIT = (1<<6),
136 // Navigation data has Vertical Acceleration uncertainty
137 LOCATION_NAV_DATA_HAS_VERT_ACCEL_UNC_BIT = (1<<7),
138 // Navigation data has Heading Rate uncertainty
139 LOCATION_NAV_DATA_HAS_YAW_RATE_UNC_BIT = (1<<8),
140 // Navigation data has Body pitch uncertainty
141 LOCATION_NAV_DATA_HAS_PITCH_UNC_BIT = (1<<9)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800142} GnssLocationPosDataBits;
143
144typedef uint32_t GnssLocationInfoFlagMask;
145typedef enum {
146 GNSS_LOCATION_INFO_ALTITUDE_MEAN_SEA_LEVEL_BIT = (1<<0), // valid altitude mean sea level
147 GNSS_LOCATION_INFO_DOP_BIT = (1<<1), // valid pdop, hdop, and vdop
148 GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT = (1<<2), // valid magnetic deviation
149 GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT = (1<<3), // valid horizontal reliability
150 GNSS_LOCATION_INFO_VER_RELIABILITY_BIT = (1<<4), // valid vertical reliability
151 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MAJOR_BIT = (1<<5), // valid elipsode semi major
152 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MINOR_BIT = (1<<6), // valid elipsode semi minor
153 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_AZIMUTH_BIT = (1<<7), // valid accuracy elipsode azimuth
Wei Chen7c797102019-04-30 15:02:43 -0700154 GNSS_LOCATION_INFO_GNSS_SV_USED_DATA_BIT = (1<<8), // valid svUsedInPosition,
155 // numOfMeasReceived
156 // and measUsageInfo
Katz Yamada0fc49e82018-02-28 11:22:58 -0800157 GNSS_LOCATION_INFO_NAV_SOLUTION_MASK_BIT = (1<<9), // valid navSolutionMask
158 GNSS_LOCATION_INFO_POS_TECH_MASK_BIT = (1<<10),// valid LocPosTechMask
159 GNSS_LOCATION_INFO_SV_SOURCE_INFO_BIT = (1<<11),// valid LocSvInfoSource
160 GNSS_LOCATION_INFO_POS_DYNAMICS_DATA_BIT = (1<<12),// valid position dynamics data
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700161 GNSS_LOCATION_INFO_EXT_DOP_BIT = (1<<13),// valid gdop, tdop
162 GNSS_LOCATION_INFO_NORTH_STD_DEV_BIT = (1<<14),// valid North standard deviation
163 GNSS_LOCATION_INFO_EAST_STD_DEV_BIT = (1<<15),// valid East standard deviation
164 GNSS_LOCATION_INFO_NORTH_VEL_BIT = (1<<16),// valid North Velocity
165 GNSS_LOCATION_INFO_EAST_VEL_BIT = (1<<17),// valid East Velocity
166 GNSS_LOCATION_INFO_UP_VEL_BIT = (1<<18),// valid Up Velocity
167 GNSS_LOCATION_INFO_NORTH_VEL_UNC_BIT = (1<<19),// valid North Velocity Uncertainty
168 GNSS_LOCATION_INFO_EAST_VEL_UNC_BIT = (1<<20),// valid East Velocity Uncertainty
169 GNSS_LOCATION_INFO_UP_VEL_UNC_BIT = (1<<21),// valid Up Velocity Uncertainty
170 GNSS_LOCATION_INFO_LEAP_SECONDS_BIT = (1<<22),// valid leap seconds
Wei Chen7c797102019-04-30 15:02:43 -0700171 GNSS_LOCATION_INFO_TIME_UNC_BIT = (1<<23),// valid time uncertainty
Wei Chena9b8abd2019-04-19 15:21:27 -0700172 GNSS_LOCATION_INFO_NUM_SV_USED_IN_POSITION_BIT = (1<<24), // number of SV used in position
173 GNSS_LOCATION_INFO_CALIBRATION_CONFIDENCE_BIT = (1<<25), // valid sensor cal confidence
174 GNSS_LOCATION_INFO_CALIBRATION_STATUS_BIT = (1<<26), // valid sensor cal status
Wei Chena28f8132019-07-18 15:50:55 -0700175 GNSS_LOCATION_INFO_OUTPUT_ENG_TYPE_BIT = (1<<27), // valid output engine type
176 GNSS_LOCATION_INFO_OUTPUT_ENG_MASK_BIT = (1<<28), // valid output engine mask
Katz Yamada0fc49e82018-02-28 11:22:58 -0800177} GnssLocationInfoFlagBits;
178
179typedef enum {
180 GEOFENCE_BREACH_ENTER = 0,
181 GEOFENCE_BREACH_EXIT,
182 GEOFENCE_BREACH_DWELL_IN,
183 GEOFENCE_BREACH_DWELL_OUT,
184 GEOFENCE_BREACH_UNKNOWN,
185} GeofenceBreachType;
186
187typedef uint16_t GeofenceBreachTypeMask;
188typedef enum {
189 GEOFENCE_BREACH_ENTER_BIT = (1<<0),
190 GEOFENCE_BREACH_EXIT_BIT = (1<<1),
191 GEOFENCE_BREACH_DWELL_IN_BIT = (1<<2),
192 GEOFENCE_BREACH_DWELL_OUT_BIT = (1<<3),
193} GeofenceBreachTypeBits;
194
195typedef enum {
196 GEOFENCE_STATUS_AVAILABILE_NO = 0,
197 GEOFENCE_STATUS_AVAILABILE_YES,
198} GeofenceStatusAvailable;
199
200typedef uint32_t LocationCapabilitiesMask;
201typedef enum {
202 // supports startTracking API with minInterval param
203 LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT = (1<<0),
204 // supports startBatching API with minInterval param
205 LOCATION_CAPABILITIES_TIME_BASED_BATCHING_BIT = (1<<1),
206 // supports startTracking API with minDistance param
207 LOCATION_CAPABILITIES_DISTANCE_BASED_TRACKING_BIT = (1<<2),
208 // supports startBatching API with minDistance param
209 LOCATION_CAPABILITIES_DISTANCE_BASED_BATCHING_BIT = (1<<3),
210 // supports addGeofences API
211 LOCATION_CAPABILITIES_GEOFENCE_BIT = (1<<4),
212 // supports GnssMeasurementsCallback
213 LOCATION_CAPABILITIES_GNSS_MEASUREMENTS_BIT = (1<<5),
214 // supports startTracking/startBatching API with LocationOptions.mode of MSB (Ms Based)
215 LOCATION_CAPABILITIES_GNSS_MSB_BIT = (1<<6),
216 // supports startTracking/startBatching API with LocationOptions.mode of MSA (MS Assisted)
217 LOCATION_CAPABILITIES_GNSS_MSA_BIT = (1<<7),
218 // supports debug nmea sentences in the debugNmeaCallback
219 LOCATION_CAPABILITIES_DEBUG_NMEA_BIT = (1<<8),
220 // support outdoor trip batching
Dante Russo271cfd82018-06-04 16:55:56 -0700221 LOCATION_CAPABILITIES_OUTDOOR_TRIP_BATCHING_BIT = (1<<9),
222 // support constellation enablement
223 LOCATION_CAPABILITIES_CONSTELLATION_ENABLEMENT_BIT = (1<<10),
224 // support agpm
225 LOCATION_CAPABILITIES_AGPM_BIT = (1<<11),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800226} LocationCapabilitiesBits;
227
228typedef enum {
229 LOCATION_TECHNOLOGY_TYPE_GNSS = 0,
230} LocationTechnologyType;
231
232// Configures how GPS is locked when GPS is disabled (through GnssDisable)
Hoss Zhou11035502018-12-20 15:05:08 +0800233enum {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800234 GNSS_CONFIG_GPS_LOCK_NONE = 0, // gps is not locked when GPS is disabled (GnssDisable)
235 GNSS_CONFIG_GPS_LOCK_MO, // gps mobile originated (MO) is locked when GPS is disabled
236 GNSS_CONFIG_GPS_LOCK_NI, // gps network initiated (NI) is locked when GPS is disabled
237 GNSS_CONFIG_GPS_LOCK_MO_AND_NI,// gps MO and NI is locked when GPS is disabled
Hoss Zhou11035502018-12-20 15:05:08 +0800238};
239typedef int32_t GnssConfigGpsLock;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800240
241// SUPL version
242typedef enum {
243 GNSS_CONFIG_SUPL_VERSION_1_0_0 = 1,
244 GNSS_CONFIG_SUPL_VERSION_2_0_0,
245 GNSS_CONFIG_SUPL_VERSION_2_0_2,
246} GnssConfigSuplVersion;
247
248// LTE Positioning Profile
249typedef enum {
250 GNSS_CONFIG_LPP_PROFILE_RRLP_ON_LTE = 0, // RRLP on LTE (Default)
251 GNSS_CONFIG_LPP_PROFILE_USER_PLANE, // LPP User Plane (UP) on LTE
252 GNSS_CONFIG_LPP_PROFILE_CONTROL_PLANE, // LPP_Control_Plane (CP)
253 GNSS_CONFIG_LPP_PROFILE_USER_PLANE_AND_CONTROL_PLANE, // Both LPP UP and CP
254} GnssConfigLppProfile;
255
256// Technology for LPPe Control Plane
257typedef uint16_t GnssConfigLppeControlPlaneMask;
258typedef enum {
259 GNSS_CONFIG_LPPE_CONTROL_PLANE_DBH_BIT = (1<<0), // DBH
260 GNSS_CONFIG_LPPE_CONTROL_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS
261 GNSS_CONFIG_LPPE_CONTROL_PLANE_SRN_AP_MEASUREMENTS_BIT = (1<<2), // SRN_AP_MEASUREMENTS
262 GNSS_CONFIG_LPPE_CONTROL_PLANE_SENSOR_BARO_MEASUREMENTS_BIT = (1<<3),
263 // SENSOR_BARO_MEASUREMENTS
264} GnssConfigLppeControlPlaneBits;
265
266// Technology for LPPe User Plane
267typedef uint16_t GnssConfigLppeUserPlaneMask;
268typedef enum {
269 GNSS_CONFIG_LPPE_USER_PLANE_DBH_BIT = (1<<0), // DBH
270 GNSS_CONFIG_LPPE_USER_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS
271 GNSS_CONFIG_LPPE_USER_PLANE_SRN_AP_MEASUREMENTS_BIT = (1<<2), // SRN_AP_MEASUREMENTS
272 GNSS_CONFIG_LPPE_USER_PLANE_SENSOR_BARO_MEASUREMENTS_BIT = (1<<3),
273 // SENSOR_BARO_MEASUREMENTS
274} GnssConfigLppeUserPlaneBits;
275
276// Positioning Protocol on A-GLONASS system
277typedef uint16_t GnssConfigAGlonassPositionProtocolMask;
278typedef enum {
279 GNSS_CONFIG_RRC_CONTROL_PLANE_BIT = (1<<0), // RRC Control Plane
280 GNSS_CONFIG_RRLP_USER_PLANE_BIT = (1<<1), // RRLP User Plane
281 GNSS_CONFIG_LLP_USER_PLANE_BIT = (1<<2), // LPP User Plane
282 GNSS_CONFIG_LLP_CONTROL_PLANE_BIT = (1<<3), // LPP Control Plane
283} GnssConfigAGlonassPositionProtocolBits;
284
285typedef enum {
286 GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_NO = 0,
287 GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_YES,
288} GnssConfigEmergencyPdnForEmergencySupl;
289
290typedef enum {
291 GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_NO = 0,
292 GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_YES,
293} GnssConfigSuplEmergencyServices;
294
295typedef uint16_t GnssConfigSuplModeMask;
296typedef enum {
297 GNSS_CONFIG_SUPL_MODE_MSB_BIT = (1<<0),
298 GNSS_CONFIG_SUPL_MODE_MSA_BIT = (1<<1),
299} GnssConfigSuplModeBits;
300
301typedef uint32_t GnssConfigFlagsMask;
302typedef enum {
303 GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT = (1<<0),
304 GNSS_CONFIG_FLAGS_SUPL_VERSION_VALID_BIT = (1<<1),
305 GNSS_CONFIG_FLAGS_SET_ASSISTANCE_DATA_VALID_BIT = (1<<2),
306 GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT = (1<<3),
307 GNSS_CONFIG_FLAGS_LPPE_CONTROL_PLANE_VALID_BIT = (1<<4),
308 GNSS_CONFIG_FLAGS_LPPE_USER_PLANE_VALID_BIT = (1<<5),
309 GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT = (1<<6),
310 GNSS_CONFIG_FLAGS_EM_PDN_FOR_EM_SUPL_VALID_BIT = (1<<7),
311 GNSS_CONFIG_FLAGS_SUPL_EM_SERVICES_BIT = (1<<8),
312 GNSS_CONFIG_FLAGS_SUPL_MODE_BIT = (1<<9),
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +0530313 GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT = (1<<10),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800314} GnssConfigFlagsBits;
315
316typedef enum {
317 GNSS_NI_ENCODING_TYPE_NONE = 0,
318 GNSS_NI_ENCODING_TYPE_GSM_DEFAULT,
319 GNSS_NI_ENCODING_TYPE_UTF8,
320 GNSS_NI_ENCODING_TYPE_UCS2,
321} GnssNiEncodingType;
322
323typedef enum {
324 GNSS_NI_TYPE_VOICE = 0,
325 GNSS_NI_TYPE_SUPL,
326 GNSS_NI_TYPE_CONTROL_PLANE,
327 GNSS_NI_TYPE_EMERGENCY_SUPL
328} GnssNiType;
329
330typedef uint16_t GnssNiOptionsMask;
331typedef enum {
332 GNSS_NI_OPTIONS_NOTIFICATION_BIT = (1<<0),
333 GNSS_NI_OPTIONS_VERIFICATION_BIT = (1<<1),
334 GNSS_NI_OPTIONS_PRIVACY_OVERRIDE_BIT = (1<<2),
335} GnssNiOptionsBits;
336
337typedef enum {
338 GNSS_NI_RESPONSE_ACCEPT = 1,
339 GNSS_NI_RESPONSE_DENY,
340 GNSS_NI_RESPONSE_NO_RESPONSE,
341 GNSS_NI_RESPONSE_IGNORE,
342} GnssNiResponse;
343
344typedef enum {
345 GNSS_SV_TYPE_UNKNOWN = 0,
346 GNSS_SV_TYPE_GPS,
347 GNSS_SV_TYPE_SBAS,
348 GNSS_SV_TYPE_GLONASS,
349 GNSS_SV_TYPE_QZSS,
350 GNSS_SV_TYPE_BEIDOU,
351 GNSS_SV_TYPE_GALILEO,
352} GnssSvType;
353
354typedef enum {
355 GNSS_EPH_TYPE_UNKNOWN = 0,
356 GNSS_EPH_TYPE_EPHEMERIS,
357 GNSS_EPH_TYPE_ALMANAC,
358} GnssEphemerisType;
359
360typedef enum {
361 GNSS_EPH_SOURCE_UNKNOWN = 0,
362 GNSS_EPH_SOURCE_DEMODULATED,
363 GNSS_EPH_SOURCE_SUPL_PROVIDED,
364 GNSS_EPH_SOURCE_OTHER_SERVER_PROVIDED,
365 GNSS_EPH_SOURCE_LOCAL,
366} GnssEphemerisSource;
367
368typedef enum {
369 GNSS_EPH_HEALTH_UNKNOWN = 0,
370 GNSS_EPH_HEALTH_GOOD,
371 GNSS_EPH_HEALTH_BAD,
372} GnssEphemerisHealth;
373
374typedef uint16_t GnssSvOptionsMask;
375typedef enum {
Mike Cailean7dfa87b2018-02-06 16:36:27 -0800376 GNSS_SV_OPTIONS_HAS_EPHEMER_BIT = (1<<0),
377 GNSS_SV_OPTIONS_HAS_ALMANAC_BIT = (1<<1),
378 GNSS_SV_OPTIONS_USED_IN_FIX_BIT = (1<<2),
379 GNSS_SV_OPTIONS_HAS_CARRIER_FREQUENCY_BIT = (1<<3),
Mike Caileand28e1ca2019-08-27 16:41:07 -0700380 GNSS_SV_OPTIONS_HAS_GNSS_SIGNAL_TYPE_BIT = (1<<4)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800381} GnssSvOptionsBits;
382
383typedef enum {
384 GNSS_ASSISTANCE_TYPE_SUPL = 0,
385 GNSS_ASSISTANCE_TYPE_C2K,
386} GnssAssistanceType;
387
388typedef enum {
389 GNSS_SUPL_MODE_STANDALONE = 0,
390 GNSS_SUPL_MODE_MSB,
391 GNSS_SUPL_MODE_MSA,
392} GnssSuplMode;
393
394typedef enum {
395 BATCHING_MODE_ROUTINE = 0, // positions are reported when batched positions memory is full
396 BATCHING_MODE_TRIP, // positions are reported when a certain distance is covered
397 BATCHING_MODE_NO_AUTO_REPORT // no report of positions automatically, instead queried on demand
398} BatchingMode;
399
400typedef enum {
401 BATCHING_STATUS_TRIP_COMPLETED = 0,
402 BATCHING_STATUS_POSITION_AVAILABE,
403 BATCHING_STATUS_POSITION_UNAVAILABLE
404} BatchingStatus;
405
406typedef uint16_t GnssMeasurementsAdrStateMask;
407typedef enum {
408 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_UNKNOWN = 0,
409 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_VALID_BIT = (1<<0),
410 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_RESET_BIT = (1<<1),
411 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_CYCLE_SLIP_BIT = (1<<2),
412} GnssMeasurementsAdrStateBits;
413
414typedef uint32_t GnssMeasurementsDataFlagsMask;
415typedef enum {
416 GNSS_MEASUREMENTS_DATA_SV_ID_BIT = (1<<0),
417 GNSS_MEASUREMENTS_DATA_SV_TYPE_BIT = (1<<1),
418 GNSS_MEASUREMENTS_DATA_STATE_BIT = (1<<2),
419 GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_BIT = (1<<3),
420 GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_UNCERTAINTY_BIT = (1<<4),
421 GNSS_MEASUREMENTS_DATA_CARRIER_TO_NOISE_BIT = (1<<5),
422 GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_BIT = (1<<6),
423 GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_UNCERTAINTY_BIT = (1<<7),
424 GNSS_MEASUREMENTS_DATA_ADR_STATE_BIT = (1<<8),
425 GNSS_MEASUREMENTS_DATA_ADR_BIT = (1<<9),
426 GNSS_MEASUREMENTS_DATA_ADR_UNCERTAINTY_BIT = (1<<10),
427 GNSS_MEASUREMENTS_DATA_CARRIER_FREQUENCY_BIT = (1<<11),
428 GNSS_MEASUREMENTS_DATA_CARRIER_CYCLES_BIT = (1<<12),
429 GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_BIT = (1<<13),
430 GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_UNCERTAINTY_BIT = (1<<14),
431 GNSS_MEASUREMENTS_DATA_MULTIPATH_INDICATOR_BIT = (1<<15),
432 GNSS_MEASUREMENTS_DATA_SIGNAL_TO_NOISE_RATIO_BIT = (1<<16),
433 GNSS_MEASUREMENTS_DATA_AUTOMATIC_GAIN_CONTROL_BIT = (1<<17),
434} GnssMeasurementsDataFlagsBits;
435
436typedef uint32_t GnssMeasurementsStateMask;
437typedef enum {
438 GNSS_MEASUREMENTS_STATE_UNKNOWN_BIT = 0,
439 GNSS_MEASUREMENTS_STATE_CODE_LOCK_BIT = (1<<0),
440 GNSS_MEASUREMENTS_STATE_BIT_SYNC_BIT = (1<<1),
441 GNSS_MEASUREMENTS_STATE_SUBFRAME_SYNC_BIT = (1<<2),
442 GNSS_MEASUREMENTS_STATE_TOW_DECODED_BIT = (1<<3),
443 GNSS_MEASUREMENTS_STATE_MSEC_AMBIGUOUS_BIT = (1<<4),
444 GNSS_MEASUREMENTS_STATE_SYMBOL_SYNC_BIT = (1<<5),
445 GNSS_MEASUREMENTS_STATE_GLO_STRING_SYNC_BIT = (1<<6),
446 GNSS_MEASUREMENTS_STATE_GLO_TOD_DECODED_BIT = (1<<7),
447 GNSS_MEASUREMENTS_STATE_BDS_D2_BIT_SYNC_BIT = (1<<8),
448 GNSS_MEASUREMENTS_STATE_BDS_D2_SUBFRAME_SYNC_BIT = (1<<9),
449 GNSS_MEASUREMENTS_STATE_GAL_E1BC_CODE_LOCK_BIT = (1<<10),
450 GNSS_MEASUREMENTS_STATE_GAL_E1C_2ND_CODE_LOCK_BIT = (1<<11),
451 GNSS_MEASUREMENTS_STATE_GAL_E1B_PAGE_SYNC_BIT = (1<<12),
452 GNSS_MEASUREMENTS_STATE_SBAS_SYNC_BIT = (1<<13),
453} GnssMeasurementsStateBits;
454
455typedef enum {
456 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_UNKNOWN = 0,
457 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_PRESENT,
458 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_NOT_PRESENT,
459} GnssMeasurementsMultipathIndicator;
460
461typedef uint32_t GnssMeasurementsClockFlagsMask;
462typedef enum {
463 GNSS_MEASUREMENTS_CLOCK_FLAGS_LEAP_SECOND_BIT = (1<<0),
464 GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_BIT = (1<<1),
465 GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_UNCERTAINTY_BIT = (1<<2),
466 GNSS_MEASUREMENTS_CLOCK_FLAGS_FULL_BIAS_BIT = (1<<3),
467 GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_BIT = (1<<4),
468 GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_UNCERTAINTY_BIT = (1<<5),
469 GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_BIT = (1<<6),
470 GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_UNCERTAINTY_BIT = (1<<7),
471 GNSS_MEASUREMENTS_CLOCK_FLAGS_HW_CLOCK_DISCONTINUITY_COUNT_BIT = (1<<8),
472} GnssMeasurementsClockFlagsBits;
473
474typedef uint32_t GnssAidingDataSvMask;
475typedef enum {
476 GNSS_AIDING_DATA_SV_EPHEMERIS_BIT = (1<<0), // ephemeris
477 GNSS_AIDING_DATA_SV_ALMANAC_BIT = (1<<1), // almanac
478 GNSS_AIDING_DATA_SV_HEALTH_BIT = (1<<2), // health
479 GNSS_AIDING_DATA_SV_DIRECTION_BIT = (1<<3), // direction
480 GNSS_AIDING_DATA_SV_STEER_BIT = (1<<4), // steer
481 GNSS_AIDING_DATA_SV_ALMANAC_CORR_BIT = (1<<5), // almanac correction
482 GNSS_AIDING_DATA_SV_BLACKLIST_BIT = (1<<6), // blacklist SVs
483 GNSS_AIDING_DATA_SV_SA_DATA_BIT = (1<<7), // sensitivity assistance data
484 GNSS_AIDING_DATA_SV_NO_EXIST_BIT = (1<<8), // SV does not exist
485 GNSS_AIDING_DATA_SV_IONOSPHERE_BIT = (1<<9), // ionosphere correction
486 GNSS_AIDING_DATA_SV_TIME_BIT = (1<<10),// reset satellite time
Bhavna Sharma5a8d1712018-08-22 09:45:25 -0700487 GNSS_AIDING_DATA_SV_MB_DATA = (1<<11),// delete multiband data
488 GNSS_AIDING_DATA_SV_POLY_BIT = (1<<12),// poly
Katz Yamada0fc49e82018-02-28 11:22:58 -0800489} GnssAidingDataSvBits;
490
491typedef uint32_t GnssAidingDataSvTypeMask;
492typedef enum {
493 GNSS_AIDING_DATA_SV_TYPE_GPS_BIT = (1<<0),
494 GNSS_AIDING_DATA_SV_TYPE_GLONASS_BIT = (1<<1),
495 GNSS_AIDING_DATA_SV_TYPE_QZSS_BIT = (1<<2),
496 GNSS_AIDING_DATA_SV_TYPE_BEIDOU_BIT = (1<<3),
497 GNSS_AIDING_DATA_SV_TYPE_GALILEO_BIT = (1<<4),
498} GnssAidingDataSvTypeBits;
499
Wei Chen8e04d012018-12-04 15:55:00 -0800500/* Gnss constellation type mask */
501typedef uint16_t GnssConstellationTypeMask;
502typedef enum {
503 GNSS_CONSTELLATION_TYPE_GPS_BIT = (1<<0),
504 GNSS_CONSTELLATION_TYPE_GLONASS_BIT = (1<<1),
505 GNSS_CONSTELLATION_TYPE_QZSS_BIT = (1<<2),
506 GNSS_CONSTELLATION_TYPE_BEIDOU_BIT = (1<<3),
507 GNSS_CONSTELLATION_TYPE_GALILEO_BIT = (1<<4),
Wei Chen9c217c02019-07-25 13:51:58 -0700508 GNSS_CONSTELLATION_TYPE_SBAS_BIT = (1<<5),
509 GNSS_CONSTELLATION_TYPE_NAVIC_BIT = (1<<6),
Wei Chen8e04d012018-12-04 15:55:00 -0800510} GnssConstellationTypeBits;
511
512#define GNSS_CONSTELLATION_TYPE_MASK_ALL\
513 (GNSS_CONSTELLATION_TYPE_GPS_BIT | GNSS_CONSTELLATION_TYPE_GLONASS_BIT |\
514 GNSS_CONSTELLATION_TYPE_QZSS_BIT | GNSS_CONSTELLATION_TYPE_BEIDOU_BIT |\
515 GNSS_CONSTELLATION_TYPE_GALILEO_BIT | GNSS_CONSTELLATION_TYPE_SBAS_BIT)
516
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700517/** GNSS Signal Type and RF Band */
518typedef uint32_t GnssSignalTypeMask;
519typedef enum {
520 /** GPS L1CA Signal */
521 GNSS_SIGNAL_GPS_L1CA = (1<<0),
522 /** GPS L1C Signal */
523 GNSS_SIGNAL_GPS_L1C = (1<<1),
524 /** GPS L2 RF Band */
525 GNSS_SIGNAL_GPS_L2 = (1<<2),
526 /** GPS L5 RF Band */
527 GNSS_SIGNAL_GPS_L5 = (1<<3),
528 /** GLONASS G1 (L1OF) RF Band */
529 GNSS_SIGNAL_GLONASS_G1 = (1<<4),
530 /** GLONASS G2 (L2OF) RF Band */
531 GNSS_SIGNAL_GLONASS_G2 = (1<<5),
532 /** GALILEO E1 RF Band */
533 GNSS_SIGNAL_GALILEO_E1 = (1<<6),
534 /** GALILEO E5A RF Band */
535 GNSS_SIGNAL_GALILEO_E5A = (1<<7),
536 /** GALILEO E5B RF Band */
Hoss Zhou48b4e042018-09-03 15:27:08 +0800537 GNSS_SIGNAL_GALILEO_E5B = (1<<8),
Wei Chenf54142c2019-10-08 14:28:08 -0700538 /** BEIDOU B1 RF Band */
539 GNSS_SIGNAL_BEIDOU_B1 = (1<<9),
540 /** BEIDOU B2 RF Band */
541 GNSS_SIGNAL_BEIDOU_B2 = (1<<10),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700542 /** QZSS L1CA RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700543 GNSS_SIGNAL_QZSS_L1CA = (1<<11),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700544 /** QZSS L1S RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700545 GNSS_SIGNAL_QZSS_L1S = (1<<12),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700546 /** QZSS L2 RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700547 GNSS_SIGNAL_QZSS_L2 = (1<<13),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700548 /** QZSS L5 RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700549 GNSS_SIGNAL_QZSS_L5 = (1<<14),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700550 /** SBAS L1 RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700551 GNSS_SIGNAL_SBAS_L1 = (1<<15),
552 /** BEIDOU B1I RF Band */
553 GNSS_SIGNAL_BEIDOU_B1I = (1<<16),
554 /** BEIDOU B1C RF Band */
555 GNSS_SIGNAL_BEIDOU_B1C = (1<<17),
556 /** BEIDOU B2I RF Band */
557 GNSS_SIGNAL_BEIDOU_B2I = (1<<18),
558 /** BEIDOU B2AI RF Band */
559 GNSS_SIGNAL_BEIDOU_B2AI = (1<<19),
Mike Caileanfb671a92019-06-10 13:48:15 -0700560 /** NAVIC L5 RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700561 GNSS_SIGNAL_NAVIC_L5 = (1<<20),
Mike Caileanfb671a92019-06-10 13:48:15 -0700562 /** BEIDOU B2A_Q RF Band */
Wei Chenf54142c2019-10-08 14:28:08 -0700563 GNSS_SIGNAL_BEIDOU_B2AQ = (1<<21),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700564} GnssSignalTypeBits;
565
Bhavna Sharma7445c502019-01-15 16:29:48 -0800566#define GNSS_SIGNAL_TYPE_MASK_ALL\
567 (GNSS_SIGNAL_GPS_L1CA | GNSS_SIGNAL_GPS_L1C | GNSS_SIGNAL_GPS_L2 |\
568 GNSS_SIGNAL_GPS_L5| GNSS_SIGNAL_GLONASS_G1 | GNSS_SIGNAL_GLONASS_G2 |\
569 GNSS_SIGNAL_GALILEO_E1 | GNSS_SIGNAL_GALILEO_E5A | GNSS_SIGNAL_GALILEO_E5B |\
570 GNSS_SIGNAL_BEIDOU_B1I | GNSS_SIGNAL_BEIDOU_B1C | GNSS_SIGNAL_BEIDOU_B2I|\
571 GNSS_SIGNAL_BEIDOU_B2AI | GNSS_SIGNAL_QZSS_L1CA | GNSS_SIGNAL_QZSS_L1S |\
Mike Caileanfb671a92019-06-10 13:48:15 -0700572 GNSS_SIGNAL_QZSS_L2| GNSS_SIGNAL_QZSS_L5 | GNSS_SIGNAL_SBAS_L1 |\
573 GNSS_SIGNAL_NAVIC_L5 | GNSS_SIGNAL_BEIDOU_B2AQ)
Bhavna Sharma7445c502019-01-15 16:29:48 -0800574
Katz Yamada0fc49e82018-02-28 11:22:58 -0800575typedef enum
576{
Wei Chen8e04d012018-12-04 15:55:00 -0800577 GNSS_LOC_SV_SYSTEM_UNKNOWN = 0,
578 /** unknown sv system. */
Wei Chena9b8abd2019-04-19 15:21:27 -0700579 GNSS_LOC_SV_SYSTEM_MIN = 1,
580 /**< Min enum of valid SV system. */
Katz Yamada0fc49e82018-02-28 11:22:58 -0800581 GNSS_LOC_SV_SYSTEM_GPS = 1,
582 /**< GPS satellite. */
583 GNSS_LOC_SV_SYSTEM_GALILEO = 2,
584 /**< GALILEO satellite. */
585 GNSS_LOC_SV_SYSTEM_SBAS = 3,
586 /**< SBAS satellite. */
Wei Chen8e04d012018-12-04 15:55:00 -0800587 GNSS_LOC_SV_SYSTEM_GLONASS = 4,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800588 /**< GLONASS satellite. */
Wei Chen8e04d012018-12-04 15:55:00 -0800589 GNSS_LOC_SV_SYSTEM_BDS = 5,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800590 /**< BDS satellite. */
Wei Chena9b8abd2019-04-19 15:21:27 -0700591 GNSS_LOC_SV_SYSTEM_QZSS = 6,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800592 /**< QZSS satellite. */
Wei Chen9c217c02019-07-25 13:51:58 -0700593 GNSS_LOC_SV_SYSTEM_NAVIC = 7,
594 /**< NAVIC satellite. */
595 GNSS_LOC_SV_SYSTEM_MAX = 7,
Wei Chena9b8abd2019-04-19 15:21:27 -0700596 /**< Max enum of valid SV system. */
Katz Yamada0fc49e82018-02-28 11:22:58 -0800597} Gnss_LocSvSystemEnumType;
598
Mike Cailean75cfd432018-06-07 16:54:35 -0700599typedef enum {
600 GNSS_LOC_SIGNAL_TYPE_GPS_L1CA = 0, /**< GPS L1CA Signal */
601 GNSS_LOC_SIGNAL_TYPE_GPS_L1C = 1, /**< GPS L1C Signal */
602 GNSS_LOC_SIGNAL_TYPE_GPS_L2C_L = 2, /**< GPS L2C_L RF Band */
603 GNSS_LOC_SIGNAL_TYPE_GPS_L5_Q = 3, /**< GPS L5_Q RF Band */
604 GNSS_LOC_SIGNAL_TYPE_GLONASS_G1 = 4, /**< GLONASS G1 (L1OF) RF Band */
605 GNSS_LOC_SIGNAL_TYPE_GLONASS_G2 = 5, /**< GLONASS G2 (L2OF) RF Band */
606 GNSS_LOC_SIGNAL_TYPE_GALILEO_E1_C = 6, /**< GALILEO E1_C RF Band */
607 GNSS_LOC_SIGNAL_TYPE_GALILEO_E5A_Q = 7, /**< GALILEO E5A_Q RF Band */
608 GNSS_LOC_SIGNAL_TYPE_GALILEO_E5B_Q = 8, /**< GALILEO E5B_Q RF Band */
609 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B1_I = 9, /**< BEIDOU B1_I RF Band */
610 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B1C = 10, /**< BEIDOU B1C RF Band */
611 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2_I = 11, /**< BEIDOU B2_I RF Band */
612 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2A_I = 12, /**< BEIDOU B2A_I RF Band */
613 GNSS_LOC_SIGNAL_TYPE_QZSS_L1CA = 13, /**< QZSS L1CA RF Band */
614 GNSS_LOC_SIGNAL_TYPE_QZSS_L1S = 14, /**< QZSS L1S RF Band */
615 GNSS_LOC_SIGNAL_TYPE_QZSS_L2C_L = 15, /**< QZSS L2C_L RF Band */
616 GNSS_LOC_SIGNAL_TYPE_QZSS_L5_Q = 16, /**< QZSS L5_Q RF Band */
617 GNSS_LOC_SIGNAL_TYPE_SBAS_L1_CA = 17, /**< SBAS L1_CA RF Band */
Mike Caileanfb671a92019-06-10 13:48:15 -0700618 GNSS_LOC_SIGNAL_TYPE_NAVIC_L5 = 18, /**< NAVIC L5 RF Band */
619 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2A_Q = 19, /**< BEIDOU B2A_Q RF Band */
620 GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES = 20 /**< Maximum number of signal types */
Mike Cailean75cfd432018-06-07 16:54:35 -0700621} Gnss_LocSignalEnumType;
622
Bhavna Sharma43365b42019-06-21 14:32:15 -0700623typedef uint32_t PositioningEngineMask;
624typedef enum {
625 STANDARD_POSITIONING_ENGINE = (1 << 0),
Wei Chena28f8132019-07-18 15:50:55 -0700626 DEAD_RECKONING_ENGINE = (1 << 1),
627 PRECISE_POSITIONING_ENGINE = (1 << 2)
Bhavna Sharma43365b42019-06-21 14:32:15 -0700628} PositioningEngineBits;
Wei Chen688372b2019-08-16 14:59:23 -0700629#define POSITION_ENGINE_MASK_ALL \
630 (STANDARD_POSITIONING_ENGINE|DEAD_RECKONING_ENGINE|PRECISE_POSITIONING_ENGINE)
Bhavna Sharma43365b42019-06-21 14:32:15 -0700631
Mike Cailean75cfd432018-06-07 16:54:35 -0700632typedef uint64_t GnssDataMask;
633typedef enum {
634 // Jammer Indicator is available
635 GNSS_LOC_DATA_JAMMER_IND_BIT = (1ULL << 0),
636 // AGC is available
637 GNSS_LOC_DATA_AGC_BIT = (1ULL << 1)
638} GnssDataBits;
639
Katz Yamada0fc49e82018-02-28 11:22:58 -0800640typedef uint32_t GnssSystemTimeStructTypeFlags;
641typedef enum {
642 GNSS_SYSTEM_TIME_WEEK_VALID = (1 << 0),
643 GNSS_SYSTEM_TIME_WEEK_MS_VALID = (1 << 1),
644 GNSS_SYSTEM_CLK_TIME_BIAS_VALID = (1 << 2),
645 GNSS_SYSTEM_CLK_TIME_BIAS_UNC_VALID = (1 << 3),
646 GNSS_SYSTEM_REF_FCOUNT_VALID = (1 << 4),
647 GNSS_SYSTEM_NUM_CLOCK_RESETS_VALID = (1 << 5)
648} GnssSystemTimeTypeBits;
649
650typedef uint32_t GnssGloTimeStructTypeFlags;
651typedef enum {
652 GNSS_CLO_DAYS_VALID = (1 << 0),
Wei Chen8e04d012018-12-04 15:55:00 -0800653 GNSS_GLO_MSEC_VALID = (1 << 1),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800654 GNSS_GLO_CLK_TIME_BIAS_VALID = (1 << 2),
655 GNSS_GLO_CLK_TIME_BIAS_UNC_VALID = (1 << 3),
656 GNSS_GLO_REF_FCOUNT_VALID = (1 << 4),
657 GNSS_GLO_NUM_CLOCK_RESETS_VALID = (1 << 5),
658 GNSS_GLO_FOUR_YEAR_VALID = (1 << 6)
659} GnssGloTimeTypeBits;
660
661typedef struct {
662 GnssAidingDataSvMask svMask; // bitwise OR of GnssAidingDataSvBits
663 GnssAidingDataSvTypeMask svTypeMask; // bitwise OR of GnssAidingDataSvTypeBits
664} GnssAidingDataSv;
665
666typedef uint32_t GnssAidingDataCommonMask;
667typedef enum {
668 GNSS_AIDING_DATA_COMMON_POSITION_BIT = (1<<0), // position estimate
669 GNSS_AIDING_DATA_COMMON_TIME_BIT = (1<<1), // reset all clock values
670 GNSS_AIDING_DATA_COMMON_UTC_BIT = (1<<2), // UTC estimate
671 GNSS_AIDING_DATA_COMMON_RTI_BIT = (1<<3), // RTI
672 GNSS_AIDING_DATA_COMMON_FREQ_BIAS_EST_BIT = (1<<4), // frequency bias estimate
673 GNSS_AIDING_DATA_COMMON_CELLDB_BIT = (1<<5), // all celldb info
674} GnssAidingDataCommonBits;
675
676typedef struct {
677 GnssAidingDataCommonMask mask; // bitwise OR of GnssAidingDataCommonBits
678} GnssAidingDataCommon;
679
680typedef struct {
681 bool deleteAll; // if true, delete all aiding data and ignore other params
682 GnssAidingDataSv sv; // SV specific aiding data
683 GnssAidingDataCommon common; // common aiding data
Bhavna Sharma43365b42019-06-21 14:32:15 -0700684 PositioningEngineMask posEngineMask; // engines to perform the delete operation on.
Katz Yamada0fc49e82018-02-28 11:22:58 -0800685} GnssAidingData;
686
Wei Chena9b8abd2019-04-19 15:21:27 -0700687typedef uint16_t DrCalibrationStatusMask;
688typedef enum {
689 // Indicate that roll calibration is needed. Need to take more turns on level ground
690 DR_ROLL_CALIBRATION_NEEDED = (1<<0),
691 // Indicate that pitch calibration is needed. Need to take more turns on level ground
692 DR_PITCH_CALIBRATION_NEEDED = (1<<1),
693 // Indicate that yaw calibration is needed. Need to accelerate in a straight line
694 DR_YAW_CALIBRATION_NEEDED = (1<<2),
695 // Indicate that odo calibration is needed. Need to accelerate in a straight line
696 DR_ODO_CALIBRATION_NEEDED = (1<<3),
697 // Indicate that gyro calibration is needed. Need to take more turns on level ground
698 DR_GYRO_CALIBRATION_NEEDED = (1<<4)
699} DrCalibrationStatusBits;
700
Katz Yamada0fc49e82018-02-28 11:22:58 -0800701typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800702 uint32_t size; // set to sizeof(Location)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800703 LocationFlagsMask flags; // bitwise OR of LocationFlagsBits to mark which params are valid
704 uint64_t timestamp; // UTC timestamp for location fix, milliseconds since January 1, 1970
705 double latitude; // in degrees
706 double longitude; // in degrees
707 double altitude; // in meters above the WGS 84 reference ellipsoid
708 float speed; // in meters per second
709 float bearing; // in degrees; range [0, 360)
710 float accuracy; // in meters
711 float verticalAccuracy; // in meters
712 float speedAccuracy; // in meters/second
713 float bearingAccuracy; // in degrees (0 to 359.999)
714 LocationTechnologyMask techMask;
haohuang17015dd2018-04-16 15:12:49 +0800715 LocationSpoofMask spoofMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800716} Location;
717
Wei Chena28f8132019-07-18 15:50:55 -0700718// TBD: check whether we need all the types
719typedef enum {
720 LOC_REQ_ENGINE_FUSED_BIT = (1<<0), // Keep this
721 LOC_REQ_ENGINE_SPE_BIT = (1<<1),
722 LOC_REQ_ENGINE_PPE_BIT = (1<<2),
723} LocReqEngineTypeMask;
724
725typedef enum {
726 LOC_OUTPUT_ENGINE_FUSED = 0,
727 /** This is the GNSS fix from modem */
728 LOC_OUTPUT_ENGINE_SPE = 1,
729 /** This is the GNSS fix with correction PPP/RTK correction */
730 LOC_OUTPUT_ENGINE_PPE = 2,
731 LOC_OUTPUT_ENGINE_COUNT,
732} LocOutputEngineType;
733
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530734struct LocationOptions {
Wei Chen1d823b02018-12-14 16:22:17 -0800735 uint32_t size; // set to sizeof(LocationOptions)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800736 uint32_t minInterval; // in milliseconds
737 uint32_t minDistance; // in meters. if minDistance > 0, gnssSvCallback/gnssNmeaCallback/
738 // gnssMeasurementsCallback may not be called
739 GnssSuplMode mode; // Standalone/MS-Based/MS-Assisted
Wei Chena28f8132019-07-18 15:50:55 -0700740 // behavior when this field is 0:
741 // if engine hub is running, this will be fused fix,
742 // if engine hub is not running, this will be SPE fix
743 LocReqEngineTypeMask locReqEngTypeMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800744
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530745 inline LocationOptions() :
Wei Chena28f8132019-07-18 15:50:55 -0700746 size(0), minInterval(0), minDistance(0), mode(GNSS_SUPL_MODE_STANDALONE),
747 locReqEngTypeMask((LocReqEngineTypeMask)0) {}
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530748};
749
750typedef enum {
751 GNSS_POWER_MODE_INVALID = 0,
752 GNSS_POWER_MODE_M1, /* Improved Accuracy Mode */
753 GNSS_POWER_MODE_M2, /* Normal Mode */
754 GNSS_POWER_MODE_M3, /* Background Mode */
755 GNSS_POWER_MODE_M4, /* Background Mode */
756 GNSS_POWER_MODE_M5 /* Background Mode */
757} GnssPowerMode;
758
759struct TrackingOptions : LocationOptions {
760 GnssPowerMode powerMode; /* Power Mode to be used for time based tracking
761 sessions */
762 uint32_t tbm; /* Time interval between measurements specified in millis.
763 Applicable to background power modes */
764
765 inline TrackingOptions() :
766 LocationOptions(), powerMode(GNSS_POWER_MODE_INVALID), tbm(0) {}
Wei Chen1d823b02018-12-14 16:22:17 -0800767 inline TrackingOptions(uint32_t s, GnssPowerMode m, uint32_t t) :
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530768 LocationOptions(), powerMode(m), tbm(t) { LocationOptions::size = s; }
769 inline TrackingOptions(const LocationOptions& options) :
770 LocationOptions(options), powerMode(GNSS_POWER_MODE_INVALID), tbm(0) {}
771 inline void setLocationOptions(const LocationOptions& options) {
Wei Chena28f8132019-07-18 15:50:55 -0700772 size = sizeof(TrackingOptions);
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530773 minInterval = options.minInterval;
774 minDistance = options.minDistance;
775 mode = options.mode;
Wei Chena28f8132019-07-18 15:50:55 -0700776 locReqEngTypeMask = options.locReqEngTypeMask;
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530777 }
Harikrishnan Hariharan59269e12018-07-01 00:43:09 +0530778 inline LocationOptions getLocationOptions() {
779 LocationOptions locOption;
780 locOption.size = sizeof(locOption);
781 locOption.minDistance = minDistance;
782 locOption.minInterval = minInterval;
783 locOption.mode = mode;
Wei Chena28f8132019-07-18 15:50:55 -0700784 locOption.locReqEngTypeMask = locReqEngTypeMask;
Harikrishnan Hariharan59269e12018-07-01 00:43:09 +0530785 return locOption;
786 }
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530787};
788
789struct BatchingOptions : LocationOptions {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800790 BatchingMode batchingMode;
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530791
792 inline BatchingOptions() :
793 LocationOptions(), batchingMode(BATCHING_MODE_ROUTINE) {}
Wei Chen1d823b02018-12-14 16:22:17 -0800794 inline BatchingOptions(uint32_t s, BatchingMode m) :
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530795 LocationOptions(), batchingMode(m) { LocationOptions::size = s; }
796 inline BatchingOptions(const LocationOptions& options) :
797 LocationOptions(options), batchingMode(BATCHING_MODE_ROUTINE) {}
798 inline void setLocationOptions(const LocationOptions& options) {
799 minInterval = options.minInterval;
800 minDistance = options.minDistance;
801 mode = options.mode;
802 }
803};
Katz Yamada0fc49e82018-02-28 11:22:58 -0800804
805typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800806 uint32_t size;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800807 BatchingStatus batchingStatus;
808} BatchingStatusInfo;
809
810typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800811 uint32_t size; // set to sizeof(GeofenceOption)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800812 GeofenceBreachTypeMask breachTypeMask; // bitwise OR of GeofenceBreachTypeBits
813 uint32_t responsiveness; // in milliseconds
814 uint32_t dwellTime; // in seconds
815} GeofenceOption;
816
817typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800818 uint32_t size; // set to sizeof(GeofenceInfo)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800819 double latitude; // in degrees
820 double longitude; // in degrees
821 double radius; // in meters
822} GeofenceInfo;
823
824typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800825 uint32_t size; // set to sizeof(GeofenceBreachNotification)
826 uint32_t count; // number of ids in array
Katz Yamada0fc49e82018-02-28 11:22:58 -0800827 uint32_t* ids; // array of ids that have breached
828 Location location; // location associated with breach
829 GeofenceBreachType type; // type of breach
830 uint64_t timestamp; // timestamp of breach
831} GeofenceBreachNotification;
832
833typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800834 uint32_t size; // set to sizeof(GeofenceBreachNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800835 GeofenceStatusAvailable available; // GEOFENCE_STATUS_AVAILABILE_NO/_YES
836 LocationTechnologyType techType; // GNSS
837} GeofenceStatusNotification;
838
839typedef struct {
840 uint64_t gpsSvUsedIdsMask;
841 uint64_t gloSvUsedIdsMask;
842 uint64_t galSvUsedIdsMask;
843 uint64_t bdsSvUsedIdsMask;
844 uint64_t qzssSvUsedIdsMask;
845} GnssLocationSvUsedInPosition;
846
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700847typedef struct {
848 /** GnssSignalType mask */
849 GnssSignalTypeMask gnssSignalType;
850 /** Specifies GNSS Constellation Type */
851 Gnss_LocSvSystemEnumType gnssConstellation;
Wei Chen53d69432019-12-10 16:07:23 -0800852 /** Unique SV Identifier.
853 * For SV Range of supported constellation, please refer to
854 * the comment section of svId in GnssSv. */
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700855 uint16_t gnssSvId;
856} GnssMeasUsageInfo;
857
Katz Yamada0fc49e82018-02-28 11:22:58 -0800858/** @struct
859 Body Frame parameters
860*/
861typedef struct {
862 GnssLocationPosDataMask bodyFrameDataMask; // Contains Body frame LocPosDataMask bits
863 float longAccel; // Forward Acceleration in body frame (m/s2)
864 float latAccel; // Sideward Acceleration in body frame (m/s2)
865 float vertAccel; // Vertical Acceleration in body frame (m/s2)
866 float yawRate; // Heading Rate (Radians/second)
867 float pitch; // Body pitch (Radians)
Naresh Munagala02cddf02018-06-21 10:44:51 +0530868 float longAccelUnc; // Uncertainty of Forward Acceleration in body frame
869 float latAccelUnc; // Uncertainty of Side-ward Acceleration in body frame
870 float vertAccelUnc; // Uncertainty of Vertical Acceleration in body frame
871 float yawRateUnc; // Uncertainty of Heading Rate
872 float pitchUnc; // Uncertainty of Body pitch
Katz Yamada0fc49e82018-02-28 11:22:58 -0800873} GnssLocationPositionDynamics;
874
875typedef struct {
876 /** Validity mask for below fields */
877 GnssSystemTimeStructTypeFlags validityMask;
878 /** Extended week number at reference tick.
879 Unit: Week.
880 Set to 65535 if week number is unknown.
881 For GPS:
882 Calculated from midnight, Jan. 6, 1980.
883 OTA decoded 10 bit GPS week is extended to map between:
884 [NV6264 to (NV6264 + 1023)].
885 NV6264: Minimum GPS week number configuration.
886 Default value of NV6264: 1738
887 For BDS:
888 Calculated from 00:00:00 on January 1, 2006 of Coordinated Universal Time (UTC).
889 For GAL:
890 Calculated from 00:00 UT on Sunday August 22, 1999 (midnight between August 21 and August 22).
891 */
892 uint16_t systemWeek;
893 /** Time in to the current week at reference tick.
894 Unit: Millisecond. Range: 0 to 604799999.
895 Check for systemClkTimeUncMs before use */
896 uint32_t systemMsec;
897 /** System clock time bias (sub-millisecond)
898 Units: Millisecond
899 Note: System time (TOW Millisecond) = systemMsec - systemClkTimeBias.
900 Check for systemClkTimeUncMs before use. */
901 float systemClkTimeBias;
902 /** Single sided maximum time bias uncertainty
903 Units: Millisecond */
904 float systemClkTimeUncMs;
905 /** FCount (free running HW timer) value. Don't use for relative time purpose
906 due to possible discontinuities.
907 Unit: Millisecond */
908 uint32_t refFCount;
909 /** Number of clock resets/discontinuities detected, affecting the local hardware counter value. */
910 uint32_t numClockResets;
911} GnssSystemTimeStructType;
912
913typedef struct {
914 /** GLONASS day number in four years. Refer to GLONASS ICD.
915 Applicable only for GLONASS and shall be ignored for other constellations.
916 If unknown shall be set to 65535 */
917 uint16_t gloDays;
918 /** Validity mask for below fields */
919 GnssGloTimeStructTypeFlags validityMask;
920 /** GLONASS time of day in Millisecond. Refer to GLONASS ICD.
921 Units: Millisecond
922 Check for gloClkTimeUncMs before use */
923 uint32_t gloMsec;
924 /** GLONASS clock time bias (sub-millisecond)
925 Units: Millisecond
926 Note: GLO time (TOD Millisecond) = gloMsec - gloClkTimeBias.
927 Check for gloClkTimeUncMs before use. */
928 float gloClkTimeBias;
929 /** Single sided maximum time bias uncertainty
930 Units: Millisecond */
931 float gloClkTimeUncMs;
932 /** FCount (free running HW timer) value. Don't use for relative time purpose
933 due to possible discontinuities.
934 Unit: Millisecond */
935 uint32_t refFCount;
936 /** Number of clock resets/discontinuities detected, affecting the local hardware counter value. */
937 uint32_t numClockResets;
938 /** GLONASS four year number from 1996. Refer to GLONASS ICD.
939 Applicable only for GLONASS and shall be ignored for other constellations.
940 If unknown shall be set to 255 */
941 uint8_t gloFourYear;
942} GnssGloTimeStructType;
943
944typedef union {
945 GnssSystemTimeStructType gpsSystemTime;
946 GnssSystemTimeStructType galSystemTime;
947 GnssSystemTimeStructType bdsSystemTime;
948 GnssSystemTimeStructType qzssSystemTime;
Katz Yamada8f2e9002018-03-13 09:30:43 -0700949 GnssGloTimeStructType gloSystemTime;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800950} SystemTimeStructUnion;
951 /** Time applicability of PVT report */
952typedef struct {
953 /** Specifies GNSS system time reported. Mandatory field */
954 Gnss_LocSvSystemEnumType gnssSystemTimeSrc;
955 /** Reporting of GPS system time is recommended.
956 If GPS time is unknown & other satellite system time is known,
957 it should be reported.
958 Mandatory field
959 */
960 SystemTimeStructUnion u;
961} GnssSystemTime;
962
963typedef struct {
Wei Chend256bc52019-06-10 10:10:53 -0700964 uint32_t size; // set to sizeof(GnssLocationInfo)
965 Location location; // basic locaiton info, latitude, longitude, and etc
Katz Yamada0fc49e82018-02-28 11:22:58 -0800966 GnssLocationInfoFlagMask flags; // bitwise OR of GnssLocationInfoBits for param validity
967 float altitudeMeanSeaLevel; // altitude wrt mean sea level
968 float pdop; // position dilusion of precision
969 float hdop; // horizontal dilusion of precision
970 float vdop; // vertical dilusion of precision
971 float gdop; // geometric dilution of precision
972 float tdop; // time dilution of precision
973 float magneticDeviation; // magnetic deviation
974 LocationReliability horReliability; // horizontal reliability
975 LocationReliability verReliability; // vertical reliability
976 float horUncEllipseSemiMajor; // horizontal elliptical accuracy semi-major axis
977 float horUncEllipseSemiMinor; // horizontal elliptical accuracy semi-minor axis
978 float horUncEllipseOrientAzimuth; // horizontal elliptical accuracy azimuth
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700979 float northStdDeviation; // North standard deviation Unit: Meters
980 float eastStdDeviation; // East standard deviation. Unit: Meters
Katz Yamada0fc49e82018-02-28 11:22:58 -0800981 float northVelocity; // North Velocity.Unit: Meters/sec
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700982 float eastVelocity; // East Velocity Unit Meters/sec
983 float upVelocity; // Up Velocity. Unit Meters/sec
Katz Yamada0fc49e82018-02-28 11:22:58 -0800984 float northVelocityStdDeviation;
985 float eastVelocityStdDeviation;
986 float upVelocityStdDeviation;
Wei Chen7c797102019-04-30 15:02:43 -0700987 uint16_t numSvUsedInPosition;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800988 GnssLocationSvUsedInPosition svUsedInPosition;// Gnss sv used in position data
989 GnssLocationNavSolutionMask navSolutionMask; // Nav solution mask to indicate sbas corrections
990 GnssLocationPosTechMask posTechMask; // Position technology used in computing this fix
991 GnssLocationPositionDynamics bodyFrameData; // Body Frame Dynamics: 4wayAcceleration and
992 // pitch set with validity
993 GnssSystemTime gnssSystemTime; // GNSS System Time
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700994 uint8_t numOfMeasReceived; // Number of measurements received for use in fix.
995 GnssMeasUsageInfo measUsageInfo[GNSS_SV_MAX]; // GNSS Measurement Usage info
996 uint8_t leapSeconds; // leap second
997 float timeUncMs; // Time uncertainty in milliseconds
Wei Chena9b8abd2019-04-19 15:21:27 -0700998 uint8_t calibrationConfidence; // Sensor calibration confidence percent,
999 // in range of [0, 100]
1000 DrCalibrationStatusMask calibrationStatus; // Sensor calibration status
Wei Chena28f8132019-07-18 15:50:55 -07001001 // location engine type. When the fix. when the type is set to
1002 // LOC_ENGINE_SRC_FUSED, the fix is the propagated/aggregated
1003 // reports from all engines running on the system (e.g.:
Kevin Tang2283fa02019-08-06 16:38:12 -07001004 // DR/SPE/PPE). To check which location engine contributes to
1005 // the fused output, check for locOutputEngMask.
Wei Chena28f8132019-07-18 15:50:55 -07001006 LocOutputEngineType locOutputEngType;
1007 // when loc output eng type is set to fused, this field
1008 // indicates the set of engines contribute to the fix.
1009 PositioningEngineMask locOutputEngMask;
1010} GnssLocationInfoNotification;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001011
1012typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001013 uint32_t size; // set to sizeof(GnssNiNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001014 GnssNiType type; // type of NI (Voice, SUPL, Control Plane)
1015 GnssNiOptionsMask options; // bitwise OR of GnssNiOptionsBits
1016 uint32_t timeout; // time (seconds) to wait for user input
1017 GnssNiResponse timeoutResponse; // the response that should be sent when timeout expires
1018 char requestor[GNSS_NI_REQUESTOR_MAX]; // the requestor that is making the request
1019 GnssNiEncodingType requestorEncoding; // the encoding type for requestor
1020 char message[GNSS_NI_MESSAGE_ID_MAX]; // the message to show user
1021 GnssNiEncodingType messageEncoding; // the encoding type for message
1022 char extras[GNSS_NI_MESSAGE_ID_MAX];
1023} GnssNiNotification;
1024
Naresh Munagala5ae3d712019-08-05 13:56:17 +05301025// carrier frequency of the signal tracked
1026#define GPS_L1CA_CARRIER_FREQUENCY (1575420000.0)
1027#define GPS_L1C_CARRIER_FREQUENCY (1575420000.0)
1028#define GPS_L2C_L_CARRIER_FREQUENCY (1227600000.0)
1029#define GPS_L5_Q_CARRIER_FREQUENCY (1176450000.0)
1030#define GLONASS_G1_CARRIER_FREQUENCY (1602000000.0)
1031#define GLONASS_G2_CARRIER_FREQUENCY (1246000000.0)
1032#define GALILEO_E1_C_CARRIER_FREQUENCY (1575420000.0)
1033#define GALILEO_E5A_Q_CARRIER_FREQUENCY (1176450000.0)
1034#define GALILEO_E5B_Q_CARRIER_FREQUENCY (1207140000.0)
1035#define BEIDOU_B1_I_CARRIER_FREQUENCY (1561098000.0)
1036#define BEIDOU_B1C_CARRIER_FREQUENCY (1575420000.0)
1037#define BEIDOU_B2_I_CARRIER_FREQUENCY (1207140000.0)
1038#define BEIDOU_B2A_I_CARRIER_FREQUENCY (1176450000.0)
1039#define BEIDOU_B2A_Q_CARRIER_FREQUENCY (1176450000.0)
1040#define QZSS_L1CA_CARRIER_FREQUENCY (1575420000.0)
1041#define QZSS_L1S_CARRIER_FREQUENCY (1575420000.0)
1042#define QZSS_L2C_L_CARRIER_FREQUENCY (1227600000.0)
1043#define QZSS_L5_Q_CARRIER_FREQUENCY (1176450000.0)
1044#define SBAS_L1_CA_CARRIER_FREQUENCY (1575420000.0)
1045
Katz Yamada0fc49e82018-02-28 11:22:58 -08001046typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001047 uint32_t size; // set to sizeof(GnssSv)
Wei Chen53d69432019-12-10 16:07:23 -08001048 // Unique SV Identifier.
1049 // SV Range for supported constellation is specified as below:
1050 // - For GPS: 1 to 32
1051 // - For GLONASS: 65 to 96
1052 // - For SBAS: 120 to 158 and 183 to 191
1053 // - For QZSS: 193 to 197
1054 // - For BDS: 201 to 237
1055 // - For GAL: 301 to 336
1056 // - For NAVIC: 401 to 41
1057 uint16_t svId;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001058 GnssSvType type; // type of SV (GPS, SBAS, GLONASS, QZSS, BEIDOU, GALILEO)
1059 float cN0Dbhz; // signal strength
1060 float elevation; // elevation of SV (in degrees)
1061 float azimuth; // azimuth of SV (in degrees)
1062 GnssSvOptionsMask gnssSvOptionsMask; // Bitwise OR of GnssSvOptionsBits
Mike Cailean7dfa87b2018-02-06 16:36:27 -08001063 float carrierFrequencyHz; // carrier frequency of the signal tracked
Bhavna Sharma21249412018-07-17 14:48:32 -07001064 GnssSignalTypeMask gnssSignalTypeMask; // Specifies GNSS signal type
Katz Yamada0fc49e82018-02-28 11:22:58 -08001065} GnssSv;
1066
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301067struct GnssConfigSetAssistanceServer {
Wei Chen1d823b02018-12-14 16:22:17 -08001068 uint32_t size; // set to sizeof(GnssConfigSetAssistanceServer)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001069 GnssAssistanceType type; // SUPL or C2K
1070 const char* hostName; // null terminated string
1071 uint32_t port; // port of server
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301072
1073 inline bool equals(const GnssConfigSetAssistanceServer& config) {
1074 if (config.type == type && config.port == port &&
1075 ((NULL == config.hostName && NULL == hostName) ||
1076 (NULL != config.hostName && NULL != hostName &&
1077 0 == strcmp(config.hostName, hostName)))) {
1078 return true;
1079 }
1080 return false;
1081 }
1082};
Katz Yamada0fc49e82018-02-28 11:22:58 -08001083
1084typedef struct {
Wei Chen53d69432019-12-10 16:07:23 -08001085 // set to sizeof(GnssMeasurementsData)
1086 uint32_t size;
1087 // bitwise OR of GnssMeasurementsDataFlagsBits
1088 GnssMeasurementsDataFlagsMask flags;
1089 // Unique SV Identifier
1090 // For SV Range of supported constellation,
1091 // please refer to the comment section of svId in GnssSv.
Katz Yamada0fc49e82018-02-28 11:22:58 -08001092 int16_t svId;
1093 GnssSvType svType;
1094 double timeOffsetNs;
1095 GnssMeasurementsStateMask stateMask; // bitwise OR of GnssMeasurementsStateBits
1096 int64_t receivedSvTimeNs;
1097 int64_t receivedSvTimeUncertaintyNs;
1098 double carrierToNoiseDbHz;
1099 double pseudorangeRateMps;
1100 double pseudorangeRateUncertaintyMps;
1101 GnssMeasurementsAdrStateMask adrStateMask; // bitwise OR of GnssMeasurementsAdrStateBits
1102 double adrMeters;
1103 double adrUncertaintyMeters;
1104 float carrierFrequencyHz;
1105 int64_t carrierCycles;
1106 double carrierPhase;
1107 double carrierPhaseUncertainty;
1108 GnssMeasurementsMultipathIndicator multipathIndicator;
1109 double signalToNoiseRatioDb;
1110 double agcLevelDb;
1111} GnssMeasurementsData;
1112
1113typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001114 uint32_t size; // set to sizeof(GnssMeasurementsClock)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001115 GnssMeasurementsClockFlagsMask flags; // bitwise OR of GnssMeasurementsClockFlagsBits
1116 int16_t leapSecond;
1117 int64_t timeNs;
1118 double timeUncertaintyNs;
1119 int64_t fullBiasNs;
1120 double biasNs;
1121 double biasUncertaintyNs;
1122 double driftNsps;
1123 double driftUncertaintyNsps;
1124 uint32_t hwClockDiscontinuityCount;
1125} GnssMeasurementsClock;
1126
1127typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001128 uint32_t size; // set to sizeof(GnssSvNotification)
1129 uint32_t count; // number of SVs in the GnssSv array
Bhavna Sharma21249412018-07-17 14:48:32 -07001130 bool gnssSignalTypeMaskValid;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001131 GnssSv gnssSvs[GNSS_SV_MAX]; // information on a number of SVs
1132} GnssSvNotification;
1133
1134typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001135 uint32_t size; // set to sizeof(GnssNmeaNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001136 uint64_t timestamp; // timestamp
1137 const char* nmea; // nmea text
Wei Chen1d823b02018-12-14 16:22:17 -08001138 uint32_t length; // length of the nmea text
Katz Yamada0fc49e82018-02-28 11:22:58 -08001139} GnssNmeaNotification;
1140
1141typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001142 uint32_t size; // set to sizeof(GnssDataNotification)
Mike Cailean75cfd432018-06-07 16:54:35 -07001143 GnssDataMask gnssDataMask[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // bitwise OR of GnssDataBits
1144 double jammerInd[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // Jammer Indication
1145 double agc[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // Automatic gain control
1146} GnssDataNotification;
1147
1148typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001149 uint32_t size; // set to sizeof(GnssMeasurementsNotification)
1150 uint32_t count; // number of items in GnssMeasurements array
Katz Yamada0fc49e82018-02-28 11:22:58 -08001151 GnssMeasurementsData measurements[GNSS_MEASUREMENTS_MAX];
1152 GnssMeasurementsClock clock; // clock
1153} GnssMeasurementsNotification;
1154
Wei Chen87a7fc02019-12-19 09:58:09 -08001155#define GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE 12
1156#define GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE 3
1157#define GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE 9
1158#define GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE 4
1159
1160typedef uint16_t GnssSvPolyStatusMask;
1161#define GNSS_SV_POLY_SRC_ALM_CORR_V02 ((GnssSvPolyStatusMask)0x01)
1162#define GNSS_SV_POLY_GLO_STR4_V02 ((GnssSvPolyStatusMask)0x02)
1163#define GNSS_SV_POLY_DELETE_V02 ((GnssSvPolyStatusMask)0x04)
1164#define GNSS_SV_POLY_SRC_GAL_FNAV_OR_INAV_V02 ((GnssSvPolyStatusMask)0x08)
1165typedef uint16_t GnssSvPolyStatusMaskValidity;
1166#define GNSS_SV_POLY_SRC_ALM_CORR_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x01)
1167#define GNSS_SV_POLY_GLO_STR4_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x02)
1168#define GNSS_SV_POLY_DELETE_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x04)
1169#define GNSS_SV_POLY_SRC_GAL_FNAV_OR_INAV_VALID_V02 ((GnssSvPolyStatusMaskValidity)0x08)
1170
1171typedef struct {
1172 uint32_t size;
1173 uint16_t gnssSvId;
1174 /* GPS: 1-32, GLO: 65-96, 0: Invalid,
1175 SBAS: 120-151, BDS:201-237,GAL:301 to 336
1176 All others are reserved
1177 */
1178 int8_t freqNum;
1179 /* Freq index, only valid if u_SysInd is GLO */
1180
1181 GnssSvPolyStatusMaskValidity svPolyStatusMaskValidity;
1182 GnssSvPolyStatusMask svPolyStatusMask;
1183
1184 uint32_t is_valid;
1185
1186 uint16_t iode;
1187 /* Ephemeris reference time
1188 GPS:Issue of Data Ephemeris used [unitless].
1189 GLO: Tb 7-bit, refer to ICD02
1190 */
1191 double T0;
1192 /* Reference time for polynominal calculations
1193 GPS: Secs in week.
1194 GLO: Full secs since Jan/01/96
1195 */
1196 double polyCoeffXYZ0[GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE];
1197 /* C0X, C0Y, C0Z */
1198 double polyCoefXYZN[GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE];
1199 /* C1X, C2X ... C2Z, C3Z */
1200 float polyCoefOther[GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE];
1201 /* C0T, C1T, C2T, C3T */
1202 float svPosUnc; /* SV position uncertainty [m]. */
1203 float ionoDelay; /* Ionospheric delay at d_T0 [m]. */
1204 float ionoDot; /* Iono delay rate [m/s]. */
1205 float sbasIonoDelay;/* SBAS Ionospheric delay at d_T0 [m]. */
1206 float sbasIonoDot; /* SBAS Iono delay rate [m/s]. */
1207 float tropoDelay; /* Tropospheric delay [m]. */
1208 float elevation; /* Elevation [rad] at d_T0 */
1209 float elevationDot; /* Elevation rate [rad/s] */
1210 float elevationUnc; /* SV elevation [rad] uncertainty */
1211 double velCoef[GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE];
1212 /* Coefficients of velocity poly */
1213 uint32_t enhancedIOD; /* Enhanced Reference Time */
1214 float gpsIscL1ca;
1215 float gpsIscL2c;
1216 float gpsIscL5I5;
1217 float gpsIscL5Q5;
1218 float gpsTgd;
1219 float gloTgdG1G2;
1220 float bdsTgdB1;
1221 float bdsTgdB2;
1222 float bdsTgdB2a;
1223 float bdsIscB2a;
1224 float galBgdE1E5a;
1225 float galBgdE1E5b;
1226 float navicTgdL5;
1227} GnssSvPolynomial;
1228
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301229typedef uint32_t GnssSvId;
1230
1231struct GnssSvIdSource{
Wei Chen1d823b02018-12-14 16:22:17 -08001232 uint32_t size; // set to sizeof(GnssSvIdSource)
1233 GnssSvType constellation; // constellation for the sv to blacklist
Wei Chen53d69432019-12-10 16:07:23 -08001234 GnssSvId svId; // Unique SV Identifier,
1235 // For SV Range of supported constellation,
1236 // please refer to the comment section of svId in GnssSv.
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301237};
1238inline bool operator ==(GnssSvIdSource const& left, GnssSvIdSource const& right) {
1239 return left.size == right.size &&
1240 left.constellation == right.constellation && left.svId == right.svId;
1241}
1242
1243#define GNSS_SV_CONFIG_ALL_BITS_ENABLED_MASK ((uint64_t)0xFFFFFFFFFFFFFFFF)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001244typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001245 uint32_t size; // set to sizeof(GnssSvIdConfig)
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301246
1247 // GLONASS - SV 65 maps to bit 0
1248#define GNSS_SV_CONFIG_GLO_INITIAL_SV_ID 65
1249 uint64_t gloBlacklistSvMask;
1250
1251 // BEIDOU - SV 201 maps to bit 0
1252#define GNSS_SV_CONFIG_BDS_INITIAL_SV_ID 201
1253 uint64_t bdsBlacklistSvMask;
1254
1255 // QZSS - SV 193 maps to bit 0
1256#define GNSS_SV_CONFIG_QZSS_INITIAL_SV_ID 193
1257 uint64_t qzssBlacklistSvMask;
1258
1259 // GAL - SV 301 maps to bit 0
1260#define GNSS_SV_CONFIG_GAL_INITIAL_SV_ID 301
1261 uint64_t galBlacklistSvMask;
Wei Chen688372b2019-08-16 14:59:23 -07001262
1263 // SBAS - SV 120 to 158, maps to 0 to 38
1264 // SV 183 to 191, maps to 39 to 47
1265#define GNSS_SV_CONFIG_SBAS_INITIAL_SV_ID 120
1266#define GNSS_SV_CONFIG_SBAS_INITIAL_SV_LENGTH 39
1267#define GNSS_SV_CONFIG_SBAS_INITIAL2_SV_ID 183
1268 uint64_t sbasBlacklistSvMask;
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301269} GnssSvIdConfig;
1270
1271struct GnssConfig{
Wei Chen1d823b02018-12-14 16:22:17 -08001272 uint32_t size; // set to sizeof(GnssConfig)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001273 GnssConfigFlagsMask flags; // bitwise OR of GnssConfigFlagsBits to mark which params are valid
1274 GnssConfigGpsLock gpsLock;
1275 GnssConfigSuplVersion suplVersion;
1276 GnssConfigSetAssistanceServer assistanceServer;
1277 GnssConfigLppProfile lppProfile;
1278 GnssConfigLppeControlPlaneMask lppeControlPlaneMask;
1279 GnssConfigLppeUserPlaneMask lppeUserPlaneMask;
1280 GnssConfigAGlonassPositionProtocolMask aGlonassPositionProtocolMask;
1281 GnssConfigEmergencyPdnForEmergencySupl emergencyPdnForEmergencySupl;
1282 GnssConfigSuplEmergencyServices suplEmergencyServices;
1283 GnssConfigSuplModeMask suplModeMask; //bitwise OR of GnssConfigSuplModeBits
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301284 std::vector<GnssSvIdSource> blacklistedSvIds;
1285
1286 inline bool equals(const GnssConfig& config) {
1287 if (flags == config.flags &&
1288 gpsLock == config.gpsLock &&
1289 suplVersion == config.suplVersion &&
1290 assistanceServer.equals(config.assistanceServer) &&
1291 lppProfile == config.lppProfile &&
1292 lppeControlPlaneMask == config.lppeControlPlaneMask &&
1293 lppeUserPlaneMask == config.lppeUserPlaneMask &&
1294 aGlonassPositionProtocolMask == config.aGlonassPositionProtocolMask &&
1295 emergencyPdnForEmergencySupl == config.emergencyPdnForEmergencySupl &&
1296 suplEmergencyServices == config.suplEmergencyServices &&
1297 suplModeMask == config.suplModeMask &&
1298 blacklistedSvIds == config.blacklistedSvIds) {
1299 return true;
1300 }
1301 return false;
1302 }
1303};
Katz Yamada0fc49e82018-02-28 11:22:58 -08001304
1305typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001306 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001307 bool mValid;
1308 Location mLocation;
1309 double verticalAccuracyMeters;
1310 double speedAccuracyMetersPerSecond;
1311 double bearingAccuracyDegrees;
1312 timespec mUtcReported;
1313} GnssDebugLocation;
1314
1315typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001316 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001317 bool mValid;
1318 int64_t timeEstimate;
1319 float timeUncertaintyNs;
1320 float frequencyUncertaintyNsPerSec;
1321} GnssDebugTime;
1322
1323typedef struct {
Wei Chen53d69432019-12-10 16:07:23 -08001324 // set to sizeof
1325 uint32_t size;
1326 // Unique SV Identifier
1327 // For SV Range of supported constellation,
1328 // please refer to the comment section of svId in GnssSv.
Katz Yamada0fc49e82018-02-28 11:22:58 -08001329 uint32_t svid;
1330 GnssSvType constellation;
1331 GnssEphemerisType mEphemerisType;
1332 GnssEphemerisSource mEphemerisSource;
1333 GnssEphemerisHealth mEphemerisHealth;
1334 float ephemerisAgeSeconds;
1335 bool serverPredictionIsAvailable;
1336 float serverPredictionAgeSeconds;
1337} GnssDebugSatelliteInfo;
1338
1339typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001340 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001341 GnssDebugLocation mLocation;
1342 GnssDebugTime mTime;
1343 std::vector<GnssDebugSatelliteInfo> mSatelliteInfo;
1344} GnssDebugReport;
1345
Wei Chen21b9c4e2018-09-19 10:59:28 -07001346typedef uint32_t LeapSecondSysInfoMask;
1347typedef enum {
1348 // current leap second info is available. This info will only
1349 // be available if the leap second change info is not available.
1350 //
1351 // If leap second change info is avaiable, to figure out
1352 // the current leap second info, compare current gps time with
1353 // the gps timestamp of leap second change to know whether to choose
1354 // leapSecondBefore or leapSecondAfter as current leap second.
1355 LEAP_SECOND_SYS_INFO_CURRENT_LEAP_SECONDS_BIT = (1ULL << 0),
1356 // the last known leap change event is available.
1357 // The info can be available on two scenario:
1358 // 1: this leap second change event has been scheduled and yet to happen
1359 // 2: this leap second change event has already happened and next
1360 // leap second change event has not yet been scheduled.
1361 LEAP_SECOND_SYS_INFO_LEAP_SECOND_CHANGE_BIT = (1ULL << 1),
1362} LeapSecondSysInfoDataBits;
1363
1364struct LeapSecondChangeInfo {
1365 // GPS timestamp that corrresponds to the last known
1366 // leap second change event.
1367 //
1368 // The info can be available on two scenario:
1369 // 1: this leap second change event has been scheduled and yet to happen
1370 // 2: this leap second change event has already happened and next
1371 // leap second change event has not yet been scheduled.
1372 GnssSystemTimeStructType gpsTimestampLsChange;
1373 // Number of leap seconds prior to the leap second change event
1374 // that corresponds to the timestamp at gpsTimestampLsChange.
1375 uint8_t leapSecondsBeforeChange;
1376 // Number of leap seconds after the leap second change event
1377 // that corresponds to the timestamp at gpsTimestampLsChange.
1378 uint8_t leapSecondsAfterChange;
1379};
1380
1381struct LeapSecondSystemInfo {
1382 LeapSecondSysInfoMask leapSecondInfoMask;
1383 uint8_t leapSecondCurrent;
1384 LeapSecondChangeInfo leapSecondChangeInfo;
1385};
1386
1387typedef uint32_t LocationSystemInfoMask;
1388typedef enum {
1389 // contains current leap second or leap second change info
1390 LOCATION_SYS_INFO_LEAP_SECOND = (1ULL << 0),
1391} LocationSystemInfoDataBits;
1392
1393struct LocationSystemInfo {
1394 LocationSystemInfoMask systemInfoMask;
1395 LeapSecondSystemInfo leapSecondSysInfo;
1396};
1397
Wei Chen688372b2019-08-16 14:59:23 -07001398/* Mask indicating enabled or disabled constellations */
1399typedef uint64_t GnssSvTypesMask;
1400typedef enum {
1401 GNSS_SV_TYPES_MASK_GLO_BIT = (1<<0),
1402 GNSS_SV_TYPES_MASK_BDS_BIT = (1<<1),
1403 GNSS_SV_TYPES_MASK_QZSS_BIT = (1<<2),
1404 GNSS_SV_TYPES_MASK_GAL_BIT = (1<<3)
1405} GnssSvTypesMaskBits;
1406
1407/* This SV Type config is injected directly to GNSS Adapter
1408 * bypassing Location API */
1409typedef struct {
1410 uint32_t size; // set to sizeof(GnssSvTypeConfig)
1411 // Enabled Constellations
1412 GnssSvTypesMask enabledSvTypesMask;
1413 // Disabled Constellations
1414 GnssSvTypesMask blacklistedSvTypesMask;
1415} GnssSvTypeConfig;
1416
1417// Specify parameters related to lever arm
1418struct LeverArmParams {
1419 // Offset along the vehicle forward axis
1420 float forwardOffsetMeters;
1421 // Offset along the vehicle starboard axis
1422 float sidewaysOffsetMeters;
1423 // Offset along the vehicle up axis
1424 float upOffsetMeters;
1425};
1426
1427typedef uint32_t LeverArmTypeMask;
1428
1429enum LeverArmTypeBits {
1430 // Lever arm regarding the VRP (Vehicle Reference Point) w.r.t
1431 // the origin (at the GPS Antenna)
1432 LEVER_ARM_TYPE_GNSS_TO_VRP_BIT = (1<<0),
1433 // Lever arm regarding GNSS Antenna w.r.t the origin at the IMU
1434 // e.g.: inertial measurement unit for DR (dead reckoning
1435 // engine)
1436 LEVER_ARM_TYPE_DR_IMU_TO_GNSS_BIT = (1<<1),
1437 // Lever arm regarding GNSS Antenna w.r.t the origin at the
1438 // IMU (inertial measurement unit) for VEPP (vision enhanced
1439 // precise positioning engine)
1440 LEVER_ARM_TYPE_VEPP_IMU_TO_GNSS_BIT = (1<<2)
1441};
1442
1443struct LeverArmConfigInfo {
1444 // Valid mask for the types of lever arm parameters provided
1445 LeverArmTypeMask leverArmValidMask;
1446 // Lever arm regarding the VRP (Vehicle Reference Point) w.r.t the origin
1447 // (at the GPS Antenna)
1448 LeverArmParams gnssToVRP;
1449 // Lever arm parameters regarding GNSS Antenna w.r.t the origin at the IMU
1450 // (inertial measurement unit) for DR (dead reckoning engine)
1451 LeverArmParams drImuToGnss;
1452 // Lever arm regarding GNSS Antenna w.r.t the origin at the IMU
1453 // (inertial measurement unit) for VEPP (vision enhanced precise position engine)
1454 LeverArmParams veppImuToGnss;
1455};
1456
Katz Yamada0fc49e82018-02-28 11:22:58 -08001457/* Provides the capabilities of the system
1458 capabilities callback is called once soon after createInstance is called */
1459typedef std::function<void(
1460 LocationCapabilitiesMask capabilitiesMask // bitwise OR of LocationCapabilitiesBits
1461)> capabilitiesCallback;
1462
1463/* Used by tracking, batching, and miscellanous APIs
1464 responseCallback is called for every Tracking, Batching API, and Miscellanous API */
1465typedef std::function<void(
1466 LocationError err, // if not SUCCESS, then id is not valid
1467 uint32_t id // id to be associated to the request
1468)> responseCallback;
1469
1470/* Used by APIs that gets more than one LocationError in it's response
1471 collectiveResponseCallback is called for every geofence API call.
1472 ids array and LocationError array are only valid until collectiveResponseCallback returns. */
1473typedef std::function<void(
Wei Chen1d823b02018-12-14 16:22:17 -08001474 uint32_t count, // number of locations in arrays
Katz Yamada0fc49e82018-02-28 11:22:58 -08001475 LocationError* errs, // array of LocationError associated to the request
1476 uint32_t* ids // array of ids to be associated to the request
1477)> collectiveResponseCallback;
1478
1479/* Used for startTracking API, optional can be NULL
1480 trackingCallback is called when delivering a location in a tracking session
1481 broadcasted to all clients, no matter if a session has started by client */
1482typedef std::function<void(
1483 Location location
1484)> trackingCallback;
1485
1486/* Used for startBatching API, optional can be NULL
1487 batchingCallback is called when delivering locations in a batching session.
1488 broadcasted to all clients, no matter if a session has started by client */
1489typedef std::function<void(
Wei Chen1d823b02018-12-14 16:22:17 -08001490 uint32_t count, // number of locations in array
Katz Yamada0fc49e82018-02-28 11:22:58 -08001491 Location* location, // array of locations
1492 BatchingOptions batchingOptions // Batching options
1493)> batchingCallback;
1494
1495typedef std::function<void(
1496 BatchingStatusInfo batchingStatus, // batch status
1497 std::list<uint32_t> & listOfCompletedTrips
1498)> batchingStatusCallback;
1499
1500/* Gives GNSS Location information, optional can be NULL
1501 gnssLocationInfoCallback is called only during a tracking session
1502 broadcasted to all clients, no matter if a session has started by client */
1503typedef std::function<void(
1504 GnssLocationInfoNotification gnssLocationInfoNotification
1505)> gnssLocationInfoCallback;
1506
Wei Chena28f8132019-07-18 15:50:55 -07001507/* Gives default combined location information from all engines and
1508 location information individually from selected engines.
1509 This callback is only used when there are multiple engines
1510 running in the system.
1511
1512 optional can be NULL
1513
1514 engineLocationsInfoCallback is called only during a tracking session
1515 broadcasted to all clients, no matter if a session has started by client */
1516typedef std::function<void(
1517 uint32_t count,
1518 GnssLocationInfoNotification* engineLocationInfoNotification
1519)> engineLocationsInfoCallback;
1520
Katz Yamada0fc49e82018-02-28 11:22:58 -08001521/* Used for addGeofences API, optional can be NULL
1522 geofenceBreachCallback is called when any number of geofences have a state change */
1523typedef std::function<void(
1524 GeofenceBreachNotification geofenceBreachNotification
1525)> geofenceBreachCallback;
1526
1527/* Used for addGeofences API, optional can be NULL
1528 geofenceStatusCallback is called when any number of geofences have a status change */
1529typedef std::function<void(
1530 GeofenceStatusNotification geofenceStatusNotification
1531)> geofenceStatusCallback;
1532
1533/* Network Initiated request, optional can be NULL
1534 This callback should be responded to by calling gnssNiResponse */
1535typedef std::function<void(
1536 uint32_t id, // id that should be used to respond by calling gnssNiResponse
1537 GnssNiNotification gnssNiNotification
1538)> gnssNiCallback;
1539
1540/* Gives GNSS SV information, optional can be NULL
1541 gnssSvCallback is called only during a tracking session
1542 broadcasted to all clients, no matter if a session has started by client */
1543typedef std::function<void(
1544 GnssSvNotification gnssSvNotification
1545)> gnssSvCallback;
1546
1547/* Gives GNSS NMEA data, optional can be NULL
1548 gnssNmeaCallback is called only during a tracking session
1549 broadcasted to all clients, no matter if a session has started by client */
1550typedef std::function<void(
1551 GnssNmeaNotification gnssNmeaNotification
1552)> gnssNmeaCallback;
1553
Mike Cailean75cfd432018-06-07 16:54:35 -07001554/* Gives GNSS data, optional can be NULL
1555 gnssDataCallback is called only during a tracking session
1556 broadcasted to all clients, no matter if a session has started by client */
1557typedef std::function<void(
1558 GnssDataNotification gnssDataNotification
1559)> gnssDataCallback;
1560
Katz Yamada0fc49e82018-02-28 11:22:58 -08001561/* Gives GNSS Measurements information, optional can be NULL
1562 gnssMeasurementsCallback is called only during a tracking session
1563 broadcasted to all clients, no matter if a session has started by client */
1564typedef std::function<void(
1565 GnssMeasurementsNotification gnssMeasurementsNotification
1566)> gnssMeasurementsCallback;
1567
Wei Chen87a7fc02019-12-19 09:58:09 -08001568/* Gives GNSS SV poly information, optional can be NULL
1569 gnssSvPolyCallback is called only during a tracking session
1570 broadcasted to all clients that registers for the poly */
1571typedef std::function<void(
1572 GnssSvPolynomial gnssSvPolynomialNotification
1573)> gnssSvPolynomialCallback;
1574
1575
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301576/* Provides the current GNSS configuration to the client */
1577typedef std::function<void(
1578 GnssConfig& config
1579)> gnssConfigCallback;
1580
Wei Chen21b9c4e2018-09-19 10:59:28 -07001581/* LocationSystemInfoCb is for receiving rare occuring location
1582 system information update. optional, can be NULL.
1583*/
1584typedef std::function<void(
1585 LocationSystemInfo locationSystemInfo
1586)> locationSystemInfoCallback;
1587
Wei Chene2329862018-11-15 09:41:26 -08001588typedef std::function<void(
1589)> locationApiDestroyCompleteCallback;
1590
Bhavna Sharma49c60ab2019-01-24 16:18:38 -08001591typedef uint16_t LocationAdapterTypeMask;
1592typedef enum {
1593 LOCATION_ADAPTER_GNSS_TYPE_BIT = (1<<0), // adapter type is GNSS
1594 LOCATION_ADAPTER_FLP_TYPE_BIT = (1<<1), // adapter type is FLP
1595 LOCATION_ADAPTER_GEOFENCE_TYPE_BIT = (1<<2) // adapter type is geo fence
1596} LocationAdapterTypeBits;
1597
Katz Yamada0fc49e82018-02-28 11:22:58 -08001598typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001599 uint32_t size; // set to sizeof(LocationCallbacks)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001600 capabilitiesCallback capabilitiesCb; // mandatory
1601 responseCallback responseCb; // mandatory
1602 collectiveResponseCallback collectiveResponseCb; // mandatory
1603 trackingCallback trackingCb; // optional
1604 batchingCallback batchingCb; // optional
1605 geofenceBreachCallback geofenceBreachCb; // optional
1606 geofenceStatusCallback geofenceStatusCb; // optional
1607 gnssLocationInfoCallback gnssLocationInfoCb; // optional
1608 gnssNiCallback gnssNiCb; // optional
1609 gnssSvCallback gnssSvCb; // optional
1610 gnssNmeaCallback gnssNmeaCb; // optional
Mike Cailean75cfd432018-06-07 16:54:35 -07001611 gnssDataCallback gnssDataCb; // optional
Katz Yamada0fc49e82018-02-28 11:22:58 -08001612 gnssMeasurementsCallback gnssMeasurementsCb; // optional
1613 batchingStatusCallback batchingStatusCb; // optional
Wei Chen21b9c4e2018-09-19 10:59:28 -07001614 locationSystemInfoCallback locationSystemInfoCb; // optional
Wei Chena28f8132019-07-18 15:50:55 -07001615 engineLocationsInfoCallback engineLocationsInfoCb; // optional
Wei Chen87a7fc02019-12-19 09:58:09 -08001616 gnssSvPolynomialCallback gnssSvPolynomialCb; // optional
Katz Yamada0fc49e82018-02-28 11:22:58 -08001617} LocationCallbacks;
1618
1619#endif /* LOCATIONDATATYPES_H */