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
23 #include <Protocol/EmuIoThunk.h>
24 #include <Protocol/EmuGraphicsWindow.h>
25 #include <Protocol/SimplePointer.h>
26 #include <Protocol/SimpleTextIn.h>
27 #include <Protocol/SimpleTextInEx.h>
28 #include <Protocol/GraphicsOutput.h>
29 #include <Library/FrameBufferBltLib.h>
32 // WM_SYSKEYDOWN/WM_SYSKEYUP Notification
34 // bit 24: Specifies whether the key is an extended key,
35 // such as the right-hand ALT and CTRL keys that appear on
36 // an enhanced 101- or 102-key keyboard.
37 // The value is 1 if it is an extended key; otherwise, it is 0.
38 // bit 29:Specifies the context code.
39 // The value is 1 if the ALT key is down while the key is pressed/released;
40 // it is 0 if the WM_SYSKEYDOWN message is posted to the active window
41 // because no window has the keyboard focus.
42 #define GOP_EXTENDED_KEY (0x1 << 24)
43 #define GOP_ALT_KEY_PRESSED (0x1 << 29)
45 #define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s
52 EFI_KEY_DATA Q
[MAX_Q
];
56 #define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow"
61 EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsWindowIo
;
64 // GOP Private Data knowing when to start hardware
66 BOOLEAN HardwareNeedsStarting
;
71 HANDLE ThreadInited
; // Semaphore
72 HANDLE ThreadHandle
; // Thread
76 WNDCLASSEX WindowsClass
;
81 // This screen is used to redraw the scree when windows events happen. It's
82 // updated in the main thread and displayed in the windows thread.
84 BITMAPV4HEADER
*VirtualScreenInfo
;
86 FRAME_BUFFER_CONFIGURE
*FrameBufferConfigure
;
89 // Keyboard Queue used by Simple Text In.
90 // QueueForRead: WinProc thread adds, and main thread removes.
92 GOP_QUEUE_FIXED QueueForRead
;
94 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeRegisterdKeyCallback
;
95 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakRegisterdKeyCallback
;
96 VOID
*RegisterdKeyCallbackContext
;
98 EFI_KEY_STATE KeyState
;
112 BOOLEAN IsPartialKeySupport
;
113 INT32 PointerPreviousX
;
114 INT32 PointerPreviousY
;
115 BOOLEAN PointerStateChanged
;
116 EFI_SIMPLE_POINTER_STATE PointerState
;
117 } GRAPHICS_PRIVATE_DATA
;
118 #define GRAPHICS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('g', 'f', 'x', 'd')
119 #define GRAPHICS_PRIVATE_DATA_FROM_THIS(a) \
120 CR(a, GRAPHICS_PRIVATE_DATA, GraphicsWindowIo, GRAPHICS_PRIVATE_DATA_SIGNATURE)
124 // Gop Hardware abstraction internal worker functions
128 TODO: Add function description
130 @param Private TODO: add argument description
131 @param Key TODO: add argument description
133 @return TODO: add return values
138 IN GRAPHICS_PRIVATE_DATA
*Private
,
145 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
146 IN EFI_KEY_DATA
*KeyData
152 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
157 WinNtWndKeySetState (
158 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
159 IN EFI_KEY_TOGGLE_STATE
*KeyToggleState
164 WinNtWndRegisterKeyNotify (
165 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
166 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack
,
167 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack
,
173 WinNtWndCheckPointer (
174 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
179 WinNtWndGetPointerState (
180 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
181 IN EFI_SIMPLE_POINTER_STATE
*State
185 IN GRAPHICS_PRIVATE_DATA
*Private
,
186 IN GOP_QUEUE_FIXED
*Queue
191 TODO: Add function description
193 @param Private TODO: add argument description
195 @retval EFI_SUCCESS TODO: Add description for return value
200 IN GRAPHICS_PRIVATE_DATA
*Private
,
201 IN GOP_QUEUE_FIXED
*Queue