\r
#include "Terminal.h"\r
\r
-\r
/**\r
Reads the next keystroke from the input device. The WaitForKey Event can\r
be used to test for existence of a keystroke via WaitForEvent () call.\r
**/\r
EFI_STATUS\r
ReadKeyStrokeWorker (\r
- IN TERMINAL_DEV *TerminalDevice,\r
- OUT EFI_KEY_DATA *KeyData\r
+ IN TERMINAL_DEV *TerminalDevice,\r
+ OUT EFI_KEY_DATA *KeyData\r
)\r
{\r
if (KeyData == NULL) {\r
}\r
\r
return EFI_SUCCESS;\r
-\r
}\r
\r
/**\r
//\r
// Make all the internal buffer empty for keys\r
//\r
- TerminalDevice->RawFiFo->Head = TerminalDevice->RawFiFo->Tail;\r
- TerminalDevice->UnicodeFiFo->Head = TerminalDevice->UnicodeFiFo->Tail;\r
- TerminalDevice->EfiKeyFiFo->Head = TerminalDevice->EfiKeyFiFo->Tail;\r
+ TerminalDevice->RawFiFo->Head = TerminalDevice->RawFiFo->Tail;\r
+ TerminalDevice->UnicodeFiFo->Head = TerminalDevice->UnicodeFiFo->Tail;\r
+ TerminalDevice->EfiKeyFiFo->Head = TerminalDevice->EfiKeyFiFo->Tail;\r
TerminalDevice->EfiKeyFiFoForNotify->Head = TerminalDevice->EfiKeyFiFoForNotify->Tail;\r
\r
if (EFI_ERROR (Status)) {\r
//\r
// get TERMINAL_DEV from "This" parameter.\r
//\r
- TerminalDevice = TERMINAL_CON_IN_DEV_FROM_THIS (This);\r
+ TerminalDevice = TERMINAL_CON_IN_DEV_FROM_THIS (This);\r
\r
Status = ReadKeyStrokeWorker (TerminalDevice, &KeyData);\r
if (EFI_ERROR (Status)) {\r
CopyMem (Key, &KeyData.Key, sizeof (EFI_INPUT_KEY));\r
\r
return EFI_SUCCESS;\r
-\r
}\r
\r
/**\r
ASSERT (RegsiteredData != NULL && InputData != NULL);\r
\r
if ((RegsiteredData->Key.ScanCode != InputData->Key.ScanCode) ||\r
- (RegsiteredData->Key.UnicodeChar != InputData->Key.UnicodeChar)) {\r
+ (RegsiteredData->Key.UnicodeChar != InputData->Key.UnicodeChar))\r
+ {\r
return FALSE;\r
}\r
\r
return TRUE;\r
}\r
\r
-\r
-\r
/**\r
Event notification function for EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.WaitForKeyEx event\r
Signal the event if there is key available\r
VOID\r
EFIAPI\r
TerminalConInWaitForKeyEx (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
TerminalConInWaitForKey (Event, Context);\r
IN BOOLEAN ExtendedVerification\r
)\r
{\r
- EFI_STATUS Status;\r
- TERMINAL_DEV *TerminalDevice;\r
+ EFI_STATUS Status;\r
+ TERMINAL_DEV *TerminalDevice;\r
\r
TerminalDevice = TERMINAL_CON_IN_EX_DEV_FROM_THIS (This);\r
\r
}\r
\r
return EFI_SUCCESS;\r
-\r
}\r
\r
-\r
/**\r
Reads the next keystroke from the input device. The WaitForKey Event can\r
be used to test for existence of a keystroke via WaitForEvent () call.\r
EFI_STATUS\r
EFIAPI\r
TerminalConInReadKeyStrokeEx (\r
- IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
- OUT EFI_KEY_DATA *KeyData\r
+ IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
+ OUT EFI_KEY_DATA *KeyData\r
)\r
{\r
- TERMINAL_DEV *TerminalDevice;\r
+ TERMINAL_DEV *TerminalDevice;\r
\r
if (KeyData == NULL) {\r
return EFI_INVALID_PARAMETER;\r
TerminalDevice = TERMINAL_CON_IN_EX_DEV_FROM_THIS (This);\r
\r
return ReadKeyStrokeWorker (TerminalDevice, KeyData);\r
-\r
}\r
\r
-\r
/**\r
Set certain state for the input device.\r
\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Register a notification function for a particular keystroke for the input device.\r
\r
OUT VOID **NotifyHandle\r
)\r
{\r
- TERMINAL_DEV *TerminalDevice;\r
- TERMINAL_CONSOLE_IN_EX_NOTIFY *NewNotify;\r
- LIST_ENTRY *Link;\r
- LIST_ENTRY *NotifyList;\r
- TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
+ TERMINAL_DEV *TerminalDevice;\r
+ TERMINAL_CONSOLE_IN_EX_NOTIFY *NewNotify;\r
+ LIST_ENTRY *Link;\r
+ LIST_ENTRY *NotifyList;\r
+ TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
\r
- if (KeyData == NULL || NotifyHandle == NULL || KeyNotificationFunction == NULL) {\r
+ if ((KeyData == NULL) || (NotifyHandle == NULL) || (KeyNotificationFunction == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
// Return EFI_SUCCESS if the (KeyData, NotificationFunction) is already registered.\r
//\r
NotifyList = &TerminalDevice->NotifyList;\r
- for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList,Link); Link = GetNextNode (NotifyList,Link)) {\r
+ for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList, Link); Link = GetNextNode (NotifyList, Link)) {\r
CurrentNotify = CR (\r
Link,\r
TERMINAL_CONSOLE_IN_EX_NOTIFY,\r
//\r
// Allocate resource to save the notification function\r
//\r
- NewNotify = (TERMINAL_CONSOLE_IN_EX_NOTIFY *) AllocateZeroPool (sizeof (TERMINAL_CONSOLE_IN_EX_NOTIFY));\r
+ NewNotify = (TERMINAL_CONSOLE_IN_EX_NOTIFY *)AllocateZeroPool (sizeof (TERMINAL_CONSOLE_IN_EX_NOTIFY));\r
if (NewNotify == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
CopyMem (&NewNotify->KeyData, KeyData, sizeof (EFI_KEY_DATA));\r
InsertTailList (&TerminalDevice->NotifyList, &NewNotify->NotifyEntry);\r
\r
- *NotifyHandle = NewNotify;\r
+ *NotifyHandle = NewNotify;\r
\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Remove a registered notification function from a particular keystroke.\r
\r
IN VOID *NotificationHandle\r
)\r
{\r
- TERMINAL_DEV *TerminalDevice;\r
- LIST_ENTRY *Link;\r
- TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
- LIST_ENTRY *NotifyList;\r
+ TERMINAL_DEV *TerminalDevice;\r
+ LIST_ENTRY *Link;\r
+ TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
+ LIST_ENTRY *NotifyList;\r
\r
if (NotificationHandle == NULL) {\r
return EFI_INVALID_PARAMETER;\r
TerminalDevice = TERMINAL_CON_IN_EX_DEV_FROM_THIS (This);\r
\r
NotifyList = &TerminalDevice->NotifyList;\r
- for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList,Link); Link = GetNextNode (NotifyList,Link)) {\r
+ for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList, Link); Link = GetNextNode (NotifyList, Link)) {\r
CurrentNotify = CR (\r
Link,\r
TERMINAL_CONSOLE_IN_EX_NOTIFY,\r
**/\r
VOID\r
TranslateRawDataToEfiKey (\r
- IN TERMINAL_DEV *TerminalDevice\r
+ IN TERMINAL_DEV *TerminalDevice\r
)\r
{\r
switch (TerminalDevice->TerminalType) {\r
+ case TerminalTypePcAnsi:\r
+ case TerminalTypeVt100:\r
+ case TerminalTypeVt100Plus:\r
+ case TerminalTypeTtyTerm:\r
+ case TerminalTypeLinux:\r
+ case TerminalTypeXtermR6:\r
+ case TerminalTypeVt400:\r
+ case TerminalTypeSCO:\r
+ AnsiRawDataToUnicode (TerminalDevice);\r
+ UnicodeToEfiKey (TerminalDevice);\r
+ break;\r
\r
- case TerminalTypePcAnsi:\r
- case TerminalTypeVt100:\r
- case TerminalTypeVt100Plus:\r
- case TerminalTypeTtyTerm:\r
- case TerminalTypeLinux:\r
- case TerminalTypeXtermR6:\r
- case TerminalTypeVt400:\r
- case TerminalTypeSCO:\r
- AnsiRawDataToUnicode (TerminalDevice);\r
- UnicodeToEfiKey (TerminalDevice);\r
- break;\r
-\r
- case TerminalTypeVtUtf8:\r
- //\r
- // Process all the raw data in the RawFIFO,\r
- // put the processed key into UnicodeFIFO.\r
- //\r
- VTUTF8RawDataToUnicode (TerminalDevice);\r
+ case TerminalTypeVtUtf8:\r
+ //\r
+ // Process all the raw data in the RawFIFO,\r
+ // put the processed key into UnicodeFIFO.\r
+ //\r
+ VTUTF8RawDataToUnicode (TerminalDevice);\r
\r
- //\r
- // Translate all the Unicode data in the UnicodeFIFO to Efi key,\r
- // then put into EfiKeyFIFO.\r
- //\r
- UnicodeToEfiKey (TerminalDevice);\r
+ //\r
+ // Translate all the Unicode data in the UnicodeFIFO to Efi key,\r
+ // then put into EfiKeyFIFO.\r
+ //\r
+ UnicodeToEfiKey (TerminalDevice);\r
\r
- break;\r
+ break;\r
}\r
}\r
\r
VOID\r
EFIAPI\r
TerminalConInWaitForKey (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
//\r
// Someone is waiting on the keystroke event, if there's\r
// a key pending, signal the event\r
//\r
- if (!IsEfiKeyFiFoEmpty ((TERMINAL_DEV *) Context)) {\r
-\r
+ if (!IsEfiKeyFiFoEmpty ((TERMINAL_DEV *)Context)) {\r
gBS->SignalEvent (Event);\r
}\r
}\r
VOID\r
EFIAPI\r
TerminalConInTimerHandler (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
EFI_STATUS Status;\r
EFI_SERIAL_IO_PROTOCOL *SerialIo;\r
UINTN SerialInTimeOut;\r
\r
- TerminalDevice = (TERMINAL_DEV *) Context;\r
+ TerminalDevice = (TERMINAL_DEV *)Context;\r
\r
- SerialIo = TerminalDevice->SerialIo;\r
+ SerialIo = TerminalDevice->SerialIo;\r
if (SerialIo == NULL) {\r
- return ;\r
+ return;\r
}\r
+\r
//\r
// if current timeout value for serial device is not identical with\r
// the value saved in TERMINAL_DEV structure, then recalculate the\r
//\r
Mode = SerialIo->Mode;\r
if (Mode->Timeout != TerminalDevice->SerialInTimeOut) {\r
-\r
SerialInTimeOut = 0;\r
if (Mode->BaudRate != 0) {\r
//\r
// According to BAUD rate to calculate the timeout value.\r
//\r
- SerialInTimeOut = (1 + Mode->DataBits + Mode->StopBits) * 2 * 1000000 / (UINTN) Mode->BaudRate;\r
+ SerialInTimeOut = (1 + Mode->DataBits + Mode->StopBits) * 2 * 1000000 / (UINTN)Mode->BaudRate;\r
}\r
\r
Status = SerialIo->SetAttributes (\r
- SerialIo,\r
- Mode->BaudRate,\r
- Mode->ReceiveFifoDepth,\r
- (UINT32) SerialInTimeOut,\r
- (EFI_PARITY_TYPE) (Mode->Parity),\r
- (UINT8) Mode->DataBits,\r
- (EFI_STOP_BITS_TYPE) (Mode->StopBits)\r
- );\r
+ SerialIo,\r
+ Mode->BaudRate,\r
+ Mode->ReceiveFifoDepth,\r
+ (UINT32)SerialInTimeOut,\r
+ (EFI_PARITY_TYPE)(Mode->Parity),\r
+ (UINT8)Mode->DataBits,\r
+ (EFI_STOP_BITS_TYPE)(Mode->StopBits)\r
+ );\r
\r
if (EFI_ERROR (Status)) {\r
TerminalDevice->SerialInTimeOut = 0;\r
TerminalDevice->SerialInTimeOut = SerialInTimeOut;\r
}\r
}\r
+\r
//\r
// Check whether serial buffer is empty.\r
// Skip the key transfer loop only if the SerialIo protocol instance\r
// and insert the byte stream into RawFIFO.\r
//\r
while (!IsRawFiFoFull (TerminalDevice)) {\r
-\r
Status = GetOneKeyFromSerial (TerminalDevice->SerialIo, &Input);\r
\r
if (EFI_ERROR (Status)) {\r
TerminalDevice->DevicePath\r
);\r
}\r
+\r
break;\r
}\r
\r
VOID\r
EFIAPI\r
KeyNotifyProcessHandler (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- BOOLEAN HasKey;\r
- TERMINAL_DEV *TerminalDevice;\r
- EFI_INPUT_KEY Key;\r
- EFI_KEY_DATA KeyData;\r
- LIST_ENTRY *Link;\r
- LIST_ENTRY *NotifyList;\r
- TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
- EFI_TPL OldTpl;\r
+ BOOLEAN HasKey;\r
+ TERMINAL_DEV *TerminalDevice;\r
+ EFI_INPUT_KEY Key;\r
+ EFI_KEY_DATA KeyData;\r
+ LIST_ENTRY *Link;\r
+ LIST_ENTRY *NotifyList;\r
+ TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
+ EFI_TPL OldTpl;\r
\r
- TerminalDevice = (TERMINAL_DEV *) Context;\r
+ TerminalDevice = (TERMINAL_DEV *)Context;\r
\r
//\r
// Invoke notification functions.\r
if (!HasKey) {\r
break;\r
}\r
+\r
for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList, Link); Link = GetNextNode (NotifyList, Link)) {\r
CurrentNotify = CR (Link, TERMINAL_CONSOLE_IN_EX_NOTIFY, NotifyEntry, TERMINAL_CONSOLE_IN_EX_NOTIFY_SIGNATURE);\r
if (IsKeyRegistered (&CurrentNotify->KeyData, &KeyData)) {\r
//\r
// Read one key from serial I/O device.\r
//\r
- Status = SerialIo->Read (SerialIo, &Size, Output);\r
+ Status = SerialIo->Read (SerialIo, &Size, Output);\r
\r
if (EFI_ERROR (Status)) {\r
-\r
if (Status == EFI_TIMEOUT) {\r
return EFI_NOT_READY;\r
}\r
\r
return EFI_DEVICE_ERROR;\r
-\r
}\r
\r
if (*Output == 0) {\r
**/\r
BOOLEAN\r
RawFiFoInsertOneKey (\r
- TERMINAL_DEV *TerminalDevice,\r
- UINT8 Input\r
+ TERMINAL_DEV *TerminalDevice,\r
+ UINT8 Input\r
)\r
{\r
- UINT8 Tail;\r
+ UINT8 Tail;\r
\r
Tail = TerminalDevice->RawFiFo->Tail;\r
\r
return FALSE;\r
}\r
\r
- TerminalDevice->RawFiFo->Data[Tail] = Input;\r
+ TerminalDevice->RawFiFo->Data[Tail] = Input;\r
\r
- TerminalDevice->RawFiFo->Tail = (UINT8) ((Tail + 1) % (RAW_FIFO_MAX_NUMBER + 1));\r
+ TerminalDevice->RawFiFo->Tail = (UINT8)((Tail + 1) % (RAW_FIFO_MAX_NUMBER + 1));\r
\r
return TRUE;\r
}\r
UINT8 *Output\r
)\r
{\r
- UINT8 Head;\r
+ UINT8 Head;\r
\r
Head = TerminalDevice->RawFiFo->Head;\r
\r
return FALSE;\r
}\r
\r
- *Output = TerminalDevice->RawFiFo->Data[Head];\r
+ *Output = TerminalDevice->RawFiFo->Data[Head];\r
\r
- TerminalDevice->RawFiFo->Head = (UINT8) ((Head + 1) % (RAW_FIFO_MAX_NUMBER + 1));\r
+ TerminalDevice->RawFiFo->Head = (UINT8)((Head + 1) % (RAW_FIFO_MAX_NUMBER + 1));\r
\r
return TRUE;\r
}\r
TERMINAL_DEV *TerminalDevice\r
)\r
{\r
- UINT8 Tail;\r
- UINT8 Head;\r
+ UINT8 Tail;\r
+ UINT8 Head;\r
\r
- Tail = TerminalDevice->RawFiFo->Tail;\r
- Head = TerminalDevice->RawFiFo->Head;\r
+ Tail = TerminalDevice->RawFiFo->Tail;\r
+ Head = TerminalDevice->RawFiFo->Head;\r
\r
if (((Tail + 1) % (RAW_FIFO_MAX_NUMBER + 1)) == Head) {\r
-\r
return TRUE;\r
}\r
\r
**/\r
BOOLEAN\r
EfiKeyFiFoForNotifyInsertOneKey (\r
- EFI_KEY_FIFO *EfiKeyFiFo,\r
- EFI_INPUT_KEY *Input\r
+ EFI_KEY_FIFO *EfiKeyFiFo,\r
+ EFI_INPUT_KEY *Input\r
)\r
{\r
- UINT8 Tail;\r
+ UINT8 Tail;\r
\r
Tail = EfiKeyFiFo->Tail;\r
\r
\r
CopyMem (&EfiKeyFiFo->Data[Tail], Input, sizeof (EFI_INPUT_KEY));\r
\r
- EfiKeyFiFo->Tail = (UINT8) ((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
+ EfiKeyFiFo->Tail = (UINT8)((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
\r
return TRUE;\r
}\r
**/\r
BOOLEAN\r
EfiKeyFiFoForNotifyRemoveOneKey (\r
- EFI_KEY_FIFO *EfiKeyFiFo,\r
- EFI_INPUT_KEY *Output\r
+ EFI_KEY_FIFO *EfiKeyFiFo,\r
+ EFI_INPUT_KEY *Output\r
)\r
{\r
- UINT8 Head;\r
+ UINT8 Head;\r
\r
Head = EfiKeyFiFo->Head;\r
ASSERT (Head < FIFO_MAX_NUMBER + 1);\r
\r
CopyMem (Output, &EfiKeyFiFo->Data[Head], sizeof (EFI_INPUT_KEY));\r
\r
- EfiKeyFiFo->Head = (UINT8) ((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
+ EfiKeyFiFo->Head = (UINT8)((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
\r
return TRUE;\r
}\r
**/\r
BOOLEAN\r
IsEfiKeyFiFoForNotifyEmpty (\r
- EFI_KEY_FIFO *EfiKeyFiFo\r
+ EFI_KEY_FIFO *EfiKeyFiFo\r
)\r
{\r
if (EfiKeyFiFo->Head == EfiKeyFiFo->Tail) {\r
**/\r
BOOLEAN\r
IsEfiKeyFiFoForNotifyFull (\r
- EFI_KEY_FIFO *EfiKeyFiFo\r
+ EFI_KEY_FIFO *EfiKeyFiFo\r
)\r
{\r
- UINT8 Tail;\r
- UINT8 Head;\r
+ UINT8 Tail;\r
+ UINT8 Head;\r
\r
Tail = EfiKeyFiFo->Tail;\r
Head = EfiKeyFiFo->Head;\r
**/\r
BOOLEAN\r
EfiKeyFiFoInsertOneKey (\r
- TERMINAL_DEV *TerminalDevice,\r
- EFI_INPUT_KEY *Key\r
+ TERMINAL_DEV *TerminalDevice,\r
+ EFI_INPUT_KEY *Key\r
)\r
{\r
- UINT8 Tail;\r
- LIST_ENTRY *Link;\r
- LIST_ENTRY *NotifyList;\r
- TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
- EFI_KEY_DATA KeyData;\r
+ UINT8 Tail;\r
+ LIST_ENTRY *Link;\r
+ LIST_ENTRY *NotifyList;\r
+ TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
+ EFI_KEY_DATA KeyData;\r
\r
Tail = TerminalDevice->EfiKeyFiFo->Tail;\r
\r
// Signal KeyNotify process event if this key pressed matches any key registered.\r
//\r
NotifyList = &TerminalDevice->NotifyList;\r
- for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList,Link); Link = GetNextNode (NotifyList,Link)) {\r
+ for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList, Link); Link = GetNextNode (NotifyList, Link)) {\r
CurrentNotify = CR (\r
Link,\r
TERMINAL_CONSOLE_IN_EX_NOTIFY,\r
break;\r
}\r
}\r
+\r
if (IsEfiKeyFiFoFull (TerminalDevice)) {\r
//\r
// Efi Key FIFO is full\r
\r
CopyMem (&TerminalDevice->EfiKeyFiFo->Data[Tail], Key, sizeof (EFI_INPUT_KEY));\r
\r
- TerminalDevice->EfiKeyFiFo->Tail = (UINT8) ((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
+ TerminalDevice->EfiKeyFiFo->Tail = (UINT8)((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
\r
return TRUE;\r
}\r
**/\r
BOOLEAN\r
EfiKeyFiFoRemoveOneKey (\r
- TERMINAL_DEV *TerminalDevice,\r
- EFI_INPUT_KEY *Output\r
+ TERMINAL_DEV *TerminalDevice,\r
+ EFI_INPUT_KEY *Output\r
)\r
{\r
- UINT8 Head;\r
+ UINT8 Head;\r
\r
Head = TerminalDevice->EfiKeyFiFo->Head;\r
ASSERT (Head < FIFO_MAX_NUMBER + 1);\r
\r
CopyMem (Output, &TerminalDevice->EfiKeyFiFo->Data[Head], sizeof (EFI_INPUT_KEY));\r
\r
- TerminalDevice->EfiKeyFiFo->Head = (UINT8) ((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
+ TerminalDevice->EfiKeyFiFo->Head = (UINT8)((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
\r
return TRUE;\r
}\r
TERMINAL_DEV *TerminalDevice\r
)\r
{\r
- UINT8 Tail;\r
- UINT8 Head;\r
+ UINT8 Tail;\r
+ UINT8 Head;\r
\r
- Tail = TerminalDevice->EfiKeyFiFo->Tail;\r
- Head = TerminalDevice->EfiKeyFiFo->Head;\r
+ Tail = TerminalDevice->EfiKeyFiFo->Tail;\r
+ Head = TerminalDevice->EfiKeyFiFo->Head;\r
\r
if (((Tail + 1) % (FIFO_MAX_NUMBER + 1)) == Head) {\r
-\r
return TRUE;\r
}\r
\r
**/\r
BOOLEAN\r
UnicodeFiFoInsertOneKey (\r
- TERMINAL_DEV *TerminalDevice,\r
- UINT16 Input\r
+ TERMINAL_DEV *TerminalDevice,\r
+ UINT16 Input\r
)\r
{\r
- UINT8 Tail;\r
+ UINT8 Tail;\r
\r
Tail = TerminalDevice->UnicodeFiFo->Tail;\r
ASSERT (Tail < FIFO_MAX_NUMBER + 1);\r
\r
-\r
if (IsUnicodeFiFoFull (TerminalDevice)) {\r
//\r
// Unicode FIFO is full\r
return FALSE;\r
}\r
\r
- TerminalDevice->UnicodeFiFo->Data[Tail] = Input;\r
+ TerminalDevice->UnicodeFiFo->Data[Tail] = Input;\r
\r
- TerminalDevice->UnicodeFiFo->Tail = (UINT8) ((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
+ TerminalDevice->UnicodeFiFo->Tail = (UINT8)((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
\r
return TRUE;\r
}\r
UINT16 *Output\r
)\r
{\r
- UINT8 Head;\r
+ UINT8 Head;\r
\r
Head = TerminalDevice->UnicodeFiFo->Head;\r
ASSERT (Head < FIFO_MAX_NUMBER + 1);\r
\r
*Output = TerminalDevice->UnicodeFiFo->Data[Head];\r
\r
- TerminalDevice->UnicodeFiFo->Head = (UINT8) ((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
+ TerminalDevice->UnicodeFiFo->Head = (UINT8)((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
}\r
\r
/**\r
TERMINAL_DEV *TerminalDevice\r
)\r
{\r
- UINT8 Tail;\r
- UINT8 Head;\r
+ UINT8 Tail;\r
+ UINT8 Head;\r
\r
- Tail = TerminalDevice->UnicodeFiFo->Tail;\r
- Head = TerminalDevice->UnicodeFiFo->Head;\r
+ Tail = TerminalDevice->UnicodeFiFo->Tail;\r
+ Head = TerminalDevice->UnicodeFiFo->Head;\r
\r
if (((Tail + 1) % (FIFO_MAX_NUMBER + 1)) == Head) {\r
-\r
return TRUE;\r
}\r
\r
return FALSE;\r
}\r
\r
-\r
/**\r
Update the Unicode characters from a terminal input device into EFI Keys FIFO.\r
\r
**/\r
VOID\r
UnicodeToEfiKeyFlushState (\r
- IN TERMINAL_DEV *TerminalDevice\r
+ IN TERMINAL_DEV *TerminalDevice\r
)\r
{\r
- EFI_INPUT_KEY Key;\r
- UINT32 InputState;\r
+ EFI_INPUT_KEY Key;\r
+ UINT32 InputState;\r
\r
InputState = TerminalDevice->InputState;\r
\r
// Cancel the timer.\r
//\r
gBS->SetTimer (\r
- TerminalDevice->TwoSecondTimeOut,\r
- TimerCancel,\r
- 0\r
- );\r
+ TerminalDevice->TwoSecondTimeOut,\r
+ TimerCancel,\r
+ 0\r
+ );\r
\r
TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
}\r
\r
-\r
/**\r
Converts a stream of Unicode characters from a terminal input device into EFI Keys that\r
can be read through the Simple Input Protocol.\r
**/\r
VOID\r
UnicodeToEfiKey (\r
- IN TERMINAL_DEV *TerminalDevice\r
+ IN TERMINAL_DEV *TerminalDevice\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_STATUS TimerStatus;\r
- UINT16 UnicodeChar;\r
- EFI_INPUT_KEY Key;\r
- BOOLEAN SetDefaultResetState;\r
+ EFI_STATUS Status;\r
+ EFI_STATUS TimerStatus;\r
+ UINT16 UnicodeChar;\r
+ EFI_INPUT_KEY Key;\r
+ BOOLEAN SetDefaultResetState;\r
\r
TimerStatus = gBS->CheckEvent (TerminalDevice->TwoSecondTimeOut);\r
\r
}\r
\r
while (!IsUnicodeFiFoEmpty (TerminalDevice) && !IsEfiKeyFiFoFull (TerminalDevice)) {\r
-\r
if (TerminalDevice->InputState != INPUT_STATE_DEFAULT) {\r
//\r
// Check to see if the 2 seconds timer has expired\r
SetDefaultResetState = TRUE;\r
\r
switch (TerminalDevice->InputState) {\r
- case INPUT_STATE_DEFAULT:\r
+ case INPUT_STATE_DEFAULT:\r
\r
- break;\r
+ break;\r
\r
- case INPUT_STATE_ESC:\r
+ case INPUT_STATE_ESC:\r
\r
- if (UnicodeChar == LEFTOPENBRACKET) {\r
- TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET;\r
- TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
- continue;\r
- }\r
+ if (UnicodeChar == LEFTOPENBRACKET) {\r
+ TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET;\r
+ TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
+ continue;\r
+ }\r
\r
- if (UnicodeChar == 'O' && (TerminalDevice->TerminalType == TerminalTypeVt100 ||\r
- TerminalDevice->TerminalType == TerminalTypeTtyTerm ||\r
- TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
- TerminalDevice->TerminalType == TerminalTypeVt100Plus)) {\r
- TerminalDevice->InputState |= INPUT_STATE_O;\r
- TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
- continue;\r
- }\r
+ if ((UnicodeChar == 'O') && ((TerminalDevice->TerminalType == TerminalTypeVt100) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeTtyTerm) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVt100Plus)))\r
+ {\r
+ TerminalDevice->InputState |= INPUT_STATE_O;\r
+ TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
+ continue;\r
+ }\r
\r
- Key.ScanCode = SCAN_NULL;\r
+ Key.ScanCode = SCAN_NULL;\r
+\r
+ if ((TerminalDevice->TerminalType == TerminalTypeVt100Plus) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVtUtf8))\r
+ {\r
+ switch (UnicodeChar) {\r
+ case '1':\r
+ Key.ScanCode = SCAN_F1;\r
+ break;\r
+ case '2':\r
+ Key.ScanCode = SCAN_F2;\r
+ break;\r
+ case '3':\r
+ Key.ScanCode = SCAN_F3;\r
+ break;\r
+ case '4':\r
+ Key.ScanCode = SCAN_F4;\r
+ break;\r
+ case '5':\r
+ Key.ScanCode = SCAN_F5;\r
+ break;\r
+ case '6':\r
+ Key.ScanCode = SCAN_F6;\r
+ break;\r
+ case '7':\r
+ Key.ScanCode = SCAN_F7;\r
+ break;\r
+ case '8':\r
+ Key.ScanCode = SCAN_F8;\r
+ break;\r
+ case '9':\r
+ Key.ScanCode = SCAN_F9;\r
+ break;\r
+ case '0':\r
+ Key.ScanCode = SCAN_F10;\r
+ break;\r
+ case '!':\r
+ Key.ScanCode = SCAN_F11;\r
+ break;\r
+ case '@':\r
+ Key.ScanCode = SCAN_F12;\r
+ break;\r
+ case 'h':\r
+ Key.ScanCode = SCAN_HOME;\r
+ break;\r
+ case 'k':\r
+ Key.ScanCode = SCAN_END;\r
+ break;\r
+ case '+':\r
+ Key.ScanCode = SCAN_INSERT;\r
+ break;\r
+ case '-':\r
+ Key.ScanCode = SCAN_DELETE;\r
+ break;\r
+ case '/':\r
+ Key.ScanCode = SCAN_PAGE_DOWN;\r
+ break;\r
+ case '?':\r
+ Key.ScanCode = SCAN_PAGE_UP;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
\r
- if (TerminalDevice->TerminalType == TerminalTypeVt100Plus ||\r
- TerminalDevice->TerminalType == TerminalTypeVtUtf8) {\r
switch (UnicodeChar) {\r
- case '1':\r
- Key.ScanCode = SCAN_F1;\r
- break;\r
- case '2':\r
- Key.ScanCode = SCAN_F2;\r
- break;\r
- case '3':\r
- Key.ScanCode = SCAN_F3;\r
- break;\r
- case '4':\r
- Key.ScanCode = SCAN_F4;\r
- break;\r
- case '5':\r
- Key.ScanCode = SCAN_F5;\r
- break;\r
- case '6':\r
- Key.ScanCode = SCAN_F6;\r
- break;\r
- case '7':\r
- Key.ScanCode = SCAN_F7;\r
- break;\r
- case '8':\r
- Key.ScanCode = SCAN_F8;\r
- break;\r
- case '9':\r
- Key.ScanCode = SCAN_F9;\r
- break;\r
- case '0':\r
- Key.ScanCode = SCAN_F10;\r
- break;\r
- case '!':\r
- Key.ScanCode = SCAN_F11;\r
- break;\r
- case '@':\r
- Key.ScanCode = SCAN_F12;\r
- break;\r
- case 'h':\r
- Key.ScanCode = SCAN_HOME;\r
- break;\r
- case 'k':\r
- Key.ScanCode = SCAN_END;\r
- break;\r
- case '+':\r
- Key.ScanCode = SCAN_INSERT;\r
- break;\r
- case '-':\r
- Key.ScanCode = SCAN_DELETE;\r
- break;\r
- case '/':\r
- Key.ScanCode = SCAN_PAGE_DOWN;\r
- break;\r
- case '?':\r
- Key.ScanCode = SCAN_PAGE_UP;\r
- break;\r
- default :\r
- break;\r
+ case 'R':\r
+ if (TerminalDevice->ResetState == RESET_STATE_DEFAULT) {\r
+ TerminalDevice->ResetState = RESET_STATE_ESC_R;\r
+ SetDefaultResetState = FALSE;\r
+ } else if (TerminalDevice->ResetState == RESET_STATE_ESC_R_ESC_R) {\r
+ gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);\r
+ }\r
+\r
+ Key.ScanCode = SCAN_NULL;\r
+ break;\r
+ case 'r':\r
+ if (TerminalDevice->ResetState == RESET_STATE_ESC_R) {\r
+ TerminalDevice->ResetState = RESET_STATE_ESC_R_ESC_R;\r
+ SetDefaultResetState = FALSE;\r
+ }\r
+\r
+ Key.ScanCode = SCAN_NULL;\r
+ break;\r
+ default:\r
+ break;\r
}\r
- }\r
\r
- switch (UnicodeChar) {\r
- case 'R':\r
- if (TerminalDevice->ResetState == RESET_STATE_DEFAULT) {\r
- TerminalDevice->ResetState = RESET_STATE_ESC_R;\r
- SetDefaultResetState = FALSE;\r
- } else if (TerminalDevice->ResetState == RESET_STATE_ESC_R_ESC_R) {\r
- gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);\r
+ if (SetDefaultResetState) {\r
+ TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
}\r
- Key.ScanCode = SCAN_NULL;\r
- break;\r
- case 'r':\r
- if (TerminalDevice->ResetState == RESET_STATE_ESC_R) {\r
- TerminalDevice->ResetState = RESET_STATE_ESC_R_ESC_R;\r
- SetDefaultResetState = FALSE;\r
+\r
+ if (Key.ScanCode != SCAN_NULL) {\r
+ Key.UnicodeChar = 0;\r
+ EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+ TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ continue;\r
}\r
- Key.ScanCode = SCAN_NULL;\r
- break;\r
- default :\r
+\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
+\r
break;\r
- }\r
\r
- if (SetDefaultResetState) {\r
+ case INPUT_STATE_ESC | INPUT_STATE_O:\r
+\r
TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
- }\r
\r
- if (Key.ScanCode != SCAN_NULL) {\r
- Key.UnicodeChar = 0;\r
- EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
- TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
- continue;\r
- }\r
+ Key.ScanCode = SCAN_NULL;\r
\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
+ switch (UnicodeChar) {\r
+ case 'P':\r
+ Key.ScanCode = SCAN_F1;\r
+ break;\r
+ case 'Q':\r
+ Key.ScanCode = SCAN_F2;\r
+ break;\r
+ case 'w':\r
+ Key.ScanCode = SCAN_F3;\r
+ break;\r
+ case 'x':\r
+ Key.ScanCode = SCAN_F4;\r
+ break;\r
+ case 't':\r
+ Key.ScanCode = SCAN_F5;\r
+ break;\r
+ case 'u':\r
+ Key.ScanCode = SCAN_F6;\r
+ break;\r
+ case 'q':\r
+ Key.ScanCode = SCAN_F7;\r
+ break;\r
+ case 'r':\r
+ Key.ScanCode = SCAN_F8;\r
+ break;\r
+ case 'p':\r
+ Key.ScanCode = SCAN_F9;\r
+ break;\r
+ case 'M':\r
+ Key.ScanCode = SCAN_F10;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ } else if (TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
+ /* Also accept VT100 escape codes for F1-F4, HOME and END for TTY term */\r
+ switch (UnicodeChar) {\r
+ case 'P':\r
+ Key.ScanCode = SCAN_F1;\r
+ break;\r
+ case 'Q':\r
+ Key.ScanCode = SCAN_F2;\r
+ break;\r
+ case 'R':\r
+ Key.ScanCode = SCAN_F3;\r
+ break;\r
+ case 'S':\r
+ Key.ScanCode = SCAN_F4;\r
+ break;\r
+ case 'H':\r
+ Key.ScanCode = SCAN_HOME;\r
+ break;\r
+ case 'F':\r
+ Key.ScanCode = SCAN_END;\r
+ break;\r
+ }\r
+ } else if (TerminalDevice->TerminalType == TerminalTypeVt100Plus) {\r
+ switch (UnicodeChar) {\r
+ case 'P':\r
+ Key.ScanCode = SCAN_F1;\r
+ break;\r
+ case 'Q':\r
+ Key.ScanCode = SCAN_F2;\r
+ break;\r
+ case 'R':\r
+ Key.ScanCode = SCAN_F3;\r
+ break;\r
+ case 'S':\r
+ Key.ScanCode = SCAN_F4;\r
+ break;\r
+ case 'T':\r
+ Key.ScanCode = SCAN_F5;\r
+ break;\r
+ case 'U':\r
+ Key.ScanCode = SCAN_F6;\r
+ break;\r
+ case 'V':\r
+ Key.ScanCode = SCAN_F7;\r
+ break;\r
+ case 'W':\r
+ Key.ScanCode = SCAN_F8;\r
+ break;\r
+ case 'X':\r
+ Key.ScanCode = SCAN_F9;\r
+ break;\r
+ case 'Y':\r
+ Key.ScanCode = SCAN_F10;\r
+ break;\r
+ case 'Z':\r
+ Key.ScanCode = SCAN_F11;\r
+ break;\r
+ case '[':\r
+ Key.ScanCode = SCAN_F12;\r
+ break;\r
+ }\r
+ } else if (TerminalDevice->TerminalType == TerminalTypeXtermR6) {\r
+ switch (UnicodeChar) {\r
+ case 'P':\r
+ Key.ScanCode = SCAN_F1;\r
+ break;\r
+ case 'Q':\r
+ Key.ScanCode = SCAN_F2;\r
+ break;\r
+ case 'R':\r
+ Key.ScanCode = SCAN_F3;\r
+ break;\r
+ case 'S':\r
+ Key.ScanCode = SCAN_F4;\r
+ break;\r
+ }\r
+ }\r
\r
- break;\r
+ if (Key.ScanCode != SCAN_NULL) {\r
+ Key.UnicodeChar = 0;\r
+ EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+ TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ continue;\r
+ }\r
\r
- case INPUT_STATE_ESC | INPUT_STATE_O:\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
\r
- TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
+ break;\r
\r
- Key.ScanCode = SCAN_NULL;\r
+ case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET:\r
\r
- if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
- switch (UnicodeChar) {\r
- case 'P':\r
- Key.ScanCode = SCAN_F1;\r
- break;\r
- case 'Q':\r
- Key.ScanCode = SCAN_F2;\r
- break;\r
- case 'w':\r
- Key.ScanCode = SCAN_F3;\r
- break;\r
- case 'x':\r
- Key.ScanCode = SCAN_F4;\r
- break;\r
- case 't':\r
- Key.ScanCode = SCAN_F5;\r
- break;\r
- case 'u':\r
- Key.ScanCode = SCAN_F6;\r
- break;\r
- case 'q':\r
- Key.ScanCode = SCAN_F7;\r
- break;\r
- case 'r':\r
- Key.ScanCode = SCAN_F8;\r
- break;\r
- case 'p':\r
- Key.ScanCode = SCAN_F9;\r
- break;\r
- case 'M':\r
- Key.ScanCode = SCAN_F10;\r
- break;\r
- default :\r
- break;\r
- }\r
- } else if (TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
- /* Also accept VT100 escape codes for F1-F4, HOME and END for TTY term */\r
- switch (UnicodeChar) {\r
- case 'P':\r
- Key.ScanCode = SCAN_F1;\r
- break;\r
- case 'Q':\r
- Key.ScanCode = SCAN_F2;\r
- break;\r
- case 'R':\r
- Key.ScanCode = SCAN_F3;\r
- break;\r
- case 'S':\r
- Key.ScanCode = SCAN_F4;\r
- break;\r
- case 'H':\r
- Key.ScanCode = SCAN_HOME;\r
- break;\r
- case 'F':\r
- Key.ScanCode = SCAN_END;\r
- break;\r
+ if ((UnicodeChar == '1') && ((TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVt400) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeLinux)))\r
+ {\r
+ TerminalDevice->InputState |= INPUT_STATE_1;\r
+ continue;\r
}\r
- } else if (TerminalDevice->TerminalType == TerminalTypeVt100Plus) {\r
- switch (UnicodeChar) {\r
- case 'P':\r
- Key.ScanCode = SCAN_F1;\r
- break;\r
- case 'Q':\r
- Key.ScanCode = SCAN_F2;\r
- break;\r
- case 'R':\r
- Key.ScanCode = SCAN_F3;\r
- break;\r
- case 'S':\r
- Key.ScanCode = SCAN_F4;\r
- break;\r
- case 'T':\r
- Key.ScanCode = SCAN_F5;\r
- break;\r
- case 'U':\r
- Key.ScanCode = SCAN_F6;\r
- break;\r
- case 'V':\r
- Key.ScanCode = SCAN_F7;\r
- break;\r
- case 'W':\r
- Key.ScanCode = SCAN_F8;\r
- break;\r
- case 'X':\r
- Key.ScanCode = SCAN_F9;\r
- break;\r
- case 'Y':\r
- Key.ScanCode = SCAN_F10;\r
- break;\r
- case 'Z':\r
- Key.ScanCode = SCAN_F11;\r
- break;\r
- case '[':\r
- Key.ScanCode = SCAN_F12;\r
- break;\r
+\r
+ if ((UnicodeChar == '2') && ((TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVt400) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeLinux)))\r
+ {\r
+ TerminalDevice->InputState |= INPUT_STATE_2;\r
+ continue;\r
}\r
- } else if (TerminalDevice->TerminalType == TerminalTypeXtermR6) {\r
- switch (UnicodeChar) {\r
- case 'P':\r
- Key.ScanCode = SCAN_F1;\r
- break;\r
- case 'Q':\r
- Key.ScanCode = SCAN_F2;\r
- break;\r
- case 'R':\r
- Key.ScanCode = SCAN_F3;\r
- break;\r
- case 'S':\r
- Key.ScanCode = SCAN_F4;\r
- break;\r
+\r
+ if ((UnicodeChar == LEFTOPENBRACKET) && (TerminalDevice->TerminalType == TerminalTypeLinux)) {\r
+ TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET_2ND;\r
+ continue;\r
}\r
- }\r
\r
- if (Key.ScanCode != SCAN_NULL) {\r
- Key.UnicodeChar = 0;\r
- EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
- TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
- continue;\r
- }\r
+ TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ Key.ScanCode = SCAN_NULL;\r
\r
- break;\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVt100) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVt100Plus) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVtUtf8) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeTtyTerm) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeLinux) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVt400) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+ {\r
+ switch (UnicodeChar) {\r
+ case 'A':\r
+ Key.ScanCode = SCAN_UP;\r
+ break;\r
+ case 'B':\r
+ Key.ScanCode = SCAN_DOWN;\r
+ break;\r
+ case 'C':\r
+ Key.ScanCode = SCAN_RIGHT;\r
+ break;\r
+ case 'D':\r
+ Key.ScanCode = SCAN_LEFT;\r
+ break;\r
+ case 'H':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVt100) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeTtyTerm))\r
+ {\r
+ Key.ScanCode = SCAN_HOME;\r
+ }\r
\r
- case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET:\r
+ break;\r
+ case 'F':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeTtyTerm))\r
+ {\r
+ Key.ScanCode = SCAN_END;\r
+ }\r
\r
- if (UnicodeChar == '1' && (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
- TerminalDevice->TerminalType == TerminalTypeVt400 ||\r
- TerminalDevice->TerminalType == TerminalTypeLinux)) {\r
- TerminalDevice->InputState |= INPUT_STATE_1;\r
- continue;\r
- }\r
+ break;\r
+ case 'K':\r
+ if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
+ Key.ScanCode = SCAN_END;\r
+ }\r
\r
- if (UnicodeChar == '2' && (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
- TerminalDevice->TerminalType == TerminalTypeVt400 ||\r
- TerminalDevice->TerminalType == TerminalTypeLinux)) {\r
- TerminalDevice->InputState |= INPUT_STATE_2;\r
- continue;\r
- }\r
+ break;\r
+ case 'L':\r
+ case '@':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVt100))\r
+ {\r
+ Key.ScanCode = SCAN_INSERT;\r
+ }\r
\r
- if (UnicodeChar == LEFTOPENBRACKET && TerminalDevice->TerminalType == TerminalTypeLinux) {\r
- TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET_2ND;\r
- continue;\r
- }\r
+ break;\r
+ case 'X':\r
+ if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
+ Key.ScanCode = SCAN_DELETE;\r
+ } else if (TerminalDevice->TerminalType == TerminalTypeSCO) {\r
+ Key.ScanCode = SCAN_F12;\r
+ }\r
\r
- TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
+ break;\r
+ case 'P':\r
+ if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
+ Key.ScanCode = SCAN_DELETE;\r
+ } else if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+ {\r
+ Key.ScanCode = SCAN_F4;\r
+ }\r
\r
- Key.ScanCode = SCAN_NULL;\r
-\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeVt100 ||\r
- TerminalDevice->TerminalType == TerminalTypeVt100Plus ||\r
- TerminalDevice->TerminalType == TerminalTypeVtUtf8 ||\r
- TerminalDevice->TerminalType == TerminalTypeTtyTerm ||\r
- TerminalDevice->TerminalType == TerminalTypeLinux ||\r
- TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
- TerminalDevice->TerminalType == TerminalTypeVt400 ||\r
- TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- switch (UnicodeChar) {\r
- case 'A':\r
- Key.ScanCode = SCAN_UP;\r
- break;\r
- case 'B':\r
- Key.ScanCode = SCAN_DOWN;\r
- break;\r
- case 'C':\r
- Key.ScanCode = SCAN_RIGHT;\r
- break;\r
- case 'D':\r
- Key.ScanCode = SCAN_LEFT;\r
- break;\r
- case 'H':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeVt100 ||\r
- TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
- Key.ScanCode = SCAN_HOME;\r
- }\r
- break;\r
- case 'F':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
- Key.ScanCode = SCAN_END;\r
- }\r
- break;\r
- case 'K':\r
- if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
- Key.ScanCode = SCAN_END;\r
- }\r
- break;\r
- case 'L':\r
- case '@':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeVt100) {\r
- Key.ScanCode = SCAN_INSERT;\r
- }\r
- break;\r
- case 'X':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
- Key.ScanCode = SCAN_DELETE;\r
- } else if (TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F12;\r
- }\r
- break;\r
- case 'P':\r
- if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
- Key.ScanCode = SCAN_DELETE;\r
- } else if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F4;\r
- }\r
- break;\r
- case 'I':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
- Key.ScanCode = SCAN_PAGE_UP;\r
- }\r
- break;\r
- case 'V':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F10;\r
- }\r
- break;\r
- case '?':\r
- if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
- Key.ScanCode = SCAN_PAGE_UP;\r
- }\r
- break;\r
- case 'G':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
- Key.ScanCode = SCAN_PAGE_DOWN;\r
- }\r
- break;\r
- case 'U':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F9;\r
- }\r
- break;\r
- case '/':\r
- if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
- Key.ScanCode = SCAN_PAGE_DOWN;\r
- }\r
- break;\r
- case 'M':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F1;\r
- }\r
- break;\r
- case 'N':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F2;\r
- }\r
- break;\r
- case 'O':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F3;\r
- }\r
- break;\r
- case 'Q':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F5;\r
- }\r
- break;\r
- case 'R':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F6;\r
- }\r
- break;\r
- case 'S':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F7;\r
- }\r
- break;\r
- case 'T':\r
- if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
- TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F8;\r
- }\r
- break;\r
- case 'W':\r
- if (TerminalDevice->TerminalType == TerminalTypeSCO) {\r
- Key.ScanCode = SCAN_F11;\r
- }\r
- break;\r
- default :\r
- break;\r
- }\r
- }\r
+ break;\r
+ case 'I':\r
+ if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
+ Key.ScanCode = SCAN_PAGE_UP;\r
+ }\r
\r
- /*\r
- * The VT220 escape codes that the TTY terminal accepts all have\r
- * numeric codes, and there are no ambiguous prefixes shared with\r
- * other terminal types.\r
- */\r
- if (TerminalDevice->TerminalType == TerminalTypeTtyTerm &&\r
- Key.ScanCode == SCAN_NULL &&\r
- UnicodeChar >= '0' &&\r
- UnicodeChar <= '9') {\r
- TerminalDevice->TtyEscapeStr[0] = UnicodeChar;\r
- TerminalDevice->TtyEscapeIndex = 1;\r
- TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET_TTY;\r
- continue;\r
- }\r
+ break;\r
+ case 'V':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+ {\r
+ Key.ScanCode = SCAN_F10;\r
+ }\r
\r
- if (Key.ScanCode != SCAN_NULL) {\r
- Key.UnicodeChar = 0;\r
- EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
- TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
- continue;\r
- }\r
+ break;\r
+ case '?':\r
+ if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
+ Key.ScanCode = SCAN_PAGE_UP;\r
+ }\r
\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ break;\r
+ case 'G':\r
+ if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
+ Key.ScanCode = SCAN_PAGE_DOWN;\r
+ }\r
\r
- break;\r
+ break;\r
+ case 'U':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+ {\r
+ Key.ScanCode = SCAN_F9;\r
+ }\r
\r
- case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_1:\r
+ break;\r
+ case '/':\r
+ if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
+ Key.ScanCode = SCAN_PAGE_DOWN;\r
+ }\r
\r
- TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
+ break;\r
+ case 'M':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+ {\r
+ Key.ScanCode = SCAN_F1;\r
+ }\r
\r
- Key.ScanCode = SCAN_NULL;\r
+ break;\r
+ case 'N':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+ {\r
+ Key.ScanCode = SCAN_F2;\r
+ }\r
\r
- if (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
- TerminalDevice->TerminalType == TerminalTypeVt400 ||\r
- TerminalDevice->TerminalType == TerminalTypeLinux) {\r
- switch (UnicodeChar) {\r
- case '1':\r
- if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
- Key.ScanCode = SCAN_F1;\r
- }\r
- break;\r
- case '2':\r
- if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
- Key.ScanCode = SCAN_F2;\r
- }\r
- break;\r
- case '3':\r
- if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
- Key.ScanCode = SCAN_F3;\r
- }\r
- break;\r
- case '4':\r
- if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
- Key.ScanCode = SCAN_F4;\r
- }\r
- break;\r
- case '5':\r
- if (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
- TerminalDevice->TerminalType == TerminalTypeVt400) {\r
- Key.ScanCode = SCAN_F5;\r
+ break;\r
+ case 'O':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+ {\r
+ Key.ScanCode = SCAN_F3;\r
+ }\r
+\r
+ break;\r
+ case 'Q':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+ {\r
+ Key.ScanCode = SCAN_F5;\r
+ }\r
+\r
+ break;\r
+ case 'R':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+ {\r
+ Key.ScanCode = SCAN_F6;\r
+ }\r
+\r
+ break;\r
+ case 'S':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+ {\r
+ Key.ScanCode = SCAN_F7;\r
+ }\r
+\r
+ break;\r
+ case 'T':\r
+ if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+ {\r
+ Key.ScanCode = SCAN_F8;\r
+ }\r
+\r
+ break;\r
+ case 'W':\r
+ if (TerminalDevice->TerminalType == TerminalTypeSCO) {\r
+ Key.ScanCode = SCAN_F11;\r
+ }\r
+\r
+ break;\r
+ default:\r
+ break;\r
}\r
- break;\r
- case '7':\r
- Key.ScanCode = SCAN_F6;\r
- break;\r
- case '8':\r
- Key.ScanCode = SCAN_F7;\r
- break;\r
- case '9':\r
- Key.ScanCode = SCAN_F8;\r
- break;\r
}\r
- }\r
\r
- if (Key.ScanCode != SCAN_NULL) {\r
- Key.UnicodeChar = 0;\r
- EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
- TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+ /*\r
+ * The VT220 escape codes that the TTY terminal accepts all have\r
+ * numeric codes, and there are no ambiguous prefixes shared with\r
+ * other terminal types.\r
+ */\r
+ if ((TerminalDevice->TerminalType == TerminalTypeTtyTerm) &&\r
+ (Key.ScanCode == SCAN_NULL) &&\r
+ (UnicodeChar >= '0') &&\r
+ (UnicodeChar <= '9'))\r
+ {\r
+ TerminalDevice->TtyEscapeStr[0] = UnicodeChar;\r
+ TerminalDevice->TtyEscapeIndex = 1;\r
+ TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET_TTY;\r
+ continue;\r
+ }\r
+\r
+ if (Key.ScanCode != SCAN_NULL) {\r
+ Key.UnicodeChar = 0;\r
+ EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+ TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ continue;\r
+ }\r
+\r
UnicodeToEfiKeyFlushState (TerminalDevice);\r
- continue;\r
- }\r
\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ break;\r
\r
- break;\r
+ case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_1:\r
\r
- case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_2:\r
+ TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
\r
- TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
- Key.ScanCode = SCAN_NULL;\r
- if (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
- TerminalDevice->TerminalType == TerminalTypeVt400 ||\r
- TerminalDevice->TerminalType == TerminalTypeLinux) {\r
- switch (UnicodeChar) {\r
- case '0':\r
- Key.ScanCode = SCAN_F9;\r
- break;\r
- case '1':\r
- Key.ScanCode = SCAN_F10;\r
- break;\r
- case '3':\r
- Key.ScanCode = SCAN_F11;\r
- break;\r
- case '4':\r
- Key.ScanCode = SCAN_F12;\r
- break;\r
- }\r
- }\r
+ Key.ScanCode = SCAN_NULL;\r
\r
- if (Key.ScanCode != SCAN_NULL) {\r
- Key.UnicodeChar = 0;\r
- EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
- TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
- continue;\r
- }\r
+ if ((TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVt400) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeLinux))\r
+ {\r
+ switch (UnicodeChar) {\r
+ case '1':\r
+ if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
+ Key.ScanCode = SCAN_F1;\r
+ }\r
\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ break;\r
+ case '2':\r
+ if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
+ Key.ScanCode = SCAN_F2;\r
+ }\r
\r
- break;\r
+ break;\r
+ case '3':\r
+ if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
+ Key.ScanCode = SCAN_F3;\r
+ }\r
\r
- case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_LEFTOPENBRACKET_2ND:\r
+ break;\r
+ case '4':\r
+ if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
+ Key.ScanCode = SCAN_F4;\r
+ }\r
\r
- TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
- Key.ScanCode = SCAN_NULL;\r
+ break;\r
+ case '5':\r
+ if ((TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVt400))\r
+ {\r
+ Key.ScanCode = SCAN_F5;\r
+ }\r
\r
- if (TerminalDevice->TerminalType == TerminalTypeLinux) {\r
- switch (UnicodeChar) {\r
- case 'A':\r
- Key.ScanCode = SCAN_F1;\r
- break;\r
- case 'B':\r
- Key.ScanCode = SCAN_F2;\r
- break;\r
- case 'C':\r
- Key.ScanCode = SCAN_F3;\r
- break;\r
- case 'D':\r
- Key.ScanCode = SCAN_F4;\r
- break;\r
- case 'E':\r
- Key.ScanCode = SCAN_F5;\r
- break;\r
+ break;\r
+ case '7':\r
+ Key.ScanCode = SCAN_F6;\r
+ break;\r
+ case '8':\r
+ Key.ScanCode = SCAN_F7;\r
+ break;\r
+ case '9':\r
+ Key.ScanCode = SCAN_F8;\r
+ break;\r
+ }\r
}\r
- }\r
\r
- if (Key.ScanCode != SCAN_NULL) {\r
- Key.UnicodeChar = 0;\r
- EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+ if (Key.ScanCode != SCAN_NULL) {\r
+ Key.UnicodeChar = 0;\r
+ EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+ TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ continue;\r
+ }\r
+\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
+\r
+ break;\r
+\r
+ case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_2:\r
+\r
TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+ Key.ScanCode = SCAN_NULL;\r
+ if ((TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeVt400) ||\r
+ (TerminalDevice->TerminalType == TerminalTypeLinux))\r
+ {\r
+ switch (UnicodeChar) {\r
+ case '0':\r
+ Key.ScanCode = SCAN_F9;\r
+ break;\r
+ case '1':\r
+ Key.ScanCode = SCAN_F10;\r
+ break;\r
+ case '3':\r
+ Key.ScanCode = SCAN_F11;\r
+ break;\r
+ case '4':\r
+ Key.ScanCode = SCAN_F12;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (Key.ScanCode != SCAN_NULL) {\r
+ Key.UnicodeChar = 0;\r
+ EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+ TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ continue;\r
+ }\r
+\r
UnicodeToEfiKeyFlushState (TerminalDevice);\r
- continue;\r
- }\r
\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ break;\r
\r
- break;\r
+ case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_LEFTOPENBRACKET_2ND:\r
\r
- case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_LEFTOPENBRACKET_TTY:\r
- /*\r
- * Here we handle the VT220 escape codes that we accept. This\r
- * state is only used by the TTY terminal type.\r
- */\r
- Key.ScanCode = SCAN_NULL;\r
- if (TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
+ TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+ Key.ScanCode = SCAN_NULL;\r
\r
- if (UnicodeChar == '~' && TerminalDevice->TtyEscapeIndex <= 2) {\r
- UINT16 EscCode;\r
- TerminalDevice->TtyEscapeStr[TerminalDevice->TtyEscapeIndex] = 0; /* Terminate string */\r
- EscCode = (UINT16) StrDecimalToUintn(TerminalDevice->TtyEscapeStr);\r
- switch (EscCode) {\r
- case 2:\r
- Key.ScanCode = SCAN_INSERT;\r
+ if (TerminalDevice->TerminalType == TerminalTypeLinux) {\r
+ switch (UnicodeChar) {\r
+ case 'A':\r
+ Key.ScanCode = SCAN_F1;\r
break;\r
- case 3:\r
- Key.ScanCode = SCAN_DELETE;\r
+ case 'B':\r
+ Key.ScanCode = SCAN_F2;\r
break;\r
- case 5:\r
- Key.ScanCode = SCAN_PAGE_UP;\r
+ case 'C':\r
+ Key.ScanCode = SCAN_F3;\r
break;\r
- case 6:\r
- Key.ScanCode = SCAN_PAGE_DOWN;\r
+ case 'D':\r
+ Key.ScanCode = SCAN_F4;\r
+ break;\r
+ case 'E':\r
+ Key.ScanCode = SCAN_F5;\r
break;\r
- case 11:\r
- case 12:\r
- case 13:\r
- case 14:\r
- case 15:\r
- Key.ScanCode = SCAN_F1 + EscCode - 11;\r
- break;\r
- case 17:\r
- case 18:\r
- case 19:\r
- case 20:\r
- case 21:\r
- Key.ScanCode = SCAN_F6 + EscCode - 17;\r
- break;\r
- case 23:\r
- case 24:\r
- Key.ScanCode = SCAN_F11 + EscCode - 23;\r
- break;\r
- default:\r
- break;\r
}\r
- } else if (TerminalDevice->TtyEscapeIndex == 1){\r
- /* 2 character escape code */\r
- TerminalDevice->TtyEscapeStr[TerminalDevice->TtyEscapeIndex++] = UnicodeChar;\r
- continue;\r
}\r
- else {\r
- DEBUG ((DEBUG_ERROR, "Unexpected state in escape2\n"));\r
+\r
+ if (Key.ScanCode != SCAN_NULL) {\r
+ Key.UnicodeChar = 0;\r
+ EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+ TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ continue;\r
}\r
- }\r
- TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
\r
- if (Key.ScanCode != SCAN_NULL) {\r
- Key.UnicodeChar = 0;\r
- EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
- TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
UnicodeToEfiKeyFlushState (TerminalDevice);\r
- continue;\r
- }\r
\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
- break;\r
+ break;\r
\r
- default:\r
- //\r
- // Invalid state. This should never happen.\r
- //\r
- ASSERT (FALSE);\r
+ case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_LEFTOPENBRACKET_TTY:\r
+ /*\r
+ * Here we handle the VT220 escape codes that we accept. This\r
+ * state is only used by the TTY terminal type.\r
+ */\r
+ Key.ScanCode = SCAN_NULL;\r
+ if (TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
+ if ((UnicodeChar == '~') && (TerminalDevice->TtyEscapeIndex <= 2)) {\r
+ UINT16 EscCode;\r
+ TerminalDevice->TtyEscapeStr[TerminalDevice->TtyEscapeIndex] = 0; /* Terminate string */\r
+ EscCode = (UINT16)StrDecimalToUintn (TerminalDevice->TtyEscapeStr);\r
+ switch (EscCode) {\r
+ case 2:\r
+ Key.ScanCode = SCAN_INSERT;\r
+ break;\r
+ case 3:\r
+ Key.ScanCode = SCAN_DELETE;\r
+ break;\r
+ case 5:\r
+ Key.ScanCode = SCAN_PAGE_UP;\r
+ break;\r
+ case 6:\r
+ Key.ScanCode = SCAN_PAGE_DOWN;\r
+ break;\r
+ case 11:\r
+ case 12:\r
+ case 13:\r
+ case 14:\r
+ case 15:\r
+ Key.ScanCode = SCAN_F1 + EscCode - 11;\r
+ break;\r
+ case 17:\r
+ case 18:\r
+ case 19:\r
+ case 20:\r
+ case 21:\r
+ Key.ScanCode = SCAN_F6 + EscCode - 17;\r
+ break;\r
+ case 23:\r
+ case 24:\r
+ Key.ScanCode = SCAN_F11 + EscCode - 23;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ } else if (TerminalDevice->TtyEscapeIndex == 1) {\r
+ /* 2 character escape code */\r
+ TerminalDevice->TtyEscapeStr[TerminalDevice->TtyEscapeIndex++] = UnicodeChar;\r
+ continue;\r
+ } else {\r
+ DEBUG ((DEBUG_ERROR, "Unexpected state in escape2\n"));\r
+ }\r
+ }\r
\r
- UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
\r
- break;\r
+ if (Key.ScanCode != SCAN_NULL) {\r
+ Key.UnicodeChar = 0;\r
+ EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+ TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ continue;\r
+ }\r
+\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
+ break;\r
+\r
+ default:\r
+ //\r
+ // Invalid state. This should never happen.\r
+ //\r
+ ASSERT (FALSE);\r
+\r
+ UnicodeToEfiKeyFlushState (TerminalDevice);\r
+\r
+ break;\r
}\r
\r
if (UnicodeChar == ESC) {\r
}\r
\r
if (TerminalDevice->InputState != INPUT_STATE_DEFAULT) {\r
- Status = gBS->SetTimer(\r
+ Status = gBS->SetTimer (\r
TerminalDevice->TwoSecondTimeOut,\r
TimerRelative,\r
(UINT64)20000000\r
if (TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
Key.ScanCode = SCAN_NULL;\r
Key.UnicodeChar = CHAR_BACKSPACE;\r
- }\r
- else {\r
+ } else {\r
Key.ScanCode = SCAN_DELETE;\r
Key.UnicodeChar = 0;\r
}\r