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