blob: 17db6bc25c9e55f78dc642610f26b05f8a86011a [file] [log] [blame]
Steven Moreland5fb3d652016-11-03 13:45:18 -07001#define LOG_TAG "hwservicemanager"
Steven Morelandd83d1102016-10-25 15:01:47 -07002
3#include <utils/Log.h>
4
5#include <inttypes.h>
6#include <unistd.h>
7
Martijn Coenen65cfcda2018-02-10 11:12:33 +01008#include <android/hidl/manager/1.1/BnHwServiceManager.h>
Steven Moreland66ac4012016-12-21 15:06:10 -08009#include <android/hidl/token/1.0/ITokenManager.h>
Steven Morelandd83d1102016-10-25 15:01:47 -070010#include <cutils/properties.h>
11#include <hidl/Status.h>
12#include <hwbinder/IPCThreadState.h>
Martijn Coenen6942be62017-11-07 16:25:11 +010013#include <hwbinder/ProcessState.h>
Steven Morelandd83d1102016-10-25 15:01:47 -070014#include <utils/Errors.h>
15#include <utils/Looper.h>
16#include <utils/StrongPointer.h>
17
18#include "ServiceManager.h"
Steven Moreland66ac4012016-12-21 15:06:10 -080019#include "TokenManager.h"
Steven Morelandd83d1102016-10-25 15:01:47 -070020
21// libutils:
Steven Morelandd83d1102016-10-25 15:01:47 -070022using android::sp;
23using android::status_t;
24
25// libhwbinder:
26using android::hardware::IPCThreadState;
Martijn Coenen6942be62017-11-07 16:25:11 +010027using android::hardware::ProcessState;
Steven Morelandd83d1102016-10-25 15:01:47 -070028
29// libhidl
Martijn Coenen437bbb42016-12-28 17:06:54 +010030using android::hardware::configureRpcThreadpool;
Steven Morelandd83d1102016-10-25 15:01:47 -070031using android::hardware::hidl_string;
Steven Moreland5fb3d652016-11-03 13:45:18 -070032using android::hardware::hidl_vec;
Martijn Coenen6942be62017-11-07 16:25:11 +010033using android::hardware::joinRpcThreadpool;
Steven Morelandd83d1102016-10-25 15:01:47 -070034
Steven Moreland66ac4012016-12-21 15:06:10 -080035// hidl types
Martijn Coenen65cfcda2018-02-10 11:12:33 +010036using android::hidl::manager::V1_1::BnHwServiceManager;
Steven Moreland66ac4012016-12-21 15:06:10 -080037using android::hidl::token::V1_0::ITokenManager;
Steven Morelandd83d1102016-10-25 15:01:47 -070038
Steven Moreland66ac4012016-12-21 15:06:10 -080039// implementations
Steven Moreland6f4fbe12017-07-21 18:07:42 -070040using android::hidl::manager::implementation::ServiceManager;
Steven Moreland66ac4012016-12-21 15:06:10 -080041using android::hidl::token::V1_0::implementation::TokenManager;
Steven Morelandd83d1102016-10-25 15:01:47 -070042
Yifan Hong18996882017-02-24 17:04:48 -080043static std::string serviceName = "default";
Steven Morelandd83d1102016-10-25 15:01:47 -070044
Steven Morelandd83d1102016-10-25 15:01:47 -070045int main() {
Martijn Coenen437bbb42016-12-28 17:06:54 +010046 configureRpcThreadpool(1, true /* callerWillJoin */);
47
Steven Morelandd83d1102016-10-25 15:01:47 -070048 ServiceManager *manager = new ServiceManager();
Steven Morelandd83d1102016-10-25 15:01:47 -070049
Martijn Coenen1a5da1c2017-03-06 13:05:39 +010050 if (!manager->add(serviceName, manager)) {
51 ALOGE("Failed to register hwservicemanager with itself.");
52 }
Steven Moreland76237812016-11-08 15:59:04 -080053
Steven Moreland66ac4012016-12-21 15:06:10 -080054 TokenManager *tokenManager = new TokenManager();
55
Martijn Coenen1a5da1c2017-03-06 13:05:39 +010056 if (!manager->add(serviceName, tokenManager)) {
57 ALOGE("Failed to register ITokenManager with hwservicemanager.");
58 }
Steven Moreland76237812016-11-08 15:59:04 -080059
Steven Morelandd83d1102016-10-25 15:01:47 -070060 // Tell IPCThreadState we're the service manager
Yifan Hong61ff9092017-01-10 10:19:18 -080061 sp<BnHwServiceManager> service = new BnHwServiceManager(manager);
Steven Morelandd83d1102016-10-25 15:01:47 -070062 IPCThreadState::self()->setTheContextObject(service);
Martijn Coenen6942be62017-11-07 16:25:11 +010063 // Then tell the kernel
64 ProcessState::self()->becomeContextManager(nullptr, nullptr);
Steven Morelandd83d1102016-10-25 15:01:47 -070065
Martijn Coenen62c51302017-11-07 13:22:22 +010066 int rc = property_set("hwservicemanager.ready", "true");
Steven Morelandd83d1102016-10-25 15:01:47 -070067 if (rc) {
Steven Moreland50bf1822017-03-27 08:33:16 -070068 ALOGE("Failed to set \"hwservicemanager.ready\" (error %d). "\
69 "HAL services will not start!\n", rc);
Steven Morelandd83d1102016-10-25 15:01:47 -070070 }
71
Wei Wang64e5f902018-04-04 13:41:10 -070072 ALOGI("hwservicemanager is ready now.");
Martijn Coenen6942be62017-11-07 16:25:11 +010073 joinRpcThreadpool();
Steven Morelandd83d1102016-10-25 15:01:47 -070074
75 return 0;
Martijn Coenenfcfcdfb2016-12-12 13:46:44 +010076}