diff options
Diffstat (limited to 'libs/ui/EventHub.cpp')
-rw-r--r-- | libs/ui/EventHub.cpp | 74 |
1 files changed, 56 insertions, 18 deletions
diff --git a/libs/ui/EventHub.cpp b/libs/ui/EventHub.cpp index 1d38b4ba8ff0..094096e3ea39 100644 --- a/libs/ui/EventHub.cpp +++ b/libs/ui/EventHub.cpp @@ -73,6 +73,10 @@ #define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */ #endif +#define INDENT " " +#define INDENT2 " " +#define INDENT3 " " + namespace android { static const char *WAKE_LOCK_ID = "KeyEvents"; @@ -84,6 +88,10 @@ static inline int max(int v1, int v2) return (v1 > v2) ? v1 : v2; } +static inline const char* toString(bool value) { + return value ? "true" : "false"; +} + EventHub::device_t::device_t(int32_t _id, const char* _path, const char* name) : id(_id), path(_path), name(name), classes(0) , keyBitmask(NULL), layoutMap(new KeyLayoutMap()), fd(-1), next(NULL) { @@ -124,7 +132,7 @@ status_t EventHub::errorCheck() const String8 EventHub::getDeviceName(int32_t deviceId) const { AutoMutex _l(mLock); - device_t* device = getDevice(deviceId); + device_t* device = getDeviceLocked(deviceId); if (device == NULL) return String8(); return device->name; } @@ -132,7 +140,7 @@ String8 EventHub::getDeviceName(int32_t deviceId) const uint32_t EventHub::getDeviceClasses(int32_t deviceId) const { AutoMutex _l(mLock); - device_t* device = getDevice(deviceId); + device_t* device = getDeviceLocked(deviceId); if (device == NULL) return 0; return device->classes; } @@ -142,7 +150,7 @@ status_t EventHub::getAbsoluteAxisInfo(int32_t deviceId, int axis, outAxisInfo->clear(); AutoMutex _l(mLock); - device_t* device = getDevice(deviceId); + device_t* device = getDeviceLocked(deviceId); if (device == NULL) return -1; struct input_absinfo info; @@ -167,7 +175,7 @@ int32_t EventHub::getScanCodeState(int32_t deviceId, int32_t scanCode) const { if (scanCode >= 0 && scanCode <= KEY_MAX) { AutoMutex _l(mLock); - device_t* device = getDevice(deviceId); + device_t* device = getDeviceLocked(deviceId); if (device != NULL) { return getScanCodeStateLocked(device, scanCode); } @@ -188,7 +196,7 @@ int32_t EventHub::getScanCodeStateLocked(device_t* device, int32_t scanCode) con int32_t EventHub::getKeyCodeState(int32_t deviceId, int32_t keyCode) const { AutoMutex _l(mLock); - device_t* device = getDevice(deviceId); + device_t* device = getDeviceLocked(deviceId); if (device != NULL) { return getKeyCodeStateLocked(device, keyCode); } @@ -225,7 +233,7 @@ int32_t EventHub::getSwitchState(int32_t deviceId, int32_t sw) const { if (sw >= 0 && sw <= SW_MAX) { AutoMutex _l(mLock); - device_t* device = getDevice(deviceId); + device_t* device = getDeviceLocked(deviceId); if (device != NULL) { return getSwitchStateLocked(device, sw); } @@ -248,7 +256,7 @@ bool EventHub::markSupportedKeyCodes(int32_t deviceId, size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) const { AutoMutex _l(mLock); - device_t* device = getDevice(deviceId); + device_t* device = getDeviceLocked(deviceId); if (device != NULL) { return markSupportedKeyCodesLocked(device, numCodes, keyCodes, outFlags); } @@ -284,7 +292,7 @@ status_t EventHub::scancodeToKeycode(int32_t deviceId, int scancode, int32_t* outKeycode, uint32_t* outFlags) const { AutoMutex _l(mLock); - device_t* device = getDevice(deviceId); + device_t* device = getDeviceLocked(deviceId); if (device != NULL && device->layoutMap != NULL) { status_t err = device->layoutMap->map(scancode, outKeycode, outFlags); @@ -294,7 +302,7 @@ status_t EventHub::scancodeToKeycode(int32_t deviceId, int scancode, } if (mHaveFirstKeyboard) { - device = getDevice(mFirstKeyboardId); + device = getDeviceLocked(mFirstKeyboardId); if (device != NULL && device->layoutMap != NULL) { status_t err = device->layoutMap->map(scancode, outKeycode, outFlags); @@ -311,11 +319,13 @@ status_t EventHub::scancodeToKeycode(int32_t deviceId, int scancode, void EventHub::addExcludedDevice(const char* deviceName) { + AutoMutex _l(mLock); + String8 name(deviceName); mExcludedDevices.push_back(name); } -EventHub::device_t* EventHub::getDevice(int32_t deviceId) const +EventHub::device_t* EventHub::getDeviceLocked(int32_t deviceId) const { if (deviceId == 0) deviceId = mFirstKeyboardId; int32_t id = deviceId & ID_MASK; @@ -782,22 +792,22 @@ int EventHub::open_device(const char *deviceName) property_set(propName, name); // 'Q' key support = cheap test of whether this is an alpha-capable kbd - if (hasKeycode(device, AKEYCODE_Q)) { + if (hasKeycodeLocked(device, AKEYCODE_Q)) { device->classes |= INPUT_DEVICE_CLASS_ALPHAKEY; } // See if this device has a DPAD. - if (hasKeycode(device, AKEYCODE_DPAD_UP) && - hasKeycode(device, AKEYCODE_DPAD_DOWN) && - hasKeycode(device, AKEYCODE_DPAD_LEFT) && - hasKeycode(device, AKEYCODE_DPAD_RIGHT) && - hasKeycode(device, AKEYCODE_DPAD_CENTER)) { + if (hasKeycodeLocked(device, AKEYCODE_DPAD_UP) && + hasKeycodeLocked(device, AKEYCODE_DPAD_DOWN) && + hasKeycodeLocked(device, AKEYCODE_DPAD_LEFT) && + hasKeycodeLocked(device, AKEYCODE_DPAD_RIGHT) && + hasKeycodeLocked(device, AKEYCODE_DPAD_CENTER)) { device->classes |= INPUT_DEVICE_CLASS_DPAD; } // See if this device has a gamepad. for (size_t i = 0; i < sizeof(GAMEPAD_KEYCODES); i++) { - if (hasKeycode(device, GAMEPAD_KEYCODES[i])) { + if (hasKeycodeLocked(device, GAMEPAD_KEYCODES[i])) { device->classes |= INPUT_DEVICE_CLASS_GAMEPAD; break; } @@ -830,7 +840,7 @@ int EventHub::open_device(const char *deviceName) return 0; } -bool EventHub::hasKeycode(device_t* device, int keycode) const +bool EventHub::hasKeycodeLocked(device_t* device, int keycode) const { if (device->keyBitmask == NULL || device->layoutMap == NULL) { return false; @@ -972,4 +982,32 @@ int EventHub::scan_dir(const char *dirname) return 0; } +void EventHub::dump(String8& dump) { + dump.append("Event Hub State:\n"); + + { // acquire lock + AutoMutex _l(mLock); + + dump.appendFormat(INDENT "HaveFirstKeyboard: %s\n", toString(mHaveFirstKeyboard)); + dump.appendFormat(INDENT "FirstKeyboardId: 0x%x\n", mFirstKeyboardId); + + dump.append(INDENT "Devices:\n"); + + for (int i = 0; i < mNumDevicesById; i++) { + const device_t* device = mDevicesById[i].device; + if (device) { + if (mFirstKeyboardId == device->id) { + dump.appendFormat(INDENT2 "0x%x: %s (aka device 0 - first keyboard)\n", + device->id, device->name.string()); + } else { + dump.appendFormat(INDENT2 "0x%x: %s\n", device->id, device->name.string()); + } + dump.appendFormat(INDENT3 "Classes: 0x%08x\n", device->classes); + dump.appendFormat(INDENT3 "Path: %s\n", device->path.string()); + dump.appendFormat(INDENT3 "KeyLayoutFile: %s\n", device->keylayoutFilename.string()); + } + } + } // release lock +} + }; // namespace android |