From e49ef4337f9766feaf6a4b1be94f41dd6caa31e7 Mon Sep 17 00:00:00 2001 From: vanjeff Date: Tue, 1 Jul 2008 06:34:04 +0000 Subject: [PATCH] Clean codes per ECC for TerminalDxe module. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5389 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/Console/TerminalDxe/Terminal.c | 179 ++-- .../Universal/Console/TerminalDxe/Terminal.h | 578 +++++++++--- .../Console/TerminalDxe/TerminalConIn.c | 820 +++++++++--------- .../Console/TerminalDxe/TerminalConOut.c | 431 ++++----- .../Universal/Console/TerminalDxe/Vtutf8.c | 2 +- 5 files changed, 1104 insertions(+), 906 deletions(-) diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c index 76b603c3a3..a1c2d5a63d 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c @@ -16,7 +16,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include "Terminal.h" -STATIC EFI_STATUS TerminalFreeNotifyList ( IN OUT LIST_ENTRY *ListHead @@ -209,6 +208,19 @@ TerminalDriverBindingSupported ( return Status; } + +/** + Start the controller. + + @param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL + instance. + @param Controller The handle of the controller to start. + @param RemainingDevicePath A pointer to the remaining portion of a devcie + path. + + @return EFI_SUCCESS. + +**/ EFI_STATUS EFIAPI TerminalDriverBindingStart ( @@ -216,23 +228,6 @@ TerminalDriverBindingStart ( IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) -/*++ - - Routine Description: - - Start the controller. - - Arguments: - - This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance. - Controller - The handle of the controller to start. - RemainingDevicePath - A pointer to the remaining portion of a devcie path. - - Returns: - - EFI_SUCCESS. - ---*/ { EFI_STATUS Status; EFI_SERIAL_IO_PROTOCOL *SerialIo; @@ -358,8 +353,8 @@ TerminalDriverBindingStart ( } TerminalType = FixedPcdGet8 (PcdDefaultTerminalType); - // must be between PcAnsiType (0) and VTUTF8Type (3) - ASSERT (TerminalType <= VTUTF8Type); + // must be between PCANSITYPE (0) and VTUTF8TYPE (3) + ASSERT (TerminalType <= VTUTF8TYPE); CopyMem (&DefaultNode->Guid, gTerminalType[TerminalType], sizeof (EFI_GUID)); RemainingDevicePath = (EFI_DEVICE_PATH_PROTOCOL*)DefaultNode; @@ -369,13 +364,13 @@ TerminalDriverBindingStart ( // Node = (VENDOR_DEVICE_PATH *)RemainingDevicePath; if (CompareGuid (&Node->Guid, &gEfiPcAnsiGuid)) { - TerminalType = PcAnsiType; + TerminalType = PCANSITYPE; } else if (CompareGuid (&Node->Guid, &gEfiVT100Guid)) { - TerminalType = VT100Type; + TerminalType = VT100TYPE; } else if (CompareGuid (&Node->Guid, &gEfiVT100PlusGuid)) { - TerminalType = VT100PlusType; + TerminalType = VT100PLUSTYPE; } else if (CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) { - TerminalType = VTUTF8Type; + TerminalType = VTUTF8TYPE; } else { goto Error; } @@ -544,7 +539,7 @@ TerminalDriverBindingStart ( // TerminalDevice->ControllerNameTable = NULL; switch (TerminalDevice->TerminalType) { - case PcAnsiType: + case PCANSITYPE: AddUnicodeString2 ( "eng", gTerminalComponentName.SupportedLanguages, @@ -562,7 +557,7 @@ TerminalDriverBindingStart ( break; - case VT100Type: + case VT100TYPE: AddUnicodeString2 ( "eng", gTerminalComponentName.SupportedLanguages, @@ -580,7 +575,7 @@ TerminalDriverBindingStart ( break; - case VT100PlusType: + case VT100PLUSTYPE: AddUnicodeString2 ( "eng", gTerminalComponentName.SupportedLanguages, @@ -598,7 +593,7 @@ TerminalDriverBindingStart ( break; - case VTUTF8Type: + case VTUTF8TYPE: AddUnicodeString2 ( "eng", gTerminalComponentName.SupportedLanguages, @@ -731,6 +726,21 @@ Error: return Status; } + +/** + Stop a device controller. + + @param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL + instance. + @param Controller A handle to the device being stopped. + @param NumberOfChildren The number of child device handles in + ChildHandleBuffer. + @param ChildHandleBuffer An array of child handles to be freed. + + @retval EFI_SUCCESS Operation successful. + @retval EFI_DEVICE_ERROR Devices error. + +**/ EFI_STATUS EFIAPI TerminalDriverBindingStop ( @@ -739,25 +749,6 @@ TerminalDriverBindingStop ( IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer ) -/*++ - - Routine Description: - - Stop a device controller. - - Arguments: - - This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance. - Controller - A handle to the device being stopped. - NumberOfChildren - The number of child device handles in ChildHandleBuffer. - ChildHandleBuffer - An array of child handles to be freed. - - Returns: - - EFI_SUCCESS - Operation successful. - EFI_DEVICE_ERROR - Devices error. - ---*/ { EFI_STATUS Status; UINTN Index; @@ -927,25 +918,19 @@ TerminalDriverBindingStop ( return EFI_SUCCESS; } -STATIC + +/** + + @param ListHead The list head + + @retval EFI_SUCCESS Free the notify list successfully + @retval EFI_INVALID_PARAMETER ListHead is invalid. + +**/ EFI_STATUS TerminalFreeNotifyList ( IN OUT LIST_ENTRY *ListHead ) -/*++ - -Routine Description: - -Arguments: - - ListHead - The list head - -Returns: - - EFI_SUCCESS - Free the notify list successfully - EFI_INVALID_PARAMETER - ListHead is invalid. - ---*/ { TERMINAL_CONSOLE_IN_EX_NOTIFY *NotifyNode; @@ -994,7 +979,7 @@ TerminalUpdateConsoleDevVariable ( // // Append terminal device path onto the variable. // - for (TerminalType = PcAnsiType; TerminalType <= VTUTF8Type; TerminalType++) { + for (TerminalType = PCANSITYPE; TerminalType <= VTUTF8TYPE; TerminalType++) { SetTerminalDevicePath (TerminalType, ParentDevicePath, &TempDevicePath); NewVariable = AppendDevicePathInstance (Variable, TempDevicePath); if (Variable != NULL) { @@ -1023,25 +1008,21 @@ TerminalUpdateConsoleDevVariable ( return ; } + +/** + Remove console device variable. + + @param VariableName A pointer to the variable name. + @param ParentDevicePath A pointer to the parent device path. + + @return None. + +**/ VOID TerminalRemoveConsoleDevVariable ( IN CHAR16 *VariableName, IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath ) -/*++ - - Routine Description: - - Remove console device variable. - - Arguments: - - VariableName - A pointer to the variable name. - ParentDevicePath - A pointer to the parent device path. - - Returns: - ---*/ { EFI_STATUS Status; BOOLEAN FoundOne; @@ -1091,7 +1072,7 @@ TerminalRemoveConsoleDevVariable ( // Loop through all the terminal types that this driver supports // Match = FALSE; - for (TerminalType = PcAnsiType; TerminalType <= VTUTF8Type; TerminalType++) { + for (TerminalType = PCANSITYPE; TerminalType <= VTUTF8TYPE; TerminalType++) { SetTerminalDevicePath (TerminalType, ParentDevicePath, &TempDevicePath); @@ -1146,32 +1127,26 @@ TerminalRemoveConsoleDevVariable ( return ; } + +/** + Read the EFI variable (VendorGuid/Name) and return a dynamically allocated + buffer, and the size of the buffer. On failure return NULL. + + @param Name String part of EFI variable name + @param VendorGuid GUID part of EFI variable name + @param VariableSize Returns the size of the EFI variable that was read + + @return Dynamically allocated memory that contains a copy of the EFI variable. + @return Caller is repsoncible freeing the buffer. + @retval NULL Variable was not read + +**/ VOID * TerminalGetVariableAndSize ( IN CHAR16 *Name, IN EFI_GUID *VendorGuid, OUT UINTN *VariableSize ) -/*++ - -Routine Description: - Read the EFI variable (VendorGuid/Name) and return a dynamically allocated - buffer, and the size of the buffer. On failure return NULL. - -Arguments: - Name - String part of EFI variable name - - VendorGuid - GUID part of EFI variable name - - VariableSize - Returns the size of the EFI variable that was read - -Returns: - Dynamically allocated memory that contains a copy of the EFI variable. - Caller is repsoncible freeing the buffer. - - NULL - Variable was not read - ---*/ { EFI_STATUS Status; UINTN BufferSize; @@ -1245,7 +1220,7 @@ SetTerminalDevicePath ( // switch (TerminalType) { - case PcAnsiType: + case PCANSITYPE: CopyMem ( &Node.Guid, &gEfiPcAnsiGuid, @@ -1253,7 +1228,7 @@ SetTerminalDevicePath ( ); break; - case VT100Type: + case VT100TYPE: CopyMem ( &Node.Guid, &gEfiVT100Guid, @@ -1261,7 +1236,7 @@ SetTerminalDevicePath ( ); break; - case VT100PlusType: + case VT100PLUSTYPE: CopyMem ( &Node.Guid, &gEfiVT100PlusGuid, @@ -1269,7 +1244,7 @@ SetTerminalDevicePath ( ); break; - case VTUTF8Type: + case VTUTF8TYPE: CopyMem ( &Node.Guid, &gEfiVTUTF8Guid, diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h index 86808bbc56..eaa4a74e27 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h @@ -12,8 +12,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ -#ifndef _TERMINAL_H -#define _TERMINAL_H +#ifndef _TERMINAL_H_ +#define _TERMINAL_H_ #include @@ -121,10 +121,10 @@ typedef union { UINT8 Utf8_3[3]; } UTF8_CHAR; -#define PcAnsiType 0 -#define VT100Type 1 -#define VT100PlusType 2 -#define VTUTF8Type 3 +#define PCANSITYPE 0 +#define VT100TYPE 1 +#define VT100PLUSTYPE 2 +#define VTUTF8TYPE 3 #define LEFTOPENBRACKET 0x5b // '[' #define ACAP 0x41 @@ -165,9 +165,17 @@ extern EFI_COMPONENT_NAME_PROTOCOL gTerminalComponentName; extern EFI_COMPONENT_NAME2_PROTOCOL gTerminalComponentName2; extern EFI_GUID gSimpleTextInExNotifyGuid; -// -// Prototypes -// + +/** + The user Entry Point for module Terminal. The user code starts with this function. + + @param[in] ImageHandle The firmware allocated handle for the EFI image. + @param[in] SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The entry point is executed successfully. + @retval other Some error occurs when executing this entry point. + +**/ EFI_STATUS EFIAPI InitializeTerminal ( @@ -176,6 +184,20 @@ InitializeTerminal ( ) ; +/** + Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.Reset(). + This driver only perform dependent serial device reset regardless of + the value of ExtendeVerification + + @param This Indicates the calling context. + @param ExtendedVerification Skip by this driver. + + @return EFI_SUCCESS + @return The reset operation succeeds. + @return EFI_DEVICE_ERROR + @return The dependent serial port reset fails. + +**/ EFI_STATUS EFIAPI TerminalConInReset ( @@ -184,6 +206,23 @@ TerminalConInReset ( ) ; + +/** + Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke(). + + @param This Indicates the calling context. + @param Key A pointer to a buffer that is filled in with the + keystroke information for the key that was sent + from terminal. + + @return EFI_SUCCESS + @return The keystroke information is returned successfully. + @return EFI_NOT_READY + @return There is no keystroke data available. + @return EFI_DEVICE_ERROR + @return The dependent serial device encounters error. + +**/ EFI_STATUS EFIAPI TerminalConInReadKeyStroke ( @@ -193,29 +232,36 @@ TerminalConInReadKeyStroke ( ; +/** + + @param RegsiteredData A pointer to a buffer that is filled in with the + keystroke state data for the key that was + registered. + @param InputData A pointer to a buffer that is filled in with the + keystroke state data for the key that was + pressed. + + @retval TRUE Key be pressed matches a registered key. + @retval FLASE Match failed. + +**/ BOOLEAN IsKeyRegistered ( IN EFI_KEY_DATA *RegsiteredData, IN EFI_KEY_DATA *InputData ) -/*++ - -Routine Description: - -Arguments: - - RegsiteredData - A pointer to a buffer that is filled in with the keystroke - state data for the key that was registered. - InputData - A pointer to a buffer that is filled in with the keystroke - state data for the key that was pressed. - -Returns: - TRUE - Key be pressed matches a registered key. - FLASE - Match failed. - ---*/ ; +/** + Event notification function for EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.WaitForKeyEx event + Signal the event if there is key available + + @param Event Indicates the event that invoke this function. + @param Context Indicates the calling context. + + @return none. + +**/ VOID EFIAPI TerminalConInWaitForKeyEx ( @@ -223,86 +269,96 @@ TerminalConInWaitForKeyEx ( IN VOID *Context ) ; + // // Simple Text Input Ex protocol prototypes // +/** + Reset the input device and optionaly run diagnostics + + @param This Protocol instance pointer. + @param ExtendedVerification Driver may perform diagnostics on reset. + + @retval EFI_SUCCESS The device was reset. + @retval EFI_DEVICE_ERROR The device is not functioning properly and could + not be reset. + +**/ EFI_STATUS EFIAPI TerminalConInResetEx ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN BOOLEAN ExtendedVerification ) -/*++ - - Routine Description: - Reset the input device and optionaly run diagnostics - - Arguments: - This - Protocol instance pointer. - ExtendedVerification - Driver may perform diagnostics on reset. - - Returns: - EFI_SUCCESS - The device was reset. - EFI_DEVICE_ERROR - The device is not functioning properly and could - not be reset. - ---*/ ; +/** + Reads the next keystroke from the input device. The WaitForKey Event can + be used to test for existance of a keystroke via WaitForEvent () call. + + @param This Protocol instance pointer. + @param KeyData A pointer to a buffer that is filled in with the + keystroke state data for the key that was + pressed. + + @retval EFI_SUCCESS The keystroke information was returned. + @retval EFI_NOT_READY There was no keystroke data availiable. + @retval EFI_DEVICE_ERROR The keystroke information was not returned due + to hardware errors. + @retval EFI_INVALID_PARAMETER KeyData is NULL. + +**/ EFI_STATUS EFIAPI TerminalConInReadKeyStrokeEx ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, OUT EFI_KEY_DATA *KeyData ) -/*++ - - Routine Description: - Reads the next keystroke from the input device. The WaitForKey Event can - be used to test for existance of a keystroke via WaitForEvent () call. - - Arguments: - This - Protocol instance pointer. - KeyData - A pointer to a buffer that is filled in with the keystroke - state data for the key that was pressed. - - Returns: - EFI_SUCCESS - The keystroke information was returned. - EFI_NOT_READY - There was no keystroke data availiable. - EFI_DEVICE_ERROR - The keystroke information was not returned due to - hardware errors. - EFI_INVALID_PARAMETER - KeyData is NULL. - ---*/ ; +/** + Set certain state for the input device. + + @param This Protocol instance pointer. + @param KeyToggleState A pointer to the EFI_KEY_TOGGLE_STATE to set the + state for the input device. + + @retval EFI_SUCCESS The device state was set successfully. + @retval EFI_DEVICE_ERROR The device is not functioning correctly and + could not have the setting adjusted. + @retval EFI_UNSUPPORTED The device does not have the ability to set its + state. + @retval EFI_INVALID_PARAMETER KeyToggleState is NULL. + +**/ EFI_STATUS EFIAPI TerminalConInSetState ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_TOGGLE_STATE *KeyToggleState ) -/*++ - - Routine Description: - Set certain state for the input device. - - Arguments: - This - Protocol instance pointer. - KeyToggleState - A pointer to the EFI_KEY_TOGGLE_STATE to set the - state for the input device. - - Returns: - EFI_SUCCESS - The device state was set successfully. - EFI_DEVICE_ERROR - The device is not functioning correctly and could - not have the setting adjusted. - EFI_UNSUPPORTED - The device does not have the ability to set its state. - EFI_INVALID_PARAMETER - KeyToggleState is NULL. - ---*/ ; +/** + Register a notification function for a particular keystroke for the input device. + + @param This Protocol instance pointer. + @param KeyData A pointer to a buffer that is filled in with the + keystroke information data for the key that was + pressed. + @param KeyNotificationFunction Points to the function to be called when the key + sequence is typed specified by KeyData. + @param NotifyHandle Points to the unique handle assigned to the + registered notification. + + @retval EFI_SUCCESS The notification function was registered + successfully. + @retval EFI_OUT_OF_RESOURCES Unable to allocate resources for necesssary data + structures. + @retval EFI_INVALID_PARAMETER KeyData or NotifyHandle is NULL. + +**/ EFI_STATUS EFIAPI TerminalConInRegisterKeyNotify ( @@ -311,50 +367,39 @@ TerminalConInRegisterKeyNotify ( IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, OUT EFI_HANDLE *NotifyHandle ) -/*++ - - Routine Description: - Register a notification function for a particular keystroke for the input device. - - Arguments: - This - Protocol instance pointer. - KeyData - A pointer to a buffer that is filled in with the keystroke - information data for the key that was pressed. - KeyNotificationFunction - Points to the function to be called when the key - sequence is typed specified by KeyData. - NotifyHandle - Points to the unique handle assigned to the registered notification. - - Returns: - EFI_SUCCESS - The notification function was registered successfully. - EFI_OUT_OF_RESOURCES - Unable to allocate resources for necesssary data structures. - EFI_INVALID_PARAMETER - KeyData or NotifyHandle is NULL. - ---*/ ; +/** + Remove a registered notification function from a particular keystroke. + + @param This Protocol instance pointer. + @param NotificationHandle The handle of the notification function being + unregistered. + + @retval EFI_SUCCESS The notification function was unregistered + successfully. + @retval EFI_INVALID_PARAMETER The NotificationHandle is invalid. + @retval EFI_NOT_FOUND Can not find the matching entry in database. + +**/ EFI_STATUS EFIAPI TerminalConInUnregisterKeyNotify ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_HANDLE NotificationHandle ) -/*++ - - Routine Description: - Remove a registered notification function from a particular keystroke. - - Arguments: - This - Protocol instance pointer. - NotificationHandle - The handle of the notification function being unregistered. - - Returns: - EFI_SUCCESS - The notification function was unregistered successfully. - EFI_INVALID_PARAMETER - The NotificationHandle is invalid. - EFI_NOT_FOUND - Can not find the matching entry in database. - ---*/ ; +/** + Event notification function for EFI_SIMPLE_TEXT_INPUT_PROTOCOL.WaitForKey event + Signal the event if there is key available + + @param Event Indicates the event that invoke this function. + @param Context Indicates the calling context. + + @return None + +**/ VOID EFIAPI TerminalConInWaitForKey ( @@ -363,6 +408,23 @@ TerminalConInWaitForKey ( ) ; +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.Reset(). + If ExtendeVerification is TRUE, then perform dependent serial device reset, + and set display mode to mode 0. + If ExtendedVerification is FALSE, only set display mode to mode 0. + + @param This Indicates the calling context. + @param ExtendedVerification Indicates that the driver may perform a more + exhaustive verification operation of the device + during reset. + + @return EFI_SUCCESS + @return The reset operation succeeds. + @return EFI_DEVICE_ERROR + @return The terminal is not functioning correctly or the serial port reset fails. + +**/ EFI_STATUS EFIAPI TerminalConOutReset ( @@ -371,6 +433,22 @@ TerminalConOutReset ( ) ; +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString(). + The Unicode string will be converted to terminal expressible data stream + and send to terminal via serial port. + + @param This Indicates the calling context. + @param WString The Null-terminated Unicode string to be displayed + on the terminal screen. + + @return EFI_SUCCESS The string is output successfully. + @return EFI_DEVICE_ERROR The serial port fails to send the string out. + @return EFI_WARN_UNKNOWN_GLYPH Indicates that some of the characters in the Unicode string could not + be rendered and are skipped. + @return EFI_UNSUPPORTED + +**/ EFI_STATUS EFIAPI TerminalConOutOutputString ( @@ -379,6 +457,20 @@ TerminalConOutOutputString ( ) ; +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.TestString(). + If one of the characters in the *Wstring is + neither valid Unicode drawing characters, + not ASCII code, then this function will return + EFI_UNSUPPORTED. + + @param This Indicates the calling context. + @param WString The Null-terminated Unicode string to be tested. + + @return EFI_SUCCESS The terminal is capable of rendering the output string. + @return EFI_UNSUPPORTED Some of the characters in the Unicode string cannot be rendered. + +**/ EFI_STATUS EFIAPI TerminalConOutTestString ( @@ -387,6 +479,23 @@ TerminalConOutTestString ( ) ; +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.QueryMode(). + It returns information for an available text mode + that the terminal supports. + In this driver, we support text mode 80x25 (mode 0), + 80x50 (mode 1), 100x31 (mode 2). + + @param This Indicates the calling context. + @param ModeNumber The mode number to return information on. + @param Columns The returned columns of the requested mode. + @param Rows The returned rows of the requested mode. + + @return EFI_SUCCESS The requested mode information is returned. + @return EFI_UNSUPPORTED The mode number is not valid. + @return EFI_DEVICE_ERROR + +**/ EFI_STATUS EFIAPI TerminalConOutQueryMode ( @@ -397,6 +506,20 @@ TerminalConOutQueryMode ( ) ; +/** + Implements EFI_SIMPLE_TEXT_OUT.SetMode(). + Set the terminal to a specified display mode. + In this driver, we only support mode 0. + + @param This Indicates the calling context. + @param ModeNumber The text mode to set. + + @return EFI_SUCCESS The requested text mode is set. + @return EFI_DEVICE_ERROR The requested text mode cannot be set + because of serial device error. + @return EFI_UNSUPPORTED The text mode number is not valid. + +**/ EFI_STATUS EFIAPI TerminalConOutSetMode ( @@ -405,6 +528,18 @@ TerminalConOutSetMode ( ) ; +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetAttribute(). + + @param This Indicates the calling context. + @param Attribute The attribute to set. Only bit0..6 are valid, all other bits + are undefined and must be zero. + + @return EFI_SUCCESS The requested attribute is set. + @return EFI_DEVICE_ERROR The requested attribute cannot be set due to serial port error. + @return EFI_UNSUPPORTED The attribute requested is not defined by EFI spec. + +**/ EFI_STATUS EFIAPI TerminalConOutSetAttribute ( @@ -413,6 +548,18 @@ TerminalConOutSetAttribute ( ) ; +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.ClearScreen(). + It clears the ANSI terminal's display to the + currently selected background color. + + @param This Indicates the calling context. + + @return EFI_SUCCESS The operation completed successfully. + @return EFI_DEVICE_ERROR The terminal screen cannot be cleared due to serial port error. + @return EFI_UNSUPPORTED The terminal is not in a valid display mode. + +**/ EFI_STATUS EFIAPI TerminalConOutClearScreen ( @@ -420,6 +567,19 @@ TerminalConOutClearScreen ( ) ; +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetCursorPosition(). + + @param This Indicates the calling context. + @param Column The row to set cursor to. + @param Row The column to set cursor to. + + @return EFI_SUCCESS The operation completed successfully. + @return EFI_DEVICE_ERROR The request fails due to serial port error. + @return EFI_UNSUPPORTED The terminal is not in a valid text mode, or the cursor position + is invalid for current mode. + +**/ EFI_STATUS EFIAPI TerminalConOutSetCursorPosition ( @@ -429,6 +589,18 @@ TerminalConOutSetCursorPosition ( ) ; +/** + Implements SIMPLE_TEXT_OUTPUT.EnableCursor(). + In this driver, the cursor cannot be hidden. + + @param This Indicates the calling context. + @param Visible If TRUE, the cursor is set to be visible, + If FALSE, the cursor is set to be invisible. + + @return EFI_SUCCESS The request is valid. + @return EFI_UNSUPPORTED The terminal does not support cursor hidden. + +**/ EFI_STATUS EFIAPI TerminalConOutEnableCursor ( @@ -592,6 +764,19 @@ TerminalComponentNameGetControllerName ( // // internal functions // + +/** + Check for a pending key in the Efi Key FIFO or Serial device buffer. + + @param This Indicates the calling context. + + @return EFI_SUCCESS + @return There is key pending. + @return EFI_NOT_READY + @return There is no key pending. + @return EFI_DEVICE_ERROR + +**/ EFI_STATUS TerminalConInCheckForKey ( IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This @@ -605,6 +790,15 @@ TerminalUpdateConsoleDevVariable ( ) ; +/** + Remove console device variable. + + @param VariableName A pointer to the variable name. + @param ParentDevicePath A pointer to the parent device path. + + @return None. + +**/ VOID TerminalRemoveConsoleDevVariable ( IN CHAR16 *VariableName, @@ -612,6 +806,19 @@ TerminalRemoveConsoleDevVariable ( ) ; +/** + Read the EFI variable (VendorGuid/Name) and return a dynamically allocated + buffer, and the size of the buffer. On failure return NULL. + + @param Name String part of EFI variable name + @param VendorGuid GUID part of EFI variable name + @param VariableSize Returns the size of the EFI variable that was read + + @return Dynamically allocated memory that contains a copy of the EFI variable. + @return Caller is repsoncible freeing the buffer. + @retval NULL Variable was not read + +**/ VOID * TerminalGetVariableAndSize ( IN CHAR16 *Name, @@ -646,6 +853,18 @@ InitializeEfiKeyFiFo ( ) ; +/** + Get one key out of serial buffer. + + @param SerialIo Serial I/O protocl attached to the serial device. + @param Input The fetched key. + + @return EFI_NOT_READY If serial buffer is empty. + @return EFI_DEVICE_ERROR If reading serial buffer encounter error. + @return EFI_SUCCESS If reading serial buffer successfully, put + the fetched key to the parameter output. + +**/ EFI_STATUS GetOneKeyFromSerial ( EFI_SERIAL_IO_PROTOCOL *SerialIo, @@ -653,6 +872,17 @@ GetOneKeyFromSerial ( ) ; +/** + Insert one byte raw data into the Raw Data FIFO. + + @param TerminalDevice Terminal driver private structure. + @param Input The key will be input. + + @return TRUE If insert successfully. + @return FLASE If Raw Data buffer is full before key insertion, + and the key is lost. + +**/ BOOLEAN RawFiFoInsertOneKey ( TERMINAL_DEV *TerminalDevice, @@ -660,6 +890,16 @@ RawFiFoInsertOneKey ( ) ; +/** + Remove one pre-fetched key out of the Raw Data FIFO. + + @param TerminalDevice Terminal driver private structure. + @param Output The key will be removed. + + @return TRUE If insert successfully. + @return FLASE If Raw Data FIFO buffer is empty before remove operation. + +**/ BOOLEAN RawFiFoRemoveOneKey ( TERMINAL_DEV *TerminalDevice, @@ -667,18 +907,47 @@ RawFiFoRemoveOneKey ( ) ; +/** + Clarify whether Raw Data FIFO buffer is empty. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If Raw Data FIFO buffer is empty. + @return FLASE If Raw Data FIFO buffer is not empty. + +**/ BOOLEAN IsRawFiFoEmpty ( TERMINAL_DEV *TerminalDevice ) ; +/** + Clarify whether Raw Data FIFO buffer is full. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If Raw Data FIFO buffer is full. + @return FLASE If Raw Data FIFO buffer is not full. + +**/ BOOLEAN IsRawFiFoFull ( TERMINAL_DEV *TerminalDevice ) ; +/** + Insert one pre-fetched key into the FIFO buffer. + + @param TerminalDevice Terminal driver private structure. + @param Key The key will be input. + + @return TRUE If insert successfully. + @return FLASE If FIFO buffer is full before key insertion, + and the key is lost. + +**/ BOOLEAN EfiKeyFiFoInsertOneKey ( TERMINAL_DEV *TerminalDevice, @@ -686,6 +955,16 @@ EfiKeyFiFoInsertOneKey ( ) ; +/** + Remove one pre-fetched key out of the FIFO buffer. + + @param TerminalDevice Terminal driver private structure. + @param Output The key will be removed. + + @return TRUE If insert successfully. + @return FLASE If FIFO buffer is empty before remove operation. + +**/ BOOLEAN EfiKeyFiFoRemoveOneKey ( TERMINAL_DEV *TerminalDevice, @@ -693,18 +972,47 @@ EfiKeyFiFoRemoveOneKey ( ) ; +/** + Clarify whether FIFO buffer is empty. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If FIFO buffer is empty. + @return FLASE If FIFO buffer is not empty. + +**/ BOOLEAN IsEfiKeyFiFoEmpty ( TERMINAL_DEV *TerminalDevice ) ; +/** + Clarify whether FIFO buffer is full. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If FIFO buffer is full. + @return FLASE If FIFO buffer is not full. + +**/ BOOLEAN IsEfiKeyFiFoFull ( TERMINAL_DEV *TerminalDevice ) ; +/** + Insert one pre-fetched key into the Unicode FIFO buffer. + + @param TerminalDevice Terminal driver private structure. + @param Input The key will be input. + + @return TRUE If insert successfully. + @return FLASE If Unicode FIFO buffer is full before key insertion, + and the key is lost. + +**/ BOOLEAN UnicodeFiFoInsertOneKey ( TERMINAL_DEV *TerminalDevice, @@ -712,6 +1020,16 @@ UnicodeFiFoInsertOneKey ( ) ; +/** + Remove one pre-fetched key out of the Unicode FIFO buffer. + + @param TerminalDevice Terminal driver private structure. + @param Output The key will be removed. + + @return TRUE If insert successfully. + @return FLASE If Unicode FIFO buffer is empty before remove operation. + +**/ BOOLEAN UnicodeFiFoRemoveOneKey ( TERMINAL_DEV *TerminalDevice, @@ -719,12 +1037,30 @@ UnicodeFiFoRemoveOneKey ( ) ; +/** + Clarify whether Unicode FIFO buffer is empty. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If Unicode FIFO buffer is empty. + @return FLASE If Unicode FIFO buffer is not empty. + +**/ BOOLEAN IsUnicodeFiFoEmpty ( TERMINAL_DEV *TerminalDevice ) ; +/** + Clarify whether Unicode FIFO buffer is full. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If Unicode FIFO buffer is full. + @return FLASE If Unicode FIFO buffer is not full. + +**/ BOOLEAN IsUnicodeFiFoFull ( TERMINAL_DEV *TerminalDevice @@ -765,26 +1101,6 @@ AnsiTestString ( ) ; -// -// internal functions for VT100 -// -EFI_STATUS -VT100TestString ( - IN TERMINAL_DEV *VT100Device, - IN CHAR16 *WString - ) -; - -// -// internal functions for VT100Plus -// -EFI_STATUS -VT100PlusTestString ( - IN TERMINAL_DEV *TerminalDevice, - IN CHAR16 *WString - ) -; - // // internal functions for VTUTF8 // diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c index 404e46e0e7..62abf90762 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c @@ -1,7 +1,7 @@ -/**@file +/** @file Implementation for EFI_SIMPLE_TEXT_INPUT_PROTOCOL protocol. -Copyright (c) 2006 - 2007, Intel Corporation.
+Copyright (c) 2006 - 2008, Intel Corporation.
All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -15,31 +15,28 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include "Terminal.h" -STATIC + +/** + Reads the next keystroke from the input device. The WaitForKey Event can + be used to test for existance of a keystroke via WaitForEvent () call. + + @param TerminalDevice Terminal driver private structure + @param KeyData A pointer to a buffer that is filled in with the + keystroke state data for the key that was + pressed. + + @retval EFI_SUCCESS The keystroke information was returned. + @retval EFI_NOT_READY There was no keystroke data availiable. + @retval EFI_DEVICE_ERROR The keystroke information was not returned due + to hardware errors. + @retval EFI_INVALID_PARAMETER KeyData is NULL. + +**/ EFI_STATUS ReadKeyStrokeWorker ( IN TERMINAL_DEV *TerminalDevice, OUT EFI_KEY_DATA *KeyData ) -/*++ - - Routine Description: - Reads the next keystroke from the input device. The WaitForKey Event can - be used to test for existance of a keystroke via WaitForEvent () call. - - Arguments: - TerminalDevice - Terminal driver private structure - KeyData - A pointer to a buffer that is filled in with the keystroke - state data for the key that was pressed. - - Returns: - EFI_SUCCESS - The keystroke information was returned. - EFI_NOT_READY - There was no keystroke data availiable. - EFI_DEVICE_ERROR - The keystroke information was not returned due to - hardware errors. - EFI_INVALID_PARAMETER - KeyData is NULL. - ---*/ { EFI_STATUS Status; LIST_ENTRY *Link; @@ -86,35 +83,26 @@ ReadKeyStrokeWorker ( } +/** + Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.Reset(). + This driver only perform dependent serial device reset regardless of + the value of ExtendeVerification + @param This Indicates the calling context. + @param ExtendedVerification Skip by this driver. + + @return EFI_SUCCESS + @return The reset operation succeeds. + @return EFI_DEVICE_ERROR + @return The dependent serial port reset fails. + +**/ EFI_STATUS EFIAPI TerminalConInReset ( IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, IN BOOLEAN ExtendedVerification ) -/*++ - Routine Description: - - Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.Reset(). - This driver only perform dependent serial device reset regardless of - the value of ExtendeVerification - - Arguments: - - This - Indicates the calling context. - - ExtendedVerification - Skip by this driver. - - Returns: - - EFI_SUCCESS - The reset operation succeeds. - - EFI_DEVICE_ERROR - The dependent serial port reset fails. - ---*/ { EFI_STATUS Status; TERMINAL_DEV *TerminalDevice; @@ -150,36 +138,29 @@ TerminalConInReset ( return Status; } + +/** + Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke(). + + @param This Indicates the calling context. + @param Key A pointer to a buffer that is filled in with the + keystroke information for the key that was sent + from terminal. + + @return EFI_SUCCESS + @return The keystroke information is returned successfully. + @return EFI_NOT_READY + @return There is no keystroke data available. + @return EFI_DEVICE_ERROR + @return The dependent serial device encounters error. + +**/ EFI_STATUS EFIAPI TerminalConInReadKeyStroke ( IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, OUT EFI_INPUT_KEY *Key ) -/*++ - Routine Description: - - Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke(). - - Arguments: - - This - Indicates the calling context. - - Key - A pointer to a buffer that is filled in with the keystroke - information for the key that was sent from terminal. - - Returns: - - EFI_SUCCESS - The keystroke information is returned successfully. - - EFI_NOT_READY - There is no keystroke data available. - - EFI_DEVICE_ERROR - The dependent serial device encounters error. - ---*/ { TERMINAL_DEV *TerminalDevice; EFI_STATUS Status; @@ -202,27 +183,25 @@ TerminalConInReadKeyStroke ( } + +/** + + @param RegsiteredData A pointer to a buffer that is filled in with the + keystroke state data for the key that was + registered. + @param InputData A pointer to a buffer that is filled in with the + keystroke state data for the key that was + pressed. + + @retval TRUE Key be pressed matches a registered key. + @retval FLASE Match failed. + +**/ BOOLEAN IsKeyRegistered ( IN EFI_KEY_DATA *RegsiteredData, IN EFI_KEY_DATA *InputData ) -/*++ - -Routine Description: - -Arguments: - - RegsiteredData - A pointer to a buffer that is filled in with the keystroke - state data for the key that was registered. - InputData - A pointer to a buffer that is filled in with the keystroke - state data for the key that was pressed. - -Returns: - TRUE - Key be pressed matches a registered key. - FLASE - Match failed. - ---*/ { ASSERT (RegsiteredData != NULL && InputData != NULL); @@ -235,29 +214,23 @@ Returns: } + +/** + Event notification function for EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.WaitForKeyEx event + Signal the event if there is key available + + @param Event Indicates the event that invoke this function. + @param Context Indicates the calling context. + + @return none. + +**/ VOID EFIAPI TerminalConInWaitForKeyEx ( IN EFI_EVENT Event, IN VOID *Context ) -/*++ - Routine Description: - - Event notification function for EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.WaitForKeyEx event - Signal the event if there is key available - - Arguments: - - Event - Indicates the event that invoke this function. - - Context - Indicates the calling context. - - Returns: - - N/A - ---*/ { TERMINAL_DEV *TerminalDevice; @@ -271,27 +244,24 @@ TerminalConInWaitForKeyEx ( // Simple Text Input Ex protocol functions // + +/** + Reset the input device and optionaly run diagnostics + + @param This Protocol instance pointer. + @param ExtendedVerification Driver may perform diagnostics on reset. + + @retval EFI_SUCCESS The device was reset. + @retval EFI_DEVICE_ERROR The device is not functioning properly and could + not be reset. + +**/ EFI_STATUS EFIAPI TerminalConInResetEx ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN BOOLEAN ExtendedVerification ) -/*++ - - Routine Description: - Reset the input device and optionaly run diagnostics - - Arguments: - This - Protocol instance pointer. - ExtendedVerification - Driver may perform diagnostics on reset. - - Returns: - EFI_SUCCESS - The device was reset. - EFI_DEVICE_ERROR - The device is not functioning properly and could - not be reset. - ---*/ { EFI_STATUS Status; TERMINAL_DEV *TerminalDevice; @@ -307,31 +277,29 @@ TerminalConInResetEx ( } + +/** + Reads the next keystroke from the input device. The WaitForKey Event can + be used to test for existance of a keystroke via WaitForEvent () call. + + @param This Protocol instance pointer. + @param KeyData A pointer to a buffer that is filled in with the + keystroke state data for the key that was + pressed. + + @retval EFI_SUCCESS The keystroke information was returned. + @retval EFI_NOT_READY There was no keystroke data availiable. + @retval EFI_DEVICE_ERROR The keystroke information was not returned due + to hardware errors. + @retval EFI_INVALID_PARAMETER KeyData is NULL. + +**/ EFI_STATUS EFIAPI TerminalConInReadKeyStrokeEx ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, OUT EFI_KEY_DATA *KeyData ) -/*++ - - Routine Description: - Reads the next keystroke from the input device. The WaitForKey Event can - be used to test for existance of a keystroke via WaitForEvent () call. - - Arguments: - This - Protocol instance pointer. - KeyData - A pointer to a buffer that is filled in with the keystroke - state data for the key that was pressed. - - Returns: - EFI_SUCCESS - The keystroke information was returned. - EFI_NOT_READY - There was no keystroke data availiable. - EFI_DEVICE_ERROR - The keystroke information was not returned due to - hardware errors. - EFI_INVALID_PARAMETER - KeyData is NULL. - ---*/ { TERMINAL_DEV *TerminalDevice; @@ -345,30 +313,28 @@ TerminalConInReadKeyStrokeEx ( } + +/** + Set certain state for the input device. + + @param This Protocol instance pointer. + @param KeyToggleState A pointer to the EFI_KEY_TOGGLE_STATE to set the + state for the input device. + + @retval EFI_SUCCESS The device state was set successfully. + @retval EFI_DEVICE_ERROR The device is not functioning correctly and + could not have the setting adjusted. + @retval EFI_UNSUPPORTED The device does not have the ability to set its + state. + @retval EFI_INVALID_PARAMETER KeyToggleState is NULL. + +**/ EFI_STATUS EFIAPI TerminalConInSetState ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_TOGGLE_STATE *KeyToggleState ) -/*++ - - Routine Description: - Set certain state for the input device. - - Arguments: - This - Protocol instance pointer. - KeyToggleState - A pointer to the EFI_KEY_TOGGLE_STATE to set the - state for the input device. - - Returns: - EFI_SUCCESS - The device state was set successfully. - EFI_DEVICE_ERROR - The device is not functioning correctly and could - not have the setting adjusted. - EFI_UNSUPPORTED - The device does not have the ability to set its state. - EFI_INVALID_PARAMETER - KeyToggleState is NULL. - ---*/ { if (KeyToggleState == NULL) { return EFI_INVALID_PARAMETER; @@ -377,6 +343,26 @@ TerminalConInSetState ( return EFI_SUCCESS; } + +/** + Register a notification function for a particular keystroke for the input device. + + @param This Protocol instance pointer. + @param KeyData A pointer to a buffer that is filled in with the + keystroke information data for the key that was + pressed. + @param KeyNotificationFunction Points to the function to be called when the key + sequence is typed specified by KeyData. + @param NotifyHandle Points to the unique handle assigned to the + registered notification. + + @retval EFI_SUCCESS The notification function was registered + successfully. + @retval EFI_OUT_OF_RESOURCES Unable to allocate resources for necesssary data + structures. + @retval EFI_INVALID_PARAMETER KeyData or NotifyHandle is NULL. + +**/ EFI_STATUS EFIAPI TerminalConInRegisterKeyNotify ( @@ -385,25 +371,6 @@ TerminalConInRegisterKeyNotify ( IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, OUT EFI_HANDLE *NotifyHandle ) -/*++ - - Routine Description: - Register a notification function for a particular keystroke for the input device. - - Arguments: - This - Protocol instance pointer. - KeyData - A pointer to a buffer that is filled in with the keystroke - information data for the key that was pressed. - KeyNotificationFunction - Points to the function to be called when the key - sequence is typed specified by KeyData. - NotifyHandle - Points to the unique handle assigned to the registered notification. - - Returns: - EFI_SUCCESS - The notification function was registered successfully. - EFI_OUT_OF_RESOURCES - Unable to allocate resources for necesssary data structures. - EFI_INVALID_PARAMETER - KeyData or NotifyHandle is NULL. - ---*/ { EFI_STATUS Status; TERMINAL_DEV *TerminalDevice; @@ -462,27 +429,26 @@ TerminalConInRegisterKeyNotify ( return EFI_SUCCESS; } + +/** + Remove a registered notification function from a particular keystroke. + + @param This Protocol instance pointer. + @param NotificationHandle The handle of the notification function being + unregistered. + + @retval EFI_SUCCESS The notification function was unregistered + successfully. + @retval EFI_INVALID_PARAMETER The NotificationHandle is invalid. + @retval EFI_NOT_FOUND Can not find the matching entry in database. + +**/ EFI_STATUS EFIAPI TerminalConInUnregisterKeyNotify ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_HANDLE NotificationHandle ) -/*++ - - Routine Description: - Remove a registered notification function from a particular keystroke. - - Arguments: - This - Protocol instance pointer. - NotificationHandle - The handle of the notification function being unregistered. - - Returns: - EFI_SUCCESS - The notification function was unregistered successfully. - EFI_INVALID_PARAMETER - The NotificationHandle is invalid. - EFI_NOT_FOUND - Can not find the matching entry in database. - ---*/ { EFI_STATUS Status; TERMINAL_DEV *TerminalDevice; @@ -534,27 +500,30 @@ TerminalConInUnregisterKeyNotify ( return EFI_NOT_FOUND; } +/** + Turn raw data into Unicode (according to different encode), and + translate Unicode into key information. (according to different standard). + @param TerminalDevice Terminal driver private structure. + + @return none. + +**/ VOID TranslateRawDataToEfiKey ( IN TERMINAL_DEV *TerminalDevice ) -/*++ - Step1: Turn raw data into Unicode (according to different encode). - Step2: Translate Unicode into key information. - (according to different terminal standard). ---*/ { switch (TerminalDevice->TerminalType) { - case PcAnsiType: - case VT100Type: - case VT100PlusType: + case PCANSITYPE: + case VT100TYPE: + case VT100PLUSTYPE: AnsiRawDataToUnicode (TerminalDevice); UnicodeToEfiKey (TerminalDevice); break; - case VTUTF8Type: + case VTUTF8TYPE: // // Process all the raw data in the RawFIFO, // put the processed key into UnicodeFIFO. @@ -571,29 +540,22 @@ TranslateRawDataToEfiKey ( } } +/** + Event notification function for EFI_SIMPLE_TEXT_INPUT_PROTOCOL.WaitForKey event + Signal the event if there is key available + + @param Event Indicates the event that invoke this function. + @param Context Indicates the calling context. + + @return None + +**/ VOID EFIAPI TerminalConInWaitForKey ( IN EFI_EVENT Event, IN VOID *Context ) -/*++ - Routine Description: - - Event notification function for EFI_SIMPLE_TEXT_INPUT_PROTOCOL.WaitForKey event - Signal the event if there is key available - - Arguments: - - Event - Indicates the event that invoke this function. - - Context - Indicates the calling context. - - Returns: - - N/A - ---*/ { // // Someone is waiting on the keystroke event, if there's @@ -607,30 +569,23 @@ TerminalConInWaitForKey ( } } + +/** + Check for a pending key in the Efi Key FIFO or Serial device buffer. + + @param This Indicates the calling context. + + @return EFI_SUCCESS + @return There is key pending. + @return EFI_NOT_READY + @return There is no key pending. + @return EFI_DEVICE_ERROR + +**/ EFI_STATUS TerminalConInCheckForKey ( IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This ) -/*++ - Routine Description: - - Check for a pending key in the Efi Key FIFO or Serial device buffer. - - Arguments: - - This - Indicates the calling context. - - Returns: - - EFI_SUCCESS - There is key pending. - - EFI_NOT_READY - There is no key pending. - - EFI_DEVICE_ERROR - ---*/ { EFI_STATUS Status; TERMINAL_DEV *TerminalDevice; @@ -680,7 +635,7 @@ TerminalConInCheckForKey ( // Status = SerialIo->GetControl (SerialIo, &Control); - if (Control & EFI_SERIAL_INPUT_BUFFER_EMPTY) { + if (0 != (Control & EFI_SERIAL_INPUT_BUFFER_EMPTY)) { // // Translate all the raw data in RawFIFO into EFI Key, // according to different terminal type supported. @@ -732,26 +687,31 @@ TerminalConInCheckForKey ( return EFI_SUCCESS; } +/** + Get one key out of serial buffer. + + @param SerialIo Serial I/O protocl attached to the serial device. + @param Output The fetched key. + + @return EFI_NOT_READY If serial buffer is empty. + @return EFI_DEVICE_ERROR If reading serial buffer encounter error. + @return EFI_SUCCESS If reading serial buffer successfully, put + the fetched key to the parameter output. + +**/ EFI_STATUS GetOneKeyFromSerial ( EFI_SERIAL_IO_PROTOCOL *SerialIo, - UINT8 *Input + UINT8 *Output ) -/*++ - Get one key out of serial buffer. - If serial buffer is empty, return EFI_NOT_READY; - if reading serial buffer encounter error, returns EFI_DEVICE_ERROR; - if reading serial buffer successfully, put the fetched key to - the parameter "Input", and return EFI_SUCCESS. ---*/ { EFI_STATUS Status; UINTN Size; Size = 1; - *Input = 0; + *Output = 0; - Status = SerialIo->Read (SerialIo, &Size, Input); + Status = SerialIo->Read (SerialIo, &Size, Output); if (EFI_ERROR (Status)) { @@ -763,23 +723,29 @@ GetOneKeyFromSerial ( } - if (*Input == 0) { + if (*Output == 0) { return EFI_NOT_READY; } return EFI_SUCCESS; } +/** + Insert one byte raw data into the Raw Data FIFO. + + @param TerminalDevice Terminal driver private structure. + @param Input The key will be input. + + @return TRUE If insert successfully. + @return FLASE If Raw Data buffer is full before key insertion, + and the key is lost. + +**/ BOOLEAN RawFiFoInsertOneKey ( TERMINAL_DEV *TerminalDevice, UINT8 Input ) -/*++ - Insert one byte raw data into the Raw Data FIFO. - If FIFO is FULL before data insertion, - return FALSE, and the key is lost. ---*/ { UINT8 Tail; @@ -799,16 +765,21 @@ RawFiFoInsertOneKey ( return TRUE; } +/** + Remove one pre-fetched key out of the Raw Data FIFO. + + @param TerminalDevice Terminal driver private structure. + @param Output The key will be removed. + + @return TRUE If insert successfully. + @return FLASE If Raw Data FIFO buffer is empty before remove operation. + +**/ BOOLEAN RawFiFoRemoveOneKey ( TERMINAL_DEV *TerminalDevice, UINT8 *Output ) -/*++ - Remove one byte raw data out of the Raw Data FIFO. - If FIFO buffer is empty before remove operation, - return FALSE. ---*/ { UINT8 Head; @@ -829,13 +800,19 @@ RawFiFoRemoveOneKey ( return TRUE; } +/** + Clarify whether Raw Data FIFO buffer is empty. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If Raw Data FIFO buffer is empty. + @return FLASE If Raw Data FIFO buffer is not empty. + +**/ BOOLEAN IsRawFiFoEmpty ( TERMINAL_DEV *TerminalDevice ) -/*++ - Clarify whether FIFO buffer is empty. ---*/ { if (TerminalDevice->RawFiFo.Head == TerminalDevice->RawFiFo.Tail) { return TRUE; @@ -844,13 +821,19 @@ IsRawFiFoEmpty ( } } +/** + Clarify whether Raw Data FIFO buffer is full. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If Raw Data FIFO buffer is full. + @return FLASE If Raw Data FIFO buffer is not full. + +**/ BOOLEAN IsRawFiFoFull ( TERMINAL_DEV *TerminalDevice ) -/*++ - Clarify whether FIFO buffer is full. ---*/ { UINT8 Tail; UINT8 Head; @@ -866,16 +849,22 @@ IsRawFiFoFull ( return FALSE; } +/** + Insert one pre-fetched key into the FIFO buffer. + + @param TerminalDevice Terminal driver private structure. + @param Key The key will be input. + + @return TRUE If insert successfully. + @return FLASE If FIFO buffer is full before key insertion, + and the key is lost. + +**/ BOOLEAN EfiKeyFiFoInsertOneKey ( TERMINAL_DEV *TerminalDevice, EFI_INPUT_KEY Key ) -/*++ - Insert one pre-fetched key into the FIFO buffer. - If FIFO buffer is FULL before key insertion, - return FALSE, and the key is lost. ---*/ { UINT8 Tail; @@ -895,16 +884,21 @@ EfiKeyFiFoInsertOneKey ( return TRUE; } +/** + Remove one pre-fetched key out of the FIFO buffer. + + @param TerminalDevice Terminal driver private structure. + @param Output The key will be removed. + + @return TRUE If insert successfully. + @return FLASE If FIFO buffer is empty before remove operation. + +**/ BOOLEAN EfiKeyFiFoRemoveOneKey ( TERMINAL_DEV *TerminalDevice, EFI_INPUT_KEY *Output ) -/*++ - Remove one pre-fetched key out of the FIFO buffer. - If FIFO buffer is empty before remove operation, - return FALSE. ---*/ { UINT8 Head; @@ -926,13 +920,19 @@ EfiKeyFiFoRemoveOneKey ( return TRUE; } +/** + Clarify whether FIFO buffer is empty. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If FIFO buffer is empty. + @return FLASE If FIFO buffer is not empty. + +**/ BOOLEAN IsEfiKeyFiFoEmpty ( TERMINAL_DEV *TerminalDevice ) -/*++ - Clarify whether FIFO buffer is empty. ---*/ { if (TerminalDevice->EfiKeyFiFo.Head == TerminalDevice->EfiKeyFiFo.Tail) { return TRUE; @@ -941,13 +941,19 @@ IsEfiKeyFiFoEmpty ( } } +/** + Clarify whether FIFO buffer is full. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If FIFO buffer is full. + @return FLASE If FIFO buffer is not full. + +**/ BOOLEAN IsEfiKeyFiFoFull ( TERMINAL_DEV *TerminalDevice ) -/*++ - Clarify whether FIFO buffer is full. ---*/ { UINT8 Tail; UINT8 Head; @@ -963,16 +969,22 @@ IsEfiKeyFiFoFull ( return FALSE; } +/** + Insert one pre-fetched key into the Unicode FIFO buffer. + + @param TerminalDevice Terminal driver private structure. + @param Input The key will be input. + + @return TRUE If insert successfully. + @return FLASE If Unicode FIFO buffer is full before key insertion, + and the key is lost. + +**/ BOOLEAN UnicodeFiFoInsertOneKey ( TERMINAL_DEV *TerminalDevice, UINT16 Input ) -/*++ - Insert one pre-fetched key into the FIFO buffer. - If FIFO buffer is FULL before key insertion, - return FALSE, and the key is lost. ---*/ { UINT8 Tail; @@ -992,16 +1004,21 @@ UnicodeFiFoInsertOneKey ( return TRUE; } +/** + Remove one pre-fetched key out of the Unicode FIFO buffer. + + @param TerminalDevice Terminal driver private structure. + @param Output The key will be removed. + + @return TRUE If insert successfully. + @return FLASE If Unicode FIFO buffer is empty before remove operation. + +**/ BOOLEAN UnicodeFiFoRemoveOneKey ( TERMINAL_DEV *TerminalDevice, UINT16 *Output ) -/*++ - Remove one pre-fetched key out of the FIFO buffer. - If FIFO buffer is empty before remove operation, - return FALSE. ---*/ { UINT8 Head; @@ -1022,13 +1039,19 @@ UnicodeFiFoRemoveOneKey ( return TRUE; } +/** + Clarify whether Unicode FIFO buffer is empty. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If Unicode FIFO buffer is empty. + @return FLASE If Unicode FIFO buffer is not empty. + +**/ BOOLEAN IsUnicodeFiFoEmpty ( TERMINAL_DEV *TerminalDevice ) -/*++ - Clarify whether FIFO buffer is empty. ---*/ { if (TerminalDevice->UnicodeFiFo.Head == TerminalDevice->UnicodeFiFo.Tail) { return TRUE; @@ -1037,13 +1060,19 @@ IsUnicodeFiFoEmpty ( } } +/** + Clarify whether Unicode FIFO buffer is full. + + @param TerminalDevice Terminal driver private structure + + @return TRUE If Unicode FIFO buffer is full. + @return FLASE If Unicode FIFO buffer is not full. + +**/ BOOLEAN IsUnicodeFiFoFull ( TERMINAL_DEV *TerminalDevice ) -/*++ - Clarify whether FIFO buffer is full. ---*/ { UINT8 Tail; UINT8 Head; @@ -1077,7 +1106,6 @@ UnicodeFiFoGetKeyCount ( } } -STATIC VOID UnicodeToEfiKeyFlushState ( IN TERMINAL_DEV *TerminalDevice @@ -1085,31 +1113,31 @@ UnicodeToEfiKeyFlushState ( { EFI_INPUT_KEY Key; - if (TerminalDevice->InputState & INPUT_STATE_ESC) { + if (0 != (TerminalDevice->InputState & INPUT_STATE_ESC)) { Key.ScanCode = SCAN_ESC; Key.UnicodeChar = 0; EfiKeyFiFoInsertOneKey (TerminalDevice, Key); } - if (TerminalDevice->InputState & INPUT_STATE_CSI) { + if (0 != (TerminalDevice->InputState & INPUT_STATE_CSI)) { Key.ScanCode = SCAN_NULL; Key.UnicodeChar = CSI; EfiKeyFiFoInsertOneKey (TerminalDevice, Key); } - if (TerminalDevice->InputState & INPUT_STATE_LEFTOPENBRACKET) { + if (0 != (TerminalDevice->InputState & INPUT_STATE_LEFTOPENBRACKET)) { Key.ScanCode = SCAN_NULL; Key.UnicodeChar = LEFTOPENBRACKET; EfiKeyFiFoInsertOneKey (TerminalDevice, Key); } - if (TerminalDevice->InputState & INPUT_STATE_O) { + if (0 != (TerminalDevice->InputState & INPUT_STATE_O)) { Key.ScanCode = SCAN_NULL; Key.UnicodeChar = 'O'; EfiKeyFiFoInsertOneKey (TerminalDevice, Key); } - if (TerminalDevice->InputState & INPUT_STATE_2) { + if (0 != (TerminalDevice->InputState & INPUT_STATE_2)) { Key.ScanCode = SCAN_NULL; Key.UnicodeChar = '2'; EfiKeyFiFoInsertOneKey (TerminalDevice, Key); @@ -1124,80 +1152,74 @@ UnicodeToEfiKeyFlushState ( TerminalDevice->InputState = INPUT_STATE_DEFAULT; } + +/** + Converts a stream of Unicode characters from a terminal input device into EFI Keys that + can be read through the Simple Input Protocol. The table below shows the keyboard + input mappings that this function supports. If the ESC sequence listed in one of the + columns is presented, then it is translated into the coorespoding EFI Scan Code. If a + matching sequence is not found, then the raw key strokes are converted into EFI Keys. + 2 seconds are allowed for an ESC sequence to be completed. If the ESC sequence is not + completed in 2 seconds, then the raw key strokes of the partial ESC sequence are + converted into EFI Keys. + There is one special input sequence that will force the system to reset. + This is ESC R ESC r ESC R. + + Symbols used in table below + =========================== + ESC = 0x1B + CSI = 0x9B + DEL = 0x7f + ^ = CTRL + + +=========+======+===========+==========+==========+ + | | EFI | UEFI 2.0 | | | + | | Scan | | VT100+ | | + | KEY | Code | PC ANSI | VTUTF8 | VT100 | + +=========+======+===========+==========+==========+ + | NULL | 0x00 | | | | + | UP | 0x01 | ESC [ A | ESC [ A | ESC [ A | + | DOWN | 0x02 | ESC [ B | ESC [ B | ESC [ B | + | RIGHT | 0x03 | ESC [ C | ESC [ C | ESC [ C | + | LEFT | 0x04 | ESC [ D | ESC [ D | ESC [ D | + | HOME | 0x05 | ESC [ H | ESC h | ESC [ H | + | END | 0x06 | ESC [ F | ESC k | ESC [ K | + | INSERT | 0x07 | ESC [ @ | ESC + | ESC [ @ | + | | | ESC [ L | | ESC [ L | + | DELETE | 0x08 | ESC [ X | ESC - | ESC [ P | + | PG UP | 0x09 | ESC [ I | ESC ? | ESC [ V | + | | | | | ESC [ ? | + | PG DOWN | 0x0A | ESC [ G | ESC / | ESC [ U | + | | | | | ESC [ / | + | F1 | 0x0B | ESC [ M | ESC 1 | ESC O P | + | F2 | 0x0C | ESC [ N | ESC 2 | ESC O Q | + | F3 | 0x0D | ESC [ O | ESC 3 | ESC O w | + | F4 | 0x0E | ESC [ P | ESC 4 | ESC O x | + | F5 | 0x0F | ESC [ Q | ESC 5 | ESC O t | + | F6 | 0x10 | ESC [ R | ESC 6 | ESC O u | + | F7 | 0x11 | ESC [ S | ESC 7 | ESC O q | + | F8 | 0x12 | ESC [ T | ESC 8 | ESC O r | + | F9 | 0x13 | ESC [ U | ESC 9 | ESC O p | + | F10 | 0x14 | ESC [ V | ESC 0 | ESC O M | + | Escape | 0x17 | ESC | ESC | ESC | + | F11 | 0x15 | | ESC ! | | + | F12 | 0x16 | | ESC @ | | + +=========+======+===========+==========+==========+ + + Special Mappings + ================ + ESC R ESC r ESC R = Reset System + + + @param TerminalDevice The terminal device to use to translate raw input into EFI Keys + + @return None + +**/ VOID UnicodeToEfiKey ( IN TERMINAL_DEV *TerminalDevice ) -/*++ - Routine Description: - - Converts a stream of Unicode characters from a terminal input device into EFI Keys that - can be read through the Simple Input Protocol. The table below shows the keyboard - input mappings that this function supports. If the ESC sequence listed in one of the - columns is presented, then it is translated into the coorespoding EFI Scan Code. If a - matching sequence is not found, then the raw key strokes are converted into EFI Keys. - - 2 seconds are allowed for an ESC sequence to be completed. If the ESC sequence is not - completed in 2 seconds, then the raw key strokes of the partial ESC sequence are - converted into EFI Keys. - - There is one special input sequence that will force the system to reset. - This is ESC R ESC r ESC R. - - Arguments: - - TerminaDevice : The terminal device to use to translate raw input into EFI Keys - - Returns: - - None - -Symbols used in table below -=========================== - ESC = 0x1B - CSI = 0x9B - DEL = 0x7f - ^ = CTRL - -+=========+======+===========+==========+==========+ -| | EFI | UEFI 2.0 | | | -| | Scan | | VT100+ | | -| KEY | Code | PC ANSI | VTUTF8 | VT100 | -+=========+======+===========+==========+==========+ -| NULL | 0x00 | | | | -| UP | 0x01 | ESC [ A | ESC [ A | ESC [ A | -| DOWN | 0x02 | ESC [ B | ESC [ B | ESC [ B | -| RIGHT | 0x03 | ESC [ C | ESC [ C | ESC [ C | -| LEFT | 0x04 | ESC [ D | ESC [ D | ESC [ D | -| HOME | 0x05 | ESC [ H | ESC h | ESC [ H | -| END | 0x06 | ESC [ F | ESC k | ESC [ K | -| INSERT | 0x07 | ESC [ @ | ESC + | ESC [ @ | -| | | ESC [ L | | ESC [ L | -| DELETE | 0x08 | ESC [ X | ESC - | ESC [ P | -| PG UP | 0x09 | ESC [ I | ESC ? | ESC [ V | -| | | | | ESC [ ? | -| PG DOWN | 0x0A | ESC [ G | ESC / | ESC [ U | -| | | | | ESC [ / | -| F1 | 0x0B | ESC [ M | ESC 1 | ESC O P | -| F2 | 0x0C | ESC [ N | ESC 2 | ESC O Q | -| F3 | 0x0D | ESC [ O | ESC 3 | ESC O w | -| F4 | 0x0E | ESC [ P | ESC 4 | ESC O x | -| F5 | 0x0F | ESC [ Q | ESC 5 | ESC O t | -| F6 | 0x10 | ESC [ R | ESC 6 | ESC O u | -| F7 | 0x11 | ESC [ S | ESC 7 | ESC O q | -| F8 | 0x12 | ESC [ T | ESC 8 | ESC O r | -| F9 | 0x13 | ESC [ U | ESC 9 | ESC O p | -| F10 | 0x14 | ESC [ V | ESC 0 | ESC O M | -| Escape | 0x17 | ESC | ESC | ESC | -| F11 | 0x15 | | ESC ! | | -| F12 | 0x16 | | ESC @ | | -+=========+======+===========+==========+==========+ - -Special Mappings -================ -ESC R ESC r ESC R = Reset System - ---*/ { EFI_STATUS Status; EFI_STATUS TimerStatus; @@ -1245,7 +1267,7 @@ ESC R ESC r ESC R = Reset System continue; } - if (UnicodeChar == 'O' && TerminalDevice->TerminalType == VT100Type) { + if (UnicodeChar == 'O' && TerminalDevice->TerminalType == VT100TYPE) { TerminalDevice->InputState |= INPUT_STATE_O; TerminalDevice->ResetState = RESET_STATE_DEFAULT; continue; @@ -1253,8 +1275,8 @@ ESC R ESC r ESC R = Reset System Key.ScanCode = SCAN_NULL; - if (TerminalDevice->TerminalType == VT100PlusType || - TerminalDevice->TerminalType == VTUTF8Type) { + if (TerminalDevice->TerminalType == VT100PLUSTYPE || + TerminalDevice->TerminalType == VTUTF8TYPE) { switch (UnicodeChar) { case '1': Key.ScanCode = SCAN_F1; @@ -1358,7 +1380,7 @@ ESC R ESC r ESC R = Reset System Key.ScanCode = SCAN_NULL; - if (TerminalDevice->TerminalType == VT100Type) { + if (TerminalDevice->TerminalType == VT100TYPE) { switch (UnicodeChar) { case 'P': Key.ScanCode = SCAN_F1; @@ -1413,10 +1435,10 @@ ESC R ESC r ESC R = Reset System Key.ScanCode = SCAN_NULL; - if (TerminalDevice->TerminalType == PcAnsiType || - TerminalDevice->TerminalType == VT100Type || - TerminalDevice->TerminalType == VT100PlusType || - TerminalDevice->TerminalType == VTUTF8Type) { + if (TerminalDevice->TerminalType == PCANSITYPE || + TerminalDevice->TerminalType == VT100TYPE || + TerminalDevice->TerminalType == VT100PLUSTYPE || + TerminalDevice->TerminalType == VTUTF8TYPE) { switch (UnicodeChar) { case 'A': Key.ScanCode = SCAN_UP; @@ -1431,100 +1453,100 @@ ESC R ESC r ESC R = Reset System Key.ScanCode = SCAN_LEFT; break; case 'H': - if (TerminalDevice->TerminalType == PcAnsiType || - TerminalDevice->TerminalType == VT100Type) { + if (TerminalDevice->TerminalType == PCANSITYPE || + TerminalDevice->TerminalType == VT100TYPE) { Key.ScanCode = SCAN_HOME; } break; case 'F': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_END; } break; case 'K': - if (TerminalDevice->TerminalType == VT100Type) { + if (TerminalDevice->TerminalType == VT100TYPE) { Key.ScanCode = SCAN_END; } break; case 'L': case '@': - if (TerminalDevice->TerminalType == PcAnsiType || - TerminalDevice->TerminalType == VT100Type) { + if (TerminalDevice->TerminalType == PCANSITYPE || + TerminalDevice->TerminalType == VT100TYPE) { Key.ScanCode = SCAN_INSERT; } break; case 'X': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_DELETE; } break; case 'P': - if (TerminalDevice->TerminalType == VT100Type) { + if (TerminalDevice->TerminalType == VT100TYPE) { Key.ScanCode = SCAN_DELETE; - } else if (TerminalDevice->TerminalType == PcAnsiType) { + } else if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_F4; } break; case 'I': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_PAGE_UP; } break; case 'V': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_F10; } case '?': - if (TerminalDevice->TerminalType == VT100Type) { + if (TerminalDevice->TerminalType == VT100TYPE) { Key.ScanCode = SCAN_PAGE_UP; } break; case 'G': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_PAGE_DOWN; } break; case 'U': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_F9; } case '/': - if (TerminalDevice->TerminalType == VT100Type) { + if (TerminalDevice->TerminalType == VT100TYPE) { Key.ScanCode = SCAN_PAGE_DOWN; } break; case 'M': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_F1; } break; case 'N': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_F2; } break; case 'O': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_F3; } break; case 'Q': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_F5; } break; case 'R': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_F6; } break; case 'S': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_F7; } break; case 'T': - if (TerminalDevice->TerminalType == PcAnsiType) { + if (TerminalDevice->TerminalType == PCANSITYPE) { Key.ScanCode = SCAN_F8; } break; diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c index 06fda61274..f6f78b6b88 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c @@ -86,36 +86,30 @@ CHAR16 mSetCursorPositionString[] = { ESC, '[', '0', '0', ';', '0', '0', 'H', 0 // // Body of the ConOut functions // + +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.Reset(). + If ExtendeVerification is TRUE, then perform dependent serial device reset, + and set display mode to mode 0. + If ExtendedVerification is FALSE, only set display mode to mode 0. + + @param This Indicates the calling context. + @param ExtendedVerification Indicates that the driver may perform a more + exhaustive verification operation of the device + during reset. + + @return EFI_SUCCESS + @return The reset operation succeeds. + @return EFI_DEVICE_ERROR + @return The terminal is not functioning correctly or the serial port reset fails. + +**/ EFI_STATUS EFIAPI TerminalConOutReset ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN BOOLEAN ExtendedVerification ) -/*++ - Routine Description: - - Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.Reset(). - If ExtendeVerification is TRUE, then perform dependent serial device reset, - and set display mode to mode 0. - If ExtendedVerification is FALSE, only set display mode to mode 0. - - Arguments: - - This - Indicates the calling context. - - ExtendedVerification - Indicates that the driver may perform a more exhaustive - verification operation of the device during reset. - - Returns: - - EFI_SUCCESS - The reset operation succeeds. - - EFI_DEVICE_ERROR - The terminal is not functioning correctly or the serial port reset fails. - ---*/ { EFI_STATUS Status; TERMINAL_DEV *TerminalDevice; @@ -157,42 +151,29 @@ TerminalConOutReset ( return Status; } + +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString(). + The Unicode string will be converted to terminal expressible data stream + and send to terminal via serial port. + + @param This Indicates the calling context. + @param WString The Null-terminated Unicode string to be displayed + on the terminal screen. + + @return EFI_SUCCESS The string is output successfully. + @return EFI_DEVICE_ERROR The serial port fails to send the string out. + @return EFI_WARN_UNKNOWN_GLYPH Indicates that some of the characters in the Unicode string could not + be rendered and are skipped. + @return EFI_UNSUPPORTED + +**/ EFI_STATUS EFIAPI TerminalConOutOutputString ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN CHAR16 *WString ) -/*++ - Routine Description: - - Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString(). - The Unicode string will be converted to terminal expressible data stream - and send to terminal via serial port. - - - Arguments: - - This - Indicates the calling context. - - WString - The Null-terminated Unicode string to be displayed on - the terminal screen. - - Returns: - - EFI_SUCCESS - The string is output successfully. - - EFI_DEVICE_ERROR - The serial port fails to send the string out. - - EFI_WARN_UNKNOWN_GLYPH - Indicates that some of the characters in the Unicode string could not - be rendered and are skipped. - - EFI_UNSUPPORTED - ---*/ { TERMINAL_DEV *TerminalDevice; EFI_SIMPLE_TEXT_OUTPUT_MODE *Mode; @@ -238,9 +219,9 @@ TerminalConOutOutputString ( switch (TerminalDevice->TerminalType) { - case PcAnsiType: - case VT100Type: - case VT100PlusType: + case PCANSITYPE: + case VT100TYPE: + case VT100PLUSTYPE: if (!TerminalIsValidTextGraphics (*WString, &GraphicChar, &AsciiChar)) { // @@ -266,7 +247,7 @@ TerminalConOutOutputString ( } - if (TerminalDevice->TerminalType != PcAnsiType) { + if (TerminalDevice->TerminalType != PCANSITYPE) { GraphicChar = AsciiChar; } @@ -284,7 +265,7 @@ TerminalConOutOutputString ( break; - case VTUTF8Type: + case VTUTF8TYPE: UnicodeToUtf8 (*WString, &Utf8Char, &ValidBytes); Length = ValidBytes; Status = TerminalDevice->SerialIo->Write ( @@ -353,37 +334,27 @@ OutputError: return EFI_DEVICE_ERROR; } + +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.TestString(). + If one of the characters in the *Wstring is + neither valid Unicode drawing characters, + not ASCII code, then this function will return + EFI_UNSUPPORTED. + + @param This Indicates the calling context. + @param WString The Null-terminated Unicode string to be tested. + + @return EFI_SUCCESS The terminal is capable of rendering the output string. + @return EFI_UNSUPPORTED Some of the characters in the Unicode string cannot be rendered. + +**/ EFI_STATUS EFIAPI TerminalConOutTestString ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN CHAR16 *WString ) -/*++ - Routine Description: - - Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.TestString(). - If one of the characters in the *Wstring is - neither valid Unicode drawing characters, - not ASCII code, then this function will return - EFI_UNSUPPORTED. - - - Arguments: - - This - Indicates the calling context. - - WString - The Null-terminated Unicode string to be tested. - - Returns: - - EFI_SUCCESS - The terminal is capable of rendering the output string. - - EFI_UNSUPPORTED - Some of the characters in the Unicode string cannot be rendered. - ---*/ { TERMINAL_DEV *TerminalDevice; EFI_STATUS Status; @@ -395,13 +366,13 @@ TerminalConOutTestString ( switch (TerminalDevice->TerminalType) { - case PcAnsiType: - case VT100Type: - case VT100PlusType: + case PCANSITYPE: + case VT100TYPE: + case VT100PLUSTYPE: Status = AnsiTestString (TerminalDevice, WString); break; - case VTUTF8Type: + case VTUTF8TYPE: Status = VTUTF8TestString (TerminalDevice, WString); break; @@ -413,6 +384,24 @@ TerminalConOutTestString ( return Status; } + +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.QueryMode(). + It returns information for an available text mode + that the terminal supports. + In this driver, we support text mode 80x25 (mode 0), + 80x50 (mode 1), 100x31 (mode 2). + + @param This Indicates the calling context. + @param ModeNumber The mode number to return information on. + @param Columns The returned columns of the requested mode. + @param Rows The returned rows of the requested mode. + + @return EFI_SUCCESS The requested mode information is returned. + @return EFI_UNSUPPORTED The mode number is not valid. + @return EFI_DEVICE_ERROR + +**/ EFI_STATUS EFIAPI TerminalConOutQueryMode ( @@ -421,41 +410,6 @@ TerminalConOutQueryMode ( OUT UINTN *Columns, OUT UINTN *Rows ) -/*++ - Routine Description: - - Implements EFI_SIMPLE_TEXT_OUT_PROTOCOL.QueryMode(). - It returns information for an available text mode - that the terminal supports. - In this driver, we support text mode 80x25 (mode 0), - 80x50 (mode 1), 100x31 (mode 2). - - - Arguments: - - *This - Indicates the calling context. - - ModeNumber - The mode number to return information on. - - Columns - The returned columns of the requested mode. - - Rows - The returned rows of the requested mode. - - Returns: - - EFI_SUCCESS - The requested mode information is returned. - - EFI_UNSUPPORTED - The mode number is not valid. - - EFI_DEVICE_ERROR - ---*/ { if (This->Mode->MaxMode > 3) { return EFI_DEVICE_ERROR; @@ -478,39 +432,27 @@ TerminalConOutQueryMode ( return EFI_UNSUPPORTED; } + +/** + Implements EFI_SIMPLE_TEXT_OUT.SetMode(). + Set the terminal to a specified display mode. + In this driver, we only support mode 0. + + @param This Indicates the calling context. + @param ModeNumber The text mode to set. + + @return EFI_SUCCESS The requested text mode is set. + @return EFI_DEVICE_ERROR The requested text mode cannot be set + because of serial device error. + @return EFI_UNSUPPORTED The text mode number is not valid. + +**/ EFI_STATUS EFIAPI TerminalConOutSetMode ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN UINTN ModeNumber ) -/*++ - Routine Description: - - Implements EFI_SIMPLE_TEXT_OUT.SetMode(). - Set the terminal to a specified display mode. - In this driver, we only support mode 0. - - Arguments: - - This - Indicates the calling context. - - ModeNumber - The text mode to set. - - Returns: - - EFI_SUCCESS - The requested text mode is set. - - EFI_DEVICE_ERROR - The requested text mode cannot be set because of serial device error. - - EFI_UNSUPPORTED - The text mode number is not valid. - ---*/ { EFI_STATUS Status; TERMINAL_DEV *TerminalDevice; @@ -550,38 +492,25 @@ TerminalConOutSetMode ( } + +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetAttribute(). + + @param This Indicates the calling context. + @param Attribute The attribute to set. Only bit0..6 are valid, all other bits + are undefined and must be zero. + + @return EFI_SUCCESS The requested attribute is set. + @return EFI_DEVICE_ERROR The requested attribute cannot be set due to serial port error. + @return EFI_UNSUPPORTED The attribute requested is not defined by EFI spec. + +**/ EFI_STATUS EFIAPI TerminalConOutSetAttribute ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN UINTN Attribute ) -/*++ - Routine Description: - - Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetAttribute(). - - Arguments: - - This - Indicates the calling context. - - Attribute - The attribute to set. Only bit0..6 are valid, all other bits - are undefined and must be zero. - - Returns: - - EFI_SUCCESS - The requested attribute is set. - - EFI_DEVICE_ERROR - The requested attribute cannot be set due to serial port error. - - EFI_UNSUPPORTED - The attribute requested is not defined by EFI spec. - ---*/ { UINT8 ForegroundControl; UINT8 BackgroundControl; @@ -736,36 +665,24 @@ TerminalConOutSetAttribute ( } + +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.ClearScreen(). + It clears the ANSI terminal's display to the + currently selected background color. + + @param This Indicates the calling context. + + @return EFI_SUCCESS The operation completed successfully. + @return EFI_DEVICE_ERROR The terminal screen cannot be cleared due to serial port error. + @return EFI_UNSUPPORTED The terminal is not in a valid display mode. + +**/ EFI_STATUS EFIAPI TerminalConOutClearScreen ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This ) -/*++ - Routine Description: - - Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.ClearScreen(). - It clears the ANSI terminal's display to the - currently selected background color. - - - Arguments: - - This - Indicates the calling context. - - Returns: - - EFI_SUCCESS - The operation completed successfully. - - EFI_DEVICE_ERROR - The terminal screen cannot be cleared due to serial port error. - - EFI_UNSUPPORTED - The terminal is not in a valid display mode. - ---*/ { EFI_STATUS Status; TERMINAL_DEV *TerminalDevice; @@ -788,6 +705,20 @@ TerminalConOutClearScreen ( return Status; } + +/** + Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetCursorPosition(). + + @param This Indicates the calling context. + @param Column The row to set cursor to. + @param Row The column to set cursor to. + + @return EFI_SUCCESS The operation completed successfully. + @return EFI_DEVICE_ERROR The request fails due to serial port error. + @return EFI_UNSUPPORTED The terminal is not in a valid text mode, or the cursor position + is invalid for current mode. + +**/ EFI_STATUS EFIAPI TerminalConOutSetCursorPosition ( @@ -795,35 +726,6 @@ TerminalConOutSetCursorPosition ( IN UINTN Column, IN UINTN Row ) -/*++ - Routine Description: - - Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetCursorPosition(). - - Arguments: - - This - Indicates the calling context. - - Column - The row to set cursor to. - - Row - The column to set cursor to. - - Returns: - - EFI_SUCCESS - The operation completed successfully. - - EFI_DEVICE_ERROR - The request fails due to serial port error. - - EFI_UNSUPPORTED - The terminal is not in a valid text mode, or the cursor position - is invalid for current mode. - ---*/ { EFI_SIMPLE_TEXT_OUTPUT_MODE *Mode; UINTN MaxColumn; @@ -879,36 +781,25 @@ TerminalConOutSetCursorPosition ( return EFI_SUCCESS; } + +/** + Implements SIMPLE_TEXT_OUTPUT.EnableCursor(). + In this driver, the cursor cannot be hidden. + + @param This Indicates the calling context. + @param Visible If TRUE, the cursor is set to be visible, + If FALSE, the cursor is set to be invisible. + + @return EFI_SUCCESS The request is valid. + @return EFI_UNSUPPORTED The terminal does not support cursor hidden. + +**/ EFI_STATUS EFIAPI TerminalConOutEnableCursor ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN BOOLEAN Visible ) -/*++ - Routine Description: - - Implements SIMPLE_TEXT_OUTPUT.EnableCursor(). - In this driver, the cursor cannot be hidden. - - Arguments: - - This - Indicates the calling context. - - Visible - If TRUE, the cursor is set to be visible, - If FALSE, the cursor is set to be invisible. - - Returns: - - EFI_SUCCESS - The request is valid. - - EFI_UNSUPPORTED - The terminal does not support cursor hidden. - ---*/ { if (!Visible) { return EFI_UNSUPPORTED; @@ -917,31 +808,25 @@ TerminalConOutEnableCursor ( return EFI_SUCCESS; } + +/** + Detects if a Unicode char is for Box Drawing text graphics. + + @param Graphic Unicode char to test. + @param PcAnsi Optional pointer to return PCANSI equivalent of + Graphic. + @param Ascii Optional pointer to return ASCII equivalent of + Graphic. + + @return TRUE If Graphic is a supported Unicode Box Drawing character. + +**/ BOOLEAN TerminalIsValidTextGraphics ( IN CHAR16 Graphic, OUT CHAR8 *PcAnsi, OPTIONAL OUT CHAR8 *Ascii OPTIONAL ) -/*++ - -Routine Description: - - Detects if a Unicode char is for Box Drawing text graphics. - -Arguments: - - Graphic - Unicode char to test. - - PcAnsi - Optional pointer to return PCANSI equivalent of Graphic. - - Ascii - Optional pointer to return ASCII equivalent of Graphic. - -Returns: - - TRUE if Graphic is a supported Unicode Box Drawing character. - ---*/ { UNICODE_TO_CHAR *Table; diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Vtutf8.c b/MdeModulePkg/Universal/Console/TerminalDxe/Vtutf8.c index 286c937d42..260ae84899 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/Vtutf8.c +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Vtutf8.c @@ -1,4 +1,4 @@ -/**@file +/** @file Implementation translation among different code tyies. Copyright (c) 2006, Intel Corporation.