1*4d7e907cSAndroid Build Coastguard Worker/* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2019 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Workerpackage [email protected]; 18*4d7e907cSAndroid Build Coastguard Worker 19*4d7e907cSAndroid Build Coastguard Workerimport @1.0::IGnssMeasurementCallback; 20*4d7e907cSAndroid Build Coastguard Workerimport @2.0::IGnssMeasurementCallback; 21*4d7e907cSAndroid Build Coastguard Workerimport @2.0::ElapsedRealtime; 22*4d7e907cSAndroid Build Coastguard Workerimport GnssSignalType; 23*4d7e907cSAndroid Build Coastguard Worker 24*4d7e907cSAndroid Build Coastguard Worker/** 25*4d7e907cSAndroid Build Coastguard Worker * The callback interface to report measurements from the HAL. 26*4d7e907cSAndroid Build Coastguard Worker */ 27*4d7e907cSAndroid Build Coastguard Workerinterface IGnssMeasurementCallback extends @2.0::IGnssMeasurementCallback { 28*4d7e907cSAndroid Build Coastguard Worker /** 29*4d7e907cSAndroid Build Coastguard Worker * Flags to indicate what fields in GnssMeasurement are valid. 30*4d7e907cSAndroid Build Coastguard Worker */ 31*4d7e907cSAndroid Build Coastguard Worker enum GnssMeasurementFlags : @1.0::IGnssMeasurementCallback.GnssMeasurementFlags { 32*4d7e907cSAndroid Build Coastguard Worker /** 33*4d7e907cSAndroid Build Coastguard Worker * A valid full inter-signal bias is stored in the data structure. 34*4d7e907cSAndroid Build Coastguard Worker */ 35*4d7e907cSAndroid Build Coastguard Worker HAS_FULL_ISB = 1 << 16, 36*4d7e907cSAndroid Build Coastguard Worker /** 37*4d7e907cSAndroid Build Coastguard Worker * A valid full inter-signal bias uncertainty is stored in the data structure. 38*4d7e907cSAndroid Build Coastguard Worker */ 39*4d7e907cSAndroid Build Coastguard Worker HAS_FULL_ISB_UNCERTAINTY = 1 << 17, 40*4d7e907cSAndroid Build Coastguard Worker /** 41*4d7e907cSAndroid Build Coastguard Worker * A valid satellite inter-signal bias is stored in the data structure. 42*4d7e907cSAndroid Build Coastguard Worker */ 43*4d7e907cSAndroid Build Coastguard Worker HAS_SATELLITE_ISB = 1 << 18, 44*4d7e907cSAndroid Build Coastguard Worker /** 45*4d7e907cSAndroid Build Coastguard Worker * A valid satellite inter-signal bias uncertainty is stored in the data structure. 46*4d7e907cSAndroid Build Coastguard Worker */ 47*4d7e907cSAndroid Build Coastguard Worker HAS_SATELLITE_ISB_UNCERTAINTY = 1 << 19, 48*4d7e907cSAndroid Build Coastguard Worker }; 49*4d7e907cSAndroid Build Coastguard Worker 50*4d7e907cSAndroid Build Coastguard Worker /** 51*4d7e907cSAndroid Build Coastguard Worker * Extends a GNSS Measurement, adding basebandCN0DbHz, GnssMeasurementFlags, 52*4d7e907cSAndroid Build Coastguard Worker * receiverInterSignalBiasNs, receiverInterSignalBiasUncertaintyNs, satelliteInterSignalBiasNs 53*4d7e907cSAndroid Build Coastguard Worker * and satelliteInterSignalBiasUncertaintyNs. 54*4d7e907cSAndroid Build Coastguard Worker */ 55*4d7e907cSAndroid Build Coastguard Worker struct GnssMeasurement { 56*4d7e907cSAndroid Build Coastguard Worker /** 57*4d7e907cSAndroid Build Coastguard Worker * GNSS measurement information for a single satellite and frequency, as in the 2.0 version 58*4d7e907cSAndroid Build Coastguard Worker * of the HAL. 59*4d7e907cSAndroid Build Coastguard Worker * 60*4d7e907cSAndroid Build Coastguard Worker * In this version of the HAL, the field 'flags' in the v2_0.v1_1.v1_0 struct is deprecated, 61*4d7e907cSAndroid Build Coastguard Worker * and is no longer used by the framework. The GNSS measurement flags are instead reported 62*4d7e907cSAndroid Build Coastguard Worker * in @2.1::IGnssMeasurementCallback.GnssMeasurement.flags. 63*4d7e907cSAndroid Build Coastguard Worker * 64*4d7e907cSAndroid Build Coastguard Worker */ 65*4d7e907cSAndroid Build Coastguard Worker @2.0::IGnssMeasurementCallback.GnssMeasurement v2_0; 66*4d7e907cSAndroid Build Coastguard Worker 67*4d7e907cSAndroid Build Coastguard Worker /** 68*4d7e907cSAndroid Build Coastguard Worker * A set of flags indicating the validity of the fields in this data 69*4d7e907cSAndroid Build Coastguard Worker * structure. 70*4d7e907cSAndroid Build Coastguard Worker * 71*4d7e907cSAndroid Build Coastguard Worker * Fields for which there is no corresponding flag must be filled in 72*4d7e907cSAndroid Build Coastguard Worker * with a valid value. For convenience, these are marked as mandatory. 73*4d7e907cSAndroid Build Coastguard Worker * 74*4d7e907cSAndroid Build Coastguard Worker * Others fields may have invalid information in them, if not marked as 75*4d7e907cSAndroid Build Coastguard Worker * valid by the corresponding bit in flags. 76*4d7e907cSAndroid Build Coastguard Worker */ 77*4d7e907cSAndroid Build Coastguard Worker bitfield<GnssMeasurementFlags> flags; 78*4d7e907cSAndroid Build Coastguard Worker 79*4d7e907cSAndroid Build Coastguard Worker /** 80*4d7e907cSAndroid Build Coastguard Worker * The full inter-signal bias (ISB) in nanoseconds. 81*4d7e907cSAndroid Build Coastguard Worker * 82*4d7e907cSAndroid Build Coastguard Worker * This value is the sum of the estimated receiver-side and the space-segment-side 83*4d7e907cSAndroid Build Coastguard Worker * inter-system bias, inter-frequency bias and inter-code bias, including 84*4d7e907cSAndroid Build Coastguard Worker * 85*4d7e907cSAndroid Build Coastguard Worker * - Receiver inter-constellation bias (with respect to the constellation in 86*4d7e907cSAndroid Build Coastguard Worker * GnssClock.referenceSignalTypeForIsb) 87*4d7e907cSAndroid Build Coastguard Worker * - Receiver inter-frequency bias (with respect to the carrier frequency in 88*4d7e907cSAndroid Build Coastguard Worker * GnssClock.referenceSignalTypeForIsb) 89*4d7e907cSAndroid Build Coastguard Worker * - Receiver inter-code bias (with respect to the code type in 90*4d7e907cSAndroid Build Coastguard Worker * GnssClock.referenceSignalTypeForIsb) 91*4d7e907cSAndroid Build Coastguard Worker * - Master clock bias (e.g., GPS-GAL Time Offset (GGTO), GPS-UTC Time Offset 92*4d7e907cSAndroid Build Coastguard Worker * (TauGps), BDS-GLO Time Offset (BGTO)) (with respect to the constellation in 93*4d7e907cSAndroid Build Coastguard Worker * GnssClock.referenceSignalTypeForIsb) 94*4d7e907cSAndroid Build Coastguard Worker * - Group delay (e.g., Total Group Delay (TGD)) 95*4d7e907cSAndroid Build Coastguard Worker * - Satellite inter-frequency bias (GLO only) (with respect to the carrier frequency in 96*4d7e907cSAndroid Build Coastguard Worker * GnssClock.referenceSignalTypeForIsb) 97*4d7e907cSAndroid Build Coastguard Worker * - Satellite inter-code bias (e.g., Differential Code Bias (DCB)) (with respect to the 98*4d7e907cSAndroid Build Coastguard Worker * code type in GnssClock.referenceSignalTypeForIsb) 99*4d7e907cSAndroid Build Coastguard Worker * 100*4d7e907cSAndroid Build Coastguard Worker * If a component of the above is already compensated in the provided 101*4d7e907cSAndroid Build Coastguard Worker * GnssMeasurement.receivedSvTimeInNs, then it must not be included in the reported full 102*4d7e907cSAndroid Build Coastguard Worker * ISB. 103*4d7e907cSAndroid Build Coastguard Worker * 104*4d7e907cSAndroid Build Coastguard Worker * The value does not include the inter-frequency Ionospheric bias. 105*4d7e907cSAndroid Build Coastguard Worker * 106*4d7e907cSAndroid Build Coastguard Worker * The sign of the value is defined by the following equation: 107*4d7e907cSAndroid Build Coastguard Worker * corrected pseudorange = raw pseudorange - fullInterSignalBias 108*4d7e907cSAndroid Build Coastguard Worker * 109*4d7e907cSAndroid Build Coastguard Worker * The full ISB of GnssClock.referenceSignalTypeForIsb is defined to be 0.0 nanoseconds. 110*4d7e907cSAndroid Build Coastguard Worker */ 111*4d7e907cSAndroid Build Coastguard Worker double fullInterSignalBiasNs; 112*4d7e907cSAndroid Build Coastguard Worker 113*4d7e907cSAndroid Build Coastguard Worker /** 114*4d7e907cSAndroid Build Coastguard Worker * 1-sigma uncertainty associated with the full inter-signal bias in nanoseconds. 115*4d7e907cSAndroid Build Coastguard Worker */ 116*4d7e907cSAndroid Build Coastguard Worker double fullInterSignalBiasUncertaintyNs; 117*4d7e907cSAndroid Build Coastguard Worker 118*4d7e907cSAndroid Build Coastguard Worker /** 119*4d7e907cSAndroid Build Coastguard Worker * The satellite inter-signal bias in nanoseconds. 120*4d7e907cSAndroid Build Coastguard Worker * 121*4d7e907cSAndroid Build Coastguard Worker * This value is the sum of the space-segment-side inter-system bias, inter-frequency bias 122*4d7e907cSAndroid Build Coastguard Worker * and inter-code bias, including 123*4d7e907cSAndroid Build Coastguard Worker * 124*4d7e907cSAndroid Build Coastguard Worker * - Master clock bias (e.g., GPS-GAL Time Offset (GGTO), GPS-UTC Time Offset 125*4d7e907cSAndroid Build Coastguard Worker * (TauGps), BDS-GLO Time Offset (BGTO)) (with respect to the constellation in 126*4d7e907cSAndroid Build Coastguard Worker * GnssClock.referenceSignalTypeForIsb) 127*4d7e907cSAndroid Build Coastguard Worker * - Group delay (e.g., Total Group Delay (TGD)) 128*4d7e907cSAndroid Build Coastguard Worker * - Satellite inter-frequency bias (GLO only) (with respect to the carrier frequency in 129*4d7e907cSAndroid Build Coastguard Worker * GnssClock.referenceSignalTypeForIsb) 130*4d7e907cSAndroid Build Coastguard Worker * - Satellite inter-code bias (e.g., Differential Code Bias (DCB)) (with respect to the 131*4d7e907cSAndroid Build Coastguard Worker * code type in GnssClock.referenceSignalTypeForIsb) 132*4d7e907cSAndroid Build Coastguard Worker * 133*4d7e907cSAndroid Build Coastguard Worker * The sign of the value is defined by the following equation: 134*4d7e907cSAndroid Build Coastguard Worker * corrected pseudorange = raw pseudorange - satelliteInterSignalBias 135*4d7e907cSAndroid Build Coastguard Worker * 136*4d7e907cSAndroid Build Coastguard Worker * The satellite ISB of GnssClock.referenceSignalTypeForIsb is defined to be 0.0 137*4d7e907cSAndroid Build Coastguard Worker * nanoseconds. 138*4d7e907cSAndroid Build Coastguard Worker */ 139*4d7e907cSAndroid Build Coastguard Worker double satelliteInterSignalBiasNs; 140*4d7e907cSAndroid Build Coastguard Worker 141*4d7e907cSAndroid Build Coastguard Worker /** 142*4d7e907cSAndroid Build Coastguard Worker * 1-sigma uncertainty associated with the satellite inter-signal bias in nanoseconds. 143*4d7e907cSAndroid Build Coastguard Worker */ 144*4d7e907cSAndroid Build Coastguard Worker double satelliteInterSignalBiasUncertaintyNs; 145*4d7e907cSAndroid Build Coastguard Worker 146*4d7e907cSAndroid Build Coastguard Worker /** 147*4d7e907cSAndroid Build Coastguard Worker * Baseband Carrier-to-noise density in dB-Hz, typically in the range [0, 63]. It contains 148*4d7e907cSAndroid Build Coastguard Worker * the measured C/N0 value for the signal measured at the baseband. 149*4d7e907cSAndroid Build Coastguard Worker * 150*4d7e907cSAndroid Build Coastguard Worker * This is typically a few dB weaker than the value estimated for C/N0 at the antenna port, 151*4d7e907cSAndroid Build Coastguard Worker * which is reported in cN0DbHz. 152*4d7e907cSAndroid Build Coastguard Worker * 153*4d7e907cSAndroid Build Coastguard Worker * If a signal has separate components (e.g. Pilot and Data channels) and the receiver only 154*4d7e907cSAndroid Build Coastguard Worker * processes one of the components, then the reported basebandCN0DbHz reflects only the 155*4d7e907cSAndroid Build Coastguard Worker * component that is processed. 156*4d7e907cSAndroid Build Coastguard Worker * 157*4d7e907cSAndroid Build Coastguard Worker * This value is mandatory. 158*4d7e907cSAndroid Build Coastguard Worker */ 159*4d7e907cSAndroid Build Coastguard Worker double basebandCN0DbHz; 160*4d7e907cSAndroid Build Coastguard Worker }; 161*4d7e907cSAndroid Build Coastguard Worker 162*4d7e907cSAndroid Build Coastguard Worker /** 163*4d7e907cSAndroid Build Coastguard Worker * Extends a GNSS clock time, adding a referenceSignalTypeForIsb. 164*4d7e907cSAndroid Build Coastguard Worker */ 165*4d7e907cSAndroid Build Coastguard Worker struct GnssClock { 166*4d7e907cSAndroid Build Coastguard Worker /** 167*4d7e907cSAndroid Build Coastguard Worker * GNSS clock time information, as in the 1.0 version of the HAL. 168*4d7e907cSAndroid Build Coastguard Worker */ 169*4d7e907cSAndroid Build Coastguard Worker @1.0::IGnssMeasurementCallback.GnssClock v1_0; 170*4d7e907cSAndroid Build Coastguard Worker 171*4d7e907cSAndroid Build Coastguard Worker /** 172*4d7e907cSAndroid Build Coastguard Worker * Reference GNSS signal type for inter-signal bias. 173*4d7e907cSAndroid Build Coastguard Worker */ 174*4d7e907cSAndroid Build Coastguard Worker GnssSignalType referenceSignalTypeForIsb; 175*4d7e907cSAndroid Build Coastguard Worker }; 176*4d7e907cSAndroid Build Coastguard Worker 177*4d7e907cSAndroid Build Coastguard Worker /** 178*4d7e907cSAndroid Build Coastguard Worker * Complete set of GNSS Measurement data, same as 2.0 with additional fields in measurements. 179*4d7e907cSAndroid Build Coastguard Worker */ 180*4d7e907cSAndroid Build Coastguard Worker struct GnssData { 181*4d7e907cSAndroid Build Coastguard Worker /** 182*4d7e907cSAndroid Build Coastguard Worker * The full set of satellite measurement observations. 183*4d7e907cSAndroid Build Coastguard Worker */ 184*4d7e907cSAndroid Build Coastguard Worker vec<GnssMeasurement> measurements; 185*4d7e907cSAndroid Build Coastguard Worker 186*4d7e907cSAndroid Build Coastguard Worker /** 187*4d7e907cSAndroid Build Coastguard Worker * The GNSS clock time reading. 188*4d7e907cSAndroid Build Coastguard Worker */ 189*4d7e907cSAndroid Build Coastguard Worker GnssClock clock; 190*4d7e907cSAndroid Build Coastguard Worker 191*4d7e907cSAndroid Build Coastguard Worker /** 192*4d7e907cSAndroid Build Coastguard Worker * Timing information of the GNSS data synchronized with SystemClock.elapsedRealtimeNanos() 193*4d7e907cSAndroid Build Coastguard Worker * clock. 194*4d7e907cSAndroid Build Coastguard Worker */ 195*4d7e907cSAndroid Build Coastguard Worker ElapsedRealtime elapsedRealtime; 196*4d7e907cSAndroid Build Coastguard Worker }; 197*4d7e907cSAndroid Build Coastguard Worker 198*4d7e907cSAndroid Build Coastguard Worker /** 199*4d7e907cSAndroid Build Coastguard Worker * Callback for the hal to pass a GnssData structure back to the client. 200*4d7e907cSAndroid Build Coastguard Worker * 201*4d7e907cSAndroid Build Coastguard Worker * @param data Contains a reading of GNSS measurements. 202*4d7e907cSAndroid Build Coastguard Worker */ 203*4d7e907cSAndroid Build Coastguard Worker gnssMeasurementCb_2_1(GnssData data); 204*4d7e907cSAndroid Build Coastguard Worker}; 205