//Keyboard scancode mapping routines // (C) TechnicallyObsolete 2024 #include "kbd_scancode.h" #include "error_codes.h" int kbdScancode_usb_searchKeyInArray(uint8_t const array[KBD_SCANCODE_MAX_USB], uint8_t keyToSearch){ for(int i = 0; i < KBD_SCANCODE_MAX_USB; i++){ if(array[i] == keyToSearch){ return i; } } return ERR_NOTFOUND; } int kbdScancode_usbToXt(uint8_t usbCode, uint8_t *xtCode){ uint8_t const codeLookupTable[] = { 0x00, 0x00, 0x00, 0x00, //NONE, ERR_ROLLOVER, ERR_POST, ERR_UNDEFINED //0x04 to 0x27: A to Z, 1 to 0 KBD_SCANCODE_XT_A, KBD_SCANCODE_XT_B, KBD_SCANCODE_XT_C, KBD_SCANCODE_XT_D, KBD_SCANCODE_XT_E, KBD_SCANCODE_XT_F, KBD_SCANCODE_XT_G, KBD_SCANCODE_XT_H, KBD_SCANCODE_XT_I, KBD_SCANCODE_XT_J, KBD_SCANCODE_XT_K, KBD_SCANCODE_XT_L, KBD_SCANCODE_XT_M, KBD_SCANCODE_XT_N, KBD_SCANCODE_XT_O, KBD_SCANCODE_XT_P, KBD_SCANCODE_XT_Q, KBD_SCANCODE_XT_R, KBD_SCANCODE_XT_S, KBD_SCANCODE_XT_T, KBD_SCANCODE_XT_U, KBD_SCANCODE_XT_V, KBD_SCANCODE_XT_W, KBD_SCANCODE_XT_X, KBD_SCANCODE_XT_Y, KBD_SCANCODE_XT_Z, KBD_SCANCODE_XT_1, KBD_SCANCODE_XT_2, KBD_SCANCODE_XT_3, KBD_SCANCODE_XT_4, KBD_SCANCODE_XT_5, KBD_SCANCODE_XT_6, KBD_SCANCODE_XT_7, KBD_SCANCODE_XT_8, KBD_SCANCODE_XT_9, KBD_SCANCODE_XT_0, KBD_SCANCODE_XT_ENTER, KBD_SCANCODE_XT_ESCAPE, KBD_SCANCODE_XT_BACKSPACE, 0, /*TAB*/ KBD_SCANCODE_XT_SPACE, KBD_SCANCODE_XT_DASH, KBD_SCANCODE_XT_EQUAL, KBD_SCANCODE_XT_LEFT_SQUARE, KBD_SCANCODE_XT_RIGHT_SQUARE, KBD_SCANCODE_XT_BACKSLASH, KBD_SCANCODE_XT_3, KBD_SCANCODE_XT_COLON, KBD_SCANCODE_XT_APOSTROPHE, KBD_SCANCODE_XT_GRAVE_ACCENT, KBD_SCANCODE_XT_COMMA, KBD_SCANCODE_XT_DOT, KBD_SCANCODE_XT_FORWARD_SLASH, KBD_SCANCODE_XT_CAPSLOCK, KBD_SCANCODE_XT_F1, KBD_SCANCODE_XT_F2, KBD_SCANCODE_XT_F3, KBD_SCANCODE_XT_F4, KBD_SCANCODE_XT_F5, KBD_SCANCODE_XT_F6, KBD_SCANCODE_XT_F7, KBD_SCANCODE_XT_F8, KBD_SCANCODE_XT_F9, KBD_SCANCODE_XT_F10, KBD_SCANCODE_XT_F11, KBD_SCANCODE_XT_F12, KBD_SCANCODE_XT_PRINT_SCREEN, KBD_SCANCODE_XT_SCROLL_LOCK, 0 /*Pause*/, KBD_SCANCODE_XT_NUM_INSERT, KBD_SCANCODE_XT_HOME, KBD_SCANCODE_XT_PAGE_UP, KBD_SCANCODE_XT_NUM_DELETE, KBD_SCANCODE_XT_NUM_END, KBD_SCANCODE_XT_PAGE_DOWN, KBD_SCANCODE_XT_RIGHT_ARROW, KBD_SCANCODE_XT_LEFT_ARROW, KBD_SCANCODE_XT_DOWN_ARROW, KBD_SCANCODE_XT_UP_ARROW }; if (usbCode > sizeof(codeLookupTable)){ return ERR_DATAERROR; } if (xtCode){ *xtCode = codeLookupTable[usbCode]; } return ERR_OK; }