/** @file | |
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
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/SimplePointer.h> | |
#include <Protocol/SimpleTextIn.h> | |
#include <Protocol/SimpleTextInEx.h> | |
#include <Protocol/GraphicsOutput.h> | |
#include <Library/FrameBufferBltLib.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 screen when windows events happen. It's | |
// updated in the main thread and displayed in the windows thread. | |
// | |
BITMAPV4HEADER *VirtualScreenInfo; | |
FRAME_BUFFER_CONFIGURE *FrameBufferConfigure; | |
// | |
// 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; | |
INT32 PointerPreviousX; | |
INT32 PointerPreviousY; | |
BOOLEAN PointerStateChanged; | |
EFI_SIMPLE_POINTER_STATE PointerState; | |
} 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 |