# # https://thanhle.me/make-raspberry-pi3-as-an-emulator-bluetooth-keyboard/ # # # # Convert value returned from Linux event device ("evdev") to a HID code. This # is reverse of what's actually hardcoded in the kernel. # # Thanh Le # License: GPL # # Ported to a Python module by Thanh Le # keytable = { "KEY_RESERVED" : 0, "KEY_ESC" : 41, "KEY_1" : 30, "KEY_2" : 31, "KEY_3" : 32, "KEY_4" : 33, "KEY_5" : 34, "KEY_6" : 35, "KEY_7" : 36, "KEY_8" : 37, "KEY_9" : 38, "KEY_0" : 39, "KEY_MINUS" : 45, "KEY_EQUAL" : 46, "KEY_BACKSPACE" : 42, "KEY_TAB" : 43, "KEY_Q" : 20, "KEY_W" : 26, "KEY_E" : 8, "KEY_R" : 21, "KEY_T" : 23, "KEY_Y" : 28, "KEY_U" : 24, "KEY_I" : 12, "KEY_O" : 18, "KEY_P" : 19, "KEY_LEFTBRACE" : 47, "KEY_RIGHTBRACE" : 48, "KEY_ENTER" : 40, "KEY_LEFTCTRL" : 224, "KEY_A" : 4, "KEY_S" : 22, "KEY_D" : 7, "KEY_F" : 9, "KEY_G" : 10, "KEY_H" : 11, "KEY_J" : 13, "KEY_K" : 14, "KEY_L" : 15, "KEY_SEMICOLON" : 51, "KEY_APOSTROPHE" : 52, "KEY_GRAVE" : 53, "KEY_LEFTSHIFT" : 225, "KEY_BACKSLASH" : 50, "KEY_Z" : 29, "KEY_X" : 27, "KEY_C" : 6, "KEY_V" : 25, "KEY_B" : 5, "KEY_N" : 17, "KEY_M" : 16, "KEY_COMMA" : 54, "KEY_DOT" : 55, "KEY_SLASH" : 56, "KEY_RIGHTSHIFT" : 229, "KEY_KPASTERISK" : 85, "KEY_LEFTALT" : 226, "KEY_SPACE" : 44, "KEY_CAPSLOCK" : 57, "KEY_F1" : 58, "KEY_F2" : 59, "KEY_F3" : 60, "KEY_F4" : 61, "KEY_F5" : 62, "KEY_F6" : 63, "KEY_F7" : 64, "KEY_F8" : 65, "KEY_F9" : 66, "KEY_F10" : 67, "KEY_NUMLOCK" : 83, "KEY_SCROLLLOCK" : 71, "KEY_KP7" : 95, "KEY_KP8" : 96, "KEY_KP9" : 97, "KEY_KPMINUS" : 86, "KEY_KP4" : 92, "KEY_KP5" : 93, "KEY_KP6" : 94, "KEY_KPPLUS" : 87, "KEY_KP1" : 89, "KEY_KP2" : 90, "KEY_KP3" : 91, "KEY_KP0" : 98, "KEY_KPDOT" : 99, "KEY_ZENKAKUHANKAKU" : 148, "KEY_102ND" : 100, "KEY_F11" : 68, "KEY_F12" : 69, "KEY_RO" : 135, "KEY_KATAKANA" : 146, "KEY_HIRAGANA" : 147, "KEY_HENKAN" : 138, "KEY_KATAKANAHIRAGANA" : 136, "KEY_MUHENKAN" : 139, "KEY_KPJPCOMMA" : 140, "KEY_KPENTER" : 88, "KEY_RIGHTCTRL" : 228, "KEY_KPSLASH" : 84, "KEY_SYSRQ" : 70, "KEY_RIGHTALT" : 230, "KEY_HOME" : 74, "KEY_UP" : 82, "KEY_PAGEUP" : 75, "KEY_LEFT" : 80, "KEY_RIGHT" : 79, "KEY_END" : 77, "KEY_DOWN" : 81, "KEY_PAGEDOWN" : 78, "KEY_INSERT" : 73, "KEY_DELETE" : 76, "KEY_MUTE" : 239, "KEY_VOLUMEDOWN" : 238, "KEY_VOLUMEUP" : 237, "KEY_POWER" : 102, "KEY_KPEQUAL" : 103, "KEY_PAUSE" : 72, "KEY_KPCOMMA" : 133, "KEY_HANGEUL" : 144, "KEY_HANJA" : 145, "KEY_YEN" : 137, "KEY_LEFTMETA" : 227, "KEY_RIGHTMETA" : 231, "KEY_COMPOSE" : 101, "KEY_STOP" : 243, "KEY_AGAIN" : 121, "KEY_PROPS" : 118, "KEY_UNDO" : 122, "KEY_FRONT" : 119, "KEY_COPY" : 124, "KEY_OPEN" : 116, "KEY_PASTE" : 125, "KEY_FIND" : 244, "KEY_CUT" : 123, "KEY_HELP" : 117, "KEY_CALC" : 251, "KEY_SLEEP" : 248, "KEY_WWW" : 240, "KEY_COFFEE" : 249, "KEY_BACK" : 241, "KEY_FORWARD" : 242, "KEY_EJECTCD" : 236, "KEY_NEXTSONG" : 235, "KEY_PLAYPAUSE" : 232, "KEY_PREVIOUSSONG" : 234, "KEY_STOPCD" : 233, "KEY_REFRESH" : 250, "KEY_EDIT" : 247, "KEY_SCROLLUP" : 245, "KEY_SCROLLDOWN" : 246, "KEY_F13" : 104, "KEY_F14" : 105, "KEY_F15" : 106, "KEY_F16" : 107, "KEY_F17" : 108, "KEY_F18" : 109, "KEY_F19" : 110, "KEY_F20" : 111, "KEY_F21" : 112, "KEY_F22" : 113, "KEY_F23" : 114, "KEY_F24" : 115 } # Map modifier keys to array element in the bit array modkeys = { "KEY_RIGHTMETA" : 0, "KEY_RIGHTALT" : 1, "KEY_RIGHTSHIFT" : 2, "KEY_RIGHTCTRL" : 3, "KEY_LEFTMETA" : 4, "KEY_LEFTALT": 5, "KEY_LEFTSHIFT": 6, "KEY_LEFTCTRL": 7 } def convert(evdev_keycode): if not isinstance(evdev_keycode, list): evdev_keycode = [evdev_keycode] for keycode in evdev_keycode: if keycode in keytable: return keytable[keycode] return -1 def modkey(evdev_keycode): if not isinstance(evdev_keycode, list): evdev_keycode = [evdev_keycode] for keycode in evdev_keycode: if keycode in modkeys: return modkeys[keycode] return -1 # Return an invalid array element