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 Worker #ifndef ANDROID_HARDWARE_ISERVICE_MANAGER_H
18*8222fbe1SAndroid Build Coastguard Worker #define ANDROID_HARDWARE_ISERVICE_MANAGER_H
19*8222fbe1SAndroid Build Coastguard Worker
20*8222fbe1SAndroid Build Coastguard Worker #include <string>
21*8222fbe1SAndroid Build Coastguard Worker #include <vector>
22*8222fbe1SAndroid Build Coastguard Worker
23*8222fbe1SAndroid Build Coastguard Worker #include <android/hidl/base/1.0/IBase.h>
24*8222fbe1SAndroid Build Coastguard Worker #include <utils/StrongPointer.h>
25*8222fbe1SAndroid Build Coastguard Worker
26*8222fbe1SAndroid Build Coastguard Worker namespace android {
27*8222fbe1SAndroid Build Coastguard Worker
28*8222fbe1SAndroid Build Coastguard Worker namespace hidl {
29*8222fbe1SAndroid Build Coastguard Worker namespace manager {
30*8222fbe1SAndroid Build Coastguard Worker namespace V1_0 {
31*8222fbe1SAndroid Build Coastguard Worker struct IServiceManager;
32*8222fbe1SAndroid Build Coastguard Worker } // namespace V1_0
33*8222fbe1SAndroid Build Coastguard Worker namespace V1_1 {
34*8222fbe1SAndroid Build Coastguard Worker struct IServiceManager;
35*8222fbe1SAndroid Build Coastguard Worker } // namespace V1_1
36*8222fbe1SAndroid Build Coastguard Worker namespace V1_2 {
37*8222fbe1SAndroid Build Coastguard Worker struct IServiceManager;
38*8222fbe1SAndroid Build Coastguard Worker } // namespace V1_2
39*8222fbe1SAndroid Build Coastguard Worker } // namespace manager
40*8222fbe1SAndroid Build Coastguard Worker } // namespace hidl
41*8222fbe1SAndroid Build Coastguard Worker
42*8222fbe1SAndroid Build Coastguard Worker namespace hardware {
43*8222fbe1SAndroid Build Coastguard Worker
44*8222fbe1SAndroid Build Coastguard Worker namespace details {
45*8222fbe1SAndroid Build Coastguard Worker
46*8222fbe1SAndroid Build Coastguard Worker // Will not attempt to start a lazy HAL
47*8222fbe1SAndroid Build Coastguard Worker // e.x.: [email protected]::IFoo, default
48*8222fbe1SAndroid Build Coastguard Worker void waitForHwService(const std::string &interface, const std::string &instanceName);
49*8222fbe1SAndroid Build Coastguard Worker
50*8222fbe1SAndroid Build Coastguard Worker // Only works on userdebug/eng builds. This allows getService to bypass the
51*8222fbe1SAndroid Build Coastguard Worker // VINTF manifest for testing only.
52*8222fbe1SAndroid Build Coastguard Worker void setTrebleTestingOverride(bool testingOverride);
53*8222fbe1SAndroid Build Coastguard Worker
54*8222fbe1SAndroid Build Coastguard Worker void preloadPassthroughService(const std::string &descriptor);
55*8222fbe1SAndroid Build Coastguard Worker
56*8222fbe1SAndroid Build Coastguard Worker // Returns a service with the following constraints:
57*8222fbe1SAndroid Build Coastguard Worker // - retry => service is waited for and returned if it is declared in the
58*8222fbe1SAndroid Build Coastguard Worker // manifest AND it is available in this process (if errors indicate an
59*8222fbe1SAndroid Build Coastguard Worker // sepolicy denial, then this will return - TODO(b/28321379) more precise
60*8222fbe1SAndroid Build Coastguard Worker // errors to handle more cases)
61*8222fbe1SAndroid Build Coastguard Worker // - getStub => internal only. Forces to get the unwrapped (no BsFoo) if available.
62*8222fbe1SAndroid Build Coastguard Worker // TODO(b/65843592)
63*8222fbe1SAndroid Build Coastguard Worker // If the service is a remote service, this function returns BpBase. If the service is
64*8222fbe1SAndroid Build Coastguard Worker // a passthrough service, this function returns the appropriately wrapped Bs child object.
65*8222fbe1SAndroid Build Coastguard Worker sp<::android::hidl::base::V1_0::IBase> getRawServiceInternal(const std::string& descriptor,
66*8222fbe1SAndroid Build Coastguard Worker const std::string& instance,
67*8222fbe1SAndroid Build Coastguard Worker bool retry, bool getStub);
68*8222fbe1SAndroid Build Coastguard Worker
69*8222fbe1SAndroid Build Coastguard Worker status_t registerAsServiceInternal(const sp<::android::hidl::base::V1_0::IBase>& service,
70*8222fbe1SAndroid Build Coastguard Worker const std::string& name);
71*8222fbe1SAndroid Build Coastguard Worker } // namespace details
72*8222fbe1SAndroid Build Coastguard Worker
73*8222fbe1SAndroid Build Coastguard Worker // Returns whether or not HIDL is supported on this device
74*8222fbe1SAndroid Build Coastguard Worker bool isHidlSupported();
75*8222fbe1SAndroid Build Coastguard Worker
76*8222fbe1SAndroid Build Coastguard Worker // These functions are for internal use by hidl. If you want to get ahold
77*8222fbe1SAndroid Build Coastguard Worker // of an interface, the best way to do this is by calling IFoo::getService()
78*8222fbe1SAndroid Build Coastguard Worker sp<::android::hidl::manager::V1_0::IServiceManager> defaultServiceManager();
79*8222fbe1SAndroid Build Coastguard Worker sp<::android::hidl::manager::V1_1::IServiceManager> defaultServiceManager1_1();
80*8222fbe1SAndroid Build Coastguard Worker sp<::android::hidl::manager::V1_2::IServiceManager> defaultServiceManager1_2();
81*8222fbe1SAndroid Build Coastguard Worker sp<::android::hidl::manager::V1_0::IServiceManager> getPassthroughServiceManager();
82*8222fbe1SAndroid Build Coastguard Worker sp<::android::hidl::manager::V1_1::IServiceManager> getPassthroughServiceManager1_1();
83*8222fbe1SAndroid Build Coastguard Worker
84*8222fbe1SAndroid Build Coastguard Worker /**
85*8222fbe1SAndroid Build Coastguard Worker * Given a descriptor (e.g. from IFoo::descriptor), return a list of all instance names
86*8222fbe1SAndroid Build Coastguard Worker * on a device (e.g. the VINTF manifest). These HALs may not be currently running, but
87*8222fbe1SAndroid Build Coastguard Worker * the expectation is that if they aren't running, they should start as lazy HALs.
88*8222fbe1SAndroid Build Coastguard Worker * So, getService should return for each of these instance names.
89*8222fbe1SAndroid Build Coastguard Worker */
90*8222fbe1SAndroid Build Coastguard Worker std::vector<std::string> getAllHalInstanceNames(const std::string& descriptor);
91*8222fbe1SAndroid Build Coastguard Worker
92*8222fbe1SAndroid Build Coastguard Worker /**
93*8222fbe1SAndroid Build Coastguard Worker * Given a service that is in passthrough mode, this function will go ahead and load the
94*8222fbe1SAndroid Build Coastguard Worker * required passthrough module library (but not call HIDL_FETCH_I* functions to instantiate it).
95*8222fbe1SAndroid Build Coastguard Worker *
96*8222fbe1SAndroid Build Coastguard Worker * E.x.: preloadPassthroughService<IFoo>();
97*8222fbe1SAndroid Build Coastguard Worker */
98*8222fbe1SAndroid Build Coastguard Worker template<typename I>
preloadPassthroughService()99*8222fbe1SAndroid Build Coastguard Worker static inline void preloadPassthroughService() {
100*8222fbe1SAndroid Build Coastguard Worker details::preloadPassthroughService(I::descriptor);
101*8222fbe1SAndroid Build Coastguard Worker }
102*8222fbe1SAndroid Build Coastguard Worker
103*8222fbe1SAndroid Build Coastguard Worker } // namespace hardware
104*8222fbe1SAndroid Build Coastguard Worker } // namespace android
105*8222fbe1SAndroid Build Coastguard Worker
106*8222fbe1SAndroid Build Coastguard Worker #endif // ANDROID_HARDWARE_ISERVICE_MANAGER_H
107*8222fbe1SAndroid Build Coastguard Worker
108