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