You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
5.8 KiB
165 lines
5.8 KiB
/*
|
|
* Copyright (C) 2016 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.hidl.manager@1.0;
|
|
|
|
import IServiceNotification;
|
|
import android.hidl.base@1.0::DebugInfo.Architecture;
|
|
|
|
/**
|
|
* Manages all the hidl hals on a device.
|
|
*
|
|
* All examples in this file assume that there is one service registered with
|
|
* the service manager, "android.hidl.manager@1.0::IServiceManager/manager"
|
|
*
|
|
* Terminology:
|
|
* Package: "android.hidl.manager"
|
|
* Major version: "1"
|
|
* Minor version: "0"
|
|
* Version: "1.0"
|
|
* Interface name: "IServiceManager"
|
|
* Fully-qualified interface name: "android.hidl.manager@1.0::IServiceManager"
|
|
* Instance name: "manager"
|
|
* Fully-qualified instance name: "android.hidl.manager@1.0::IServiceManager/manager"
|
|
*/
|
|
interface IServiceManager {
|
|
|
|
/**
|
|
* Retrieve an existing service that supports the requested version.
|
|
*
|
|
* WARNING: This function is for libhidl/HwBinder use only. You are likely
|
|
* looking for 'IMyInterface::getService("name")' instead.
|
|
*
|
|
* @param fqName Fully-qualified interface name.
|
|
* @param name Instance name. Same as in IServiceManager::add.
|
|
*
|
|
* @return service Handle to requested service, same as provided in
|
|
* IServiceManager::add. Will be nullptr if not available.
|
|
*/
|
|
get(string fqName, string name) generates (interface service);
|
|
|
|
/**
|
|
* Register a service. The service manager must retrieve the (inherited)
|
|
* interfaces that this service implements, and register them along with
|
|
* the service.
|
|
*
|
|
* Each interface must have its own namespace for instance names. If you
|
|
* have two unrelated interfaces IFoo and IBar, it must be valid to call:
|
|
*
|
|
* add("my_instance", foo); // foo implements IFoo
|
|
* add("my_instance", bar); // bar implements IBar
|
|
*
|
|
* WARNING: This function is for libhidl/HwBinder use only. You are likely
|
|
* looking for 'INTERFACE::registerAsService("name")' instead.
|
|
*
|
|
* @param name Instance name. Must also be used to retrieve service.
|
|
* @param service Handle to registering service.
|
|
*
|
|
* @return success Whether or not the service was registered.
|
|
*
|
|
*/
|
|
add(string name, interface service) generates (bool success);
|
|
|
|
enum Transport : uint8_t {
|
|
EMPTY,
|
|
HWBINDER,
|
|
PASSTHROUGH,
|
|
};
|
|
|
|
/**
|
|
* Get the transport of a service.
|
|
*
|
|
* @param fqName Fully-qualified interface name.
|
|
* @param name Instance name. Same as in IServiceManager::add
|
|
*
|
|
* @return transport Transport of service if known.
|
|
*/
|
|
getTransport(string fqName, string name) generates (Transport transport);
|
|
|
|
/**
|
|
* List all registered services. Must be sorted.
|
|
*
|
|
* @return fqInstanceNames List of fully-qualified instance names.
|
|
*/
|
|
list() generates (vec<string> fqInstanceNames);
|
|
|
|
/**
|
|
* List all instances of a particular service. Must be sorted.
|
|
*
|
|
* @param fqName Fully-qualified interface name.
|
|
*
|
|
* @return instanceNames List of instance names running the particular service.
|
|
*/
|
|
listByInterface(string fqName) generates (vec<string> instanceNames);
|
|
|
|
/**
|
|
* Register for service notifications for a particular service. Must support
|
|
* multiple registrations.
|
|
*
|
|
* onRegistration must be sent out for all services which support the
|
|
* version provided in the fqName. For instance, if a client registers for
|
|
* notifications from "android.hardware.foo@1.0", they must also get
|
|
* notifications from "android.hardware.foo@1.1". If a matching service
|
|
* is already registered, onRegistration must be sent out with preexisting
|
|
* = true.
|
|
*
|
|
* @param fqName Fully-qualified interface name.
|
|
* @param name Instance name. If name is empty, notifications must be
|
|
* sent out for all names.
|
|
* @param callback Client callback to recieve notifications.
|
|
*
|
|
* @return success Whether or not registration was successful.
|
|
*/
|
|
registerForNotifications(string fqName,
|
|
string name,
|
|
IServiceNotification callback)
|
|
generates (bool success);
|
|
|
|
/**
|
|
* Special values for InstanceDebugInfo pids.
|
|
*/
|
|
enum PidConstant : int32_t {
|
|
NO_PID = -1,
|
|
};
|
|
|
|
/**
|
|
* Returned object for debugDump().
|
|
*/
|
|
struct InstanceDebugInfo {
|
|
string interfaceName;
|
|
string instanceName;
|
|
int32_t pid; // PidConstants:NO_PID if unavailable
|
|
vec<int32_t> clientPids;
|
|
Architecture arch;
|
|
};
|
|
|
|
/**
|
|
* Similar to list, but contains more information for each instance.
|
|
* @return info a vector where each item contains debug information for each
|
|
* instance.
|
|
*/
|
|
debugDump() generates (vec<InstanceDebugInfo> info);
|
|
|
|
/**
|
|
* When the passthrough service manager returns a service via
|
|
* get(string, string), it must dispatch a registerPassthroughClient call
|
|
* to the binderized service manager to indicate the current process has
|
|
* called get(). Binderized service manager must record this PID, which can
|
|
* be retrieved via debugDump.
|
|
*/
|
|
registerPassthroughClient(string fqName, string name);
|
|
};
|