3 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
4 SPDX-License-Identifier: BSD-2-Clause-Patent
12 Private data for the Gop driver that is bound to the WinNt Thunk protocol
22 #include <Protocol/EmuIoThunk.h>
23 #include <Protocol/EmuGraphicsWindow.h>
24 #include <Protocol/SimplePointer.h>
25 #include <Protocol/SimpleTextIn.h>
26 #include <Protocol/SimpleTextInEx.h>
27 #include <Protocol/GraphicsOutput.h>
28 #include <Library/FrameBufferBltLib.h>
31 // WM_SYSKEYDOWN/WM_SYSKEYUP Notification
33 // bit 24: Specifies whether the key is an extended key,
34 // such as the right-hand ALT and CTRL keys that appear on
35 // an enhanced 101- or 102-key keyboard.
36 // The value is 1 if it is an extended key; otherwise, it is 0.
37 // bit 29:Specifies the context code.
38 // The value is 1 if the ALT key is down while the key is pressed/released;
39 // it is 0 if the WM_SYSKEYDOWN message is posted to the active window
40 // because no window has the keyboard focus.
41 #define GOP_EXTENDED_KEY (0x1 << 24)
42 #define GOP_ALT_KEY_PRESSED (0x1 << 29)
44 #define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s
51 EFI_KEY_DATA Q
[MAX_Q
];
55 #define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow"
59 EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsWindowIo
;
62 // GOP Private Data knowing when to start hardware
64 BOOLEAN HardwareNeedsStarting
;
69 HANDLE ThreadInited
; // Semaphore
70 HANDLE ThreadHandle
; // Thread
74 WNDCLASSEX WindowsClass
;
79 // This screen is used to redraw the screen when windows events happen. It's
80 // updated in the main thread and displayed in the windows thread.
82 BITMAPV4HEADER
*VirtualScreenInfo
;
84 FRAME_BUFFER_CONFIGURE
*FrameBufferConfigure
;
87 // Keyboard Queue used by Simple Text In.
88 // QueueForRead: WinProc thread adds, and main thread removes.
90 GOP_QUEUE_FIXED QueueForRead
;
92 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeRegisterdKeyCallback
;
93 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakRegisterdKeyCallback
;
94 VOID
*RegisterdKeyCallbackContext
;
96 EFI_KEY_STATE KeyState
;
110 BOOLEAN IsPartialKeySupport
;
111 INT32 PointerPreviousX
;
112 INT32 PointerPreviousY
;
113 BOOLEAN PointerStateChanged
;
114 EFI_SIMPLE_POINTER_STATE PointerState
;
115 } GRAPHICS_PRIVATE_DATA
;
116 #define GRAPHICS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('g', 'f', 'x', 'd')
117 #define GRAPHICS_PRIVATE_DATA_FROM_THIS(a) \
118 CR(a, GRAPHICS_PRIVATE_DATA, GraphicsWindowIo, GRAPHICS_PRIVATE_DATA_SIGNATURE)
121 // Gop Hardware abstraction internal worker functions
125 TODO: Add function description
127 @param Private TODO: add argument description
128 @param Key TODO: add argument description
130 @return TODO: add return values
135 IN GRAPHICS_PRIVATE_DATA
*Private
,
142 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
143 IN EFI_KEY_DATA
*KeyData
149 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
154 WinNtWndKeySetState (
155 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
156 IN EFI_KEY_TOGGLE_STATE
*KeyToggleState
161 WinNtWndRegisterKeyNotify (
162 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
163 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack
,
164 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack
,
170 WinNtWndCheckPointer (
171 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
176 WinNtWndGetPointerState (
177 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
178 IN EFI_SIMPLE_POINTER_STATE
*State
183 IN GRAPHICS_PRIVATE_DATA
*Private
,
184 IN GOP_QUEUE_FIXED
*Queue
188 TODO: Add function description
190 @param Private TODO: add argument description
192 @retval EFI_SUCCESS TODO: Add description for return value
197 IN GRAPHICS_PRIVATE_DATA
*Private
,
198 IN GOP_QUEUE_FIXED
*Queue