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 (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