//Keyboard scancode mapping routines // (C) TechnicallyObsolete 2024 //[All rights reserved]. //Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: // // Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. // //THIS SOFTWARE IS PROVIDED BY TechnicallyObsolete “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. // //IN NO EVENT SHALL TechnicallyObsolete BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KBD_SCANCODE_H #define KBD_SCANCODE_H #include #define KBD_SCANCODE_USB_NONE 0x00 #define KBD_SCANCODE_USB_ERR_ROLLOVER 0x01 #define KBD_SCANCODE_USB_ERR_POST 0x02 #define KBD_SCANCODE_USB_ERR_UNDEFINED 0x03 #define KBD_SCANCODE_USB_A 0x04 #define KBD_SCANCODE_USB_B 0x05 #define KBD_SCANCODE_USB_C 0x06 #define KBD_SCANCODE_USB_D 0x07 #define KBD_SCANCODE_USB_E 0x08 #define KBD_SCANCODE_USB_F 0x09 #define KBD_SCANCODE_USB_G 0x0A #define KBD_SCANCODE_USB_H 0x0B #define KBD_SCANCODE_USB_I 0x0C #define KBD_SCANCODE_USB_J 0x0D #define KBD_SCANCODE_USB_K 0x0E #define KBD_SCANCODE_USB_L 0x0F #define KBD_SCANCODE_USB_M 0x10 #define KBD_SCANCODE_USB_N 0x11 #define KBD_SCANCODE_USB_O 0x12 #define KBD_SCANCODE_USB_P 0x13 #define KBD_SCANCODE_USB_Q 0x14 #define KBD_SCANCODE_USB_R 0x15 #define KBD_SCANCODE_USB_S 0x16 #define KBD_SCANCODE_USB_T 0x17 #define KBD_SCANCODE_USB_U 0x18 #define KBD_SCANCODE_USB_V 0x19 #define KBD_SCANCODE_USB_W 0x1A #define KBD_SCANCODE_USB_X 0x1B #define KBD_SCANCODE_USB_Y 0x1C #define KBD_SCANCODE_USB_Z 0x1D #define KBD_SCANCODE_USB_1 0x1E #define KBD_SCANCODE_USB_2 0x1F #define KBD_SCANCODE_USB_3 0x20 #define KBD_SCANCODE_USB_4 0x21 #define KBD_SCANCODE_USB_5 0x22 #define KBD_SCANCODE_USB_6 0x23 #define KBD_SCANCODE_USB_7 0x24 #define KBD_SCANCODE_USB_8 0x25 #define KBD_SCANCODE_USB_9 0x26 #define KBD_SCANCODE_USB_0 0x27 #define KBD_SCANCODE_USB_RETURN 0x28 #define KBD_SCANCODE_USB_ESCAPE 0x29 #define KBD_SCANCODE_USB_BACKSPACE 0x2A #define KBD_SCANCODE_USB_TAB 0x2B #define KBD_SCANCODE_USB_SPACE 0x2C #define KBD_SCANCODE_USB_DASH 0x2D #define KBD_SCANCODE_USB_EQUAL 0x2E #define KBD_SCANCODE_USB_LEFT_SQUARE 0x2F #define KBD_SCANCODE_USB_RIGHT_SQUARE 0x30 #define KBD_SCANCODE_USB_BACKSLASH 0x31 #define KBD_SCANCODE_USB_HASH 0x32 #define KBD_SCANCODE_USB_COLON 0x33 #define KBD_SCANCODE_USB_APOSTROPHE 0x34 #define KBD_SCANCODE_USB_GRAVE_ACCENT 0x35 #define KBD_SCANCODE_USB_COMMA 0x36 #define KBD_SCANCODE_USB_DOT 0x37 #define KBD_SCANCODE_USB_FORWARD_SLASH 0x38 #define KBD_SCANCODE_USB_CAPSLOCK 0x39 #define KBD_SCANCODE_USB_F1 0x3A #define KBD_SCANCODE_USB_F2 0x3B #define KBD_SCANCODE_USB_F3 0x3C #define KBD_SCANCODE_USB_F4 0x3D #define KBD_SCANCODE_USB_F5 0x3E #define KBD_SCANCODE_USB_F6 0x3F #define KBD_SCANCODE_USB_F7 0x40 #define KBD_SCANCODE_USB_F8 0x41 #define KBD_SCANCODE_USB_F9 0x42 #define KBD_SCANCODE_USB_F10 0x43 #define KBD_SCANCODE_USB_F11 0x44 #define KBD_SCANCODE_USB_F12 0x45 #define KBD_SCANCODE_USB_PRINTSCREEN 0x46 #define KBD_SCANCODE_USB_SCROLL_LOCK 0x47 #define KBD_SCANCODE_USB_PAUSE 0x48 #define KBD_SCANCODE_USB_INSERT 0x49 #define KBD_SCANCODE_USB_HOME 0x4A #define KBD_SCANCODE_USB_PAGE_UP 0x4B #define KBD_SCANCODE_USB_DELETE 0x4C #define KBD_SCANCODE_USB_END 0x4D #define KBD_SCANCODE_USB_PAGE_DOWN 0x4E #define KBD_SCANCODE_USB_RIGHT_ARROW 0x4F #define KBD_SCANCODE_USB_LEFT_ARROW 0x50 #define KBD_SCANCODE_USB_DOWN_ARROW 0x51 #define KBD_SCANCODE_USB_UP_ARROW 0x52 #define KBD_SCANCODE_USB_CTRL_LEFT 0xE0 #define KBD_SCANCODE_USB_SHIFT_LEFT 0xE1 #define KBD_SCANCODE_USB_MOD_CTRL_LEFT (1 << 0) #define KBD_SCANCODE_USB_MOD_SHIFT_LEFT (1 << 1) #define KBD_SCANCODE_USB_MOD_ALT_LEFT (1 << 2) #define KBD_SCANCODE_USB_MOD_GUI_LEFT (1 << 3) #define KBD_SCANCODE_USB_MOD_CTRL_RIGHT (1 << 4) #define KBD_SCANCODE_USB_MOD_SHIFT_RIGHT (1 << 5) #define KBD_SCANCODE_USB_MOD_ALT_RIGHT (1 << 6) #define KBD_SCANCODE_USB_MOD_GUI_RIGHT (1 << 7) #define KBD_SCANCODE_XT_ESCAPE 0x01 #define KBD_SCANCODE_XT_1 0x02 #define KBD_SCANCODE_XT_2 0x03 #define KBD_SCANCODE_XT_3 0x04 #define KBD_SCANCODE_XT_4 0x05 #define KBD_SCANCODE_XT_5 0x06 #define KBD_SCANCODE_XT_6 0x07 #define KBD_SCANCODE_XT_7 0x08 #define KBD_SCANCODE_XT_8 0x09 #define KBD_SCANCODE_XT_9 0x0A #define KBD_SCANCODE_XT_0 0x0B #define KBD_SCANCODE_XT_DASH 0x0C #define KBD_SCANCODE_XT_EQUAL 0x0D #define KBD_SCANCODE_XT_BACKSPACE 0x0E #define KBD_SCANCODE_XT_LR_ARROW 0x0F #define KBD_SCANCODE_XT_Q 0x10 #define KBD_SCANCODE_XT_W 0x11 #define KBD_SCANCODE_XT_E 0x12 #define KBD_SCANCODE_XT_R 0x13 #define KBD_SCANCODE_XT_T 0x14 #define KBD_SCANCODE_XT_Y 0x15 #define KBD_SCANCODE_XT_U 0x16 #define KBD_SCANCODE_XT_I 0x17 #define KBD_SCANCODE_XT_O 0x18 #define KBD_SCANCODE_XT_P 0x19 #define KBD_SCANCODE_XT_LEFT_SQUARE 0x1A #define KBD_SCANCODE_XT_RIGHT_SQUARE 0x1B #define KBD_SCANCODE_XT_ENTER 0x1C #define KBD_SCANCODE_XT_CTRL 0x1D #define KBD_SCANCODE_XT_A 0x1E #define KBD_SCANCODE_XT_S 0x1F #define KBD_SCANCODE_XT_D 0x20 #define KBD_SCANCODE_XT_F 0x21 #define KBD_SCANCODE_XT_G 0x22 #define KBD_SCANCODE_XT_H 0x23 #define KBD_SCANCODE_XT_J 0x24 #define KBD_SCANCODE_XT_K 0x25 #define KBD_SCANCODE_XT_L 0x26 #define KBD_SCANCODE_XT_COLON 0x27 #define KBD_SCANCODE_XT_APOSTROPHE 0x28 #define KBD_SCANCODE_XT_GRAVE_ACCENT 0x29 #define KBD_SCANCODE_XT_LEFT_SHIFT 0x2A #define KBD_SCANCODE_XT_BACKSLASH 0x2B #define KBD_SCANCODE_XT_Z 0x2C #define KBD_SCANCODE_XT_X 0x2D #define KBD_SCANCODE_XT_C 0x2E #define KBD_SCANCODE_XT_V 0x2F #define KBD_SCANCODE_XT_B 0x30 #define KBD_SCANCODE_XT_N 0x31 #define KBD_SCANCODE_XT_M 0x32 #define KBD_SCANCODE_XT_COMMA 0x33 #define KBD_SCANCODE_XT_DOT 0x34 #define KBD_SCANCODE_XT_FORWARD_SLASH 0x35 #define KBD_SCANCODE_XT_RIGHT_SHIFT 0x36 #define KBD_SCANCODE_XT_PRINT_SCREEN 0x37 #define KBD_SCANCODE_XT_ALT 0x38 #define KBD_SCANCODE_XT_SPACE 0x39 #define KBD_SCANCODE_XT_CAPSLOCK 0x3A #define KBD_SCANCODE_XT_F1 0x3B #define KBD_SCANCODE_XT_F2 0x3C #define KBD_SCANCODE_XT_F3 0x3D #define KBD_SCANCODE_XT_F4 0x3E #define KBD_SCANCODE_XT_F5 0x3F #define KBD_SCANCODE_XT_F6 0x40 #define KBD_SCANCODE_XT_F7 0x41 #define KBD_SCANCODE_XT_F8 0x42 #define KBD_SCANCODE_XT_F9 0x43 #define KBD_SCANCODE_XT_F10 0x44 #define KBD_SCANCODE_XT_NUM_LOCK 0x45 #define KBD_SCANCODE_XT_SCROLL_LOCK 0x46 #define KBD_SCANCODE_XT_HOME 0x47 #define KBD_SCANCODE_XT_UP_ARROW 0x48 #define KBD_SCANCODE_XT_PAGE_UP 0x49 #define KBD_SCANCODE_XT_NUM_MINUS 0x4A #define KBD_SCANCODE_XT_LEFT_ARROW 0x4B #define KBD_SCANCODE_XT_NUM_5 0x4C #define KBD_SCANCODE_XT_RIGHT_ARROW 0x4D #define KBD_SCANCODE_XT_NUM_PLUS 0x4E #define KBD_SCANCODE_XT_NUM_END 0x4F #define KBD_SCANCODE_XT_DOWN_ARROW 0x50 #define KBD_SCANCODE_XT_PAGE_DOWN 0x51 #define KBD_SCANCODE_XT_NUM_INSERT 0x52 #define KBD_SCANCODE_XT_NUM_DELETE 0x53 #define KBD_SCANCODE_XT_F11 0xD9 #define KBD_SCANCODE_XT_F12 0xDA #define KBD_SCANCODE_MAX_USB 6 typedef struct { uint8_t busId; uint8_t modifiersNow; uint8_t keysNow[KBD_SCANCODE_MAX_USB]; uint8_t modifiersLast; uint8_t keysLast[KBD_SCANCODE_MAX_USB]; } kbdScancode_usb_ctx_t; int kbdScancode_usb_searchKeyInArray(uint8_t const array[KBD_SCANCODE_MAX_USB], uint8_t keyToSearch); int kbdScancode_usb_searchKeyPress(kbdScancode_usb_ctx_t const *ctx, uint8_t *resultKey, uint8_t *resultModifier); int kbdScancode_usb_searchKeyRelease(kbdScancode_usb_ctx_t const *ctx, uint8_t *resultKey, uint8_t *resultModifier); int kbdScancode_usbToXt(uint8_t usbcode, uint8_t *xtCode); #endif //KBD_SCANCODE_H