IN UINT8 Value\r
);\r
\r
-STATIC\r
-EFI_STATUS\r
-UpdateStatusLights (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
- );\r
-\r
-//\r
-// Global variables\r
-//\r
-\r
STATIC struct {\r
UINT8 ScanCode;\r
UINT16 EfiScanCode;\r
0x00,\r
0x00\r
},\r
+ {\r
+ 0x5B, //Left LOGO\r
+ SCAN_NULL,\r
+ 0x00,\r
+ 0x00\r
+ }, \r
+ {\r
+ 0x5C, //Right LOGO\r
+ SCAN_NULL,\r
+ 0x00,\r
+ 0x00\r
+ }, \r
+ {\r
+ 0x5D, //Menu key\r
+ SCAN_NULL,\r
+ 0x00,\r
+ 0x00\r
+ }, \r
{\r
TABLE_END,\r
TABLE_END,\r
\r
}\r
\r
-STATIC\r
EFI_STATUS\r
UpdateStatusLights (\r
IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
break;\r
\r
case SCANCODE_LEFT_SHIFT_MAKE:\r
+ if (!Extended) {\r
+ ConsoleIn->Shift = TRUE;\r
+ ConsoleIn->LeftShift = TRUE;\r
+ } \r
+ break;\r
case SCANCODE_RIGHT_SHIFT_MAKE:\r
if (!Extended) {\r
ConsoleIn->Shift = TRUE;\r
+ ConsoleIn->RightShift = TRUE;\r
}\r
break;\r
\r
case SCANCODE_LEFT_SHIFT_BREAK:\r
+ if (!Extended) {\r
+ ConsoleIn->Shift = FALSE;\r
+ ConsoleIn->LeftShift = FALSE;\r
+ } else {\r
+ ConsoleIn->SysReq = FALSE;\r
+ } \r
+ break;\r
case SCANCODE_RIGHT_SHIFT_BREAK:\r
if (!Extended) {\r
ConsoleIn->Shift = FALSE;\r
+ ConsoleIn->RightShift = FALSE;\r
}\r
break;\r
\r
+ case SCANCODE_LEFT_LOGO_MAKE:\r
+ ConsoleIn->LeftLogo = TRUE;\r
+ break; \r
+ case SCANCODE_LEFT_LOGO_BREAK:\r
+ ConsoleIn->LeftLogo = FALSE;\r
+ break; \r
+ case SCANCODE_RIGHT_LOGO_MAKE:\r
+ ConsoleIn->RightLogo = TRUE;\r
+ break;\r
+ case SCANCODE_RIGHT_LOGO_BREAK:\r
+ ConsoleIn->RightLogo = FALSE;\r
+ break; \r
+ case SCANCODE_MENU_MAKE:\r
+ ConsoleIn->Menu = TRUE;\r
+ break;\r
+ case SCANCODE_MENU_BREAK:\r
+ ConsoleIn->Menu = FALSE;\r
+ break; \r
+ case SCANCODE_SYS_REQ_MAKE:\r
+ if (Extended) {\r
+ ConsoleIn->SysReq = TRUE;\r
+ }\r
case SCANCODE_CAPS_LOCK_MAKE:\r
ConsoleIn->CapsLock = (BOOLEAN)!ConsoleIn->CapsLock;\r
UpdateStatusLights (ConsoleIn);\r
}\r
}\r
//\r
- // If this is the SysRq, ignore it\r
- //\r
- if (Extended && ScanCode == 0x37) {\r
- return EFI_NOT_READY;\r
- }\r
- //\r
// Treat Numeric Key Pad "/" specially\r
//\r
if (Extended && ScanCode == 0x35) {\r
ConsoleIn->Key.ScanCode = ConvertKeyboardScanCodeToEfiKey[Index].EfiScanCode;\r
if (ConsoleIn->Shift) {\r
ConsoleIn->Key.UnicodeChar = ConvertKeyboardScanCodeToEfiKey[Index].ShiftUnicodeChar;\r
+ //\r
+ // Need not return associated shift state if a class of printable characters that\r
+ // are normally adjusted by shift modifiers. e.g. Shift Key + 'f' key = 'F'\r
+ //\r
+ if (ConsoleIn->Key.UnicodeChar >= 'A' && ConsoleIn->Key.UnicodeChar <= 'Z') {\r
+ ConsoleIn->LeftShift = FALSE;\r
+ ConsoleIn->RightShift = FALSE;\r
+ }\r
} else {\r
ConsoleIn->Key.UnicodeChar = ConvertKeyboardScanCodeToEfiKey[Index].UnicodeChar;\r
}\r
return EFI_NOT_READY;\r
}\r
\r
+ //\r
+ // Save the Shift/Toggle state\r
+ //\r
+ if (ConsoleIn->Ctrl) {\r
+ ConsoleIn->KeyState.KeyShiftState |= (Extended == TRUE) ? EFI_RIGHT_CONTROL_PRESSED : EFI_LEFT_CONTROL_PRESSED;\r
+ } \r
+ if (ConsoleIn->Alt) { \r
+ ConsoleIn->KeyState.KeyShiftState |= (Extended == TRUE) ? EFI_RIGHT_ALT_PRESSED : EFI_LEFT_ALT_PRESSED;\r
+ } \r
+ if (ConsoleIn->LeftShift) { \r
+ ConsoleIn->KeyState.KeyShiftState |= EFI_LEFT_SHIFT_PRESSED;\r
+ } \r
+ if (ConsoleIn->RightShift) { \r
+ ConsoleIn->KeyState.KeyShiftState |= EFI_RIGHT_SHIFT_PRESSED;\r
+ } \r
+ if (ConsoleIn->LeftLogo) { \r
+ ConsoleIn->KeyState.KeyShiftState |= EFI_LEFT_LOGO_PRESSED;\r
+ } \r
+ if (ConsoleIn->RightLogo) { \r
+ ConsoleIn->KeyState.KeyShiftState |= EFI_RIGHT_LOGO_PRESSED;\r
+ } \r
+ if (ConsoleIn->Menu) { \r
+ ConsoleIn->KeyState.KeyShiftState |= EFI_MENU_KEY_PRESSED;\r
+ } \r
+ if (ConsoleIn->SysReq) { \r
+ ConsoleIn->KeyState.KeyShiftState |= EFI_SYS_REQ_PRESSED;\r
+ } \r
+ if (ConsoleIn->CapsLock) {\r
+ ConsoleIn->KeyState.KeyToggleState |= EFI_CAPS_LOCK_ACTIVE;\r
+ }\r
+ if (ConsoleIn->NumLock) {\r
+ ConsoleIn->KeyState.KeyToggleState |= EFI_NUM_LOCK_ACTIVE;\r
+ }\r
+ if (ConsoleIn->ScrollLock) {\r
+ ConsoleIn->KeyState.KeyToggleState |= EFI_SCROLL_LOCK_ACTIVE;\r
+ }\r
+\r
return EFI_SUCCESS;\r
}\r
\r
ConsoleIn->CapsLock = FALSE;\r
ConsoleIn->NumLock = FALSE;\r
ConsoleIn->ScrollLock = FALSE;\r
+ ConsoleIn->LeftShift = FALSE;\r
+ ConsoleIn->RightShift = FALSE;\r
+ ConsoleIn->LeftLogo = FALSE;\r
+ ConsoleIn->RightLogo = FALSE;\r
+ ConsoleIn->Menu = FALSE;\r
+ ConsoleIn->SysReq = FALSE; \r
\r
//\r
// For reseting keyboard is not mandatory before booting OS and sometimes keyboard responses very slow,\r
\r
@param[in] BiosKeyboardPrivate Keyboard Private Data Structure\r
\r
- @retval TRUE Keyboard in System.\r
- @retval FALSE Keyboard not in System.\r
+ @retval TRUE Keyboard in System.\r
+ @retval FALSE Keyboard not in System.\r
**/\r
BOOLEAN\r
EFIAPI\r