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 [email protected]; 18 19import IAGnss; 20import IAGnssRil; 21import IGnssBatching; 22import IGnssCallback; 23import IGnssConfiguration; 24import IGnssDebug; 25import IGnssMeasurement; 26import IGnssNavigationMessage; 27import IGnssGeofencing; 28import IGnssNi; 29import IGnssXtra; 30 31/** Represents the standard GNSS (Global Navigation Satellite System) interface. */ 32interface IGnss { 33 /** Requested operational mode for GNSS operation. */ 34 @export(name="", value_prefix="GPS_POSITION_MODE_") 35 enum GnssPositionMode : uint8_t { 36 /** Mode for running GNSS standalone (no assistance). */ 37 STANDALONE = 0, 38 /** AGNSS MS-Based mode. */ 39 MS_BASED = 1, 40 /** 41 * AGNSS MS-Assisted mode. This mode is not maintained by the platform anymore. 42 * It is strongly recommended to use MS_BASED instead. 43 */ 44 MS_ASSISTED = 2, 45 }; 46 47 /** Requested recurrence mode for GNSS operation. */ 48 @export(name="", value_prefix="GPS_POSITION_") 49 enum GnssPositionRecurrence : uint32_t { 50 /** Receive GNSS fixes on a recurring basis at a specified period. */ 51 RECURRENCE_PERIODIC = 0, 52 /** Request a single shot GNSS fix. */ 53 RECURRENCE_SINGLE = 1 54 }; 55 56 /** 57 * Flags used to specify which aiding data to delete when calling 58 * deleteAidingData(). 59 */ 60 @export(name="", value_prefix="GPS_") 61 enum GnssAidingData : uint16_t { 62 DELETE_EPHEMERIS = 0x0001, 63 DELETE_ALMANAC = 0x0002, 64 DELETE_POSITION = 0x0004, 65 DELETE_TIME = 0x0008, 66 DELETE_IONO = 0x0010, 67 DELETE_UTC = 0x0020, 68 DELETE_HEALTH = 0x0040, 69 DELETE_SVDIR = 0x0080, 70 DELETE_SVSTEER = 0x0100, 71 DELETE_SADATA = 0x0200, 72 DELETE_RTI = 0x0400, 73 DELETE_CELLDB_INFO = 0x8000, 74 DELETE_ALL = 0xFFFF 75 }; 76 77 /** 78 * Opens the interface and provides the callback routines to the implementation of this 79 * interface. 80 * 81 * The framework calls this method to instruct the GPS engine to prepare for serving requests 82 * from the framework. The GNSS HAL implementation must respond to all GNSS requests from the 83 * framework upon successful return from this method until cleanup() method is called to 84 * close this interface. 85 * 86 * @param callback Callback interface for IGnss. 87 * 88 * @return success Returns true on success. 89 */ 90 setCallback(IGnssCallback callback) generates (bool success); 91 92 /** 93 * Starts a location output stream using the IGnssCallback 94 * gnssLocationCb(), following the settings from the most recent call to 95 * setPositionMode(). 96 * 97 * This output must operate independently of any GNSS location batching 98 * operations, see the IGnssBatching.hal for details. 99 * 100 * @return success Returns true on success. 101 */ 102 start() generates (bool success); 103 104 /** 105 * Stops the location output stream. 106 * 107 * @return success Returns true on success. 108 */ 109 stop() generates (bool success); 110 111 /** 112 * Closes the interface. 113 * 114 * The cleanup() method is called by the framework to tell the GNSS HAL implementation to 115 * not expect any GNSS requests in the immediate future - e.g. this may be called when 116 * location is disabled by a user setting or low battery conditions. The GNSS HAL 117 * implementation must immediately stop responding to any existing requests until the 118 * setCallback() method is called again and the requests are re-initiated by the framework. 119 * 120 * After this method is called, the GNSS HAL implementation may choose to modify GNSS hardware 121 * states to save power. It is expected that when setCallback() method is called again to 122 * reopen this interface, to serve requests, there may be some minor delays in GNSS response 123 * requests as hardware readiness states are restored, not to exceed those that occur on normal 124 * device boot up. 125 */ 126 cleanup(); 127 128 /** 129 * Injects the current time. 130 * 131 * @param timeMs This is the UTC time received from the NTP server, its value 132 * is given in milliseconds since January 1, 1970. 133 * @param timeReferenceMs The corresponding value of 134 * SystemClock.elapsedRealtime() from the device when the NTP response was 135 * received in milliseconds. 136 * @param uncertaintyMs Uncertainty associated with the value represented by 137 * time. Represented in milliseconds. 138 * 139 * @return success Returns true if the operation is successful. 140 */ 141 injectTime(GnssUtcTime timeMs, int64_t timeReferenceMs, int32_t uncertaintyMs) 142 generates (bool success); 143 144 /** 145 * Injects current location from another location provider (typically cell 146 * ID). 147 * 148 * @param latitudeDegrees Measured in Degrees. 149 * @param longitudeDegrees Measured in Degrees. 150 * @param accuracyMeters Measured in meters. 151 * 152 * @return success Returns true if successful. 153 */ 154 injectLocation(double latitudeDegrees, double longitudeDegrees, float accuracyMeters) 155 generates (bool success); 156 157 /** 158 * Specifies that the next call to start will not use the 159 * information defined in the flags. GnssAidingData value of DELETE_ALL is 160 * passed for a cold start. 161 * 162 * @param aidingDataFlags Flags specifying the aiding data to be deleted. 163 */ 164 deleteAidingData(GnssAidingData aidingDataFlags); 165 166 /** 167 * Sets the GnssPositionMode parameter,its associated recurrence value, 168 * the time between fixes,requested fix accuracy and time to first fix. 169 * 170 * @param mode Parameter must be one of MS_BASED or STANDALONE. 171 * It is allowed by the platform (and it is recommended) to fallback to 172 * MS_BASED if MS_ASSISTED is passed in, and MS_BASED is supported. 173 * @recurrence GNSS position recurrence value, either periodic or single. 174 * @param minIntervalMs Represents the time between fixes in milliseconds. 175 * @param preferredAccuracyMeters Represents the requested fix accuracy in meters. 176 * @param preferredTimeMs Represents the requested time to first fix in milliseconds. 177 178 * @return success Returns true if successful. 179 */ 180 setPositionMode(GnssPositionMode mode, GnssPositionRecurrence recurrence, 181 uint32_t minIntervalMs, uint32_t preferredAccuracyMeters, 182 uint32_t preferredTimeMs) 183 generates (bool success); 184 185 /** 186 * This method returns the IAGnssRil Interface. 187 * 188 * @return aGnssRilIface Handle to the IAGnssRil interface. 189 */ 190 getExtensionAGnssRil() generates (IAGnssRil aGnssRilIface); 191 192 /** 193 * This method returns the IGnssGeofencing Interface. 194 * 195 * @return gnssGeofencingIface Handle to the IGnssGeofencing interface. 196 */ 197 getExtensionGnssGeofencing() generates(IGnssGeofencing gnssGeofencingIface); 198 199 /** 200 * This method returns the IAGnss Interface. 201 * 202 * @return aGnssIface Handle to the IAGnss interface. 203 */ 204 getExtensionAGnss() generates (IAGnss aGnssIface); 205 206 /** 207 * This method returns the IGnssNi interface. 208 * 209 * @return gnssNiIface Handle to the IGnssNi interface. 210 */ 211 getExtensionGnssNi() generates (IGnssNi gnssNiIface); 212 213 /** 214 * This method returns the IGnssMeasurement interface. 215 * 216 * @return gnssMeasurementIface Handle to the IGnssMeasurement interface. 217 */ 218 getExtensionGnssMeasurement() generates (IGnssMeasurement gnssMeasurementIface); 219 220 /** 221 * This method returns the IGnssNavigationMessage interface. 222 * 223 * @return gnssNavigationIface gnssNavigationIface to the IGnssNavigationMessage interface. 224 */ 225 getExtensionGnssNavigationMessage() generates (IGnssNavigationMessage gnssNavigationIface); 226 227 /** 228 * This method returns the IGnssXtra interface. 229 * 230 * @return xtraIface Handle to the IGnssXtra interface. 231 */ 232 getExtensionXtra() generates (IGnssXtra xtraIface); 233 234 /** 235 * This method returns the IGnssConfiguration interface. 236 * 237 * @return gnssConfigIface Handle to the IGnssConfiguration interface. 238 */ 239 getExtensionGnssConfiguration() generates (IGnssConfiguration gnssConfigIface); 240 241 /** 242 * This method returns the IGnssDebug interface. 243 * 244 * @return debugIface Handle to the IGnssDebug interface. 245 */ 246 getExtensionGnssDebug() generates (IGnssDebug debugIface); 247 248 /** 249 * This method returns the IGnssBatching interface. 250 * 251 * @return batchingIface Handle to the IGnssBatching interface. 252 */ 253 getExtensionGnssBatching() generates (IGnssBatching batchingIface); 254}; 255