mirror of https://github.com/acidanthera/audk.git
Add "TtyTerm" terminal type to TerminalDxe
This patch a adds new terminal type, TtyTerm, to TerminalDxe. This terminal type provides a place to add support for various *nix terminals that don't behave like standard VT terminals. The goal is to 'just work' with as many terminals as possible, rather than properly emulating any one specific terminal. Signed-off-by: Roy Franz <roy.franz@linaro.org> Contributed-under: TianoCore Contribution Agreement 1.0 Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17895 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
4dc0d578b8
commit
6e3227c88c
|
@ -0,0 +1,25 @@
|
||||||
|
/** @file
|
||||||
|
GUID definition for TtyTerm terminal type. The TtyTerm terminal aims to
|
||||||
|
provide support for modern *nix terminals.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (c) 2015 Linaro Ltd.
|
||||||
|
This program and the accompanying materials are licensed and made
|
||||||
|
available under the terms and conditions of the BSD License that
|
||||||
|
accompanies this distribution. The full text of the license may be found
|
||||||
|
at http://opensource.org/licenses/bsd-license.php.
|
||||||
|
|
||||||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef __TTYTERM_H__
|
||||||
|
#define __TTYTERM_H__
|
||||||
|
|
||||||
|
#define EFI_TTY_TERM_GUID \
|
||||||
|
{0x7d916d80, 0x5bb1, 0x458c, {0xa4, 0x8f, 0xe2, 0x5f, 0xdd, 0x51, 0xef, 0x94 } }
|
||||||
|
|
||||||
|
extern EFI_GUID gEfiTtyTermGuid;
|
||||||
|
|
||||||
|
#endif
|
|
@ -308,6 +308,9 @@
|
||||||
gLzmaCustomDecompressGuid = { 0xEE4E5898, 0x3914, 0x4259, { 0x9D, 0x6E, 0xDC, 0x7B, 0xD7, 0x94, 0x03, 0xCF }}
|
gLzmaCustomDecompressGuid = { 0xEE4E5898, 0x3914, 0x4259, { 0x9D, 0x6E, 0xDC, 0x7B, 0xD7, 0x94, 0x03, 0xCF }}
|
||||||
gLzmaF86CustomDecompressGuid = { 0xD42AE6BD, 0x1352, 0x4bfb, { 0x90, 0x9A, 0xCA, 0x72, 0xA6, 0xEA, 0xE8, 0x89 }}
|
gLzmaF86CustomDecompressGuid = { 0xD42AE6BD, 0x1352, 0x4bfb, { 0x90, 0x9A, 0xCA, 0x72, 0xA6, 0xEA, 0xE8, 0x89 }}
|
||||||
|
|
||||||
|
## Include/Guid/TtyTerm.h
|
||||||
|
gEfiTtyTermGuid = { 0x7d916d80, 0x5bb1, 0x458c, {0xa4, 0x8f, 0xe2, 0x5f, 0xdd, 0x51, 0xef, 0x94 }}
|
||||||
|
|
||||||
[Ppis]
|
[Ppis]
|
||||||
## Include/Ppi/AtaController.h
|
## Include/Ppi/AtaController.h
|
||||||
gPeiAtaControllerPpiGuid = { 0xa45e60d1, 0xc719, 0x44aa, { 0xb0, 0x7a, 0xaa, 0x77, 0x7f, 0x85, 0x90, 0x6d }}
|
gPeiAtaControllerPpiGuid = { 0xa45e60d1, 0xc719, 0x44aa, { 0xb0, 0x7a, 0xaa, 0x77, 0x7f, 0x85, 0x90, 0x6d }}
|
||||||
|
|
|
@ -33,7 +33,8 @@ EFI_GUID *gTerminalType[] = {
|
||||||
&gEfiPcAnsiGuid,
|
&gEfiPcAnsiGuid,
|
||||||
&gEfiVT100Guid,
|
&gEfiVT100Guid,
|
||||||
&gEfiVT100PlusGuid,
|
&gEfiVT100PlusGuid,
|
||||||
&gEfiVTUTF8Guid
|
&gEfiVTUTF8Guid,
|
||||||
|
&gEfiTtyTermGuid
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -152,12 +153,13 @@ TerminalDriverBindingSupported (
|
||||||
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// only supports PC ANSI, VT100, VT100+ and VT-UTF8 terminal types
|
// only supports PC ANSI, VT100, VT100+, VT-UTF8, and TtyTerm terminal types
|
||||||
//
|
//
|
||||||
if (!CompareGuid (&Node->Guid, &gEfiPcAnsiGuid) &&
|
if (!CompareGuid (&Node->Guid, &gEfiPcAnsiGuid) &&
|
||||||
!CompareGuid (&Node->Guid, &gEfiVT100Guid) &&
|
!CompareGuid (&Node->Guid, &gEfiVT100Guid) &&
|
||||||
!CompareGuid (&Node->Guid, &gEfiVT100PlusGuid) &&
|
!CompareGuid (&Node->Guid, &gEfiVT100PlusGuid) &&
|
||||||
!CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) {
|
!CompareGuid (&Node->Guid, &gEfiVTUTF8Guid) &&
|
||||||
|
!CompareGuid (&Node->Guid, &gEfiTtyTermGuid)) {
|
||||||
|
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
@ -275,6 +277,10 @@ BuildTerminalDevpath (
|
||||||
|
|
||||||
TerminalType = VTUTF8TYPE;
|
TerminalType = VTUTF8TYPE;
|
||||||
|
|
||||||
|
} else if (CompareGuid (&Node->Guid, &gEfiTtyTermGuid)) {
|
||||||
|
|
||||||
|
TerminalType = TTYTERMTYPE;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -708,9 +714,9 @@ TerminalDriverBindingStart (
|
||||||
|
|
||||||
TerminalType = PcdGet8 (PcdDefaultTerminalType);
|
TerminalType = PcdGet8 (PcdDefaultTerminalType);
|
||||||
//
|
//
|
||||||
// Must be between PCANSITYPE (0) and VTUTF8TYPE (3)
|
// Must be between PCANSITYPE (0) and TTYTERMTYPE (4)
|
||||||
//
|
//
|
||||||
ASSERT (TerminalType <= VTUTF8TYPE);
|
ASSERT (TerminalType <= TTYTERMTYPE);
|
||||||
|
|
||||||
CopyMem (&DefaultNode->Guid, gTerminalType[TerminalType], sizeof (EFI_GUID));
|
CopyMem (&DefaultNode->Guid, gTerminalType[TerminalType], sizeof (EFI_GUID));
|
||||||
RemainingDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) DefaultNode;
|
RemainingDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) DefaultNode;
|
||||||
|
@ -728,6 +734,8 @@ TerminalDriverBindingStart (
|
||||||
TerminalType = VT100PLUSTYPE;
|
TerminalType = VT100PLUSTYPE;
|
||||||
} else if (CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) {
|
} else if (CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) {
|
||||||
TerminalType = VTUTF8TYPE;
|
TerminalType = VTUTF8TYPE;
|
||||||
|
} else if (CompareGuid (&Node->Guid, &gEfiTtyTermGuid)) {
|
||||||
|
TerminalType = TTYTERMTYPE;
|
||||||
} else {
|
} else {
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
|
@ -926,6 +934,24 @@ TerminalDriverBindingStart (
|
||||||
);
|
);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TTYTERMTYPE:
|
||||||
|
AddUnicodeString2 (
|
||||||
|
"eng",
|
||||||
|
gTerminalComponentName.SupportedLanguages,
|
||||||
|
&TerminalDevice->ControllerNameTable,
|
||||||
|
(CHAR16 *)L"Tty Terminal Serial Console",
|
||||||
|
TRUE
|
||||||
|
);
|
||||||
|
AddUnicodeString2 (
|
||||||
|
"en",
|
||||||
|
gTerminalComponentName2.SupportedLanguages,
|
||||||
|
&TerminalDevice->ControllerNameTable,
|
||||||
|
(CHAR16 *)L"Tty Terminal Serial Console",
|
||||||
|
FALSE
|
||||||
|
);
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -1441,7 +1467,7 @@ TerminalUpdateConsoleDevVariable (
|
||||||
//
|
//
|
||||||
// Append terminal device path onto the variable.
|
// Append terminal device path onto the variable.
|
||||||
//
|
//
|
||||||
for (TerminalType = PCANSITYPE; TerminalType <= VTUTF8TYPE; TerminalType++) {
|
for (TerminalType = PCANSITYPE; TerminalType <= TTYTERMTYPE; TerminalType++) {
|
||||||
SetTerminalDevicePath (TerminalType, ParentDevicePath, &TempDevicePath);
|
SetTerminalDevicePath (TerminalType, ParentDevicePath, &TempDevicePath);
|
||||||
NewVariable = AppendDevicePathInstance (Variable, TempDevicePath);
|
NewVariable = AppendDevicePathInstance (Variable, TempDevicePath);
|
||||||
ASSERT (NewVariable != NULL);
|
ASSERT (NewVariable != NULL);
|
||||||
|
@ -1554,7 +1580,7 @@ TerminalRemoveConsoleDevVariable (
|
||||||
// Loop through all the terminal types that this driver supports
|
// Loop through all the terminal types that this driver supports
|
||||||
//
|
//
|
||||||
Match = FALSE;
|
Match = FALSE;
|
||||||
for (TerminalType = PCANSITYPE; TerminalType <= VTUTF8TYPE; TerminalType++) {
|
for (TerminalType = PCANSITYPE; TerminalType <= TTYTERMTYPE; TerminalType++) {
|
||||||
|
|
||||||
SetTerminalDevicePath (TerminalType, ParentDevicePath, &TempDevicePath);
|
SetTerminalDevicePath (TerminalType, ParentDevicePath, &TempDevicePath);
|
||||||
|
|
||||||
|
@ -1658,6 +1684,10 @@ SetTerminalDevicePath (
|
||||||
CopyGuid (&Node.Guid, &gEfiVTUTF8Guid);
|
CopyGuid (&Node.Guid, &gEfiVTUTF8Guid);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TTYTERMTYPE:
|
||||||
|
CopyGuid (&Node.Guid, &gEfiTtyTermGuid);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
|
||||||
#include <Guid/GlobalVariable.h>
|
#include <Guid/GlobalVariable.h>
|
||||||
#include <Guid/PcAnsi.h>
|
#include <Guid/PcAnsi.h>
|
||||||
|
#include <Guid/TtyTerm.h>
|
||||||
#include <Guid/StatusCodeDataTypeVariable.h>
|
#include <Guid/StatusCodeDataTypeVariable.h>
|
||||||
|
|
||||||
#include <Protocol/SimpleTextOut.h>
|
#include <Protocol/SimpleTextOut.h>
|
||||||
|
@ -136,6 +137,7 @@ typedef union {
|
||||||
#define VT100TYPE 1
|
#define VT100TYPE 1
|
||||||
#define VT100PLUSTYPE 2
|
#define VT100PLUSTYPE 2
|
||||||
#define VTUTF8TYPE 3
|
#define VTUTF8TYPE 3
|
||||||
|
#define TTYTERMTYPE 4
|
||||||
|
|
||||||
#define LEFTOPENBRACKET 0x5b // '['
|
#define LEFTOPENBRACKET 0x5b // '['
|
||||||
#define ACAP 0x41
|
#define ACAP 0x41
|
||||||
|
|
|
@ -454,6 +454,7 @@ TranslateRawDataToEfiKey (
|
||||||
case PCANSITYPE:
|
case PCANSITYPE:
|
||||||
case VT100TYPE:
|
case VT100TYPE:
|
||||||
case VT100PLUSTYPE:
|
case VT100PLUSTYPE:
|
||||||
|
case TTYTERMTYPE:
|
||||||
AnsiRawDataToUnicode (TerminalDevice);
|
AnsiRawDataToUnicode (TerminalDevice);
|
||||||
UnicodeToEfiKey (TerminalDevice);
|
UnicodeToEfiKey (TerminalDevice);
|
||||||
break;
|
break;
|
||||||
|
@ -1393,7 +1394,8 @@ UnicodeToEfiKey (
|
||||||
if (TerminalDevice->TerminalType == PCANSITYPE ||
|
if (TerminalDevice->TerminalType == PCANSITYPE ||
|
||||||
TerminalDevice->TerminalType == VT100TYPE ||
|
TerminalDevice->TerminalType == VT100TYPE ||
|
||||||
TerminalDevice->TerminalType == VT100PLUSTYPE ||
|
TerminalDevice->TerminalType == VT100PLUSTYPE ||
|
||||||
TerminalDevice->TerminalType == VTUTF8TYPE) {
|
TerminalDevice->TerminalType == VTUTF8TYPE ||
|
||||||
|
TerminalDevice->TerminalType == TTYTERMTYPE) {
|
||||||
switch (UnicodeChar) {
|
switch (UnicodeChar) {
|
||||||
case 'A':
|
case 'A':
|
||||||
Key.ScanCode = SCAN_UP;
|
Key.ScanCode = SCAN_UP;
|
||||||
|
|
|
@ -223,6 +223,7 @@ TerminalConOutOutputString (
|
||||||
case PCANSITYPE:
|
case PCANSITYPE:
|
||||||
case VT100TYPE:
|
case VT100TYPE:
|
||||||
case VT100PLUSTYPE:
|
case VT100PLUSTYPE:
|
||||||
|
case TTYTERMTYPE:
|
||||||
|
|
||||||
if (!TerminalIsValidTextGraphics (*WString, &GraphicChar, &AsciiChar)) {
|
if (!TerminalIsValidTextGraphics (*WString, &GraphicChar, &AsciiChar)) {
|
||||||
//
|
//
|
||||||
|
@ -371,6 +372,7 @@ TerminalConOutTestString (
|
||||||
case PCANSITYPE:
|
case PCANSITYPE:
|
||||||
case VT100TYPE:
|
case VT100TYPE:
|
||||||
case VT100PLUSTYPE:
|
case VT100PLUSTYPE:
|
||||||
|
case TTYTERMTYPE:
|
||||||
Status = AnsiTestString (TerminalDevice, WString);
|
Status = AnsiTestString (TerminalDevice, WString);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,7 @@
|
||||||
gEfiVT100Guid ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device Path
|
gEfiVT100Guid ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device Path
|
||||||
gEfiVT100PlusGuid ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device Path
|
gEfiVT100PlusGuid ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device Path
|
||||||
gEfiPcAnsiGuid ## 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
|
||||||
gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID
|
gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
|
|
Loading…
Reference in New Issue