303 lines
12 KiB
C
303 lines
12 KiB
C
/** @file
|
|
|
|
;******************************************************************************
|
|
;* Copyright (c) 2012 - 2014, Insyde Software Corp. All Rights Reserved.
|
|
;*
|
|
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
|
|
;* transmit, broadcast, present, recite, release, license or otherwise exploit
|
|
;* any part of this publication in any form, by any means, without the prior
|
|
;* written permission of Insyde Software Corporation.
|
|
;*
|
|
;******************************************************************************
|
|
|
|
*/
|
|
|
|
#include "SetupMouse.h"
|
|
#include "KeyboardLayout.h"
|
|
#include <Library/PcdLib.h>
|
|
|
|
typedef enum {
|
|
STYLE_NORMAL,
|
|
STYLE_LEFTSHIFT,
|
|
STYLE_RIGHTSHIFT,
|
|
STYLE_CLOSE,
|
|
STYLE_TAB,
|
|
STYLE_CAPS,
|
|
STYLE_ENTER,
|
|
STYLE_BACKSPACE
|
|
} KEY_STYLE;
|
|
|
|
|
|
//
|
|
// {font color:BGRA}, {Image Id}, {ScaleGrid}
|
|
//
|
|
KEY_STYLE_ARRAY mEnglishStyleList[] = {
|
|
{
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_NORMAL), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_NORMAL), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_PRESS), {5,5,5,5}}
|
|
},
|
|
|
|
{
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_LEFTSHIFT), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_LEFTSHIFT), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_LEFTSHIFT_PRESS), {5,5,5,5}}
|
|
},
|
|
|
|
{
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_RIGHTSHIFT), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_RIGHTSHIFT), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_RIGHTSHIFT_PRESS), {5,5,5,5}}
|
|
},
|
|
|
|
{
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_CLOSE), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_CLOSE), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_CLOSE_PRESS), {5,5,5,5}}
|
|
},
|
|
|
|
{
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_TAB), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_TAB), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_TAB_PRESS), {5,5,5,5}}
|
|
},
|
|
|
|
{
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_CAPS), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_CAPS), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_CAPS_PRESS), {5,5,5,5}}
|
|
},
|
|
|
|
{
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_ENTER), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_ENTER), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_ENTER_PRESS), {5,5,5,5}}
|
|
},
|
|
|
|
{
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_BACKSPACE), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_BACKSPACE), {5,5,5,5}},
|
|
{{0x00, 0x00, 0x00, 0xFF}, IMAGE_TOKEN (IMAGE_KB_BACKSPACE_PRESS), {5,5,5,5}}
|
|
},
|
|
|
|
};
|
|
|
|
KEY_MAP_ENTRY mEnglishEntryList[] = {
|
|
{STYLE_BACKSPACE, 0X8 , { 800 , 64 , 885 , 115 }},
|
|
{STYLE_TAB, 0X9 , { 9 , 123 , 94 , 175 }},
|
|
{STYLE_ENTER, 0XD , { 783 , 183 , 884 , 235 }},
|
|
{STYLE_CAPS, 0X14 , { 8 , 183 , 110 , 235 }},
|
|
{STYLE_NORMAL, 0X1B , { 9 , 22 , 64 , 57 }},
|
|
{STYLE_NORMAL, 0X20 , { 265 , 302 , 625 , 364 }},
|
|
{STYLE_NORMAL, 0X30 , { 619 , 64 , 674 , 115 }},
|
|
{STYLE_NORMAL, 0X31 , { 68 , 64 , 123 , 115 }},
|
|
{STYLE_NORMAL, 0X32 , { 130 , 64 , 185 , 115 }},
|
|
{STYLE_NORMAL, 0X33 , { 193 , 64 , 247 , 115 }},
|
|
{STYLE_NORMAL, 0X34 , { 253 , 64 , 307 , 115 }},
|
|
{STYLE_NORMAL, 0X35 , { 314 , 64 , 369 , 115 }},
|
|
{STYLE_NORMAL, 0X36 , { 376 , 64 , 431 , 115 }},
|
|
{STYLE_NORMAL, 0X37 , { 436 , 64 , 491 , 115 }},
|
|
{STYLE_NORMAL, 0X38 , { 497 , 64 , 552 , 115 }},
|
|
{STYLE_NORMAL, 0X39 , { 558 , 64 , 613 , 115 }},
|
|
{STYLE_NORMAL, 0X41 , { 114 , 183 , 169 , 235 }},
|
|
{STYLE_NORMAL, 0X42 , { 386 , 243 , 441 , 295 }},
|
|
{STYLE_NORMAL, 0X43 , { 264 , 243 , 319 , 295 }},
|
|
{STYLE_NORMAL, 0X44 , { 236 , 183 , 291 , 235 }},
|
|
{STYLE_NORMAL, 0X45 , { 220 , 123 , 275 , 175 }},
|
|
{STYLE_NORMAL, 0X46 , { 297 , 183 , 352 , 235 }},
|
|
{STYLE_NORMAL, 0X47 , { 358 , 183 , 413 , 235 }},
|
|
{STYLE_NORMAL, 0X48 , { 419 , 183 , 474 , 235 }},
|
|
{STYLE_NORMAL, 0X49 , { 526 , 123 , 581 , 175 }},
|
|
{STYLE_NORMAL, 0X4A , { 481 , 183 , 536 , 235 }},
|
|
{STYLE_NORMAL, 0X4B , { 542 , 183 , 597 , 235 }},
|
|
{STYLE_NORMAL, 0X4C , { 602 , 183 , 657 , 235 }},
|
|
{STYLE_NORMAL, 0X4D , { 509 , 243 , 564 , 295 }},
|
|
{STYLE_NORMAL, 0X4E , { 449 , 243 , 504 , 295 }},
|
|
{STYLE_NORMAL, 0X4F , { 588 , 123 , 643 , 175 }},
|
|
{STYLE_NORMAL, 0X50 , { 648 , 123 , 703 , 175 }},
|
|
{STYLE_NORMAL, 0X51 , { 98 , 123 , 153 , 175 }},
|
|
{STYLE_NORMAL, 0X52 , { 281 , 123 , 336 , 175 }},
|
|
{STYLE_NORMAL, 0X53 , { 174 , 183 , 229 , 235 }},
|
|
{STYLE_NORMAL, 0X54 , { 342 , 123 , 397 , 175 }},
|
|
{STYLE_NORMAL, 0X55 , { 465 , 123 , 520 , 175 }},
|
|
{STYLE_NORMAL, 0X56 , { 323 , 243 , 378 , 295 }},
|
|
{STYLE_NORMAL, 0X57 , { 159 , 123 , 214 , 175 }},
|
|
{STYLE_NORMAL, 0X58 , { 203 , 243 , 258 , 295 }},
|
|
{STYLE_NORMAL, 0X59 , { 403 , 123 , 458 , 175 }},
|
|
{STYLE_NORMAL, 0X5A , { 142 , 243 , 197 , 295 }},
|
|
{STYLE_NORMAL, 0X70 , { 71 , 22 , 126 , 57 }},
|
|
{STYLE_NORMAL, 0X71 , { 134 , 22 , 189 , 57 }},
|
|
{STYLE_NORMAL, 0X72 , { 198 , 22 , 253 , 57 }},
|
|
{STYLE_NORMAL, 0X73 , { 261 , 22 , 316 , 57 }},
|
|
{STYLE_NORMAL, 0X74 , { 324 , 22 , 379 , 57 }},
|
|
{STYLE_NORMAL, 0X75 , { 387 , 22 , 442 , 57 }},
|
|
{STYLE_NORMAL, 0X76 , { 450 , 22 , 505 , 57 }},
|
|
{STYLE_NORMAL, 0X77 , { 515 , 22 , 570 , 57 }},
|
|
{STYLE_NORMAL, 0X78 , { 577 , 22 , 632 , 57 }},
|
|
{STYLE_NORMAL, 0X79 , { 641 , 22 , 696 , 57 }},
|
|
{STYLE_NORMAL, 0X7A , { 703 , 22 , 758 , 57 }},
|
|
{STYLE_NORMAL, 0X7B , { 767 , 22 , 822 , 57 }},
|
|
{STYLE_LEFTSHIFT, 0XA0 , { 8 , 243 , 139 , 295 }},
|
|
{STYLE_RIGHTSHIFT, 0XA1 , { 754 , 243 , 885 , 295 }},
|
|
{STYLE_NORMAL, 0XA2 , { 7 , 302 , 92 , 364 }},
|
|
{STYLE_NORMAL, 0XA3 , { 631 , 302 , 716 , 364 }},
|
|
{STYLE_NORMAL, 0XA4 , { 99 , 304 , 169 , 364 }},
|
|
{STYLE_NORMAL, 0XA5 , { 721 , 302 , 792 , 364 }},
|
|
{STYLE_NORMAL, 0XBA , { 664 , 183 , 719 , 235 }},
|
|
{STYLE_NORMAL, 0XBB , { 743 , 63 , 798 , 115 }},
|
|
{STYLE_NORMAL, 0XBC , { 570 , 243 , 625 , 295 }},
|
|
{STYLE_NORMAL, 0XBD , { 681 , 64 , 736 , 115 }},
|
|
{STYLE_NORMAL, 0XBE , { 631 , 243 , 686 , 295 }},
|
|
{STYLE_NORMAL, 0XBF , { 693 , 243 , 748 , 295 }},
|
|
{STYLE_NORMAL, 0XC0 , { 8 , 64 , 63 , 115 }},
|
|
{STYLE_CLOSE, 0XC3 , { 800 , 302 , 885 , 364 }},
|
|
{STYLE_NORMAL, 0XDB , { 709 , 123 , 764 , 175 }},
|
|
{STYLE_NORMAL, 0XDC , { 831 , 123 , 886 , 175 }},
|
|
{STYLE_NORMAL, 0XDD , { 771 , 123 , 826 , 175 }},
|
|
{STYLE_NORMAL, 0XDE , { 725 , 183 , 780 , 235 }},
|
|
{STYLE_NORMAL, 0x2D , { 831 , 22 , 886 , 57 }},
|
|
};
|
|
|
|
UINT8 mKeyConvertionTable[][4] = {
|
|
//
|
|
// WinKey, ScanCode, Unicode, Shift,
|
|
//
|
|
{0x08, SCAN_NULL, 0x08, 0x08}, // VK_BACK
|
|
{0x09, SCAN_NULL, 0x09, 0x09}, // VK_TAB
|
|
{0x0d, SCAN_NULL, 0x0d, 0x0d}, // VK_RETURN
|
|
{0x14, SCAN_NULL, 0x00, 0x00}, // VK_CAPITAL
|
|
{0x1b, SCAN_ESC, 0x00, 0x00}, // VK_ESC
|
|
{0x20, SCAN_NULL, ' ', ' '}, // VK_SPACE
|
|
{0x25, SCAN_LEFT, 0x00, 0x00}, // VK_LEFT
|
|
{0x26, SCAN_UP, 0x00, 0x00}, // VK_UP
|
|
{0x27, SCAN_RIGHT, 0x00, 0x00}, // VK_RIGHTT
|
|
{0x28, SCAN_DOWN, 0x00, 0x00}, // VK_DOWN
|
|
{0x2d, SCAN_INSERT, 0x00, 0x00}, // VK_INSERT
|
|
{0x2e, SCAN_DELETE, 0x00, 0x00}, // VK_DELETETE
|
|
{0x30, SCAN_NULL, '0', ')'}, // 0
|
|
{0x31, SCAN_NULL, '1', '!'}, // 1
|
|
{0x32, SCAN_NULL, '2', '@'}, // 2
|
|
{0x33, SCAN_NULL, '3', '#'}, // 3
|
|
{0x34, SCAN_NULL, '4', '$'}, // 4
|
|
{0x35, SCAN_NULL, '5', '%'}, // 5
|
|
{0x36, SCAN_NULL, '6', '^'}, // 6
|
|
{0x37, SCAN_NULL, '7', '&'}, // 7
|
|
{0x38, SCAN_NULL, '8', '*'}, // 8
|
|
{0x39, SCAN_NULL, '9', '('}, // 9
|
|
{0x41, SCAN_NULL, 'a', 'A'}, // A
|
|
{0x42, SCAN_NULL, 'b', 'B'}, // B
|
|
{0x43, SCAN_NULL, 'c', 'C'}, // C
|
|
{0x44, SCAN_NULL, 'd', 'D'}, // D
|
|
{0x45, SCAN_NULL, 'e', 'E'}, // E
|
|
{0x46, SCAN_NULL, 'f', 'F'}, // F
|
|
{0x47, SCAN_NULL, 'g', 'G'}, // G
|
|
{0x48, SCAN_NULL, 'h', 'H'}, // H
|
|
{0x49, SCAN_NULL, 'i', 'I'}, // I
|
|
{0x4a, SCAN_NULL, 'j', 'J'}, // J
|
|
{0x4b, SCAN_NULL, 'k', 'K'}, // K
|
|
{0x4c, SCAN_NULL, 'l', 'L'}, // L
|
|
{0x4d, SCAN_NULL, 'm', 'M'}, // M
|
|
{0x4e, SCAN_NULL, 'n', 'N'}, // N
|
|
{0x4f, SCAN_NULL, 'o', 'O'}, // O
|
|
{0x50, SCAN_NULL, 'p', 'P'}, // P
|
|
{0x51, SCAN_NULL, 'q', 'Q'}, // Q
|
|
{0x52, SCAN_NULL, 'r', 'R'}, // R
|
|
{0x53, SCAN_NULL, 's', 'S'}, // S
|
|
{0x54, SCAN_NULL, 't', 'T'}, // T
|
|
{0x55, SCAN_NULL, 'u', 'U'}, // U
|
|
{0x56, SCAN_NULL, 'v', 'V'}, // V
|
|
{0x57, SCAN_NULL, 'w', 'W'}, // W
|
|
{0x58, SCAN_NULL, 'x', 'X'}, // X
|
|
{0x59, SCAN_NULL, 'y', 'Y'}, // Y
|
|
{0x5a, SCAN_NULL, 'z', 'Z'}, // Z
|
|
{0x5b, SCAN_NULL, 0x00, 0x00}, // VK_LWIN
|
|
{0x5d, SCAN_NULL, 0x00, 0x00}, // VK_APP
|
|
{0xa0, SCAN_NULL, 0x00, 0x00}, // VK_LSHIFT
|
|
{0xa1, SCAN_NULL, 0x00, 0x00}, // VK_RSHIFT
|
|
{0xa2, SCAN_NULL, 0x00, 0x00}, // VK_LCONTROL
|
|
{0xa3, SCAN_NULL, 0x00, 0x00}, // VK_DstRcONTROL
|
|
{0xa4, SCAN_NULL, 0x00, 0x00}, // VK_LMENU
|
|
{0xa5, SCAN_NULL, 0x00, 0x00}, // VK_RMENU
|
|
{0xba, SCAN_NULL, ';', ':'}, // VK_OEM_1 ';:' for US
|
|
{0xbb, SCAN_NULL, '=', '+'}, // VK_OEM_PLUS '+' any country
|
|
{0xbc, SCAN_NULL, ',', '<'}, // VK_OEM_COMMA ',' any country
|
|
{0xbd, SCAN_NULL, '-', '_'}, // VK_OEM_MINUS '-' any country
|
|
{0xbe, SCAN_NULL, '.', '>'}, // VK_OEM_PERIOD '.' any country
|
|
{0xbf, SCAN_NULL, '/', '?'}, // VK_OEM_2 '/?' for US
|
|
{0xc0, SCAN_NULL, '`', '~'}, // VK_OEM_3 '`~' for US
|
|
{0xc3, SCAN_NULL, 0x00, 0x00}, // close
|
|
{0xdb, SCAN_NULL, '[', '{'}, // VK_OEM_4 '[{' for US
|
|
{0xdc, SCAN_NULL, '\\', '|'}, // VK_OEM_5 '\|' for US
|
|
{0xdd, SCAN_NULL, ']', '}'}, // VK_OEM_6 ']}' for US
|
|
{0xde, SCAN_NULL, '\'', '"'}, // VK_OEM_7 ''"' for US
|
|
{0xe8, SCAN_NULL, 0x00, 0x00}, // Fn
|
|
{0x70, SCAN_F1, CHAR_NULL, 0x00}, // VK_F1
|
|
{0x71, SCAN_F2, CHAR_NULL, 0x00}, // VK_F2
|
|
{0x72, SCAN_F3, CHAR_NULL, 0x00}, // VK_F3
|
|
{0x73, SCAN_F4, CHAR_NULL, 0x00}, // VK_F4
|
|
{0x74, SCAN_F5, CHAR_NULL, 0x00}, // VK_F5
|
|
{0x75, SCAN_F6, CHAR_NULL, 0x00}, // VK_F6
|
|
{0x76, SCAN_F7, CHAR_NULL, 0x00}, // VK_F7
|
|
{0x77, SCAN_F8, CHAR_NULL, 0x00}, // VK_F8
|
|
{0x78, SCAN_F9, CHAR_NULL, 0x00}, // VK_F9
|
|
{0x79, SCAN_F10, CHAR_NULL, 0x00}, // VK_F10
|
|
{0x7a, SCAN_F11, CHAR_NULL, 0x00}, // VK_F11
|
|
{0x7b, SCAN_F12, CHAR_NULL, 0x00}, // VK_F12
|
|
};
|
|
|
|
KEY_MAP_STR mConvertWinKeyToStr[] = {
|
|
{VK_ESCAPE, L"Esc"},
|
|
{VK_LCONTROL, L"Ctrl" },
|
|
{VK_RCONTROL, L"Ctrl" },
|
|
{VK_LMENU, L"Alt" },
|
|
{VK_RMENU, L"Alt" },
|
|
{VK_DELETE, L"Del" },
|
|
{VK_UP, L"^"},
|
|
{VK_DOWN, L"v"},
|
|
{VK_LEFT, L"<"},
|
|
{VK_RIGHT, L">"},
|
|
{VK_LWIN, L"Win"},
|
|
{VK_RWIN, L"Win"},
|
|
{VK_APPS, L"App"},
|
|
{VK_F1, L"F1"},
|
|
{VK_F2, L"F2"},
|
|
{VK_F3, L"F3"},
|
|
{VK_F4, L"F4"},
|
|
{VK_F5, L"F5"},
|
|
{VK_F6, L"F6"},
|
|
{VK_F7, L"F7"},
|
|
{VK_F8, L"F8"},
|
|
{VK_F9, L"F9"},
|
|
{VK_F10, L"F10"},
|
|
{VK_F11, L"F11"},
|
|
{VK_F12, L"F12"},
|
|
{0xE8, L"Fn"},
|
|
{VK_INSERT, L"Ins"},
|
|
{0, NULL},
|
|
};
|
|
|
|
|
|
KEYBOARD_LAYOUT mEnglishKeyboardLayout = {
|
|
900,
|
|
378,
|
|
0,
|
|
0,
|
|
IMAGE_TOKEN (IMAGE_KB_BACKGROUND),
|
|
{5, 5, 5, 5},
|
|
sizeof (mEnglishEntryList) / sizeof (mEnglishEntryList[0]),
|
|
mEnglishEntryList,
|
|
sizeof (mEnglishStyleList) / sizeof (mEnglishStyleList[0]),
|
|
mEnglishStyleList,
|
|
FixedPcdGet16 (PcdVirtualKeyboardFontSize)
|
|
};
|
|
|
|
KEYBOARD_LAYOUT *mKeyboardLayoutList[] = {
|
|
&mEnglishKeyboardLayout,
|
|
NULL,
|
|
};
|
|
|
|
UINTN mKeyboardLayoutCount = sizeof (mKeyboardLayoutList) / sizeof (mKeyboardLayoutList[0]);
|
|
UINT16 mKeyConvertionTableNumber = sizeof (mKeyConvertionTable) / sizeof (mKeyConvertionTable[0]);
|
|
|
|
|