dethrace/scancodes.py

490 lines
12 KiB
Python
Executable File

#!/usr/bin/env python3 -u
import sys
import os
codes = {
'SCANCODE_ESCAPE' : 0x01,
'SCANCODE_1' : 0x02,
'SCANCODE_2' : 0x03,
'SCANCODE_3' : 0x04,
'SCANCODE_4' : 0x05,
'SCANCODE_5' : 0x06,
'SCANCODE_6' : 0x07,
'SCANCODE_7' : 0x08,
'SCANCODE_8' : 0x09,
'SCANCODE_9' : 0x0A,
'SCANCODE_0' : 0x0B,
'SCANCODE_MINUS' : 0x0C,
'SCANCODE_EQUALS' : 0x0D,
'SCANCODE_BACK' : 0x0E,
'SCANCODE_TAB' : 0x0F,
'SCANCODE_Q' : 0x10,
'SCANCODE_W' : 0x11,
'SCANCODE_E' : 0x12,
'SCANCODE_R' : 0x13,
'SCANCODE_T' : 0x14,
'SCANCODE_Y' : 0x15,
'SCANCODE_U' : 0x16,
'SCANCODE_I' : 0x17,
'SCANCODE_O' : 0x18,
'SCANCODE_P' : 0x19,
'SCANCODE_LBRACKET' : 0x1A,
'SCANCODE_RBRACKET' : 0x1B,
'SCANCODE_RETURN' : 0x1C,
'SCANCODE_LCONTROL' : 0x1D,
'SCANCODE_A' : 0x1E,
'SCANCODE_S' : 0x1F,
'SCANCODE_D' : 0x20,
'SCANCODE_F' : 0x21,
'SCANCODE_G' : 0x22,
'SCANCODE_H' : 0x23,
'SCANCODE_J' : 0x24,
'SCANCODE_K' : 0x25,
'SCANCODE_L' : 0x26,
'SCANCODE_SEMICOLON' : 0x27,
'SCANCODE_APOSTROPHE' : 0x28,
'SCANCODE_GRAVE' : 0x29,
'SCANCODE_LSHIFT' : 0x2A,
'SCANCODE_BACKSLASH' : 0x2B,
'SCANCODE_Z' : 0x2C,
'SCANCODE_X' : 0x2D,
'SCANCODE_C' : 0x2E,
'SCANCODE_V' : 0x2F,
'SCANCODE_B' : 0x30,
'SCANCODE_N' : 0x31,
'SCANCODE_M' : 0x32,
'SCANCODE_COMMA' : 0x33,
'SCANCODE_PERIOD' : 0x34,
'SCANCODE_SLASH' : 0x35,
'SCANCODE_RSHIFT' : 0x36,
'SCANCODE_MULTIPLY' : 0x37,
'SCANCODE_LMENU' : 0x38,
'SCANCODE_SPACE' : 0x39,
'SCANCODE_CAPITAL' : 0x3A,
'SCANCODE_F1' : 0x3B,
'SCANCODE_F2' : 0x3C,
'SCANCODE_F3' : 0x3D,
'SCANCODE_F4' : 0x3E,
'SCANCODE_F5' : 0x3F,
'SCANCODE_F6' : 0x40,
'SCANCODE_F7' : 0x41,
'SCANCODE_F8' : 0x42,
'SCANCODE_F9' : 0x43,
'SCANCODE_F10' : 0x44,
'SCANCODE_NUMLOCK' : 0x45,
'SCANCODE_SCROLL' : 0x46,
'SCANCODE_NUMPAD7' : 0x47,
'SCANCODE_NUMPAD8' : 0x48,
'SCANCODE_NUMPAD9' : 0x49,
'SCANCODE_SUBTRACT' : 0x4A,
'SCANCODE_NUMPAD4' : 0x4B,
'SCANCODE_NUMPAD5' : 0x4C,
'SCANCODE_NUMPAD6' : 0x4D,
'SCANCODE_ADD' : 0x4E,
'SCANCODE_NUMPAD1' : 0x4F,
'SCANCODE_NUMPAD2' : 0x50,
'SCANCODE_NUMPAD3' : 0x51,
'SCANCODE_NUMPAD0' : 0x52,
'SCANCODE_DECIMAL' : 0x53,
'SCANCODE_OEM_102' : 0x56,
'SCANCODE_F11' : 0x57,
'SCANCODE_F12' : 0x58,
'SCANCODE_F13' : 0x64 ,
'SCANCODE_F14' : 0x65 ,
'SCANCODE_F15' : 0x66 ,
'SCANCODE_KANA' : 0x70 ,
'SCANCODE_ABNT_C1' : 0x73 ,
'SCANCODE_CONVERT' : 0x79 ,
'SCANCODE_NOCONVERT' : 0x7B ,
'SCANCODE_YEN' : 0x7D ,
'SCANCODE_ABNT_C2' : 0x7E ,
'SCANCODE_NUMPADEQUALS' : 0x8D,
'SCANCODE_PREVTRACK' : 0x90 ,
'SCANCODE_AT' : 0x91 ,
'SCANCODE_COLON' : 0x92 ,
'SCANCODE_UNDERLINE' : 0x93 ,
'SCANCODE_KANJI' : 0x94 ,
'SCANCODE_STOP' : 0x95 ,
'SCANCODE_AX' : 0x96 ,
'SCANCODE_UNLABELED' : 0x97 ,
'SCANCODE_NEXTTRACK' : 0x99 ,
'SCANCODE_NUMPADENTER' : 0x9C ,
'SCANCODE_RCONTROL': 0x9D,
'SCANCODE_MUTE': 0xA0 ,
'SCANCODE_CALCULATOR': 0xA1 ,
'SCANCODE_PLAYPAUSE': 0xA2 ,
'SCANCODE_MEDIASTOP': 0xA4 ,
'SCANCODE_VOLUMEDOWN': 0xAE ,
'SCANCODE_VOLUMEUP': 0xB0 ,
'SCANCODE_WEBHOME': 0xB2 ,
'SCANCODE_NUMPADCOMMA': 0xB3 ,
'SCANCODE_DIVIDE': 0xB5 ,
'SCANCODE_SYSRQ': 0xB7,
'SCANCODE_RCONTROL' : 0x9D,
'SCANCODE_RMENU': 0xB8 ,
'SCANCODE_PAUSE': 0xC5 ,
'SCANCODE_HOME': 0xC7 ,
'SCANCODE_UP': 0xC8 ,
'SCANCODE_PRIOR': 0xC9 ,
'SCANCODE_LEFT': 0xCB ,
'SCANCODE_RIGHT': 0xCD ,
'SCANCODE_END': 0xCF ,
'SCANCODE_DOWN': 0xD0 ,
'SCANCODE_NEXT': 0xD1 ,
'SCANCODE_INSERT': 0xD2 ,
'SCANCODE_DELETE': 0xD3
}
keycodes = {
'KEY_SHIFT_ANY' : 0,
'KEY_ALT_ANY' : 1,
'KEY_CTRL_ANY' : 2,
'KEY_CTRL_ANY_2' : 3,
'KEY_CAPSLOCK' : 4,
'KEY_RSHIFT' : 5,
'KEY_RALT' : 6,
'KEY_RCTRL' : 7,
'KEY_LSHIFT' : 8,
'KEY_LALT' : 9,
'KEY_LCTRL' : 10,
'KEY_0' : 11,
'KEY_1' : 12,
'KEY_2' : 13,
'KEY_3' : 14,
'KEY_4' : 15,
'KEY_5' : 16,
'KEY_6' : 17,
'KEY_7' : 18,
'KEY_8' : 19,
'KEY_9' : 20,
'KEY_A' : 21,
'KEY_B' : 22,
'KEY_C' : 23,
'KEY_D' : 24,
'KEY_E' : 25,
'KEY_F' : 26,
'KEY_G' : 27,
'KEY_H' : 28,
'KEY_I' : 29,
'KEY_J' : 30,
'KEY_K' : 31,
'KEY_L' : 32,
'KEY_M' : 33,
'KEY_N' : 34,
'KEY_O' : 35,
'KEY_P' : 36,
'KEY_Q' : 37,
'KEY_R' : 38,
'KEY_S' : 39,
'KEY_T' : 40,
'KEY_U' : 41,
'KEY_V' : 42,
'KEY_W' : 43,
'KEY_X' : 44,
'KEY_Y' : 45,
'KEY_Z' : 46,
'KEY_GRAVE' : 47,
'KEY_MINUS' : 48,
'KEY_EQUALS' : 49,
'KEY_BACKSPACE' : 50,
'KEY_RETURN' : 51,
'KEY_KP_ENTER' : 52,
'KEY_TAB' : 53,
'KEY_SLASH' : 54,
'KEY_UNKNOWN_55' : 55,
'KEY_SEMICOLON' : 56,
'KEY_APOSTROPHE' : 57,
'KEY_PERIOD' : 58,
'KEY_COMMA' : 59,
'KEY_LBRACKET' : 60,
'KEY_RBRACKET' : 61,
'KEY_BACKSLASH' : 62,
'KEY_ESCAPE' : 63,
'KEY_INSERT' : 64,
'KEY_DELETE' : 65,
'KEY_HOME' : 66,
'KEY_END' : 67,
'KEY_PAGEUP' : 68,
'KEY_PAGEDOWN' : 69,
'KEY_LEFT' : 70,
'KEY_RIGHT' : 71,
'KEY_UP' : 72,
'KEY_DOWN' : 73,
'KEY_KP_NUMLOCK' : 74,
'KEY_KP_DIVIDE' : 75,
'KEY_KP_MULTIPLY' : 76,
'KEY_KP_MINUS' : 77,
'KEY_KP_PLUS' : 78,
'KEY_KP_PERIOD' : 79,
'KEY_KP_EQUALS' : 80,
'KEY_KP_0' : 81,
'KEY_KP_1' : 82,
'KEY_KP_2' : 83,
'KEY_KP_3' : 84,
'KEY_KP_4' : 85,
'KEY_KP_5' : 86,
'KEY_KP_6' : 87,
'KEY_KP_7' : 88,
'KEY_KP_8' : 89,
'KEY_KP_9' : 90,
'KEY_F1' : 91,
'KEY_F2' : 92,
'KEY_F3' : 93,
'KEY_F4' : 94,
'KEY_F5' : 95,
'KEY_F6' : 96,
'KEY_F7' : 97,
'KEY_F8' : 98,
'KEY_F9' : 99,
'KEY_F10' : 100,
'KEY_F11' : 101,
'KEY_F12' : 102,
'KEY_PRTSCN' : 103,
'KEY_SCRLK' : 104,
'KEY_PAUSE' : 105,
'KEY_SPACE' : 106,
}
stri = '''gScan_code[11] = 0xB;
gScan_code[13] = 3;
gScan_code[14] = 4;
gScan_code[12] = 2;
gScan_code[15] = 5;
gScan_code[17] = 7;
gScan_code[18] = 8;
gScan_code[16] = 6;
gScan_code[19] = 9;
gScan_code[21] = 0x1E;
gScan_code[22] = 0x30;
gScan_code[20] = 0xA;
gScan_code[23] = 0x2E;
gScan_code[25] = 0x12;
gScan_code[26] = 0x21;
gScan_code[24] = 0x20;
gScan_code[27] = 0x22;
gScan_code[29] = 0x17;
gScan_code[30] = 0x24;
gScan_code[28] = 0x23;
gScan_code[31] = 0x25;
gScan_code[33] = 0x32;
gScan_code[34] = 0x31;
gScan_code[32] = 0x26;
gScan_code[35] = 0x18;
gScan_code[37] = 0x10;
gScan_code[38] = 0x13;
gScan_code[36] = 0x19;
gScan_code[39] = 0x1F;
gScan_code[41] = 0x16;
gScan_code[42] = 0x2F;
gScan_code[40] = 0x14;
gScan_code[43] = 0x11;
gScan_code[44] = 0x2D;
gScan_code[45] = 0x15;
gScan_code[46] = 0x2C;
gScan_code[47] = 0x29;
gScan_code[48] = 0xC;
gScan_code[49] = 0xD;
gScan_code[50] = 0xE;
gScan_code[51] = 0x1C;
gScan_code[52] = 0x9C;
gScan_code[0] = 0x362A;
gScan_code[1] = 0xB838;
gScan_code[2] = 0x9D1D;
gScan_code[3] = 0x9D1D;
gScan_code[4] = 0x3A;
gScan_code[55] = 0x56;
gScan_code[54] = 0x35;
gScan_code[56] = 0x27;
gScan_code[59] = 0x33;
gScan_code[53] = 0xF;
gScan_code[58] = 0x34;
gScan_code[60] = 0x1A;
gScan_code[63] = 1;
gScan_code[57] = 0x28;
gScan_code[62] = 0x2B;
gScan_code[64] = 0xD2;
gScan_code[67] = 0xCF;
gScan_code[61] = 0x1B;
gScan_code[66] = 0xC7;
gScan_code[68] = 0xC9;
gScan_code[71] = 0xCD;
gScan_code[65] = 0xD3;
gScan_code[70] = 0xCB;
gScan_code[72] = 0xC8;
gScan_code[69] = 0xD1;
gScan_code[74] = 0x45;
gScan_code[73] = 0xD0;
gScan_code[75] = 0xB5;
gScan_code[76] = 0x37;
gScan_code[78] = 0x4E;
gScan_code[77] = 0x4A;
gScan_code[80] = 0;
gScan_code[79] = 0x53;
gScan_code[82] = 0x4F;
gScan_code[84] = 0x51;
gScan_code[81] = 0x52;
gScan_code[83] = 0x50;
gScan_code[86] = 0x4C;
gScan_code[88] = 0x47;
gScan_code[85] = 0x4B;
gScan_code[87] = 0x4D;
gScan_code[90] = 0x49;
gScan_code[92] = 0x3C;
gScan_code[89] = 0x48;
gScan_code[91] = 0x3B;
gScan_code[94] = 0x3E;
gScan_code[96] = 0x40;
gScan_code[93] = 0x3D;
gScan_code[95] = 0x3F;
gScan_code[98] = 0x42;
gScan_code[100] = 0x44;
gScan_code[97] = 0x41;
gScan_code[99] = 0x43;
gScan_code[102] = 0x58;
gScan_code[104] = 0x46;
gScan_code[101] = 0x57;
gScan_code[103] = 0;
gScan_code[105] = 0;
gScan_code[106] = 0x39;
gScan_code[5] = 0x36;
gScan_code[6] = 0xB8;
gScan_code[7] = 0x9D;
gScan_code[8] = 0x2A;
gScan_code[9] = 0x38;
gScan_code[10] = 0x1D;'''
lines = stri.splitlines()
for l in lines:
parts = l.split('=')
# print(parts)
val = parts[1].strip().replace(';', '')
val_int = int(val, 16)
parts2 = l.split(']')
# print(parts)
parts2[0] = parts2[0].strip()
# i = parts[0].index(']')
val_int2 = int(parts2[0][11:])
code = -1
keycode = -1
printed = False
for c in codes:
if codes[c] == val_int:
code = c
if code == -1:
code = val_int
for c in keycodes:
if keycodes[c] == val_int2:
# printed = True
keycode = c
# print(parts[0] + '= ' + str(val_int) + ';')
if keycode == -1:
keycode = val_int2
print('gScan_code[' + str(keycode) + '][0] = ' + str(code) + ';')
stri = '''gScan_code[11][0] = SCANCODE_0;
gScan_code[13][0] = SCANCODE_2;
gScan_code[14][0] = SCANCODE_3;
gScan_code[12][0] = SCANCODE_1;
gScan_code[15][0] = SCANCODE_4;
gScan_code[17][0] = SCANCODE_6;
gScan_code[18][0] = SCANCODE_7;
gScan_code[16][0] = SCANCODE_5;
gScan_code[19][0] = SCANCODE_8;
gScan_code[21][0] = SCANCODE_A;
gScan_code[22][0] = SCANCODE_B;
gScan_code[20][0] = SCANCODE_9;
gScan_code[23][0] = SCANCODE_C;
gScan_code[25][0] = SCANCODE_E;
gScan_code[26][0] = SCANCODE_F;
gScan_code[24][0] = SCANCODE_D;
gScan_code[27][0] = SCANCODE_G;
gScan_code[29][0] = SCANCODE_I;
gScan_code[30][0] = SCANCODE_J;
gScan_code[28][0] = SCANCODE_H;
gScan_code[31][0] = SCANCODE_K;
gScan_code[33][0] = SCANCODE_M;
gScan_code[34][0] = SCANCODE_N;
gScan_code[32][0] = SCANCODE_L;
gScan_code[35][0] = SCANCODE_O;
gScan_code[37][0] = SCANCODE_Q;
gScan_code[38][0] = SCANCODE_R;
gScan_code[36][0] = SCANCODE_P;
gScan_code[39][0] = SCANCODE_S;
gScan_code[41][0] = SCANCODE_U;
gScan_code[42][0] = SCANCODE_V;
gScan_code[40][0] = SCANCODE_T;
gScan_code[43][0] = SCANCODE_W;
gScan_code[44][0] = SCANCODE_X;
gScan_code[45][0] = SCANCODE_Y;
gScan_code[46][0] = SCANCODE_Z;
gScan_code[47][0] = SCANCODE_GRAVE;
gScan_code[48][0] = SCANCODE_MINUS;
gScan_code[49][0] = SCANCODE_EQUALS;
gScan_code[50][0] = SCANCODE_BACK;
gScan_code[51][0] = SCANCODE_RETURN;
gScan_code[52][0] = SCANCODE_NUMPADENTER;
gScan_code[0][0] = SCANCODE_LSHIFT;
gScan_code[0][1] = SCANCODE_RSHIFT;
gScan_code[1][0] = SCANCODE_LMENU;
gScan_code[1][1] = SCANCODE_RMENU;
gScan_code[2][0] = SCANCODE_LCONTROL;
gScan_code[2][1] = SCANCODE_RCONTROL;
gScan_code[3][0] = SCANCODE_LCONTROL;
gScan_code[3][1] = SCANCODE_RCONTROL;
gScan_code[4][0] = SCANCODE_CAPITAL;
gScan_code[55][0] = SCANCODE_OEM_102;
gScan_code[54][0] = SCANCODE_SLASH;
gScan_code[56][0] = SCANCODE_SEMICOLON;
gScan_code[59][0] = SCANCODE_COMMA;
gScan_code[53][0] = SCANCODE_TAB;
gScan_code[58][0] = SCANCODE_PERIOD;
gScan_code[60][0] = SCANCODE_LBRACKET;
gScan_code[63][0] = SCANCODE_ESCAPE;
gScan_code[57][0] = SCANCODE_APOSTROPHE;
gScan_code[62][0] = SCANCODE_BACKSLASH;
gScan_code[64][0] = SCANCODE_INSERT;
gScan_code[67][0] = SCANCODE_END;
gScan_code[61][0] = SCANCODE_RBRACKET;
gScan_code[66][0] = SCANCODE_HOME;
gScan_code[68][0] = SCANCODE_PRIOR;
gScan_code[71][0] = SCANCODE_RIGHT;
gScan_code[65][0] = SCANCODE_DELETE;
gScan_code[70][0] = SCANCODE_LEFT;
gScan_code[72][0] = SCANCODE_UP;
gScan_code[69][0] = SCANCODE_NEXT;
gScan_code[74][0] = SCANCODE_NUMLOCK;
gScan_code[73][0] = SCANCODE_DOWN;
gScan_code[75][0] = SCANCODE_DIVIDE;
gScan_code[76][0] = SCANCODE_MULTIPLY;
gScan_code[78][0] = SCANCODE_ADD;
gScan_code[77][0] = SCANCODE_SUBTRACT;
gScan_code[80][0] = 0;'''
# lines = stri.splitlines()
# for l in lines:
# parts = l.split(']')
# # print(parts)
# parts[0] = parts[0].strip()
# # i = parts[0].index(']')
# val_int = int(parts[0][11:])
# # print(val_int)
# printed = False
# for c in keycodes:
# if keycodes[c] == val_int:
# print('gScan_code[' + c + ']' + parts[1] + ']' + parts[2])
# printed = True
# if not printed:
# print('error!')
# # break