xref: /aosp_15_r20/hardware/interfaces/gnss/2.1/IGnssMeasurementCallback.hal (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
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