From: "Ni, Ray" <ray.ni@intel.com>
To: "Gao, Zhichao" <zhichao.gao@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Wang, Jian J" <jian.j.wang@intel.com>,
"Wu, Hao A" <hao.a.wu@intel.com>,
"Gao, Liming" <liming.gao@intel.com>
Subject: Re: [PATCH V3 2/3] MdeModulePkg/TerminalDxe: Extend the terminal console support types
Date: Mon, 23 Sep 2019 02:36:10 +0000 [thread overview]
Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C2EBEED@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <20190918053355.19892-3-zhichao.gao@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
> -----Original Message-----
> From: Gao, Zhichao <zhichao.gao@intel.com>
> Sent: Tuesday, September 17, 2019 10:34 PM
> To: devel@edk2.groups.io
> Cc: Wang, Jian J <jian.j.wang@intel.com>; Wu, Hao A <hao.a.wu@intel.com>; Ni, Ray <ray.ni@intel.com>; Gao, Liming
> <liming.gao@intel.com>
> Subject: [PATCH V3 2/3] MdeModulePkg/TerminalDxe: Extend the terminal console support types
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2186
>
> Extend the support types of terminal console driver. New added types
> are Linux, XtermR6, VT400 and SCO.
>
> Refer to
> https://www.ssh.com/ssh/putty/putty-manuals/0.68/Chapter4.html#config-funkeys
>
> Add the missing VT100+ function keys map.
>
> Add F1-F12 function keys map for Linux, XtermR6, VT400 and SCO.
>
> Cc: Jian J Wang <jian.j.wang@intel.com>
> Cc: Hao A Wu <hao.a.wu@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Signed-off-by: Zhichao Gao <zhichao.gao@intel.com>
> ---
> .../Universal/Console/TerminalDxe/Terminal.c | 17 +-
> .../Universal/Console/TerminalDxe/Terminal.h | 37 ++-
> .../Console/TerminalDxe/TerminalConIn.c | 282 ++++++++++++++++--
> .../Console/TerminalDxe/TerminalConOut.c | 4 +
> .../Console/TerminalDxe/TerminalDxe.inf | 6 +-
> 5 files changed, 320 insertions(+), 26 deletions(-)
>
> diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
> b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
> index c76b2c5100..fd26e4dafe 100644
> --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
> +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
> @@ -2,7 +2,7 @@
> Produces Simple Text Input Protocol, Simple Text Input Extended Protocol and
> Simple Text Output Protocol upon Serial IO Protocol.
>
> -Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
> @@ -28,7 +28,11 @@ EFI_GUID *mTerminalType[] = {
> &gEfiVT100Guid,
> &gEfiVT100PlusGuid,
> &gEfiVTUTF8Guid,
> - &gEfiTtyTermGuid
> + &gEfiTtyTermGuid,
> + &gEdkiiLinuxTermGuid,
> + &gEdkiiXtermR6Guid,
> + &gEdkiiVT400Guid,
> + &gEdkiiSCOTermGuid
> };
>
>
> @@ -37,7 +41,11 @@ CHAR16 *mSerialConsoleNames[] = {
> L"VT-100 Serial Console",
> L"VT-100+ Serial Console",
> L"VT-UTF8 Serial Console",
> - L"Tty Terminal Serial Console"
> + L"Tty Terminal Serial Console",
> + L"Linux Terminal Serial Console",
> + L"Xterm R6 Serial Console",
> + L"VT-400 Serial Console",
> + L"SCO Terminal Serial Console"
> };
>
> TERMINAL_DEV mTerminalDevTemplate = {
> @@ -187,7 +195,8 @@ TerminalDriverBindingSupported (
>
> }
> //
> - // only supports PC ANSI, VT100, VT100+, VT-UTF8, and TtyTerm terminal types
> + // only supports PC ANSI, VT100, VT100+, VT-UTF8, TtyTerm
> + // Linux, XtermR6, VT400 and SCO terminal types
> //
> if (TerminalTypeFromGuid (&Node->Guid) == ARRAY_SIZE (mTerminalType)) {
> return EFI_UNSUPPORTED;
> diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h
> b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h
> index b2f0901fc1..d683aa792f 100644
> --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h
> +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h
> @@ -1,7 +1,7 @@
> /** @file
> Header file for Terminal driver.
>
> -Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
> Copyright (C) 2016 Silicon Graphics, Inc. All rights reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -81,7 +81,11 @@ typedef enum {
> TerminalTypeVt100,
> TerminalTypeVt100Plus,
> TerminalTypeVtUtf8,
> - TerminalTypeTtyTerm
> + TerminalTypeTtyTerm,
> + TerminalTypeLinux,
> + TerminalTypeXtermR6,
> + TerminalTypeVt400,
> + TerminalTypeSCO
> } TERMINAL_TYPE;
>
> typedef struct {
> @@ -126,7 +130,9 @@ typedef struct {
> #define INPUT_STATE_LEFTOPENBRACKET 0x04
> #define INPUT_STATE_O 0x08
> #define INPUT_STATE_2 0x10
> -#define INPUT_STATE_LEFTOPENBRACKET_2 0x20
> +#define INPUT_STATE_LEFTOPENBRACKET_TTY 0x20
> +#define INPUT_STATE_1 0x40
> +#define INPUT_STATE_LEFTOPENBRACKET_2ND 0x80
>
> #define RESET_STATE_DEFAULT 0x00
> #define RESET_STATE_ESC_R 0x01
> @@ -848,7 +854,8 @@ TerminalRemoveConsoleDevVariable (
> /**
> Build termial device path according to terminal type.
>
> - @param TerminalType The terminal type is PC ANSI, VT100, VT100+ or VT-UTF8.
> + @param TerminalType The terminal type is PC ANSI, VT100, VT100+, VT-UTF8, TTY-Term,
> + Linux, XtermR6, VT400 and SCO.
> @param ParentDevicePath Parent device path.
> @param TerminalDevicePath Returned terminal device path, if building successfully.
>
> @@ -1209,6 +1216,28 @@ AnsiRawDataToUnicode (
> | F12 | 0x16 | | ESC @ | |
> +=========+======+===========+==========+==========+
>
> +Putty function key map:
> + +=========+======+===========+=============+=============+=============+=========+
> + | | EFI | | | | | |
> + | | Scan | | | Normal | | |
> + | KEY | Code | VT100+ | Xterm R6 | VT400 | Linux | SCO |
> + +=========+======+===========+=============+=============+=============+=========+
> + | F1 | 0x0B | ESC O P | ESC O P | ESC [ 1 1 ~ | ESC [ [ A | ESC [ M |
> + | F2 | 0x0C | ESC O Q | ESC O Q | ESC [ 1 2 ~ | ESC [ [ B | ESC [ N |
> + | F3 | 0x0D | ESC O R | ESC O R | ESC [ 1 3 ~ | ESC [ [ C | ESC [ O |
> + | F4 | 0x0E | ESC O S | ESC O S | ESC [ 1 4 ~ | ESC [ [ D | ESC [ P |
> + | F5 | 0x0F | ESC O T | ESC [ 1 5 ~ | ESC [ 1 5 ~ | ESC [ [ E | ESC [ Q |
> + | F6 | 0x10 | ESC O U | ESC [ 1 7 ~ | ESC [ 1 7 ~ | ESC [ 1 7 ~ | ESC [ R |
> + | F7 | 0x11 | ESC O V | ESC [ 1 8 ~ | ESC [ 1 8 ~ | ESC [ 1 8 ~ | ESC [ S |
> + | F8 | 0x12 | ESC O W | ESC [ 1 9 ~ | ESC [ 1 9 ~ | ESC [ 1 9 ~ | ESC [ T |
> + | F9 | 0x13 | ESC O X | ESC [ 2 0 ~ | ESC [ 2 0 ~ | ESC [ 2 0 ~ | ESC [ U |
> + | F10 | 0x14 | ESC O Y | ESC [ 2 1 ~ | ESC [ 2 1 ~ | ESC [ 2 1 ~ | ESC [ V |
> + | Escape | 0x17 | ESC | ESC | ESC | ESC | ESC |
> + | F11 | 0x15 | ESC O Z | ESC [ 2 3 ~ | ESC [ 2 3 ~ | ESC [ 2 3 ~ | ESC [ W |
> + | F12 | 0x16 | ESC O [ | ESC [ 2 4 ~ | ESC [ 2 4 ~ | ESC [ 2 4 ~ | ESC [ X |
> + +=========+======+===========+=============+=============+=============+=========+
> +
> +
> Special Mappings
> ================
> ESC R ESC r ESC R = Reset System
> diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
> b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
> index 4ede416774..ac31f27984 100644
> --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
> +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
> @@ -2,7 +2,7 @@
> Implementation for EFI_SIMPLE_TEXT_INPUT_PROTOCOL protocol.
>
> (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
> -Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
> Copyright (C) 2016 Silicon Graphics, Inc. All rights reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -453,6 +453,10 @@ TranslateRawDataToEfiKey (
> case TerminalTypeVt100:
> case TerminalTypeVt100Plus:
> case TerminalTypeTtyTerm:
> + case TerminalTypeLinux:
> + case TerminalTypeXtermR6:
> + case TerminalTypeVt400:
> + case TerminalTypeSCO:
> AnsiRawDataToUnicode (TerminalDevice);
> UnicodeToEfiKey (TerminalDevice);
> break;
> @@ -1319,6 +1323,27 @@ UnicodeToEfiKeyFlushState (
> | F12 | 0x16 | | ESC @ | |
> +=========+======+===========+==========+==========+
>
> +Putty function key map:
> + +=========+======+===========+=============+=============+=============+=========+
> + | | EFI | | | | | |
> + | | Scan | | | Normal | | |
> + | KEY | Code | VT100+ | Xterm R6 | VT400 | Linux | SCO |
> + +=========+======+===========+=============+=============+=============+=========+
> + | F1 | 0x0B | ESC O P | ESC O P | ESC [ 1 1 ~ | ESC [ [ A | ESC [ M |
> + | F2 | 0x0C | ESC O Q | ESC O Q | ESC [ 1 2 ~ | ESC [ [ B | ESC [ N |
> + | F3 | 0x0D | ESC O R | ESC O R | ESC [ 1 3 ~ | ESC [ [ C | ESC [ O |
> + | F4 | 0x0E | ESC O S | ESC O S | ESC [ 1 4 ~ | ESC [ [ D | ESC [ P |
> + | F5 | 0x0F | ESC O T | ESC [ 1 5 ~ | ESC [ 1 5 ~ | ESC [ [ E | ESC [ Q |
> + | F6 | 0x10 | ESC O U | ESC [ 1 7 ~ | ESC [ 1 7 ~ | ESC [ 1 7 ~ | ESC [ R |
> + | F7 | 0x11 | ESC O V | ESC [ 1 8 ~ | ESC [ 1 8 ~ | ESC [ 1 8 ~ | ESC [ S |
> + | F8 | 0x12 | ESC O W | ESC [ 1 9 ~ | ESC [ 1 9 ~ | ESC [ 1 9 ~ | ESC [ T |
> + | F9 | 0x13 | ESC O X | ESC [ 2 0 ~ | ESC [ 2 0 ~ | ESC [ 2 0 ~ | ESC [ U |
> + | F10 | 0x14 | ESC O Y | ESC [ 2 1 ~ | ESC [ 2 1 ~ | ESC [ 2 1 ~ | ESC [ V |
> + | Escape | 0x17 | ESC | ESC | ESC | ESC | ESC |
> + | F11 | 0x15 | ESC O Z | ESC [ 2 3 ~ | ESC [ 2 3 ~ | ESC [ 2 3 ~ | ESC [ W |
> + | F12 | 0x16 | ESC O [ | ESC [ 2 4 ~ | ESC [ 2 4 ~ | ESC [ 2 4 ~ | ESC [ X |
> + +=========+======+===========+=============+=============+=============+=========+
> +
> Special Mappings
> ================
> ESC R ESC r ESC R = Reset System
> @@ -1378,7 +1403,9 @@ UnicodeToEfiKey (
> }
>
> if (UnicodeChar == 'O' && (TerminalDevice->TerminalType == TerminalTypeVt100 ||
> - TerminalDevice->TerminalType == TerminalTypeTtyTerm)) {
> + TerminalDevice->TerminalType == TerminalTypeTtyTerm ||
> + TerminalDevice->TerminalType == TerminalTypeXtermR6 ||
> + TerminalDevice->TerminalType == TerminalTypeVt100Plus)) {
> TerminalDevice->InputState |= INPUT_STATE_O;
> TerminalDevice->ResetState = RESET_STATE_DEFAULT;
> continue;
> @@ -1548,6 +1575,60 @@ UnicodeToEfiKey (
> Key.ScanCode = SCAN_END;
> break;
> }
> + } else if (TerminalDevice->TerminalType == TerminalTypeVt100Plus) {
> + switch (UnicodeChar) {
> + case 'P':
> + Key.ScanCode = SCAN_F1;
> + break;
> + case 'Q':
> + Key.ScanCode = SCAN_F2;
> + break;
> + case 'R':
> + Key.ScanCode = SCAN_F3;
> + break;
> + case 'S':
> + Key.ScanCode = SCAN_F4;
> + break;
> + case 'T':
> + Key.ScanCode = SCAN_F5;
> + break;
> + case 'U':
> + Key.ScanCode = SCAN_F6;
> + break;
> + case 'V':
> + Key.ScanCode = SCAN_F7;
> + break;
> + case 'W':
> + Key.ScanCode = SCAN_F8;
> + break;
> + case 'X':
> + Key.ScanCode = SCAN_F9;
> + break;
> + case 'Y':
> + Key.ScanCode = SCAN_F10;
> + break;
> + case 'Z':
> + Key.ScanCode = SCAN_F11;
> + break;
> + case '[':
> + Key.ScanCode = SCAN_F12;
> + break;
> + }
> + } else if (TerminalDevice->TerminalType == TerminalTypeXtermR6) {
> + switch (UnicodeChar) {
> + case 'P':
> + Key.ScanCode = SCAN_F1;
> + break;
> + case 'Q':
> + Key.ScanCode = SCAN_F2;
> + break;
> + case 'R':
> + Key.ScanCode = SCAN_F3;
> + break;
> + case 'S':
> + Key.ScanCode = SCAN_F4;
> + break;
> + }
> }
>
> if (Key.ScanCode != SCAN_NULL) {
> @@ -1564,15 +1645,34 @@ UnicodeToEfiKey (
>
> case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET:
>
> + if (UnicodeChar == '1' && (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||
> + TerminalDevice->TerminalType == TerminalTypeVt400 ||
> + TerminalDevice->TerminalType == TerminalTypeLinux)) {
> + TerminalDevice->InputState |= INPUT_STATE_1;
> + continue;
> + }
> +
> + if (UnicodeChar == '2' && (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||
> + TerminalDevice->TerminalType == TerminalTypeVt400 ||
> + TerminalDevice->TerminalType == TerminalTypeLinux)) {
> + TerminalDevice->InputState |= INPUT_STATE_2;
> + continue;
> + }
> +
> + if (UnicodeChar == LEFTOPENBRACKET && TerminalDevice->TerminalType == TerminalTypeLinux) {
> + TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET_2ND;
> + continue;
> + }
> +
> TerminalDevice->ResetState = RESET_STATE_DEFAULT;
>
> Key.ScanCode = SCAN_NULL;
>
> if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||
> TerminalDevice->TerminalType == TerminalTypeVt100 ||
> - TerminalDevice->TerminalType == TerminalTypeVt100Plus ||
> - TerminalDevice->TerminalType == TerminalTypeVtUtf8 ||
> - TerminalDevice->TerminalType == TerminalTypeTtyTerm) {
> + TerminalDevice->TerminalType == TerminalTypeVtUtf8 ||
> + TerminalDevice->TerminalType == TerminalTypeTtyTerm ||
> + TerminalDevice->TerminalType == TerminalTypeSCO) {
> switch (UnicodeChar) {
> case 'A':
> Key.ScanCode = SCAN_UP;
> @@ -1614,12 +1714,15 @@ UnicodeToEfiKey (
> case 'X':
> if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {
> Key.ScanCode = SCAN_DELETE;
> + } else if (TerminalDevice->TerminalType == TerminalTypeSCO) {
> + Key.ScanCode = SCAN_F12;
> }
> break;
> case 'P':
> if (TerminalDevice->TerminalType == TerminalTypeVt100) {
> Key.ScanCode = SCAN_DELETE;
> - } else if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {
> + } else if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||
> + TerminalDevice->TerminalType == TerminalTypeSCO) {
> Key.ScanCode = SCAN_F4;
> }
> break;
> @@ -1629,7 +1732,8 @@ UnicodeToEfiKey (
> }
> break;
> case 'V':
> - if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {
> + if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||
> + TerminalDevice->TerminalType == TerminalTypeSCO) {
> Key.ScanCode = SCAN_F10;
> }
> break;
> @@ -1644,7 +1748,8 @@ UnicodeToEfiKey (
> }
> break;
> case 'U':
> - if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {
> + if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||
> + TerminalDevice->TerminalType == TerminalTypeSCO) {
> Key.ScanCode = SCAN_F9;
> }
> break;
> @@ -1654,40 +1759,52 @@ UnicodeToEfiKey (
> }
> break;
> case 'M':
> - if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {
> + if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||
> + TerminalDevice->TerminalType == TerminalTypeSCO) {
> Key.ScanCode = SCAN_F1;
> }
> break;
> case 'N':
> - if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {
> + if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||
> + TerminalDevice->TerminalType == TerminalTypeSCO) {
> Key.ScanCode = SCAN_F2;
> }
> break;
> case 'O':
> - if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {
> + if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||
> + TerminalDevice->TerminalType == TerminalTypeSCO) {
> Key.ScanCode = SCAN_F3;
> }
> break;
> case 'Q':
> - if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {
> + if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||
> + TerminalDevice->TerminalType == TerminalTypeSCO) {
> Key.ScanCode = SCAN_F5;
> }
> break;
> case 'R':
> - if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {
> + if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||
> + TerminalDevice->TerminalType == TerminalTypeSCO) {
> Key.ScanCode = SCAN_F6;
> }
> break;
> case 'S':
> - if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {
> + if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||
> + TerminalDevice->TerminalType == TerminalTypeSCO) {
> Key.ScanCode = SCAN_F7;
> }
> break;
> case 'T':
> - if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {
> + if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||
> + TerminalDevice->TerminalType == TerminalTypeSCO) {
> Key.ScanCode = SCAN_F8;
> }
> break;
> + case 'W':
> + if (TerminalDevice->TerminalType == TerminalTypeSCO) {
> + Key.ScanCode = SCAN_F11;
> + }
> + break;
> default :
> break;
> }
> @@ -1704,10 +1821,105 @@ UnicodeToEfiKey (
> UnicodeChar <= '9') {
> TerminalDevice->TtyEscapeStr[0] = UnicodeChar;
> TerminalDevice->TtyEscapeIndex = 1;
> - TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET_2;
> + TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET_TTY;
> + continue;
> + }
> +
> + if (Key.ScanCode != SCAN_NULL) {
> + Key.UnicodeChar = 0;
> + EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);
> + TerminalDevice->InputState = INPUT_STATE_DEFAULT;
> + UnicodeToEfiKeyFlushState (TerminalDevice);
> + continue;
> + }
> +
> + UnicodeToEfiKeyFlushState (TerminalDevice);
> +
> + break;
> +
> + case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_1:
> +
> + TerminalDevice->ResetState = RESET_STATE_DEFAULT;
> +
> + Key.ScanCode = SCAN_NULL;
> +
> + if (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||
> + TerminalDevice->TerminalType == TerminalTypeVt400 ||
> + TerminalDevice->TerminalType == TerminalTypeLinux) {
> + switch (UnicodeChar) {
> + case '1':
> + if (TerminalDevice->TerminalType == TerminalTypeVt400) {
> + Key.ScanCode = SCAN_F1;
> + }
> + break;
> + case '2':
> + if (TerminalDevice->TerminalType == TerminalTypeVt400) {
> + Key.ScanCode = SCAN_F2;
> + }
> + break;
> + case '3':
> + if (TerminalDevice->TerminalType == TerminalTypeVt400) {
> + Key.ScanCode = SCAN_F3;
> + }
> + break;
> + case '4':
> + if (TerminalDevice->TerminalType == TerminalTypeVt400) {
> + Key.ScanCode = SCAN_F4;
> + }
> + break;
> + case '5':
> + if (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||
> + TerminalDevice->TerminalType == TerminalTypeVt400) {
> + Key.ScanCode = SCAN_F5;
> + }
> + break;
> + case '7':
> + Key.ScanCode = SCAN_F6;
> + break;
> + case '8':
> + Key.ScanCode = SCAN_F7;
> + break;
> + case '9':
> + Key.ScanCode = SCAN_F8;
> + break;
> + }
> + }
> +
> + if (Key.ScanCode != SCAN_NULL) {
> + Key.UnicodeChar = 0;
> + EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);
> + TerminalDevice->InputState = INPUT_STATE_DEFAULT;
> + UnicodeToEfiKeyFlushState (TerminalDevice);
> continue;
> }
>
> + UnicodeToEfiKeyFlushState (TerminalDevice);
> +
> + break;
> +
> + case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_2:
> +
> + TerminalDevice->InputState = INPUT_STATE_DEFAULT;
> + Key.ScanCode = SCAN_NULL;
> + if (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||
> + TerminalDevice->TerminalType == TerminalTypeVt400 ||
> + TerminalDevice->TerminalType == TerminalTypeLinux) {
> + switch (UnicodeChar) {
> + case '0':
> + Key.ScanCode = SCAN_F9;
> + break;
> + case '1':
> + Key.ScanCode = SCAN_F10;
> + break;
> + case '3':
> + Key.ScanCode = SCAN_F11;
> + break;
> + case '4':
> + Key.ScanCode = SCAN_F12;
> + break;
> + }
> + }
> +
> if (Key.ScanCode != SCAN_NULL) {
> Key.UnicodeChar = 0;
> EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);
> @@ -1720,8 +1932,44 @@ UnicodeToEfiKey (
>
> break;
>
> + case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_LEFTOPENBRACKET_2ND:
> +
> + TerminalDevice->InputState = INPUT_STATE_DEFAULT;
> + Key.ScanCode = SCAN_NULL;
> +
> + if (TerminalDevice->TerminalType == TerminalTypeLinux) {
> + switch (UnicodeChar) {
> + case 'A':
> + Key.ScanCode = SCAN_F1;
> + break;
> + case 'B':
> + Key.ScanCode = SCAN_F2;
> + break;
> + case 'C':
> + Key.ScanCode = SCAN_F3;
> + break;
> + case 'D':
> + Key.ScanCode = SCAN_F4;
> + break;
> + case 'E':
> + Key.ScanCode = SCAN_F5;
> + break;
> + }
> + }
> +
> + if (Key.ScanCode != SCAN_NULL) {
> + Key.UnicodeChar = 0;
> + EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);
> + TerminalDevice->InputState = INPUT_STATE_DEFAULT;
> + UnicodeToEfiKeyFlushState (TerminalDevice);
> + continue;
> + }
> +
> + UnicodeToEfiKeyFlushState (TerminalDevice);
> +
> + break;
>
> - case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_LEFTOPENBRACKET_2:
> + case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_LEFTOPENBRACKET_TTY:
> /*
> * Here we handle the VT220 escape codes that we accept. This
> * state is only used by the TTY terminal type.
> diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c
> b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c
> index 7ef655cca5..aae470e956 100644
> --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c
> +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c
> @@ -222,6 +222,10 @@ TerminalConOutOutputString (
> case TerminalTypeVt100:
> case TerminalTypeVt100Plus:
> case TerminalTypeTtyTerm:
> + case TerminalTypeLinux:
> + case TerminalTypeXtermR6:
> + case TerminalTypeVt400:
> + case TerminalTypeSCO:
>
> if (!TerminalIsValidTextGraphics (*WString, &GraphicChar, &AsciiChar)) {
> //
> diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
> b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
> index 24e164ef4d..b2a8aeba85 100644
> --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
> +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
> @@ -5,7 +5,7 @@
> # protocols based on Serial I/O protocol for serial devices including hotplug serial
> # devices.
> #
> -# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> +# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
> # SPDX-License-Identifier: BSD-2-Clause-Patent
> #
> #
> @@ -69,6 +69,10 @@
> gEfiVT100PlusGuid ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device
> Path
> gEfiPcAnsiGuid ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device
> Path
> gEfiTtyTermGuid ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device
> Path
> + gEdkiiLinuxTermGuid ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging
> Device Path
> + gEdkiiXtermR6Guid ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging
> Device Path
> + gEdkiiVT400Guid ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device
> Path
> + gEdkiiSCOTermGuid ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging
> Device Path
> gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID
>
> [Protocols]
> --
> 2.21.0.windows.1
next prev parent reply other threads:[~2019-09-23 2:36 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-18 5:33 [PATCH V3 0/3] MdeModulePkg/TerminalConsole: Extend the support terminal types Gao, Zhichao
2019-09-18 5:33 ` [PATCH V3 1/3] MdeModulePkg: Extend the support keyboard type of Terminal console Gao, Zhichao
2019-09-18 8:46 ` Laszlo Ersek
2019-09-19 1:54 ` [edk2-devel] " Wu, Hao A
2019-09-19 4:28 ` Gao, Zhichao
2019-09-19 5:11 ` Liming Gao
2019-09-18 5:33 ` [PATCH V3 2/3] MdeModulePkg/TerminalDxe: Extend the terminal console support types Gao, Zhichao
2019-09-23 2:36 ` Ni, Ray [this message]
2019-09-18 5:33 ` [PATCH V3 3/3] MdeModulePkg/BM_UI: Add the new terminal types to related menu Gao, Zhichao
2019-09-20 3:04 ` [edk2-devel] " Dandan Bi
2019-09-20 5:50 ` Gao, Zhichao
2019-09-19 1:57 ` [edk2-devel] [PATCH V3 0/3] MdeModulePkg/TerminalConsole: Extend the support terminal types Wu, Hao A
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=734D49CCEBEEF84792F5B80ED585239D5C2EBEED@SHSMSX104.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox