#include "ConSplitter.h"\r
\r
//\r
-// Global Variables\r
+// Template for Text In Splitter\r
//\r
-STATIC TEXT_IN_SPLITTER_PRIVATE_DATA mConIn = {\r
+TEXT_IN_SPLITTER_PRIVATE_DATA mConIn = {\r
TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE,\r
(EFI_HANDLE) NULL,\r
{\r
FALSE\r
};\r
\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UGA_DRAW_PROTOCOL gUgaDrawProtocolTemplate = {\r
+//\r
+// Template for Uga Draw Protocol\r
+//\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_UGA_DRAW_PROTOCOL mUgaDrawProtocolTemplate = {\r
ConSpliterUgaDrawGetMode,\r
ConSpliterUgaDrawSetMode,\r
ConSpliterUgaDrawBlt\r
};\r
\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_GRAPHICS_OUTPUT_PROTOCOL gGraphicsOutputProtocolTemplate = {\r
+//\r
+// Template for Graphics Output Protocol\r
+//\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_GRAPHICS_OUTPUT_PROTOCOL mGraphicsOutputProtocolTemplate = {\r
ConSpliterGraphicsOutputQueryMode,\r
ConSpliterGraphicsOutputSetMode,\r
ConSpliterGraphicsOutputBlt,\r
NULL\r
};\r
\r
-STATIC TEXT_OUT_SPLITTER_PRIVATE_DATA mConOut = {\r
+//\r
+// Template for Text Out Splitter\r
+//\r
+TEXT_OUT_SPLITTER_PRIVATE_DATA mConOut = {\r
TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE,\r
(EFI_HANDLE) NULL,\r
{\r
(INT32 *) NULL\r
};\r
\r
-STATIC TEXT_OUT_SPLITTER_PRIVATE_DATA mStdErr = {\r
+//\r
+// Template for Standard Error Text Out Splitter\r
+//\r
+TEXT_OUT_SPLITTER_PRIVATE_DATA mStdErr = {\r
TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE,\r
(EFI_HANDLE) NULL,\r
{\r
(INT32 *) NULL\r
};\r
\r
+//\r
+// Driver binding instance for Console Input Device\r
+//\r
EFI_DRIVER_BINDING_PROTOCOL gConSplitterConInDriverBinding = {\r
ConSplitterConInDriverBindingSupported,\r
ConSplitterConInDriverBindingStart,\r
NULL\r
};\r
\r
+//\r
+// Driver binding instance for Simple Pointer protocol\r
+//\r
EFI_DRIVER_BINDING_PROTOCOL gConSplitterSimplePointerDriverBinding = {\r
ConSplitterSimplePointerDriverBindingSupported,\r
ConSplitterSimplePointerDriverBindingStart,\r
NULL\r
};\r
\r
+//\r
+// Driver binding instance for Console Out device\r
+//\r
EFI_DRIVER_BINDING_PROTOCOL gConSplitterConOutDriverBinding = {\r
ConSplitterConOutDriverBindingSupported,\r
ConSplitterConOutDriverBindingStart,\r
NULL\r
};\r
\r
+//\r
+// Driver binding instance for Standard Error device\r
+//\r
EFI_DRIVER_BINDING_PROTOCOL gConSplitterStdErrDriverBinding = {\r
ConSplitterStdErrDriverBindingSupported,\r
ConSplitterStdErrDriverBindingStart,\r
structure.\r
\r
@retval EFI_OUT_OF_RESOURCES Out of resources.\r
- @retval other Out of resources.\r
+ @retval EFI_SUCCESS Text Input Devcie's private data has been constructed.\r
+ @retval other Failed to construct private data.\r
\r
**/\r
EFI_STATUS\r
structure.\r
\r
@retval EFI_OUT_OF_RESOURCES Out of resources.\r
+ @retval EFI_SUCCESS Text Input Devcie's private data has been constructed.\r
\r
**/\r
EFI_STATUS\r
// Copy protocols template\r
//\r
if (FeaturePcdGet (PcdConOutUgaSupport)) {\r
- CopyMem (&ConOutPrivate->UgaDraw, &gUgaDrawProtocolTemplate, sizeof (EFI_UGA_DRAW_PROTOCOL));\r
+ CopyMem (&ConOutPrivate->UgaDraw, &mUgaDrawProtocolTemplate, sizeof (EFI_UGA_DRAW_PROTOCOL));\r
}\r
\r
if (FeaturePcdGet (PcdConOutGopSupport)) {\r
- CopyMem (&ConOutPrivate->GraphicsOutput, &gGraphicsOutputProtocolTemplate, sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL));\r
+ CopyMem (&ConOutPrivate->GraphicsOutput, &mGraphicsOutputProtocolTemplate, sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL));\r
}\r
\r
//\r
\r
ConOutPrivate->GraphicsOutput.Mode->MaxMode = 1;\r
//\r
- // Initial current mode to unknow state, and then set to mode 0\r
+ // Initial current mode to unknown state, and then set to mode 0\r
//\r
ConOutPrivate->GraphicsOutput.Mode->Mode = 0xffff;\r
ConOutPrivate->GraphicsOutput.SetMode (&ConOutPrivate->GraphicsOutput, 0);\r
}\r
\r
- return Status;\r
+ return EFI_SUCCESS;\r
}\r
\r
\r
@param RemainingDevicePath Optional parameter use to pick a specific child\r
device to start.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
- @retval other This driver does not support this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
+ @retval other This driver does not support this device.\r
\r
**/\r
EFI_STATUS\r
@param RemainingDevicePath Optional parameter use to pick a specific child\r
device to start.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
- @retval other This driver does not support this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
+ @retval other This driver does not support this device.\r
\r
**/\r
EFI_STATUS\r
@param RemainingDevicePath Optional parameter use to pick a specific child\r
device to start.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
- @retval other This driver does not support this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
+ @retval other This driver does not support this device.\r
\r
**/\r
EFI_STATUS\r
@param RemainingDevicePath Optional parameter use to pick a specific child\r
device to start.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
- @retval other This driver does not support this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
+ @retval other This driver does not support this device.\r
\r
**/\r
EFI_STATUS\r
@param RemainingDevicePath Optional parameter use to pick a specific child\r
device to start.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
- @retval other This driver does not support this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
+ @retval other This driver does not support this device.\r
\r
**/\r
EFI_STATUS\r
@param InterfaceGuid The specified protocol to be opened.\r
@param Interface Protocol interface returned.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
@retval other Failed to open the specified Console Device Guid\r
or specified protocol.\r
\r
return Status;\r
}\r
\r
+ //\r
+ // Add this device into Text In devices list.\r
+ //\r
Status = ConSplitterTextInAddDevice (&mConIn, TextIn);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
mConIn.VirtualHandle,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // If Simple Text Input Ex protocol exists,\r
+ // add this device into Text In Ex devices list.\r
+ //\r
+ Status = ConSplitterTextInExAddDevice (&mConIn, TextInEx);\r
}\r
\r
- Status = ConSplitterTextInExAddDevice (&mConIn, TextInEx);\r
-\r
return Status;\r
}\r
\r
EFI_STATUS Status;\r
EFI_SIMPLE_POINTER_PROTOCOL *SimplePointer;\r
\r
+ //\r
+ // Start ConSplitter on ControllerHandle, and create the virtual\r
+ // agrogated console device on first call Start for a SimplePointer handle.\r
+ //\r
Status = ConSplitterStart (\r
This,\r
ControllerHandle,\r
return Status;\r
}\r
\r
+ //\r
+ // Add this devcie into Simple Pointer devices list.\r
+ //\r
return ConSplitterSimplePointerAddDevice (&mConIn, SimplePointer);\r
}\r
\r
EFI_STATUS Status;\r
EFI_ABSOLUTE_POINTER_PROTOCOL *AbsolutePointer;\r
\r
+ //\r
+ // Start ConSplitter on ControllerHandle, and create the virtual\r
+ // agrogated console device on first call Start for a AbsolutePointer handle.\r
+ //\r
Status = ConSplitterStart (\r
This,\r
ControllerHandle,\r
return Status;\r
}\r
\r
+ //\r
+ // Add this devcie into Absolute Pointer devices list.\r
+ //\r
return ConSplitterAbsolutePointerAddDevice (&mConIn, AbsolutePointer);\r
}\r
\r
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
EFI_UGA_DRAW_PROTOCOL *UgaDraw;\r
\r
+ //\r
+ // Start ConSplitter on ControllerHandle, and create the virtual\r
+ // agrogated console device on first call Start for a ConsoleOut handle.\r
+ //\r
Status = ConSplitterStart (\r
This,\r
ControllerHandle,\r
\r
if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
//\r
- // Open UGA_DRAW protocol\r
+ // Open UGA DRAW protocol\r
//\r
Status = gBS->OpenProtocol (\r
ControllerHandle,\r
EFI_STATUS Status;\r
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;\r
\r
+ //\r
+ // Start ConSplitter on ControllerHandle, and create the virtual\r
+ // agrogated console device on first call Start for a StandardError handle.\r
+ //\r
Status = ConSplitterStart (\r
This,\r
ControllerHandle,\r
\r
\r
/**\r
- Stop ConSplitter on device handle by opening Console Device Guid on device handle \r
+ Stop ConSplitter on device handle by closing Console Device Guid on device handle \r
and the console virtual handle.\r
\r
@param This Protocol instance pointer.\r
This->DriverBindingHandle,\r
ConSplitterVirtualHandle\r
);\r
+\r
gBS->CloseProtocol (\r
ControllerHandle,\r
DeviceGuid,\r
IN EFI_HANDLE *ChildHandleBuffer\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SIMPLE_TEXT_INPUT_PROTOCOL *TextIn;\r
-\r
+ EFI_STATUS Status;\r
+ EFI_SIMPLE_TEXT_INPUT_PROTOCOL *TextIn;\r
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TextInEx;\r
+\r
if (NumberOfChildren == 0) {\r
return EFI_SUCCESS;\r
}\r
ControllerHandle,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- Status = ConSplitterTextInExDeleteDevice (&mConIn, TextInEx);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // If Simple Text Input Ex protocol exists,\r
+ // remove device from Text Input Ex devices list.\r
+ // \r
+ Status = ConSplitterTextInExDeleteDevice (&mConIn, TextInEx);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
}\r
\r
-\r
+ //\r
+ // Close Simple Text In protocol on controller handle and virtual handle.\r
+ //\r
Status = ConSplitterStop (\r
This,\r
ControllerHandle,\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
//\r
- // Delete this console input device's data structures.\r
- //\r
+ // Remove device from Text Input devices list.\r
+ // \r
return ConSplitterTextInDeleteDevice (&mConIn, TextIn);\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
+ //\r
+ // Close Simple Pointer protocol on controller handle and virtual handle.\r
+ //\r
Status = ConSplitterStop (\r
This,\r
ControllerHandle,\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
//\r
- // Delete this console input device's data structures.\r
+ // Remove this device from Simple Pointer device list.\r
//\r
return ConSplitterSimplePointerDeleteDevice (&mConIn, SimplePointer);\r
}\r
return EFI_SUCCESS;\r
}\r
\r
+ //\r
+ // Close Absolute Pointer protocol on controller handle and virtual handle.\r
+ //\r
Status = ConSplitterStop (\r
This,\r
ControllerHandle,\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
//\r
- // Delete this console input device's data structures.\r
+ // Remove this device from Absolute Pointer device list.\r
//\r
return ConSplitterAbsolutePointerDeleteDevice (&mConIn, AbsolutePointer);\r
}\r
return EFI_SUCCESS;\r
}\r
\r
+ //\r
+ // Close Absolute Pointer protocol on controller handle and virtual handle.\r
+ //\r
Status = ConSplitterStop (\r
This,\r
ControllerHandle,\r
}\r
\r
//\r
- // Delete this console output device's data structures.\r
+ // Remove this device from Text Out device list.\r
//\r
return ConSplitterTextOutDeleteDevice (&mConOut, TextOut);\r
}\r
return EFI_SUCCESS;\r
}\r
\r
+ //\r
+ // Close Standard Error Device on controller handle and virtual handle.\r
+ //\r
Status = ConSplitterStop (\r
This,\r
ControllerHandle,\r
\r
return Status;\r
}\r
-//\r
-// ConSplitter TextIn member functions\r
-//\r
+\r
\r
/**\r
Reset the input device and optionaly run diagnostics\r
BackSpaceString[0] = CHAR_BACKSPACE;\r
BackSpaceString[1] = 0;\r
\r
- SpaceString[0] = ' ';\r
+ SpaceString[0] = L' ';\r
SpaceString[1] = 0;\r
\r
ConSplitterTextOutOutputString (&mConOut.TextOut, BackSpaceString);\r
\r
\r
/**\r
+ Test if the key has been registered on input device.\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
-//\r
-// Simple Text Input Ex protocol functions\r
-//\r
-\r
\r
/**\r
Reset the input device and optionaly run diagnostics\r
}\r
}\r
\r
-//\r
-// Absolute Pointer Protocol functions\r
-//\r
-\r
-\r
/**\r
Resets the pointer device hardware.\r
\r