forked from drath/libratbag
hidraw: add input/hid usage mapping for keyboard usages
Etekcity and Roccat are using raw HID code to send the macros. The Logitech hid++ 2.0 are too so let's centralize the code in hidraw and simplify the code per-driver. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
This commit is contained in:
@@ -347,118 +347,6 @@ etekcity_button_to_action(struct ratbag_profile *profile,
|
||||
return etekcity_raw_to_button_action(data);
|
||||
}
|
||||
|
||||
static const unsigned int macro_mapping[] = {
|
||||
[0x00 ... 0x03] = 0,
|
||||
[0x04] = KEY_A,
|
||||
[0x05] = KEY_B,
|
||||
[0x06] = KEY_C,
|
||||
[0x07] = KEY_D,
|
||||
[0x08] = KEY_E,
|
||||
[0x09] = KEY_F,
|
||||
[0x0a] = KEY_G,
|
||||
[0x0b] = KEY_H,
|
||||
[0x0c] = KEY_I,
|
||||
[0x0d] = KEY_J,
|
||||
[0x0e] = KEY_K,
|
||||
[0x0f] = KEY_L,
|
||||
[0x10] = KEY_M,
|
||||
[0x11] = KEY_N,
|
||||
[0x12] = KEY_O,
|
||||
[0x13] = KEY_P,
|
||||
[0x14] = KEY_Q,
|
||||
[0x15] = KEY_R,
|
||||
[0x16] = KEY_S,
|
||||
[0x17] = KEY_T,
|
||||
[0x18] = KEY_U,
|
||||
[0x19] = KEY_V,
|
||||
[0x1a] = KEY_W,
|
||||
[0x1b] = KEY_X,
|
||||
[0x1c] = KEY_Y,
|
||||
[0x1d] = KEY_Z,
|
||||
[0x1e] = KEY_1,
|
||||
[0x1f] = KEY_2,
|
||||
[0x20] = KEY_3,
|
||||
[0x21] = KEY_4,
|
||||
[0x22] = KEY_5,
|
||||
[0x23] = KEY_6,
|
||||
[0x24] = KEY_7,
|
||||
[0x25] = KEY_8,
|
||||
[0x26] = KEY_9,
|
||||
[0x27] = KEY_0,
|
||||
[0x28] = KEY_ENTER,
|
||||
[0x29] = KEY_ESC,
|
||||
[0x2a] = KEY_BACKSPACE,
|
||||
[0x2b] = KEY_TAB,
|
||||
[0x2c] = KEY_SPACE,
|
||||
[0x2d] = KEY_MINUS,
|
||||
[0x2e] = KEY_EQUAL,
|
||||
[0x2f] = KEY_LEFTBRACE,
|
||||
[0x30] = KEY_RIGHTBRACE,
|
||||
[0x31] = KEY_BACKSLASH,
|
||||
[0x32] = KEY_BACKSLASH,
|
||||
[0x33] = KEY_SEMICOLON,
|
||||
[0x34] = KEY_APOSTROPHE,
|
||||
[0x35] = KEY_GRAVE,
|
||||
[0x36] = KEY_COMMA,
|
||||
[0x37] = KEY_DOT,
|
||||
[0x38] = KEY_SLASH,
|
||||
[0x39] = KEY_CAPSLOCK,
|
||||
[0x3a] = KEY_F1,
|
||||
[0x3b] = KEY_F2,
|
||||
[0x3c] = KEY_F3,
|
||||
[0x3d] = KEY_F4,
|
||||
[0x3e] = KEY_F5,
|
||||
[0x3f] = KEY_F6,
|
||||
[0x40] = KEY_F7,
|
||||
[0x41] = KEY_F8,
|
||||
[0x42] = KEY_F9,
|
||||
[0x43] = KEY_F10,
|
||||
[0x44] = KEY_F11,
|
||||
[0x45] = KEY_F12,
|
||||
[0x46] = KEY_SYSRQ,
|
||||
[0x47] = KEY_SCROLLLOCK,
|
||||
[0x48] = KEY_PAUSE,
|
||||
[0x49] = KEY_INSERT,
|
||||
[0x4a] = KEY_HOME,
|
||||
[0x4b] = KEY_PAGEUP,
|
||||
[0x4c] = KEY_DELETE,
|
||||
[0x4d] = KEY_END,
|
||||
[0x4e] = KEY_PAGEDOWN,
|
||||
[0x4f] = KEY_RIGHT,
|
||||
[0x50] = KEY_LEFT,
|
||||
[0x51] = KEY_DOWN,
|
||||
[0x52] = KEY_UP,
|
||||
[0x53] = KEY_NUMLOCK,
|
||||
[0x54] = KEY_KPSLASH,
|
||||
[0x55] = KEY_KPASTERISK,
|
||||
[0x56] = KEY_KPMINUS,
|
||||
[0x57] = KEY_KPPLUS,
|
||||
[0x58] = KEY_KPENTER,
|
||||
[0x59] = KEY_KP1,
|
||||
[0x5a] = KEY_KP2,
|
||||
[0x5b] = KEY_KP3,
|
||||
[0x5c] = KEY_KP4,
|
||||
[0x5d] = KEY_KP5,
|
||||
[0x5e] = KEY_KP6,
|
||||
[0x5f] = KEY_KP7,
|
||||
[0x60] = KEY_KP8,
|
||||
[0x61] = KEY_KP9,
|
||||
[0x62] = KEY_KP0,
|
||||
[0x63] = KEY_KPDOT,
|
||||
[0x64] = KEY_102ND,
|
||||
[0x65] = KEY_COMPOSE,
|
||||
[0x66 ... 0xdf] = 0,
|
||||
[0xe0] = KEY_LEFTCTRL,
|
||||
[0xe1] = KEY_LEFTSHIFT,
|
||||
[0xe2] = KEY_LEFTALT,
|
||||
[0xe3] = KEY_LEFTMETA,
|
||||
[0xe4] = KEY_RIGHTCTRL,
|
||||
[0xe5] = KEY_RIGHTSHIFT,
|
||||
[0xe6] = KEY_RIGHTALT,
|
||||
[0xe7] = KEY_RIGHTMETA,
|
||||
[0xe8 ... 0xff] = 0,
|
||||
};
|
||||
|
||||
static void
|
||||
etekcity_read_profile(struct ratbag_profile *profile, unsigned int index)
|
||||
{
|
||||
@@ -608,13 +496,15 @@ etekcity_read_button(struct ratbag_button *button)
|
||||
button->index, button->profile->index,
|
||||
macro->name, macro->length);
|
||||
for (j = 0; j < macro->length; j++) {
|
||||
unsigned int keycode = ratbag_hidraw_get_keycode_from_keyboard_usage(device,
|
||||
macro->keys[j].keycode);
|
||||
ratbag_button_set_macro_event(button,
|
||||
j,
|
||||
macro->keys[j].flag & 0x80 ? RATBAG_MACRO_EVENT_KEY_RELEASED : RATBAG_MACRO_EVENT_KEY_PRESSED,
|
||||
macro_mapping[macro->keys[j].keycode]);
|
||||
keycode);
|
||||
log_raw(device->ratbag,
|
||||
" - %s %s\n",
|
||||
libevdev_event_code_get_name(EV_KEY, macro_mapping[macro->keys[j].keycode]),
|
||||
libevdev_event_code_get_name(EV_KEY, keycode),
|
||||
macro->keys[j].flag & 0x80 ? "released" : "pressed");
|
||||
}
|
||||
}
|
||||
@@ -630,7 +520,7 @@ etekcity_write_macro(struct ratbag_button *button,
|
||||
struct etekcity_macro *macro;
|
||||
struct etekcity_data *drv_data;
|
||||
uint8_t *buf;
|
||||
unsigned i, j, count = 0;
|
||||
unsigned i, count = 0;
|
||||
int rc;
|
||||
|
||||
if (action->type != RATBAG_BUTTON_ACTION_TYPE_MACRO)
|
||||
@@ -652,10 +542,8 @@ etekcity_write_macro(struct ratbag_button *button,
|
||||
if (action->macro->events[i].type == RATBAG_MACRO_EVENT_WAIT)
|
||||
continue;
|
||||
|
||||
for (j = 0; j < ARRAY_LENGTH(macro_mapping); j++) {
|
||||
if (macro_mapping[j] == action->macro->events[i].event.key)
|
||||
macro->keys[count].keycode = j;
|
||||
}
|
||||
macro->keys[count].keycode = ratbag_hidraw_get_keyboard_usage_from_keycode(device,
|
||||
action->macro->events[i].event.key);
|
||||
if (action->macro->events[i].type == RATBAG_MACRO_EVENT_KEY_PRESSED)
|
||||
macro->keys[count].flag = 0x00;
|
||||
else
|
||||
|
||||
@@ -406,118 +406,6 @@ roccat_button_to_action(struct ratbag_profile *profile,
|
||||
return roccat_raw_to_button_action(data);
|
||||
}
|
||||
|
||||
static const unsigned int macro_mapping[] = {
|
||||
[0x00 ... 0x03] = 0,
|
||||
[0x04] = KEY_A,
|
||||
[0x05] = KEY_B,
|
||||
[0x06] = KEY_C,
|
||||
[0x07] = KEY_D,
|
||||
[0x08] = KEY_E,
|
||||
[0x09] = KEY_F,
|
||||
[0x0a] = KEY_G,
|
||||
[0x0b] = KEY_H,
|
||||
[0x0c] = KEY_I,
|
||||
[0x0d] = KEY_J,
|
||||
[0x0e] = KEY_K,
|
||||
[0x0f] = KEY_L,
|
||||
[0x10] = KEY_M,
|
||||
[0x11] = KEY_N,
|
||||
[0x12] = KEY_O,
|
||||
[0x13] = KEY_P,
|
||||
[0x14] = KEY_Q,
|
||||
[0x15] = KEY_R,
|
||||
[0x16] = KEY_S,
|
||||
[0x17] = KEY_T,
|
||||
[0x18] = KEY_U,
|
||||
[0x19] = KEY_V,
|
||||
[0x1a] = KEY_W,
|
||||
[0x1b] = KEY_X,
|
||||
[0x1c] = KEY_Y,
|
||||
[0x1d] = KEY_Z,
|
||||
[0x1e] = KEY_1,
|
||||
[0x1f] = KEY_2,
|
||||
[0x20] = KEY_3,
|
||||
[0x21] = KEY_4,
|
||||
[0x22] = KEY_5,
|
||||
[0x23] = KEY_6,
|
||||
[0x24] = KEY_7,
|
||||
[0x25] = KEY_8,
|
||||
[0x26] = KEY_9,
|
||||
[0x27] = KEY_0,
|
||||
[0x28] = KEY_ENTER,
|
||||
[0x29] = KEY_ESC,
|
||||
[0x2a] = KEY_BACKSPACE,
|
||||
[0x2b] = KEY_TAB,
|
||||
[0x2c] = KEY_SPACE,
|
||||
[0x2d] = KEY_MINUS,
|
||||
[0x2e] = KEY_EQUAL,
|
||||
[0x2f] = KEY_LEFTBRACE,
|
||||
[0x30] = KEY_RIGHTBRACE,
|
||||
[0x31] = KEY_BACKSLASH,
|
||||
[0x32] = KEY_BACKSLASH,
|
||||
[0x33] = KEY_SEMICOLON,
|
||||
[0x34] = KEY_APOSTROPHE,
|
||||
[0x35] = KEY_GRAVE,
|
||||
[0x36] = KEY_COMMA,
|
||||
[0x37] = KEY_DOT,
|
||||
[0x38] = KEY_SLASH,
|
||||
[0x39] = KEY_CAPSLOCK,
|
||||
[0x3a] = KEY_F1,
|
||||
[0x3b] = KEY_F2,
|
||||
[0x3c] = KEY_F3,
|
||||
[0x3d] = KEY_F4,
|
||||
[0x3e] = KEY_F5,
|
||||
[0x3f] = KEY_F6,
|
||||
[0x40] = KEY_F7,
|
||||
[0x41] = KEY_F8,
|
||||
[0x42] = KEY_F9,
|
||||
[0x43] = KEY_F10,
|
||||
[0x44] = KEY_F11,
|
||||
[0x45] = KEY_F12,
|
||||
[0x46] = KEY_SYSRQ,
|
||||
[0x47] = KEY_SCROLLLOCK,
|
||||
[0x48] = KEY_PAUSE,
|
||||
[0x49] = KEY_INSERT,
|
||||
[0x4a] = KEY_HOME,
|
||||
[0x4b] = KEY_PAGEUP,
|
||||
[0x4c] = KEY_DELETE,
|
||||
[0x4d] = KEY_END,
|
||||
[0x4e] = KEY_PAGEDOWN,
|
||||
[0x4f] = KEY_RIGHT,
|
||||
[0x50] = KEY_LEFT,
|
||||
[0x51] = KEY_DOWN,
|
||||
[0x52] = KEY_UP,
|
||||
[0x53] = KEY_NUMLOCK,
|
||||
[0x54] = KEY_KPSLASH,
|
||||
[0x55] = KEY_KPASTERISK,
|
||||
[0x56] = KEY_KPMINUS,
|
||||
[0x57] = KEY_KPPLUS,
|
||||
[0x58] = KEY_KPENTER,
|
||||
[0x59] = KEY_KP1,
|
||||
[0x5a] = KEY_KP2,
|
||||
[0x5b] = KEY_KP3,
|
||||
[0x5c] = KEY_KP4,
|
||||
[0x5d] = KEY_KP5,
|
||||
[0x5e] = KEY_KP6,
|
||||
[0x5f] = KEY_KP7,
|
||||
[0x60] = KEY_KP8,
|
||||
[0x61] = KEY_KP9,
|
||||
[0x62] = KEY_KP0,
|
||||
[0x63] = KEY_KPDOT,
|
||||
[0x64] = KEY_102ND,
|
||||
[0x65] = KEY_COMPOSE,
|
||||
[0x66 ... 0xdf] = 0,
|
||||
[0xe0] = KEY_LEFTCTRL,
|
||||
[0xe1] = KEY_LEFTSHIFT,
|
||||
[0xe2] = KEY_LEFTALT,
|
||||
[0xe3] = KEY_LEFTMETA,
|
||||
[0xe4] = KEY_RIGHTCTRL,
|
||||
[0xe5] = KEY_RIGHTSHIFT,
|
||||
[0xe6] = KEY_RIGHTALT,
|
||||
[0xe7] = KEY_RIGHTMETA,
|
||||
[0xe8 ... 0xff] = 0,
|
||||
};
|
||||
|
||||
static void
|
||||
roccat_read_profile(struct ratbag_profile *profile, unsigned int index)
|
||||
{
|
||||
@@ -703,10 +591,12 @@ roccat_read_button(struct ratbag_button *button)
|
||||
button->index, button->profile->index,
|
||||
macro->name, macro->length);
|
||||
for (j = 0; j < macro->length; j++) {
|
||||
unsigned int keycode = ratbag_hidraw_get_keycode_from_keyboard_usage(device,
|
||||
macro->keys[j].keycode);
|
||||
ratbag_button_set_macro_event(button,
|
||||
j * 2,
|
||||
macro->keys[j].flag & 0x01 ? RATBAG_MACRO_EVENT_KEY_PRESSED : RATBAG_MACRO_EVENT_KEY_RELEASED,
|
||||
macro_mapping[macro->keys[j].keycode]);
|
||||
keycode);
|
||||
if (macro->keys[j].time)
|
||||
time = macro->keys[j].time;
|
||||
else
|
||||
@@ -718,7 +608,7 @@ roccat_read_button(struct ratbag_button *button)
|
||||
|
||||
log_raw(device->ratbag,
|
||||
" - %s %s\n",
|
||||
libevdev_event_code_get_name(EV_KEY, macro_mapping[macro->keys[j].keycode]),
|
||||
libevdev_event_code_get_name(EV_KEY, keycode),
|
||||
macro->keys[j].flag & 0x80 ? "released" : "pressed");
|
||||
}
|
||||
}
|
||||
@@ -735,7 +625,7 @@ roccat_write_macro(struct ratbag_button *button,
|
||||
struct roccat_macro *macro;
|
||||
struct roccat_data *drv_data;
|
||||
uint8_t *buf;
|
||||
unsigned i, j, count = 0;
|
||||
unsigned i, count = 0;
|
||||
int rc;
|
||||
|
||||
if (action->type != RATBAG_BUTTON_ACTION_TYPE_MACRO)
|
||||
@@ -762,10 +652,7 @@ roccat_write_macro(struct ratbag_button *button,
|
||||
|
||||
if (action->macro->events[i].type == RATBAG_MACRO_EVENT_KEY_PRESSED ||
|
||||
action->macro->events[i].type == RATBAG_MACRO_EVENT_KEY_RELEASED) {
|
||||
for (j = 0; j < ARRAY_LENGTH(macro_mapping); j++) {
|
||||
if (macro_mapping[j] == action->macro->events[i].event.key)
|
||||
macro->keys[count].keycode = j;
|
||||
}
|
||||
macro->keys[count].keycode = ratbag_hidraw_get_keyboard_usage_from_keycode(device, action->macro->events[i].event.key);
|
||||
}
|
||||
|
||||
switch (action->macro->events[i].type) {
|
||||
|
||||
@@ -220,6 +220,204 @@
|
||||
#define HID_KEY_RIGHTALT 0xE6 /* RightAlt */
|
||||
#define HID_KEY_RIGHT_GUI 0xE7 /* Right GUI */
|
||||
|
||||
static const unsigned int hid_keyboard_mapping[] = {
|
||||
[HID_KEY_RESERVED ] = 0,
|
||||
[HID_KEY_ERRORROLLOVER ] = 0,
|
||||
[HID_KEY_POSTFAIL ] = 0,
|
||||
[HID_KEY_ERRORUNDEFINE ] = 0,
|
||||
[HID_KEY_A ] = KEY_A,
|
||||
[HID_KEY_B ] = KEY_B,
|
||||
[HID_KEY_C ] = KEY_C,
|
||||
[HID_KEY_D ] = KEY_D,
|
||||
[HID_KEY_E ] = KEY_E,
|
||||
[HID_KEY_F ] = KEY_F,
|
||||
[HID_KEY_G ] = KEY_G,
|
||||
[HID_KEY_H ] = KEY_H,
|
||||
[HID_KEY_I ] = KEY_I,
|
||||
[HID_KEY_J ] = KEY_J,
|
||||
[HID_KEY_K ] = KEY_K,
|
||||
[HID_KEY_L ] = KEY_L,
|
||||
[HID_KEY_M ] = KEY_M,
|
||||
[HID_KEY_N ] = KEY_N,
|
||||
[HID_KEY_O ] = KEY_O,
|
||||
[HID_KEY_P ] = KEY_P,
|
||||
[HID_KEY_Q ] = KEY_Q,
|
||||
[HID_KEY_R ] = KEY_R,
|
||||
[HID_KEY_S ] = KEY_S,
|
||||
[HID_KEY_T ] = KEY_T,
|
||||
[HID_KEY_U ] = KEY_U,
|
||||
[HID_KEY_V ] = KEY_V,
|
||||
[HID_KEY_W ] = KEY_W,
|
||||
[HID_KEY_X ] = KEY_X,
|
||||
[HID_KEY_Y ] = KEY_Y,
|
||||
[HID_KEY_Z ] = KEY_Z,
|
||||
[HID_KEY_1 ] = KEY_1,
|
||||
[HID_KEY_2 ] = KEY_2,
|
||||
[HID_KEY_3 ] = KEY_3,
|
||||
[HID_KEY_4 ] = KEY_4,
|
||||
[HID_KEY_5 ] = KEY_5,
|
||||
[HID_KEY_6 ] = KEY_6,
|
||||
[HID_KEY_7 ] = KEY_7,
|
||||
[HID_KEY_8 ] = KEY_8,
|
||||
[HID_KEY_9 ] = KEY_9,
|
||||
[HID_KEY_0 ] = KEY_0,
|
||||
[HID_KEY_RETURN_ENTER ] = KEY_ENTER,
|
||||
[HID_KEY_ESCAPE ] = KEY_ESC,
|
||||
[HID_KEY_DELETE_BACKSPACE ] = KEY_BACKSPACE,
|
||||
[HID_KEY_TAB ] = KEY_TAB,
|
||||
[HID_KEY_SPACEBAR ] = KEY_SPACE,
|
||||
[HID_KEY_MINUS_AND_UNDERSCORE ] = KEY_MINUS,
|
||||
[HID_KEY_EQUAL_AND_PLUS ] = KEY_EQUAL,
|
||||
[HID_KEY_CLOSE_BRACKET ] = KEY_LEFTBRACE,
|
||||
[HID_KEY_OPEN_BRACKET ] = KEY_RIGHTBRACE,
|
||||
[HID_KEY_BACK_SLASH_AND_PIPE ] = KEY_BACKSLASH,
|
||||
[HID_KEY_NON_US_HASH_AND_TILDE ] = KEY_BACKSLASH,
|
||||
[HID_KEY_SEMICOLON_AND_COLON ] = KEY_SEMICOLON,
|
||||
[HID_KEY_QUOTE_AND_DOUBLEQUOTE ] = KEY_APOSTROPHE,
|
||||
[HID_KEY_GRAVE_ACCENT_AND_TILDE ] = KEY_GRAVE,
|
||||
[HID_KEY_COMMA_AND_LESSER_THAN ] = KEY_COMMA,
|
||||
[HID_KEY_PERIOD_AND_GREATER_THAN ] = KEY_DOT,
|
||||
[HID_KEY_SLASH_AND_QUESTION_MARK ] = KEY_SLASH,
|
||||
[HID_KEY_CAPS_LOCK ] = KEY_CAPSLOCK,
|
||||
[HID_KEY_F1 ] = KEY_F1,
|
||||
[HID_KEY_F2 ] = KEY_F2,
|
||||
[HID_KEY_F3 ] = KEY_F3,
|
||||
[HID_KEY_F4 ] = KEY_F4,
|
||||
[HID_KEY_F5 ] = KEY_F5,
|
||||
[HID_KEY_F6 ] = KEY_F6,
|
||||
[HID_KEY_F7 ] = KEY_F7,
|
||||
[HID_KEY_F8 ] = KEY_F8,
|
||||
[HID_KEY_F9 ] = KEY_F9,
|
||||
[HID_KEY_F10 ] = KEY_F10,
|
||||
[HID_KEY_F11 ] = KEY_F11,
|
||||
[HID_KEY_F12 ] = KEY_F12,
|
||||
[HID_KEY_PRINTSCREEN ] = KEY_SYSRQ,
|
||||
[HID_KEY_SCROLL_LOCK ] = KEY_SCROLLLOCK,
|
||||
[HID_KEY_PAUSE ] = KEY_PAUSE,
|
||||
[HID_KEY_INSERT ] = KEY_INSERT,
|
||||
[HID_KEY_HOME ] = KEY_HOME,
|
||||
[HID_KEY_PAGEUP ] = KEY_PAGEUP,
|
||||
[HID_KEY_DELETE_FORWARD ] = KEY_DELETE,
|
||||
[HID_KEY_END ] = KEY_END,
|
||||
[HID_KEY_PAGEDOWN ] = KEY_PAGEDOWN,
|
||||
[HID_KEY_RIGHTARROW ] = KEY_RIGHT,
|
||||
[HID_KEY_LEFTARROW ] = KEY_LEFT,
|
||||
[HID_KEY_DOWNARROW ] = KEY_DOWN,
|
||||
[HID_KEY_UPARROW ] = KEY_UP,
|
||||
[HID_KEY_KEYPAD_NUM_LOCK_AND_CLEAR ] = KEY_NUMLOCK,
|
||||
[HID_KEY_KEYPAD_SLASH ] = KEY_KPSLASH,
|
||||
[HID_KEY_KEYPAD_ASTERISK ] = KEY_KPASTERISK,
|
||||
[HID_KEY_KEYPAD_MINUS ] = KEY_KPMINUS,
|
||||
[HID_KEY_KEYPAD_PLUS ] = KEY_KPPLUS,
|
||||
[HID_KEY_KEYPAD_ENTER ] = KEY_KPENTER,
|
||||
[HID_KEY_KEYPAD_1_AND_END ] = KEY_KP1,
|
||||
[HID_KEY_KEYPAD_2_AND_DOWN_ARROW ] = KEY_KP2,
|
||||
[HID_KEY_KEYPAD_3_AND_PAGEDN ] = KEY_KP3,
|
||||
[HID_KEY_KEYPAD_4_AND_LEFT_ARROW ] = KEY_KP4,
|
||||
[HID_KEY_KEYPAD_5 ] = KEY_KP5,
|
||||
[HID_KEY_KEYPAD_6_AND_RIGHT_ARROW ] = KEY_KP6,
|
||||
[HID_KEY_KEYPAD_7_AND_HOME ] = KEY_KP7,
|
||||
[HID_KEY_KEYPAD_8_AND_UP_ARROW ] = KEY_KP8,
|
||||
[HID_KEY_KEYPAD_9_AND_PAGEUP ] = KEY_KP9,
|
||||
[HID_KEY_KEYPAD_0_AND_INSERT ] = KEY_KP0,
|
||||
[HID_KEY_KEYPAD_PERIOD_AND_DELETE ] = KEY_KPDOT,
|
||||
[HID_KEY_NON_US_BACKSLASH_AND_PIPE ] = KEY_102ND,
|
||||
[HID_KEY_APPLICATION ] = KEY_COMPOSE,
|
||||
[HID_KEY_POWER ] = KEY_POWER,
|
||||
[HID_KEY_KEYPAD_EQUAL ] = KEY_KPEQUAL,
|
||||
[HID_KEY_F13 ] = KEY_F13,
|
||||
[HID_KEY_F14 ] = KEY_F14,
|
||||
[HID_KEY_F15 ] = KEY_F15,
|
||||
[HID_KEY_F16 ] = KEY_F16,
|
||||
[HID_KEY_F17 ] = KEY_F17,
|
||||
[HID_KEY_F18 ] = KEY_F18,
|
||||
[HID_KEY_F19 ] = KEY_F19,
|
||||
[HID_KEY_F20 ] = KEY_F20,
|
||||
[HID_KEY_F21 ] = KEY_F21,
|
||||
[HID_KEY_F22 ] = KEY_F22,
|
||||
[HID_KEY_F23 ] = KEY_F23,
|
||||
[HID_KEY_F24 ] = KEY_F24,
|
||||
[HID_KEY_EXECUTE ] = 0,
|
||||
[HID_KEY_HELP ] = KEY_HELP,
|
||||
[HID_KEY_MENU ] = KEY_MENU,
|
||||
[HID_KEY_SELECT ] = KEY_SELECT,
|
||||
[HID_KEY_STOP ] = KEY_STOP,
|
||||
[HID_KEY_AGAIN ] = KEY_AGAIN,
|
||||
[HID_KEY_UNDO ] = KEY_UNDO,
|
||||
[HID_KEY_CUT ] = KEY_CUT,
|
||||
[HID_KEY_COPY ] = KEY_COPY,
|
||||
[HID_KEY_PASTE ] = KEY_PASTE,
|
||||
[HID_KEY_FIND ] = KEY_FIND,
|
||||
[HID_KEY_MUTE ] = KEY_MUTE,
|
||||
[HID_KEY_VOLUME_UP ] = KEY_VOLUMEUP,
|
||||
[HID_KEY_VOLUME_DOWN ] = KEY_VOLUMEDOWN,
|
||||
[HID_KEY_LOCKING_CAPS_LOCK ] = 0,
|
||||
[HID_KEY_LOCKING_NUM_LOCK ] = 0,
|
||||
[HID_KEY_LOCKING_SCROLL_LOCK ] = 0,
|
||||
[HID_KEY_KEYPAD_COMMA ] = KEY_KPCOMMA,
|
||||
[HID_KEY_KEYPAD_EQUAL_SIGN ] = KEY_KPEQUAL,
|
||||
[HID_KEY_KANJI1 ] = 0,
|
||||
[HID_KEY_KANJI2 ] = 0,
|
||||
[HID_KEY_KANJI3 ] = 0,
|
||||
[HID_KEY_KANJI4 ] = 0,
|
||||
[HID_KEY_KANJI5 ] = 0,
|
||||
[HID_KEY_KANJI6 ] = 0,
|
||||
[HID_KEY_KANJI7 ] = 0,
|
||||
[HID_KEY_KANJI8 ] = 0,
|
||||
[HID_KEY_KANJI9 ] = 0,
|
||||
[HID_KEY_LANG1 ] = 0,
|
||||
[HID_KEY_LANG2 ] = 0,
|
||||
[HID_KEY_LANG3 ] = 0,
|
||||
[HID_KEY_LANG4 ] = 0,
|
||||
[HID_KEY_LANG5 ] = 0,
|
||||
[HID_KEY_LANG6 ] = 0,
|
||||
[HID_KEY_LANG7 ] = 0,
|
||||
[HID_KEY_LANG8 ] = 0,
|
||||
[HID_KEY_LANG9 ] = 0,
|
||||
[HID_KEY_ALTERNATE_ERASE ] = 0,
|
||||
[HID_KEY_SYSREQ_ATTENTION ] = KEY_SYSRQ,
|
||||
[HID_KEY_CANCEL ] = KEY_CANCEL,
|
||||
[HID_KEY_CLEAR ] = KEY_CLEAR,
|
||||
[HID_KEY_PRIOR ] = 0,
|
||||
[HID_KEY_RETURN ] = 0,
|
||||
[HID_KEY_SEPARATOR ] = 0,
|
||||
[HID_KEY_OUT ] = 0,
|
||||
[HID_KEY_OPER ] = 0,
|
||||
[HID_KEY_CLEAR_AGAIN ] = 0,
|
||||
[HID_KEY_CRSEL_PROPS ] = 0,
|
||||
[HID_KEY_EXSEL ] = 0,
|
||||
[0xA5 ... 0xDF] = 0,
|
||||
[HID_KEY_LEFTCONTROL ] = KEY_LEFTCTRL,
|
||||
[HID_KEY_LEFTSHIFT ] = KEY_LEFTSHIFT,
|
||||
[HID_KEY_LEFTALT ] = KEY_LEFTALT,
|
||||
[HID_KEY_LEFT_GUI ] = KEY_LEFTMETA,
|
||||
[HID_KEY_RIGHTCONTROL ] = KEY_RIGHTCTRL,
|
||||
[HID_KEY_RIGHTSHIFT ] = KEY_RIGHTSHIFT,
|
||||
[HID_KEY_RIGHTALT ] = KEY_RIGHTALT,
|
||||
[HID_KEY_RIGHT_GUI ] = KEY_RIGHTMETA,
|
||||
[0xe8 ... 0xff] = 0,
|
||||
};
|
||||
|
||||
unsigned int
|
||||
ratbag_hidraw_get_keycode_from_keyboard_usage(struct ratbag_device *device,
|
||||
uint8_t hid_code)
|
||||
{
|
||||
return hid_keyboard_mapping[hid_code];
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ratbag_hidraw_get_keyboard_usage_from_keycode(struct ratbag_device *device, unsigned keycode)
|
||||
{
|
||||
unsigned int j;
|
||||
|
||||
for (j = 0; j < ARRAY_LENGTH(hid_keyboard_mapping); j++) {
|
||||
if (hid_keyboard_mapping[j] == keycode)
|
||||
return j;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ratbag_hidraw_parse_report_descriptor(struct ratbag_device *device)
|
||||
{
|
||||
|
||||
@@ -151,4 +151,21 @@ ratbag_hidraw_get_usage_page(struct ratbag_device *device, unsigned int report_i
|
||||
unsigned int
|
||||
ratbag_hidraw_get_usage(struct ratbag_device *device, unsigned int report_id);
|
||||
|
||||
/**
|
||||
* Gives the input key code associated to the keyboard HID usage.
|
||||
*
|
||||
* @return the key code of the HID usage or 0.
|
||||
*/
|
||||
unsigned int
|
||||
ratbag_hidraw_get_keycode_from_keyboard_usage(struct ratbag_device *device,
|
||||
uint8_t hid_code);
|
||||
|
||||
/**
|
||||
* Gives the HID keyboard usage associated to the input keycode.
|
||||
*
|
||||
* @return the HID keyboard usage or 0.
|
||||
*/
|
||||
uint8_t
|
||||
ratbag_hidraw_get_keyboard_usage_from_keycode(struct ratbag_device *device,
|
||||
unsigned keycode);
|
||||
#endif /* LIBRATBAG_HIDRAW_H */
|
||||
|
||||
Reference in New Issue
Block a user