xref: /aosp_15_r20/hardware/interfaces/gnss/2.0/IGnssMeasurementCallback.hal (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker/*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2018 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 @1.1::IGnssMeasurementCallback;
21*4d7e907cSAndroid Build Coastguard Workerimport ElapsedRealtime;
22*4d7e907cSAndroid Build Coastguard Workerimport GnssConstellationType;
23*4d7e907cSAndroid Build Coastguard Worker
24*4d7e907cSAndroid Build Coastguard Worker/** The callback interface to report measurements from the HAL. */
25*4d7e907cSAndroid Build Coastguard Workerinterface IGnssMeasurementCallback extends @1.1::IGnssMeasurementCallback {
26*4d7e907cSAndroid Build Coastguard Worker
27*4d7e907cSAndroid Build Coastguard Worker    /**
28*4d7e907cSAndroid Build Coastguard Worker     * Flags indicating the GNSS measurement state.
29*4d7e907cSAndroid Build Coastguard Worker     *
30*4d7e907cSAndroid Build Coastguard Worker     * <p>The expected behavior here is for GNSS HAL to set all the flags that apply. For example,
31*4d7e907cSAndroid Build Coastguard Worker     * if the state for a satellite is only C/A code locked and bit synchronized, and there is still
32*4d7e907cSAndroid Build Coastguard Worker     * millisecond ambiguity, the state must be set as:
33*4d7e907cSAndroid Build Coastguard Worker     *
34*4d7e907cSAndroid Build Coastguard Worker     * STATE_CODE_LOCK | STATE_BIT_SYNC |  STATE_MSEC_AMBIGUOUS
35*4d7e907cSAndroid Build Coastguard Worker     *
36*4d7e907cSAndroid Build Coastguard Worker     * <p>If GNSS is still searching for a satellite, the corresponding state must be set to
37*4d7e907cSAndroid Build Coastguard Worker     * STATE_UNKNOWN(0).
38*4d7e907cSAndroid Build Coastguard Worker     *
39*4d7e907cSAndroid Build Coastguard Worker     * <p>In @2.0::IGnssMeasurementCallback.GnssMeasurement, v1_1.v1_0.receivedSvTimeInNs, the
40*4d7e907cSAndroid Build Coastguard Worker     * received satellite time, is relative to the beginning of the system week for all
41*4d7e907cSAndroid Build Coastguard Worker     * constellations except for Glonass where it is relative to the beginning of the Glonass system
42*4d7e907cSAndroid Build Coastguard Worker     * day.
43*4d7e907cSAndroid Build Coastguard Worker     *
44*4d7e907cSAndroid Build Coastguard Worker     * <p>The table below indicates the valid range of the received GNSS satellite time.  These
45*4d7e907cSAndroid Build Coastguard Worker     * ranges depend on the constellation and code being tracked and the state of the tracking
46*4d7e907cSAndroid Build Coastguard Worker     * algorithms given by the getState method. If the state flag is set, then the valid measurement
47*4d7e907cSAndroid Build Coastguard Worker     * range is zero to the value in the table. The state flag with the widest range indicates the
48*4d7e907cSAndroid Build Coastguard Worker     * range of the received GNSS satellite time value.
49*4d7e907cSAndroid Build Coastguard Worker     *
50*4d7e907cSAndroid Build Coastguard Worker     * <table>
51*4d7e907cSAndroid Build Coastguard Worker     *   <thead>
52*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
53*4d7e907cSAndroid Build Coastguard Worker     *       <td />
54*4d7e907cSAndroid Build Coastguard Worker     *       <td colspan="3"><strong>GPS/QZSS</strong></td>
55*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>GLNS</strong></td>
56*4d7e907cSAndroid Build Coastguard Worker     *       <td colspan="2"><strong>BDS</strong></td>
57*4d7e907cSAndroid Build Coastguard Worker     *       <td colspan="3"><strong>GAL</strong></td>
58*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>SBAS</strong></td>
59*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
60*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
61*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>State Flag</strong></td>
62*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>L1 C/A</strong></td>
63*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>L5I</strong></td>
64*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>L5Q</strong></td>
65*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>L1OF</strong></td>
66*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>B1I (D1)</strong></td>
67*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>B1I &nbsp;(D2)</strong></td>
68*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>E1B</strong></td>
69*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>E1C</strong></td>
70*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>E5AQ</strong></td>
71*4d7e907cSAndroid Build Coastguard Worker     *       <td><strong>L1 C/A</strong></td>
72*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
73*4d7e907cSAndroid Build Coastguard Worker     *   </thead>
74*4d7e907cSAndroid Build Coastguard Worker     *   <tbody>
75*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
76*4d7e907cSAndroid Build Coastguard Worker     *       <td>
77*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_UNKNOWN</strong>
78*4d7e907cSAndroid Build Coastguard Worker     *       </td>
79*4d7e907cSAndroid Build Coastguard Worker     *       <td>0</td>
80*4d7e907cSAndroid Build Coastguard Worker     *       <td>0</td>
81*4d7e907cSAndroid Build Coastguard Worker     *       <td>0</td>
82*4d7e907cSAndroid Build Coastguard Worker     *       <td>0</td>
83*4d7e907cSAndroid Build Coastguard Worker     *       <td>0</td>
84*4d7e907cSAndroid Build Coastguard Worker     *       <td>0</td>
85*4d7e907cSAndroid Build Coastguard Worker     *       <td>0</td>
86*4d7e907cSAndroid Build Coastguard Worker     *       <td>0</td>
87*4d7e907cSAndroid Build Coastguard Worker     *       <td>0</td>
88*4d7e907cSAndroid Build Coastguard Worker     *       <td>0</td>
89*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
90*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
91*4d7e907cSAndroid Build Coastguard Worker     *       <td>
92*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_CODE_LOCK</strong>
93*4d7e907cSAndroid Build Coastguard Worker     *       </td>
94*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms</td>
95*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms</td>
96*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms</td>
97*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms</td>
98*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms</td>
99*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms</td>
100*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
101*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
102*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms</td>
103*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms</td>
104*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
105*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
106*4d7e907cSAndroid Build Coastguard Worker     *       <td>
107*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_SYMBOL_SYNC</strong>
108*4d7e907cSAndroid Build Coastguard Worker     *       </td>
109*4d7e907cSAndroid Build Coastguard Worker     *       <td>20 ms (optional)</td>
110*4d7e907cSAndroid Build Coastguard Worker     *       <td>10 ms</td>
111*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms (optional)</td>
112*4d7e907cSAndroid Build Coastguard Worker     *       <td>10 ms</td>
113*4d7e907cSAndroid Build Coastguard Worker     *       <td>20 ms (optional)</td>
114*4d7e907cSAndroid Build Coastguard Worker     *       <td>2 ms</td>
115*4d7e907cSAndroid Build Coastguard Worker     *       <td>4 ms (optional)</td>
116*4d7e907cSAndroid Build Coastguard Worker     *       <td>4 ms (optional)</td>
117*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms (optional)</td>
118*4d7e907cSAndroid Build Coastguard Worker     *       <td>2 ms</td>
119*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
120*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
121*4d7e907cSAndroid Build Coastguard Worker     *       <td>
122*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_BIT_SYNC</strong>
123*4d7e907cSAndroid Build Coastguard Worker     *       </td>
124*4d7e907cSAndroid Build Coastguard Worker     *       <td>20 ms</td>
125*4d7e907cSAndroid Build Coastguard Worker     *       <td>20 ms</td>
126*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms (optional)</td>
127*4d7e907cSAndroid Build Coastguard Worker     *       <td>20 ms</td>
128*4d7e907cSAndroid Build Coastguard Worker     *       <td>20 ms</td>
129*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
130*4d7e907cSAndroid Build Coastguard Worker     *       <td>8 ms</td>
131*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
132*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 ms (optional)</td>
133*4d7e907cSAndroid Build Coastguard Worker     *       <td>4 ms</td>
134*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
135*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
136*4d7e907cSAndroid Build Coastguard Worker     *       <td>
137*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_SUBFRAME_SYNC</strong>
138*4d7e907cSAndroid Build Coastguard Worker     *       </td>
139*4d7e907cSAndroid Build Coastguard Worker     *       <td>6s</td>
140*4d7e907cSAndroid Build Coastguard Worker     *       <td>6s</td>
141*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
142*4d7e907cSAndroid Build Coastguard Worker     *       <td>2 s</td>
143*4d7e907cSAndroid Build Coastguard Worker     *       <td>6 s</td>
144*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
145*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
146*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
147*4d7e907cSAndroid Build Coastguard Worker     *       <td>100 ms</td>
148*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
149*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
150*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
151*4d7e907cSAndroid Build Coastguard Worker     *       <td>
152*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_TOW_DECODED</strong>
153*4d7e907cSAndroid Build Coastguard Worker     *       </td>
154*4d7e907cSAndroid Build Coastguard Worker     *       <td colspan="2">1 week</td>
155*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
156*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 day</td>
157*4d7e907cSAndroid Build Coastguard Worker     *       <td colspan="2">1 week</td>
158*4d7e907cSAndroid Build Coastguard Worker     *       <td colspan="2">1 week</td>
159*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
160*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 week</td>
161*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
162*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
163*4d7e907cSAndroid Build Coastguard Worker     *       <td>
164*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_TOW_KNOWN</strong>
165*4d7e907cSAndroid Build Coastguard Worker     *       </td>
166*4d7e907cSAndroid Build Coastguard Worker     *       <td colspan="3">1 week</td>
167*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 day</td>
168*4d7e907cSAndroid Build Coastguard Worker     *       <td colspan="2">1 week</td>
169*4d7e907cSAndroid Build Coastguard Worker     *       <td colspan="3">1 week</td>
170*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 week</td>
171*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
172*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
173*4d7e907cSAndroid Build Coastguard Worker     *       <td>
174*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_GLO_STRING_SYNC</strong>
175*4d7e907cSAndroid Build Coastguard Worker     *       </td>
176*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
177*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
178*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
179*4d7e907cSAndroid Build Coastguard Worker     *       <td>2 s</td>
180*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
181*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
182*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
183*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
184*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
185*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
186*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
187*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
188*4d7e907cSAndroid Build Coastguard Worker     *       <td>
189*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_GLO_TOD_DECODED</strong>
190*4d7e907cSAndroid Build Coastguard Worker     *       </td>
191*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
192*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
193*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
194*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 day</td>
195*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
196*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
197*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
198*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
199*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
200*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
201*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
202*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
203*4d7e907cSAndroid Build Coastguard Worker     *       <td>
204*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_GLO_TOD_KNOWN</strong>
205*4d7e907cSAndroid Build Coastguard Worker     *       </td>
206*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
207*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
208*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
209*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 day</td>
210*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
211*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
212*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
213*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
214*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
215*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
216*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
217*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
218*4d7e907cSAndroid Build Coastguard Worker     *       <td>
219*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_BDS_D2_BIT_SYNC</strong>
220*4d7e907cSAndroid Build Coastguard Worker     *       </td>
221*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
222*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
223*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
224*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
225*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
226*4d7e907cSAndroid Build Coastguard Worker     *       <td>2 ms</td>
227*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
228*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
229*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
230*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
231*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
232*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
233*4d7e907cSAndroid Build Coastguard Worker     *       <td>
234*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_BDS_D2_SUBFRAME_SYNC</strong>
235*4d7e907cSAndroid Build Coastguard Worker     *       </td>
236*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
237*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
238*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
239*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
240*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
241*4d7e907cSAndroid Build Coastguard Worker     *       <td>600 ms</td>
242*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
243*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
244*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
245*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
246*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
247*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
248*4d7e907cSAndroid Build Coastguard Worker     *       <td>
249*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_GAL_E1BC_CODE_LOCK</strong>
250*4d7e907cSAndroid Build Coastguard Worker     *       </td>
251*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
252*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
253*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
254*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
255*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
256*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
257*4d7e907cSAndroid Build Coastguard Worker     *       <td>4 ms</td>
258*4d7e907cSAndroid Build Coastguard Worker     *       <td>4 ms</td>
259*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
260*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
261*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
262*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
263*4d7e907cSAndroid Build Coastguard Worker     *       <td>
264*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_GAL_E1C_2ND_CODE_LOCK</strong>
265*4d7e907cSAndroid Build Coastguard Worker     *       </td>
266*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
267*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
268*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
269*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
270*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
271*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
272*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
273*4d7e907cSAndroid Build Coastguard Worker     *       <td>100 ms</td>
274*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
275*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
276*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
277*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
278*4d7e907cSAndroid Build Coastguard Worker     *       <td>
279*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_2ND_CODE_LOCK</strong>
280*4d7e907cSAndroid Build Coastguard Worker     *       </td>
281*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
282*4d7e907cSAndroid Build Coastguard Worker     *       <td>10 ms (optional)</td>
283*4d7e907cSAndroid Build Coastguard Worker     *       <td>20 ms</td>
284*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
285*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
286*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
287*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
288*4d7e907cSAndroid Build Coastguard Worker     *       <td>100 ms (optional)</td>
289*4d7e907cSAndroid Build Coastguard Worker     *       <td>100 ms</td>
290*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
291*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
292*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
293*4d7e907cSAndroid Build Coastguard Worker     *       <td>
294*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_GAL_E1B_PAGE_SYNC</strong>
295*4d7e907cSAndroid Build Coastguard Worker     *       </td>
296*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
297*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
298*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
299*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
300*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
301*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
302*4d7e907cSAndroid Build Coastguard Worker     *       <td>2 s</td>
303*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
304*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
305*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
306*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
307*4d7e907cSAndroid Build Coastguard Worker     *     <tr>
308*4d7e907cSAndroid Build Coastguard Worker     *       <td>
309*4d7e907cSAndroid Build Coastguard Worker     *         <strong>STATE_SBAS_SYNC</strong>
310*4d7e907cSAndroid Build Coastguard Worker     *       </td>
311*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
312*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
313*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
314*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
315*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
316*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
317*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
318*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
319*4d7e907cSAndroid Build Coastguard Worker     *       <td>-</td>
320*4d7e907cSAndroid Build Coastguard Worker     *       <td>1 s</td>
321*4d7e907cSAndroid Build Coastguard Worker     *     </tr>
322*4d7e907cSAndroid Build Coastguard Worker     *   </tbody>
323*4d7e907cSAndroid Build Coastguard Worker     * </table>
324*4d7e907cSAndroid Build Coastguard Worker     *
325*4d7e907cSAndroid Build Coastguard Worker     * <p>Note: TOW Known refers to the case where TOW is possibly not decoded over the air but has
326*4d7e907cSAndroid Build Coastguard Worker     * been determined from other sources. If TOW decoded is set then TOW Known must also be set.
327*4d7e907cSAndroid Build Coastguard Worker     *
328*4d7e907cSAndroid Build Coastguard Worker     * <p>Note well: if there is any ambiguity in integer millisecond, STATE_MSEC_AMBIGUOUS must be
329*4d7e907cSAndroid Build Coastguard Worker     * set accordingly, in the 'state' field.  This value must be populated if 'state' !=
330*4d7e907cSAndroid Build Coastguard Worker     * STATE_UNKNOWN.
331*4d7e907cSAndroid Build Coastguard Worker     *
332*4d7e907cSAndroid Build Coastguard Worker     * <p>Note on optional flags:
333*4d7e907cSAndroid Build Coastguard Worker     * <ul>
334*4d7e907cSAndroid Build Coastguard Worker     *     <li> For L1 C/A and B1I, STATE_SYMBOL_SYNC is optional since the symbol length is the
335*4d7e907cSAndroid Build Coastguard Worker     *     same as the bit length.
336*4d7e907cSAndroid Build Coastguard Worker     *     <li> For L5Q and E5aQ, STATE_BIT_SYNC and STATE_SYMBOL_SYNC are optional since they are
337*4d7e907cSAndroid Build Coastguard Worker     *     implied by STATE_CODE_LOCK.
338*4d7e907cSAndroid Build Coastguard Worker     *     <li> STATE_2ND_CODE_LOCK for L5I is optional since it is implied by STATE_SYMBOL_SYNC.
339*4d7e907cSAndroid Build Coastguard Worker     *     <li> STATE_2ND_CODE_LOCK for E1C is optional since it is implied by
340*4d7e907cSAndroid Build Coastguard Worker     *     STATE_GAL_E1C_2ND_CODE_LOCK.
341*4d7e907cSAndroid Build Coastguard Worker     *     <li> For E1B and E1C, STATE_SYMBOL_SYNC is optional, because it is implied by
342*4d7e907cSAndroid Build Coastguard Worker     *     STATE_GAL_E1BC_CODE_LOCK.
343*4d7e907cSAndroid Build Coastguard Worker     * </ul>
344*4d7e907cSAndroid Build Coastguard Worker     *
345*4d7e907cSAndroid Build Coastguard Worker     */
346*4d7e907cSAndroid Build Coastguard Worker    @export(name="", value_prefix="GNSS_MEASUREMENT_")
347*4d7e907cSAndroid Build Coastguard Worker    enum GnssMeasurementState : uint32_t {
348*4d7e907cSAndroid Build Coastguard Worker        STATE_UNKNOWN                = 0,
349*4d7e907cSAndroid Build Coastguard Worker        STATE_CODE_LOCK              = 1 << 0,
350*4d7e907cSAndroid Build Coastguard Worker        STATE_BIT_SYNC               = 1 << 1,
351*4d7e907cSAndroid Build Coastguard Worker        STATE_SUBFRAME_SYNC          = 1 << 2,
352*4d7e907cSAndroid Build Coastguard Worker        STATE_TOW_DECODED            = 1 << 3,
353*4d7e907cSAndroid Build Coastguard Worker        STATE_MSEC_AMBIGUOUS         = 1 << 4,
354*4d7e907cSAndroid Build Coastguard Worker        STATE_SYMBOL_SYNC            = 1 << 5,
355*4d7e907cSAndroid Build Coastguard Worker        STATE_GLO_STRING_SYNC        = 1 << 6,
356*4d7e907cSAndroid Build Coastguard Worker        STATE_GLO_TOD_DECODED        = 1 << 7,
357*4d7e907cSAndroid Build Coastguard Worker        STATE_BDS_D2_BIT_SYNC        = 1 << 8,
358*4d7e907cSAndroid Build Coastguard Worker        STATE_BDS_D2_SUBFRAME_SYNC   = 1 << 9,
359*4d7e907cSAndroid Build Coastguard Worker        STATE_GAL_E1BC_CODE_LOCK     = 1 << 10,
360*4d7e907cSAndroid Build Coastguard Worker        STATE_GAL_E1C_2ND_CODE_LOCK  = 1 << 11,
361*4d7e907cSAndroid Build Coastguard Worker        STATE_GAL_E1B_PAGE_SYNC      = 1 << 12,
362*4d7e907cSAndroid Build Coastguard Worker        STATE_SBAS_SYNC              = 1 << 13,
363*4d7e907cSAndroid Build Coastguard Worker        STATE_TOW_KNOWN              = 1 << 14,
364*4d7e907cSAndroid Build Coastguard Worker        STATE_GLO_TOD_KNOWN          = 1 << 15,
365*4d7e907cSAndroid Build Coastguard Worker        STATE_2ND_CODE_LOCK          = 1 << 16,
366*4d7e907cSAndroid Build Coastguard Worker    };
367*4d7e907cSAndroid Build Coastguard Worker
368*4d7e907cSAndroid Build Coastguard Worker    /**
369*4d7e907cSAndroid Build Coastguard Worker     * Extends a GNSS Measurement, adding a GnssMeasurementCodeType, a GnssMeasurementState, and
370*4d7e907cSAndroid Build Coastguard Worker     * replacing the GnssConstellationType.
371*4d7e907cSAndroid Build Coastguard Worker     */
372*4d7e907cSAndroid Build Coastguard Worker    struct GnssMeasurement {
373*4d7e907cSAndroid Build Coastguard Worker        /**
374*4d7e907cSAndroid Build Coastguard Worker         * GNSS measurement information for a single satellite and frequency, as in the 1.1
375*4d7e907cSAndroid Build Coastguard Worker         * version of the HAL with further clarification of the value reported in the
376*4d7e907cSAndroid Build Coastguard Worker         * accumulatedDeltaRangeM field, i.e., the alignment of the phase measurement will not be
377*4d7e907cSAndroid Build Coastguard Worker         * adjusted by the receiver so the in-phase and quadrature phase components will have a
378*4d7e907cSAndroid Build Coastguard Worker         * quarter cycle offset as they do when transmitted from the satellites. If the measurement
379*4d7e907cSAndroid Build Coastguard Worker         * is from a combination of the in-phase and quadrature phase components, then the alignment
380*4d7e907cSAndroid Build Coastguard Worker         * of the phase measurement will be aligned to the in-phase component.
381*4d7e907cSAndroid Build Coastguard Worker         *
382*4d7e907cSAndroid Build Coastguard Worker         * In this version of the HAL, the field 'state' in the v1_1.v1_0 struct is deprecated, and
383*4d7e907cSAndroid Build Coastguard Worker         * is no longer used by the framework. The satellite sync state is instead reported in
384*4d7e907cSAndroid Build Coastguard Worker         * @2.0::IGnssMeasurementCallback.GnssMeasurement.state.
385*4d7e907cSAndroid Build Coastguard Worker         *
386*4d7e907cSAndroid Build Coastguard Worker         * In this version of the HAL, the field 'constellation' in the v1_1.v1_0 struct is
387*4d7e907cSAndroid Build Coastguard Worker         * deprecated, and is no longer used by the framework. The constellation type is instead
388*4d7e907cSAndroid Build Coastguard Worker         * reported in @2.0::IGnssMeasurementCallback.GnssMeasurement.constellation.
389*4d7e907cSAndroid Build Coastguard Worker         */
390*4d7e907cSAndroid Build Coastguard Worker        @1.1::IGnssMeasurementCallback.GnssMeasurement v1_1;
391*4d7e907cSAndroid Build Coastguard Worker
392*4d7e907cSAndroid Build Coastguard Worker        /**
393*4d7e907cSAndroid Build Coastguard Worker         * The type of code that is currently being tracked in the GNSS measurement.
394*4d7e907cSAndroid Build Coastguard Worker         *
395*4d7e907cSAndroid Build Coastguard Worker         * For high precision applications the type of code being tracked needs to be considered
396*4d7e907cSAndroid Build Coastguard Worker         * in-order to properly apply code specific corrections to the pseudorange measurements.
397*4d7e907cSAndroid Build Coastguard Worker         *
398*4d7e907cSAndroid Build Coastguard Worker         * Value "A" represents GALILEO E1A, GALILEO E6A, IRNSS L5A, IRNSS SA.
399*4d7e907cSAndroid Build Coastguard Worker         *
400*4d7e907cSAndroid Build Coastguard Worker         * Value "B" represents GALILEO E1B, GALILEO E6B, IRNSS L5B, IRNSS SB.
401*4d7e907cSAndroid Build Coastguard Worker         *
402*4d7e907cSAndroid Build Coastguard Worker         * Value "C" represents GPS L1 C/A,  GPS L2 C/A, GLONASS G1 C/A, GLONASS G2 C/A, GALILEO E1C,
403*4d7e907cSAndroid Build Coastguard Worker         * GALILEO E6C, SBAS L1 C/A, QZSS L1 C/A, IRNSS L5C.
404*4d7e907cSAndroid Build Coastguard Worker         *
405*4d7e907cSAndroid Build Coastguard Worker         * value "D" represents BDS B1C D.
406*4d7e907cSAndroid Build Coastguard Worker         *
407*4d7e907cSAndroid Build Coastguard Worker         * Value "I" represents GPS L5 I, GLONASS G3 I, GALILEO E5a I, GALILEO E5b I, GALILEO E5a+b I,
408*4d7e907cSAndroid Build Coastguard Worker         * SBAS L5 I, QZSS L5 I, BDS B1 I, BDS B2 I, BDS B3 I.
409*4d7e907cSAndroid Build Coastguard Worker         *
410*4d7e907cSAndroid Build Coastguard Worker         * Value "L" represents GPS L1C (P), GPS L2C (L), QZSS L1C (P), QZSS L2C (L), LEX(6) L.
411*4d7e907cSAndroid Build Coastguard Worker         *
412*4d7e907cSAndroid Build Coastguard Worker         * Value "M" represents GPS L1M, GPS L2M.
413*4d7e907cSAndroid Build Coastguard Worker         *
414*4d7e907cSAndroid Build Coastguard Worker         * Value "N" represents GPS L1 codeless, GPS L2 codeless.
415*4d7e907cSAndroid Build Coastguard Worker         *
416*4d7e907cSAndroid Build Coastguard Worker         * Value "P" represents GPS L1P, GPS L2P, GLONASS G1P, GLONASS G2P, BDS B1C P.
417*4d7e907cSAndroid Build Coastguard Worker         *
418*4d7e907cSAndroid Build Coastguard Worker         * Value "Q" represents GPS L5 Q, GLONASS G3 Q, GALILEO E5a Q, GALILEO E5b Q, GALILEO E5a+b Q,
419*4d7e907cSAndroid Build Coastguard Worker         * SBAS L5 Q, QZSS L5 Q, BDS B1 Q, BDS B2 Q, BDS B3 Q.
420*4d7e907cSAndroid Build Coastguard Worker         *
421*4d7e907cSAndroid Build Coastguard Worker         * Value "S" represents GPS L1C (D), GPS L2C (M), QZSS L1C (D), QZSS L2C (M), LEX(6) S.
422*4d7e907cSAndroid Build Coastguard Worker         *
423*4d7e907cSAndroid Build Coastguard Worker         * Value "W" represents GPS L1 Z-tracking, GPS L2 Z-tracking.
424*4d7e907cSAndroid Build Coastguard Worker         *
425*4d7e907cSAndroid Build Coastguard Worker         * Value "X" represents GPS L1C (D+P), GPS L2C (M+L), GPS L5 (I+Q), GLONASS G3 (I+Q),
426*4d7e907cSAndroid Build Coastguard Worker         * GALILEO E1 (B+C), GALILEO E5a (I+Q), GALILEO E5b (I+Q), GALILEO E5a+b(I+Q),
427*4d7e907cSAndroid Build Coastguard Worker         * GALILEO E6 (B+C), SBAS L5 (I+Q), QZSS L1C (D+P), QZSS L2C (M+L), QZSS L5 (I+Q),
428*4d7e907cSAndroid Build Coastguard Worker         * LEX(6) (S+L), BDS B1 (I+Q), BDS B1C (D+P), BDS B2 (I+Q), BDS B3 (I+Q), IRNSS L5 (B+C).
429*4d7e907cSAndroid Build Coastguard Worker         *
430*4d7e907cSAndroid Build Coastguard Worker         * Value "Y" represents GPS L1Y, GPS L2Y.
431*4d7e907cSAndroid Build Coastguard Worker         *
432*4d7e907cSAndroid Build Coastguard Worker         * Value "Z" represents GALILEO E1 (A+B+C), GALILEO E6 (A+B+C), QZSS L1-SAIF.
433*4d7e907cSAndroid Build Coastguard Worker         *
434*4d7e907cSAndroid Build Coastguard Worker         * Value "UNKNOWN" represents the GNSS Measurement's code type is unknown.
435*4d7e907cSAndroid Build Coastguard Worker         *
436*4d7e907cSAndroid Build Coastguard Worker         * This is used to specify the observation descriptor defined in GNSS Observation Data File
437*4d7e907cSAndroid Build Coastguard Worker         * Header Section Description in the RINEX standard (Version 3.XX). In RINEX Version 3.03,
438*4d7e907cSAndroid Build Coastguard Worker         * in Appendix Table A2 Attributes are listed as uppercase letters (for instance, "A" for
439*4d7e907cSAndroid Build Coastguard Worker         * "A channel"). In the future, if for instance a code "G" was added in the official RINEX
440*4d7e907cSAndroid Build Coastguard Worker         * standard, "G" could be specified here.
441*4d7e907cSAndroid Build Coastguard Worker         */
442*4d7e907cSAndroid Build Coastguard Worker        string codeType;
443*4d7e907cSAndroid Build Coastguard Worker
444*4d7e907cSAndroid Build Coastguard Worker        /**
445*4d7e907cSAndroid Build Coastguard Worker         * Per satellite sync state. It represents the current sync state for the associated
446*4d7e907cSAndroid Build Coastguard Worker         * satellite.
447*4d7e907cSAndroid Build Coastguard Worker         *
448*4d7e907cSAndroid Build Coastguard Worker         * Based on the sync state, the receivedSvTimeInNs field must be interpreted accordingly.
449*4d7e907cSAndroid Build Coastguard Worker         *
450*4d7e907cSAndroid Build Coastguard Worker         * This value is mandatory.
451*4d7e907cSAndroid Build Coastguard Worker         */
452*4d7e907cSAndroid Build Coastguard Worker        bitfield<GnssMeasurementState> state;
453*4d7e907cSAndroid Build Coastguard Worker
454*4d7e907cSAndroid Build Coastguard Worker        /**
455*4d7e907cSAndroid Build Coastguard Worker         * The constellation type of the GNSS measurement.
456*4d7e907cSAndroid Build Coastguard Worker         */
457*4d7e907cSAndroid Build Coastguard Worker        GnssConstellationType constellation;
458*4d7e907cSAndroid Build Coastguard Worker    };
459*4d7e907cSAndroid Build Coastguard Worker
460*4d7e907cSAndroid Build Coastguard Worker    /**
461*4d7e907cSAndroid Build Coastguard Worker     * Complete set of GNSS Measurement data, same as 1.1 with additional enum in measurements.
462*4d7e907cSAndroid Build Coastguard Worker     */
463*4d7e907cSAndroid Build Coastguard Worker    struct GnssData {
464*4d7e907cSAndroid Build Coastguard Worker        /** The full set of satellite measurement observations. */
465*4d7e907cSAndroid Build Coastguard Worker        vec<GnssMeasurement> measurements;
466*4d7e907cSAndroid Build Coastguard Worker
467*4d7e907cSAndroid Build Coastguard Worker        /** The GNSS clock time reading. */
468*4d7e907cSAndroid Build Coastguard Worker        GnssClock clock;
469*4d7e907cSAndroid Build Coastguard Worker
470*4d7e907cSAndroid Build Coastguard Worker        /**
471*4d7e907cSAndroid Build Coastguard Worker         * Timing information of the GNSS data synchronized with SystemClock.elapsedRealtimeNanos()
472*4d7e907cSAndroid Build Coastguard Worker         * clock.
473*4d7e907cSAndroid Build Coastguard Worker         */
474*4d7e907cSAndroid Build Coastguard Worker        ElapsedRealtime elapsedRealtime;
475*4d7e907cSAndroid Build Coastguard Worker    };
476*4d7e907cSAndroid Build Coastguard Worker
477*4d7e907cSAndroid Build Coastguard Worker    /**
478*4d7e907cSAndroid Build Coastguard Worker     * Callback for the hal to pass a GnssData structure back to the client.
479*4d7e907cSAndroid Build Coastguard Worker     *
480*4d7e907cSAndroid Build Coastguard Worker     * @param data Contains a reading of GNSS measurements.
481*4d7e907cSAndroid Build Coastguard Worker     */
482*4d7e907cSAndroid Build Coastguard Worker    gnssMeasurementCb_2_0(GnssData data);
483*4d7e907cSAndroid Build Coastguard Worker};
484