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