diff --git a/BootloaderCommonPkg/Library/UsbKbLib/UsbKbLib.c b/BootloaderCommonPkg/Library/UsbKbLib/UsbKbLib.c index e77dae51..b98303f6 100644 --- a/BootloaderCommonPkg/Library/UsbKbLib/UsbKbLib.c +++ b/BootloaderCommonPkg/Library/UsbKbLib/UsbKbLib.c @@ -1,7 +1,7 @@ /** @file USB keyboard library implementation. - Copyright (c) 2018, Intel Corporation. All rights reserved.
+ Copyright (c) 2018 - 2020, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -15,7 +15,8 @@ CONST CHAR8 *mKeyboardKeyMap[] = { "abcdefghijklmnopqrstuvwxyz1234567890\r\x1b\b\t -=[]\\ ;'`,./", "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()\r\x1b\b\t _+{}| :\"~<>?", "/*-+\r1234567890.", - "CDBA" + "MQNP5OJRKIL", + "CDBA", }; USB_KB_DEV mUsbKbDevice; @@ -582,15 +583,18 @@ ConvertKeyToAscii ( return mKeyboardKeyMap[Shift][Key - 0x04]; } - if (mUsbKbDevice.NumLockOn) { - if (Key >= 0x54 && Key <= 0x63) { - return mKeyboardKeyMap[2][Key - 0x54]; - } + if (Key >= 0x54 && Key <= 0x63) { + // For keypad keys with NumLock on + if (mUsbKbDevice.NumLockOn || (Key < 0x59)) { + return mKeyboardKeyMap[2][Key - 0x54]; + } + // For keypad keys with NumLock off + Key = (UINT8)mKeyboardKeyMap[3][Key - 0x59]; } if (Key >= 0x4F && Key <= 0x52) { // Arrow key - return ARROW_KEY_MODIFIER | mKeyboardKeyMap[3][Key - 0x4F]; + return ARROW_KEY_MODIFIER | mKeyboardKeyMap[4][Key - 0x4F]; } if (Key == 0x53) {