1b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown/* 2b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * Copyright (C) 2010 The Android Open Source Project 3b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * 4b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * you may not use this file except in compliance with the License. 6b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * You may obtain a copy of the License at 7b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * 8b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * 10b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * Unless required by applicable law or agreed to in writing, software 11b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * See the License for the specific language governing permissions and 14b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * limitations under the License. 15b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown */ 16b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 1746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#define LOG_TAG "InputManager" 1846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown//#define LOG_NDEBUG 0 2046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 21b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#include "InputManager.h" 22b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 2346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <cutils/log.h> 2446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 2546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownnamespace android { 2646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 279c3cda04d969912bc46184f2b326d1db95e0aba5Jeff BrownInputManager::InputManager( 289c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<EventHubInterface>& eventHub, 299c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputReaderPolicyInterface>& readerPolicy, 309c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputDispatcherPolicyInterface>& dispatcherPolicy) { 319c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown mDispatcher = new InputDispatcher(dispatcherPolicy); 329c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown mReader = new InputReader(eventHub, readerPolicy, mDispatcher); 339c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown initialize(); 349c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown} 3546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 369c3cda04d969912bc46184f2b326d1db95e0aba5Jeff BrownInputManager::InputManager( 379c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputReaderInterface>& reader, 389c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputDispatcherInterface>& dispatcher) : 399c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown mReader(reader), 409c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown mDispatcher(dispatcher) { 419c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown initialize(); 4246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 4346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 4446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff BrownInputManager::~InputManager() { 4546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown stop(); 4646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 4746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 489c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brownvoid InputManager::initialize() { 499c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown mReaderThread = new InputReaderThread(mReader); 509c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown mDispatcherThread = new InputDispatcherThread(mDispatcher); 5146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 5246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 5346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownstatus_t InputManager::start() { 5446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown status_t result = mDispatcherThread->run("InputDispatcher", PRIORITY_URGENT_DISPLAY); 5546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (result) { 563762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("Could not start InputDispatcher thread due to error %d.", result); 5746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown return result; 5846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 5946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 6046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown result = mReaderThread->run("InputReader", PRIORITY_URGENT_DISPLAY); 6146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (result) { 623762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("Could not start InputReader thread due to error %d.", result); 6346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 6446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mDispatcherThread->requestExit(); 6546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown return result; 6646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 6746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 6846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown return OK; 6946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 7046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 7146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownstatus_t InputManager::stop() { 7246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown status_t result = mReaderThread->requestExitAndWait(); 7346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (result) { 748564c8da817a845353d213acd8636b76f567b234Steve Block ALOGW("Could not stop InputReader thread due to error %d.", result); 7546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 7646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 7746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown result = mDispatcherThread->requestExitAndWait(); 7846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (result) { 798564c8da817a845353d213acd8636b76f567b234Steve Block ALOGW("Could not stop InputDispatcher thread due to error %d.", result); 8046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 8146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 8246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown return OK; 8346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 8446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 85b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brownsp<InputReaderInterface> InputManager::getReader() { 86b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown return mReader; 8746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 8846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 89b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brownsp<InputDispatcherInterface> InputManager::getDispatcher() { 90b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown return mDispatcher; 9146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 9246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 9346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} // namespace android 94