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