#include "project.h"
static int at_to_usb_keyboard[AT_SC_MAX] = {
[AT_SC_GRAVE] = USB_K_SC_GRAVE,
[AT_SC_1] = USB_K_SC_1,
[AT_SC_2] = USB_K_SC_2,
[AT_SC_3] = USB_K_SC_3,
[AT_SC_4] = USB_K_SC_4,
[AT_SC_5] = USB_K_SC_5,
[AT_SC_6] = USB_K_SC_6,
[AT_SC_7] = USB_K_SC_7,
[AT_SC_8] = USB_K_SC_8,
[AT_SC_9] = USB_K_SC_9,
[AT_SC_0] = USB_K_SC_0,
[AT_SC_MINUS] = USB_K_SC_MINUS,
[AT_SC_EQUAL] = USB_K_SC_EQUAL,
[AT_SC_BACKSPACE] = USB_K_SC_BACKSPACE,
[AT_SC_TAB] = USB_K_SC_TAB,
[AT_SC_Q] = USB_K_SC_Q,
[AT_SC_W] = USB_K_SC_W,
[AT_SC_E] = USB_K_SC_E,
[AT_SC_R] = USB_K_SC_R,
[AT_SC_T] = USB_K_SC_T,
[AT_SC_Y] = USB_K_SC_Y,
[AT_SC_U] = USB_K_SC_U,
[AT_SC_I] = USB_K_SC_I,
[AT_SC_O] = USB_K_SC_O,
[AT_SC_P] = USB_K_SC_P,
[AT_SC_LEFTBRACE] = USB_K_SC_LEFTBRACE,
[AT_SC_RIGHTBRACE] = USB_K_SC_RIGHTBRACE,
[AT_SC_BACKSLASH] = USB_K_SC_BACKSLASH,
[AT_SC_CAPSLOCK] = USB_K_SC_CAPSLOCK,
[AT_SC_A] = USB_K_SC_A,
[AT_SC_S] = USB_K_SC_S,
[AT_SC_D] = USB_K_SC_D,
[AT_SC_F] = USB_K_SC_F,
[AT_SC_G] = USB_K_SC_G,
[AT_SC_H] = USB_K_SC_H,
[AT_SC_J] = USB_K_SC_J,
[AT_SC_K] = USB_K_SC_K,
[AT_SC_L] = USB_K_SC_L,
[AT_SC_SEMICOLON] = USB_K_SC_SEMICOLON,
[AT_SC_APOSTROPHE] = USB_K_SC_APOSTROPHE,
[AT_SC_102ND] = USB_K_SC_102ND,
[AT_SC_ENTER] = USB_K_SC_ENTER,
[AT_SC_LEFTSHIFT] = USB_K_SC_LEFTSHIFT,
[AT_SC_Z] = USB_K_SC_Z,
[AT_SC_X] = USB_K_SC_X,
[AT_SC_C] = USB_K_SC_C,
[AT_SC_V] = USB_K_SC_V,
[AT_SC_B] = USB_K_SC_B,
[AT_SC_N] = USB_K_SC_N,
[AT_SC_M] = USB_K_SC_M,
[AT_SC_COMMA] = USB_K_SC_COMMA,
[AT_SC_DOT] = USB_K_SC_DOT,
[AT_SC_SLASH] = USB_K_SC_SLASH,
[AT_SC_RIGHTSHIFT] = USB_K_SC_RIGHTSHIFT,
[AT_SC_LEFTCTRL] = USB_K_SC_LEFTCTRL,
[AT_SC_LEFTALT] = USB_K_SC_LEFTALT,
[AT_SC_SPACE] = USB_K_SC_SPACE,
[AT_SC_RIGHTALT] = USB_K_SC_RIGHTALT,
[AT_SC_RIGHTCTRL] = USB_K_SC_RIGHTCTRL,
[AT_SC_INSERT] = USB_K_SC_INSERT,
[AT_SC_DELETE] = USB_K_SC_DELETE,
[AT_SC_LEFT] = USB_K_SC_LEFT,
[AT_SC_HOME] = USB_K_SC_HOME,
[AT_SC_END] = USB_K_SC_END,
[AT_SC_UP] = USB_K_SC_UP,
[AT_SC_DOWN] = USB_K_SC_DOWN,
[AT_SC_PAGEUP] = USB_K_SC_PAGEUP,
[AT_SC_PAGEDOWN] = USB_K_SC_PAGEDOWN,
[AT_SC_RIGHT] = USB_K_SC_RIGHT,
[AT_SC_NUMLOCK] = USB_K_SC_NUMLOCK,
[AT_SC_KP7] = USB_K_SC_KP7,
[AT_SC_KP4] = USB_K_SC_KP4,
[AT_SC_KP1] = USB_K_SC_KP1,
[AT_SC_KPSLASH] = USB_K_SC_KPSLASH,
[AT_SC_KP8] = USB_K_SC_KP8,
[AT_SC_KP5] = USB_K_SC_KP5,
[AT_SC_KP2] = USB_K_SC_KP2,
[AT_SC_KP0] = USB_K_SC_KP0,
[AT_SC_KPASTERISK] = USB_K_SC_KPASTERISK,
[AT_SC_KP9] = USB_K_SC_KP9,
[AT_SC_KP6] = USB_K_SC_KP6,
[AT_SC_KP3] = USB_K_SC_KP3,
[AT_SC_KPDOT] = USB_K_SC_KPDOT,
[AT_SC_KPMINUS] = USB_K_SC_KPMINUS,
[AT_SC_KPPLUS] = USB_K_SC_KPPLUS,
[AT_SC_KPENTER] = USB_K_SC_KPENTER,
[AT_SC_ESC] = USB_K_SC_ESC,
[AT_SC_F1] = USB_K_SC_F1,
[AT_SC_F2] = USB_K_SC_F2,
[AT_SC_F3] = USB_K_SC_F3,
[AT_SC_F4] = USB_K_SC_F4,
[AT_SC_F5] = USB_K_SC_F5,
[AT_SC_F6] = USB_K_SC_F6,
[AT_SC_F7] = USB_K_SC_F7,
[AT_SC_F8] = USB_K_SC_F8,
[AT_SC_F9] = USB_K_SC_F9,
[AT_SC_F10] = USB_K_SC_F10,
[AT_SC_F11] = USB_K_SC_F11,
[AT_SC_F12] = USB_K_SC_F12,
[AT_SC_SYSRQ] = USB_K_SC_SYSRQ,
[AT_SC_SCROLLLOCK] = USB_K_SC_SCROLLLOCK,
[AT_SC_PAUSE] = USB_K_SC_PAUSE,
[AT_SC_LEFTMETA] = USB_K_SC_LEFTMETA,
[AT_SC_RIGHTMETA] = USB_K_SC_RIGHTMETA,
[AT_SC_MENU] = USB_K_SC_MENU,
[AT_SC_POWER] = USB_K_SC_POWER,
[AT_SC_SLEEP] = USB_K_SC_SLEEP,
// [ AT_SC_WAKEUP ] = USB_K_SC_WAKEUP,
// [ AT_SC_DBE_KATAKANA ] = USB_K_SC_DBE_KATAKANA,
// [ AT_SC_DBE_SBCSCHAR ] = USB_K_SC_DBE_SBCSCHAR,
// [ AT_SC_CONVERT ] = USB_K_SC_CONVERT,
// [ AT_SC_NONCONVERT ] = USB_K_SC_NONCONVERT,
};
static int at_to_usb_consumer[AT_SC_MAX] = {
[AT_SC_HOMEPAGE] = USB_C_BF_HOMEPAGE,
[AT_SC_MUTE] = USB_C_BF_MUTE,
[AT_SC_VOLUMEUP] = USB_C_BF_VOLUMEUP,
[AT_SC_VOLUMEDOWN] = USB_C_BF_VOLUMEDOWN,
[AT_SC_KEY_PREVIOUSSONG] = USB_C_BF_PREVIOUSSONG,
[AT_SC_KEY_PLAYPAUSE] = USB_C_BF_PLAYPAUSE,
[AT_SC_KEY_STOPCD] = USB_C_BF_STOPCD,
[AT_SC_KEY_NEXTSONG] = USB_C_BF_NEXTSONG,
};
void
scancode_error (void)
{
keyboard_error ();
consumer_error ();
}
void
scancode_dispatch (int key, int updown)
{
if (at_to_usb_keyboard[key])
keyboard_dispatch (at_to_usb_keyboard[key], updown);
if (at_to_usb_consumer[key])
consumer_dispatch (at_to_usb_consumer[key], updown);
}