xref: /aosp_15_r20/system/libhidl/transport/include/hidl/ServiceManagement.h (revision 8222fbe171c3d6fadfe95119c180cf3010c392a8)
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