xref: /aosp_15_r20/system/libhidl/transport/manager/1.0/IServiceManager.hal (revision 8222fbe171c3d6fadfe95119c180cf3010c392a8)
1*8222fbe1SAndroid Build Coastguard Worker/*
2*8222fbe1SAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project
3*8222fbe1SAndroid Build Coastguard Worker *
4*8222fbe1SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*8222fbe1SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*8222fbe1SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*8222fbe1SAndroid Build Coastguard Worker *
8*8222fbe1SAndroid Build Coastguard Worker *      http://www.apache.org/licenses/LICENSE-2.0
9*8222fbe1SAndroid Build Coastguard Worker *
10*8222fbe1SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*8222fbe1SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*8222fbe1SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*8222fbe1SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*8222fbe1SAndroid Build Coastguard Worker * limitations under the License.
15*8222fbe1SAndroid Build Coastguard Worker */
16*8222fbe1SAndroid Build Coastguard Worker
17*8222fbe1SAndroid Build Coastguard Workerpackage [email protected];
18*8222fbe1SAndroid Build Coastguard Worker
19*8222fbe1SAndroid Build Coastguard Workerimport IServiceNotification;
20*8222fbe1SAndroid Build Coastguard Workerimport [email protected]::DebugInfo.Architecture;
21*8222fbe1SAndroid Build Coastguard Worker
22*8222fbe1SAndroid Build Coastguard Worker/**
23*8222fbe1SAndroid Build Coastguard Worker * Manages all the hidl hals on a device.
24*8222fbe1SAndroid Build Coastguard Worker *
25*8222fbe1SAndroid Build Coastguard Worker * All examples in this file assume that there is one service registered with
26*8222fbe1SAndroid Build Coastguard Worker * the service manager, "[email protected]::IServiceManager/manager"
27*8222fbe1SAndroid Build Coastguard Worker *
28*8222fbe1SAndroid Build Coastguard Worker * Terminology:
29*8222fbe1SAndroid Build Coastguard Worker *   Package: "android.hidl.manager"
30*8222fbe1SAndroid Build Coastguard Worker *   Major version: "1"
31*8222fbe1SAndroid Build Coastguard Worker *   Minor version: "0"
32*8222fbe1SAndroid Build Coastguard Worker *   Version: "1.0"
33*8222fbe1SAndroid Build Coastguard Worker *   Interface name: "IServiceManager"
34*8222fbe1SAndroid Build Coastguard Worker *   Fully-qualified interface name: "[email protected]::IServiceManager"
35*8222fbe1SAndroid Build Coastguard Worker *   Instance name: "manager"
36*8222fbe1SAndroid Build Coastguard Worker *   Fully-qualified instance name: "[email protected]::IServiceManager/manager"
37*8222fbe1SAndroid Build Coastguard Worker */
38*8222fbe1SAndroid Build Coastguard Workerinterface IServiceManager {
39*8222fbe1SAndroid Build Coastguard Worker
40*8222fbe1SAndroid Build Coastguard Worker    /**
41*8222fbe1SAndroid Build Coastguard Worker     * Retrieve an existing service that supports the requested version.
42*8222fbe1SAndroid Build Coastguard Worker     *
43*8222fbe1SAndroid Build Coastguard Worker     * WARNING: This function is for libhidl/HwBinder use only. You are likely
44*8222fbe1SAndroid Build Coastguard Worker     * looking for 'IMyInterface::getService("name")' instead.
45*8222fbe1SAndroid Build Coastguard Worker     *
46*8222fbe1SAndroid Build Coastguard Worker     * @param fqName   Fully-qualified interface name.
47*8222fbe1SAndroid Build Coastguard Worker     * @param name     Instance name. Same as in IServiceManager::add.
48*8222fbe1SAndroid Build Coastguard Worker     *
49*8222fbe1SAndroid Build Coastguard Worker     * @return service Handle to requested service, same as provided in
50*8222fbe1SAndroid Build Coastguard Worker     *                 IServiceManager::add. Will be nullptr if not available.
51*8222fbe1SAndroid Build Coastguard Worker     */
52*8222fbe1SAndroid Build Coastguard Worker    get(string fqName, string name) generates (interface service);
53*8222fbe1SAndroid Build Coastguard Worker
54*8222fbe1SAndroid Build Coastguard Worker    /**
55*8222fbe1SAndroid Build Coastguard Worker     * Register a service. The service manager must retrieve the (inherited)
56*8222fbe1SAndroid Build Coastguard Worker     * interfaces that this service implements, and register them along with
57*8222fbe1SAndroid Build Coastguard Worker     * the service.
58*8222fbe1SAndroid Build Coastguard Worker     *
59*8222fbe1SAndroid Build Coastguard Worker     * Each interface must have its own namespace for instance names. If you
60*8222fbe1SAndroid Build Coastguard Worker     * have two unrelated interfaces IFoo and IBar, it must be valid to call:
61*8222fbe1SAndroid Build Coastguard Worker     *
62*8222fbe1SAndroid Build Coastguard Worker     * add("my_instance", foo); // foo implements IFoo
63*8222fbe1SAndroid Build Coastguard Worker     * add("my_instance", bar); // bar implements IBar
64*8222fbe1SAndroid Build Coastguard Worker     *
65*8222fbe1SAndroid Build Coastguard Worker     * WARNING: This function is for libhidl/HwBinder use only. You are likely
66*8222fbe1SAndroid Build Coastguard Worker     * looking for 'INTERFACE::registerAsService("name")' instead.
67*8222fbe1SAndroid Build Coastguard Worker     *
68*8222fbe1SAndroid Build Coastguard Worker     * @param name           Instance name. Must also be used to retrieve service.
69*8222fbe1SAndroid Build Coastguard Worker     * @param service        Handle to registering service.
70*8222fbe1SAndroid Build Coastguard Worker     *
71*8222fbe1SAndroid Build Coastguard Worker     * @return success       Whether or not the service was registered.
72*8222fbe1SAndroid Build Coastguard Worker     *
73*8222fbe1SAndroid Build Coastguard Worker     */
74*8222fbe1SAndroid Build Coastguard Worker    add(string name, interface service) generates (bool success);
75*8222fbe1SAndroid Build Coastguard Worker
76*8222fbe1SAndroid Build Coastguard Worker    enum Transport : uint8_t {
77*8222fbe1SAndroid Build Coastguard Worker        EMPTY,
78*8222fbe1SAndroid Build Coastguard Worker        HWBINDER,
79*8222fbe1SAndroid Build Coastguard Worker        PASSTHROUGH,
80*8222fbe1SAndroid Build Coastguard Worker    };
81*8222fbe1SAndroid Build Coastguard Worker
82*8222fbe1SAndroid Build Coastguard Worker    /**
83*8222fbe1SAndroid Build Coastguard Worker     * Get the transport of a service.
84*8222fbe1SAndroid Build Coastguard Worker     *
85*8222fbe1SAndroid Build Coastguard Worker     * @param fqName     Fully-qualified interface name.
86*8222fbe1SAndroid Build Coastguard Worker     * @param name       Instance name. Same as in IServiceManager::add
87*8222fbe1SAndroid Build Coastguard Worker     *
88*8222fbe1SAndroid Build Coastguard Worker     * @return transport Transport of service if known.
89*8222fbe1SAndroid Build Coastguard Worker     */
90*8222fbe1SAndroid Build Coastguard Worker    getTransport(string fqName, string name) generates (Transport transport);
91*8222fbe1SAndroid Build Coastguard Worker
92*8222fbe1SAndroid Build Coastguard Worker    /**
93*8222fbe1SAndroid Build Coastguard Worker     * List all registered services. Must be sorted.
94*8222fbe1SAndroid Build Coastguard Worker     *
95*8222fbe1SAndroid Build Coastguard Worker     * @return fqInstanceNames List of fully-qualified instance names.
96*8222fbe1SAndroid Build Coastguard Worker     */
97*8222fbe1SAndroid Build Coastguard Worker    list() generates (vec<string> fqInstanceNames);
98*8222fbe1SAndroid Build Coastguard Worker
99*8222fbe1SAndroid Build Coastguard Worker    /**
100*8222fbe1SAndroid Build Coastguard Worker     * List all instances of a particular service. Must be sorted.
101*8222fbe1SAndroid Build Coastguard Worker     *
102*8222fbe1SAndroid Build Coastguard Worker     * @param fqName         Fully-qualified interface name.
103*8222fbe1SAndroid Build Coastguard Worker     *
104*8222fbe1SAndroid Build Coastguard Worker     * @return instanceNames List of instance names running the particular service.
105*8222fbe1SAndroid Build Coastguard Worker     */
106*8222fbe1SAndroid Build Coastguard Worker    listByInterface(string fqName) generates (vec<string> instanceNames);
107*8222fbe1SAndroid Build Coastguard Worker
108*8222fbe1SAndroid Build Coastguard Worker    /**
109*8222fbe1SAndroid Build Coastguard Worker     * Register for service notifications for a particular service. Must support
110*8222fbe1SAndroid Build Coastguard Worker     * multiple registrations.
111*8222fbe1SAndroid Build Coastguard Worker     *
112*8222fbe1SAndroid Build Coastguard Worker     * onRegistration must be sent out for all services which support the
113*8222fbe1SAndroid Build Coastguard Worker     * version provided in the fqName. For instance, if a client registers for
114*8222fbe1SAndroid Build Coastguard Worker     * notifications from "[email protected]", they must also get
115*8222fbe1SAndroid Build Coastguard Worker     * notifications from "[email protected]". If a matching service
116*8222fbe1SAndroid Build Coastguard Worker     * is already registered, onRegistration must be sent out with preexisting
117*8222fbe1SAndroid Build Coastguard Worker     * = true.
118*8222fbe1SAndroid Build Coastguard Worker     *
119*8222fbe1SAndroid Build Coastguard Worker     * @param fqName   Fully-qualified interface name.
120*8222fbe1SAndroid Build Coastguard Worker     * @param name     Instance name. If name is empty, notifications must be
121*8222fbe1SAndroid Build Coastguard Worker     *                 sent out for all names.
122*8222fbe1SAndroid Build Coastguard Worker     * @param callback Client callback to recieve notifications.
123*8222fbe1SAndroid Build Coastguard Worker     *
124*8222fbe1SAndroid Build Coastguard Worker     * @return success Whether or not registration was successful.
125*8222fbe1SAndroid Build Coastguard Worker     */
126*8222fbe1SAndroid Build Coastguard Worker    registerForNotifications(string fqName,
127*8222fbe1SAndroid Build Coastguard Worker                             string name,
128*8222fbe1SAndroid Build Coastguard Worker                             IServiceNotification callback)
129*8222fbe1SAndroid Build Coastguard Worker        generates (bool success);
130*8222fbe1SAndroid Build Coastguard Worker
131*8222fbe1SAndroid Build Coastguard Worker    /**
132*8222fbe1SAndroid Build Coastguard Worker     * Special values for InstanceDebugInfo pids.
133*8222fbe1SAndroid Build Coastguard Worker     */
134*8222fbe1SAndroid Build Coastguard Worker    enum PidConstant : int32_t {
135*8222fbe1SAndroid Build Coastguard Worker        NO_PID = -1,
136*8222fbe1SAndroid Build Coastguard Worker    };
137*8222fbe1SAndroid Build Coastguard Worker
138*8222fbe1SAndroid Build Coastguard Worker    /**
139*8222fbe1SAndroid Build Coastguard Worker     * Returned object for debugDump().
140*8222fbe1SAndroid Build Coastguard Worker     */
141*8222fbe1SAndroid Build Coastguard Worker    struct InstanceDebugInfo {
142*8222fbe1SAndroid Build Coastguard Worker        string interfaceName;
143*8222fbe1SAndroid Build Coastguard Worker        string instanceName;
144*8222fbe1SAndroid Build Coastguard Worker        int32_t pid; // PidConstants:NO_PID if unavailable
145*8222fbe1SAndroid Build Coastguard Worker        vec<int32_t> clientPids;
146*8222fbe1SAndroid Build Coastguard Worker        Architecture arch;
147*8222fbe1SAndroid Build Coastguard Worker    };
148*8222fbe1SAndroid Build Coastguard Worker
149*8222fbe1SAndroid Build Coastguard Worker    /**
150*8222fbe1SAndroid Build Coastguard Worker     * Similar to list, but contains more information for each instance.
151*8222fbe1SAndroid Build Coastguard Worker     * @return info a vector where each item contains debug information for each
152*8222fbe1SAndroid Build Coastguard Worker     *         instance.
153*8222fbe1SAndroid Build Coastguard Worker     */
154*8222fbe1SAndroid Build Coastguard Worker    debugDump() generates (vec<InstanceDebugInfo> info);
155*8222fbe1SAndroid Build Coastguard Worker
156*8222fbe1SAndroid Build Coastguard Worker    /**
157*8222fbe1SAndroid Build Coastguard Worker     * When the passthrough service manager returns a service via
158*8222fbe1SAndroid Build Coastguard Worker     * get(string, string), it must dispatch a registerPassthroughClient call
159*8222fbe1SAndroid Build Coastguard Worker     * to the binderized service manager to indicate the current process has
160*8222fbe1SAndroid Build Coastguard Worker     * called get(). Binderized service manager must record this PID, which can
161*8222fbe1SAndroid Build Coastguard Worker     * be retrieved via debugDump.
162*8222fbe1SAndroid Build Coastguard Worker     */
163*8222fbe1SAndroid Build Coastguard Worker    registerPassthroughClient(string fqName, string name);
164*8222fbe1SAndroid Build Coastguard Worker};
165