diff --git a/src/driver-etekcity.c b/src/driver-etekcity.c index 8447a6cc..877ac73b 100644 --- a/src/driver-etekcity.c +++ b/src/driver-etekcity.c @@ -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 diff --git a/src/driver-roccat.c b/src/driver-roccat.c index f0a4093a..2a00c864 100644 --- a/src/driver-roccat.c +++ b/src/driver-roccat.c @@ -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) { diff --git a/src/libratbag-hidraw.c b/src/libratbag-hidraw.c index 37184ef1..32b5dfdc 100644 --- a/src/libratbag-hidraw.c +++ b/src/libratbag-hidraw.c @@ -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) { diff --git a/src/libratbag-hidraw.h b/src/libratbag-hidraw.h index 29c25d48..070d7e8d 100644 --- a/src/libratbag-hidraw.h +++ b/src/libratbag-hidraw.h @@ -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 */