blob: 0a2c06084b7be7e5d6866b1e7505f9f80f8aba2d [file] [log] [blame]
Mike Caileane7872802019-01-25 10:15:19 -08001/* Copyright (c) 2018-2019 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)
Bhavna Sharma21249412018-07-17 14:48:32 -070040#define GNSS_SV_MAX (176)
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
Mike Cailean4149abc2019-02-04 16:28:51 -080051#define GNSS_MAX_NAME_LENGTH (8)
52
Katz Yamada0fc49e82018-02-28 11:22:58 -080053typedef enum {
54 LOCATION_ERROR_SUCCESS = 0,
55 LOCATION_ERROR_GENERAL_FAILURE,
56 LOCATION_ERROR_CALLBACK_MISSING,
57 LOCATION_ERROR_INVALID_PARAMETER,
58 LOCATION_ERROR_ID_EXISTS,
59 LOCATION_ERROR_ID_UNKNOWN,
60 LOCATION_ERROR_ALREADY_STARTED,
61 LOCATION_ERROR_GEOFENCES_AT_MAX,
62 LOCATION_ERROR_NOT_SUPPORTED
63} LocationError;
64
65// Flags to indicate which values are valid in a Location
66typedef uint16_t LocationFlagsMask;
67typedef enum {
68 LOCATION_HAS_LAT_LONG_BIT = (1<<0), // location has valid latitude and longitude
69 LOCATION_HAS_ALTITUDE_BIT = (1<<1), // location has valid altitude
70 LOCATION_HAS_SPEED_BIT = (1<<2), // location has valid speed
71 LOCATION_HAS_BEARING_BIT = (1<<3), // location has valid bearing
72 LOCATION_HAS_ACCURACY_BIT = (1<<4), // location has valid accuracy
73 LOCATION_HAS_VERTICAL_ACCURACY_BIT = (1<<5), // location has valid vertical accuracy
74 LOCATION_HAS_SPEED_ACCURACY_BIT = (1<<6), // location has valid speed accuracy
75 LOCATION_HAS_BEARING_ACCURACY_BIT = (1<<7), // location has valid bearing accuracy
haohuang17015dd2018-04-16 15:12:49 +080076 LOCATION_HAS_SPOOF_MASK = (1<<8), // location has valid spoof mask
Katz Yamada0fc49e82018-02-28 11:22:58 -080077} LocationFlagsBits;
78
79typedef uint16_t LocationTechnologyMask;
80typedef enum {
81 LOCATION_TECHNOLOGY_GNSS_BIT = (1<<0), // location was calculated using GNSS
82 LOCATION_TECHNOLOGY_CELL_BIT = (1<<1), // location was calculated using Cell
83 LOCATION_TECHNOLOGY_WIFI_BIT = (1<<2), // location was calculated using WiFi
84 LOCATION_TECHNOLOGY_SENSORS_BIT = (1<<3), // location was calculated using Sensors
85} LocationTechnologyBits;
86
haohuang17015dd2018-04-16 15:12:49 +080087typedef uint32_t LocationSpoofMask;
88typedef enum {
89 LOCATION_POSTION_SPOOFED = (1<<0), // location position spoofed
90 LOCATION_TIME_SPOOFED = (1<<1), // location time spoofed
91 LOCATION_NAVIGATION_DATA_SPOOFED = (1<<2), // location navigation data spoofed
92} LocationSpoofBits;
93
Katz Yamada0fc49e82018-02-28 11:22:58 -080094typedef enum {
95 LOCATION_RELIABILITY_NOT_SET = 0,
96 LOCATION_RELIABILITY_VERY_LOW,
97 LOCATION_RELIABILITY_LOW,
98 LOCATION_RELIABILITY_MEDIUM,
99 LOCATION_RELIABILITY_HIGH,
100} LocationReliability;
101
102typedef uint32_t GnssLocationNavSolutionMask;
103typedef enum {
104 LOCATION_SBAS_CORRECTION_IONO_BIT = (1<<0), // SBAS ionospheric correction is used
105 LOCATION_SBAS_CORRECTION_FAST_BIT = (1<<1), // SBAS fast correction is used
106 LOCATION_SBAS_CORRECTION_LONG_BIT = (1<<2), // SBAS long-tem correction is used
107 LOCATION_SBAS_INTEGRITY_BIT = (1<<3), // SBAS integrity information is used
108 LOCATION_NAV_CORRECTION_DGNSS_BIT = (1<<4), // Position Report is DGNSS corrected
109 LOCATION_NAV_CORRECTION_RTK_BIT = (1<<5), // Position Report is RTK corrected
110 LOCATION_NAV_CORRECTION_PPP_BIT = (1<<6) // Position Report is PPP corrected
111} GnssLocationNavSolutionBits;
112
113typedef uint32_t GnssLocationPosTechMask;
114typedef enum {
115 LOCATION_POS_TECH_DEFAULT_BIT = 0,
116 LOCATION_POS_TECH_SATELLITE_BIT = (1<<0),
117 LOCATION_POS_TECH_CELLID_BIT = (1<<1),
118 LOCATION_POS_TECH_WIFI_BIT = (1<<2),
119 LOCATION_POS_TECH_SENSORS_BIT = (1<<3),
120 LOCATION_POS_TECH_REFERENCE_LOCATION_BIT = (1<<4),
121 LOCATION_POS_TECH_INJECTED_COARSE_POSITION_BIT = (1<<5),
122 LOCATION_POS_TECH_AFLT_BIT = (1<<6),
123 LOCATION_POS_TECH_HYBRID_BIT = (1<<7),
124 LOCATION_POS_TECH_PPE_BIT = (1<<8)
125} GnssLocationPosTechBits;
126
127typedef uint32_t GnssLocationPosDataMask;
128typedef enum {
129 LOCATION_NAV_DATA_HAS_LONG_ACCEL_BIT = (1<<0), // Navigation data has Forward Acceleration
130 LOCATION_NAV_DATA_HAS_LAT_ACCEL_BIT = (1<<1), // Navigation data has Sideward Acceleration
131 LOCATION_NAV_DATA_HAS_VERT_ACCEL_BIT = (1<<2), // Navigation data has Vertical Acceleration
132 LOCATION_NAV_DATA_HAS_YAW_RATE_BIT = (1<<3), // Navigation data has Heading Rate
Naresh Munagala02cddf02018-06-21 10:44:51 +0530133 LOCATION_NAV_DATA_HAS_PITCH_BIT = (1<<4), // Navigation data has Body pitch
134 // Navigation data has Forward Acceleration uncertainty
135 LOCATION_NAV_DATA_HAS_LONG_ACCEL_UNC_BIT = (1<<5),
136 // Navigation data has Sideward Acceleration uncertainty
137 LOCATION_NAV_DATA_HAS_LAT_ACCEL_UNC_BIT = (1<<6),
138 // Navigation data has Vertical Acceleration uncertainty
139 LOCATION_NAV_DATA_HAS_VERT_ACCEL_UNC_BIT = (1<<7),
140 // Navigation data has Heading Rate uncertainty
141 LOCATION_NAV_DATA_HAS_YAW_RATE_UNC_BIT = (1<<8),
142 // Navigation data has Body pitch uncertainty
143 LOCATION_NAV_DATA_HAS_PITCH_UNC_BIT = (1<<9)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800144} GnssLocationPosDataBits;
145
146typedef uint32_t GnssLocationInfoFlagMask;
147typedef enum {
148 GNSS_LOCATION_INFO_ALTITUDE_MEAN_SEA_LEVEL_BIT = (1<<0), // valid altitude mean sea level
149 GNSS_LOCATION_INFO_DOP_BIT = (1<<1), // valid pdop, hdop, and vdop
150 GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT = (1<<2), // valid magnetic deviation
151 GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT = (1<<3), // valid horizontal reliability
152 GNSS_LOCATION_INFO_VER_RELIABILITY_BIT = (1<<4), // valid vertical reliability
153 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MAJOR_BIT = (1<<5), // valid elipsode semi major
154 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MINOR_BIT = (1<<6), // valid elipsode semi minor
155 GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_AZIMUTH_BIT = (1<<7), // valid accuracy elipsode azimuth
156 GNSS_LOCATION_INFO_GNSS_SV_USED_DATA_BIT = (1<<8), // valid gnss sv used in pos data
157 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
171 GNSS_LOCATION_INFO_TIME_UNC_BIT = (1<<23) // valid time uncertainty
Katz Yamada0fc49e82018-02-28 11:22:58 -0800172} GnssLocationInfoFlagBits;
173
174typedef enum {
175 GEOFENCE_BREACH_ENTER = 0,
176 GEOFENCE_BREACH_EXIT,
177 GEOFENCE_BREACH_DWELL_IN,
178 GEOFENCE_BREACH_DWELL_OUT,
179 GEOFENCE_BREACH_UNKNOWN,
180} GeofenceBreachType;
181
182typedef uint16_t GeofenceBreachTypeMask;
183typedef enum {
184 GEOFENCE_BREACH_ENTER_BIT = (1<<0),
185 GEOFENCE_BREACH_EXIT_BIT = (1<<1),
186 GEOFENCE_BREACH_DWELL_IN_BIT = (1<<2),
187 GEOFENCE_BREACH_DWELL_OUT_BIT = (1<<3),
188} GeofenceBreachTypeBits;
189
190typedef enum {
191 GEOFENCE_STATUS_AVAILABILE_NO = 0,
192 GEOFENCE_STATUS_AVAILABILE_YES,
193} GeofenceStatusAvailable;
194
195typedef uint32_t LocationCapabilitiesMask;
196typedef enum {
197 // supports startTracking API with minInterval param
198 LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT = (1<<0),
199 // supports startBatching API with minInterval param
200 LOCATION_CAPABILITIES_TIME_BASED_BATCHING_BIT = (1<<1),
201 // supports startTracking API with minDistance param
202 LOCATION_CAPABILITIES_DISTANCE_BASED_TRACKING_BIT = (1<<2),
203 // supports startBatching API with minDistance param
204 LOCATION_CAPABILITIES_DISTANCE_BASED_BATCHING_BIT = (1<<3),
205 // supports addGeofences API
206 LOCATION_CAPABILITIES_GEOFENCE_BIT = (1<<4),
207 // supports GnssMeasurementsCallback
208 LOCATION_CAPABILITIES_GNSS_MEASUREMENTS_BIT = (1<<5),
209 // supports startTracking/startBatching API with LocationOptions.mode of MSB (Ms Based)
210 LOCATION_CAPABILITIES_GNSS_MSB_BIT = (1<<6),
211 // supports startTracking/startBatching API with LocationOptions.mode of MSA (MS Assisted)
212 LOCATION_CAPABILITIES_GNSS_MSA_BIT = (1<<7),
213 // supports debug nmea sentences in the debugNmeaCallback
214 LOCATION_CAPABILITIES_DEBUG_NMEA_BIT = (1<<8),
215 // support outdoor trip batching
Dante Russo271cfd82018-06-04 16:55:56 -0700216 LOCATION_CAPABILITIES_OUTDOOR_TRIP_BATCHING_BIT = (1<<9),
217 // support constellation enablement
218 LOCATION_CAPABILITIES_CONSTELLATION_ENABLEMENT_BIT = (1<<10),
219 // support agpm
220 LOCATION_CAPABILITIES_AGPM_BIT = (1<<11),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800221} LocationCapabilitiesBits;
222
223typedef enum {
224 LOCATION_TECHNOLOGY_TYPE_GNSS = 0,
225} LocationTechnologyType;
226
227// Configures how GPS is locked when GPS is disabled (through GnssDisable)
Hoss Zhou1839fb12018-12-20 15:05:08 +0800228enum {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800229 GNSS_CONFIG_GPS_LOCK_NONE = 0, // gps is not locked when GPS is disabled (GnssDisable)
230 GNSS_CONFIG_GPS_LOCK_MO, // gps mobile originated (MO) is locked when GPS is disabled
231 GNSS_CONFIG_GPS_LOCK_NI, // gps network initiated (NI) is locked when GPS is disabled
232 GNSS_CONFIG_GPS_LOCK_MO_AND_NI,// gps MO and NI is locked when GPS is disabled
Hoss Zhou1839fb12018-12-20 15:05:08 +0800233};
234typedef int32_t GnssConfigGpsLock;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800235
236// SUPL version
237typedef enum {
238 GNSS_CONFIG_SUPL_VERSION_1_0_0 = 1,
239 GNSS_CONFIG_SUPL_VERSION_2_0_0,
240 GNSS_CONFIG_SUPL_VERSION_2_0_2,
241} GnssConfigSuplVersion;
242
243// LTE Positioning Profile
244typedef enum {
245 GNSS_CONFIG_LPP_PROFILE_RRLP_ON_LTE = 0, // RRLP on LTE (Default)
246 GNSS_CONFIG_LPP_PROFILE_USER_PLANE, // LPP User Plane (UP) on LTE
247 GNSS_CONFIG_LPP_PROFILE_CONTROL_PLANE, // LPP_Control_Plane (CP)
248 GNSS_CONFIG_LPP_PROFILE_USER_PLANE_AND_CONTROL_PLANE, // Both LPP UP and CP
249} GnssConfigLppProfile;
250
251// Technology for LPPe Control Plane
252typedef uint16_t GnssConfigLppeControlPlaneMask;
253typedef enum {
254 GNSS_CONFIG_LPPE_CONTROL_PLANE_DBH_BIT = (1<<0), // DBH
255 GNSS_CONFIG_LPPE_CONTROL_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS
256 GNSS_CONFIG_LPPE_CONTROL_PLANE_SRN_AP_MEASUREMENTS_BIT = (1<<2), // SRN_AP_MEASUREMENTS
257 GNSS_CONFIG_LPPE_CONTROL_PLANE_SENSOR_BARO_MEASUREMENTS_BIT = (1<<3),
258 // SENSOR_BARO_MEASUREMENTS
259} GnssConfigLppeControlPlaneBits;
260
261// Technology for LPPe User Plane
262typedef uint16_t GnssConfigLppeUserPlaneMask;
263typedef enum {
264 GNSS_CONFIG_LPPE_USER_PLANE_DBH_BIT = (1<<0), // DBH
265 GNSS_CONFIG_LPPE_USER_PLANE_WLAN_AP_MEASUREMENTS_BIT = (1<<1), // WLAN_AP_MEASUREMENTS
266 GNSS_CONFIG_LPPE_USER_PLANE_SRN_AP_MEASUREMENTS_BIT = (1<<2), // SRN_AP_MEASUREMENTS
267 GNSS_CONFIG_LPPE_USER_PLANE_SENSOR_BARO_MEASUREMENTS_BIT = (1<<3),
268 // SENSOR_BARO_MEASUREMENTS
269} GnssConfigLppeUserPlaneBits;
270
271// Positioning Protocol on A-GLONASS system
272typedef uint16_t GnssConfigAGlonassPositionProtocolMask;
273typedef enum {
274 GNSS_CONFIG_RRC_CONTROL_PLANE_BIT = (1<<0), // RRC Control Plane
275 GNSS_CONFIG_RRLP_USER_PLANE_BIT = (1<<1), // RRLP User Plane
276 GNSS_CONFIG_LLP_USER_PLANE_BIT = (1<<2), // LPP User Plane
277 GNSS_CONFIG_LLP_CONTROL_PLANE_BIT = (1<<3), // LPP Control Plane
278} GnssConfigAGlonassPositionProtocolBits;
279
280typedef enum {
281 GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_NO = 0,
282 GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_YES,
283} GnssConfigEmergencyPdnForEmergencySupl;
284
285typedef enum {
286 GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_NO = 0,
287 GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_YES,
288} GnssConfigSuplEmergencyServices;
289
290typedef uint16_t GnssConfigSuplModeMask;
291typedef enum {
292 GNSS_CONFIG_SUPL_MODE_MSB_BIT = (1<<0),
293 GNSS_CONFIG_SUPL_MODE_MSA_BIT = (1<<1),
294} GnssConfigSuplModeBits;
295
296typedef uint32_t GnssConfigFlagsMask;
297typedef enum {
298 GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT = (1<<0),
299 GNSS_CONFIG_FLAGS_SUPL_VERSION_VALID_BIT = (1<<1),
300 GNSS_CONFIG_FLAGS_SET_ASSISTANCE_DATA_VALID_BIT = (1<<2),
301 GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT = (1<<3),
302 GNSS_CONFIG_FLAGS_LPPE_CONTROL_PLANE_VALID_BIT = (1<<4),
303 GNSS_CONFIG_FLAGS_LPPE_USER_PLANE_VALID_BIT = (1<<5),
304 GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT = (1<<6),
305 GNSS_CONFIG_FLAGS_EM_PDN_FOR_EM_SUPL_VALID_BIT = (1<<7),
306 GNSS_CONFIG_FLAGS_SUPL_EM_SERVICES_BIT = (1<<8),
307 GNSS_CONFIG_FLAGS_SUPL_MODE_BIT = (1<<9),
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +0530308 GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT = (1<<10),
Mike Caileanb0462412019-02-11 09:11:09 -0800309 GNSS_CONFIG_FLAGS_EMERGENCY_EXTENSION_SECONDS_BIT = (1<<11),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800310} GnssConfigFlagsBits;
311
312typedef enum {
313 GNSS_NI_ENCODING_TYPE_NONE = 0,
314 GNSS_NI_ENCODING_TYPE_GSM_DEFAULT,
315 GNSS_NI_ENCODING_TYPE_UTF8,
316 GNSS_NI_ENCODING_TYPE_UCS2,
317} GnssNiEncodingType;
318
319typedef enum {
320 GNSS_NI_TYPE_VOICE = 0,
321 GNSS_NI_TYPE_SUPL,
322 GNSS_NI_TYPE_CONTROL_PLANE,
323 GNSS_NI_TYPE_EMERGENCY_SUPL
324} GnssNiType;
325
326typedef uint16_t GnssNiOptionsMask;
327typedef enum {
328 GNSS_NI_OPTIONS_NOTIFICATION_BIT = (1<<0),
329 GNSS_NI_OPTIONS_VERIFICATION_BIT = (1<<1),
330 GNSS_NI_OPTIONS_PRIVACY_OVERRIDE_BIT = (1<<2),
331} GnssNiOptionsBits;
332
333typedef enum {
334 GNSS_NI_RESPONSE_ACCEPT = 1,
335 GNSS_NI_RESPONSE_DENY,
336 GNSS_NI_RESPONSE_NO_RESPONSE,
337 GNSS_NI_RESPONSE_IGNORE,
338} GnssNiResponse;
339
340typedef enum {
341 GNSS_SV_TYPE_UNKNOWN = 0,
342 GNSS_SV_TYPE_GPS,
343 GNSS_SV_TYPE_SBAS,
344 GNSS_SV_TYPE_GLONASS,
345 GNSS_SV_TYPE_QZSS,
346 GNSS_SV_TYPE_BEIDOU,
347 GNSS_SV_TYPE_GALILEO,
348} GnssSvType;
349
350typedef enum {
351 GNSS_EPH_TYPE_UNKNOWN = 0,
352 GNSS_EPH_TYPE_EPHEMERIS,
353 GNSS_EPH_TYPE_ALMANAC,
354} GnssEphemerisType;
355
356typedef enum {
357 GNSS_EPH_SOURCE_UNKNOWN = 0,
358 GNSS_EPH_SOURCE_DEMODULATED,
359 GNSS_EPH_SOURCE_SUPL_PROVIDED,
360 GNSS_EPH_SOURCE_OTHER_SERVER_PROVIDED,
361 GNSS_EPH_SOURCE_LOCAL,
362} GnssEphemerisSource;
363
364typedef enum {
365 GNSS_EPH_HEALTH_UNKNOWN = 0,
366 GNSS_EPH_HEALTH_GOOD,
367 GNSS_EPH_HEALTH_BAD,
368} GnssEphemerisHealth;
369
370typedef uint16_t GnssSvOptionsMask;
371typedef enum {
Mike Cailean7dfa87b2018-02-06 16:36:27 -0800372 GNSS_SV_OPTIONS_HAS_EPHEMER_BIT = (1<<0),
373 GNSS_SV_OPTIONS_HAS_ALMANAC_BIT = (1<<1),
374 GNSS_SV_OPTIONS_USED_IN_FIX_BIT = (1<<2),
375 GNSS_SV_OPTIONS_HAS_CARRIER_FREQUENCY_BIT = (1<<3),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800376} GnssSvOptionsBits;
377
378typedef enum {
379 GNSS_ASSISTANCE_TYPE_SUPL = 0,
380 GNSS_ASSISTANCE_TYPE_C2K,
Mike Caileane7872802019-01-25 10:15:19 -0800381 GNSS_ASSISTANCE_TYPE_SUPL_EIMS,
382 GNSS_ASSISTANCE_TYPE_SUPL_IMS,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800383} GnssAssistanceType;
384
385typedef enum {
386 GNSS_SUPL_MODE_STANDALONE = 0,
387 GNSS_SUPL_MODE_MSB,
388 GNSS_SUPL_MODE_MSA,
389} GnssSuplMode;
390
391typedef enum {
392 BATCHING_MODE_ROUTINE = 0, // positions are reported when batched positions memory is full
393 BATCHING_MODE_TRIP, // positions are reported when a certain distance is covered
394 BATCHING_MODE_NO_AUTO_REPORT // no report of positions automatically, instead queried on demand
395} BatchingMode;
396
397typedef enum {
398 BATCHING_STATUS_TRIP_COMPLETED = 0,
399 BATCHING_STATUS_POSITION_AVAILABE,
400 BATCHING_STATUS_POSITION_UNAVAILABLE
401} BatchingStatus;
402
403typedef uint16_t GnssMeasurementsAdrStateMask;
404typedef enum {
Mike Cailean4149abc2019-02-04 16:28:51 -0800405 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_UNKNOWN = 0,
406 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_VALID_BIT = (1<<0),
407 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_RESET_BIT = (1<<1),
408 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_CYCLE_SLIP_BIT = (1<<2),
409 GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_HALF_CYCLE_RESOLVED_BIT = (1<<3),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800410} GnssMeasurementsAdrStateBits;
411
Mike Cailean4149abc2019-02-04 16:28:51 -0800412typedef enum {
413 GNSS_MEASUREMENTS_CODE_TYPE_A = 0,
414 GNSS_MEASUREMENTS_CODE_TYPE_B = 1,
415 GNSS_MEASUREMENTS_CODE_TYPE_C = 2,
416 GNSS_MEASUREMENTS_CODE_TYPE_I = 3,
417 GNSS_MEASUREMENTS_CODE_TYPE_L = 4,
418 GNSS_MEASUREMENTS_CODE_TYPE_M = 5,
419 GNSS_MEASUREMENTS_CODE_TYPE_P = 6,
420 GNSS_MEASUREMENTS_CODE_TYPE_Q = 7,
421 GNSS_MEASUREMENTS_CODE_TYPE_S = 8,
422 GNSS_MEASUREMENTS_CODE_TYPE_W = 9,
423 GNSS_MEASUREMENTS_CODE_TYPE_X = 10,
424 GNSS_MEASUREMENTS_CODE_TYPE_Y = 11,
425 GNSS_MEASUREMENTS_CODE_TYPE_Z = 12,
426 GNSS_MEASUREMENTS_CODE_TYPE_N = 13,
427 GNSS_MEASUREMENTS_CODE_TYPE_OTHER = 255,
428} GnssMeasurementsCodeType;
429
Katz Yamada0fc49e82018-02-28 11:22:58 -0800430typedef uint32_t GnssMeasurementsDataFlagsMask;
431typedef enum {
432 GNSS_MEASUREMENTS_DATA_SV_ID_BIT = (1<<0),
433 GNSS_MEASUREMENTS_DATA_SV_TYPE_BIT = (1<<1),
434 GNSS_MEASUREMENTS_DATA_STATE_BIT = (1<<2),
435 GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_BIT = (1<<3),
436 GNSS_MEASUREMENTS_DATA_RECEIVED_SV_TIME_UNCERTAINTY_BIT = (1<<4),
437 GNSS_MEASUREMENTS_DATA_CARRIER_TO_NOISE_BIT = (1<<5),
438 GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_BIT = (1<<6),
439 GNSS_MEASUREMENTS_DATA_PSEUDORANGE_RATE_UNCERTAINTY_BIT = (1<<7),
440 GNSS_MEASUREMENTS_DATA_ADR_STATE_BIT = (1<<8),
441 GNSS_MEASUREMENTS_DATA_ADR_BIT = (1<<9),
442 GNSS_MEASUREMENTS_DATA_ADR_UNCERTAINTY_BIT = (1<<10),
443 GNSS_MEASUREMENTS_DATA_CARRIER_FREQUENCY_BIT = (1<<11),
444 GNSS_MEASUREMENTS_DATA_CARRIER_CYCLES_BIT = (1<<12),
445 GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_BIT = (1<<13),
446 GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_UNCERTAINTY_BIT = (1<<14),
447 GNSS_MEASUREMENTS_DATA_MULTIPATH_INDICATOR_BIT = (1<<15),
448 GNSS_MEASUREMENTS_DATA_SIGNAL_TO_NOISE_RATIO_BIT = (1<<16),
449 GNSS_MEASUREMENTS_DATA_AUTOMATIC_GAIN_CONTROL_BIT = (1<<17),
450} GnssMeasurementsDataFlagsBits;
451
452typedef uint32_t GnssMeasurementsStateMask;
453typedef enum {
454 GNSS_MEASUREMENTS_STATE_UNKNOWN_BIT = 0,
455 GNSS_MEASUREMENTS_STATE_CODE_LOCK_BIT = (1<<0),
456 GNSS_MEASUREMENTS_STATE_BIT_SYNC_BIT = (1<<1),
457 GNSS_MEASUREMENTS_STATE_SUBFRAME_SYNC_BIT = (1<<2),
458 GNSS_MEASUREMENTS_STATE_TOW_DECODED_BIT = (1<<3),
459 GNSS_MEASUREMENTS_STATE_MSEC_AMBIGUOUS_BIT = (1<<4),
460 GNSS_MEASUREMENTS_STATE_SYMBOL_SYNC_BIT = (1<<5),
461 GNSS_MEASUREMENTS_STATE_GLO_STRING_SYNC_BIT = (1<<6),
462 GNSS_MEASUREMENTS_STATE_GLO_TOD_DECODED_BIT = (1<<7),
463 GNSS_MEASUREMENTS_STATE_BDS_D2_BIT_SYNC_BIT = (1<<8),
464 GNSS_MEASUREMENTS_STATE_BDS_D2_SUBFRAME_SYNC_BIT = (1<<9),
465 GNSS_MEASUREMENTS_STATE_GAL_E1BC_CODE_LOCK_BIT = (1<<10),
466 GNSS_MEASUREMENTS_STATE_GAL_E1C_2ND_CODE_LOCK_BIT = (1<<11),
467 GNSS_MEASUREMENTS_STATE_GAL_E1B_PAGE_SYNC_BIT = (1<<12),
468 GNSS_MEASUREMENTS_STATE_SBAS_SYNC_BIT = (1<<13),
Mike Cailean4149abc2019-02-04 16:28:51 -0800469 GNSS_MEASUREMENTS_STATE_TOW_KNOWN_BIT = (1<<14),
470 GNSS_MEASUREMENTS_STATE_GLO_TOD_KNOWN_BIT = (1<<15),
471 GNSS_MEASUREMENTS_STATE_2ND_CODE_LOCK_BIT = (1<<16),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800472} GnssMeasurementsStateBits;
473
474typedef enum {
475 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_UNKNOWN = 0,
476 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_PRESENT,
477 GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_NOT_PRESENT,
478} GnssMeasurementsMultipathIndicator;
479
480typedef uint32_t GnssMeasurementsClockFlagsMask;
481typedef enum {
482 GNSS_MEASUREMENTS_CLOCK_FLAGS_LEAP_SECOND_BIT = (1<<0),
483 GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_BIT = (1<<1),
484 GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_UNCERTAINTY_BIT = (1<<2),
485 GNSS_MEASUREMENTS_CLOCK_FLAGS_FULL_BIAS_BIT = (1<<3),
486 GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_BIT = (1<<4),
487 GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_UNCERTAINTY_BIT = (1<<5),
488 GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_BIT = (1<<6),
489 GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_UNCERTAINTY_BIT = (1<<7),
490 GNSS_MEASUREMENTS_CLOCK_FLAGS_HW_CLOCK_DISCONTINUITY_COUNT_BIT = (1<<8),
491} GnssMeasurementsClockFlagsBits;
492
493typedef uint32_t GnssAidingDataSvMask;
494typedef enum {
495 GNSS_AIDING_DATA_SV_EPHEMERIS_BIT = (1<<0), // ephemeris
496 GNSS_AIDING_DATA_SV_ALMANAC_BIT = (1<<1), // almanac
497 GNSS_AIDING_DATA_SV_HEALTH_BIT = (1<<2), // health
498 GNSS_AIDING_DATA_SV_DIRECTION_BIT = (1<<3), // direction
499 GNSS_AIDING_DATA_SV_STEER_BIT = (1<<4), // steer
500 GNSS_AIDING_DATA_SV_ALMANAC_CORR_BIT = (1<<5), // almanac correction
501 GNSS_AIDING_DATA_SV_BLACKLIST_BIT = (1<<6), // blacklist SVs
502 GNSS_AIDING_DATA_SV_SA_DATA_BIT = (1<<7), // sensitivity assistance data
503 GNSS_AIDING_DATA_SV_NO_EXIST_BIT = (1<<8), // SV does not exist
504 GNSS_AIDING_DATA_SV_IONOSPHERE_BIT = (1<<9), // ionosphere correction
505 GNSS_AIDING_DATA_SV_TIME_BIT = (1<<10),// reset satellite time
Bhavna Sharma5a8d1712018-08-22 09:45:25 -0700506 GNSS_AIDING_DATA_SV_MB_DATA = (1<<11),// delete multiband data
507 GNSS_AIDING_DATA_SV_POLY_BIT = (1<<12),// poly
Katz Yamada0fc49e82018-02-28 11:22:58 -0800508} GnssAidingDataSvBits;
509
510typedef uint32_t GnssAidingDataSvTypeMask;
511typedef enum {
512 GNSS_AIDING_DATA_SV_TYPE_GPS_BIT = (1<<0),
513 GNSS_AIDING_DATA_SV_TYPE_GLONASS_BIT = (1<<1),
514 GNSS_AIDING_DATA_SV_TYPE_QZSS_BIT = (1<<2),
515 GNSS_AIDING_DATA_SV_TYPE_BEIDOU_BIT = (1<<3),
516 GNSS_AIDING_DATA_SV_TYPE_GALILEO_BIT = (1<<4),
517} GnssAidingDataSvTypeBits;
518
Wei Chen8e04d012018-12-04 15:55:00 -0800519/* Gnss constellation type mask */
520typedef uint16_t GnssConstellationTypeMask;
521typedef enum {
522 GNSS_CONSTELLATION_TYPE_GPS_BIT = (1<<0),
523 GNSS_CONSTELLATION_TYPE_GLONASS_BIT = (1<<1),
524 GNSS_CONSTELLATION_TYPE_QZSS_BIT = (1<<2),
525 GNSS_CONSTELLATION_TYPE_BEIDOU_BIT = (1<<3),
526 GNSS_CONSTELLATION_TYPE_GALILEO_BIT = (1<<4),
527 GNSS_CONSTELLATION_TYPE_SBAS_BIT = (1<<5)
528} GnssConstellationTypeBits;
529
530#define GNSS_CONSTELLATION_TYPE_MASK_ALL\
531 (GNSS_CONSTELLATION_TYPE_GPS_BIT | GNSS_CONSTELLATION_TYPE_GLONASS_BIT |\
532 GNSS_CONSTELLATION_TYPE_QZSS_BIT | GNSS_CONSTELLATION_TYPE_BEIDOU_BIT |\
533 GNSS_CONSTELLATION_TYPE_GALILEO_BIT | GNSS_CONSTELLATION_TYPE_SBAS_BIT)
534
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700535/** GNSS Signal Type and RF Band */
536typedef uint32_t GnssSignalTypeMask;
537typedef enum {
538 /** GPS L1CA Signal */
539 GNSS_SIGNAL_GPS_L1CA = (1<<0),
540 /** GPS L1C Signal */
541 GNSS_SIGNAL_GPS_L1C = (1<<1),
542 /** GPS L2 RF Band */
543 GNSS_SIGNAL_GPS_L2 = (1<<2),
544 /** GPS L5 RF Band */
545 GNSS_SIGNAL_GPS_L5 = (1<<3),
546 /** GLONASS G1 (L1OF) RF Band */
547 GNSS_SIGNAL_GLONASS_G1 = (1<<4),
548 /** GLONASS G2 (L2OF) RF Band */
549 GNSS_SIGNAL_GLONASS_G2 = (1<<5),
550 /** GALILEO E1 RF Band */
551 GNSS_SIGNAL_GALILEO_E1 = (1<<6),
552 /** GALILEO E5A RF Band */
553 GNSS_SIGNAL_GALILEO_E5A = (1<<7),
554 /** GALILEO E5B RF Band */
Hoss Zhou48b4e042018-09-03 15:27:08 +0800555 GNSS_SIGNAL_GALILEO_E5B = (1<<8),
556 /** BEIDOU B1_I RF Band */
557 GNSS_SIGNAL_BEIDOU_B1I = (1<<9),
558 /** BEIDOU B1C RF Band */
559 GNSS_SIGNAL_BEIDOU_B1C = (1<<10),
560 /** BEIDOU B2_I RF Band */
561 GNSS_SIGNAL_BEIDOU_B2I = (1<<11),
562 /** BEIDOU B2A_I RF Band */
563 GNSS_SIGNAL_BEIDOU_B2AI = (1<<12),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700564 /** QZSS L1CA RF Band */
Hoss Zhou48b4e042018-09-03 15:27:08 +0800565 GNSS_SIGNAL_QZSS_L1CA = (1<<13),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700566 /** QZSS L1S RF Band */
Hoss Zhou48b4e042018-09-03 15:27:08 +0800567 GNSS_SIGNAL_QZSS_L1S = (1<<14),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700568 /** QZSS L2 RF Band */
Hoss Zhou48b4e042018-09-03 15:27:08 +0800569 GNSS_SIGNAL_QZSS_L2 = (1<<15),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700570 /** QZSS L5 RF Band */
Hoss Zhou48b4e042018-09-03 15:27:08 +0800571 GNSS_SIGNAL_QZSS_L5 = (1<<16),
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700572 /** SBAS L1 RF Band */
Hoss Zhou48b4e042018-09-03 15:27:08 +0800573 GNSS_SIGNAL_SBAS_L1 = (1<<17)
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700574} GnssSignalTypeBits;
575
Bhavna Sharma7445c502019-01-15 16:29:48 -0800576#define GNSS_SIGNAL_TYPE_MASK_ALL\
577 (GNSS_SIGNAL_GPS_L1CA | GNSS_SIGNAL_GPS_L1C | GNSS_SIGNAL_GPS_L2 |\
578 GNSS_SIGNAL_GPS_L5| GNSS_SIGNAL_GLONASS_G1 | GNSS_SIGNAL_GLONASS_G2 |\
579 GNSS_SIGNAL_GALILEO_E1 | GNSS_SIGNAL_GALILEO_E5A | GNSS_SIGNAL_GALILEO_E5B |\
580 GNSS_SIGNAL_BEIDOU_B1I | GNSS_SIGNAL_BEIDOU_B1C | GNSS_SIGNAL_BEIDOU_B2I|\
581 GNSS_SIGNAL_BEIDOU_B2AI | GNSS_SIGNAL_QZSS_L1CA | GNSS_SIGNAL_QZSS_L1S |\
582 GNSS_SIGNAL_QZSS_L2| GNSS_SIGNAL_QZSS_L5 | GNSS_SIGNAL_SBAS_L1)
583
Katz Yamada0fc49e82018-02-28 11:22:58 -0800584typedef enum
585{
Wei Chen8e04d012018-12-04 15:55:00 -0800586 GNSS_LOC_SV_SYSTEM_UNKNOWN = 0,
587 /** unknown sv system. */
Katz Yamada0fc49e82018-02-28 11:22:58 -0800588 GNSS_LOC_SV_SYSTEM_GPS = 1,
589 /**< GPS satellite. */
590 GNSS_LOC_SV_SYSTEM_GALILEO = 2,
591 /**< GALILEO satellite. */
592 GNSS_LOC_SV_SYSTEM_SBAS = 3,
593 /**< SBAS satellite. */
Wei Chen8e04d012018-12-04 15:55:00 -0800594 GNSS_LOC_SV_SYSTEM_GLONASS = 4,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800595 /**< GLONASS satellite. */
Wei Chen8e04d012018-12-04 15:55:00 -0800596 GNSS_LOC_SV_SYSTEM_BDS = 5,
Katz Yamada0fc49e82018-02-28 11:22:58 -0800597 /**< BDS satellite. */
Wei Chen8e04d012018-12-04 15:55:00 -0800598 GNSS_LOC_SV_SYSTEM_QZSS = 6
Katz Yamada0fc49e82018-02-28 11:22:58 -0800599 /**< QZSS satellite. */
600} Gnss_LocSvSystemEnumType;
601
Mike Cailean75cfd432018-06-07 16:54:35 -0700602typedef enum {
603 GNSS_LOC_SIGNAL_TYPE_GPS_L1CA = 0, /**< GPS L1CA Signal */
604 GNSS_LOC_SIGNAL_TYPE_GPS_L1C = 1, /**< GPS L1C Signal */
605 GNSS_LOC_SIGNAL_TYPE_GPS_L2C_L = 2, /**< GPS L2C_L RF Band */
606 GNSS_LOC_SIGNAL_TYPE_GPS_L5_Q = 3, /**< GPS L5_Q RF Band */
607 GNSS_LOC_SIGNAL_TYPE_GLONASS_G1 = 4, /**< GLONASS G1 (L1OF) RF Band */
608 GNSS_LOC_SIGNAL_TYPE_GLONASS_G2 = 5, /**< GLONASS G2 (L2OF) RF Band */
609 GNSS_LOC_SIGNAL_TYPE_GALILEO_E1_C = 6, /**< GALILEO E1_C RF Band */
610 GNSS_LOC_SIGNAL_TYPE_GALILEO_E5A_Q = 7, /**< GALILEO E5A_Q RF Band */
611 GNSS_LOC_SIGNAL_TYPE_GALILEO_E5B_Q = 8, /**< GALILEO E5B_Q RF Band */
612 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B1_I = 9, /**< BEIDOU B1_I RF Band */
613 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B1C = 10, /**< BEIDOU B1C RF Band */
614 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2_I = 11, /**< BEIDOU B2_I RF Band */
615 GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2A_I = 12, /**< BEIDOU B2A_I RF Band */
616 GNSS_LOC_SIGNAL_TYPE_QZSS_L1CA = 13, /**< QZSS L1CA RF Band */
617 GNSS_LOC_SIGNAL_TYPE_QZSS_L1S = 14, /**< QZSS L1S RF Band */
618 GNSS_LOC_SIGNAL_TYPE_QZSS_L2C_L = 15, /**< QZSS L2C_L RF Band */
619 GNSS_LOC_SIGNAL_TYPE_QZSS_L5_Q = 16, /**< QZSS L5_Q RF Band */
620 GNSS_LOC_SIGNAL_TYPE_SBAS_L1_CA = 17, /**< SBAS L1_CA RF Band */
621 GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES = 18 /**< Maximum number of signal types */
622} Gnss_LocSignalEnumType;
623
624typedef uint64_t GnssDataMask;
625typedef enum {
626 // Jammer Indicator is available
627 GNSS_LOC_DATA_JAMMER_IND_BIT = (1ULL << 0),
628 // AGC is available
629 GNSS_LOC_DATA_AGC_BIT = (1ULL << 1)
630} GnssDataBits;
631
Katz Yamada0fc49e82018-02-28 11:22:58 -0800632typedef uint32_t GnssSystemTimeStructTypeFlags;
633typedef enum {
634 GNSS_SYSTEM_TIME_WEEK_VALID = (1 << 0),
635 GNSS_SYSTEM_TIME_WEEK_MS_VALID = (1 << 1),
636 GNSS_SYSTEM_CLK_TIME_BIAS_VALID = (1 << 2),
637 GNSS_SYSTEM_CLK_TIME_BIAS_UNC_VALID = (1 << 3),
638 GNSS_SYSTEM_REF_FCOUNT_VALID = (1 << 4),
639 GNSS_SYSTEM_NUM_CLOCK_RESETS_VALID = (1 << 5)
640} GnssSystemTimeTypeBits;
641
642typedef uint32_t GnssGloTimeStructTypeFlags;
643typedef enum {
644 GNSS_CLO_DAYS_VALID = (1 << 0),
Wei Chen8e04d012018-12-04 15:55:00 -0800645 GNSS_GLO_MSEC_VALID = (1 << 1),
Katz Yamada0fc49e82018-02-28 11:22:58 -0800646 GNSS_GLO_CLK_TIME_BIAS_VALID = (1 << 2),
647 GNSS_GLO_CLK_TIME_BIAS_UNC_VALID = (1 << 3),
648 GNSS_GLO_REF_FCOUNT_VALID = (1 << 4),
649 GNSS_GLO_NUM_CLOCK_RESETS_VALID = (1 << 5),
650 GNSS_GLO_FOUR_YEAR_VALID = (1 << 6)
651} GnssGloTimeTypeBits;
652
653typedef struct {
654 GnssAidingDataSvMask svMask; // bitwise OR of GnssAidingDataSvBits
655 GnssAidingDataSvTypeMask svTypeMask; // bitwise OR of GnssAidingDataSvTypeBits
656} GnssAidingDataSv;
657
658typedef uint32_t GnssAidingDataCommonMask;
659typedef enum {
660 GNSS_AIDING_DATA_COMMON_POSITION_BIT = (1<<0), // position estimate
661 GNSS_AIDING_DATA_COMMON_TIME_BIT = (1<<1), // reset all clock values
662 GNSS_AIDING_DATA_COMMON_UTC_BIT = (1<<2), // UTC estimate
663 GNSS_AIDING_DATA_COMMON_RTI_BIT = (1<<3), // RTI
664 GNSS_AIDING_DATA_COMMON_FREQ_BIAS_EST_BIT = (1<<4), // frequency bias estimate
665 GNSS_AIDING_DATA_COMMON_CELLDB_BIT = (1<<5), // all celldb info
666} GnssAidingDataCommonBits;
667
668typedef struct {
669 GnssAidingDataCommonMask mask; // bitwise OR of GnssAidingDataCommonBits
670} GnssAidingDataCommon;
671
672typedef struct {
673 bool deleteAll; // if true, delete all aiding data and ignore other params
674 GnssAidingDataSv sv; // SV specific aiding data
675 GnssAidingDataCommon common; // common aiding data
676} GnssAidingData;
677
678typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800679 uint32_t size; // set to sizeof(Location)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800680 LocationFlagsMask flags; // bitwise OR of LocationFlagsBits to mark which params are valid
681 uint64_t timestamp; // UTC timestamp for location fix, milliseconds since January 1, 1970
682 double latitude; // in degrees
683 double longitude; // in degrees
684 double altitude; // in meters above the WGS 84 reference ellipsoid
685 float speed; // in meters per second
686 float bearing; // in degrees; range [0, 360)
687 float accuracy; // in meters
688 float verticalAccuracy; // in meters
689 float speedAccuracy; // in meters/second
690 float bearingAccuracy; // in degrees (0 to 359.999)
691 LocationTechnologyMask techMask;
haohuang17015dd2018-04-16 15:12:49 +0800692 LocationSpoofMask spoofMask;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800693} Location;
694
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530695struct LocationOptions {
Wei Chen1d823b02018-12-14 16:22:17 -0800696 uint32_t size; // set to sizeof(LocationOptions)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800697 uint32_t minInterval; // in milliseconds
698 uint32_t minDistance; // in meters. if minDistance > 0, gnssSvCallback/gnssNmeaCallback/
699 // gnssMeasurementsCallback may not be called
700 GnssSuplMode mode; // Standalone/MS-Based/MS-Assisted
Katz Yamada0fc49e82018-02-28 11:22:58 -0800701
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530702 inline LocationOptions() :
703 size(0), minInterval(0), minDistance(0), mode(GNSS_SUPL_MODE_STANDALONE) {}
704};
705
706typedef enum {
707 GNSS_POWER_MODE_INVALID = 0,
708 GNSS_POWER_MODE_M1, /* Improved Accuracy Mode */
709 GNSS_POWER_MODE_M2, /* Normal Mode */
710 GNSS_POWER_MODE_M3, /* Background Mode */
711 GNSS_POWER_MODE_M4, /* Background Mode */
712 GNSS_POWER_MODE_M5 /* Background Mode */
713} GnssPowerMode;
714
715struct TrackingOptions : LocationOptions {
716 GnssPowerMode powerMode; /* Power Mode to be used for time based tracking
717 sessions */
718 uint32_t tbm; /* Time interval between measurements specified in millis.
719 Applicable to background power modes */
720
721 inline TrackingOptions() :
722 LocationOptions(), powerMode(GNSS_POWER_MODE_INVALID), tbm(0) {}
Wei Chen1d823b02018-12-14 16:22:17 -0800723 inline TrackingOptions(uint32_t s, GnssPowerMode m, uint32_t t) :
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530724 LocationOptions(), powerMode(m), tbm(t) { LocationOptions::size = s; }
725 inline TrackingOptions(const LocationOptions& options) :
726 LocationOptions(options), powerMode(GNSS_POWER_MODE_INVALID), tbm(0) {}
727 inline void setLocationOptions(const LocationOptions& options) {
728 minInterval = options.minInterval;
729 minDistance = options.minDistance;
730 mode = options.mode;
731 }
Harikrishnan Hariharan59269e12018-07-01 00:43:09 +0530732 inline LocationOptions getLocationOptions() {
733 LocationOptions locOption;
734 locOption.size = sizeof(locOption);
735 locOption.minDistance = minDistance;
736 locOption.minInterval = minInterval;
737 locOption.mode = mode;
738 return locOption;
739 }
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530740};
741
742struct BatchingOptions : LocationOptions {
Katz Yamada0fc49e82018-02-28 11:22:58 -0800743 BatchingMode batchingMode;
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530744
745 inline BatchingOptions() :
746 LocationOptions(), batchingMode(BATCHING_MODE_ROUTINE) {}
Wei Chen1d823b02018-12-14 16:22:17 -0800747 inline BatchingOptions(uint32_t s, BatchingMode m) :
Saurabh Srivastava66c682f2018-05-20 23:06:12 +0530748 LocationOptions(), batchingMode(m) { LocationOptions::size = s; }
749 inline BatchingOptions(const LocationOptions& options) :
750 LocationOptions(options), batchingMode(BATCHING_MODE_ROUTINE) {}
751 inline void setLocationOptions(const LocationOptions& options) {
752 minInterval = options.minInterval;
753 minDistance = options.minDistance;
754 mode = options.mode;
755 }
756};
Katz Yamada0fc49e82018-02-28 11:22:58 -0800757
758typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800759 uint32_t size;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800760 BatchingStatus batchingStatus;
761} BatchingStatusInfo;
762
763typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800764 uint32_t size; // set to sizeof(GeofenceOption)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800765 GeofenceBreachTypeMask breachTypeMask; // bitwise OR of GeofenceBreachTypeBits
766 uint32_t responsiveness; // in milliseconds
767 uint32_t dwellTime; // in seconds
768} GeofenceOption;
769
770typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800771 uint32_t size; // set to sizeof(GeofenceInfo)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800772 double latitude; // in degrees
773 double longitude; // in degrees
774 double radius; // in meters
775} GeofenceInfo;
776
777typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800778 uint32_t size; // set to sizeof(GeofenceBreachNotification)
779 uint32_t count; // number of ids in array
Katz Yamada0fc49e82018-02-28 11:22:58 -0800780 uint32_t* ids; // array of ids that have breached
781 Location location; // location associated with breach
782 GeofenceBreachType type; // type of breach
783 uint64_t timestamp; // timestamp of breach
784} GeofenceBreachNotification;
785
786typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800787 uint32_t size; // set to sizeof(GeofenceBreachNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800788 GeofenceStatusAvailable available; // GEOFENCE_STATUS_AVAILABILE_NO/_YES
789 LocationTechnologyType techType; // GNSS
790} GeofenceStatusNotification;
791
792typedef struct {
793 uint64_t gpsSvUsedIdsMask;
794 uint64_t gloSvUsedIdsMask;
795 uint64_t galSvUsedIdsMask;
796 uint64_t bdsSvUsedIdsMask;
797 uint64_t qzssSvUsedIdsMask;
798} GnssLocationSvUsedInPosition;
799
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700800typedef struct {
801 /** GnssSignalType mask */
802 GnssSignalTypeMask gnssSignalType;
803 /** Specifies GNSS Constellation Type */
804 Gnss_LocSvSystemEnumType gnssConstellation;
805 /** GNSS SV ID.
806 For GPS: 1 to 32
807 For GLONASS: 65 to 96. When slot-number to SV ID mapping is unknown, set as 255.
808 For SBAS: 120 to 151
809 For QZSS-L1CA:193 to 197
810 For BDS: 201 to 237
811 For GAL: 301 to 336 */
812 uint16_t gnssSvId;
813} GnssMeasUsageInfo;
814
Katz Yamada0fc49e82018-02-28 11:22:58 -0800815/** @struct
816 Body Frame parameters
817*/
818typedef struct {
819 GnssLocationPosDataMask bodyFrameDataMask; // Contains Body frame LocPosDataMask bits
820 float longAccel; // Forward Acceleration in body frame (m/s2)
821 float latAccel; // Sideward Acceleration in body frame (m/s2)
822 float vertAccel; // Vertical Acceleration in body frame (m/s2)
823 float yawRate; // Heading Rate (Radians/second)
824 float pitch; // Body pitch (Radians)
Naresh Munagala02cddf02018-06-21 10:44:51 +0530825 float longAccelUnc; // Uncertainty of Forward Acceleration in body frame
826 float latAccelUnc; // Uncertainty of Side-ward Acceleration in body frame
827 float vertAccelUnc; // Uncertainty of Vertical Acceleration in body frame
828 float yawRateUnc; // Uncertainty of Heading Rate
829 float pitchUnc; // Uncertainty of Body pitch
Katz Yamada0fc49e82018-02-28 11:22:58 -0800830} GnssLocationPositionDynamics;
831
832typedef struct {
833 /** Validity mask for below fields */
834 GnssSystemTimeStructTypeFlags validityMask;
835 /** Extended week number at reference tick.
836 Unit: Week.
837 Set to 65535 if week number is unknown.
838 For GPS:
839 Calculated from midnight, Jan. 6, 1980.
840 OTA decoded 10 bit GPS week is extended to map between:
841 [NV6264 to (NV6264 + 1023)].
842 NV6264: Minimum GPS week number configuration.
843 Default value of NV6264: 1738
844 For BDS:
845 Calculated from 00:00:00 on January 1, 2006 of Coordinated Universal Time (UTC).
846 For GAL:
847 Calculated from 00:00 UT on Sunday August 22, 1999 (midnight between August 21 and August 22).
848 */
849 uint16_t systemWeek;
850 /** Time in to the current week at reference tick.
851 Unit: Millisecond. Range: 0 to 604799999.
852 Check for systemClkTimeUncMs before use */
853 uint32_t systemMsec;
854 /** System clock time bias (sub-millisecond)
855 Units: Millisecond
856 Note: System time (TOW Millisecond) = systemMsec - systemClkTimeBias.
857 Check for systemClkTimeUncMs before use. */
858 float systemClkTimeBias;
859 /** Single sided maximum time bias uncertainty
860 Units: Millisecond */
861 float systemClkTimeUncMs;
862 /** FCount (free running HW timer) value. Don't use for relative time purpose
863 due to possible discontinuities.
864 Unit: Millisecond */
865 uint32_t refFCount;
866 /** Number of clock resets/discontinuities detected, affecting the local hardware counter value. */
867 uint32_t numClockResets;
868} GnssSystemTimeStructType;
869
870typedef struct {
871 /** GLONASS day number in four years. Refer to GLONASS ICD.
872 Applicable only for GLONASS and shall be ignored for other constellations.
873 If unknown shall be set to 65535 */
874 uint16_t gloDays;
875 /** Validity mask for below fields */
876 GnssGloTimeStructTypeFlags validityMask;
877 /** GLONASS time of day in Millisecond. Refer to GLONASS ICD.
878 Units: Millisecond
879 Check for gloClkTimeUncMs before use */
880 uint32_t gloMsec;
881 /** GLONASS clock time bias (sub-millisecond)
882 Units: Millisecond
883 Note: GLO time (TOD Millisecond) = gloMsec - gloClkTimeBias.
884 Check for gloClkTimeUncMs before use. */
885 float gloClkTimeBias;
886 /** Single sided maximum time bias uncertainty
887 Units: Millisecond */
888 float gloClkTimeUncMs;
889 /** FCount (free running HW timer) value. Don't use for relative time purpose
890 due to possible discontinuities.
891 Unit: Millisecond */
892 uint32_t refFCount;
893 /** Number of clock resets/discontinuities detected, affecting the local hardware counter value. */
894 uint32_t numClockResets;
895 /** GLONASS four year number from 1996. Refer to GLONASS ICD.
896 Applicable only for GLONASS and shall be ignored for other constellations.
897 If unknown shall be set to 255 */
898 uint8_t gloFourYear;
899} GnssGloTimeStructType;
900
901typedef union {
902 GnssSystemTimeStructType gpsSystemTime;
903 GnssSystemTimeStructType galSystemTime;
904 GnssSystemTimeStructType bdsSystemTime;
905 GnssSystemTimeStructType qzssSystemTime;
Katz Yamada8f2e9002018-03-13 09:30:43 -0700906 GnssGloTimeStructType gloSystemTime;
Katz Yamada0fc49e82018-02-28 11:22:58 -0800907} SystemTimeStructUnion;
908 /** Time applicability of PVT report */
909typedef struct {
910 /** Specifies GNSS system time reported. Mandatory field */
911 Gnss_LocSvSystemEnumType gnssSystemTimeSrc;
912 /** Reporting of GPS system time is recommended.
913 If GPS time is unknown & other satellite system time is known,
914 it should be reported.
915 Mandatory field
916 */
917 SystemTimeStructUnion u;
918} GnssSystemTime;
919
920typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800921 uint32_t size; // set to sizeof(GnssLocationInfo)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800922 GnssLocationInfoFlagMask flags; // bitwise OR of GnssLocationInfoBits for param validity
923 float altitudeMeanSeaLevel; // altitude wrt mean sea level
924 float pdop; // position dilusion of precision
925 float hdop; // horizontal dilusion of precision
926 float vdop; // vertical dilusion of precision
927 float gdop; // geometric dilution of precision
928 float tdop; // time dilution of precision
929 float magneticDeviation; // magnetic deviation
930 LocationReliability horReliability; // horizontal reliability
931 LocationReliability verReliability; // vertical reliability
932 float horUncEllipseSemiMajor; // horizontal elliptical accuracy semi-major axis
933 float horUncEllipseSemiMinor; // horizontal elliptical accuracy semi-minor axis
934 float horUncEllipseOrientAzimuth; // horizontal elliptical accuracy azimuth
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700935 float northStdDeviation; // North standard deviation Unit: Meters
936 float eastStdDeviation; // East standard deviation. Unit: Meters
Katz Yamada0fc49e82018-02-28 11:22:58 -0800937 float northVelocity; // North Velocity.Unit: Meters/sec
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700938 float eastVelocity; // East Velocity Unit Meters/sec
939 float upVelocity; // Up Velocity. Unit Meters/sec
Katz Yamada0fc49e82018-02-28 11:22:58 -0800940 float northVelocityStdDeviation;
941 float eastVelocityStdDeviation;
942 float upVelocityStdDeviation;
943 GnssLocationSvUsedInPosition svUsedInPosition;// Gnss sv used in position data
944 GnssLocationNavSolutionMask navSolutionMask; // Nav solution mask to indicate sbas corrections
945 GnssLocationPosTechMask posTechMask; // Position technology used in computing this fix
946 GnssLocationPositionDynamics bodyFrameData; // Body Frame Dynamics: 4wayAcceleration and
947 // pitch set with validity
948 GnssSystemTime gnssSystemTime; // GNSS System Time
Bhavna Sharmaee8213f2018-05-25 14:34:08 -0700949 uint8_t numOfMeasReceived; // Number of measurements received for use in fix.
950 GnssMeasUsageInfo measUsageInfo[GNSS_SV_MAX]; // GNSS Measurement Usage info
951 uint8_t leapSeconds; // leap second
952 float timeUncMs; // Time uncertainty in milliseconds
Katz Yamada0fc49e82018-02-28 11:22:58 -0800953 Location location;
954} GnssLocationInfoNotification;
955
956typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800957 uint32_t size; // set to sizeof(GnssNiNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800958 GnssNiType type; // type of NI (Voice, SUPL, Control Plane)
959 GnssNiOptionsMask options; // bitwise OR of GnssNiOptionsBits
960 uint32_t timeout; // time (seconds) to wait for user input
961 GnssNiResponse timeoutResponse; // the response that should be sent when timeout expires
962 char requestor[GNSS_NI_REQUESTOR_MAX]; // the requestor that is making the request
963 GnssNiEncodingType requestorEncoding; // the encoding type for requestor
964 char message[GNSS_NI_MESSAGE_ID_MAX]; // the message to show user
965 GnssNiEncodingType messageEncoding; // the encoding type for message
966 char extras[GNSS_NI_MESSAGE_ID_MAX];
967} GnssNiNotification;
968
969typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800970 uint32_t size; // set to sizeof(GnssSv)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800971 uint16_t svId; // Unique Identifier
972 GnssSvType type; // type of SV (GPS, SBAS, GLONASS, QZSS, BEIDOU, GALILEO)
973 float cN0Dbhz; // signal strength
974 float elevation; // elevation of SV (in degrees)
975 float azimuth; // azimuth of SV (in degrees)
976 GnssSvOptionsMask gnssSvOptionsMask; // Bitwise OR of GnssSvOptionsBits
Mike Cailean7dfa87b2018-02-06 16:36:27 -0800977 float carrierFrequencyHz; // carrier frequency of the signal tracked
Bhavna Sharma21249412018-07-17 14:48:32 -0700978 GnssSignalTypeMask gnssSignalTypeMask; // Specifies GNSS signal type
Katz Yamada0fc49e82018-02-28 11:22:58 -0800979} GnssSv;
980
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +0530981struct GnssConfigSetAssistanceServer {
Wei Chen1d823b02018-12-14 16:22:17 -0800982 uint32_t size; // set to sizeof(GnssConfigSetAssistanceServer)
Katz Yamada0fc49e82018-02-28 11:22:58 -0800983 GnssAssistanceType type; // SUPL or C2K
984 const char* hostName; // null terminated string
985 uint32_t port; // port of server
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +0530986
987 inline bool equals(const GnssConfigSetAssistanceServer& config) {
988 if (config.type == type && config.port == port &&
989 ((NULL == config.hostName && NULL == hostName) ||
990 (NULL != config.hostName && NULL != hostName &&
991 0 == strcmp(config.hostName, hostName)))) {
992 return true;
993 }
994 return false;
995 }
996};
Katz Yamada0fc49e82018-02-28 11:22:58 -0800997
998typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -0800999 uint32_t size; // set to sizeof(GnssMeasurementsData)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001000 GnssMeasurementsDataFlagsMask flags; // bitwise OR of GnssMeasurementsDataFlagsBits
1001 int16_t svId;
1002 GnssSvType svType;
1003 double timeOffsetNs;
1004 GnssMeasurementsStateMask stateMask; // bitwise OR of GnssMeasurementsStateBits
1005 int64_t receivedSvTimeNs;
1006 int64_t receivedSvTimeUncertaintyNs;
1007 double carrierToNoiseDbHz;
1008 double pseudorangeRateMps;
1009 double pseudorangeRateUncertaintyMps;
1010 GnssMeasurementsAdrStateMask adrStateMask; // bitwise OR of GnssMeasurementsAdrStateBits
1011 double adrMeters;
1012 double adrUncertaintyMeters;
1013 float carrierFrequencyHz;
1014 int64_t carrierCycles;
1015 double carrierPhase;
1016 double carrierPhaseUncertainty;
1017 GnssMeasurementsMultipathIndicator multipathIndicator;
1018 double signalToNoiseRatioDb;
1019 double agcLevelDb;
Mike Cailean4149abc2019-02-04 16:28:51 -08001020 GnssMeasurementsCodeType codeType;
1021 char otherCodeTypeName[GNSS_MAX_NAME_LENGTH];
Katz Yamada0fc49e82018-02-28 11:22:58 -08001022} GnssMeasurementsData;
1023
1024typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001025 uint32_t size; // set to sizeof(GnssMeasurementsClock)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001026 GnssMeasurementsClockFlagsMask flags; // bitwise OR of GnssMeasurementsClockFlagsBits
1027 int16_t leapSecond;
1028 int64_t timeNs;
1029 double timeUncertaintyNs;
1030 int64_t fullBiasNs;
1031 double biasNs;
1032 double biasUncertaintyNs;
1033 double driftNsps;
1034 double driftUncertaintyNsps;
1035 uint32_t hwClockDiscontinuityCount;
1036} GnssMeasurementsClock;
1037
1038typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001039 uint32_t size; // set to sizeof(GnssSvNotification)
1040 uint32_t count; // number of SVs in the GnssSv array
Bhavna Sharma21249412018-07-17 14:48:32 -07001041 bool gnssSignalTypeMaskValid;
Katz Yamada0fc49e82018-02-28 11:22:58 -08001042 GnssSv gnssSvs[GNSS_SV_MAX]; // information on a number of SVs
1043} GnssSvNotification;
1044
1045typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001046 uint32_t size; // set to sizeof(GnssNmeaNotification)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001047 uint64_t timestamp; // timestamp
1048 const char* nmea; // nmea text
Wei Chen1d823b02018-12-14 16:22:17 -08001049 uint32_t length; // length of the nmea text
Katz Yamada0fc49e82018-02-28 11:22:58 -08001050} GnssNmeaNotification;
1051
1052typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001053 uint32_t size; // set to sizeof(GnssDataNotification)
Mike Cailean75cfd432018-06-07 16:54:35 -07001054 GnssDataMask gnssDataMask[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // bitwise OR of GnssDataBits
1055 double jammerInd[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // Jammer Indication
1056 double agc[GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES]; // Automatic gain control
1057} GnssDataNotification;
1058
1059typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001060 uint32_t size; // set to sizeof(GnssMeasurementsNotification)
1061 uint32_t count; // number of items in GnssMeasurements array
Katz Yamada0fc49e82018-02-28 11:22:58 -08001062 GnssMeasurementsData measurements[GNSS_MEASUREMENTS_MAX];
1063 GnssMeasurementsClock clock; // clock
1064} GnssMeasurementsNotification;
1065
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301066typedef uint32_t GnssSvId;
1067
1068struct GnssSvIdSource{
Wei Chen1d823b02018-12-14 16:22:17 -08001069 uint32_t size; // set to sizeof(GnssSvIdSource)
1070 GnssSvType constellation; // constellation for the sv to blacklist
1071 GnssSvId svId; // sv id to blacklist
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301072};
1073inline bool operator ==(GnssSvIdSource const& left, GnssSvIdSource const& right) {
1074 return left.size == right.size &&
1075 left.constellation == right.constellation && left.svId == right.svId;
1076}
1077
1078#define GNSS_SV_CONFIG_ALL_BITS_ENABLED_MASK ((uint64_t)0xFFFFFFFFFFFFFFFF)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001079typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001080 uint32_t size; // set to sizeof(GnssSvIdConfig)
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301081
1082 // GLONASS - SV 65 maps to bit 0
1083#define GNSS_SV_CONFIG_GLO_INITIAL_SV_ID 65
1084 uint64_t gloBlacklistSvMask;
1085
1086 // BEIDOU - SV 201 maps to bit 0
1087#define GNSS_SV_CONFIG_BDS_INITIAL_SV_ID 201
1088 uint64_t bdsBlacklistSvMask;
1089
1090 // QZSS - SV 193 maps to bit 0
1091#define GNSS_SV_CONFIG_QZSS_INITIAL_SV_ID 193
1092 uint64_t qzssBlacklistSvMask;
1093
1094 // GAL - SV 301 maps to bit 0
1095#define GNSS_SV_CONFIG_GAL_INITIAL_SV_ID 301
1096 uint64_t galBlacklistSvMask;
1097} GnssSvIdConfig;
1098
1099struct GnssConfig{
Wei Chen1d823b02018-12-14 16:22:17 -08001100 uint32_t size; // set to sizeof(GnssConfig)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001101 GnssConfigFlagsMask flags; // bitwise OR of GnssConfigFlagsBits to mark which params are valid
1102 GnssConfigGpsLock gpsLock;
1103 GnssConfigSuplVersion suplVersion;
1104 GnssConfigSetAssistanceServer assistanceServer;
1105 GnssConfigLppProfile lppProfile;
1106 GnssConfigLppeControlPlaneMask lppeControlPlaneMask;
1107 GnssConfigLppeUserPlaneMask lppeUserPlaneMask;
1108 GnssConfigAGlonassPositionProtocolMask aGlonassPositionProtocolMask;
1109 GnssConfigEmergencyPdnForEmergencySupl emergencyPdnForEmergencySupl;
1110 GnssConfigSuplEmergencyServices suplEmergencyServices;
1111 GnssConfigSuplModeMask suplModeMask; //bitwise OR of GnssConfigSuplModeBits
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301112 std::vector<GnssSvIdSource> blacklistedSvIds;
Mike Caileanb0462412019-02-11 09:11:09 -08001113 uint32_t emergencyExtensionSeconds;
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301114
1115 inline bool equals(const GnssConfig& config) {
1116 if (flags == config.flags &&
1117 gpsLock == config.gpsLock &&
1118 suplVersion == config.suplVersion &&
1119 assistanceServer.equals(config.assistanceServer) &&
1120 lppProfile == config.lppProfile &&
1121 lppeControlPlaneMask == config.lppeControlPlaneMask &&
1122 lppeUserPlaneMask == config.lppeUserPlaneMask &&
1123 aGlonassPositionProtocolMask == config.aGlonassPositionProtocolMask &&
1124 emergencyPdnForEmergencySupl == config.emergencyPdnForEmergencySupl &&
1125 suplEmergencyServices == config.suplEmergencyServices &&
1126 suplModeMask == config.suplModeMask &&
Mike Caileanb0462412019-02-11 09:11:09 -08001127 blacklistedSvIds == config.blacklistedSvIds &&
1128 emergencyExtensionSeconds == config.emergencyExtensionSeconds) {
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301129 return true;
1130 }
1131 return false;
1132 }
1133};
Katz Yamada0fc49e82018-02-28 11:22:58 -08001134
1135typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001136 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001137 bool mValid;
1138 Location mLocation;
1139 double verticalAccuracyMeters;
1140 double speedAccuracyMetersPerSecond;
1141 double bearingAccuracyDegrees;
1142 timespec mUtcReported;
1143} GnssDebugLocation;
1144
1145typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001146 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001147 bool mValid;
1148 int64_t timeEstimate;
1149 float timeUncertaintyNs;
1150 float frequencyUncertaintyNsPerSec;
1151} GnssDebugTime;
1152
1153typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001154 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001155 uint32_t svid;
1156 GnssSvType constellation;
1157 GnssEphemerisType mEphemerisType;
1158 GnssEphemerisSource mEphemerisSource;
1159 GnssEphemerisHealth mEphemerisHealth;
1160 float ephemerisAgeSeconds;
1161 bool serverPredictionIsAvailable;
1162 float serverPredictionAgeSeconds;
1163} GnssDebugSatelliteInfo;
1164
1165typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001166 uint32_t size; // set to sizeof
Katz Yamada0fc49e82018-02-28 11:22:58 -08001167 GnssDebugLocation mLocation;
1168 GnssDebugTime mTime;
1169 std::vector<GnssDebugSatelliteInfo> mSatelliteInfo;
1170} GnssDebugReport;
1171
Wei Chen21b9c4e2018-09-19 10:59:28 -07001172typedef uint32_t LeapSecondSysInfoMask;
1173typedef enum {
1174 // current leap second info is available. This info will only
1175 // be available if the leap second change info is not available.
1176 //
1177 // If leap second change info is avaiable, to figure out
1178 // the current leap second info, compare current gps time with
1179 // the gps timestamp of leap second change to know whether to choose
1180 // leapSecondBefore or leapSecondAfter as current leap second.
1181 LEAP_SECOND_SYS_INFO_CURRENT_LEAP_SECONDS_BIT = (1ULL << 0),
1182 // the last known leap change event is available.
1183 // The info can be available on two scenario:
1184 // 1: this leap second change event has been scheduled and yet to happen
1185 // 2: this leap second change event has already happened and next
1186 // leap second change event has not yet been scheduled.
1187 LEAP_SECOND_SYS_INFO_LEAP_SECOND_CHANGE_BIT = (1ULL << 1),
1188} LeapSecondSysInfoDataBits;
1189
1190struct LeapSecondChangeInfo {
1191 // GPS timestamp that corrresponds to the last known
1192 // leap second change event.
1193 //
1194 // The info can be available on two scenario:
1195 // 1: this leap second change event has been scheduled and yet to happen
1196 // 2: this leap second change event has already happened and next
1197 // leap second change event has not yet been scheduled.
1198 GnssSystemTimeStructType gpsTimestampLsChange;
1199 // Number of leap seconds prior to the leap second change event
1200 // that corresponds to the timestamp at gpsTimestampLsChange.
1201 uint8_t leapSecondsBeforeChange;
1202 // Number of leap seconds after the leap second change event
1203 // that corresponds to the timestamp at gpsTimestampLsChange.
1204 uint8_t leapSecondsAfterChange;
1205};
1206
1207struct LeapSecondSystemInfo {
1208 LeapSecondSysInfoMask leapSecondInfoMask;
1209 uint8_t leapSecondCurrent;
1210 LeapSecondChangeInfo leapSecondChangeInfo;
1211};
1212
1213typedef uint32_t LocationSystemInfoMask;
1214typedef enum {
1215 // contains current leap second or leap second change info
1216 LOCATION_SYS_INFO_LEAP_SECOND = (1ULL << 0),
1217} LocationSystemInfoDataBits;
1218
1219struct LocationSystemInfo {
1220 LocationSystemInfoMask systemInfoMask;
1221 LeapSecondSystemInfo leapSecondSysInfo;
1222};
1223
Katz Yamada0fc49e82018-02-28 11:22:58 -08001224/* Provides the capabilities of the system
1225 capabilities callback is called once soon after createInstance is called */
1226typedef std::function<void(
1227 LocationCapabilitiesMask capabilitiesMask // bitwise OR of LocationCapabilitiesBits
1228)> capabilitiesCallback;
1229
1230/* Used by tracking, batching, and miscellanous APIs
1231 responseCallback is called for every Tracking, Batching API, and Miscellanous API */
1232typedef std::function<void(
1233 LocationError err, // if not SUCCESS, then id is not valid
1234 uint32_t id // id to be associated to the request
1235)> responseCallback;
1236
1237/* Used by APIs that gets more than one LocationError in it's response
1238 collectiveResponseCallback is called for every geofence API call.
1239 ids array and LocationError array are only valid until collectiveResponseCallback returns. */
1240typedef std::function<void(
Wei Chen1d823b02018-12-14 16:22:17 -08001241 uint32_t count, // number of locations in arrays
Katz Yamada0fc49e82018-02-28 11:22:58 -08001242 LocationError* errs, // array of LocationError associated to the request
1243 uint32_t* ids // array of ids to be associated to the request
1244)> collectiveResponseCallback;
1245
1246/* Used for startTracking API, optional can be NULL
1247 trackingCallback is called when delivering a location in a tracking session
1248 broadcasted to all clients, no matter if a session has started by client */
1249typedef std::function<void(
1250 Location location
1251)> trackingCallback;
1252
1253/* Used for startBatching API, optional can be NULL
1254 batchingCallback is called when delivering locations in a batching session.
1255 broadcasted to all clients, no matter if a session has started by client */
1256typedef std::function<void(
Wei Chen1d823b02018-12-14 16:22:17 -08001257 uint32_t count, // number of locations in array
Katz Yamada0fc49e82018-02-28 11:22:58 -08001258 Location* location, // array of locations
1259 BatchingOptions batchingOptions // Batching options
1260)> batchingCallback;
1261
1262typedef std::function<void(
1263 BatchingStatusInfo batchingStatus, // batch status
1264 std::list<uint32_t> & listOfCompletedTrips
1265)> batchingStatusCallback;
1266
1267/* Gives GNSS Location information, optional can be NULL
1268 gnssLocationInfoCallback is called only during a tracking session
1269 broadcasted to all clients, no matter if a session has started by client */
1270typedef std::function<void(
1271 GnssLocationInfoNotification gnssLocationInfoNotification
1272)> gnssLocationInfoCallback;
1273
1274/* Used for addGeofences API, optional can be NULL
1275 geofenceBreachCallback is called when any number of geofences have a state change */
1276typedef std::function<void(
1277 GeofenceBreachNotification geofenceBreachNotification
1278)> geofenceBreachCallback;
1279
1280/* Used for addGeofences API, optional can be NULL
1281 geofenceStatusCallback is called when any number of geofences have a status change */
1282typedef std::function<void(
1283 GeofenceStatusNotification geofenceStatusNotification
1284)> geofenceStatusCallback;
1285
1286/* Network Initiated request, optional can be NULL
1287 This callback should be responded to by calling gnssNiResponse */
1288typedef std::function<void(
1289 uint32_t id, // id that should be used to respond by calling gnssNiResponse
1290 GnssNiNotification gnssNiNotification
1291)> gnssNiCallback;
1292
1293/* Gives GNSS SV information, optional can be NULL
1294 gnssSvCallback is called only during a tracking session
1295 broadcasted to all clients, no matter if a session has started by client */
1296typedef std::function<void(
1297 GnssSvNotification gnssSvNotification
1298)> gnssSvCallback;
1299
1300/* Gives GNSS NMEA data, optional can be NULL
1301 gnssNmeaCallback is called only during a tracking session
1302 broadcasted to all clients, no matter if a session has started by client */
1303typedef std::function<void(
1304 GnssNmeaNotification gnssNmeaNotification
1305)> gnssNmeaCallback;
1306
Mike Cailean75cfd432018-06-07 16:54:35 -07001307/* Gives GNSS data, optional can be NULL
1308 gnssDataCallback is called only during a tracking session
1309 broadcasted to all clients, no matter if a session has started by client */
1310typedef std::function<void(
1311 GnssDataNotification gnssDataNotification
1312)> gnssDataCallback;
1313
Katz Yamada0fc49e82018-02-28 11:22:58 -08001314/* Gives GNSS Measurements information, optional can be NULL
1315 gnssMeasurementsCallback is called only during a tracking session
1316 broadcasted to all clients, no matter if a session has started by client */
1317typedef std::function<void(
1318 GnssMeasurementsNotification gnssMeasurementsNotification
1319)> gnssMeasurementsCallback;
1320
Saurabh Srivastavaeaf7e542018-05-20 19:29:46 +05301321/* Provides the current GNSS configuration to the client */
1322typedef std::function<void(
1323 GnssConfig& config
1324)> gnssConfigCallback;
1325
Wei Chen21b9c4e2018-09-19 10:59:28 -07001326/* LocationSystemInfoCb is for receiving rare occuring location
1327 system information update. optional, can be NULL.
1328*/
1329typedef std::function<void(
1330 LocationSystemInfo locationSystemInfo
1331)> locationSystemInfoCallback;
1332
Wei Chene2329862018-11-15 09:41:26 -08001333typedef std::function<void(
1334)> locationApiDestroyCompleteCallback;
1335
Bhavna Sharma49c60ab2019-01-24 16:18:38 -08001336typedef uint16_t LocationAdapterTypeMask;
1337typedef enum {
1338 LOCATION_ADAPTER_GNSS_TYPE_BIT = (1<<0), // adapter type is GNSS
1339 LOCATION_ADAPTER_FLP_TYPE_BIT = (1<<1), // adapter type is FLP
1340 LOCATION_ADAPTER_GEOFENCE_TYPE_BIT = (1<<2) // adapter type is geo fence
1341} LocationAdapterTypeBits;
1342
Katz Yamada0fc49e82018-02-28 11:22:58 -08001343typedef struct {
Wei Chen1d823b02018-12-14 16:22:17 -08001344 uint32_t size; // set to sizeof(LocationCallbacks)
Katz Yamada0fc49e82018-02-28 11:22:58 -08001345 capabilitiesCallback capabilitiesCb; // mandatory
1346 responseCallback responseCb; // mandatory
1347 collectiveResponseCallback collectiveResponseCb; // mandatory
1348 trackingCallback trackingCb; // optional
1349 batchingCallback batchingCb; // optional
1350 geofenceBreachCallback geofenceBreachCb; // optional
1351 geofenceStatusCallback geofenceStatusCb; // optional
1352 gnssLocationInfoCallback gnssLocationInfoCb; // optional
1353 gnssNiCallback gnssNiCb; // optional
1354 gnssSvCallback gnssSvCb; // optional
1355 gnssNmeaCallback gnssNmeaCb; // optional
Mike Cailean75cfd432018-06-07 16:54:35 -07001356 gnssDataCallback gnssDataCb; // optional
Katz Yamada0fc49e82018-02-28 11:22:58 -08001357 gnssMeasurementsCallback gnssMeasurementsCb; // optional
1358 batchingStatusCallback batchingStatusCb; // optional
Wei Chen21b9c4e2018-09-19 10:59:28 -07001359 locationSystemInfoCallback locationSystemInfoCb; // optional
Katz Yamada0fc49e82018-02-28 11:22:58 -08001360} LocationCallbacks;
1361
1362#endif /* LOCATIONDATATYPES_H */