blob: 1fe48f16e0c69c7206304d6930ee5b8c3956a3e7 [file] [log] [blame]
Hridya Valsarajue596a712016-09-22 14:07:22 -07001/*
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. */
Hridya Valsaraju529331c2016-11-22 08:17:23 -080026 @export(name="", value_prefix="GPS_CAPABILITY_")
Hridya Valsarajue596a712016-09-22 14:07:22 -070027 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 */
gomoc3d92782017-01-11 14:04:21 -080033 SCHEDULING = 1 << 0,
Hridya Valsarajue596a712016-09-22 14:07:22 -070034 /** GNSS supports MS-Based AGNSS mode */
gomoc3d92782017-01-11 14:04:21 -080035 MSB = 1 << 1,
Hridya Valsarajue596a712016-09-22 14:07:22 -070036 /** GNSS supports MS-Assisted AGNSS mode */
gomoc3d92782017-01-11 14:04:21 -080037 MSA = 1 << 2,
Hridya Valsarajue596a712016-09-22 14:07:22 -070038 /** GNSS supports single-shot fixes */
gomoc3d92782017-01-11 14:04:21 -080039 SINGLE_SHOT = 1 << 3,
Hridya Valsarajue596a712016-09-22 14:07:22 -070040 /** GNSS supports on demand time injection */
gomoc3d92782017-01-11 14:04:21 -080041 ON_DEMAND_TIME = 1 << 4,
Hridya Valsarajue596a712016-09-22 14:07:22 -070042 /** GNSS supports Geofencing */
gomoc3d92782017-01-11 14:04:21 -080043 GEOFENCING = 1 << 5,
44 /** GNSS supports Measurements for at least GPS. */
45 MEASUREMENTS = 1 << 6,
Hridya Valsarajue596a712016-09-22 14:07:22 -070046 /** GNSS supports Navigation Messages */
gomoc3d92782017-01-11 14:04:21 -080047 NAV_MESSAGES = 1 << 7
Hridya Valsarajue596a712016-09-22 14:07:22 -070048 };
49
50 /* GNSS status event values. */
Hridya Valsaraju529331c2016-11-22 08:17:23 -080051 @export(name="", value_prefix="GPS_STATUS_")
Hridya Valsaraju97ecaa02016-11-02 10:20:07 -070052 enum GnssStatusValue : uint8_t {
Hridya Valsarajue596a712016-09-22 14:07:22 -070053 /** GNSS status unknown. */
Hridya Valsaraju97ecaa02016-11-02 10:20:07 -070054 NONE = 0,
Hridya Valsarajue596a712016-09-22 14:07:22 -070055 /** 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 */
Hridya Valsaraju529331c2016-11-22 08:17:23 -080068 @export(name="", value_prefix="GNSS_SV_FLAGS_")
Hridya Valsarajue596a712016-09-22 14:07:22 -070069 enum GnssSvFlags : uint8_t {
gomoc3d92782017-01-11 14:04:21 -080070 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
Hridya Valsarajue596a712016-09-22 14:07:22 -070075 };
76
77 struct GnssSvInfo {
78 /*
79 * Pseudo-random number for the SV, or FCN/OSN number for Glonass. The
80 * distinction is made by looking at constellation field. Values must be
81 * 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 /*
gomoc3d92782017-01-11 14:04:21 -0800116 * Carrier frequency of the signal tracked, for example it can be the
117 * GPS L1 = 1.57542e9 Hz, or L2, L5, varying GLO channels, etc. If
118 * the field is not set, it is the primary common use frequency,
119 * e.g. L1 for GPS.
120 *
121 * If the data is available, gnssClockFlags must contain
122 * HAS_CARRIER_FREQUENCY.
123 */
124 float carrierFrequencyHz;
125
126 /*
Hridya Valsarajue596a712016-09-22 14:07:22 -0700127 * Contains additional data about the given SV.
128 */
Yifan Hong35e2aac2016-12-05 12:35:05 -0800129 bitfield<GnssSvFlags> svFlag;
Hridya Valsarajue596a712016-09-22 14:07:22 -0700130 };
131
132 /*
133 * Represents SV status.
134 */
135 struct GnssSvStatus {
136 /*
137 * Number of GNSS SVs currently visible, refers to the SVs stored in sv_list
138 */
Hridya Valsaraju97ecaa02016-11-02 10:20:07 -0700139 uint32_t numSvs;
Hridya Valsarajue596a712016-09-22 14:07:22 -0700140
141 /*
142 * Pointer to an array of SVs information for all GNSS constellations,
143 * except GNSS, which is reported using svList
144 */
Hridya Valsaraju97ecaa02016-11-02 10:20:07 -0700145 GnssSvInfo[GnssMax:SVS_COUNT] gnssSvList;
Hridya Valsarajue596a712016-09-22 14:07:22 -0700146
147 };
148
149 /*
150 * Called when a GNSS location is available.
151 *
152 * @param location Location information from HAL.
153 */
154 gnssLocationCb(GnssLocation location);
155
156 /*
157 * Called to communicate the status of the GNSS engine.
158 *
159 * @param status Status information from HAL.
160 */
161 gnssStatusCb(GnssStatusValue status);
162
163 /*
164 * @param svInfo SV status information from HAL.
165 */
166 gnssSvStatusCb(GnssSvStatus svInfo);
167
168 /*
169 * Called when NMEA data is available.
170 * Callback for reporting NMEA sentences.
171 *
172 * @param timestamp Marks the instance of reporting.
173 * @param nmea Follows standard NMEA 0183. Each sentence begins with a '$'
174 * and ends with a carriage return/line feed sequence and can be no longer
175 * than 80 characters of visible text (plus the line terminators). The data
176 * is contained within this single line with data items separated by commas.
177 * The data itself is just ascii text and may extend over multiple sentences
178 * in certain specialized instances but is normally fully contained in one
179 * variable length sentence. The data may vary in the amount of precision
180 * contained in the message. For example time might be indicated to decimal
181 * parts of a second or location may be shown with 3 or even 4 digits after
182 * the decimal point. Programs that read the data must only use the commas
183 * to determine the field boundaries and not depend on column positions.
184 * There is a provision for a checksum at the end of each sentence which may
185 * or may not be checked by the unit that reads the data. The checksum field
186 * consists of a '*' and two hex digits representing an 8 bit exclusive OR
187 * of all characters between, but not including, the '$' and '*'.
188 */
189 gnssNmeaCb(GnssUtcTime timestamp, string nmea);
190
191 /*
192 * Callback to inform framework of the GNSS engine's capabilities.
193 *
194 * @param capabilities Capability parameter is a bit field of
195 * the Capabilities enum.
196 */
Yifan Hong7037fdb2016-12-05 17:16:09 -0800197 gnssSetCapabilitesCb(bitfield<Capabilities> capabilities);
Hridya Valsarajue596a712016-09-22 14:07:22 -0700198
199 /*
200 * Callback utility for acquiring the GNSS wakelock. This can be used to prevent
201 * the CPU from suspending while handling GNSS events.
202 */
203 gnssAcquireWakelockCb();
204
205 /** Callback utility for releasing the GNSS wakelock. */
206 gnssReleaseWakelockCb();
207
208 /** Callback for requesting NTP time */
209 gnssRequestTimeCb();
210
211 /*
212 * Provides information about how new the underlying GPS/GNSS hardware and
213 * software is.
214 *
215 * This information will be available for Android Test Applications. If a GNSS
216 * HAL does not provide this information, it will be considered "2015 or
217 * earlier".
218 *
219 * If a GNSS HAL does provide this information, then newer years will need to
220 * meet newer CTS standards. E.g. if the date are 2016 or above, then N+ level
221 * GnssMeasurement support will be verified.
222 */
223 struct GnssSystemInfo{
224 /*
225 * year in which the last update was made to the underlying hardware/firmware
226 * used to capture GNSS signals, e.g. 2016
227 */
228 uint16_t yearOfHw;
229 };
230
231 /*
232 * Callback to inform framework of the engine's hardware version information.
233 *
234 * @param info GnssSystemInfo about the GPS/GNSS hardware.
235 */
236 gnssSetSystemInfoCb(GnssSystemInfo info);
237};