blob: 5ee292336787d0ea9245049e5051c98e171b6346 [file] [log] [blame]
/*
* 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.
*
* For user-initiated emergency use cases, this field must be set to empty string
* and the inEmergencyMode field must be set to true.
*/
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);
};