xref: /aosp_15_r20/system/libhidl/transport/base/1.0/IBase.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 Worker/*
20*8222fbe1SAndroid Build Coastguard Worker * The ancestor for all interfaces.
21*8222fbe1SAndroid Build Coastguard Worker *
22*8222fbe1SAndroid Build Coastguard Worker * All HAL files will have this interface implicitly imported. If an interface
23*8222fbe1SAndroid Build Coastguard Worker * does not explicitly extend from another interface, it will implicitly extend
24*8222fbe1SAndroid Build Coastguard Worker * from IBase. (This is like java.lang.Object in Java.)
25*8222fbe1SAndroid Build Coastguard Worker *
26*8222fbe1SAndroid Build Coastguard Worker * Methods defined here are shared by all interfaces (this is like
27*8222fbe1SAndroid Build Coastguard Worker * java.lang.Object.notify(), for example.) However, the behavior of these
28*8222fbe1SAndroid Build Coastguard Worker * functions cannot be overridden (with the exception of the "debug" method).
29*8222fbe1SAndroid Build Coastguard Worker */
30*8222fbe1SAndroid Build Coastguard Workerinterface IBase {
31*8222fbe1SAndroid Build Coastguard Worker
32*8222fbe1SAndroid Build Coastguard Worker    /*
33*8222fbe1SAndroid Build Coastguard Worker     * Provides way to determine if interface is running without requesting
34*8222fbe1SAndroid Build Coastguard Worker     * any functionality.
35*8222fbe1SAndroid Build Coastguard Worker     */
36*8222fbe1SAndroid Build Coastguard Worker    ping();
37*8222fbe1SAndroid Build Coastguard Worker
38*8222fbe1SAndroid Build Coastguard Worker    /*
39*8222fbe1SAndroid Build Coastguard Worker     * Provides run-time type information for this object.
40*8222fbe1SAndroid Build Coastguard Worker     * For example, for the following interface definition:
41*8222fbe1SAndroid Build Coastguard Worker     *     package [email protected];
42*8222fbe1SAndroid Build Coastguard Worker     *     interface IParent {};
43*8222fbe1SAndroid Build Coastguard Worker     *     interface IChild extends IParent {};
44*8222fbe1SAndroid Build Coastguard Worker     * Calling interfaceChain on an IChild object must yield the following:
45*8222fbe1SAndroid Build Coastguard Worker     *     ["[email protected]::IChild",
46*8222fbe1SAndroid Build Coastguard Worker     *      "[email protected]::IParent"
47*8222fbe1SAndroid Build Coastguard Worker     *      "[email protected]::IBase"]
48*8222fbe1SAndroid Build Coastguard Worker     *
49*8222fbe1SAndroid Build Coastguard Worker     * @return descriptors a vector of descriptors of the run-time type of the
50*8222fbe1SAndroid Build Coastguard Worker     *         object.
51*8222fbe1SAndroid Build Coastguard Worker     */
52*8222fbe1SAndroid Build Coastguard Worker    interfaceChain() generates (vec<string> descriptors);
53*8222fbe1SAndroid Build Coastguard Worker
54*8222fbe1SAndroid Build Coastguard Worker    /*
55*8222fbe1SAndroid Build Coastguard Worker     * Provides run-time type information for this object.
56*8222fbe1SAndroid Build Coastguard Worker     * For example, for the following interface definition:
57*8222fbe1SAndroid Build Coastguard Worker     *     package [email protected];
58*8222fbe1SAndroid Build Coastguard Worker     *     interface IParent {};
59*8222fbe1SAndroid Build Coastguard Worker     *     interface IChild extends IParent {};
60*8222fbe1SAndroid Build Coastguard Worker     * Calling interfaceDescriptor on an IChild object must yield
61*8222fbe1SAndroid Build Coastguard Worker     *     "[email protected]::IChild"
62*8222fbe1SAndroid Build Coastguard Worker     *
63*8222fbe1SAndroid Build Coastguard Worker     * @return descriptor a descriptor of the run-time type of the
64*8222fbe1SAndroid Build Coastguard Worker     *         object (the first element of the vector returned by
65*8222fbe1SAndroid Build Coastguard Worker     *         interfaceChain())
66*8222fbe1SAndroid Build Coastguard Worker     */
67*8222fbe1SAndroid Build Coastguard Worker    interfaceDescriptor() generates (string descriptor);
68*8222fbe1SAndroid Build Coastguard Worker
69*8222fbe1SAndroid Build Coastguard Worker    /*
70*8222fbe1SAndroid Build Coastguard Worker     * This method notifies the interface that one or more system properties
71*8222fbe1SAndroid Build Coastguard Worker     * have changed. The default implementation calls
72*8222fbe1SAndroid Build Coastguard Worker     * (C++)  report_sysprop_change() in libcutils or
73*8222fbe1SAndroid Build Coastguard Worker     * (Java) android.os.SystemProperties.reportSyspropChanged,
74*8222fbe1SAndroid Build Coastguard Worker     * which in turn calls a set of registered callbacks (eg to update trace
75*8222fbe1SAndroid Build Coastguard Worker     * tags).
76*8222fbe1SAndroid Build Coastguard Worker     */
77*8222fbe1SAndroid Build Coastguard Worker    oneway notifySyspropsChanged();
78*8222fbe1SAndroid Build Coastguard Worker
79*8222fbe1SAndroid Build Coastguard Worker    /*
80*8222fbe1SAndroid Build Coastguard Worker     * Registers a death recipient, to be called when the process hosting this
81*8222fbe1SAndroid Build Coastguard Worker     * interface dies.
82*8222fbe1SAndroid Build Coastguard Worker     *
83*8222fbe1SAndroid Build Coastguard Worker     * @param recipient a hidl_death_recipient callback object
84*8222fbe1SAndroid Build Coastguard Worker     * @param cookie a cookie that must be returned with the callback
85*8222fbe1SAndroid Build Coastguard Worker     * @return success whether the death recipient was registered successfully.
86*8222fbe1SAndroid Build Coastguard Worker     */
87*8222fbe1SAndroid Build Coastguard Worker    linkToDeath(death_recipient recipient, uint64_t cookie) generates (bool success);
88*8222fbe1SAndroid Build Coastguard Worker
89*8222fbe1SAndroid Build Coastguard Worker    /*
90*8222fbe1SAndroid Build Coastguard Worker     * Unregisters the registered death recipient. If this service was registered
91*8222fbe1SAndroid Build Coastguard Worker     * multiple times with the same exact death recipient, this unlinks the most
92*8222fbe1SAndroid Build Coastguard Worker     * recently registered one.
93*8222fbe1SAndroid Build Coastguard Worker     *
94*8222fbe1SAndroid Build Coastguard Worker     * @param recipient a previously registered hidl_death_recipient callback
95*8222fbe1SAndroid Build Coastguard Worker     * @return success whether the death recipient was unregistered successfully.
96*8222fbe1SAndroid Build Coastguard Worker     */
97*8222fbe1SAndroid Build Coastguard Worker    unlinkToDeath(death_recipient recipient) generates (bool success);
98*8222fbe1SAndroid Build Coastguard Worker
99*8222fbe1SAndroid Build Coastguard Worker    /*
100*8222fbe1SAndroid Build Coastguard Worker     * This method trigger the interface to enable/disable instrumentation based
101*8222fbe1SAndroid Build Coastguard Worker     * on system property hal.instrumentation.enable.
102*8222fbe1SAndroid Build Coastguard Worker     */
103*8222fbe1SAndroid Build Coastguard Worker    oneway setHALInstrumentation();
104*8222fbe1SAndroid Build Coastguard Worker
105*8222fbe1SAndroid Build Coastguard Worker    /*
106*8222fbe1SAndroid Build Coastguard Worker     * Get debug information on references on this interface.
107*8222fbe1SAndroid Build Coastguard Worker     * @return info debugging information. See comments of DebugInfo.
108*8222fbe1SAndroid Build Coastguard Worker     */
109*8222fbe1SAndroid Build Coastguard Worker    getDebugInfo() generates (DebugInfo info);
110*8222fbe1SAndroid Build Coastguard Worker
111*8222fbe1SAndroid Build Coastguard Worker    /*
112*8222fbe1SAndroid Build Coastguard Worker     * Emit diagnostic information to the given file.
113*8222fbe1SAndroid Build Coastguard Worker     *
114*8222fbe1SAndroid Build Coastguard Worker     * Optionally overriden.
115*8222fbe1SAndroid Build Coastguard Worker     *
116*8222fbe1SAndroid Build Coastguard Worker     * @param fd      File descriptor to dump data to.
117*8222fbe1SAndroid Build Coastguard Worker     *                Must only be used for the duration of this call.
118*8222fbe1SAndroid Build Coastguard Worker     * @param options Arguments for debugging.
119*8222fbe1SAndroid Build Coastguard Worker     *                Must support empty for default debug information.
120*8222fbe1SAndroid Build Coastguard Worker     */
121*8222fbe1SAndroid Build Coastguard Worker    debug(handle fd, vec<string> options);
122*8222fbe1SAndroid Build Coastguard Worker
123*8222fbe1SAndroid Build Coastguard Worker    /*
124*8222fbe1SAndroid Build Coastguard Worker     * Returns hashes of the source HAL files that define the interfaces of the
125*8222fbe1SAndroid Build Coastguard Worker     * runtime type information on the object.
126*8222fbe1SAndroid Build Coastguard Worker     * For example, for the following interface definition:
127*8222fbe1SAndroid Build Coastguard Worker     *     package [email protected];
128*8222fbe1SAndroid Build Coastguard Worker     *     interface IParent {};
129*8222fbe1SAndroid Build Coastguard Worker     *     interface IChild extends IParent {};
130*8222fbe1SAndroid Build Coastguard Worker     * Calling interfaceChain on an IChild object must yield the following:
131*8222fbe1SAndroid Build Coastguard Worker     *     [(hash of IChild.hal),
132*8222fbe1SAndroid Build Coastguard Worker     *      (hash of IParent.hal)
133*8222fbe1SAndroid Build Coastguard Worker     *      (hash of IBase.hal)].
134*8222fbe1SAndroid Build Coastguard Worker     *
135*8222fbe1SAndroid Build Coastguard Worker     * SHA-256 is used as the hashing algorithm. Each hash has 32 bytes
136*8222fbe1SAndroid Build Coastguard Worker     * according to SHA-256 standard.
137*8222fbe1SAndroid Build Coastguard Worker     *
138*8222fbe1SAndroid Build Coastguard Worker     * @return hashchain a vector of SHA-1 digests
139*8222fbe1SAndroid Build Coastguard Worker     */
140*8222fbe1SAndroid Build Coastguard Worker    getHashChain() generates (vec<uint8_t[32]> hashchain);
141*8222fbe1SAndroid Build Coastguard Worker};
142