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