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