Add support for multimedia keys (#16502)

Extended RETROK_ values with 18 new items, commonly found on
"multimedia" keyboards.

Mapping added for SDL, X11, Wayland, dinput, winraw keymaps.

Keyboard tester function of Remote Retropad extended to cover new keys.

One fix in Android mapping for #12986
This commit is contained in:
zoltanvb 2024-05-12 02:06:54 +02:00 committed by GitHub
parent 5bac6c6aac
commit 198656eb20
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 193 additions and 11 deletions

View File

@ -505,7 +505,7 @@ static void NETRETROPAD_CORE_PREFIX(update_keyboard_cb)(bool down, unsigned keyc
(keycode >= 123 && keycode < 127) ||
(keycode == 272) ||
(keycode >= 294 && keycode < 297) ||
(keycode >= 309 && keycode < 323))
(keycode >= 309 && keycode < RETROK_LAST))
{
snprintf(buf, sizeof(buf), "Key pressed: %d",keycode);
message.msg = buf;

View File

@ -440,10 +440,10 @@ static uint8_t keyboard_body[] =
/* 134 */ 2, 0, 255,
/* 135 */ 2, 0, 255,
/* 136 */ 2, 0, 255,
/* 137 */ 1, 255,
/* 138 */ 1, 255,
/* 139 */ 1, 255,
/* 140 */ 1, 255,
/* 137 */ 2, 0, 255,
/* 138 */ 2, 0, 255,
/* 139 */ 2, 0, 255,
/* 140 */ 2, 0, 255,
/* 141 */ 1, 255,
};
@ -587,8 +587,8 @@ static uint16_t keyboard_buttons[] =
/* 135 */ 41, 1, 126, 10, 2, 272, 10, 2, 294, 10, 2, 295, 10, 2, 296, 10, 2, 309, 10, 2, 310, 10, 2, 311, 10, 2, 312, 10, 2, 313, 10, 2, 315, 10, 2, 316, 10, 2, 317, 10, 2, 318, 10, 2, 319, 10, 2, 320, 10, 2, 321, 10, 2, 322, 10, 2, 314, 10, 2, 0, 10, 16,
/* 136 */ 1, 255,
/* 137 */ 1, 255,
/* 138 */ 1, 255,
/* 139 */ 1, 255,
/* 138 */ 37, 1, 324, 10, 2, 325, 10, 2, 326, 10, 2, 327, 10, 2, 328, 10, 2, 329, 10, 2, 330, 10, 2, 331, 10, 2, 332, 10, 2, 333, 10, 2, 334, 10, 2, 335, 10, 2, 336, 10, 2, 337, 10, 2, 338, 10, 2, 339, 10, 2, 340, 10, 2, 341, 10, 40,
/* 139 */ 37, 1, 324, 10, 2, 325, 10, 2, 326, 10, 2, 327, 10, 2, 328, 10, 2, 329, 10, 2, 330, 10, 2, 331, 10, 2, 332, 10, 2, 333, 10, 2, 334, 10, 2, 335, 10, 2, 336, 10, 2, 337, 10, 2, 338, 10, 2, 339, 10, 2, 340, 10, 2, 341, 10, 40,
/* 140 */ 1, 255,
/* 141 */ 1, 255,
};

View File

@ -167,6 +167,26 @@ enum xfvk_key
XFVK_FK23 = 201,
XFVK_FK24 = 202,
/* Multimedia keys */
XFVK_MUTE = 121,
XFVK_VOUP = 122,
XFVK_VODN = 123,
XFVK_BSTP = 136,
XFVK_APP1 = 156,
XFVK_APP2 = 157,
XFVK_MAIL = 163,
XFVK_FAVO = 164,
XFVK_BBAC = 166,
XFVK_BFWD = 167,
XFVK_CDNX = 171,
XFVK_PLAY = 172,
XFVK_CDPR = 173,
XFVK_CDST = 174,
XVFK_HOMP = 180,
XFVK_REFR = 181,
XFVK_BSEA = 225,
XFVK_MDIA = 234,
XFVK_LAST,
XFVK_DUMMY = 255
};

View File

@ -26,7 +26,7 @@
#define MAX_INPUT_DEVICES 16
#define RARCH_MAX_KEYS 137
#define RARCH_MAX_KEYS 155
#define RARCH_FIRST_CUSTOM_BIND 16
#define RARCH_FIRST_LIGHTGUN_BIND RARCH_ANALOG_BIND_LIST_END

View File

@ -79,7 +79,7 @@
#ifdef __APPLE__
#include "drivers_keyboard/keyboard_event_apple.h"
#endif
/* TODO: ensure that for UI display, menu_driver.c key_descriptors are shown instead of this */
const struct input_key_map input_config_key_map[] = {
{ "left", RETROK_LEFT },
{ "right", RETROK_RIGHT },
@ -203,6 +203,25 @@ const struct input_key_map input_config_key_map[] = {
{ "clear", RETROK_CLEAR },
{ "oem102", RETROK_OEM_102 },
{ "back", RETROK_BROWSER_BACK },
{ "forward", RETROK_BROWSER_FORWARD },
{ "refresh", RETROK_BROWSER_REFRESH },
{ "bstop", RETROK_BROWSER_STOP },
{ "search", RETROK_BROWSER_SEARCH },
{ "favorites", RETROK_BROWSER_FAVORITES },
{ "homepage", RETROK_BROWSER_HOME },
{ "mute", RETROK_VOLUME_MUTE },
{ "volumedown", RETROK_VOLUME_DOWN },
{ "volumeup", RETROK_VOLUME_UP },
{ "next", RETROK_MEDIA_NEXT },
{ "prev", RETROK_MEDIA_PREV },
{ "stop", RETROK_MEDIA_STOP },
{ "play", RETROK_MEDIA_PLAY_PAUSE },
{ "email", RETROK_LAUNCH_MAIL },
{ "media", RETROK_LAUNCH_MEDIA },
{ "app1", RETROK_LAUNCH_APP1 },
{ "app2", RETROK_LAUNCH_APP2 },
{ "nul", RETROK_UNKNOWN },
{ NULL, RETROK_UNKNOWN },
};
@ -778,6 +797,27 @@ const struct rarch_key_map rarch_key_map_sdl[] = {
#endif
{ SDLK_UNDO, RETROK_UNDO },
#ifdef HAVE_SDL2
{ SDLK_AUDIONEXT, RETROK_MEDIA_NEXT },
{ SDLK_AUDIOPREV, RETROK_MEDIA_PREV },
{ SDLK_AUDIOSTOP, RETROK_MEDIA_STOP },
{ SDLK_AUDIOPLAY, RETROK_MEDIA_PLAY_PAUSE },
{ SDLK_AUDIOMUTE, RETROK_VOLUME_MUTE },
{ SDLK_MEDIASELECT, RETROK_LAUNCH_MEDIA },
{ SDLK_MAIL, RETROK_LAUNCH_MAIL },
{ SDLK_CALCULATOR, RETROK_LAUNCH_APP2 },
{ SDLK_COMPUTER, RETROK_LAUNCH_APP1 },
{ SDLK_AC_SEARCH, RETROK_BROWSER_SEARCH },
{ SDLK_AC_HOME, RETROK_BROWSER_HOME },
{ SDLK_AC_BACK, RETROK_BROWSER_BACK },
{ SDLK_AC_FORWARD, RETROK_BROWSER_FORWARD },
{ SDLK_AC_STOP, RETROK_BROWSER_STOP },
{ SDLK_AC_REFRESH, RETROK_BROWSER_REFRESH },
{ SDLK_AC_BOOKMARKS, RETROK_BROWSER_FAVORITES },
{ SDLK_VOLUMEUP, RETROK_VOLUME_UP },
{ SDLK_VOLUMEDOWN, RETROK_VOLUME_DOWN },
#endif
{ 0, RETROK_UNKNOWN },
};
#endif
@ -891,6 +931,30 @@ const struct rarch_key_map rarch_key_map_dinput[] = {
{ DIK_CAPSLOCK, RETROK_CAPSLOCK },
{ DIK_NUMLOCK, RETROK_NUMLOCK },
{ DIK_OEM_102, RETROK_OEM_102 },
/* dinput.h included to MXE seems to carry only the alternate name circumflex */
#ifdef DIK_PREVTRACK
{ DIK_PREVTRACK, RETROK_MEDIA_PREV },
#else
{ DIK_CIRCUMFLEX, RETROK_MEDIA_PREV },
#endif
{ DIK_NEXTTRACK, RETROK_MEDIA_NEXT },
{ DIK_MUTE, RETROK_VOLUME_MUTE },
{ DIK_CALCULATOR, RETROK_LAUNCH_APP2 },
{ DIK_PLAYPAUSE, RETROK_MEDIA_PLAY_PAUSE },
{ DIK_MEDIASTOP, RETROK_MEDIA_STOP },
{ DIK_VOLUMEDOWN, RETROK_VOLUME_DOWN },
{ DIK_VOLUMEUP, RETROK_VOLUME_UP },
{ DIK_WEBHOME, RETROK_BROWSER_HOME },
{ DIK_WEBSEARCH, RETROK_BROWSER_SEARCH },
{ DIK_WEBFAVORITES, RETROK_BROWSER_FAVORITES },
{ DIK_WEBREFRESH, RETROK_BROWSER_REFRESH },
{ DIK_WEBSTOP, RETROK_BROWSER_STOP },
{ DIK_WEBFORWARD, RETROK_BROWSER_FORWARD },
{ DIK_WEBBACK, RETROK_BROWSER_BACK },
{ DIK_MYCOMPUTER, RETROK_LAUNCH_APP1 },
{ DIK_MAIL, RETROK_LAUNCH_MAIL },
{ DIK_MEDIASELECT, RETROK_LAUNCH_MEDIA },
{ 0, RETROK_UNKNOWN },
};
#endif
@ -1125,6 +1189,25 @@ const struct rarch_key_map rarch_key_map_x11[] = {
{ XFVK_KP0, RETROK_KP0 },
{ XFVK_KPDL, RETROK_KP_PERIOD },
{ XFVK_KPEQ, RETROK_KP_EQUALS },
{ XFVK_MUTE, RETROK_VOLUME_MUTE },
{ XFVK_VOUP, RETROK_VOLUME_UP },
{ XFVK_VODN, RETROK_VOLUME_DOWN },
{ XFVK_APP1, RETROK_LAUNCH_APP1 },
{ XFVK_APP2, RETROK_LAUNCH_APP2 },
{ XFVK_MAIL, RETROK_LAUNCH_MAIL },
{ XFVK_FAVO, RETROK_BROWSER_FAVORITES },
{ XFVK_BBAC, RETROK_BROWSER_BACK },
{ XFVK_BFWD, RETROK_BROWSER_FORWARD },
{ XFVK_CDNX, RETROK_MEDIA_NEXT },
{ XFVK_PLAY, RETROK_MEDIA_PLAY_PAUSE },
{ XFVK_CDPR, RETROK_MEDIA_PREV },
{ XFVK_CDST, RETROK_MEDIA_STOP },
{ XVFK_HOMP, RETROK_BROWSER_HOME },
{ XFVK_REFR, RETROK_BROWSER_REFRESH },
{ XFVK_BSTP, RETROK_BROWSER_STOP },
{ XFVK_BSEA, RETROK_BROWSER_SEARCH },
{ XFVK_MDIA, RETROK_LAUNCH_MEDIA },
{ 0, RETROK_UNKNOWN },
};
@ -1279,6 +1362,28 @@ const struct rarch_key_map rarch_key_map_linux[] = {
#endif
{ KEY_UNDO, RETROK_UNDO },
{ KEY_102ND, RETROK_OEM_102 },
#ifndef ANDROID
{ KEY_MUTE, RETROK_VOLUME_MUTE },
{ KEY_VOLUMEDOWN, RETROK_VOLUME_DOWN },
{ KEY_VOLUMEUP, RETROK_VOLUME_UP },
{ KEY_STOP, RETROK_BROWSER_STOP },
{ KEY_PROG1, RETROK_LAUNCH_APP1 },
{ KEY_PROG2, RETROK_LAUNCH_APP2 },
{ KEY_MAIL, RETROK_LAUNCH_MAIL },
{ KEY_BOOKMARKS, RETROK_BROWSER_FAVORITES },
{ KEY_BACK, RETROK_BROWSER_BACK },
{ KEY_FORWARD, RETROK_BROWSER_FORWARD },
{ KEY_NEXTSONG, RETROK_MEDIA_NEXT },
{ KEY_PLAYPAUSE, RETROK_MEDIA_PLAY_PAUSE },
{ KEY_PREVIOUSSONG, RETROK_MEDIA_PREV },
{ KEY_STOPCD, RETROK_MEDIA_STOP },
{ KEY_HOMEPAGE, RETROK_BROWSER_HOME },
{ KEY_REFRESH, RETROK_BROWSER_REFRESH },
{ KEY_SEARCH, RETROK_BROWSER_SEARCH },
{ KEY_MEDIA, RETROK_LAUNCH_MEDIA },
#endif
{ 0, RETROK_UNKNOWN },
};
#endif
@ -1343,7 +1448,7 @@ const struct rarch_key_map rarch_key_map_android[] = {
{ AKEYCODE_X, RETROK_x },
{ AKEYCODE_Y, RETROK_y },
{ AKEYCODE_Z, RETROK_z },
{ AKEYCODE_DEL, RETROK_DELETE },
{ AKEYCODE_FORWARD_DEL, RETROK_DELETE },
{ AKEYCODE_NUMPAD_0, RETROK_KP0 },
{ AKEYCODE_NUMPAD_1, RETROK_KP1 },
{ AKEYCODE_NUMPAD_2, RETROK_KP2 },
@ -1952,6 +2057,24 @@ const struct rarch_key_map rarch_key_map_winraw[] = {
{ SC_SLASH, RETROK_SLASH },
{ SC_APOSTROPHE, RETROK_QUOTE },
{ SC_ANGLEBRACKET, RETROK_OEM_102 },
{ SC_BROWSER_SEARCH, RETROK_BROWSER_SEARCH },
{ SC_BROWSER_FAVORITES, RETROK_BROWSER_FAVORITES },
{ SC_BROWSER_REFRESH, RETROK_BROWSER_REFRESH },
{ SC_BROWSER_STOP, RETROK_BROWSER_STOP },
{ SC_BROWSER_FORWARD, RETROK_BROWSER_FORWARD },
{ SC_BROWSER_BACK, RETROK_BROWSER_BACK },
{ SC_LAUNCH_EMAIL, RETROK_LAUNCH_MAIL },
{ SC_LAUNCH_MEDIA, RETROK_LAUNCH_MEDIA },
{ SC_MEDIA_PREV, RETROK_MEDIA_PREV },
{ SC_MEDIA_NEXT, RETROK_MEDIA_NEXT },
{ SC_VOLUME_MUTE, RETROK_VOLUME_MUTE },
{ SC_LAUNCH_APP1, RETROK_LAUNCH_APP1 },
{ SC_LAUNCH_APP2, RETROK_LAUNCH_APP2 },
{ SC_MEDIA_PLAY, RETROK_MEDIA_PLAY_PAUSE },
{ SC_MEDIA_STOP, RETROK_MEDIA_STOP },
{ SC_VOLUME_DOWN, RETROK_VOLUME_DOWN },
{ SC_VOLUME_UP, RETROK_VOLUME_UP },
{ SC_BROWSER_HOME, RETROK_BROWSER_HOME },
{ 0, RETROK_UNKNOWN }
};
#endif

View File

@ -666,6 +666,25 @@ enum retro_key
RETROK_UNDO = 322,
RETROK_OEM_102 = 323,
RETROK_BROWSER_BACK = 324,
RETROK_BROWSER_FORWARD = 325,
RETROK_BROWSER_REFRESH = 326,
RETROK_BROWSER_STOP = 327,
RETROK_BROWSER_SEARCH = 328,
RETROK_BROWSER_FAVORITES = 329,
RETROK_BROWSER_HOME = 330,
RETROK_VOLUME_MUTE = 331,
RETROK_VOLUME_DOWN = 332,
RETROK_VOLUME_UP = 333,
RETROK_MEDIA_NEXT = 334,
RETROK_MEDIA_PREV = 335,
RETROK_MEDIA_STOP = 336,
RETROK_MEDIA_PLAY_PAUSE = 337,
RETROK_LAUNCH_MAIL = 338,
RETROK_LAUNCH_MEDIA = 339,
RETROK_LAUNCH_APP1 = 340,
RETROK_LAUNCH_APP2 = 341,
RETROK_LAST,
RETROK_DUMMY = INT_MAX /* Ensure sizeof(enum) == sizeof(int) */

View File

@ -236,7 +236,27 @@ struct key_desc key_descriptors[RARCH_MAX_KEYS] =
{RETROK_POWER, "Power"},
{RETROK_EURO, {-30, -126, -84, 0}}, /* "<22>" */
{RETROK_UNDO, "Undo"},
{RETROK_OEM_102, "OEM-102"}
{RETROK_OEM_102, "OEM-102"},
{RETROK_BROWSER_BACK, "Back"},
{RETROK_BROWSER_FORWARD, "Forward"},
{RETROK_BROWSER_REFRESH, "Refresh"},
{RETROK_BROWSER_STOP, "Stop"},
{RETROK_BROWSER_SEARCH, "Search"},
{RETROK_BROWSER_FAVORITES, "Favorites"},
{RETROK_BROWSER_HOME, "Home Page"},
{RETROK_VOLUME_MUTE, "Mute"},
{RETROK_VOLUME_DOWN, "Volume Up"},
{RETROK_VOLUME_UP, "Volume Down"},
{RETROK_MEDIA_NEXT, "Next Track"},
{RETROK_MEDIA_PREV, "Previous Track"},
{RETROK_MEDIA_STOP, "Media Stop"},
{RETROK_MEDIA_PLAY_PAUSE, "Media Play"},
{RETROK_LAUNCH_MAIL, "Launch Email"},
{RETROK_LAUNCH_MEDIA, "Launch Media"},
{RETROK_LAUNCH_APP1, "Launch App1"},
{RETROK_LAUNCH_APP2, "Launch App2"}
};
static void *null_menu_init(void **userdata, bool video_is_threaded)