]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/Win/Host/WinGop.h
EmulatorPkg/EmuGopDxe: Clear screen to black in GOP.SetMode
[mirror_edk2.git] / EmulatorPkg / Win / Host / WinGop.h
CommitLineData
7a465451
RN
1/** @file\r
2\r
3Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
4This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12Module Name:\r
13\r
14 WinGop.h\r
15\r
16Abstract:\r
17\r
18 Private data for the Gop driver that is bound to the WinNt Thunk protocol\r
19\r
20\r
21**/\r
22\r
23#ifndef _WIN_GOP_H_\r
24#define _WIN_GOP_H_\r
25\r
26\r
27#include "WinHost.h"\r
28\r
29#include <Protocol/EmuIoThunk.h>\r
30#include <Protocol/EmuGraphicsWindow.h>\r
31#include <Protocol/SimpleTextIn.h>\r
32#include <Protocol/SimpleTextInEx.h>\r
33#include <Protocol/GraphicsOutput.h>\r
34\r
35//\r
36// WM_SYSKEYDOWN/WM_SYSKEYUP Notification\r
37// lParam\r
38// bit 24: Specifies whether the key is an extended key,\r
39// such as the right-hand ALT and CTRL keys that appear on\r
40// an enhanced 101- or 102-key keyboard.\r
41// The value is 1 if it is an extended key; otherwise, it is 0.\r
42// bit 29:Specifies the context code.\r
43// The value is 1 if the ALT key is down while the key is pressed/released;\r
44// it is 0 if the WM_SYSKEYDOWN message is posted to the active window\r
45// because no window has the keyboard focus.\r
46#define GOP_EXTENDED_KEY (0x1 << 24)\r
47#define GOP_ALT_KEY_PRESSED (0x1 << 29)\r
48\r
49#define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s\r
50\r
51#define MAX_Q 256\r
52\r
53typedef struct {\r
54 UINTN Front;\r
55 UINTN Rear;\r
56 EFI_KEY_DATA Q[MAX_Q];\r
57 CRITICAL_SECTION Cs;\r
58} GOP_QUEUE_FIXED;\r
59\r
60#define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow"\r
61\r
62\r
63typedef struct {\r
64 UINT64 Signature;\r
65 EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsWindowIo;\r
66\r
67 //\r
68 // GOP Private Data knowing when to start hardware\r
69 //\r
70 BOOLEAN HardwareNeedsStarting;\r
71\r
72 CHAR16 *WindowName;\r
73 CHAR16 Buffer[160];\r
74\r
75 HANDLE ThreadInited; // Semaphore\r
76 HANDLE ThreadHandle; // Thread\r
77 DWORD ThreadId;\r
78\r
79 HWND WindowHandle;\r
80 WNDCLASSEX WindowsClass;\r
81\r
82 UINT32 Width;\r
83 UINT32 Height;\r
84 //\r
85 // This screen is used to redraw the scree when windows events happen. It's\r
86 // updated in the main thread and displayed in the windows thread.\r
87 //\r
88 BITMAPV4HEADER *VirtualScreenInfo;\r
89 RGBQUAD *VirtualScreen;\r
90\r
91 EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FillLine;\r
92\r
93 //\r
94 // Keyboard Queue used by Simple Text In.\r
95 // QueueForRead: WinProc thread adds, and main thread removes.\r
96 //\r
97 GOP_QUEUE_FIXED QueueForRead;\r
98\r
99 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeRegisterdKeyCallback;\r
100 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakRegisterdKeyCallback;\r
101 VOID *RegisterdKeyCallbackContext;\r
102\r
103 EFI_KEY_STATE KeyState;\r
104 BOOLEAN LeftShift;\r
105 BOOLEAN RightShift;\r
106 BOOLEAN LeftAlt;\r
107 BOOLEAN RightAlt;\r
108 BOOLEAN LeftCtrl;\r
109 BOOLEAN RightCtrl;\r
110 BOOLEAN LeftLogo;\r
111 BOOLEAN RightLogo;\r
112 BOOLEAN Menu;\r
113 BOOLEAN SysReq;\r
114 BOOLEAN NumLock;\r
115 BOOLEAN ScrollLock;\r
116 BOOLEAN CapsLock;\r
117 BOOLEAN IsPartialKeySupport;\r
118} GRAPHICS_PRIVATE_DATA;\r
119#define GRAPHICS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('g', 'f', 'x', 'd')\r
120#define GRAPHICS_PRIVATE_DATA_FROM_THIS(a) \\r
121 CR(a, GRAPHICS_PRIVATE_DATA, GraphicsWindowIo, GRAPHICS_PRIVATE_DATA_SIGNATURE)\r
122\r
123\r
124//\r
125// Gop Hardware abstraction internal worker functions\r
126//\r
127\r
128/**\r
129 TODO: Add function description\r
130\r
131 @param Private TODO: add argument description\r
132 @param Key TODO: add argument description\r
133\r
134 @return TODO: add return values\r
135\r
136**/\r
137EFI_STATUS\r
138GopPrivateAddKey (\r
139 IN GRAPHICS_PRIVATE_DATA *Private,\r
140 IN EFI_INPUT_KEY Key\r
141 );\r
142\r
143EFI_STATUS\r
144EFIAPI\r
145WinNtWndGetKey (\r
146 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,\r
147 IN EFI_KEY_DATA *KeyData\r
148 );\r
149\r
150EFI_STATUS\r
151EFIAPI\r
152WinNtWndCheckKey (\r
153 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo\r
154 );\r
155\r
156EFI_STATUS\r
157EFIAPI\r
158WinNtWndKeySetState (\r
159 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,\r
160 IN EFI_KEY_TOGGLE_STATE *KeyToggleState\r
161 );\r
162\r
163EFI_STATUS\r
164EFIAPI\r
165WinNtWndRegisterKeyNotify (\r
166 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,\r
167 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack,\r
168 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack,\r
169 IN VOID *Context\r
170 );\r
171\r
172EFI_STATUS\r
173EFIAPI\r
174WinNtWndCheckPointer (\r
175 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo\r
176 );\r
177\r
178EFI_STATUS\r
179EFIAPI\r
180WinNtWndGetPointerState (\r
181 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,\r
182 IN EFI_SIMPLE_POINTER_STATE *State\r
183 );\r
184EFI_STATUS\r
185GopPrivateCreateQ (\r
186 IN GRAPHICS_PRIVATE_DATA *Private,\r
187 IN GOP_QUEUE_FIXED *Queue\r
188 );\r
189\r
190\r
191/**\r
192 TODO: Add function description\r
193\r
194 @param Private TODO: add argument description\r
195\r
196 @retval EFI_SUCCESS TODO: Add description for return value\r
197\r
198**/\r
199EFI_STATUS\r
200GopPrivateDestroyQ (\r
201 IN GRAPHICS_PRIVATE_DATA *Private,\r
202 IN GOP_QUEUE_FIXED *Queue\r
203 );\r
204#endif\r
205\r