xref: /aosp_15_r20/hardware/interfaces/gnss/1.0/IGnssCallback.hal (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
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