3 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 Private data for the Gop driver that is bound to the WinNt Thunk protocol
29 #include <Protocol/EmuIoThunk.h>
30 #include <Protocol/EmuGraphicsWindow.h>
31 #include <Protocol/SimpleTextIn.h>
32 #include <Protocol/SimpleTextInEx.h>
33 #include <Protocol/GraphicsOutput.h>
34 #include <Library/FrameBufferBltLib.h>
37 // WM_SYSKEYDOWN/WM_SYSKEYUP Notification
39 // bit 24: Specifies whether the key is an extended key,
40 // such as the right-hand ALT and CTRL keys that appear on
41 // an enhanced 101- or 102-key keyboard.
42 // The value is 1 if it is an extended key; otherwise, it is 0.
43 // bit 29:Specifies the context code.
44 // The value is 1 if the ALT key is down while the key is pressed/released;
45 // it is 0 if the WM_SYSKEYDOWN message is posted to the active window
46 // because no window has the keyboard focus.
47 #define GOP_EXTENDED_KEY (0x1 << 24)
48 #define GOP_ALT_KEY_PRESSED (0x1 << 29)
50 #define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s
57 EFI_KEY_DATA Q
[MAX_Q
];
61 #define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow"
66 EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsWindowIo
;
69 // GOP Private Data knowing when to start hardware
71 BOOLEAN HardwareNeedsStarting
;
76 HANDLE ThreadInited
; // Semaphore
77 HANDLE ThreadHandle
; // Thread
81 WNDCLASSEX WindowsClass
;
86 // This screen is used to redraw the scree when windows events happen. It's
87 // updated in the main thread and displayed in the windows thread.
89 BITMAPV4HEADER
*VirtualScreenInfo
;
91 FRAME_BUFFER_CONFIGURE
*FrameBufferConfigure
;
94 // Keyboard Queue used by Simple Text In.
95 // QueueForRead: WinProc thread adds, and main thread removes.
97 GOP_QUEUE_FIXED QueueForRead
;
99 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeRegisterdKeyCallback
;
100 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakRegisterdKeyCallback
;
101 VOID
*RegisterdKeyCallbackContext
;
103 EFI_KEY_STATE KeyState
;
117 BOOLEAN IsPartialKeySupport
;
118 } GRAPHICS_PRIVATE_DATA
;
119 #define GRAPHICS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('g', 'f', 'x', 'd')
120 #define GRAPHICS_PRIVATE_DATA_FROM_THIS(a) \
121 CR(a, GRAPHICS_PRIVATE_DATA, GraphicsWindowIo, GRAPHICS_PRIVATE_DATA_SIGNATURE)
125 // Gop Hardware abstraction internal worker functions
129 TODO: Add function description
131 @param Private TODO: add argument description
132 @param Key TODO: add argument description
134 @return TODO: add return values
139 IN GRAPHICS_PRIVATE_DATA
*Private
,
146 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
147 IN EFI_KEY_DATA
*KeyData
153 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
158 WinNtWndKeySetState (
159 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
160 IN EFI_KEY_TOGGLE_STATE
*KeyToggleState
165 WinNtWndRegisterKeyNotify (
166 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
167 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack
,
168 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack
,
174 WinNtWndCheckPointer (
175 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
180 WinNtWndGetPointerState (
181 IN EMU_GRAPHICS_WINDOW_PROTOCOL
*GraphicsIo
,
182 IN EFI_SIMPLE_POINTER_STATE
*State
186 IN GRAPHICS_PRIVATE_DATA
*Private
,
187 IN GOP_QUEUE_FIXED
*Queue
192 TODO: Add function description
194 @param Private TODO: add argument description
196 @retval EFI_SUCCESS TODO: Add description for return value
201 IN GRAPHICS_PRIVATE_DATA
*Private
,
202 IN GOP_QUEUE_FIXED
*Queue