1*4d7e907cSAndroid Build Coastguard Worker/* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2016 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 Worker/** 20*4d7e907cSAndroid Build Coastguard Worker * The interface is required for the HAL to communicate certain information 21*4d7e907cSAndroid Build Coastguard Worker * like status and location info back to the platform, the platform implements 22*4d7e907cSAndroid Build Coastguard Worker * the interfaces and passes a handle to the HAL. 23*4d7e907cSAndroid Build Coastguard Worker */ 24*4d7e907cSAndroid Build Coastguard Workerinterface IGnssCallback { 25*4d7e907cSAndroid Build Coastguard Worker /** Flags for the gnssSetCapabilities callback. */ 26*4d7e907cSAndroid Build Coastguard Worker @export(name="", value_prefix="GPS_CAPABILITY_") 27*4d7e907cSAndroid Build Coastguard Worker enum Capabilities : uint32_t { 28*4d7e907cSAndroid Build Coastguard Worker /** 29*4d7e907cSAndroid Build Coastguard Worker * GNSS HAL schedules fixes for RECURRENCE_PERIODIC mode. 30*4d7e907cSAndroid Build Coastguard Worker * If this is not set, then the framework will use 1000ms for 31*4d7e907cSAndroid Build Coastguard Worker * minInterval and will call start() and stop() to schedule the GNSS. 32*4d7e907cSAndroid Build Coastguard Worker */ 33*4d7e907cSAndroid Build Coastguard Worker SCHEDULING = 1 << 0, 34*4d7e907cSAndroid Build Coastguard Worker /** GNSS supports MS-Based AGNSS mode */ 35*4d7e907cSAndroid Build Coastguard Worker MSB = 1 << 1, 36*4d7e907cSAndroid Build Coastguard Worker /** GNSS supports MS-Assisted AGNSS mode */ 37*4d7e907cSAndroid Build Coastguard Worker MSA = 1 << 2, 38*4d7e907cSAndroid Build Coastguard Worker /** GNSS supports single-shot fixes */ 39*4d7e907cSAndroid Build Coastguard Worker SINGLE_SHOT = 1 << 3, 40*4d7e907cSAndroid Build Coastguard Worker /** 41*4d7e907cSAndroid Build Coastguard Worker * The platform periodically injects time to GNSS in addition to 42*4d7e907cSAndroid Build Coastguard Worker * on-demand and occasional time updates. 43*4d7e907cSAndroid Build Coastguard Worker * 44*4d7e907cSAndroid Build Coastguard Worker * Note: The naming of "on demand" should be "periodic" instead. This 45*4d7e907cSAndroid Build Coastguard Worker * is the result of a historic implementation bug, b/73893222. 46*4d7e907cSAndroid Build Coastguard Worker */ 47*4d7e907cSAndroid Build Coastguard Worker ON_DEMAND_TIME = 1 << 4, 48*4d7e907cSAndroid Build Coastguard Worker /** GNSS supports Geofencing */ 49*4d7e907cSAndroid Build Coastguard Worker GEOFENCING = 1 << 5, 50*4d7e907cSAndroid Build Coastguard Worker /** GNSS supports Measurements for at least GPS. */ 51*4d7e907cSAndroid Build Coastguard Worker MEASUREMENTS = 1 << 6, 52*4d7e907cSAndroid Build Coastguard Worker /** GNSS supports Navigation Messages */ 53*4d7e907cSAndroid Build Coastguard Worker NAV_MESSAGES = 1 << 7 54*4d7e907cSAndroid Build Coastguard Worker }; 55*4d7e907cSAndroid Build Coastguard Worker 56*4d7e907cSAndroid Build Coastguard Worker /** GNSS status event values. */ 57*4d7e907cSAndroid Build Coastguard Worker @export(name="", value_prefix="GPS_STATUS_") 58*4d7e907cSAndroid Build Coastguard Worker enum GnssStatusValue : uint8_t { 59*4d7e907cSAndroid Build Coastguard Worker /** GNSS status unknown. */ 60*4d7e907cSAndroid Build Coastguard Worker NONE = 0, 61*4d7e907cSAndroid Build Coastguard Worker /** GNSS has begun navigating. */ 62*4d7e907cSAndroid Build Coastguard Worker SESSION_BEGIN = 1, 63*4d7e907cSAndroid Build Coastguard Worker /** GNSS has stopped navigating. */ 64*4d7e907cSAndroid Build Coastguard Worker SESSION_END = 2, 65*4d7e907cSAndroid Build Coastguard Worker /** GNSS has powered on but is not navigating. */ 66*4d7e907cSAndroid Build Coastguard Worker ENGINE_ON = 3, 67*4d7e907cSAndroid Build Coastguard Worker /** GNSS is powered off. */ 68*4d7e907cSAndroid Build Coastguard Worker ENGINE_OFF = 4 69*4d7e907cSAndroid Build Coastguard Worker }; 70*4d7e907cSAndroid Build Coastguard Worker 71*4d7e907cSAndroid Build Coastguard Worker /** 72*4d7e907cSAndroid Build Coastguard Worker * Flags that indicate information about the satellite 73*4d7e907cSAndroid Build Coastguard Worker */ 74*4d7e907cSAndroid Build Coastguard Worker @export(name="", value_prefix="GNSS_SV_FLAGS_") 75*4d7e907cSAndroid Build Coastguard Worker enum GnssSvFlags : uint8_t { 76*4d7e907cSAndroid Build Coastguard Worker NONE = 0, 77*4d7e907cSAndroid Build Coastguard Worker HAS_EPHEMERIS_DATA = 1 << 0, 78*4d7e907cSAndroid Build Coastguard Worker HAS_ALMANAC_DATA = 1 << 1, 79*4d7e907cSAndroid Build Coastguard Worker USED_IN_FIX = 1 << 2, 80*4d7e907cSAndroid Build Coastguard Worker HAS_CARRIER_FREQUENCY = 1 << 3 81*4d7e907cSAndroid Build Coastguard Worker }; 82*4d7e907cSAndroid Build Coastguard Worker 83*4d7e907cSAndroid Build Coastguard Worker struct GnssSvInfo { 84*4d7e907cSAndroid Build Coastguard Worker /** 85*4d7e907cSAndroid Build Coastguard Worker * Pseudo-random or satellite ID number for the satellite, a.k.a. Space Vehicle (SV), or 86*4d7e907cSAndroid Build Coastguard Worker * FCN/OSN number for Glonass. The distinction is made by looking at constellation field. 87*4d7e907cSAndroid Build Coastguard Worker * Values must be in the range of: 88*4d7e907cSAndroid Build Coastguard Worker * 89*4d7e907cSAndroid Build Coastguard Worker * - GNSS: 1-32 90*4d7e907cSAndroid Build Coastguard Worker * - SBAS: 120-151, 183-192 91*4d7e907cSAndroid Build Coastguard Worker * - GLONASS: 1-24, the orbital slot number (OSN), if known. Or, if not: 92*4d7e907cSAndroid Build Coastguard Worker * 93-106, the frequency channel number (FCN) (-7 to +6) offset by 93*4d7e907cSAndroid Build Coastguard Worker * + 100 94*4d7e907cSAndroid Build Coastguard Worker * i.e. report an FCN of -7 as 93, FCN of 0 as 100, and FCN of +6 95*4d7e907cSAndroid Build Coastguard Worker * as 106. 96*4d7e907cSAndroid Build Coastguard Worker * - QZSS: 193-200 97*4d7e907cSAndroid Build Coastguard Worker * - Galileo: 1-36 98*4d7e907cSAndroid Build Coastguard Worker * - Beidou: 1-37 99*4d7e907cSAndroid Build Coastguard Worker * - IRNSS: 1-14 100*4d7e907cSAndroid Build Coastguard Worker */ 101*4d7e907cSAndroid Build Coastguard Worker int16_t svid; 102*4d7e907cSAndroid Build Coastguard Worker 103*4d7e907cSAndroid Build Coastguard Worker /** 104*4d7e907cSAndroid Build Coastguard Worker * Defines the constellation of the given SV. 105*4d7e907cSAndroid Build Coastguard Worker */ 106*4d7e907cSAndroid Build Coastguard Worker GnssConstellationType constellation; 107*4d7e907cSAndroid Build Coastguard Worker 108*4d7e907cSAndroid Build Coastguard Worker /** 109*4d7e907cSAndroid Build Coastguard Worker * Carrier-to-noise density in dB-Hz, typically in the range [0, 63]. 110*4d7e907cSAndroid Build Coastguard Worker * It contains the measured C/N0 value for the signal at the antenna port. 111*4d7e907cSAndroid Build Coastguard Worker * 112*4d7e907cSAndroid Build Coastguard Worker * This is a mandatory value. 113*4d7e907cSAndroid Build Coastguard Worker */ 114*4d7e907cSAndroid Build Coastguard Worker float cN0Dbhz; 115*4d7e907cSAndroid Build Coastguard Worker 116*4d7e907cSAndroid Build Coastguard Worker /** Elevation of SV in degrees. */ 117*4d7e907cSAndroid Build Coastguard Worker float elevationDegrees; 118*4d7e907cSAndroid Build Coastguard Worker 119*4d7e907cSAndroid Build Coastguard Worker /** Azimuth of SV in degrees. */ 120*4d7e907cSAndroid Build Coastguard Worker float azimuthDegrees; 121*4d7e907cSAndroid Build Coastguard Worker 122*4d7e907cSAndroid Build Coastguard Worker /** 123*4d7e907cSAndroid Build Coastguard Worker * Carrier frequency of the signal tracked, for example it can be the 124*4d7e907cSAndroid Build Coastguard Worker * GPS central frequency for L1 = 1575.45 MHz, or L2 = 1227.60 MHz, L5 = 125*4d7e907cSAndroid Build Coastguard Worker * 1176.45 MHz, varying GLO channels, etc. If the field is zero, it is 126*4d7e907cSAndroid Build Coastguard Worker * the primary common use central frequency, e.g. L1 = 1575.45 MHz for 127*4d7e907cSAndroid Build Coastguard Worker * GPS. 128*4d7e907cSAndroid Build Coastguard Worker * 129*4d7e907cSAndroid Build Coastguard Worker * For an L1, L5 receiver tracking a satellite on L1 and L5 at the same 130*4d7e907cSAndroid Build Coastguard Worker * time, two GnssSvInfo structs must be reported for this same 131*4d7e907cSAndroid Build Coastguard Worker * satellite, in one of the structs, all the values related 132*4d7e907cSAndroid Build Coastguard Worker * to L1 must be filled, and in the other all of the values related to 133*4d7e907cSAndroid Build Coastguard Worker * L5 must be filled. 134*4d7e907cSAndroid Build Coastguard Worker * 135*4d7e907cSAndroid Build Coastguard Worker * If the data is available, svFlag must contain HAS_CARRIER_FREQUENCY. 136*4d7e907cSAndroid Build Coastguard Worker */ 137*4d7e907cSAndroid Build Coastguard Worker float carrierFrequencyHz; 138*4d7e907cSAndroid Build Coastguard Worker 139*4d7e907cSAndroid Build Coastguard Worker /** 140*4d7e907cSAndroid Build Coastguard Worker * Contains additional data about the given SV. 141*4d7e907cSAndroid Build Coastguard Worker */ 142*4d7e907cSAndroid Build Coastguard Worker bitfield<GnssSvFlags> svFlag; 143*4d7e907cSAndroid Build Coastguard Worker }; 144*4d7e907cSAndroid Build Coastguard Worker 145*4d7e907cSAndroid Build Coastguard Worker /** 146*4d7e907cSAndroid Build Coastguard Worker * Represents SV status. 147*4d7e907cSAndroid Build Coastguard Worker */ 148*4d7e907cSAndroid Build Coastguard Worker struct GnssSvStatus { 149*4d7e907cSAndroid Build Coastguard Worker /** 150*4d7e907cSAndroid Build Coastguard Worker * Number of GNSS SVs currently visible, refers to the SVs stored in sv_list 151*4d7e907cSAndroid Build Coastguard Worker */ 152*4d7e907cSAndroid Build Coastguard Worker uint32_t numSvs; 153*4d7e907cSAndroid Build Coastguard Worker 154*4d7e907cSAndroid Build Coastguard Worker /** 155*4d7e907cSAndroid Build Coastguard Worker * Pointer to an array of SVs information for all GNSS constellations, 156*4d7e907cSAndroid Build Coastguard Worker * except GNSS, which is reported using svList 157*4d7e907cSAndroid Build Coastguard Worker */ 158*4d7e907cSAndroid Build Coastguard Worker GnssSvInfo[GnssMax:SVS_COUNT] gnssSvList; 159*4d7e907cSAndroid Build Coastguard Worker 160*4d7e907cSAndroid Build Coastguard Worker }; 161*4d7e907cSAndroid Build Coastguard Worker 162*4d7e907cSAndroid Build Coastguard Worker /** 163*4d7e907cSAndroid Build Coastguard Worker * Called when a GNSS location is available. 164*4d7e907cSAndroid Build Coastguard Worker * 165*4d7e907cSAndroid Build Coastguard Worker * @param location Location information from HAL. 166*4d7e907cSAndroid Build Coastguard Worker */ 167*4d7e907cSAndroid Build Coastguard Worker gnssLocationCb(GnssLocation location); 168*4d7e907cSAndroid Build Coastguard Worker 169*4d7e907cSAndroid Build Coastguard Worker /** 170*4d7e907cSAndroid Build Coastguard Worker * Called to communicate the status of the GNSS engine. 171*4d7e907cSAndroid Build Coastguard Worker * 172*4d7e907cSAndroid Build Coastguard Worker * @param status Status information from HAL. 173*4d7e907cSAndroid Build Coastguard Worker */ 174*4d7e907cSAndroid Build Coastguard Worker gnssStatusCb(GnssStatusValue status); 175*4d7e907cSAndroid Build Coastguard Worker 176*4d7e907cSAndroid Build Coastguard Worker /** 177*4d7e907cSAndroid Build Coastguard Worker * @param svInfo SV status information from HAL. 178*4d7e907cSAndroid Build Coastguard Worker */ 179*4d7e907cSAndroid Build Coastguard Worker gnssSvStatusCb(GnssSvStatus svInfo); 180*4d7e907cSAndroid Build Coastguard Worker 181*4d7e907cSAndroid Build Coastguard Worker /** 182*4d7e907cSAndroid Build Coastguard Worker * Called when NMEA data is available. 183*4d7e907cSAndroid Build Coastguard Worker * Callback for reporting NMEA sentences. 184*4d7e907cSAndroid Build Coastguard Worker * 185*4d7e907cSAndroid Build Coastguard Worker * @param timestamp Marks the instance of reporting. 186*4d7e907cSAndroid Build Coastguard Worker * @param nmea Follows standard NMEA 0183. Each sentence begins with a '$' 187*4d7e907cSAndroid Build Coastguard Worker * and ends with a carriage return/line feed sequence and can be no longer 188*4d7e907cSAndroid Build Coastguard Worker * than 80 characters of visible text (plus the line terminators). The data 189*4d7e907cSAndroid Build Coastguard Worker * is contained within this single line with data items separated by commas. 190*4d7e907cSAndroid Build Coastguard Worker * The data itself is just ascii text and may extend over multiple sentences 191*4d7e907cSAndroid Build Coastguard Worker * in certain specialized instances but is normally fully contained in one 192*4d7e907cSAndroid Build Coastguard Worker * variable length sentence. The data may vary in the amount of precision 193*4d7e907cSAndroid Build Coastguard Worker * contained in the message. For example time might be indicated to decimal 194*4d7e907cSAndroid Build Coastguard Worker * parts of a second or location may be shown with 3 or even 4 digits after 195*4d7e907cSAndroid Build Coastguard Worker * the decimal point. Programs that read the data must only use the commas 196*4d7e907cSAndroid Build Coastguard Worker * to determine the field boundaries and not depend on column positions. 197*4d7e907cSAndroid Build Coastguard Worker * There is a provision for a checksum at the end of each sentence which may 198*4d7e907cSAndroid Build Coastguard Worker * or may not be checked by the unit that reads the data. The checksum field 199*4d7e907cSAndroid Build Coastguard Worker * consists of a '*' and two hex digits representing an 8 bit exclusive OR 200*4d7e907cSAndroid Build Coastguard Worker * of all characters between, but not including, the '$' and '*'. 201*4d7e907cSAndroid Build Coastguard Worker */ 202*4d7e907cSAndroid Build Coastguard Worker gnssNmeaCb(GnssUtcTime timestamp, string nmea); 203*4d7e907cSAndroid Build Coastguard Worker 204*4d7e907cSAndroid Build Coastguard Worker /** 205*4d7e907cSAndroid Build Coastguard Worker * Callback to inform framework of the GNSS engine's capabilities. 206*4d7e907cSAndroid Build Coastguard Worker * 207*4d7e907cSAndroid Build Coastguard Worker * @param capabilities Capability parameter is a bit field of 208*4d7e907cSAndroid Build Coastguard Worker * the Capabilities enum. 209*4d7e907cSAndroid Build Coastguard Worker */ 210*4d7e907cSAndroid Build Coastguard Worker gnssSetCapabilitesCb(bitfield<Capabilities> capabilities); 211*4d7e907cSAndroid Build Coastguard Worker 212*4d7e907cSAndroid Build Coastguard Worker /** 213*4d7e907cSAndroid Build Coastguard Worker * Callback utility for acquiring the GNSS wakelock. This can be used to prevent 214*4d7e907cSAndroid Build Coastguard Worker * the CPU from suspending while handling GNSS events. 215*4d7e907cSAndroid Build Coastguard Worker */ 216*4d7e907cSAndroid Build Coastguard Worker gnssAcquireWakelockCb(); 217*4d7e907cSAndroid Build Coastguard Worker 218*4d7e907cSAndroid Build Coastguard Worker /** Callback utility for releasing the GNSS wakelock. */ 219*4d7e907cSAndroid Build Coastguard Worker gnssReleaseWakelockCb(); 220*4d7e907cSAndroid Build Coastguard Worker 221*4d7e907cSAndroid Build Coastguard Worker /** Callback for requesting NTP time */ 222*4d7e907cSAndroid Build Coastguard Worker gnssRequestTimeCb(); 223*4d7e907cSAndroid Build Coastguard Worker 224*4d7e907cSAndroid Build Coastguard Worker /** 225*4d7e907cSAndroid Build Coastguard Worker * Provides information about how new the underlying GPS/GNSS hardware and 226*4d7e907cSAndroid Build Coastguard Worker * software is. 227*4d7e907cSAndroid Build Coastguard Worker * 228*4d7e907cSAndroid Build Coastguard Worker * This information will be available for Android Test Applications. If a GNSS 229*4d7e907cSAndroid Build Coastguard Worker * HAL does not provide this information, it will be considered "2015 or 230*4d7e907cSAndroid Build Coastguard Worker * earlier". 231*4d7e907cSAndroid Build Coastguard Worker * 232*4d7e907cSAndroid Build Coastguard Worker * If a GNSS HAL does provide this information, then newer years will need to 233*4d7e907cSAndroid Build Coastguard Worker * meet newer CTS standards. E.g. if the date are 2016 or above, then N+ level 234*4d7e907cSAndroid Build Coastguard Worker * GnssMeasurement support will be verified. 235*4d7e907cSAndroid Build Coastguard Worker */ 236*4d7e907cSAndroid Build Coastguard Worker struct GnssSystemInfo{ 237*4d7e907cSAndroid Build Coastguard Worker /** 238*4d7e907cSAndroid Build Coastguard Worker * year in which the last update was made to the underlying hardware/firmware 239*4d7e907cSAndroid Build Coastguard Worker * used to capture GNSS signals, e.g. 2016 240*4d7e907cSAndroid Build Coastguard Worker */ 241*4d7e907cSAndroid Build Coastguard Worker uint16_t yearOfHw; 242*4d7e907cSAndroid Build Coastguard Worker }; 243*4d7e907cSAndroid Build Coastguard Worker 244*4d7e907cSAndroid Build Coastguard Worker /** 245*4d7e907cSAndroid Build Coastguard Worker * Callback to inform framework of the engine's hardware version information. 246*4d7e907cSAndroid Build Coastguard Worker * 247*4d7e907cSAndroid Build Coastguard Worker * @param info GnssSystemInfo about the GPS/GNSS hardware. 248*4d7e907cSAndroid Build Coastguard Worker */ 249*4d7e907cSAndroid Build Coastguard Worker gnssSetSystemInfoCb(GnssSystemInfo info); 250*4d7e907cSAndroid Build Coastguard Worker}; 251