;; USB HID Keyboard scan codes as per USB spec 1.11
;; plus some additional codes
;;
;; Created by MightyPork, 2016
;; Public domain
;;
;; Adapted from:
;; https://source.android.com/devices/input/keyboard-devices.html

;; Scan codes - last N slots in the HID report (usually 6).
;; #x00 if no key pressed.
;;
;; If more than N keys are pressed, the HID reports
;; KEY_ERR_OVF in all slots to indicate this condition.

("KEY_NONE" . #x00) ; No key pressed
("KEY_ERR_OVF" . #x01) ;  Keyboard Error Roll Over - used for all slots if too many keys are pressed ("Phantom key")
;; #x02 ;  Keyboard POST Fail
;; #x03 ;  Keyboard Error Undefined
("KEY_A" . #x04) ; Keyboard a and A
("KEY_B" . #x05) ; Keyboard b and B
("KEY_C" . #x06) ; Keyboard c and C
("KEY_D" . #x07) ; Keyboard d and D
("KEY_E" . #x08) ; Keyboard e and E
("KEY_F" . #x09) ; Keyboard f and F
("KEY_G" . #x0a) ; Keyboard g and G
("KEY_H" . #x0b) ; Keyboard h and H
("KEY_I" . #x0c) ; Keyboard i and I
("KEY_J" . #x0d) ; Keyboard j and J
("KEY_K" . #x0e) ; Keyboard k and K
("KEY_L" . #x0f) ; Keyboard l and L
("KEY_M" . #x10) ; Keyboard m and M
("KEY_N" . #x11) ; Keyboard n and N
("KEY_O" . #x12) ; Keyboard o and O
("KEY_P" . #x13) ; Keyboard p and P
("KEY_Q" . #x14) ; Keyboard q and Q
("KEY_R" . #x15) ; Keyboard r and R
("KEY_S" . #x16) ; Keyboard s and S
("KEY_T" . #x17) ; Keyboard t and T
("KEY_U" . #x18) ; Keyboard u and U
("KEY_V" . #x19) ; Keyboard v and V
("KEY_W" . #x1a) ; Keyboard w and W
("KEY_X" . #x1b) ; Keyboard x and X
("KEY_Y" . #x1c) ; Keyboard y and Y
("KEY_Z" . #x1d) ; Keyboard z and Z

("KEY_1" . #x1e) ; Keyboard 1 and !
("KEY_2" . #x1f) ; Keyboard 2 and @
("KEY_3" . #x20) ; Keyboard 3 and #
("KEY_4" . #x21) ; Keyboard 4 and $
("KEY_5" . #x22) ; Keyboard 5 and %
("KEY_6" . #x23) ; Keyboard 6 and ^
("KEY_7" . #x24) ; Keyboard 7 and &
("KEY_8" . #x25) ; Keyboard 8 and *
("KEY_9" . #x26) ; Keyboard 9 and (
("KEY_0" . #x27) ; Keyboard 0 and )

("KEY_ENTER" . #x28) ; Keyboard Return (ENTER)
("KEY_ESC" . #x29) ; Keyboard ESCAPE
("KEY_BACKSPACE" . #x2a) ; Keyboard DELETE (Backspace)
("KEY_TAB" . #x2b) ; Keyboard Tab
("KEY_SPACE" . #x2c) ; Keyboard Spacebar
("KEY_MINUS" . #x2d) ; Keyboard - and _
("KEY_EQUAL" . #x2e) ; Keyboard = and +
("KEY_LEFTBRACE" . #x2f) ; Keyboard [ and {
("KEY_RIGHTBRACE" . #x30) ; Keyboard ] and }
("KEY_BACKSLASH" . #x31) ; Keyboard \ and |
("KEY_HASHTILDE" . #x32) ; Keyboard Non-US # and ~
("KEY_SEMICOLON" . #x33) ; Keyboard ; and :
("KEY_APOSTROPHE" . #x34) ; Keyboard ' and "
("KEY_GRAVE" . #x35) ; Keyboard ` and ~
("KEY_COMMA" . #x36) ; Keyboard , and <
("KEY_DOT" . #x37) ; Keyboard . and >
("KEY_SLASH" . #x38) ; Keyboard / and ?
("KEY_CAPSLOCK" . #x39) ; Keyboard Caps Lock

("KEY_F1" . #x3a) ; Keyboard F1
("KEY_F2" . #x3b) ; Keyboard F2
("KEY_F3" . #x3c) ; Keyboard F3
("KEY_F4" . #x3d) ; Keyboard F4
("KEY_F5" . #x3e) ; Keyboard F5
("KEY_F6" . #x3f) ; Keyboard F6
("KEY_F7" . #x40) ; Keyboard F7
("KEY_F8" . #x41) ; Keyboard F8
("KEY_F9" . #x42) ; Keyboard F9
("KEY_F10" . #x43) ; Keyboard F10
("KEY_F11" . #x44) ; Keyboard F11
("KEY_F12" . #x45) ; Keyboard F12

("KEY_SYSRQ" . #x46) ; Keyboard Print Screen
("KEY_SCROLLLOCK" . #x47) ; Keyboard Scroll Lock
("KEY_PAUSE" . #x48) ; Keyboard Pause
("KEY_INSERT" . #x49) ; Keyboard Insert
("KEY_HOME" . #x4a) ; Keyboard Home
("KEY_PAGEUP" . #x4b) ; Keyboard Page Up
("KEY_DELETE" . #x4c) ; Keyboard Delete Forward
("KEY_END" . #x4d) ; Keyboard End
("KEY_PAGEDOWN" . #x4e) ; Keyboard Page Down
("KEY_RIGHT" . #x4f) ; Keyboard Right Arrow
("KEY_LEFT" . #x50) ; Keyboard Left Arrow
("KEY_DOWN" . #x51) ; Keyboard Down Arrow
("KEY_UP" . #x52) ; Keyboard Up Arrow

("KEY_NUMLOCK" . #x53) ; Keyboard Num Lock and Clear
("KEY_KPSLASH" . #x54) ; Keypad /
("KEY_KPASTERISK" . #x55) ; Keypad *
("KEY_KPMINUS" . #x56) ; Keypad -
("KEY_KPPLUS" . #x57) ; Keypad +
("KEY_KPENTER" . #x58) ; Keypad ENTER
("KEY_KP1" . #x59) ; Keypad 1 and End
("KEY_KP2" . #x5a) ; Keypad 2 and Down Arrow
("KEY_KP3" . #x5b) ; Keypad 3 and PageDn
("KEY_KP4" . #x5c) ; Keypad 4 and Left Arrow
("KEY_KP5" . #x5d) ; Keypad 5
("KEY_KP6" . #x5e) ; Keypad 6 and Right Arrow
("KEY_KP7" . #x5f) ; Keypad 7 and Home
("KEY_KP8" . #x60) ; Keypad 8 and Up Arrow
("KEY_KP9" . #x61) ; Keypad 9 and Page Up
("KEY_KP0" . #x62) ; Keypad 0 and Insert
("KEY_KPDOT" . #x63) ; Keypad . and Delete

("KEY_102ND" . #x64) ; Keyboard Non-US \ and |
("KEY_COMPOSE" . #x65) ; Keyboard Application
("KEY_POWER" . #x66) ; Keyboard Power
("KEY_KPEQUAL" . #x67) ; Keypad =

("KEY_F13" . #x68) ; Keyboard F13
("KEY_F14" . #x69) ; Keyboard F14
("KEY_F15" . #x6a) ; Keyboard F15
("KEY_F16" . #x6b) ; Keyboard F16
("KEY_F17" . #x6c) ; Keyboard F17
("KEY_F18" . #x6d) ; Keyboard F18
("KEY_F19" . #x6e) ; Keyboard F19
("KEY_F20" . #x6f) ; Keyboard F20
("KEY_F21" . #x70) ; Keyboard F21
("KEY_F22" . #x71) ; Keyboard F22
("KEY_F23" . #x72) ; Keyboard F23
("KEY_F24" . #x73) ; Keyboard F24

("KEY_OPEN" . #x74) ; Keyboard Execute
("KEY_HELP" . #x75) ; Keyboard Help
("KEY_PROPS" . #x76) ; Keyboard Menu
("KEY_FRONT" . #x77) ; Keyboard Select
("KEY_STOP" . #x78) ; Keyboard Stop
("KEY_AGAIN" . #x79) ; Keyboard Again
("KEY_UNDO" . #x7a) ; Keyboard Undo
("KEY_CUT" . #x7b) ; Keyboard Cut
("KEY_COPY" . #x7c) ; Keyboard Copy
("KEY_PASTE" . #x7d) ; Keyboard Paste
("KEY_FIND" . #x7e) ; Keyboard Find
("KEY_MUTE" . #x7f) ; Keyboard Mute
("KEY_VOLUMEUP" . #x80) ; Keyboard Volume Up
("KEY_VOLUMEDOWN" . #x81) ; Keyboard Volume Down
;; #x82  Keyboard Locking Caps Lock
;; #x83  Keyboard Locking Num Lock
;; #x84  Keyboard Locking Scroll Lock
("KEY_KPCOMMA" . #x85) ; Keypad Comma
;; #x86  Keypad Equal Sign
("KEY_RO" . #x87) ; Keyboard International1
("KEY_KATAKANAHIRAGANA" . #x88) ; Keyboard International2
("KEY_YEN" . #x89) ; Keyboard International3
("KEY_HENKAN" . #x8a) ; Keyboard International4
("KEY_MUHENKAN" . #x8b) ; Keyboard International5
("KEY_KPJPCOMMA" . #x8c) ; Keyboard International6
;; #x8d  Keyboard International7
;; #x8e  Keyboard International8
;; #x8f  Keyboard International9
("KEY_HANGEUL" . #x90) ; Keyboard LANG1
("KEY_HANJA" . #x91) ; Keyboard LANG2
("KEY_KATAKANA" . #x92) ; Keyboard LANG3
("KEY_HIRAGANA" . #x93) ; Keyboard LANG4
("KEY_ZENKAKUHANKAKU" . #x94) ; Keyboard LANG5
;; #x95  Keyboard LANG6
;; #x96  Keyboard LANG7
;; #x97  Keyboard LANG8
;; #x98  Keyboard LANG9
;; #x99  Keyboard Alternate Erase
;; #x9a  Keyboard SysReq/Attention
;; #x9b  Keyboard Cancel
;; #x9c  Keyboard Clear
;; #x9d  Keyboard Prior
;; #x9e  Keyboard Return
;; #x9f  Keyboard Separator
;; #xa0  Keyboard Out
;; #xa1  Keyboard Oper
;; #xa2  Keyboard Clear/Again
;; #xa3  Keyboard CrSel/Props
;; #xa4  Keyboard ExSel

;; #xb0  Keypad 00
;; #xb1  Keypad 000
;; #xb2  Thousands Separator
;; #xb3  Decimal Separator
;; #xb4  Currency Unit
;; #xb5  Currency Sub-unit
("KEY_KPLEFTPAREN" . #xb6) ; Keypad (
("KEY_KPRIGHTPAREN" . #xb7) ; Keypad )
;; #xb8  Keypad {
;; #xb9  Keypad }
;; #xba  Keypad Tab
;; #xbb  Keypad Backspace
;; #xbc  Keypad A
;; #xbd  Keypad B
;; #xbe  Keypad C
;; #xbf  Keypad D
;; #xc0  Keypad E
;; #xc1  Keypad F
;; #xc2  Keypad XOR
;; #xc3  Keypad ^
;; #xc4  Keypad %
;; #xc5  Keypad <
;; #xc6  Keypad >
;; #xc7  Keypad &
;; #xc8  Keypad &&
;; #xc9  Keypad |
;; #xca  Keypad ||
;; #xcb  Keypad :
;; #xcc  Keypad #
;; #xcd  Keypad Space
;; #xce  Keypad @
;; #xcf  Keypad !
;; #xd0  Keypad Memory Store
;; #xd1  Keypad Memory Recall
;; #xd2  Keypad Memory Clear
;; #xd3  Keypad Memory Add
;; #xd4  Keypad Memory Subtract
;; #xd5  Keypad Memory Multiply
;; #xd6  Keypad Memory Divide
;; #xd7  Keypad +/-
;; #xd8  Keypad Clear
;; #xd9  Keypad Clear Entry
;; #xda  Keypad Binary
;; #xdb  Keypad Octal
;; #xdc  Keypad Decimal
;; #xdd  Keypad Hexadecimal

("KEY_LEFTCTRL" . #xe0) ; Keyboard Left Control
("KEY_LEFTSHIFT" . #xe1) ; Keyboard Left Shift
("KEY_LEFTALT" . #xe2) ; Keyboard Left Alt
("KEY_LEFTMETA" . #xe3) ; Keyboard Left GUI
("KEY_RIGHTCTRL" . #xe4) ; Keyboard Right Control
("KEY_RIGHTSHIFT" . #xe5) ; Keyboard Right Shift
("KEY_RIGHTALT" . #xe6) ; Keyboard Right Alt
("KEY_RIGHTMETA" . #xe7) ; Keyboard Right GUI

("KEY_MEDIA_PLAYPAUSE" . #xe8)
("KEY_MEDIA_STOPCD" . #xe9)
("KEY_MEDIA_PREVIOUSSONG" . #xea)
("KEY_MEDIA_NEXTSONG" . #xeb)
("KEY_MEDIA_EJECTCD" . #xec)
("KEY_MEDIA_VOLUMEUP" . #xed)
("KEY_MEDIA_VOLUMEDOWN" . #xee)
("KEY_MEDIA_MUTE" . #xef)
("KEY_MEDIA_WWW" . #xf0)
("KEY_MEDIA_BACK" . #xf1)
("KEY_MEDIA_FORWARD" . #xf2)
("KEY_MEDIA_STOP" . #xf3)
("KEY_MEDIA_FIND" . #xf4)
("KEY_MEDIA_SCROLLUP" . #xf5)
("KEY_MEDIA_SCROLLDOWN" . #xf6)
("KEY_MEDIA_EDIT" . #xf7)
("KEY_MEDIA_SLEEP" . #xf8)
("KEY_MEDIA_COFFEE" . #xf9)
("KEY_MEDIA_REFRESH" . #xfa)
("KEY_MEDIA_CALC" . #xfb)