Loading data/keyboards/Generic.kl +13 −0 Original line number Diff line number Diff line Loading @@ -423,3 +423,16 @@ axis 0x09 GAS axis 0x0a BRAKE axis 0x10 HAT_X axis 0x11 HAT_Y # LEDs led 0x00 NUM_LOCK led 0x01 CAPS_LOCK led 0x02 SCROLL_LOCK led 0x03 COMPOSE led 0x04 KANA led 0x05 SLEEP led 0x06 SUSPEND led 0x07 MUTE led 0x08 MISC led 0x09 MAIL led 0x0a CHARGING services/input/EventHub.cpp +31 −4 Original line number Diff line number Diff line Loading @@ -523,8 +523,9 @@ bool EventHub::hasScanCode(int32_t deviceId, int32_t scanCode) const { bool EventHub::hasLed(int32_t deviceId, int32_t led) const { AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); if (device && led >= 0 && led <= LED_MAX) { if (test_bit(led, device->ledBitmask)) { int32_t sc; if (device && mapLed(device, led, &sc) == NO_ERROR) { if (test_bit(sc, device->ledBitmask)) { return true; } } Loading @@ -534,12 +535,17 @@ bool EventHub::hasLed(int32_t deviceId, int32_t led) const { void EventHub::setLedState(int32_t deviceId, int32_t led, bool on) { AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); if (device && !device->isVirtual() && led >= 0 && led <= LED_MAX) { setLedStateLocked(device, led, on); } void EventHub::setLedStateLocked(Device* device, int32_t led, bool on) { int32_t sc; if (device && !device->isVirtual() && mapLed(device, led, &sc) != NAME_NOT_FOUND) { struct input_event ev; ev.time.tv_sec = 0; ev.time.tv_usec = 0; ev.type = EV_LED; ev.code = led; ev.code = sc; ev.value = on ? 1 : 0; ssize_t nWrite; Loading Loading @@ -1253,6 +1259,7 @@ status_t EventHub::openDeviceLocked(const char *devicePath) { if (device->classes & (INPUT_DEVICE_CLASS_JOYSTICK | INPUT_DEVICE_CLASS_GAMEPAD)) { device->controllerNumber = getNextControllerNumberLocked(device); setLedForController(device); } // Register with epoll. Loading Loading @@ -1391,6 +1398,11 @@ void EventHub::releaseControllerNumberLocked(Device* device) { mControllerNumbers.clearBit(static_cast<uint32_t>(num - 1)); } void EventHub::setLedForController(Device* device) { for (int i = 0; i < MAX_CONTROLLER_LEDS; i++) { setLedStateLocked(device, ALED_CONTROLLER_1 + i, device->controllerNumber == i + 1); } } bool EventHub::hasKeycodeLocked(Device* device, int keycode) const { if (!device->keyMap.haveKeyLayout() || !device->keyBitmask) { Loading @@ -1410,6 +1422,21 @@ bool EventHub::hasKeycodeLocked(Device* device, int keycode) const { return false; } status_t EventHub::mapLed(Device* device, int32_t led, int32_t* outScanCode) const { if (!device->keyMap.haveKeyLayout() || !device->ledBitmask) { return NAME_NOT_FOUND; } int32_t scanCode; if(device->keyMap.keyLayoutMap->findScanCodeForLed(led, &scanCode) != NAME_NOT_FOUND) { if(scanCode >= 0 && scanCode <= LED_MAX && test_bit(scanCode, device->ledBitmask)) { *outScanCode = scanCode; return NO_ERROR; } } return NAME_NOT_FOUND; } status_t EventHub::closeDeviceByPathLocked(const char *devicePath) { Device* device = getDeviceByPathLocked(devicePath); if (device) { Loading services/input/EventHub.h +6 −0 Original line number Diff line number Diff line Loading @@ -231,6 +231,8 @@ public: uint8_t* outFlags) const = 0; virtual bool hasScanCode(int32_t deviceId, int32_t scanCode) const = 0; /* LED related functions expect Android LED constants, not scan codes or HID usages */ virtual bool hasLed(int32_t deviceId, int32_t led) const = 0; virtual void setLedState(int32_t deviceId, int32_t led, bool on) = 0; Loading Loading @@ -393,6 +395,10 @@ private: int32_t getNextControllerNumberLocked(Device* device); void releaseControllerNumberLocked(Device* device); void setLedForController(Device* device); status_t mapLed(Device* device, int32_t led, int32_t* outScanCode) const; void setLedStateLocked(Device* device, int32_t led, bool on); // Protect all internal state. mutable Mutex mLock; Loading services/input/InputReader.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -2198,9 +2198,9 @@ int32_t KeyboardInputMapper::getMetaState() { } void KeyboardInputMapper::resetLedState() { initializeLedState(mCapsLockLedState, LED_CAPSL); initializeLedState(mNumLockLedState, LED_NUML); initializeLedState(mScrollLockLedState, LED_SCROLLL); initializeLedState(mCapsLockLedState, ALED_CAPS_LOCK); initializeLedState(mNumLockLedState, ALED_NUM_LOCK); initializeLedState(mScrollLockLedState, ALED_SCROLL_LOCK); updateLedState(true); } Loading @@ -2211,11 +2211,11 @@ void KeyboardInputMapper::initializeLedState(LedState& ledState, int32_t led) { } void KeyboardInputMapper::updateLedState(bool reset) { updateLedStateForModifier(mCapsLockLedState, LED_CAPSL, updateLedStateForModifier(mCapsLockLedState, ALED_CAPS_LOCK, AMETA_CAPS_LOCK_ON, reset); updateLedStateForModifier(mNumLockLedState, LED_NUML, updateLedStateForModifier(mNumLockLedState, ALED_NUM_LOCK, AMETA_NUM_LOCK_ON, reset); updateLedStateForModifier(mScrollLockLedState, LED_SCROLLL, updateLedStateForModifier(mScrollLockLedState, ALED_SCROLL_LOCK, AMETA_SCROLL_LOCK_ON, reset); } Loading Loading
data/keyboards/Generic.kl +13 −0 Original line number Diff line number Diff line Loading @@ -423,3 +423,16 @@ axis 0x09 GAS axis 0x0a BRAKE axis 0x10 HAT_X axis 0x11 HAT_Y # LEDs led 0x00 NUM_LOCK led 0x01 CAPS_LOCK led 0x02 SCROLL_LOCK led 0x03 COMPOSE led 0x04 KANA led 0x05 SLEEP led 0x06 SUSPEND led 0x07 MUTE led 0x08 MISC led 0x09 MAIL led 0x0a CHARGING
services/input/EventHub.cpp +31 −4 Original line number Diff line number Diff line Loading @@ -523,8 +523,9 @@ bool EventHub::hasScanCode(int32_t deviceId, int32_t scanCode) const { bool EventHub::hasLed(int32_t deviceId, int32_t led) const { AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); if (device && led >= 0 && led <= LED_MAX) { if (test_bit(led, device->ledBitmask)) { int32_t sc; if (device && mapLed(device, led, &sc) == NO_ERROR) { if (test_bit(sc, device->ledBitmask)) { return true; } } Loading @@ -534,12 +535,17 @@ bool EventHub::hasLed(int32_t deviceId, int32_t led) const { void EventHub::setLedState(int32_t deviceId, int32_t led, bool on) { AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); if (device && !device->isVirtual() && led >= 0 && led <= LED_MAX) { setLedStateLocked(device, led, on); } void EventHub::setLedStateLocked(Device* device, int32_t led, bool on) { int32_t sc; if (device && !device->isVirtual() && mapLed(device, led, &sc) != NAME_NOT_FOUND) { struct input_event ev; ev.time.tv_sec = 0; ev.time.tv_usec = 0; ev.type = EV_LED; ev.code = led; ev.code = sc; ev.value = on ? 1 : 0; ssize_t nWrite; Loading Loading @@ -1253,6 +1259,7 @@ status_t EventHub::openDeviceLocked(const char *devicePath) { if (device->classes & (INPUT_DEVICE_CLASS_JOYSTICK | INPUT_DEVICE_CLASS_GAMEPAD)) { device->controllerNumber = getNextControllerNumberLocked(device); setLedForController(device); } // Register with epoll. Loading Loading @@ -1391,6 +1398,11 @@ void EventHub::releaseControllerNumberLocked(Device* device) { mControllerNumbers.clearBit(static_cast<uint32_t>(num - 1)); } void EventHub::setLedForController(Device* device) { for (int i = 0; i < MAX_CONTROLLER_LEDS; i++) { setLedStateLocked(device, ALED_CONTROLLER_1 + i, device->controllerNumber == i + 1); } } bool EventHub::hasKeycodeLocked(Device* device, int keycode) const { if (!device->keyMap.haveKeyLayout() || !device->keyBitmask) { Loading @@ -1410,6 +1422,21 @@ bool EventHub::hasKeycodeLocked(Device* device, int keycode) const { return false; } status_t EventHub::mapLed(Device* device, int32_t led, int32_t* outScanCode) const { if (!device->keyMap.haveKeyLayout() || !device->ledBitmask) { return NAME_NOT_FOUND; } int32_t scanCode; if(device->keyMap.keyLayoutMap->findScanCodeForLed(led, &scanCode) != NAME_NOT_FOUND) { if(scanCode >= 0 && scanCode <= LED_MAX && test_bit(scanCode, device->ledBitmask)) { *outScanCode = scanCode; return NO_ERROR; } } return NAME_NOT_FOUND; } status_t EventHub::closeDeviceByPathLocked(const char *devicePath) { Device* device = getDeviceByPathLocked(devicePath); if (device) { Loading
services/input/EventHub.h +6 −0 Original line number Diff line number Diff line Loading @@ -231,6 +231,8 @@ public: uint8_t* outFlags) const = 0; virtual bool hasScanCode(int32_t deviceId, int32_t scanCode) const = 0; /* LED related functions expect Android LED constants, not scan codes or HID usages */ virtual bool hasLed(int32_t deviceId, int32_t led) const = 0; virtual void setLedState(int32_t deviceId, int32_t led, bool on) = 0; Loading Loading @@ -393,6 +395,10 @@ private: int32_t getNextControllerNumberLocked(Device* device); void releaseControllerNumberLocked(Device* device); void setLedForController(Device* device); status_t mapLed(Device* device, int32_t led, int32_t* outScanCode) const; void setLedStateLocked(Device* device, int32_t led, bool on); // Protect all internal state. mutable Mutex mLock; Loading
services/input/InputReader.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -2198,9 +2198,9 @@ int32_t KeyboardInputMapper::getMetaState() { } void KeyboardInputMapper::resetLedState() { initializeLedState(mCapsLockLedState, LED_CAPSL); initializeLedState(mNumLockLedState, LED_NUML); initializeLedState(mScrollLockLedState, LED_SCROLLL); initializeLedState(mCapsLockLedState, ALED_CAPS_LOCK); initializeLedState(mNumLockLedState, ALED_NUM_LOCK); initializeLedState(mScrollLockLedState, ALED_SCROLL_LOCK); updateLedState(true); } Loading @@ -2211,11 +2211,11 @@ void KeyboardInputMapper::initializeLedState(LedState& ledState, int32_t led) { } void KeyboardInputMapper::updateLedState(bool reset) { updateLedStateForModifier(mCapsLockLedState, LED_CAPSL, updateLedStateForModifier(mCapsLockLedState, ALED_CAPS_LOCK, AMETA_CAPS_LOCK_ON, reset); updateLedStateForModifier(mNumLockLedState, LED_NUML, updateLedStateForModifier(mNumLockLedState, ALED_NUM_LOCK, AMETA_NUM_LOCK_ON, reset); updateLedStateForModifier(mScrollLockLedState, LED_SCROLLL, updateLedStateForModifier(mScrollLockLedState, ALED_SCROLL_LOCK, AMETA_SCROLL_LOCK_ON, reset); } Loading