diff options
author | Sohani Rao <sohanirao@google.com> | 2017-07-11 00:16:15 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-07-11 00:16:15 +0000 |
commit | 951e776888c1b2b778e42dadebc57ab012dc7714 (patch) | |
tree | 7c711c7dfab163ea84597927ac4e3c8164f6ca43 | |
parent | 088c37714ca573e80bb6f19ae6cc9a77fd3f2376 (diff) | |
parent | 8151c5232cf72c721356c5e9f3a69fa6d158d677 (diff) | |
download | wificond-951e776888c1b2b778e42dadebc57ab012dc7714.tar.gz |
Merge "WifiCond: Setup polling on HW binder FD" into oc-dr1-dev am: b7a65e9a63
am: 8151c5232c
Change-Id: I5797739fb6c0f0b3b01b1592e1fc5a9a5ad4d062
-rw-r--r-- | main.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -26,6 +26,8 @@ #include <binder/IServiceManager.h> #include <binder/ProcessState.h> #include <cutils/properties.h> +#include <hwbinder/IPCThreadState.h> +#include <hwbinder/ProcessState.h> #include <libminijail.h> #include <utils/String16.h> #include <wifi_system/interface_tool.h> @@ -89,6 +91,16 @@ int SetupBinderOrCrash() { return binder_fd; } +// Setup our interface to the hw Binder driver or die trying. +int SetupHwBinderOrCrash() { + int binder_fd = -1; + android::hardware::ProcessState::self()->setThreadPoolConfiguration(1, true); + int err = android::hardware::IPCThreadState::self()->setupPolling(&binder_fd); + CHECK_EQ(err, 0) << "Error setting up hw binder polling: " << strerror(-err); + CHECK_GE(binder_fd, 0) << "Invalid hw binder FD: " << binder_fd; + return binder_fd; +} + void RegisterServiceOrCrash(const android::sp<android::IBinder>& service) { android::sp<android::IServiceManager> sm = android::defaultServiceManager(); CHECK_EQ(sm != NULL, true) << "Could not obtain IServiceManager"; @@ -103,6 +115,10 @@ void OnBinderReadReady(int fd) { android::IPCThreadState::self()->handlePolledCommands(); } +void OnHwBinderReadReady(int fd) { + android::hardware::IPCThreadState::self()->handlePolledCommands(); +} + int main(int argc, char** argv) { android::base::InitLogging(argv, android::base::LogdLogger(android::base::SYSTEM)); LOG(INFO) << "wificond is starting up..."; @@ -117,6 +133,11 @@ int main(int argc, char** argv) { android::wificond::EventLoop::kModeInput, &OnBinderReadReady)) << "Failed to watch binder FD"; + int hw_binder_fd = SetupHwBinderOrCrash(); + CHECK(event_dispatcher->WatchFileDescriptor( + hw_binder_fd, android::wificond::EventLoop::kModeInput, + &OnHwBinderReadReady)) << "Failed to watch Hw Binder FD"; + android::wificond::NetlinkManager netlink_manager(event_dispatcher.get()); CHECK(netlink_manager.Start()) << "Failed to start netlink manager"; android::wificond::NetlinkUtils netlink_utils(&netlink_manager); |