+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-Module Name:\r
-\r
- ConsoleIn.c\r
-\r
-Abstract:\r
-\r
- Console based on Posix APIs.\r
-\r
- This file attaches a SimpleTextIn protocol to a previously open window.\r
-\r
- The constructor for this protocol depends on an open window. Currently\r
- the SimpleTextOut protocol creates a window when it's constructor is called.\r
- Thus this code must run after the constructor for the SimpleTextOut\r
- protocol\r
-\r
---*/\r
-\r
-#include "Console.h"\r
-#include <sys/poll.h>\r
-\r
-//\r
-// Private worker functions\r
-//\r
-EFI_STATUS\r
-UnixSimpleTextInCheckKey (\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextInReset (\r
- IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
- IN BOOLEAN ExtendedVerification\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - TODO: add argument description\r
- ExtendedVerification - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
-\r
- Private = UNIX_SIMPLE_TEXT_IN_PRIVATE_DATA_FROM_THIS (This);\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-UnixConvertInputRecordToEfiKey (\r
- IN char c,\r
- OUT EFI_INPUT_KEY *Key\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- InputRecord - TODO: add argument description\r
- Key - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_NOT_READY - TODO: Add description for return value\r
- EFI_NOT_READY - TODO: Add description for return value\r
- EFI_NOT_READY - TODO: Add description for return value\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- Key->ScanCode = 0;\r
- if (c == '\n')\r
- c = '\r';\r
- Key->UnicodeChar = c;\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextInReadKeyStroke (\r
- IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
- OUT EFI_INPUT_KEY *Key\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - TODO: add argument description\r
- Key - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_DEVICE_ERROR - TODO: Add description for return value\r
- EFI_NOT_READY - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- EFI_STATUS Status;\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
- char c;\r
-\r
- Private = UNIX_SIMPLE_TEXT_IN_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- Status = UnixSimpleTextInCheckKey (Private);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- if (Private->UnixThunk->Read (0, &c, 1) != 1)\r
- return EFI_NOT_READY;\r
- Status = UnixConvertInputRecordToEfiKey (c, Key);\r
-\r
- return Status;\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-UnixSimpleTextInWaitForKey (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- Event - TODO: add argument description\r
- Context - TODO: add argument description\r
-\r
-Returns:\r
-\r
- TODO: add return values\r
-\r
---*/\r
-{\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
- EFI_STATUS Status;\r
-\r
- Private = (UNIX_SIMPLE_TEXT_PRIVATE_DATA *) Context;\r
- Status = UnixSimpleTextInCheckKey (Private);\r
- if (!EFI_ERROR (Status)) {\r
- gBS->SignalEvent (Event);\r
- }\r
-}\r
-\r
-EFI_STATUS\r
-UnixSimpleTextInCheckKey (\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- Private - TODO: add argument description\r
-\r
-Returns:\r
-\r
- TODO: add return values\r
-\r
---*/\r
-{\r
- struct pollfd pfd;\r
-\r
- pfd.fd = 0;\r
- pfd.events = POLLIN;\r
- if (Private->UnixThunk->Poll (&pfd, 1, 0) <= 0) {\r
- return EFI_NOT_READY;\r
- }\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-UnixSimpleTextInAttachToWindow (\r
- IN UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- Private - TODO: add argument description\r
-\r
-Returns:\r
-\r
- TODO: add return values\r
-\r
---*/\r
-{\r
- EFI_STATUS Status;\r
-\r
- Private->SimpleTextIn.Reset = UnixSimpleTextInReset;\r
- Private->SimpleTextIn.ReadKeyStroke = UnixSimpleTextInReadKeyStroke;\r
-\r
- Status = gBS->CreateEvent (\r
- EVT_NOTIFY_WAIT,\r
- TPL_NOTIFY,\r
- UnixSimpleTextInWaitForKey,\r
- Private,\r
- &Private->SimpleTextIn.WaitForKey\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- return Status;\r
-}\r