1 /*
2  * Copyright (C) 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_POWERHALLOADER_H
18 #define ANDROID_POWERHALLOADER_H
19 
20 #include <aidl/android/hardware/power/IPower.h>
21 #include <android-base/thread_annotations.h>
22 #include <android/hardware/power/1.1/IPower.h>
23 #include <android/hardware/power/1.2/IPower.h>
24 #include <android/hardware/power/1.3/IPower.h>
25 
26 namespace android {
27 
28 namespace power {
29 
30 // Loads available Power HAL services.
31 class PowerHalLoader {
32 public:
33     static void unloadAll();
34     static std::shared_ptr<aidl::android::hardware::power::IPower> loadAidl();
35     static sp<hardware::power::V1_0::IPower> loadHidlV1_0();
36     static sp<hardware::power::V1_1::IPower> loadHidlV1_1();
37     static sp<hardware::power::V1_2::IPower> loadHidlV1_2();
38     static sp<hardware::power::V1_3::IPower> loadHidlV1_3();
39     // Returns aidl interface version, or 0 if AIDL is not used
40     static int32_t getAidlVersion();
41 
42 private:
43     static std::mutex gHalMutex;
44     static std::shared_ptr<aidl::android::hardware::power::IPower> gHalAidl GUARDED_BY(gHalMutex);
45     static sp<hardware::power::V1_0::IPower> gHalHidlV1_0 GUARDED_BY(gHalMutex);
46     static sp<hardware::power::V1_1::IPower> gHalHidlV1_1 GUARDED_BY(gHalMutex);
47     static sp<hardware::power::V1_2::IPower> gHalHidlV1_2 GUARDED_BY(gHalMutex);
48     static sp<hardware::power::V1_3::IPower> gHalHidlV1_3 GUARDED_BY(gHalMutex);
49 
50     static sp<hardware::power::V1_0::IPower> loadHidlV1_0Locked()
51             EXCLUSIVE_LOCKS_REQUIRED(gHalMutex);
52 
53     static int32_t gAidlInterfaceVersion;
54 
55     PowerHalLoader() = delete;
56     ~PowerHalLoader() = delete;
57 };
58 
59 }; // namespace power
60 
61 } // namespace android
62 
63 #endif // ANDROID_POWERHALLOADER_H
64