15d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland/* 25d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * Copyright (C) 2016 The Android Open Source Project 35d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * 45d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * Licensed under the Apache License, Version 2.0 (the "License"); 55d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * you may not use this file except in compliance with the License. 65d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * You may obtain a copy of the License at 75d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * 85d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * http://www.apache.org/licenses/LICENSE-2.0 95d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * 105d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * Unless required by applicable law or agreed to in writing, software 115d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * distributed under the License is distributed on an "AS IS" BASIS, 125d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * See the License for the specific language governing permissions and 145d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland * limitations under the License. 155d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland */ 165d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland 175d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland#ifndef ANDROID_HARDWARE_ISERVICE_MANAGER_H 185d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland#define ANDROID_HARDWARE_ISERVICE_MANAGER_H 195d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland 20cbefd35d5c607fa245855ce897ae08369e667222Steven Moreland#include <string> 2186c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenen 2286c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenen#include <android/hidl/base/1.0/IBase.h> 235d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland#include <utils/StrongPointer.h> 245d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland 255d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Morelandnamespace android { 265d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland 275d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Morelandnamespace hidl { 285d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Morelandnamespace manager { 295d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Morelandnamespace V1_0 { 305d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland struct IServiceManager; 315d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland}; // namespace V1_0 322a2678e402e440068bf24d012e294d65c9c0c8b9Steven Morelandnamespace V1_1 { 332a2678e402e440068bf24d012e294d65c9c0c8b9Steven Moreland struct IServiceManager; 342a2678e402e440068bf24d012e294d65c9c0c8b9Steven Moreland}; // namespace V1_0 355d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland}; // namespace manager 365d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland}; // namespace hidl 375d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland 385d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Morelandnamespace hardware { 395d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland 40cbefd35d5c607fa245855ce897ae08369e667222Steven Morelandnamespace details { 41cd4dbdf6b21cfc643df92105ef69fccfabcb1932Steven Moreland// e.x.: android.hardware.foo@1.0, IFoo, default 42cd4dbdf6b21cfc643df92105ef69fccfabcb1932Steven Morelandvoid onRegistration(const std::string &packageName, 43cd4dbdf6b21cfc643df92105ef69fccfabcb1932Steven Moreland const std::string &interfaceName, 44cd4dbdf6b21cfc643df92105ef69fccfabcb1932Steven Moreland const std::string &instanceName); 45cd4dbdf6b21cfc643df92105ef69fccfabcb1932Steven Moreland 46cd4dbdf6b21cfc643df92105ef69fccfabcb1932Steven Moreland// e.x.: android.hardware.foo@1.0::IFoo, default 47cbefd35d5c607fa245855ce897ae08369e667222Steven Morelandvoid waitForHwService(const std::string &interface, const std::string &instanceName); 48519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland 49519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Morelandvoid preloadPassthroughService(const std::string &descriptor); 5086c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenen 5186c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenen// Returns a service with the following constraints: 5286c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenen// - retry => service is waited for and returned if available in this process 5386c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenen// - getStub => internal only. Forces to get the unwrapped (no BsFoo) if available. 5486c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenen// TODO(b/65843592) 5586c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenen// If the service is a remote service, this function returns BpBase. If the service is 5686c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenen// a passthrough service, this function returns the appropriately wrapped Bs child object. 5786c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenensp<::android::hidl::base::V1_0::IBase> getRawServiceInternal(const std::string& descriptor, 5886c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenen const std::string& instance, 5986c3abb2510d05eae0f816899059a230a6b9364fMartijn Coenen bool retry, bool getStub); 60cbefd35d5c607fa245855ce897ae08369e667222Steven Moreland}; 61cbefd35d5c607fa245855ce897ae08369e667222Steven Moreland 62519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland// These functions are for internal use by hidl. If you want to get ahold 63519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland// of an interface, the best way to do this is by calling IFoo::getService() 64519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Morelandsp<::android::hidl::manager::V1_0::IServiceManager> defaultServiceManager(); 652a2678e402e440068bf24d012e294d65c9c0c8b9Steven Morelandsp<::android::hidl::manager::V1_1::IServiceManager> defaultServiceManager1_1(); 66519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Morelandsp<::android::hidl::manager::V1_0::IServiceManager> getPassthroughServiceManager(); 672a2678e402e440068bf24d012e294d65c9c0c8b9Steven Morelandsp<::android::hidl::manager::V1_1::IServiceManager> getPassthroughServiceManager1_1(); 68519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland 69519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland/** 70519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland * Given a service that is in passthrough mode, this function will go ahead and load the 71519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland * required passthrough module library (but not call HIDL_FETCH_I* functions to instantiate it). 72519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland * 73519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland * E.x.: preloadPassthroughService<IFoo>(); 74519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland */ 75519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Morelandtemplate<typename I> 76519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Morelandstatic inline void preloadPassthroughService() { 77519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland details::preloadPassthroughService(I::descriptor); 78519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland} 79519306fca6b7c77a3b20aa0c979345e58fed04a8Steven Moreland 805d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland}; // namespace hardware 815d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland}; // namespace android 825d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland 835d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland#endif // ANDROID_HARDWARE_ISERVICE_MANAGER_H 845d5ef7fcf17889a078212fbe75ac15d72a56586cSteven Moreland 85