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 205