Loading services/inputflinger/EventHub.cpp +22 −8 Original line number Original line Diff line number Diff line Loading @@ -438,10 +438,12 @@ bool EventHub::markSupportedKeyCodes(int32_t deviceId, size_t numCodes, return false; return false; } } status_t EventHub::mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode, status_t EventHub::mapKey(int32_t deviceId, int32_t* outKeycode, uint32_t* outFlags) const { int32_t scanCode, int32_t usageCode, int32_t metaState, int32_t* outKeycode, int32_t* outMetaState, uint32_t* outFlags) const { AutoMutex _l(mLock); AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); Device* device = getDeviceLocked(deviceId); status_t status = NAME_NOT_FOUND; if (device) { if (device) { // Check the key character map first. // Check the key character map first. Loading @@ -449,22 +451,34 @@ status_t EventHub::mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode, if (kcm != NULL) { if (kcm != NULL) { if (!kcm->mapKey(scanCode, usageCode, outKeycode)) { if (!kcm->mapKey(scanCode, usageCode, outKeycode)) { *outFlags = 0; *outFlags = 0; return NO_ERROR; status = NO_ERROR; } } } } // Check the key layout next. // Check the key layout next. if (device->keyMap.haveKeyLayout()) { if (status != NO_ERROR && device->keyMap.haveKeyLayout()) { if (!device->keyMap.keyLayoutMap->mapKey( if (!device->keyMap.keyLayoutMap->mapKey( scanCode, usageCode, outKeycode, outFlags)) { scanCode, usageCode, outKeycode, outFlags)) { return NO_ERROR; status = NO_ERROR; } } if (status == NO_ERROR) { if (kcm != NULL) { kcm->tryRemapKey(*outKeycode, metaState, outKeycode, outMetaState); } else { *outMetaState = metaState; } } } } } } if (status != NO_ERROR) { *outKeycode = 0; *outKeycode = 0; *outFlags = 0; *outFlags = 0; return NAME_NOT_FOUND; *outMetaState = metaState; } return status; } } status_t EventHub::mapAxis(int32_t deviceId, int32_t scanCode, AxisInfo* outAxisInfo) const { status_t EventHub::mapAxis(int32_t deviceId, int32_t scanCode, AxisInfo* outAxisInfo) const { Loading services/inputflinger/EventHub.h +6 −4 Original line number Original line Diff line number Diff line Loading @@ -197,8 +197,9 @@ public: virtual bool hasInputProperty(int32_t deviceId, int property) const = 0; virtual bool hasInputProperty(int32_t deviceId, int property) const = 0; virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode, virtual status_t mapKey(int32_t deviceId, int32_t* outKeycode, uint32_t* outFlags) const = 0; int32_t scanCode, int32_t usageCode, int32_t metaState, int32_t* outKeycode, int32_t *outMetaState, uint32_t* outFlags) const = 0; virtual status_t mapAxis(int32_t deviceId, int32_t scanCode, virtual status_t mapAxis(int32_t deviceId, int32_t scanCode, AxisInfo* outAxisInfo) const = 0; AxisInfo* outAxisInfo) const = 0; Loading Loading @@ -285,8 +286,9 @@ public: virtual bool hasInputProperty(int32_t deviceId, int property) const; virtual bool hasInputProperty(int32_t deviceId, int property) const; virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode, virtual status_t mapKey(int32_t deviceId, int32_t* outKeycode, uint32_t* outFlags) const; int32_t scanCode, int32_t usageCode, int32_t metaState, int32_t* outKeycode, int32_t *outMetaState, uint32_t* outFlags) const; virtual status_t mapAxis(int32_t deviceId, int32_t scanCode, virtual status_t mapAxis(int32_t deviceId, int32_t scanCode, AxisInfo* outAxisInfo) const; AxisInfo* outAxisInfo) const; Loading services/inputflinger/InputReader.cpp +23 −11 Original line number Original line Diff line number Diff line Loading @@ -2177,13 +2177,7 @@ void KeyboardInputMapper::process(const RawEvent* rawEvent) { mCurrentHidUsage = 0; mCurrentHidUsage = 0; if (isKeyboardOrGamepadKey(scanCode)) { if (isKeyboardOrGamepadKey(scanCode)) { int32_t keyCode; processKey(rawEvent->when, rawEvent->value != 0, scanCode, usageCode); uint32_t flags; if (getEventHub()->mapKey(getDeviceId(), scanCode, usageCode, &keyCode, &flags)) { keyCode = AKEYCODE_UNKNOWN; flags = 0; } processKey(rawEvent->when, rawEvent->value != 0, keyCode, scanCode, flags); } } break; break; } } Loading @@ -2208,8 +2202,18 @@ bool KeyboardInputMapper::isKeyboardOrGamepadKey(int32_t scanCode) { || (scanCode >= BTN_JOYSTICK && scanCode < BTN_DIGI); || (scanCode >= BTN_JOYSTICK && scanCode < BTN_DIGI); } } void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode, void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t scanCode, int32_t scanCode, uint32_t policyFlags) { int32_t usageCode) { int32_t keyCode; int32_t keyMetaState; uint32_t policyFlags; if (getEventHub()->mapKey(getDeviceId(), scanCode, usageCode, mMetaState, &keyCode, &keyMetaState, &policyFlags)) { keyCode = AKEYCODE_UNKNOWN; keyMetaState = mMetaState; policyFlags = 0; } if (down) { if (down) { // Rotate key codes according to orientation if needed. // Rotate key codes according to orientation if needed. Loading Loading @@ -2262,6 +2266,12 @@ void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode, if (metaStateChanged) { if (metaStateChanged) { mMetaState = newMetaState; mMetaState = newMetaState; updateLedState(false); updateLedState(false); // If global meta state changed send it along with the key. // If it has not changed then we'll use what keymap gave us, // since key replacement logic might temporarily reset a few // meta bits for given key. keyMetaState = newMetaState; } } nsecs_t downTime = mDownTime; nsecs_t downTime = mDownTime; Loading Loading @@ -2289,7 +2299,7 @@ void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode, NotifyKeyArgs args(when, getDeviceId(), mSource, policyFlags, NotifyKeyArgs args(when, getDeviceId(), mSource, policyFlags, down ? AKEY_EVENT_ACTION_DOWN : AKEY_EVENT_ACTION_UP, down ? AKEY_EVENT_ACTION_DOWN : AKEY_EVENT_ACTION_UP, AKEY_EVENT_FLAG_FROM_SYSTEM, keyCode, scanCode, newMetaState, downTime); AKEY_EVENT_FLAG_FROM_SYSTEM, keyCode, scanCode, keyMetaState, downTime); getListener()->notifyKey(&args); getListener()->notifyKey(&args); } } Loading Loading @@ -3543,8 +3553,10 @@ void TouchInputMapper::configureVirtualKeys() { virtualKey.scanCode = virtualKeyDefinition.scanCode; virtualKey.scanCode = virtualKeyDefinition.scanCode; int32_t keyCode; int32_t keyCode; int32_t dummyKeyMetaState; uint32_t flags; uint32_t flags; if (getEventHub()->mapKey(getDeviceId(), virtualKey.scanCode, 0, &keyCode, &flags)) { if (getEventHub()->mapKey(getDeviceId(), virtualKey.scanCode, 0, 0, &keyCode, &dummyKeyMetaState, &flags)) { ALOGW(INDENT "VirtualKey %d: could not obtain key code, ignoring", ALOGW(INDENT "VirtualKey %d: could not obtain key code, ignoring", virtualKey.scanCode); virtualKey.scanCode); mVirtualKeys.pop(); // drop the key mVirtualKeys.pop(); // drop the key Loading services/inputflinger/InputReader.h +1 −2 Original line number Original line Diff line number Diff line Loading @@ -1154,8 +1154,7 @@ private: bool isKeyboardOrGamepadKey(int32_t scanCode); bool isKeyboardOrGamepadKey(int32_t scanCode); void processKey(nsecs_t when, bool down, int32_t keyCode, int32_t scanCode, void processKey(nsecs_t when, bool down, int32_t scanCode, int32_t usageCode); uint32_t policyFlags); ssize_t findKeyDown(int32_t scanCode); ssize_t findKeyDown(int32_t scanCode); Loading services/inputflinger/tests/InputReader_test.cpp +6 −2 Original line number Original line Diff line number Diff line Loading @@ -518,8 +518,9 @@ private: return false; return false; } } virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode, virtual status_t mapKey(int32_t deviceId, int32_t* outKeycode, uint32_t* outFlags) const { int32_t scanCode, int32_t usageCode, int32_t metaState, int32_t* outKeycode, int32_t *outMetaState, uint32_t* outFlags) const { Device* device = getDevice(deviceId); Device* device = getDevice(deviceId); if (device) { if (device) { const KeyInfo* key = getKey(device, scanCode, usageCode); const KeyInfo* key = getKey(device, scanCode, usageCode); Loading @@ -530,6 +531,9 @@ private: if (outFlags) { if (outFlags) { *outFlags = key->flags; *outFlags = key->flags; } } if (outMetaState) { *outMetaState = metaState; } return OK; return OK; } } } } Loading Loading
services/inputflinger/EventHub.cpp +22 −8 Original line number Original line Diff line number Diff line Loading @@ -438,10 +438,12 @@ bool EventHub::markSupportedKeyCodes(int32_t deviceId, size_t numCodes, return false; return false; } } status_t EventHub::mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode, status_t EventHub::mapKey(int32_t deviceId, int32_t* outKeycode, uint32_t* outFlags) const { int32_t scanCode, int32_t usageCode, int32_t metaState, int32_t* outKeycode, int32_t* outMetaState, uint32_t* outFlags) const { AutoMutex _l(mLock); AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); Device* device = getDeviceLocked(deviceId); status_t status = NAME_NOT_FOUND; if (device) { if (device) { // Check the key character map first. // Check the key character map first. Loading @@ -449,22 +451,34 @@ status_t EventHub::mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode, if (kcm != NULL) { if (kcm != NULL) { if (!kcm->mapKey(scanCode, usageCode, outKeycode)) { if (!kcm->mapKey(scanCode, usageCode, outKeycode)) { *outFlags = 0; *outFlags = 0; return NO_ERROR; status = NO_ERROR; } } } } // Check the key layout next. // Check the key layout next. if (device->keyMap.haveKeyLayout()) { if (status != NO_ERROR && device->keyMap.haveKeyLayout()) { if (!device->keyMap.keyLayoutMap->mapKey( if (!device->keyMap.keyLayoutMap->mapKey( scanCode, usageCode, outKeycode, outFlags)) { scanCode, usageCode, outKeycode, outFlags)) { return NO_ERROR; status = NO_ERROR; } } if (status == NO_ERROR) { if (kcm != NULL) { kcm->tryRemapKey(*outKeycode, metaState, outKeycode, outMetaState); } else { *outMetaState = metaState; } } } } } } if (status != NO_ERROR) { *outKeycode = 0; *outKeycode = 0; *outFlags = 0; *outFlags = 0; return NAME_NOT_FOUND; *outMetaState = metaState; } return status; } } status_t EventHub::mapAxis(int32_t deviceId, int32_t scanCode, AxisInfo* outAxisInfo) const { status_t EventHub::mapAxis(int32_t deviceId, int32_t scanCode, AxisInfo* outAxisInfo) const { Loading
services/inputflinger/EventHub.h +6 −4 Original line number Original line Diff line number Diff line Loading @@ -197,8 +197,9 @@ public: virtual bool hasInputProperty(int32_t deviceId, int property) const = 0; virtual bool hasInputProperty(int32_t deviceId, int property) const = 0; virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode, virtual status_t mapKey(int32_t deviceId, int32_t* outKeycode, uint32_t* outFlags) const = 0; int32_t scanCode, int32_t usageCode, int32_t metaState, int32_t* outKeycode, int32_t *outMetaState, uint32_t* outFlags) const = 0; virtual status_t mapAxis(int32_t deviceId, int32_t scanCode, virtual status_t mapAxis(int32_t deviceId, int32_t scanCode, AxisInfo* outAxisInfo) const = 0; AxisInfo* outAxisInfo) const = 0; Loading Loading @@ -285,8 +286,9 @@ public: virtual bool hasInputProperty(int32_t deviceId, int property) const; virtual bool hasInputProperty(int32_t deviceId, int property) const; virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode, virtual status_t mapKey(int32_t deviceId, int32_t* outKeycode, uint32_t* outFlags) const; int32_t scanCode, int32_t usageCode, int32_t metaState, int32_t* outKeycode, int32_t *outMetaState, uint32_t* outFlags) const; virtual status_t mapAxis(int32_t deviceId, int32_t scanCode, virtual status_t mapAxis(int32_t deviceId, int32_t scanCode, AxisInfo* outAxisInfo) const; AxisInfo* outAxisInfo) const; Loading
services/inputflinger/InputReader.cpp +23 −11 Original line number Original line Diff line number Diff line Loading @@ -2177,13 +2177,7 @@ void KeyboardInputMapper::process(const RawEvent* rawEvent) { mCurrentHidUsage = 0; mCurrentHidUsage = 0; if (isKeyboardOrGamepadKey(scanCode)) { if (isKeyboardOrGamepadKey(scanCode)) { int32_t keyCode; processKey(rawEvent->when, rawEvent->value != 0, scanCode, usageCode); uint32_t flags; if (getEventHub()->mapKey(getDeviceId(), scanCode, usageCode, &keyCode, &flags)) { keyCode = AKEYCODE_UNKNOWN; flags = 0; } processKey(rawEvent->when, rawEvent->value != 0, keyCode, scanCode, flags); } } break; break; } } Loading @@ -2208,8 +2202,18 @@ bool KeyboardInputMapper::isKeyboardOrGamepadKey(int32_t scanCode) { || (scanCode >= BTN_JOYSTICK && scanCode < BTN_DIGI); || (scanCode >= BTN_JOYSTICK && scanCode < BTN_DIGI); } } void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode, void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t scanCode, int32_t scanCode, uint32_t policyFlags) { int32_t usageCode) { int32_t keyCode; int32_t keyMetaState; uint32_t policyFlags; if (getEventHub()->mapKey(getDeviceId(), scanCode, usageCode, mMetaState, &keyCode, &keyMetaState, &policyFlags)) { keyCode = AKEYCODE_UNKNOWN; keyMetaState = mMetaState; policyFlags = 0; } if (down) { if (down) { // Rotate key codes according to orientation if needed. // Rotate key codes according to orientation if needed. Loading Loading @@ -2262,6 +2266,12 @@ void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode, if (metaStateChanged) { if (metaStateChanged) { mMetaState = newMetaState; mMetaState = newMetaState; updateLedState(false); updateLedState(false); // If global meta state changed send it along with the key. // If it has not changed then we'll use what keymap gave us, // since key replacement logic might temporarily reset a few // meta bits for given key. keyMetaState = newMetaState; } } nsecs_t downTime = mDownTime; nsecs_t downTime = mDownTime; Loading Loading @@ -2289,7 +2299,7 @@ void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode, NotifyKeyArgs args(when, getDeviceId(), mSource, policyFlags, NotifyKeyArgs args(when, getDeviceId(), mSource, policyFlags, down ? AKEY_EVENT_ACTION_DOWN : AKEY_EVENT_ACTION_UP, down ? AKEY_EVENT_ACTION_DOWN : AKEY_EVENT_ACTION_UP, AKEY_EVENT_FLAG_FROM_SYSTEM, keyCode, scanCode, newMetaState, downTime); AKEY_EVENT_FLAG_FROM_SYSTEM, keyCode, scanCode, keyMetaState, downTime); getListener()->notifyKey(&args); getListener()->notifyKey(&args); } } Loading Loading @@ -3543,8 +3553,10 @@ void TouchInputMapper::configureVirtualKeys() { virtualKey.scanCode = virtualKeyDefinition.scanCode; virtualKey.scanCode = virtualKeyDefinition.scanCode; int32_t keyCode; int32_t keyCode; int32_t dummyKeyMetaState; uint32_t flags; uint32_t flags; if (getEventHub()->mapKey(getDeviceId(), virtualKey.scanCode, 0, &keyCode, &flags)) { if (getEventHub()->mapKey(getDeviceId(), virtualKey.scanCode, 0, 0, &keyCode, &dummyKeyMetaState, &flags)) { ALOGW(INDENT "VirtualKey %d: could not obtain key code, ignoring", ALOGW(INDENT "VirtualKey %d: could not obtain key code, ignoring", virtualKey.scanCode); virtualKey.scanCode); mVirtualKeys.pop(); // drop the key mVirtualKeys.pop(); // drop the key Loading
services/inputflinger/InputReader.h +1 −2 Original line number Original line Diff line number Diff line Loading @@ -1154,8 +1154,7 @@ private: bool isKeyboardOrGamepadKey(int32_t scanCode); bool isKeyboardOrGamepadKey(int32_t scanCode); void processKey(nsecs_t when, bool down, int32_t keyCode, int32_t scanCode, void processKey(nsecs_t when, bool down, int32_t scanCode, int32_t usageCode); uint32_t policyFlags); ssize_t findKeyDown(int32_t scanCode); ssize_t findKeyDown(int32_t scanCode); Loading
services/inputflinger/tests/InputReader_test.cpp +6 −2 Original line number Original line Diff line number Diff line Loading @@ -518,8 +518,9 @@ private: return false; return false; } } virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode, virtual status_t mapKey(int32_t deviceId, int32_t* outKeycode, uint32_t* outFlags) const { int32_t scanCode, int32_t usageCode, int32_t metaState, int32_t* outKeycode, int32_t *outMetaState, uint32_t* outFlags) const { Device* device = getDevice(deviceId); Device* device = getDevice(deviceId); if (device) { if (device) { const KeyInfo* key = getKey(device, scanCode, usageCode); const KeyInfo* key = getKey(device, scanCode, usageCode); Loading @@ -530,6 +531,9 @@ private: if (outFlags) { if (outFlags) { *outFlags = key->flags; *outFlags = key->flags; } } if (outMetaState) { *outMetaState = metaState; } return OK; return OK; } } } } Loading