| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.hardware.gnss@1.0; |
| |
| /** |
| * The interface is required for the HAL to communicate certain information |
| * like status and location info back to the platform, the platform implements |
| * the interfaces and passes a handle to the HAL. |
| */ |
| interface IGnssCallback { |
| /** Flags for the gnssSetCapabilities callback. */ |
| @export(name="", value_prefix="GPS_CAPABILITY_") |
| enum Capabilities : uint32_t { |
| /** |
| * GNSS HAL schedules fixes for RECURRENCE_PERIODIC mode. |
| * If this is not set, then the framework will use 1000ms for |
| * minInterval and will call start() and stop() to schedule the GNSS. |
| */ |
| SCHEDULING = 1 << 0, |
| /** GNSS supports MS-Based AGNSS mode */ |
| MSB = 1 << 1, |
| /** GNSS supports MS-Assisted AGNSS mode */ |
| MSA = 1 << 2, |
| /** GNSS supports single-shot fixes */ |
| SINGLE_SHOT = 1 << 3, |
| /** |
| * The platform periodically injects time to GNSS in addition to |
| * on-demand and occasional time updates. |
| * |
| * Note: The naming of "on demand" should be "periodic" instead. This |
| * is the result of a historic implementation bug, b/73893222. |
| */ |
| ON_DEMAND_TIME = 1 << 4, |
| /** GNSS supports Geofencing */ |
| GEOFENCING = 1 << 5, |
| /** GNSS supports Measurements for at least GPS. */ |
| MEASUREMENTS = 1 << 6, |
| /** GNSS supports Navigation Messages */ |
| NAV_MESSAGES = 1 << 7 |
| }; |
| |
| /** GNSS status event values. */ |
| @export(name="", value_prefix="GPS_STATUS_") |
| enum GnssStatusValue : uint8_t { |
| /** GNSS status unknown. */ |
| NONE = 0, |
| /** GNSS has begun navigating. */ |
| SESSION_BEGIN = 1, |
| /** GNSS has stopped navigating. */ |
| SESSION_END = 2, |
| /** GNSS has powered on but is not navigating. */ |
| ENGINE_ON = 3, |
| /** GNSS is powered off. */ |
| ENGINE_OFF = 4 |
| }; |
| |
| /** |
| * Flags that indicate information about the satellite |
| */ |
| @export(name="", value_prefix="GNSS_SV_FLAGS_") |
| enum GnssSvFlags : uint8_t { |
| NONE = 0, |
| HAS_EPHEMERIS_DATA = 1 << 0, |
| HAS_ALMANAC_DATA = 1 << 1, |
| USED_IN_FIX = 1 << 2, |
| HAS_CARRIER_FREQUENCY = 1 << 3 |
| }; |
| |
| struct GnssSvInfo { |
| /** |
| * Pseudo-random or satellite ID number for the satellite, a.k.a. Space Vehicle (SV), or |
| * FCN/OSN number for Glonass. The distinction is made by looking at constellation field. |
| * Values must be in the range of: |
| * |
| * - GNSS: 1-32 |
| * - SBAS: 120-151, 183-192 |
| * - GLONASS: 1-24, the orbital slot number (OSN), if known. Or, if not: |
| * 93-106, the frequency channel number (FCN) (-7 to +6) offset by |
| * + 100 |
| * i.e. report an FCN of -7 as 93, FCN of 0 as 100, and FCN of +6 |
| * as 106. |
| * - QZSS: 193-200 |
| * - Galileo: 1-36 |
| * - Beidou: 1-37 |
| * - IRNSS: 1-14 |
| */ |
| int16_t svid; |
| |
| /** |
| * Defines the constellation of the given SV. |
| */ |
| GnssConstellationType constellation; |
| |
| /** |
| * Carrier-to-noise density in dB-Hz, typically in the range [0, 63]. |
| * It contains the measured C/N0 value for the signal at the antenna port. |
| * |
| * This is a mandatory value. |
| */ |
| float cN0Dbhz; |
| |
| /** Elevation of SV in degrees. */ |
| float elevationDegrees; |
| |
| /** Azimuth of SV in degrees. */ |
| float azimuthDegrees; |
| |
| /** |
| * Carrier frequency of the signal tracked, for example it can be the |
| * GPS central frequency for L1 = 1575.45 MHz, or L2 = 1227.60 MHz, L5 = |
| * 1176.45 MHz, varying GLO channels, etc. If the field is zero, it is |
| * the primary common use central frequency, e.g. L1 = 1575.45 MHz for |
| * GPS. |
| * |
| * For an L1, L5 receiver tracking a satellite on L1 and L5 at the same |
| * time, two GnssSvInfo structs must be reported for this same |
| * satellite, in one of the structs, all the values related |
| * to L1 must be filled, and in the other all of the values related to |
| * L5 must be filled. |
| * |
| * If the data is available, svFlag must contain HAS_CARRIER_FREQUENCY. |
| */ |
| float carrierFrequencyHz; |
| |
| /** |
| * Contains additional data about the given SV. |
| */ |
| bitfield<GnssSvFlags> svFlag; |
| }; |
| |
| /** |
| * Represents SV status. |
| */ |
| struct GnssSvStatus { |
| /** |
| * Number of GNSS SVs currently visible, refers to the SVs stored in sv_list |
| */ |
| uint32_t numSvs; |
| |
| /** |
| * Pointer to an array of SVs information for all GNSS constellations, |
| * except GNSS, which is reported using svList |
| */ |
| GnssSvInfo[GnssMax:SVS_COUNT] gnssSvList; |
| |
| }; |
| |
| /** |
| * Called when a GNSS location is available. |
| * |
| * @param location Location information from HAL. |
| */ |
| gnssLocationCb(GnssLocation location); |
| |
| /** |
| * Called to communicate the status of the GNSS engine. |
| * |
| * @param status Status information from HAL. |
| */ |
| gnssStatusCb(GnssStatusValue status); |
| |
| /** |
| * @param svInfo SV status information from HAL. |
| */ |
| gnssSvStatusCb(GnssSvStatus svInfo); |
| |
| /** |
| * Called when NMEA data is available. |
| * Callback for reporting NMEA sentences. |
| * |
| * @param timestamp Marks the instance of reporting. |
| * @param nmea Follows standard NMEA 0183. Each sentence begins with a '$' |
| * and ends with a carriage return/line feed sequence and can be no longer |
| * than 80 characters of visible text (plus the line terminators). The data |
| * is contained within this single line with data items separated by commas. |
| * The data itself is just ascii text and may extend over multiple sentences |
| * in certain specialized instances but is normally fully contained in one |
| * variable length sentence. The data may vary in the amount of precision |
| * contained in the message. For example time might be indicated to decimal |
| * parts of a second or location may be shown with 3 or even 4 digits after |
| * the decimal point. Programs that read the data must only use the commas |
| * to determine the field boundaries and not depend on column positions. |
| * There is a provision for a checksum at the end of each sentence which may |
| * or may not be checked by the unit that reads the data. The checksum field |
| * consists of a '*' and two hex digits representing an 8 bit exclusive OR |
| * of all characters between, but not including, the '$' and '*'. |
| */ |
| gnssNmeaCb(GnssUtcTime timestamp, string nmea); |
| |
| /** |
| * Callback to inform framework of the GNSS engine's capabilities. |
| * |
| * @param capabilities Capability parameter is a bit field of |
| * the Capabilities enum. |
| */ |
| gnssSetCapabilitesCb(bitfield<Capabilities> capabilities); |
| |
| /** |
| * Callback utility for acquiring the GNSS wakelock. This can be used to prevent |
| * the CPU from suspending while handling GNSS events. |
| */ |
| gnssAcquireWakelockCb(); |
| |
| /** Callback utility for releasing the GNSS wakelock. */ |
| gnssReleaseWakelockCb(); |
| |
| /** Callback for requesting NTP time */ |
| gnssRequestTimeCb(); |
| |
| /** |
| * Provides information about how new the underlying GPS/GNSS hardware and |
| * software is. |
| * |
| * This information will be available for Android Test Applications. If a GNSS |
| * HAL does not provide this information, it will be considered "2015 or |
| * earlier". |
| * |
| * If a GNSS HAL does provide this information, then newer years will need to |
| * meet newer CTS standards. E.g. if the date are 2016 or above, then N+ level |
| * GnssMeasurement support will be verified. |
| */ |
| struct GnssSystemInfo{ |
| /** |
| * year in which the last update was made to the underlying hardware/firmware |
| * used to capture GNSS signals, e.g. 2016 |
| */ |
| uint16_t yearOfHw; |
| }; |
| |
| /** |
| * Callback to inform framework of the engine's hardware version information. |
| * |
| * @param info GnssSystemInfo about the GPS/GNSS hardware. |
| */ |
| gnssSetSystemInfoCb(GnssSystemInfo info); |
| }; |