summaryrefslogtreecommitdiffstats
path: root/modules/input/evdev/InputDeviceManager.cpp
diff options
context:
space:
mode:
authorTim Kilbourn <tkilbourn@google.com>2015-02-13 10:35:20 -0800
committerTim Kilbourn <tkilbourn@google.com>2015-03-30 17:21:29 -0700
commit73475a4eb2cebf06f965c58e015d06c333e71e61 (patch)
treeee7d5d7a4673867738f0725a278f54a0f7aaf261 /modules/input/evdev/InputDeviceManager.cpp
parent3fba7bebe84b6e2ae515dda142dc3b37071b4dcd (diff)
downloadhardware_libhardware-73475a4eb2cebf06f965c58e015d06c333e71e61.zip
hardware_libhardware-73475a4eb2cebf06f965c58e015d06c333e71e61.tar.gz
hardware_libhardware-73475a4eb2cebf06f965c58e015d06c333e71e61.tar.bz2
Input event hub for evdev input HAL module.
InputHub monitors paths for device changes and input events. InputDeviceManager creates InputDevices and routes input events to them. InputDevices currently just log these events during development. InputHost represents a wrapper around the HAL interface. Change-Id: Ic47d574498eb07bcdcd17812a648539fdf1c69d6
Diffstat (limited to 'modules/input/evdev/InputDeviceManager.cpp')
-rw-r--r--modules/input/evdev/InputDeviceManager.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/modules/input/evdev/InputDeviceManager.cpp b/modules/input/evdev/InputDeviceManager.cpp
new file mode 100644
index 0000000..ceddd90
--- /dev/null
+++ b/modules/input/evdev/InputDeviceManager.cpp
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "InputDeviceManager"
+//#define LOG_NDEBUG 0
+
+#include <utils/Log.h>
+
+#include "InputDevice.h"
+#include "InputDeviceManager.h"
+
+namespace android {
+
+void InputDeviceManager::onInputEvent(std::shared_ptr<InputDeviceNode> node, InputEvent& event,
+ nsecs_t event_time) {
+ if (mDevices[node] == nullptr) {
+ ALOGE("got input event for unknown node %s", node->getPath().c_str());
+ return;
+ }
+ mDevices[node]->processInput(event, event_time);
+}
+
+void InputDeviceManager::onDeviceAdded(std::shared_ptr<InputDeviceNode> node) {
+ mDevices[node] = std::make_shared<EvdevDevice>(node);
+}
+
+void InputDeviceManager::onDeviceRemoved(std::shared_ptr<InputDeviceNode> node) {
+ if (mDevices[node] == nullptr) {
+ ALOGE("could not remove unknown node %s", node->getPath().c_str());
+ return;
+ }
+ // TODO: tell the InputDevice and InputDeviceNode that they are being
+ // removed so they can run any cleanup.
+ mDevices.erase(node);
+}
+
+} // namespace android