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 200