1b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Copyright (c) 2013-2017 The Linux Foundation. All rights reserved.
2129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *
3129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * Redistribution and use in source and binary forms, with or without
4129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * modification, are permitted provided that the following conditions are
5129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * met:
6129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *     * Redistributions of source code must retain the above copyright
7129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       notice, this list of conditions and the following disclaimer.
8129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *     * Redistributions in binary form must reproduce the above
9129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       copyright notice, this list of conditions and the following
10129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       disclaimer in the documentation and/or other materials provided
11129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       with the distribution.
12129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *     * Neither the name of The Linux Foundation nor the names of its
13129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       contributors may be used to endorse or promote products derived
14129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       from this software without specific prior written permission.
15129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *
16129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel */
28129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
29129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#ifndef GPS_EXTENDED_C_H
30129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_EXTENDED_C_H
31129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
32129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <ctype.h>
33129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <stdbool.h>
34129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <stdlib.h>
35129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <string.h>
3696349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#include <loc_gps.h>
37b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include <LocationAPI.h>
386f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#include <time.h>
39129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
40129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/**
41129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * @file
42129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * @brief C++ declarations for GPS types
43129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel */
44129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
45129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#ifdef __cplusplus
46129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelextern "C" {
47129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#endif /* __cplusplus */
48129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
49129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Location has valid source information. */
50129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOCATION_HAS_SOURCE_INFO   0x0020
5196349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel/** LocGpsLocation has valid "is indoor?" flag */
5296349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_GPS_LOCATION_HAS_IS_INDOOR   0x0040
5396349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel/** LocGpsLocation has valid floor number */
5496349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_GPS_LOCATION_HAS_FLOOR_NUMBER   0x0080
5596349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel/** LocGpsLocation has valid map URL*/
5696349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_GPS_LOCATION_HAS_MAP_URL   0x0100
5796349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel/** LocGpsLocation has valid map index */
5896349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_GPS_LOCATION_HAS_MAP_INDEX   0x0200
59129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
60129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Sizes for indoor fields */
61129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_MAP_URL_SIZE 400
62129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_MAP_INDEX_SIZE 16
63129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
64129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Position source is ULP */
65129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define ULP_LOCATION_IS_FROM_HYBRID   0x0001
66129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Position source is GNSS only */
67129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define ULP_LOCATION_IS_FROM_GNSS     0x0002
68129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Position source is ZPP only */
69129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define ULP_LOCATION_IS_FROM_ZPP      0x0004
70129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Position is from a Geofence Breach Event */
71129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define ULP_LOCATION_IS_FROM_GEOFENCE 0X0008
72129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Position is from Hardware FLP */
73129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define ULP_LOCATION_IS_FROM_HW_FLP   0x0010
74129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Position is from NLP */
75129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define ULP_LOCATION_IS_FROM_NLP      0x0020
76129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Position is from PIP */
77129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define ULP_LOCATION_IS_FROM_PIP      0x0040
786f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel/** Position is from external DR solution*/
796f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_LOCATION_IS_FROM_EXT_DR   0X0080
80129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
81129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define ULP_MIN_INTERVAL_INVALID 0xffffffff
821c56f4feb39aca27bd90a7bef615ce5a2a4b228bThierry Strudel#define ULP_MAX_NMEA_STRING_SIZE 201
83129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
84129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/*Emergency SUPL*/
8596349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_GPS_NI_TYPE_EMERGENCY_SUPL    4
86129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
8796349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_AGPS_CERTIFICATE_MAX_LENGTH 2000
8896349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_AGPS_CERTIFICATE_MAX_SLOTS 10
89129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
90129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelenum loc_registration_mask_status {
91129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_REGISTRATION_MASK_ENABLED,
92b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    LOC_REGISTRATION_MASK_DISABLED,
93b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    LOC_REGISTRATION_MASK_SET
94129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel};
95129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
96129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef enum {
97129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_SUPPORTED_FEATURE_ODCPI_2_V02 = 0, /**<  Support ODCPI version 2 feature  */
98129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_SUPPORTED_FEATURE_WIFI_AP_DATA_INJECT_2_V02 /**<  Support Wifi AP data inject version 2 feature  */
99129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} loc_supported_feature_enum;
100129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
101129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef struct {
102129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** set to sizeof(UlpLocation) */
103129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    size_t          size;
10496349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel    LocGpsLocation     gpsLocation;
105129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /* Provider indicator for HYBRID or GPS */
106129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint16_t        position_source;
107129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /*allows HAL to pass additional information related to the location */
108129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    int             rawDataSize;         /* in # of bytes */
109129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    void            * rawData;
110129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    bool            is_indoor;
111129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           floor_number;
112129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    char            map_url[GPS_LOCATION_MAP_URL_SIZE];
113129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    unsigned char   map_index[GPS_LOCATION_MAP_INDEX_SIZE];
114129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} UlpLocation;
115129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
1161c56f4feb39aca27bd90a7bef615ce5a2a4b228bThierry Strudeltypedef struct {
1171c56f4feb39aca27bd90a7bef615ce5a2a4b228bThierry Strudel    /** set to sizeof(UlpNmea) */
1181c56f4feb39aca27bd90a7bef615ce5a2a4b228bThierry Strudel    size_t          size;
1191c56f4feb39aca27bd90a7bef615ce5a2a4b228bThierry Strudel    char            nmea_str[ULP_MAX_NMEA_STRING_SIZE];
1201c56f4feb39aca27bd90a7bef615ce5a2a4b228bThierry Strudel    unsigned int    len;
1211c56f4feb39aca27bd90a7bef615ce5a2a4b228bThierry Strudel} UlpNmea;
1221c56f4feb39aca27bd90a7bef615ce5a2a4b228bThierry Strudel
1231c56f4feb39aca27bd90a7bef615ce5a2a4b228bThierry Strudel
124129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** AGPS type */
125129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef int16_t AGpsExtType;
12696349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_AGPS_TYPE_INVALID       -1
12796349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_AGPS_TYPE_ANY           0
12896349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_AGPS_TYPE_SUPL          1
12996349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_AGPS_TYPE_C2K           2
13096349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_AGPS_TYPE_WWAN_ANY      3
13196349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_AGPS_TYPE_WIFI          4
13296349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel#define LOC_AGPS_TYPE_SUPL_ES       5
133129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
134129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** SSID length */
135129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define SSID_BUF_SIZE (32+1)
136129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
137129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef int16_t AGpsBearerType;
138129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define AGPS_APN_BEARER_INVALID    -1
139129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define AGPS_APN_BEARER_IPV4        0
140129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define AGPS_APN_BEARER_IPV6        1
141129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define AGPS_APN_BEARER_IPV4V6      2
142129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
143129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GPS extended callback structure. */
144129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef struct {
14596349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel    /** set to sizeof(LocGpsCallbacks) */
146129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    size_t      size;
14796349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel    loc_gps_set_capabilities set_capabilities_cb;
14896349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel    loc_gps_acquire_wakelock acquire_wakelock_cb;
14996349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel    loc_gps_release_wakelock release_wakelock_cb;
15096349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel    loc_gps_create_thread create_thread_cb;
15196349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel    loc_gps_request_utc_time request_utc_time_cb;
152129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} GpsExtCallbacks;
153129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
154129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Callback to report the xtra server url to the client.
155129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *  The client should use this url when downloading xtra unless overwritten
156129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *  in the gps.conf file
157129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel */
158129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef void (* report_xtra_server)(const char*, const char*, const char*);
159129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
160129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Callback structure for the XTRA interface. */
161129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef struct {
16296349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel    loc_gps_xtra_download_request download_request_cb;
16396349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel    loc_gps_create_thread create_thread_cb;
164129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    report_xtra_server report_xtra_server_cb;
165129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} GpsXtraExtCallbacks;
166129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
167129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Represents the status of AGPS. */
168129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef struct {
169129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** set to sizeof(AGpsExtStatus) */
170129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    size_t          size;
171129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
172129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    AGpsExtType type;
17396349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel    LocAGpsStatusValue status;
174129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t        ipv4_addr;
175129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    struct sockaddr_storage addr;
176129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    char            ssid[SSID_BUF_SIZE];
177129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    char            password[SSID_BUF_SIZE];
178129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} AGpsExtStatus;
179129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
180129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Callback with AGPS status information.
181129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *  Can only be called from a thread created by create_thread_cb.
182129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel */
183129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef void (* agps_status_extended)(AGpsExtStatus* status);
184129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
185129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Callback structure for the AGPS interface. */
186129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef struct {
187129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    agps_status_extended status_cb;
18896349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudel    loc_gps_create_thread create_thread_cb;
189129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} AGpsExtCallbacks;
190129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
191129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
19296349ca119abc52af4d13198e70d20a7ff848a58Thierry Strudeltypedef void (*loc_ni_notify_callback)(LocGpsNiNotification *notification, bool esEnalbed);
193129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GPS NI callback structure. */
194129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef struct
195129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel{
196129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /**
197129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel     * Sends the notification request from HAL to GPSLocationProvider.
198129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel     */
199129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    loc_ni_notify_callback notify_cb;
200129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} GpsNiExtCallbacks;
201129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
202129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef enum loc_server_type {
203129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_AGPS_CDMA_PDE_SERVER,
204129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_AGPS_CUSTOM_PDE_SERVER,
205129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_AGPS_MPC_SERVER,
206129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_AGPS_SUPL_SERVER
207129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} LocServerType;
208129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
209129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef enum loc_position_mode_type {
210129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_POSITION_MODE_INVALID = -1,
211129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_POSITION_MODE_STANDALONE = 0,
212129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_POSITION_MODE_MS_BASED,
213129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_POSITION_MODE_MS_ASSISTED,
214129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_POSITION_MODE_RESERVED_1,
215129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_POSITION_MODE_RESERVED_2,
216129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_POSITION_MODE_RESERVED_3,
217129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_POSITION_MODE_RESERVED_4,
218129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_POSITION_MODE_RESERVED_5
219129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
220129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} LocPositionMode;
221129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
222129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/**
223129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * @brief Minimum allowed value for fix interval.
224129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *
225129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * This value is a sanity limit in GPS framework. The hardware has own internal
226129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * limits that may not match this value
227129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *
228129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * @sa GPS_DEFAULT_FIX_INTERVAL_MS
229129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel */
230129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
231129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_MIN_POSSIBLE_FIX_INTERVAL_MS 100
232129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/**
233129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * @brief Default value for fix interval.
234129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *
235129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * This value is used by default whenever appropriate.
236129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *
237129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * @sa GPS_MIN_POSSIBLE_FIX_INTERVAL_MS
238129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel */
239129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_DEFAULT_FIX_INTERVAL_MS      1000
240129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
241129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Flags to indicate which values are valid in a GpsLocationExtended. */
242129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef uint16_t GpsLocationExtendedFlags;
243129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GpsLocationExtended has valid pdop, hdop, vdop. */
244129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_DOP 0x0001
245129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GpsLocationExtended has valid altitude mean sea level. */
246129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL 0x0002
247129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** UlpLocation has valid magnetic deviation. */
248129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_MAG_DEV 0x0004
249129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** UlpLocation has valid mode indicator. */
250129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_MODE_IND 0x0008
251129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GpsLocationExtended has valid vertical uncertainty */
252129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_VERT_UNC 0x0010
253129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GpsLocationExtended has valid speed uncertainty */
254129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_SPEED_UNC 0x0020
255129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GpsLocationExtended has valid heading uncertainty */
256129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_BEARING_UNC 0x0040
257129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GpsLocationExtended has valid horizontal reliability */
258129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_HOR_RELIABILITY 0x0080
259129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GpsLocationExtended has valid vertical reliability */
260129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_VERT_RELIABILITY 0x0100
261129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GpsLocationExtended has valid Horizontal Elliptical Uncertainty (Semi-Major Axis) */
262129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_MAJOR 0x0200
263129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GpsLocationExtended has valid Horizontal Elliptical Uncertainty (Semi-Minor Axis) */
264129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_MINOR 0x0400
265129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** GpsLocationExtended has valid Elliptical Horizontal Uncertainty Azimuth */
266129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_AZIMUTH 0x0800
267c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel/** GpsLocationExtended has valid gnss sv used in position data */
268c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel#define GPS_LOCATION_EXTENDED_HAS_GNSS_SV_USED_DATA 0x1000
269c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel
270c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel/** GPS PRN Range */
271c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel#define GPS_SV_PRN_MIN      1
272c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel#define GPS_SV_PRN_MAX      32
273c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel#define GLO_SV_PRN_MIN      65
274c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel#define GLO_SV_PRN_MAX      96
275c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel#define BDS_SV_PRN_MIN      201
276c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel#define BDS_SV_PRN_MAX      235
277c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel#define GAL_SV_PRN_MIN      301
278c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel#define GAL_SV_PRN_MAX      336
279129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
280129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef enum {
281129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_RELIABILITY_NOT_SET = 0,
282129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_RELIABILITY_VERY_LOW = 1,
283129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_RELIABILITY_LOW = 2,
284129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_RELIABILITY_MEDIUM = 3,
285129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_RELIABILITY_HIGH = 4
286129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel}LocReliability;
287129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
2886f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct {
2896f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    struct timespec apTimeStamp;
2906f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /*boottime received from pps-ktimer*/
2916f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float apTimeStampUncertaintyMs;
2926f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* timestamp uncertainty in milli seconds */
2936f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_ApTimeStampStructType;
2946f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
295c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudeltypedef struct {
296c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel    uint64_t gps_sv_used_ids_mask;
297c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel    uint64_t glo_sv_used_ids_mask;
298c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel    uint64_t gal_sv_used_ids_mask;
299c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel    uint64_t bds_sv_used_ids_mask;
300c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel} GnssSvUsedInPosition;
301c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel
302129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Represents gps location extended. */
303129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef struct {
304129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** set to sizeof(GpsLocationExtended) */
305129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    size_t          size;
306129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** Contains GpsLocationExtendedFlags bits. */
307129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint16_t        flags;
308129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** Contains the Altitude wrt mean sea level */
309129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           altitudeMeanSeaLevel;
310129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** Contains Position Dilusion of Precision. */
311129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           pdop;
312129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** Contains Horizontal Dilusion of Precision. */
313129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           hdop;
314129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** Contains Vertical Dilusion of Precision. */
315129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           vdop;
316129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** Contains Magnetic Deviation. */
317129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           magneticDeviation;
318129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** vertical uncertainty in meters */
319129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           vert_unc;
320129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** speed uncertainty in m/s */
321129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           speed_unc;
322129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** heading uncertainty in degrees (0 to 359.999) */
323129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           bearing_unc;
324129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** horizontal reliability. */
325129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LocReliability  horizontal_reliability;
326129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /** vertical reliability. */
327129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LocReliability  vertical_reliability;
328129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /*  Horizontal Elliptical Uncertainty (Semi-Major Axis) */
329129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           horUncEllipseSemiMajor;
330129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /*  Horizontal Elliptical Uncertainty (Semi-Minor Axis) */
331129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           horUncEllipseSemiMinor;
332129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /*    Elliptical Horizontal Uncertainty Azimuth */
333129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    float           horUncEllipseOrientAzimuth;
3346f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
3356f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_ApTimeStampStructType               timeStamp;
336c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel    /** Gnss sv used in position data */
337c2fbb41f698d238de6a6a66111e700a73823936eThierry Strudel    GnssSvUsedInPosition gnss_sv_used_ids;
338129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} GpsLocationExtended;
339129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
340129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelenum loc_sess_status {
341129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_SESS_SUCCESS,
342129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_SESS_INTERMEDIATE,
343129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_SESS_FAILURE
344129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel};
345129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
346b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef uint32_t LocPosTechMask;
347b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define LOC_POS_TECH_MASK_DEFAULT ((LocPosTechMask)0x00000000)
348b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define LOC_POS_TECH_MASK_SATELLITE ((LocPosTechMask)0x00000001)
349b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define LOC_POS_TECH_MASK_CELLID ((LocPosTechMask)0x00000002)
350b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define LOC_POS_TECH_MASK_WIFI ((LocPosTechMask)0x00000004)
351b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define LOC_POS_TECH_MASK_SENSORS ((LocPosTechMask)0x00000008)
352b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define LOC_POS_TECH_MASK_REFERENCE_LOCATION ((LocPosTechMask)0x00000010)
353b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define LOC_POS_TECH_MASK_INJECTED_COARSE_POSITION ((LocPosTechMask)0x00000020)
354b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define LOC_POS_TECH_MASK_AFLT ((LocPosTechMask)0x00000040)
355b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define LOC_POS_TECH_MASK_HYBRID ((LocPosTechMask)0x00000080)
356b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
357129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel// Nmea sentence types mask
358129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef uint32_t NmeaSentenceTypesMask;
359129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_GGA_V02   ((NmeaSentenceTypesMask)0x00000001) /**<  Enable GGA type  */
360129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_RMC_V02   ((NmeaSentenceTypesMask)0x00000002) /**<  Enable RMC type  */
361129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_GSV_V02   ((NmeaSentenceTypesMask)0x00000004) /**<  Enable GSV type  */
362129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_GSA_V02   ((NmeaSentenceTypesMask)0x00000008) /**<  Enable GSA type  */
363129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_VTG_V02   ((NmeaSentenceTypesMask)0x00000010) /**<  Enable VTG type  */
364129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_PQXFI_V02 ((NmeaSentenceTypesMask)0x00000020) /**<  Enable PQXFI type  */
365129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_PSTIS_V02 ((NmeaSentenceTypesMask)0x00000040) /**<  Enable PSTIS type  */
366129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_GLGSV_V02 ((NmeaSentenceTypesMask)0x00000080) /**<  Enable GLGSV type  */
367129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_GNGSA_V02 ((NmeaSentenceTypesMask)0x00000100) /**<  Enable GNGSA type  */
368129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_GNGNS_V02 ((NmeaSentenceTypesMask)0x00000200) /**<  Enable GNGNS type  */
369129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_GARMC_V02 ((NmeaSentenceTypesMask)0x00000400) /**<  Enable GARMC type  */
370129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_GAGSV_V02 ((NmeaSentenceTypesMask)0x00000800) /**<  Enable GAGSV type  */
371129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_GAGSA_V02 ((NmeaSentenceTypesMask)0x00001000) /**<  Enable GAGSA type  */
372129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_GAVTG_V02 ((NmeaSentenceTypesMask)0x00002000) /**<  Enable GAVTG type  */
373129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_GAGGA_V02 ((NmeaSentenceTypesMask)0x00004000) /**<  Enable GAGGA type  */
374129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_PQGSA_V02 ((NmeaSentenceTypesMask)0x00008000) /**<  Enable PQGSA type  */
375129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_MASK_PQGSV_V02 ((NmeaSentenceTypesMask)0x00010000) /**<  Enable PQGSV type  */
376129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_NMEA_ALL_SUPPORTED_MASK  (LOC_NMEA_MASK_GGA_V02 | LOC_NMEA_MASK_RMC_V02 | \
377129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel              LOC_NMEA_MASK_GSV_V02 | LOC_NMEA_MASK_GSA_V02 | LOC_NMEA_MASK_VTG_V02 | \
378129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel        LOC_NMEA_MASK_PQXFI_V02 | LOC_NMEA_MASK_PSTIS_V02 | LOC_NMEA_MASK_GLGSV_V02 | \
379129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel        LOC_NMEA_MASK_GNGSA_V02 | LOC_NMEA_MASK_GNGNS_V02 | LOC_NMEA_MASK_GARMC_V02 | \
380129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel        LOC_NMEA_MASK_GAGSV_V02 | LOC_NMEA_MASK_GAGSA_V02 | LOC_NMEA_MASK_GAVTG_V02 | \
381129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel        LOC_NMEA_MASK_GAGGA_V02 | LOC_NMEA_MASK_PQGSA_V02 | LOC_NMEA_MASK_PQGSV_V02 )
382129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
383129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
384129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
385129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef enum {
386129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel  LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC = 0,
387129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel  LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM,
388129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel  LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU,
389129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel  LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON,
390129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel  LOC_ENG_IF_REQUEST_SENDER_ID_MODEM,
391129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel  LOC_ENG_IF_REQUEST_SENDER_ID_UNKNOWN
392129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} loc_if_req_sender_id_e_type;
393129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
394129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
395129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define smaller_of(a, b) (((a) > (b)) ? (b) : (a))
396129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define MAX_APN_LEN 100
397129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
398129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel// This will be overridden by the individual adapters
399129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel// if necessary.
400129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define DEFAULT_IMPL(rtv)                                     \
401129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel{                                                             \
402129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_LOGD("%s: default implementation invoked", __func__); \
403129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    return rtv;                                               \
404129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel}
405129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
406129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelenum loc_api_adapter_err {
407129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_SUCCESS             = 0,
408129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_GENERAL_FAILURE     = 1,
409129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_UNSUPPORTED         = 2,
410129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_INVALID_HANDLE      = 4,
411129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_INVALID_PARAMETER   = 5,
412129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_ENGINE_BUSY         = 6,
413129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_PHONE_OFFLINE       = 7,
414129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_TIMEOUT             = 8,
415129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_SERVICE_NOT_PRESENT = 9,
416129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_INTERNAL            = 10,
417129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
418129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    /* equating engine down to phone offline, as they are the same errror */
419129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_ENGINE_DOWN         = LOC_API_ADAPTER_ERR_PHONE_OFFLINE,
420129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_FAILURE             = 101,
421129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_ERR_UNKNOWN
422129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel};
423129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
424129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelenum loc_api_adapter_event_index {
425129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REPORT_POSITION = 0,               // Position report comes in loc_parsed_position_s_type
426129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REPORT_SATELLITE,                  // Satellite in view report
427129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REPORT_NMEA_1HZ,                   // NMEA report at 1HZ rate
428129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REPORT_NMEA_POSITION,              // NMEA report at position report rate
429129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REQUEST_NI_NOTIFY_VERIFY,          // NI notification/verification request
430129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REQUEST_ASSISTANCE_DATA,           // Assistance data, eg: time, predicted orbits request
431129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REQUEST_LOCATION_SERVER,           // Request for location server
432129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REPORT_IOCTL,                      // Callback report for loc_ioctl
433129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REPORT_STATUS,                     // Misc status report: eg, engine state
434129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REQUEST_WIFI,                      //
435129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_SENSOR_STATUS,                     //
436129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REQUEST_TIME_SYNC,                 //
437129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REPORT_SPI,                        //
438129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REPORT_NI_GEOFENCE,                //
439129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_GEOFENCE_GEN_ALERT,                //
440129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REPORT_GENFENCE_BREACH,            //
441129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_PEDOMETER_CTRL,                    //
442129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_MOTION_CTRL,                       //
443129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REQUEST_WIFI_AP_DATA,              // Wifi ap data
444129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_BATCH_FULL,                        // Batching on full
445129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_BATCHED_POSITION_REPORT,           // Batching on fix
446129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_BATCHED_GENFENCE_BREACH_REPORT,    //
4476f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    LOC_API_ADAPTER_GNSS_MEASUREMENT_REPORT,          //GNSS Measurement Report
4486f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    LOC_API_ADAPTER_GNSS_SV_POLYNOMIAL_REPORT,        //GNSS SV Polynomial Report
449129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_GDT_UPLOAD_BEGIN_REQ,              // GDT upload start request
450129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_GDT_UPLOAD_END_REQ,                // GDT upload end request
451129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_GNSS_MEASUREMENT,                  // GNSS Measurement report
452129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REQUEST_TIMEZONE,                  // Timezone injection request
453129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_REPORT_GENFENCE_DWELL_REPORT,      // Geofence dwell report
454129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_EVENT_MAX
455129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel};
456129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
457129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT           (1<<LOC_API_ADAPTER_REPORT_POSITION)
458129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_SATELLITE_REPORT                 (1<<LOC_API_ADAPTER_REPORT_SATELLITE)
459129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT                  (1<<LOC_API_ADAPTER_REPORT_NMEA_1HZ)
460129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_NMEA_POSITION_REPORT             (1<<LOC_API_ADAPTER_REPORT_NMEA_POSITION)
461129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST         (1<<LOC_API_ADAPTER_REQUEST_NI_NOTIFY_VERIFY)
462129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST          (1<<LOC_API_ADAPTER_REQUEST_ASSISTANCE_DATA)
463129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST          (1<<LOC_API_ADAPTER_REQUEST_LOCATION_SERVER)
464129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_IOCTL_REPORT                     (1<<LOC_API_ADAPTER_REPORT_IOCTL)
465129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_STATUS_REPORT                    (1<<LOC_API_ADAPTER_REPORT_STATUS)
466129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_REQUEST_WIFI                     (1<<LOC_API_ADAPTER_REQUEST_WIFI)
467129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_SENSOR_STATUS                    (1<<LOC_API_ADAPTER_SENSOR_STATUS)
468129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_REQUEST_TIME_SYNC                (1<<LOC_API_ADAPTER_REQUEST_TIME_SYNC)
469129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_REPORT_SPI                       (1<<LOC_API_ADAPTER_REPORT_SPI)
470129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_REPORT_NI_GEOFENCE               (1<<LOC_API_ADAPTER_REPORT_NI_GEOFENCE)
471129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_GEOFENCE_GEN_ALERT               (1<<LOC_API_ADAPTER_GEOFENCE_GEN_ALERT)
472129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_REPORT_GENFENCE_BREACH           (1<<LOC_API_ADAPTER_REPORT_GENFENCE_BREACH)
473129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_BATCHED_GENFENCE_BREACH_REPORT   (1<<LOC_API_ADAPTER_BATCHED_GENFENCE_BREACH_REPORT)
474129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_PEDOMETER_CTRL                   (1<<LOC_API_ADAPTER_PEDOMETER_CTRL)
475129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_MOTION_CTRL                      (1<<LOC_API_ADAPTER_MOTION_CTRL)
476129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_REQUEST_WIFI_AP_DATA             (1<<LOC_API_ADAPTER_REQUEST_WIFI_AP_DATA)
477129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_BATCH_FULL                       (1<<LOC_API_ADAPTER_BATCH_FULL)
478129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_BATCHED_POSITION_REPORT          (1<<LOC_API_ADAPTER_BATCHED_POSITION_REPORT)
4796f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT_REPORT          (1<<LOC_API_ADAPTER_GNSS_MEASUREMENT_REPORT)
4806f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define LOC_API_ADAPTER_BIT_GNSS_SV_POLYNOMIAL_REPORT        (1<<LOC_API_ADAPTER_GNSS_SV_POLYNOMIAL_REPORT)
481129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_GDT_UPLOAD_BEGIN_REQ             (1<<LOC_API_ADAPTER_GDT_UPLOAD_BEGIN_REQ)
482129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_GDT_UPLOAD_END_REQ               (1<<LOC_API_ADAPTER_GDT_UPLOAD_END_REQ)
483129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT                 (1<<LOC_API_ADAPTER_GNSS_MEASUREMENT)
484129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_REQUEST_TIMEZONE                 (1<<LOC_API_ADAPTER_REQUEST_TIMEZONE)
485129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define LOC_API_ADAPTER_BIT_REPORT_GENFENCE_DWELL            (1<<LOC_API_ADAPTER_REPORT_GENFENCE_DWELL_REPORT)
486129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
487129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef unsigned int LOC_API_ADAPTER_EVENT_MASK_T;
488129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
489129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef enum loc_api_adapter_msg_to_check_supported {
490129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_MESSAGE_LOCATION_BATCHING,               // Batching 1.0
491129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_MESSAGE_BATCHED_GENFENCE_BREACH,         // Geofence Batched Breach
492129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_TRACKING,          // DBT 2.0
493129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_MESSAGE_ADAPTIVE_LOCATION_BATCHING,      // Batching 1.5
494129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_LOCATION_BATCHING, // Batching 2.0
495129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_MESSAGE_UPDATE_TBF_ON_THE_FLY,           // Updating Tracking TBF On The Fly
496129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
497129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LOC_API_ADAPTER_MESSAGE_MAX
498129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} LocCheckingMessagesID;
499129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
500129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef int IzatDevId_t;
501129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
502129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef uint32_t LOC_GPS_LOCK_MASK;
503129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define isGpsLockNone(lock) ((lock) == 0)
504129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define isGpsLockMO(lock) ((lock) & ((LOC_GPS_LOCK_MASK)1))
505129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define isGpsLockMT(lock) ((lock) & ((LOC_GPS_LOCK_MASK)2))
506129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define isGpsLockAll(lock) (((lock) & ((LOC_GPS_LOCK_MASK)3)) == 3)
507129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
5086f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel/*++ ***********************************************
5096f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel**  Satellite Measurement and Satellite Polynomial
5106f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel**  Structure definitions
5116f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel**  ***********************************************
5126f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel--*/
5136f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE         12
5146f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE  3
5156f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE  9
5166f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE      4
5176f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define GNSS_LOC_SV_MEAS_LIST_MAX_SIZE              16
5186f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
5196f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudelenum ulp_gnss_sv_measurement_valid_flags{
5206f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
5216f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_MEAS_GPS_TIME = 0,
5226f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_MEAS_PSUEDO_RANGE,
5236f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_MEAS_MS_IN_WEEK,
5246f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_MEAS_SUB_MSEC,
5256f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_MEAS_CARRIER_PHASE,
5266f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_MEAS_DOPPLER_SHIFT,
5276f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_MEAS_CNO,
5286f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_MEAS_LOSS_OF_LOCK,
5296f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
5306f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_MEAS_MAX_VALID_FLAGS
5316f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel};
5326f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
5336f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_MEAS_BIT_GPS_TIME        (1<<ULP_GNSS_SV_MEAS_GPS_TIME)
5346f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_MEAS_BIT_PSUEDO_RANGE    (1<<ULP_GNSS_SV_MEAS_PSUEDO_RANGE)
5356f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_MEAS_BIT_MS_IN_WEEK      (1<<ULP_GNSS_SV_MEAS_MS_IN_WEEK)
5366f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_MEAS_BIT_SUB_MSEC        (1<<ULP_GNSS_SV_MEAS_SUB_MSEC)
5376f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_MEAS_BIT_CARRIER_PHASE   (1<<ULP_GNSS_SV_MEAS_CARRIER_PHASE)
5386f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_MEAS_BIT_DOPPLER_SHIFT   (1<<ULP_GNSS_SV_MEAS_DOPPLER_SHIFT)
5396f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_MEAS_BIT_CNO             (1<<ULP_GNSS_SV_MEAS_CNO)
5406f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_MEAS_BIT_LOSS_OF_LOCK    (1<<ULP_GNSS_SV_MEAS_LOSS_OF_LOCK)
5416f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
5426f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudelenum ulp_gnss_sv_poly_valid_flags{
5436f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
5446f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_GLO_FREQ = 0,
5456f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_T0,
5466f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_IODE,
5476f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_FLAG,
5486f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_POLYCOEFF_XYZ0,
5496f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_POLYCOEFF_XYZN,
5506f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_POLYCOEFF_OTHER,
5516f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_SV_POSUNC,
5526f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_IONODELAY,
5536f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_IONODOT,
5546f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_SBAS_IONODELAY,
5556f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_SBAS_IONODOT,
5566f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_TROPODELAY,
5576f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_ELEVATION,
5586f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_ELEVATIONDOT,
5596f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_ELEVATIONUNC,
5606f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_VELO_COEFF,
5616f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_ENHANCED_IOD,
5626f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
5636f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    ULP_GNSS_SV_POLY_VALID_FLAGS
5646f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
5656f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel};
5666f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
5676f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_GLO_FREQ               (1<<ULP_GNSS_SV_POLY_GLO_FREQ)
5686f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_T0                     (1<<ULP_GNSS_SV_POLY_T0)
5696f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_IODE                   (1<<ULP_GNSS_SV_POLY_IODE)
5706f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_FLAG                   (1<<ULP_GNSS_SV_POLY_FLAG)
5716f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_POLYCOEFF_XYZ0         (1<<ULP_GNSS_SV_POLY_POLYCOEFF_XYZ0)
5726f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_POLYCOEFF_XYZN         (1<<ULP_GNSS_SV_POLY_POLYCOEFF_XYZN)
5736f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_POLYCOEFF_OTHER        (1<<ULP_GNSS_SV_POLY_POLYCOEFF_OTHER)
5746f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_SV_POSUNC              (1<<ULP_GNSS_SV_POLY_SV_POSUNC)
5756f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_IONODELAY              (1<<ULP_GNSS_SV_POLY_IONODELAY)
5766f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_IONODOT                (1<<ULP_GNSS_SV_POLY_IONODOT)
5776f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_SBAS_IONODELAY         (1<<ULP_GNSS_SV_POLY_SBAS_IONODELAY)
5786f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_SBAS_IONODOT           (1<<ULP_GNSS_SV_POLY_SBAS_IONODOT)
5796f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_TROPODELAY             (1<<ULP_GNSS_SV_POLY_TROPODELAY)
5806f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_ELEVATION              (1<<ULP_GNSS_SV_POLY_ELEVATION)
5816f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_ELEVATIONDOT           (1<<ULP_GNSS_SV_POLY_ELEVATIONDOT)
5826f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_ELEVATIONUNC           (1<<ULP_GNSS_SV_POLY_ELEVATIONUNC)
5836f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_VELO_COEFF             (1<<ULP_GNSS_SV_POLY_VELO_COEFF)
5846f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel#define ULP_GNSS_SV_POLY_BIT_ENHANCED_IOD           (1<<ULP_GNSS_SV_POLY_ENHANCED_IOD)
5856f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
5866f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
5876f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef enum
5886f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
5896f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_SV_SYSTEM_GPS                    = 1,
5906f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< GPS satellite. */
5916f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_SV_SYSTEM_GALILEO                = 2,
5926f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< GALILEO satellite. */
5936f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_SV_SYSTEM_SBAS                   = 3,
5946f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< SBAS satellite. */
5956f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_SV_SYSTEM_COMPASS                = 4,
5966f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< COMPASS satellite. */
5976f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_SV_SYSTEM_GLONASS                = 5,
5986f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< GLONASS satellite. */
5996f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_SV_SYSTEM_BDS                    = 6
6006f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< BDS satellite. */
6016f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel} Gnss_LocSvSystemEnumType;
6026f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
6036f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef enum
6046f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
6056f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_FREQ_SOURCE_INVALID = 0,
6066f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Source of the frequency is invalid */
6076f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_FREQ_SOURCE_EXTERNAL = 1,
6086f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Source of the frequency is from external injection */
6096f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_FREQ_SOURCE_PE_CLK_REPORT = 2,
6106f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Source of the frequency is from Navigation engine */
6116f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_FREQ_SOURCE_UNKNOWN = 3
6126f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Source of the frequency is unknown */
6136f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel} Gnss_LocSourceofFreqEnumType;
6146f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
6156f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct
6166f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
6176f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    size_t                          size;
6186f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float                           clockDrift;
6196f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Receiver clock Drift \n
6206f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - Units: meter per sec \n
6216f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
6226f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float                           clockDriftUnc;
6236f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Receiver clock Drift uncertainty \n
6246f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - Units: meter per sec \n
6256f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
6266f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_LocSourceofFreqEnumType    sourceOfFreq;
6276f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_LocRcvrClockFrequencyInfoStructType;
6286f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
6296f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct
6306f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
6316f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    size_t      size;
6326f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint8_t     leapSec;
6336f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< GPS time leap second delta to UTC time  \n
6346f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - Units: sec \n
6356f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       */
6366f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint8_t     leapSecUnc;
6376f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Uncertainty for GPS leap second \n
6386f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - Units: sec \n
6396f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       */
6406f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_LeapSecondInfoStructType;
6416f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
6426f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef enum
6436f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
6446f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   GNSS_LOC_SYS_TIME_BIAS_VALID                = 0x01,
6456f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   /**< System time bias valid */
6466f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   GNSS_LOC_SYS_TIME_BIAS_UNC_VALID            = 0x02,
6476f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   /**< System time bias uncertainty valid */
6486f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_LocInterSystemBiasValidMaskType;
6496f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
6506f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct
6516f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
6526f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    size_t          size;
6536f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint32_t        validMask;
6546f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* Validity mask as per Gnss_LocInterSystemBiasValidMaskType */
6556f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
6566f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float           timeBias;
6576f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< System-1 to System-2 Time Bias  \n
6586f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - Units: msec \n
6596f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
6606f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float           timeBiasUnc;
6616f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< System-1 to System-2 Time Bias uncertainty  \n
6626f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - Units: msec \n
6636f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
6646f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_InterSystemBiasStructType;
6656f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
6666f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
6676f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct
6686f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
6696f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    size_t          size;
6706f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint16_t        systemWeek;
6716f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< System week number for GPS, BDS and GAL satellite systems. \n
6726f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         Set to 65535 when invalid or not available. \n
6736f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         Not valid for GLONASS system. \n
6746f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       */
6756f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
6766f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint32_t        systemMsec;
6776f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< System time msec. Time of Week for GPS, BDS, GAL and
6786f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         Time of Day for GLONASS.
6796f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - Units: msec \n
6806f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel      */
6816f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float           systemClkTimeBias;
6826f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< System clock time bias \n
6836f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - Units: msec \n
6846f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         System time = systemMsec - systemClkTimeBias \n
6856f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel      */
6866f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float           systemClkTimeUncMs;
6876f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Single sided maximum time bias uncertainty \n
6886f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel                                                    - Units: msec \n
6896f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel      */
6906f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_LocSystemTimeStructType;
6916f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
6926f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct {
6936f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
6946f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  size_t        size;
6956f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  uint8_t       gloFourYear;
6966f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  /**<   GLONASS four year number from 1996. Refer to GLONASS ICD.\n
6976f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        Applicable only for GLONASS and shall be ignored for other constellations. \n
6986f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        If unknown shall be set to 255
6996f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        */
7006f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7016f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  uint16_t      gloDays;
7026f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  /**<   GLONASS day number in four years. Refer to GLONASS ICD.
7036f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        Applicable only for GLONASS and shall be ignored for other constellations. \n
7046f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        If unknown shall be set to 65535
7056f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        */
7066f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7076f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  uint32_t      gloMsec;
7086f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  /**<   GLONASS time of day in msec. Refer to GLONASS ICD.
7096f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel            - Units: msec \n
7106f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        */
7116f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7126f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  float         gloClkTimeBias;
7136f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  /**<   System clock time bias (sub-millisecond) \n
7146f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel            - Units: msec \n
7156f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        System time = systemMsec - systemClkTimeBias \n
7166f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
7176f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7186f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  float         gloClkTimeUncMs;
7196f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  /**<   Single sided maximum time bias uncertainty \n
7206f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel                - Units: msec \n
7216f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        */
7226f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_LocGloTimeStructType;  /* Type */
7236f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7246f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct {
7256f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7266f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  size_t    size;
7276f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  uint32_t  refFCount;
7286f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  /**<   Receiver frame counter value at reference tick */
7296f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7306f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  uint8_t   systemRtc_valid;
7316f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  /**<   Validity indicator for System RTC */
7326f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7336f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  uint64_t  systemRtcMs;
7346f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  /**<   Platform system RTC value \n
7356f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - Units: msec \n
7366f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        */
7376f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7386f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  uint32_t  sourceOfTime;
7396f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  /**<   Source of time information */
7406f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7416f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_LocGnssTimeExtStructType;
7426f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7436f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7446f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7456f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef enum
7466f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
7476f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_NULL                    = 0x00000000,
7486f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< No information state */
7496f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_SM_VALID                = 0x00000001,
7506f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Code phase is known */
7516f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_SB_VALID                = 0x00000002,
7526f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Sub-bit time is known */
7536f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_MS_VALID                = 0x00000004,
7546f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Satellite time is known */
7556f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_BE_CONFIRM              = 0x00000008,
7566f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Bit edge is confirmed from signal   */
7576f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_VELOCITY_VALID          = 0x00000010,
7586f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Satellite Doppler measured */
7596f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_VELOCITY_FINE           = 0x00000020,
7606f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< TRUE: Fine Doppler measured, FALSE: Coarse Doppler measured */
7616f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_FROM_RNG_DIFF           = 0x00000200,
7626f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Range update from Satellite differences */
7636f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_FROM_VE_DIFF            = 0x00000400,
7646f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Doppler update from Satellite differences */
7656f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_DONT_USE_X              = 0x00000800,
7666f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Don't use measurement if bit is set */
7676f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_DONT_USE_M              = 0x000001000,
7686f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Don't use measurement if bit is set */
7696f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_DONT_USE_D              = 0x000002000,
7706f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Don't use measurement if bit is set */
7716f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_DONT_USE_S              = 0x000004000,
7726f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Don't use measurement if bit is set */
7736f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    GNSS_LOC_MEAS_STATUS_DONT_USE_P              = 0x000008000
7746f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Don't use measurement if bit is set */
7756f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_LocSvMeasStatusMaskType;
7766f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
7776f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct
7786f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
7796f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    size_t              size;
7806f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint32_t            svMs;
7816f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**<  Satellite time milisecond.\n
7826f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel          For GPS, BDS, GAL range of 0 thru (604800000-1) \n
7836f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel          For GLONASS range of 0 thru (86400000-1) \n
7846f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel          Valid when PD_LOC_MEAS_STATUS_MS_VALID bit is set in measurement status \n
7856f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel          Note: All SV times in the current measurement block are alredy propagated to common reference time epoch. \n
7866f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel            - Units: msec \n
7876f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       */
7886f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float               svSubMs;
7896f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**<Satellite time sub-millisecond. \n
7906f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        Total SV Time = svMs + svSubMs \n
7916f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - Units: msec \n
7926f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       */
7936f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float               svTimeUncMs;
7946f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**<  Satellite Time uncertainty \n
7956f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel          - Units: msec \n
7966f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       */
7976f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float               dopplerShift;
7986f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Satellite Doppler \n
7996f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel            - Units: meter per sec \n
8006f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       */
8016f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float               dopplerShiftUnc;
8026f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Satellite Doppler uncertainty\n
8036f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel            - Units: meter per sec \n
8046f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       */
8056f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_LocSVTimeSpeedStructType;
8066f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
8076f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef enum
8086f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
8096f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_SV_STATE_IDLE = 0,
8106f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_SV_STATE_SEARCH = 1,
8116f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_SV_STATE_SEARCH_VERIFY = 2,
8126f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_SV_STATE_BIT_EDGE = 3,
8136f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_SV_STATE_VERIFY_TRACK = 4,
8146f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_SV_STATE_TRACK = 5,
8156f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_SV_STATE_RESTART = 6,
8166f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_SV_STATE_DPO_TRACK = 7
8176f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel} Gnss_LocSVStateEnumType;
8186f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
8196f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef enum
8206f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
8216f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_LOC_SVINFO_MASK_HAS_EPHEMERIS   = 0x01,
8226f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  /**< Ephemeris is available for this SV */
8236f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_LOC_SVINFO_MASK_HAS_ALMANAC     = 0x02
8246f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  /**< Almanac is available for this SV */
8256f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_LocSvInfoMaskT;
8266f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
8276f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef enum
8286f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
8296f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_LOC_SV_SRCH_STATUS_IDLE      = 1,
8306f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< SV is not being actively processed */
8316f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_LOC_SV_SRCH_STATUS_SEARCH    = 2,
8326f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< The system is searching for this SV */
8336f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel  GNSS_LOC_SV_SRCH_STATUS_TRACK     = 3
8346f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< SV is being tracked */
8356f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_LocSvSearchStatusEnumT;
8366f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
8376f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
8386f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct
8396f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
8406f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    size_t                          size;
8416f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint16_t                        gnssSvId;
8426f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< GNSS SV ID.
8436f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         \begin{itemize1}
8446f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         \item Range:  \begin{itemize1}
8456f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel           \item For GPS:      1 to 32
8466f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel           \item For GLONASS:  1 to 32
8476f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel           \item For SBAS:     120 to 151
8486f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel           \item For BDS:      201 to 237
8496f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         \end{itemize1} \end{itemize1}
8506f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        The GPS and GLONASS SVs can be disambiguated using the system field.
8516f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
8526f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint8_t                         gloFrequency;
8536f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< GLONASS frequency number + 7 \n
8546f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         Valid only for GLONASS System \n
8556f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         Shall be ignored for all other systems \n
8566f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel          - Range: 1 to 14 \n
8576f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
8586f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_LocSvSearchStatusEnumT     svStatus;
8596f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Satellite search state \n
8606f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        @ENUM()
8616f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
8626f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                         healthStatus_valid;
8636f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< SV Health Status validity flag\n
8646f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - 0: Not valid \n
8656f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - 1: Valid \n
8666f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
8676f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint8_t                         healthStatus;
8686f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Health status.
8696f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         \begin{itemize1}
8706f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         \item    Range: 0 to 1; 0 = unhealthy, \n 1 = healthy, 2 = unknown
8716f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         \vspace{-0.18in} \end{itemize1}
8726f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
8736f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_LocSvInfoMaskT             svInfoMask;
8746f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Indicates whether almanac and ephemeris information is available. \n
8756f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        @MASK()
8766f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
8776f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint64_t                        measurementStatus;
8786f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Bitmask indicating SV measurement status.
879b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel         Valid bitmasks: \n
880b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel         @MASK()
8816f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
8826f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint16_t                        CNo;
8836f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Carrier to Noise ratio  \n
8846f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - Units: 0.1 dBHz \n
8856f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
8866f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint16_t                          gloRfLoss;
8876f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< GLONASS Rf loss reference to Antenna. \n
8886f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - Units: dB, Scale: 0.1 \n
8896f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
8906f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                         lossOfLock;
8916f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Loss of signal lock indicator  \n
8926f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 0: Signal in continuous track \n
8936f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 1: Signal not in track \n
8946f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
8956f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    int16_t                         measLatency;
8966f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Age of the measurement. Positive value means measurement precedes ref time. \n
8976f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - Units: msec \n
8986f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
8996f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_LocSVTimeSpeedStructType   svTimeSpeed;
9006f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Unfiltered SV Time and Speed information
9016f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9026f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float                           dopplerAccel;
9036f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Satellite Doppler Accelertion\n
9046f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - Units: Hz/s \n
9056f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9066f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                         multipathEstValid;
9076f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Multipath estimate validity flag\n
9086f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - 0: Multipath estimate not valid \n
9096f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - 1: Multipath estimate valid \n
9106f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9116f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float                           multipathEstimate;
9126f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Estimate of multipath in measurement\n
9136f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - Units: Meters \n
9146f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9156f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                         fineSpeedValid;
9166f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Fine speed validity flag\n
9176f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 0: Fine speed not valid \n
9186f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 1: Fine speed valid \n
9196f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9206f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float                           fineSpeed;
9216f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Carrier phase derived speed \n
9226f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - Units: m/s \n
9236f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9246f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                         fineSpeedUncValid;
9256f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Fine speed uncertainty validity flag\n
9266f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 0: Fine speed uncertainty not valid \n
9276f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 1: Fine speed uncertainty valid \n
9286f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9296f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float                           fineSpeedUnc;
9306f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Carrier phase derived speed \n
9316f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - Units: m/s \n
9326f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9336f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                         carrierPhaseValid;
9346f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Carrier Phase measurement validity flag\n
9356f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 0: Carrier Phase not valid \n
9366f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 1: Carrier Phase valid \n
9376f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9386f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    double                          carrierPhase;
9396f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Carrier phase measurement [L1 cycles] \n
9406f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9416f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                         cycleSlipCountValid;
9426f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel     /**< Cycle slup count validity flag\n
9436f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 0: Not valid \n
9446f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 1: Valid \n
9456f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9466f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint8_t                         cycleSlipCount;
9476f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Increments when a CSlip is detected */
9486f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
9496f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                         svDirectionValid;
9506f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Validity flag for SV direction */
9516f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
9526f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float                           svAzimuth;
9536f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Satellite Azimuth
9546f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - Units: radians \n
9556f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9566f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float                           svElevation;
9576f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Satellite Elevation
9586f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel        - Units: radians \n
9596f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9606f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel} Gnss_SVMeasurementStructType;
9616f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
9626f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel/**< Maximum number of satellites in measurement block for given system. */
9636f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
9646f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct
9656f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
9666f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    size_t                          size;
9676f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_LocSvSystemEnumType        system;
9686f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Specifies the Satellite System Type
9696f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9706f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                            isSystemTimeValid;
9716f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Indicates whether System Time is Valid:\n
9726f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 0x01 (TRUE) --  System Time is valid \n
9736f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel         - 0x00 (FALSE) -- System Time is not valid
9746f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9756f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_LocSystemTimeStructType    systemTime;
9766f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< System Time Information \n
9776f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9786f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                            isGloTime_valid;
9796f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_LocGloTimeStructType       gloTime;
9806f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
9816f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                            isSystemTimeExt_valid;
9826f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_LocGnssTimeExtStructType   systemTimeExt;
9836f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
9846f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint8_t                         numSvs;
9856f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* Number of SVs in this report block */
9866f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
9876f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_SVMeasurementStructType    svMeasurement[GNSS_LOC_SV_MEAS_LIST_MAX_SIZE];
9886f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Satellite measurement Information \n
9896f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
9906f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel} Gnss_ClockMeasurementStructType;
9916f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
9926f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
9936f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct
9946f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
9956f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    size_t                                      size;
9966f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint8_t                                     seqNum;
9976f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Current message Number */
9986f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint8_t                                     maxMessageNum;
9996f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /**< Maximum number of message that will be sent for present time epoch. */
10006f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10016f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                                     leapSecValid;
10026f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_LeapSecondInfoStructType               leapSec;
10036f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10046f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_InterSystemBiasStructType              gpsGloInterSystemBias;
10056f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10066f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_InterSystemBiasStructType              gpsBdsInterSystemBias;
10076f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10086f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_InterSystemBiasStructType              gpsGalInterSystemBias;
10096f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10106f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_InterSystemBiasStructType              bdsGloInterSystemBias;
10116f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10126f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_InterSystemBiasStructType              galGloInterSystemBias;
10136f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10146f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_InterSystemBiasStructType              galBdsInterSystemBias;
10156f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10166f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                                     clockFreqValid;
10176f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_LocRcvrClockFrequencyInfoStructType    clockFreq;   /* Freq */
10186f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    bool                                     gnssMeasValid;
10196f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_ClockMeasurementStructType             gnssMeas;
10206f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    Gnss_ApTimeStampStructType               timeStamp;
10216f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10226f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel} GnssSvMeasurementSet;
10236f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10246f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef enum
10256f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
10266f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   GNSS_SV_POLY_COEFF_VALID             = 0x01,
10276f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   /**< SV position in orbit coefficients are valid */
10286f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   GNSS_SV_POLY_IONO_VALID              = 0x02,
10296f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   /**< Iono estimates are valid */
10306f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10316f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   GNSS_SV_POLY_TROPO_VALID             = 0x04,
10326f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   /**< Tropo estimates are valid */
10336f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10346f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   GNSS_SV_POLY_ELEV_VALID              = 0x08,
10356f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   /**< Elevation, rate, uncertainty are valid */
10366f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10376f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   GNSS_SV_POLY_SRC_ALM_CORR            = 0x10,
10386f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   /**< Polynomials based on XTRA */
10396f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10406f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   GNSS_SV_POLY_SBAS_IONO_VALID         = 0x20,
10416f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   /**< SBAS IONO and rate are valid */
10426f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10436f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   GNSS_SV_POLY_GLO_STR4                = 0x40
10446f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel   /**< GLONASS String 4 has been received */
10456f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel}Gnss_SvPolyStatusMaskType;
10466f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10476f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10486f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudeltypedef struct
10496f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel{
10506f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    size_t      size;
10516f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint16_t     gnssSvId;
10526f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* GPS: 1-32, GLO: 65-96, 0: Invalid,
10536f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       SBAS: 120-151, BDS:201-237,GAL:301 to 336
10546f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       All others are reserved
10556f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
10566f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    int8_t      freqNum;
10576f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* Freq index, only valid if u_SysInd is GLO */
10586f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10596f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint8_t     svPolyFlags;
10606f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* Indicate the validity of the elements
10616f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    as per Gnss_SvPolyStatusMaskType
10626f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
10636f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10646f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint32_t    is_valid;
10656f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
10666f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint16_t     iode;
10676f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* Ephemeris reference time
10686f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       GPS:Issue of Data Ephemeris used [unitless].
10696f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       GLO: Tb 7-bit, refer to ICD02
10706f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
10716f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    double      T0;
10726f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* Reference time for polynominal calculations
10736f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       GPS: Secs in week.
10746f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel       GLO: Full secs since Jan/01/96
10756f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    */
10766f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    double      polyCoeffXYZ0[GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE];
10776f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* C0X, C0Y, C0Z */
10786f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    double      polyCoefXYZN[GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE];
10796f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* C1X, C2X ... C2Z, C3Z */
10806f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float       polyCoefOther[GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE];
10816f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* C0T, C1T, C2T, C3T */
10826f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float       svPosUnc;       /* SV position uncertainty [m]. */
10836f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float       ionoDelay;    /* Ionospheric delay at d_T0 [m]. */
10846f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float       ionoDot;      /* Iono delay rate [m/s].  */
10856f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float       sbasIonoDelay;/* SBAS Ionospheric delay at d_T0 [m]. */
10866f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float       sbasIonoDot;  /* SBAS Iono delay rate [m/s].  */
10876f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float       tropoDelay;   /* Tropospheric delay [m]. */
10886f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float       elevation;    /* Elevation [rad] at d_T0 */
10896f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float       elevationDot;      /* Elevation rate [rad/s] */
10906f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    float       elevationUnc;      /* SV elevation [rad] uncertainty */
10916f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    double      velCoef[GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE];
10926f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    /* Coefficients of velocity poly */
10936f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint32_t    enhancedIOD;    /*  Enhanced Reference Time */
10946f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel} GnssSvPolynomial;
10956f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel
1096129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#ifdef __cplusplus
1097129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel}
1098129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#endif /* __cplusplus */
1099129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
1100129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#endif /* GPS_EXTENDED_C_H */
1101