an adapter from any connected PS/2 keyboard to USB HID output

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Keymaps.cpp Source File

Keymaps.cpp

00001 #include "Keymaps.h"
00002 /**
00003 *
00004 * key description allways references US layout
00005 * Codes from https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf
00006 */
00007 Keymaps::Keymaps(LAYOUTS layout, bool ext)
00008 {
00009     if(ext) { // keys with E0 prefix
00010         switch (layout) {
00011             case LO_DE:
00012                 K[0x11] = 230; /* Right Alt  */
00013                 K[0x14] = 228; /* Right Control  */
00014                 K[0x1F] = 227; /* Left GUI  */
00015                 K[0x27] = 231; /* Right GUI  */
00016                 K[0x2F] = 101; /* App  */
00017                 K[0x37] = 102; /* Keyboard Power  */
00018                 K[0x4A] = 84; /* Keypad / (Note 1)  */
00019                 K[0x5A] = 88; /* Keypad Enter  */
00020                 K[0x69] = 77; /* End (Note 1)  */
00021                 K[0x6B] = 80; /* Left Arrow (Note 1)  */
00022                 K[0x6C] = 74; /* Home (Note 1)  */
00023                 K[0x70] = 73; /* Insert (Note 1)  */
00024                 K[0x71] = 76; /* Delete (Note 1)  */
00025                 K[0x72] = 81; /* Down Arrow (Note 1)  */
00026                 K[0x74] = 79; /* Right Arrow (Note 1)  */
00027                 K[0x75] = 82; /* Up Arrow (Note 1)  */
00028                 K[0x7A] = 78; /* Page Down (Note 1)  */
00029                 K[0x7C] = 70; /* Print Screen (Note 1)  */
00030                 K[0x7D] = 75; /* Page Up (Note 1)  */
00031                 break;
00032             default: //US as HID Standard
00033                 K[0x11] = 230; /* RAlt */
00034                 K[0x14] = 228; /* RCtrl */
00035                 K[0x70] = 73; /* Insert */
00036                 K[0x71] = 76; /* Delete */
00037                 K[0x6c] = 74; /* Home */
00038                 K[0x69] = 77; /* End */
00039                 K[0x7d] = 75; /* PgUp */
00040                 K[0x7a] = 78; /* PgDn */
00041                 K[0x6b] = 80; /* Left */
00042                 K[0x75] = 82; /* Up */
00043                 K[0x72] = 81; /* Down */
00044                 K[0x74] = 79; /* Right */
00045                 K[0x4a] = 84; /* KP-/ */
00046                 K[0x5a] = 88; /* KP-Enter */
00047                 K[0x7c] = 70; /* PrtScr */
00048                 K[0x7e] = 48; /* Ctrl+Break */
00049                 K[0x1f] = 227; /* LWin (USB: LGUI) */
00050                 K[0x27] = 231; /* RWin (USB: RGUI) */
00051                 K[0x2f] = 101; /* Menu */
00052                 K[0x3f] = 0; /* Sleep */
00053                 K[0x37] = 0; /* Power */
00054                 K[0x5e] = 0; /* Wake */
00055                 break;
00056         }
00057 
00058     } else {
00059         switch (layout) {
00060             case LO_DE:
00061                 K[0x1] = 66; /* F9  */
00062                 K[0x3] = 62; /* F5  */
00063                 K[0x4] = 60; /* F3  */
00064                 K[0x5] = 58; /* F1  */
00065                 K[0x6] = 59; /* F2  */
00066                 K[0x7] = 69; /* F12  */
00067                 K[0x8] = 104; /* F13  */
00068                 K[0x9] = 67; /* F10  */
00069                 K[0x10] = 105; /* F14  */
00070                 K[0x11] = 226; /* Left Alt  */
00071                 K[0x12] = 225; /* Left Shift  */
00072                 K[0x13] = 136; /* Keyboard Intl'2 かかかかひひひかロロロ字  */
00073                 K[0x14] = 224; /* Left Control  */
00074                 K[0x15] = 20; /* q Q  */
00075                 K[0x16] = 30; /* 1 !  */
00076                 K[0x18] = 106; /* F15  */
00077                 K[0x20] = 107; /* F16  */
00078                 K[0x21] = 6; /* c C  */
00079                 K[0x22] = 27; /* x X  */
00080                 K[0x23] = 7; /* d D  */
00081                 K[0x24] = 8; /* e E  */
00082                 K[0x25] = 33; /* 4 $  */
00083                 K[0x26] = 32; /* 3 #  */
00084                 K[0x27] = 140; /* Keyboard Int'l 6 (PC9800 Keypad , )  */
00085                 K[0x28] = 108; /* F17  */
00086                 K[0x29] = 44; /* Space  */
00087                 K[0x30] = 109; /* F18  */
00088                 K[0x31] = 17; /* n N  */
00089                 K[0x32] = 5; /* b B  */
00090                 K[0x33] = 11; /* h H  */
00091                 K[0x34] = 10; /* g G  */
00092                 K[0x35] = 28; /* y Y  */
00093                 K[0x36] = 35; /* 6 ^  */
00094                 K[0x38] = 110; /* F19  */
00095                 K[0x40] = 111; /* F20  */
00096                 K[0x41] = 54; /* , <  */
00097                 K[0x42] = 14; /* k K  */
00098                 K[0x43] = 12; /* i I  */
00099                 K[0x44] = 18; /* o O  */
00100                 K[0x45] = 39; /* 0 )  */
00101                 K[0x46] = 38; /* 9 (  */
00102                 K[0x48] = 112; /* F21  */
00103                 K[0x49] = 55; /* . >  */
00104                 K[0x50] = 113; /* F22  */
00105                 K[0x51] = 135; /* Keyboard Int'l 1 ろ  */
00106                 K[0x52] = 52; /* ' "  */
00107                 K[0x54] = 47; /* [ {  */
00108                 K[0x55] = 46; /* = +  */
00109                 K[0x57] = 114; /* F23  */
00110                 K[0x58] = 57; /* Caps Lock  */
00111                 K[0x59] = 229; /* Right Shift  */
00112                 K[0x61] = 100; /* Europe 2 (Note 2)  */
00113                 K[0x62] = 147; /* Keyboard Lang 4 ひひひか  */
00114                 K[0x63] = 146; /* Keyboard Lang 3 かかかか  */
00115                 K[0x64] = 138; /* Keyboard Int'l 4 前前前  */
00116                 K[0x66] = 42; /* Backspace  */
00117                 K[0x67] = 139; /* Keyboard Int'l 5 無変変  */
00118                 K[0x69] = 89; /* Keypad 1 End  */
00119                 K[0x70] = 98; /* Keypad 0 Insert  */
00120                 K[0x71] = 99; /* Keypad . Delete  */
00121                 K[0x72] = 90; /* Keypad 2 Down  */
00122                 K[0x73] = 93; /* Keypad 5  */
00123                 K[0x74] = 94; /* Keypad 6 Right  */
00124                 K[0x75] = 96; /* Keypad 8 Up  */
00125                 K[0x76] = 41; /* Escape  */
00126                 K[0x77] = 83; /* Num Lock  */
00127                 K[0x78] = 68; /* F11  */
00128                 K[0x79] = 87; /* Keypad +  */
00129                 K[0x83] = 64; /* F7  */
00130                 K[0x0A] = 65; /* F8  */
00131                 K[0x0B] = 63; /* F6  */
00132                 K[0x0C] = 61; /* F4  */
00133                 K[0x0D] = 43; /* Tab  */
00134                 K[0x0E] = 53; /* ` ~  */
00135                 K[0x0F] = 103; /* Keypad =  */
00136                 K[0x1A] = 29; /* z Z  */
00137                 K[0x1B] = 22; /* s S  */
00138                 K[0x1C] = 4; /* a A  */
00139                 K[0x1D] = 26; /* w W  */
00140                 K[0x1E] = 31; /* 2 @  */
00141                 K[0x2A] = 25; /* v V  */
00142                 K[0x2B] = 9; /* f F  */
00143                 K[0x2C] = 23; /* t T  */
00144                 K[0x2D] = 21; /* r R  */
00145                 K[0x2E] = 34; /* 0,05 */
00146                 K[0x3A] = 16; /* m M  */
00147                 K[0x3B] = 13; /* j J  */
00148                 K[0x3C] = 24; /* u U  */
00149                 K[0x3D] = 36; /* 7 &  */
00150                 K[0x3E] = 37; /* 8 *  */
00151                 K[0x4A] = 56; /* / ?  */
00152                 K[0x4B] = 15; /* l L  */
00153                 K[0x4C] = 51; /* ; :  */
00154                 K[0x4D] = 19; /* p P  */
00155                 K[0x4E] = 45; /* - _  */
00156                 K[0x5A] = 40; /* Return  */
00157                 K[0x5B] = 48; /* ] }  */
00158                 K[0x5D] = 50; /* Europe 1*/
00159                 K[0x5F] = 115; /* F24  */
00160                 K[0x5F] = 148; /* Keyboard Lang 5  */
00161                 K[0x6A] = 137; /* Keyboard Int'l 2  */
00162                 K[0x6B] = 92; /* Keypad 4 Left  */
00163                 K[0x6C] = 95; /* Keypad 7 Home  */
00164                 K[0x6D] = 133; /* Keypad , (Brazilian Keypad .)  */
00165                 K[0x7A] = 91; /* Keypad 3 PageDn  */
00166                 K[0x7B] = 86; /* Keypad -  */
00167                 K[0x7C] = 85; /* Keypad *  */
00168                 K[0x7D] = 97; /* Keypad 9 PageUp  */
00169                 K[0x7E] = 71; /* Scroll Lock  */
00170                 K[0xF1] = 145; /* Keyboard Lang 2  */
00171                 K[0xF2] = 144; /* Keyboard Lang 1 한옝/  */
00172                 K[0xFC] = 2; /* POST Fail  */
00173                 break;
00174             default: //US as HID Standard
00175                 K[0x0e] = 53; /* ` ~ */
00176                 K[0x16] = 30; /* 1 ! */
00177                 K[0x1e] = 31; /* 2 @ */
00178                 K[0x26] = 32; /* 3 # */
00179                 K[0x25] = 33; /* 4 $ */
00180                 K[0x2e] = 34; /* 5 % E */
00181                 K[0x36] = 35; /* 6 ^ */
00182                 K[0x3d] = 36; /* 7 & */
00183                 K[0x3e] = 37; /* 8 * */
00184                 K[0x46] = 38; /* 9 ( */
00185                 K[0x45] = 39; /* 0 ) */
00186                 K[0x4e] = 45; /* - _ */
00187                 K[0x55] = 46; /* = + */
00188                 K[0x66] = 42; /* Backspace */
00189                 K[0x0d] = 43; /* Tab */
00190                 K[0x15] = 20; /* Q */
00191                 K[0x1d] = 26; /* W */
00192                 K[0x24] = 8; /* E */
00193                 K[0x2d] = 21; /* R */
00194                 K[0x2c] = 23; /* T */
00195                 K[0x35] = 28; /* Y */
00196                 K[0x3c] = 24; /* U */
00197                 K[0x43] = 12; /* I */
00198                 K[0x44] = 18; /* O */
00199                 K[0x4d] = 19; /* P */
00200                 K[0x54] = 47; /* [ { */
00201                 K[0x5b] = 48; /* ] } */
00202                 K[0x5d] = 49; /* \ | */
00203                 K[0x58] = 57; /* CapsLock */
00204                 K[0x1c] = 4; /* A */
00205                 K[0x1b] = 22; /* S */
00206                 K[0x23] = 7; /* D */
00207                 K[0x2b] = 9; /* F */
00208                 K[0x34] = 10; /* G */
00209                 K[0x33] = 11; /* H */
00210                 K[0x3b] = 13; /* J */
00211                 K[0x42] = 14; /* K */
00212                 K[0x4b] = 15; /* L */
00213                 K[0x4c] = 51; /* ; : */
00214                 K[0x52] = 52; /* ' " */
00215                 K[0x61] = 100; /* Europe 2*/
00216                 K[0x5a] = 40; /* Enter */
00217                 K[0x12] = 225; /* LShift */
00218                 K[0x1a] = 29; /* Z */
00219                 K[0x22] = 27; /* X */
00220                 K[0x21] = 6; /* C */
00221                 K[0x2a] = 25; /* V */
00222                 K[0x32] = 5; /* B */
00223                 K[0x31] = 17; /* N */
00224                 K[0x3a] = 16; /* M */
00225                 K[0x41] = 54; /* , < */
00226                 K[0x49] = 55; /* . > */
00227                 K[0x4a] = 56; /* / ? */
00228                 K[0x59] = 229; /* RShift */
00229                 K[0x14] = 224; /* LCtrl */
00230                 K[0x11] = 226; /* LAlt */
00231                 K[0x29] = 44; /* space */
00232                 K[0x77] = 83; /* NumLock */
00233                 K[0x6c] = 95; /* KP-7 / Home */
00234                 K[0x6b] = 92; /* KP-4 / Left */
00235                 K[0x69] = 89; /* KP-1 / End */
00236                 K[0x75] = 96; /* KP-8 / Up */
00237                 K[0x73] = 93; /* KP-5 */
00238                 K[0x72] = 90; /* KP-2 / Down */
00239                 K[0x70] = 98; /* KP-0 / Ins */
00240                 K[0x7c] = 85; /* KP-* */
00241                 K[0x7d] = 97; /* KP-9 / PgUp */
00242                 K[0x74] = 94; /* KP-6 / Right */
00243                 K[0x7a] = 91; /* KP-3 / PgDn */
00244                 K[0x71] = 99; /* KP-. / Del */
00245                 K[0x7b] = 86; /* KP-- */
00246                 K[0x79] = 87; /* KP-+ */
00247                 K[0x76] = 41; /* Esc */
00248                 K[0x5] = 58; /* F1 */
00249                 K[0x6] = 59; /* F2 */
00250                 K[0x4] = 60; /* F3 */
00251                 K[0x0c] = 61; /* F4 */
00252                 K[0x3] = 62; /* F5 */
00253                 K[0x0b] = 63; /* F6 */
00254                 K[0x83] = 64; /* F7 */
00255                 K[0x0a] = 65; /* F8 */
00256                 K[0x1] = 66; /* F9 */
00257                 K[0x9] = 67; /* F10 */
00258                 K[0x78] = 68; /* F11 */
00259                 K[0x7] = 69; /* F12 */
00260                 K[0x84] = 154; /* Alt+SysRq */
00261                 K[0x7e] = 71; /* ScrollLock */
00262                 break;
00263         }
00264     }
00265 }