mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 03:58:31 +00:00 
			
		
		
		
	 f9b8ab5632
			
		
	
	
		f9b8ab5632
		
	
	
	
	
		
			
			git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10437 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			242 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			242 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*++
 | |
| 
 | |
| Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>
 | |
| 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
 | |
| http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| Module Name:
 | |
| 
 | |
|   ConsoleIn.c
 | |
| 
 | |
| Abstract:
 | |
| 
 | |
|   Console based on Posix APIs.
 | |
| 
 | |
|   This file attaches a SimpleTextIn protocol to a previously open window.
 | |
| 
 | |
|   The constructor for this protocol depends on an open window. Currently
 | |
|   the SimpleTextOut protocol creates a window when it's constructor is called.
 | |
|   Thus this code must run after the constructor for the SimpleTextOut
 | |
|   protocol
 | |
| 
 | |
| --*/
 | |
| 
 | |
| #include "Console.h"
 | |
| #include <sys/poll.h>
 | |
| 
 | |
| //
 | |
| // Private worker functions
 | |
| //
 | |
| EFI_STATUS
 | |
| UnixSimpleTextInCheckKey (
 | |
|   UNIX_SIMPLE_TEXT_PRIVATE_DATA  *Private
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| UnixSimpleTextInReset (
 | |
|   IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL          *This,
 | |
|   IN BOOLEAN                              ExtendedVerification
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   This                  - TODO: add argument description
 | |
|   ExtendedVerification  - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   EFI_SUCCESS - TODO: Add description for return value
 | |
| 
 | |
| --*/
 | |
| {
 | |
|   UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;
 | |
| 
 | |
|   Private = UNIX_SIMPLE_TEXT_IN_PRIVATE_DATA_FROM_THIS (This);
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| EFI_STATUS
 | |
| UnixConvertInputRecordToEfiKey (
 | |
|   IN  char c,
 | |
|   OUT EFI_INPUT_KEY   *Key
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   InputRecord - TODO: add argument description
 | |
|   Key         - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   EFI_NOT_READY - TODO: Add description for return value
 | |
|   EFI_NOT_READY - TODO: Add description for return value
 | |
|   EFI_NOT_READY - TODO: Add description for return value
 | |
|   EFI_SUCCESS - TODO: Add description for return value
 | |
| 
 | |
| --*/
 | |
| {
 | |
|   Key->ScanCode     = 0;
 | |
|   if (c == '\n')
 | |
|     c = '\r';
 | |
|   Key->UnicodeChar  = c;
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| UnixSimpleTextInReadKeyStroke (
 | |
|   IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL          *This,
 | |
|   OUT EFI_INPUT_KEY                       *Key
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   This  - TODO: add argument description
 | |
|   Key   - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   EFI_DEVICE_ERROR - TODO: Add description for return value
 | |
|   EFI_NOT_READY - TODO: Add description for return value
 | |
| 
 | |
| --*/
 | |
| {
 | |
|   EFI_STATUS                      Status;
 | |
|   UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;
 | |
|   char c;
 | |
| 
 | |
|   Private = UNIX_SIMPLE_TEXT_IN_PRIVATE_DATA_FROM_THIS (This);
 | |
| 
 | |
|   Status  = UnixSimpleTextInCheckKey (Private);
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   if (Private->UnixThunk->Read (0, &c, 1) != 1)
 | |
|     return EFI_NOT_READY;
 | |
|   Status = UnixConvertInputRecordToEfiKey (c, Key);
 | |
| 
 | |
|   return Status;
 | |
| }
 | |
| 
 | |
| VOID
 | |
| EFIAPI
 | |
| UnixSimpleTextInWaitForKey (
 | |
|   IN EFI_EVENT          Event,
 | |
|   IN VOID               *Context
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Event   - TODO: add argument description
 | |
|   Context - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| {
 | |
|   UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;
 | |
|   EFI_STATUS                      Status;
 | |
| 
 | |
|   Private = (UNIX_SIMPLE_TEXT_PRIVATE_DATA *) Context;
 | |
|   Status  = UnixSimpleTextInCheckKey (Private);
 | |
|   if (!EFI_ERROR (Status)) {
 | |
|     gBS->SignalEvent (Event);
 | |
|   }
 | |
| }
 | |
| 
 | |
| EFI_STATUS
 | |
| UnixSimpleTextInCheckKey (
 | |
|   UNIX_SIMPLE_TEXT_PRIVATE_DATA   *Private
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Private - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| {
 | |
|   struct pollfd pfd;
 | |
| 
 | |
|   pfd.fd = 0;
 | |
|   pfd.events = POLLIN;
 | |
|   if (Private->UnixThunk->Poll (&pfd, 1, 0) <= 0) {
 | |
|     return EFI_NOT_READY;
 | |
|   }
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| EFI_STATUS
 | |
| UnixSimpleTextInAttachToWindow (
 | |
|   IN  UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Private - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| {
 | |
|   EFI_STATUS  Status;
 | |
| 
 | |
|   Private->SimpleTextIn.Reset         = UnixSimpleTextInReset;
 | |
|   Private->SimpleTextIn.ReadKeyStroke = UnixSimpleTextInReadKeyStroke;
 | |
| 
 | |
|   Status = gBS->CreateEvent (
 | |
|                   EVT_NOTIFY_WAIT,
 | |
|                   TPL_NOTIFY,
 | |
|                   UnixSimpleTextInWaitForKey,
 | |
|                   Private,
 | |
|                   &Private->SimpleTextIn.WaitForKey
 | |
|                   );
 | |
|   ASSERT_EFI_ERROR (Status);
 | |
| 
 | |
|   return Status;
 | |
| }
 |