#include "Terminal.h"\r
\r
\r
-\r
/**\r
Reads the next keystroke from the input device. The WaitForKey Event can\r
- be used to test for existance of a keystroke via WaitForEvent () call.\r
+ be used to test for existence of a keystroke via WaitForEvent () call.\r
\r
@param TerminalDevice Terminal driver private structure\r
@param KeyData A pointer to a buffer that is filled in with the\r
pressed.\r
\r
@retval EFI_SUCCESS The keystroke information was returned.\r
- @retval EFI_NOT_READY There was no keystroke data availiable.\r
+ @retval EFI_NOT_READY There was no keystroke data available.\r
@retval EFI_DEVICE_ERROR The keystroke information was not returned due\r
to hardware errors.\r
@retval EFI_INVALID_PARAMETER KeyData is NULL.\r
{\r
EFI_STATUS Status;\r
LIST_ENTRY *Link;\r
+ LIST_ENTRY *NotifyList;\r
TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
\r
if (KeyData == NULL) {\r
//\r
// Invoke notification functions if exist\r
//\r
- for (Link = TerminalDevice->NotifyList.ForwardLink; Link != &TerminalDevice->NotifyList; Link = Link->ForwardLink) {\r
+ NotifyList = &TerminalDevice->NotifyList;\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
/**\r
Check if the key already has been registered.\r
+ \r
+ If both RegsiteredData and InputData is NULL, then ASSERT().\r
\r
@param RegsiteredData A pointer to a buffer that is filled in with the\r
keystroke state data for the key that was\r
//\r
\r
/**\r
- Reset the input device and optionaly run diagnostics\r
+ Reset the input device and optionally run diagnostics\r
\r
@param This Protocol instance pointer.\r
@param ExtendedVerification Driver may perform diagnostics on reset.\r
\r
/**\r
Reads the next keystroke from the input device. The WaitForKey Event can\r
- be used to test for existance of a keystroke via WaitForEvent () call.\r
+ be used to test for existence of a keystroke via WaitForEvent () call.\r
\r
@param This Protocol instance pointer.\r
@param KeyData A pointer to a buffer that is filled in with the\r
pressed.\r
\r
@retval EFI_SUCCESS The keystroke information was returned.\r
- @retval EFI_NOT_READY There was no keystroke data availiable.\r
+ @retval EFI_NOT_READY There was no keystroke data available.\r
@retval EFI_DEVICE_ERROR The keystroke information was not returned due\r
to hardware errors.\r
@retval EFI_INVALID_PARAMETER KeyData is NULL.\r
\r
@retval EFI_SUCCESS The notification function was registered\r
successfully.\r
- @retval EFI_OUT_OF_RESOURCES Unable to allocate resources for necesssary data\r
+ @retval EFI_OUT_OF_RESOURCES Unable to allocate resources for necessary data\r
structures.\r
@retval EFI_INVALID_PARAMETER KeyData or NotifyHandle is NULL.\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
\r
if (KeyData == NULL || NotifyHandle == NULL || KeyNotificationFunction == NULL) {\r
//\r
// Return EFI_SUCCESS if the (KeyData, NotificationFunction) is already registered.\r
//\r
- for (Link = TerminalDevice->NotifyList.ForwardLink; Link != &TerminalDevice->NotifyList; Link = Link->ForwardLink) {\r
+ NotifyList = &TerminalDevice->NotifyList;\r
+ for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList,Link); Link = GetNextNode (NotifyList,Link)) {\r
CurrentNotify = CR (\r
Link,\r
TERMINAL_CONSOLE_IN_EX_NOTIFY,\r
TERMINAL_DEV *TerminalDevice;\r
LIST_ENTRY *Link;\r
TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
-\r
+ LIST_ENTRY *NotifyList;\r
+ \r
if (NotificationHandle == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
TerminalDevice = TERMINAL_CON_IN_EX_DEV_FROM_THIS (This);\r
\r
- for (Link = TerminalDevice->NotifyList.ForwardLink; Link != &TerminalDevice->NotifyList; Link = Link->ForwardLink) {\r
+ NotifyList = &TerminalDevice->NotifyList;\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
@retval EFI_SUCCESS There is key pending.\r
@retval EFI_NOT_READY There is no key pending.\r
- @retval EFI_DEVICE_ERROR If Serial IO is not attched to serial device.\r
+ @retval EFI_DEVICE_ERROR If Serial IO is not attached to serial device.\r
\r
**/\r
EFI_STATUS\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
}\r
\r
}\r
}\r
//\r
- // check whether serial buffer is empty\r
+ // Check whether serial buffer is empty.\r
//\r
Status = SerialIo->GetControl (SerialIo, &Control);\r
\r
- if (0 != (Control & EFI_SERIAL_INPUT_BUFFER_EMPTY)) {\r
+ if ((Control & EFI_SERIAL_INPUT_BUFFER_EMPTY) != 0) {\r
//\r
// Translate all the raw data in RawFIFO into EFI Key,\r
// according to different terminal type supported.\r
/**\r
Get one key out of serial buffer.\r
\r
- @param SerialIo Serial I/O protocl attached to the serial device.\r
+ @param SerialIo Serial I/O protocol attached to the serial device.\r
@param Output The fetched key.\r
\r
@return EFI_NOT_READY If serial buffer is empty.\r
Size = 1;\r
*Output = 0;\r
\r
+ //\r
+ // Read one key from serial I/O device.\r
+ //\r
Status = SerialIo->Read (SerialIo, &Size, Output);\r
\r
if (EFI_ERROR (Status)) {\r
)\r
{\r
EFI_INPUT_KEY Key;\r
-\r
- if (0 != (TerminalDevice->InputState & INPUT_STATE_ESC)) {\r
+ UINT32 InputState;\r
+ \r
+ InputState = TerminalDevice->InputState;\r
+ \r
+ if ((InputState & INPUT_STATE_ESC) != 0) {\r
Key.ScanCode = SCAN_ESC;\r
Key.UnicodeChar = 0;\r
EfiKeyFiFoInsertOneKey (TerminalDevice, Key);\r
}\r
\r
- if (0 != (TerminalDevice->InputState & INPUT_STATE_CSI)) {\r
+ if ((InputState & INPUT_STATE_CSI) != 0) {\r
Key.ScanCode = SCAN_NULL;\r
Key.UnicodeChar = CSI;\r
EfiKeyFiFoInsertOneKey (TerminalDevice, Key);\r
}\r
\r
- if (0 != (TerminalDevice->InputState & INPUT_STATE_LEFTOPENBRACKET)) {\r
+ if ((InputState & INPUT_STATE_LEFTOPENBRACKET) != 0) {\r
Key.ScanCode = SCAN_NULL;\r
Key.UnicodeChar = LEFTOPENBRACKET;\r
EfiKeyFiFoInsertOneKey (TerminalDevice, Key);\r
}\r
\r
- if (0 != (TerminalDevice->InputState & INPUT_STATE_O)) {\r
+ if ((InputState & INPUT_STATE_O) != 0) {\r
Key.ScanCode = SCAN_NULL;\r
Key.UnicodeChar = 'O';\r
EfiKeyFiFoInsertOneKey (TerminalDevice, Key);\r
}\r
\r
- if (0 != (TerminalDevice->InputState & INPUT_STATE_2)) {\r
+ if ((InputState & INPUT_STATE_2) != 0) {\r
Key.ScanCode = SCAN_NULL;\r
Key.UnicodeChar = '2';\r
EfiKeyFiFoInsertOneKey (TerminalDevice, Key);\r
}\r
\r
+ //\r
+ // Cancel the timer.\r
+ //\r
gBS->SetTimer (\r
TerminalDevice->TwoSecondTimeOut,\r
TimerCancel,\r
\r
The table below shows the keyboard input mappings that this function supports.\r
If the ESC sequence listed in one of the columns is presented, then it is translated\r
- into the coorespoding EFI Scan Code. If a matching sequence is not found, then the raw\r
+ into the corresponding EFI Scan Code. If a matching sequence is not found, then the raw\r
key strokes are converted into EFI Keys.\r
\r
2 seconds are allowed for an ESC sequence to be completed. If the ESC sequence is not\r