Steven Moreland | 5fb3d65 | 2016-11-03 13:45:18 -0700 | [diff] [blame] | 1 | #define LOG_TAG "hwservicemanager" |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 2 | |
| 3 | #include <utils/Log.h> |
| 4 | |
| 5 | #include <inttypes.h> |
| 6 | #include <unistd.h> |
| 7 | |
Martijn Coenen | 65cfcda | 2018-02-10 11:12:33 +0100 | [diff] [blame] | 8 | #include <android/hidl/manager/1.1/BnHwServiceManager.h> |
Steven Moreland | 66ac401 | 2016-12-21 15:06:10 -0800 | [diff] [blame] | 9 | #include <android/hidl/token/1.0/ITokenManager.h> |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 10 | #include <cutils/properties.h> |
| 11 | #include <hidl/Status.h> |
| 12 | #include <hwbinder/IPCThreadState.h> |
Martijn Coenen | 6942be6 | 2017-11-07 16:25:11 +0100 | [diff] [blame] | 13 | #include <hwbinder/ProcessState.h> |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 14 | #include <utils/Errors.h> |
| 15 | #include <utils/Looper.h> |
| 16 | #include <utils/StrongPointer.h> |
| 17 | |
| 18 | #include "ServiceManager.h" |
Steven Moreland | 66ac401 | 2016-12-21 15:06:10 -0800 | [diff] [blame] | 19 | #include "TokenManager.h" |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 20 | |
| 21 | // libutils: |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 22 | using android::sp; |
| 23 | using android::status_t; |
| 24 | |
| 25 | // libhwbinder: |
| 26 | using android::hardware::IPCThreadState; |
Martijn Coenen | 6942be6 | 2017-11-07 16:25:11 +0100 | [diff] [blame] | 27 | using android::hardware::ProcessState; |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 28 | |
| 29 | // libhidl |
Martijn Coenen | 437bbb4 | 2016-12-28 17:06:54 +0100 | [diff] [blame] | 30 | using android::hardware::configureRpcThreadpool; |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 31 | using android::hardware::hidl_string; |
Steven Moreland | 5fb3d65 | 2016-11-03 13:45:18 -0700 | [diff] [blame] | 32 | using android::hardware::hidl_vec; |
Martijn Coenen | 6942be6 | 2017-11-07 16:25:11 +0100 | [diff] [blame] | 33 | using android::hardware::joinRpcThreadpool; |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 34 | |
Steven Moreland | 66ac401 | 2016-12-21 15:06:10 -0800 | [diff] [blame] | 35 | // hidl types |
Martijn Coenen | 65cfcda | 2018-02-10 11:12:33 +0100 | [diff] [blame] | 36 | using android::hidl::manager::V1_1::BnHwServiceManager; |
Steven Moreland | 66ac401 | 2016-12-21 15:06:10 -0800 | [diff] [blame] | 37 | using android::hidl::token::V1_0::ITokenManager; |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 38 | |
Steven Moreland | 66ac401 | 2016-12-21 15:06:10 -0800 | [diff] [blame] | 39 | // implementations |
Steven Moreland | 6f4fbe1 | 2017-07-21 18:07:42 -0700 | [diff] [blame] | 40 | using android::hidl::manager::implementation::ServiceManager; |
Steven Moreland | 66ac401 | 2016-12-21 15:06:10 -0800 | [diff] [blame] | 41 | using android::hidl::token::V1_0::implementation::TokenManager; |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 42 | |
Yifan Hong | 1899688 | 2017-02-24 17:04:48 -0800 | [diff] [blame] | 43 | static std::string serviceName = "default"; |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 44 | |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 45 | int main() { |
Martijn Coenen | 437bbb4 | 2016-12-28 17:06:54 +0100 | [diff] [blame] | 46 | configureRpcThreadpool(1, true /* callerWillJoin */); |
| 47 | |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 48 | ServiceManager *manager = new ServiceManager(); |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 49 | |
Martijn Coenen | 1a5da1c | 2017-03-06 13:05:39 +0100 | [diff] [blame] | 50 | if (!manager->add(serviceName, manager)) { |
| 51 | ALOGE("Failed to register hwservicemanager with itself."); |
| 52 | } |
Steven Moreland | 7623781 | 2016-11-08 15:59:04 -0800 | [diff] [blame] | 53 | |
Steven Moreland | 66ac401 | 2016-12-21 15:06:10 -0800 | [diff] [blame] | 54 | TokenManager *tokenManager = new TokenManager(); |
| 55 | |
Martijn Coenen | 1a5da1c | 2017-03-06 13:05:39 +0100 | [diff] [blame] | 56 | if (!manager->add(serviceName, tokenManager)) { |
| 57 | ALOGE("Failed to register ITokenManager with hwservicemanager."); |
| 58 | } |
Steven Moreland | 7623781 | 2016-11-08 15:59:04 -0800 | [diff] [blame] | 59 | |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 60 | // Tell IPCThreadState we're the service manager |
Yifan Hong | 61ff909 | 2017-01-10 10:19:18 -0800 | [diff] [blame] | 61 | sp<BnHwServiceManager> service = new BnHwServiceManager(manager); |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 62 | IPCThreadState::self()->setTheContextObject(service); |
Martijn Coenen | 6942be6 | 2017-11-07 16:25:11 +0100 | [diff] [blame] | 63 | // Then tell the kernel |
| 64 | ProcessState::self()->becomeContextManager(nullptr, nullptr); |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 65 | |
Martijn Coenen | 62c5130 | 2017-11-07 13:22:22 +0100 | [diff] [blame] | 66 | int rc = property_set("hwservicemanager.ready", "true"); |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 67 | if (rc) { |
Steven Moreland | 50bf182 | 2017-03-27 08:33:16 -0700 | [diff] [blame] | 68 | ALOGE("Failed to set \"hwservicemanager.ready\" (error %d). "\ |
| 69 | "HAL services will not start!\n", rc); |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 70 | } |
| 71 | |
Wei Wang | 64e5f90 | 2018-04-04 13:41:10 -0700 | [diff] [blame] | 72 | ALOGI("hwservicemanager is ready now."); |
Martijn Coenen | 6942be6 | 2017-11-07 16:25:11 +0100 | [diff] [blame] | 73 | joinRpcThreadpool(); |
Steven Moreland | d83d110 | 2016-10-25 15:01:47 -0700 | [diff] [blame] | 74 | |
| 75 | return 0; |
Martijn Coenen | fcfcdfb | 2016-12-12 13:46:44 +0100 | [diff] [blame] | 76 | } |