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