EmulatorPkg/Win: Add input/output support
The patch adds GOP and SimpleTextIn[Ex] support. Now firmware can boot to UI and Shell but timer doesn't work. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Andrew Fish <afish@apple.com> Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
This commit is contained in:
205
EmulatorPkg/Win/Host/WinGop.h
Normal file
205
EmulatorPkg/Win/Host/WinGop.h
Normal file
@@ -0,0 +1,205 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2006 - 2018, 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:
|
||||
|
||||
WinGop.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Private data for the Gop driver that is bound to the WinNt Thunk protocol
|
||||
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _WIN_GOP_H_
|
||||
#define _WIN_GOP_H_
|
||||
|
||||
|
||||
#include "WinHost.h"
|
||||
|
||||
#include <Protocol/EmuIoThunk.h>
|
||||
#include <Protocol/EmuGraphicsWindow.h>
|
||||
#include <Protocol/SimpleTextIn.h>
|
||||
#include <Protocol/SimpleTextInEx.h>
|
||||
#include <Protocol/GraphicsOutput.h>
|
||||
|
||||
//
|
||||
// WM_SYSKEYDOWN/WM_SYSKEYUP Notification
|
||||
// lParam
|
||||
// bit 24: Specifies whether the key is an extended key,
|
||||
// such as the right-hand ALT and CTRL keys that appear on
|
||||
// an enhanced 101- or 102-key keyboard.
|
||||
// The value is 1 if it is an extended key; otherwise, it is 0.
|
||||
// bit 29:Specifies the context code.
|
||||
// The value is 1 if the ALT key is down while the key is pressed/released;
|
||||
// it is 0 if the WM_SYSKEYDOWN message is posted to the active window
|
||||
// because no window has the keyboard focus.
|
||||
#define GOP_EXTENDED_KEY (0x1 << 24)
|
||||
#define GOP_ALT_KEY_PRESSED (0x1 << 29)
|
||||
|
||||
#define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s
|
||||
|
||||
#define MAX_Q 256
|
||||
|
||||
typedef struct {
|
||||
UINTN Front;
|
||||
UINTN Rear;
|
||||
EFI_KEY_DATA Q[MAX_Q];
|
||||
CRITICAL_SECTION Cs;
|
||||
} GOP_QUEUE_FIXED;
|
||||
|
||||
#define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow"
|
||||
|
||||
|
||||
typedef struct {
|
||||
UINT64 Signature;
|
||||
EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsWindowIo;
|
||||
|
||||
//
|
||||
// GOP Private Data knowing when to start hardware
|
||||
//
|
||||
BOOLEAN HardwareNeedsStarting;
|
||||
|
||||
CHAR16 *WindowName;
|
||||
CHAR16 Buffer[160];
|
||||
|
||||
HANDLE ThreadInited; // Semaphore
|
||||
HANDLE ThreadHandle; // Thread
|
||||
DWORD ThreadId;
|
||||
|
||||
HWND WindowHandle;
|
||||
WNDCLASSEX WindowsClass;
|
||||
|
||||
UINT32 Width;
|
||||
UINT32 Height;
|
||||
//
|
||||
// This screen is used to redraw the scree when windows events happen. It's
|
||||
// updated in the main thread and displayed in the windows thread.
|
||||
//
|
||||
BITMAPV4HEADER *VirtualScreenInfo;
|
||||
RGBQUAD *VirtualScreen;
|
||||
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FillLine;
|
||||
|
||||
//
|
||||
// Keyboard Queue used by Simple Text In.
|
||||
// QueueForRead: WinProc thread adds, and main thread removes.
|
||||
//
|
||||
GOP_QUEUE_FIXED QueueForRead;
|
||||
|
||||
EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeRegisterdKeyCallback;
|
||||
EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakRegisterdKeyCallback;
|
||||
VOID *RegisterdKeyCallbackContext;
|
||||
|
||||
EFI_KEY_STATE KeyState;
|
||||
BOOLEAN LeftShift;
|
||||
BOOLEAN RightShift;
|
||||
BOOLEAN LeftAlt;
|
||||
BOOLEAN RightAlt;
|
||||
BOOLEAN LeftCtrl;
|
||||
BOOLEAN RightCtrl;
|
||||
BOOLEAN LeftLogo;
|
||||
BOOLEAN RightLogo;
|
||||
BOOLEAN Menu;
|
||||
BOOLEAN SysReq;
|
||||
BOOLEAN NumLock;
|
||||
BOOLEAN ScrollLock;
|
||||
BOOLEAN CapsLock;
|
||||
BOOLEAN IsPartialKeySupport;
|
||||
} GRAPHICS_PRIVATE_DATA;
|
||||
#define GRAPHICS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('g', 'f', 'x', 'd')
|
||||
#define GRAPHICS_PRIVATE_DATA_FROM_THIS(a) \
|
||||
CR(a, GRAPHICS_PRIVATE_DATA, GraphicsWindowIo, GRAPHICS_PRIVATE_DATA_SIGNATURE)
|
||||
|
||||
|
||||
//
|
||||
// Gop Hardware abstraction internal worker functions
|
||||
//
|
||||
|
||||
/**
|
||||
TODO: Add function description
|
||||
|
||||
@param Private TODO: add argument description
|
||||
@param Key TODO: add argument description
|
||||
|
||||
@return TODO: add return values
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
GopPrivateAddKey (
|
||||
IN GRAPHICS_PRIVATE_DATA *Private,
|
||||
IN EFI_INPUT_KEY Key
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
WinNtWndGetKey (
|
||||
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,
|
||||
IN EFI_KEY_DATA *KeyData
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
WinNtWndCheckKey (
|
||||
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
WinNtWndKeySetState (
|
||||
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,
|
||||
IN EFI_KEY_TOGGLE_STATE *KeyToggleState
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
WinNtWndRegisterKeyNotify (
|
||||
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,
|
||||
IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack,
|
||||
IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack,
|
||||
IN VOID *Context
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
WinNtWndCheckPointer (
|
||||
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
WinNtWndGetPointerState (
|
||||
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,
|
||||
IN EFI_SIMPLE_POINTER_STATE *State
|
||||
);
|
||||
EFI_STATUS
|
||||
GopPrivateCreateQ (
|
||||
IN GRAPHICS_PRIVATE_DATA *Private,
|
||||
IN GOP_QUEUE_FIXED *Queue
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
TODO: Add function description
|
||||
|
||||
@param Private TODO: add argument description
|
||||
|
||||
@retval EFI_SUCCESS TODO: Add description for return value
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
GopPrivateDestroyQ (
|
||||
IN GRAPHICS_PRIVATE_DATA *Private,
|
||||
IN GOP_QUEUE_FIXED *Queue
|
||||
);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user