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