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/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"
60 EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsWindowIo
;
63 // GOP Private Data knowing when to start hardware
65 BOOLEAN HardwareNeedsStarting
;
70 HANDLE ThreadInited
; // Semaphore
71 HANDLE ThreadHandle
; // Thread
75 WNDCLASSEX WindowsClass
;
80 // This screen is used to redraw the scree when windows events happen. It's
81 // updated in the main thread and displayed in the windows thread.
83 BITMAPV4HEADER
*VirtualScreenInfo
;
85 FRAME_BUFFER_CONFIGURE
*FrameBufferConfigure
;
88 // Keyboard Queue used by Simple Text In.
89 // QueueForRead: WinProc thread adds, and main thread removes.
91 GOP_QUEUE_FIXED QueueForRead
;
93 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeRegisterdKeyCallback
;
94 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakRegisterdKeyCallback
;
95 VOID
*RegisterdKeyCallbackContext
;
97 EFI_KEY_STATE KeyState
;
111 BOOLEAN IsPartialKeySupport
;
112 } GRAPHICS_PRIVATE_DATA
;
113 #define GRAPHICS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('g', 'f', 'x', 'd')
114 #define GRAPHICS_PRIVATE_DATA_FROM_THIS(a) \
115 CR(a, GRAPHICS_PRIVATE_DATA, GraphicsWindowIo, GRAPHICS_PRIVATE_DATA_SIGNATURE)
119 // Gop Hardware abstraction internal worker functions
123 TODO: Add function description
125 @param Private TODO: add argument description
126 @param Key TODO: add argument description
128 @return TODO: add return values
133 IN GRAPHICS_PRIVATE_DATA
*Private
,
140 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
141 IN EFI_KEY_DATA
*KeyData
147 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
152 WinNtWndKeySetState (
153 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
154 IN EFI_KEY_TOGGLE_STATE
*KeyToggleState
159 WinNtWndRegisterKeyNotify (
160 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
161 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack
,
162 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack
,
168 WinNtWndCheckPointer (
169 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
174 WinNtWndGetPointerState (
175 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
176 IN EFI_SIMPLE_POINTER_STATE
*State
180 IN GRAPHICS_PRIVATE_DATA
*Private
,
181 IN GOP_QUEUE_FIXED
*Queue
186 TODO: Add function description
188 @param Private TODO: add argument description
190 @retval EFI_SUCCESS TODO: Add description for return value
195 IN GRAPHICS_PRIVATE_DATA
*Private
,
196 IN GOP_QUEUE_FIXED
*Queue