/* * Copyright (C) 2018 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.visibility_control@1.0; /** * GNSS location reporting permissions and notification callback interface. */ interface IGnssVisibilityControlCallback { /** * Protocol stack that is requesting the non-framework location information. */ enum NfwProtocolStack : uint8_t { /** Cellular control plane requests */ CTRL_PLANE = 0, /** All types of SUPL requests */ SUPL = 1, /** All types of requests from IMS */ IMS = 10, /** All types of requests from SIM */ SIM = 11, /** Requests from other protocol stacks */ OTHER_PROTOCOL_STACK = 100 }; /* * Entity that is requesting/receiving the location information. */ enum NfwRequestor : uint8_t { /** Wireless service provider */ CARRIER = 0, /** Device manufacturer */ OEM = 10, /** Modem chipset vendor */ MODEM_CHIPSET_VENDOR = 11, /** GNSS chipset vendor */ GNSS_CHIPSET_VENDOR = 12, /** Other chipset vendor */ OTHER_CHIPSET_VENDOR = 13, /** Automobile client */ AUTOMOBILE_CLIENT = 20, /** Other sources */ OTHER_REQUESTOR = 100 }; /** * GNSS response type for non-framework location requests. */ enum NfwResponseType : uint8_t { /** Request rejected because framework has not given permission for this use case */ REJECTED = 0, /** Request accepted but could not provide location because of a failure */ ACCEPTED_NO_LOCATION_PROVIDED = 1, /** Request accepted and location provided */ ACCEPTED_LOCATION_PROVIDED = 2, }; /** * Represents a non-framework location information request/response notification. */ struct NfwNotification { /** * Package name of the Android proxy application representing the non-framework * entity that requested location. Set to empty string if unknown. */ string proxyAppPackageName; /** Protocol stack that initiated the non-framework location request. */ NfwProtocolStack protocolStack; /** * Name of the protocol stack if protocolStack field is set to OTHER_PROTOCOL_STACK. * Otherwise, set to empty string. * * This field is opaque to the framework and used for logging purposes. */ string otherProtocolStackName; /** Source initiating/receiving the location information. */ NfwRequestor requestor; /** * Identity of the endpoint receiving the location information. For example, carrier * name, OEM name, SUPL SLP/E-SLP FQDN, chipset vendor name, etc. * * This field is opaque to the framework and used for logging purposes. */ string requestorId; /** Indicates whether location information was provided for this request. */ NfwResponseType responseType; /** Is the device in user initiated emergency session. */ bool inEmergencyMode; /** Is cached location provided */ bool isCachedLocation; }; /** * Callback to report a non-framework delivered location. * * The GNSS HAL implementation must call this method to notify the framework whenever * a non-framework location request is made to the GNSS HAL. * * Non-framework entities like low power sensor hubs that request location from GNSS and * only pass location information through Android framework controls are exempt from this * power-spending reporting. However, low power sensor hubs or other chipsets which may send * the location information to anywhere other than Android framework (which provides user * visibility and control), must report location information use through this API whenever * location information (or events driven by that location such as "home" location detection) * leaves the domain of that low power chipset. * * To avoid overly spamming the framework, high speed location reporting of the exact same * type may be throttled to report location at a lower rate than the actual report rate, as * long as the location is reported with a latency of no more than the larger of 5 seconds, * or the next the Android processor awake time. For example, if an Automotive client is * getting location information from the GNSS location system at 20Hz, this method may be * called at 1Hz. As another example, if a low power processor is getting location from the * GNSS chipset, and the Android processor is asleep, the notification to the Android HAL may * be delayed until the next wake of the Android processor. * * @param notification Non-framework delivered location request/response description. */ nfwNotifyCb(NfwNotification notification); /** * Tells if the device is currently in an emergency session. * * Emergency session is defined as the device being actively in a user initiated emergency * call or in post emergency call extension time period. * * If the GNSS HAL implementation cannot determine if the device is in emergency session * mode, it must call this method to confirm that the device is in emergency session before * serving network initiated emergency SUPL and Control Plane location requests. * * @return success True if the framework determines that the device is in emergency session. */ isInEmergencySession() generates (bool success); };