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