From fe8a0657b4cb55ae5695218f86fb21536690d508 Mon Sep 17 00:00:00 2001 From: radius Date: Thu, 7 Sep 2017 22:30:42 -0500 Subject: [PATCH 01/14] add input_mapper scafolding --- Makefile.common | 4 ++ command.c | 8 ++++ command.h | 4 ++ configuration.c | 6 +++ configuration.h | 2 + griffin/griffin.c | 4 ++ input/input_driver.c | 36 ++++++++++++++++ input/input_driver.h | 4 ++ input/input_mapper.c | 96 +++++++++++++++++++++++++++++++++++++++++ input/input_mapper.h | 51 ++++++++++++++++++++++ input/input_remapping.c | 2 +- input/input_remapping.h | 1 + input/input_remote.c | 34 +++++++-------- qb/config.params.sh | 1 + retroarch.c | 2 + 15 files changed, 237 insertions(+), 18 deletions(-) create mode 100644 input/input_mapper.c create mode 100644 input/input_mapper.h diff --git a/Makefile.common b/Makefile.common index 7b0938a4c0..5fd8c21386 100644 --- a/Makefile.common +++ b/Makefile.common @@ -1441,6 +1441,10 @@ ifeq ($(HAVE_NETWORKING), 1) endif endif + ifeq ($(HAVE_KEYMAPPER), 1) + OBJ += input/input_mapper.o + endif + ifeq ($(HAVE_NETWORKGAMEPAD), 1) OBJ += input/input_remote.o \ cores/libretro-net-retropad/net_retropad_core.o diff --git a/command.c b/command.c index 89997e8b23..7712b51ebd 100644 --- a/command.c +++ b/command.c @@ -2491,6 +2491,14 @@ TODO: Add a setting for these tweaks */ command_event(CMD_EVENT_REMOTE_DEINIT, NULL); input_driver_init_remote(); break; + + case CMD_EVENT_MAPPER_DEINIT: + input_driver_deinit_mapper(); + break; + case CMD_EVENT_MAPPER_INIT: + command_event(CMD_EVENT_MAPPER_DEINIT, NULL); + input_driver_init_mapper(); + break; case CMD_EVENT_LOG_FILE_DEINIT: retro_main_log_file_deinit(); break; diff --git a/command.h b/command.h index 4709d3f404..71bd968dec 100644 --- a/command.h +++ b/command.h @@ -193,6 +193,10 @@ enum event_command CMD_EVENT_REMOTE_INIT, /* Deinitializes remote gamepad interface. */ CMD_EVENT_REMOTE_DEINIT, + /* Initializes keyboard to gamepad mapper interface. */ + CMD_EVENT_MAPPER_INIT, + /* Deinitializes keyboard to gamepad mapper interface. */ + CMD_EVENT_MAPPER_DEINIT, /* Reinitializes audio driver. */ CMD_EVENT_AUDIO_REINIT, /* Resizes windowed scale. Will reinitialize video driver. */ diff --git a/configuration.c b/configuration.c index 4fc23eae5b..bb85056ac6 100644 --- a/configuration.c +++ b/configuration.c @@ -1241,6 +1241,9 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings, #ifdef HAVE_NETWORKGAMEPAD SETTING_BOOL("network_remote_enable", &settings->bools.network_remote_enable, false, false /* TODO */, false); #endif +#ifdef HAVE_KEYMAPPER + SETTING_BOOL("keyboard_mapper_enable", &settings->bools.keyboard_mapper_enable, false, false /* TODO */, false); +#endif #ifdef HAVE_NETWORKING SETTING_BOOL("netplay_nat_traversal", &settings->bools.netplay_nat_traversal, true, true, false); #endif @@ -1343,6 +1346,9 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings, #ifdef HAVE_NETWORKGAMEPAD SETTING_UINT("network_remote_base_port", &settings->uints.network_remote_base_port, true, network_remote_base_port, false); #endif +#ifdef HAVE_KEYMAPPER + SETTING_UINT("keyboard_mapper_port", &settings->uints.keyboard_mapper_port, true, network_remote_base_port, false); +#endif #ifdef GEKKO SETTING_UINT("video_viwidth", &settings->uints.video_viwidth, true, video_viwidth, false); #endif diff --git a/configuration.h b/configuration.h index 62590e07ce..852a3d906f 100644 --- a/configuration.h +++ b/configuration.h @@ -199,6 +199,7 @@ typedef struct settings bool savestate_thumbnail_enable; bool network_cmd_enable; bool stdin_cmd_enable; + bool keyboard_mapper_enable; bool network_remote_enable; bool network_remote_enable_user[MAX_USERS]; bool load_dummy_on_core_shutdown; @@ -303,6 +304,7 @@ typedef struct settings unsigned autosave_interval; unsigned network_cmd_port; unsigned network_remote_base_port; + unsigned keyboard_mapper_port; unsigned video_window_x; unsigned video_window_y; unsigned video_monitor_index; diff --git a/griffin/griffin.c b/griffin/griffin.c index 967ee00162..6652dd5067 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -1097,6 +1097,10 @@ MENU #include "../cores/libretro-net-retropad/net_retropad_core.c" #endif +#ifdef HAVE_KEYMAPPER +#include "../input/input_mapper.c" +#endif + #include "../command.c" #ifdef __cplusplus diff --git a/input/input_driver.c b/input/input_driver.c index ac413f3c06..8ee1462591 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -34,6 +34,10 @@ #include "input_remote.h" #endif +#ifdef HAVE_KEYMAPPER +#include "input_mapper.h" +#endif + #include "input_driver.h" #include "input_keymaps.h" #include "input_remapping.h" @@ -346,6 +350,9 @@ static command_t *input_driver_command = NULL; #ifdef HAVE_NETWORKGAMEPAD static input_remote_t *input_driver_remote = NULL; #endif +#ifdef HAVE_KEYMAPPER +static input_mapper_t *input_driver_mapper = NULL; +#endif const input_driver_t *current_input = NULL; void *current_input_data = NULL; static bool input_driver_block_hotkey = false; @@ -1327,6 +1334,15 @@ void input_driver_deinit_remote(void) #endif } +void input_driver_deinit_mapper(void) +{ +#ifdef HAVE_NETWORKGAMEPAD + if (input_driver_mapper) + input_mapper_free(input_driver_mapper); + input_driver_mapper = NULL; +#endif +} + bool input_driver_init_remote(void) { #ifdef HAVE_NETWORKGAMEPAD @@ -1347,6 +1363,26 @@ bool input_driver_init_remote(void) return false; } +bool input_driver_init_mapper(void) +{ +#ifdef HAVE_KEYMAPPER + settings_t *settings = config_get_ptr(); + + if (!settings->bools.keyboard_mapper_enable) + return false; + + input_driver_mapper = input_mapper_new( + settings->uints.keyboard_mapper_port); + + if (input_driver_mapper) + return true; + + RARCH_ERR("Failed to initialize input mapper.\n"); +#endif + return false; +} + + bool input_driver_grab_mouse(void) { if (!current_input || !current_input->grab_mouse) diff --git a/input/input_driver.h b/input/input_driver.h index 7b1325fe34..111613ae02 100644 --- a/input/input_driver.h +++ b/input/input_driver.h @@ -397,6 +397,10 @@ void input_driver_deinit_remote(void); bool input_driver_init_remote(void); +void input_driver_deinit_mapper(void); + +bool input_driver_init_mapper(void); + bool input_driver_grab_mouse(void); bool input_driver_ungrab_mouse(void); diff --git a/input/input_mapper.c b/input/input_mapper.c new file mode 100644 index 0000000000..8ed7f4bb59 --- /dev/null +++ b/input/input_mapper.c @@ -0,0 +1,96 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2014 - Hans-Kristian Arntzen + * Copyright (C) 2011-2017 - Daniel De Matteis + * Copyright (C) 2016-2017 - Andrés Suárez + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + + +#include +#include +#include + +#ifdef _WIN32 +#include +#else +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_CONFIG_H +#include "../config.h" +#endif + +#include "input_mapper.h" + +#include "../configuration.h" +#include "../msg_hash.h" +#include "../verbosity.h" + + +struct input_mapper +{ + +#if defined(HAVE_NETWORKING) && defined(HAVE_NETWORKGAMEPAD) + int net_fd[MAX_USERS]; +#endif + + bool state[RARCH_BIND_LIST_END]; +}; + +typedef struct input_mapper_state +{ + /* This is a bitmask of (1 << key_bind_id). */ + uint64_t buttons; + /* Left X, Left Y, Right X, Right Y */ + int16_t analog[4]; + /* the whole keyboard state */ + uint32_t keys[RETROK_LAST / 32 + 1]; +} input_mapper_state_t; + +input_mapper_t *input_mapper_new(uint16_t port) +{ + return NULL; +} + +void input_mapper_free(input_mapper_t *handle) +{ + return; +} + +void input_mapper_poll(input_mapper_t *handle, unsigned max_users) +{ + return; +} + +bool input_mapper_key_pressed(int key, unsigned port) +{ + return false; +} + +void input_mapper_state( + int16_t *ret, + unsigned port, + unsigned device, + unsigned idx, + unsigned id) +{ + return; +} \ No newline at end of file diff --git a/input/input_mapper.h b/input/input_mapper.h new file mode 100644 index 0000000000..1de7a18a01 --- /dev/null +++ b/input/input_mapper.h @@ -0,0 +1,51 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2014 - Hans-Kristian Arntzen + * Copyright (C) 2011-2017 - Daniel De Matteis + * Copyright (C) 2016-2017 - Andrés Suárez + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#ifndef INPUT_MAPPER_H__ +#define INPUT_MAPPER_H__ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include +#include + +RETRO_BEGIN_DECLS + +typedef struct input_mapper input_mapper_t; + +input_mapper_t *input_mapper_new(uint16_t port); + +void input_mapper_free(input_mapper_t *handle); + +void input_mapper_poll(input_mapper_t *handle, unsigned max_users); + +bool input_mapper_key_pressed(int key, unsigned port); + +void input_mapper_state( + int16_t *ret, + unsigned port, + unsigned device, + unsigned idx, + unsigned id); + +RETRO_END_DECLS + +#endif diff --git a/input/input_remapping.c b/input/input_remapping.c index 7e66086903..2f3bf3cb85 100644 --- a/input/input_remapping.c +++ b/input/input_remapping.c @@ -1,6 +1,6 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2011-2017 - Daniel De Matteis - * Copyright (C) 2015-2017 - Andrés Suárez + * Copyright (C) 2016-2017 - Andrés Suárez * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- diff --git a/input/input_remapping.h b/input/input_remapping.h index d2bdec05ac..147136f1ef 100644 --- a/input/input_remapping.h +++ b/input/input_remapping.h @@ -1,5 +1,6 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2011-2017 - Daniel De Matteis + * Copyright (C) 2016-2017 - Andrés Suárez * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- diff --git a/input/input_remote.c b/input/input_remote.c index 05dbcfb7fe..307c73611b 100644 --- a/input/input_remote.c +++ b/input/input_remote.c @@ -169,18 +169,18 @@ void input_remote_free(input_remote_t *handle, unsigned max_users) #if defined(HAVE_NETWORKING) && defined(HAVE_NETWORKGAMEPAD) static void input_remote_parse_packet(struct remote_message *msg, unsigned user) { - input_remote_state_t *ol_state = input_remote_get_state_ptr(); + input_remote_state_t *input_state = input_remote_get_state_ptr(); /* Parse message */ switch (msg->device) { case RETRO_DEVICE_JOYPAD: - ol_state->buttons[user] &= ~(1 << msg->id); + input_state->buttons[user] &= ~(1 << msg->id); if (msg->state) - ol_state->buttons[user] |= 1 << msg->id; + input_state->buttons[user] |= 1 << msg->id; break; case RETRO_DEVICE_ANALOG: - ol_state->analog[msg->index * 2 + msg->id][user] = msg->state; + input_state->analog[msg->index * 2 + msg->id][user] = msg->state; break; } } @@ -202,17 +202,17 @@ void input_remote_state( case RETRO_DEVICE_ANALOG: { unsigned base = 0; - input_remote_state_t *ol_state = input_remote_get_state_ptr(); + input_remote_state_t *input_state = input_remote_get_state_ptr(); - if (!ol_state) + if (!input_state) return; if (idx == RETRO_DEVICE_INDEX_ANALOG_RIGHT) base = 2; if (id == RETRO_DEVICE_ID_ANALOG_Y) base += 1; - if (ol_state && ol_state->analog[base][port]) - *ret = ol_state->analog[base][port]; + if (input_state && input_state->analog[base][port]) + *ret = input_state->analog[base][port]; } break; } @@ -220,19 +220,19 @@ void input_remote_state( bool input_remote_key_pressed(int key, unsigned port) { - input_remote_state_t *ol_state = input_remote_get_state_ptr(); + input_remote_state_t *input_state = input_remote_get_state_ptr(); - if (!ol_state) + if (!input_state) return false; - return (ol_state->buttons[port] & (UINT64_C(1) << key)); + return (input_state->buttons[port] & (UINT64_C(1) << key)); } void input_remote_poll(input_remote_t *handle, unsigned max_users) { unsigned user; settings_t *settings = config_get_ptr(); - input_remote_state_t *ol_state = input_remote_get_state_ptr(); + input_remote_state_t *input_state = input_remote_get_state_ptr(); for(user = 0; user < max_users; user++) { @@ -257,11 +257,11 @@ void input_remote_poll(input_remote_t *handle, unsigned max_users) else if ((ret != -1) || ((errno != EAGAIN) && (errno != ENOENT))) #endif { - ol_state->buttons[user] = 0; - ol_state->analog[0][user] = 0; - ol_state->analog[1][user] = 0; - ol_state->analog[2][user] = 0; - ol_state->analog[3][user] = 0; + input_state->buttons[user] = 0; + input_state->analog[0][user] = 0; + input_state->analog[1][user] = 0; + input_state->analog[2][user] = 0; + input_state->analog[3][user] = 0; } } } diff --git a/qb/config.params.sh b/qb/config.params.sh index 8f9913e9af..5f7d9abd05 100644 --- a/qb/config.params.sh +++ b/qb/config.params.sh @@ -28,6 +28,7 @@ HAVE_SSA=auto # SSA/ASS for FFmpeg subtitle support HAVE_DYLIB=auto # Dynamic loading support HAVE_NETWORKING=auto # Networking features (recommended) HAVE_NETWORKGAMEPAD=auto # Networked game pad (plus baked-in core) +HAVE_KEYMAPPER=yes # Networked game pad (plus baked-in core) C89_NETWORKGAMEPAD=no HAVE_MINIUPNPC=auto # Mini UPnP client library (for NAT traversal) HAVE_BUILTINMINIUPNPC=yes # Bake in Mini UPnP client library (for NAT traversal) diff --git a/retroarch.c b/retroarch.c index 1e06c7f97f..db45deaea9 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1289,6 +1289,7 @@ bool retroarch_main_init(int argc, char *argv[]) drivers_init(DRIVERS_CMD_ALL); command_event(CMD_EVENT_COMMAND_INIT, NULL); command_event(CMD_EVENT_REMOTE_INIT, NULL); + command_event(CMD_EVENT_MAPPER_INIT, NULL); command_event(CMD_EVENT_REWIND_INIT, NULL); command_event(CMD_EVENT_CONTROLLERS_INIT, NULL); command_event(CMD_EVENT_RECORD_INIT, NULL); @@ -1455,6 +1456,7 @@ bool rarch_ctl(enum rarch_ctl_state state, void *data) command_event(CMD_EVENT_NETPLAY_DEINIT, NULL); command_event(CMD_EVENT_COMMAND_DEINIT, NULL); command_event(CMD_EVENT_REMOTE_DEINIT, NULL); + command_event(CMD_EVENT_MAPPER_DEINIT, NULL); command_event(CMD_EVENT_AUTOSAVE_DEINIT, NULL); From cd72bd1bb4fb0fcc6872b9f0fb28918186555859 Mon Sep 17 00:00:00 2001 From: radius Date: Sat, 9 Sep 2017 14:21:00 -0500 Subject: [PATCH 02/14] implement keymapper --- configuration.h | 1 + input/input_driver.c | 10 +++++ input/input_mapper.c | 100 ++++++++++++++++++++++++++++++++---------- input/input_mapper.h | 4 +- input/input_overlay.c | 6 +++ 5 files changed, 96 insertions(+), 25 deletions(-) diff --git a/configuration.h b/configuration.h index 852a3d906f..4028527a23 100644 --- a/configuration.h +++ b/configuration.h @@ -275,6 +275,7 @@ typedef struct settings unsigned audio_block_frames; unsigned audio_latency; unsigned input_remap_ids[MAX_USERS][RARCH_CUSTOM_BIND_LIST_END]; + unsigned input_keymapper_ids[RARCH_CUSTOM_BIND_LIST_END]; /* Set by autoconfiguration in joypad_autoconfig_dir. * Does not override main binds. */ diff --git a/input/input_driver.c b/input/input_driver.c index 8ee1462591..894f5be924 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -579,6 +579,11 @@ void input_poll(void) if (input_driver_remote) input_remote_poll(input_driver_remote, max_users); #endif + +#ifdef HAVE_KEYMAPPER + if (input_driver_mapper) + input_mapper_poll(input_driver_mapper); +#endif } /** @@ -662,6 +667,11 @@ int16_t input_state(unsigned port, unsigned device, input_remote_state(&res, port, device, idx, id); #endif +#ifdef HAVE_KEYMAPPER + if (input_driver_mapper) + input_mapper_state(&res, port, device, idx, id); +#endif + /* Don't allow turbo for D-pad. */ if (device == RETRO_DEVICE_JOYPAD && (id < RETRO_DEVICE_ID_JOYPAD_UP || id > RETRO_DEVICE_ID_JOYPAD_RIGHT)) diff --git a/input/input_mapper.c b/input/input_mapper.c index 8ed7f4bb59..d7ecae3f53 100644 --- a/input/input_mapper.c +++ b/input/input_mapper.c @@ -28,11 +28,8 @@ #include #include -#include #include #include -#include -#include #ifdef HAVE_CONFIG_H #include "../config.h" @@ -44,45 +41,82 @@ #include "../msg_hash.h" #include "../verbosity.h" +#define MAPPER_GET_KEY(state, key) (((state)->keys[(key) / 32] >> ((key) % 32)) & 1) +#define MAPPER_SET_KEY(state, key) (state)->keys[(key) / 32] |= 1 << ((key) % 32) struct input_mapper { - -#if defined(HAVE_NETWORKING) && defined(HAVE_NETWORKGAMEPAD) - int net_fd[MAX_USERS]; -#endif - - bool state[RARCH_BIND_LIST_END]; -}; - -typedef struct input_mapper_state -{ + /* The controller port that will be polled*/ + uint8_t port; /* This is a bitmask of (1 << key_bind_id). */ uint64_t buttons; /* Left X, Left Y, Right X, Right Y */ - int16_t analog[4]; + int16_t analog[4]; /* the whole keyboard state */ uint32_t keys[RETROK_LAST / 32 + 1]; -} input_mapper_state_t; +}; + +static input_mapper_t *mapper_ptr; input_mapper_t *input_mapper_new(uint16_t port) { - return NULL; + settings_t *settings = config_get_ptr(); + input_mapper_t* handle = (input_mapper_t*) + calloc(1, sizeof(*handle)); + + if (!handle) + return NULL; + + /* testing values*/ + settings->uints.input_keymapper_ids[0] = RETROK_n; + settings->uints.input_keymapper_ids[1] = RETROK_SPACE; + settings->uints.input_keymapper_ids[2] = RETROK_F1; + settings->uints.input_keymapper_ids[3] = RETROK_RETURN; + settings->uints.input_keymapper_ids[4] = RETROK_UP; + settings->uints.input_keymapper_ids[5] = RETROK_DOWN; + settings->uints.input_keymapper_ids[6] = RETROK_LEFT; + settings->uints.input_keymapper_ids[7] = RETROK_RIGHT; + settings->uints.input_keymapper_ids[8] = RETROK_F1; + settings->uints.input_keymapper_ids[9] = RETROK_F2; + settings->uints.input_keymapper_ids[10] = RETROK_F3; + settings->uints.input_keymapper_ids[11] = RETROK_F4; + settings->uints.input_keymapper_ids[12] = RETROK_F5; + settings->uints.input_keymapper_ids[13] = RETROK_F6; + settings->uints.input_keymapper_ids[14] = RETROK_F7; + settings->uints.input_keymapper_ids[15] = RETROK_F8; + + + handle->port = port; + mapper_ptr = handle; + return handle; } void input_mapper_free(input_mapper_t *handle) { - return; + free (handle); } -void input_mapper_poll(input_mapper_t *handle, unsigned max_users) +void input_mapper_poll(input_mapper_t *handle) { - return; -} + settings_t *settings = config_get_ptr(); + unsigned device = settings->uints.input_libretro_device[handle->port]; + device &= RETRO_DEVICE_MASK; -bool input_mapper_key_pressed(int key, unsigned port) -{ - return false; + /* for now we only handle keyboard inputs */ + if (device == RETRO_DEVICE_KEYBOARD) + { + memset(handle->keys, 0, sizeof(handle->keys)); + + for (int i = 0; i < RARCH_CUSTOM_BIND_LIST_END; i++) + { + if(i < RETROK_LAST) + { + if (input_state(0, RETRO_DEVICE_JOYPAD, handle->port, i)) + MAPPER_SET_KEY (handle, settings->uints.input_keymapper_ids[i]); + } + } + } + return; } void input_mapper_state( @@ -92,5 +126,25 @@ void input_mapper_state( unsigned idx, unsigned id) { + + switch (device) + { + case RETRO_DEVICE_KEYBOARD: + if (id < RETROK_LAST) + { + /* + RARCH_LOG("State: UDLR %u %u %u %u\n", + MAPPER_GET_KEY(mapper_ptr, RETROK_UP), + MAPPER_GET_KEY(mapper_ptr, RETROK_DOWN), + MAPPER_GET_KEY(mapper_ptr, RETROK_LEFT), + MAPPER_GET_KEY(mapper_ptr, RETROK_RIGHT) + );*/ + + if (MAPPER_GET_KEY(mapper_ptr, id)) + *ret |= 1; + } + break; + } + return; } \ No newline at end of file diff --git a/input/input_mapper.h b/input/input_mapper.h index 1de7a18a01..b23b37e6a1 100644 --- a/input/input_mapper.h +++ b/input/input_mapper.h @@ -35,9 +35,9 @@ input_mapper_t *input_mapper_new(uint16_t port); void input_mapper_free(input_mapper_t *handle); -void input_mapper_poll(input_mapper_t *handle, unsigned max_users); +void input_mapper_poll(input_mapper_t *handle); -bool input_mapper_key_pressed(int key, unsigned port); +bool input_mapper_key_pressed(int key); void input_mapper_state( int16_t *ret, diff --git a/input/input_overlay.c b/input/input_overlay.c index eed239fabc..507b1c4309 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -734,6 +734,12 @@ void input_state_overlay(input_overlay_t *ol, int16_t *ret, case RETRO_DEVICE_KEYBOARD: if (id < RETROK_LAST) { + /*RARCH_LOG("UDLR %u %u %u %u\n", + OVERLAY_GET_KEY(ol_state, RETROK_UP), + OVERLAY_GET_KEY(ol_state, RETROK_DOWN), + OVERLAY_GET_KEY(ol_state, RETROK_LEFT), + OVERLAY_GET_KEY(ol_state, RETROK_RIGHT) + );*/ if (OVERLAY_GET_KEY(ol_state, id)) *ret |= 1; } From 654db9caac3c3409399d0216955fe1a2570fbc5f Mon Sep 17 00:00:00 2001 From: radius Date: Sat, 9 Sep 2017 15:10:13 -0500 Subject: [PATCH 03/14] it should work with the SET_KEYBOARD_CALLBACK now --- input/input_mapper.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/input/input_mapper.c b/input/input_mapper.c index d7ecae3f53..08436ea61b 100644 --- a/input/input_mapper.c +++ b/input/input_mapper.c @@ -67,7 +67,8 @@ input_mapper_t *input_mapper_new(uint16_t port) if (!handle) return NULL; - /* testing values*/ + /* testing values for mgs */ + settings->uints.input_keymapper_ids[0] = RETROK_n; settings->uints.input_keymapper_ids[1] = RETROK_SPACE; settings->uints.input_keymapper_ids[2] = RETROK_F1; @@ -84,8 +85,18 @@ input_mapper_t *input_mapper_new(uint16_t port) settings->uints.input_keymapper_ids[13] = RETROK_F6; settings->uints.input_keymapper_ids[14] = RETROK_F7; settings->uints.input_keymapper_ids[15] = RETROK_F8; - + /* testing values for keen5 */ + /*settings->uints.input_keymapper_ids[0] = RETROK_LCTRL; + settings->uints.input_keymapper_ids[1] = RETROK_SPACE; + settings->uints.input_keymapper_ids[2] = RETROK_ESCAPE; + settings->uints.input_keymapper_ids[3] = RETROK_RETURN; + settings->uints.input_keymapper_ids[4] = RETROK_UP; + settings->uints.input_keymapper_ids[5] = RETROK_DOWN; + settings->uints.input_keymapper_ids[6] = RETROK_LEFT; + settings->uints.input_keymapper_ids[7] = RETROK_RIGHT; + settings->uints.input_keymapper_ids[8] = RETROK_F1; + */ handle->port = port; mapper_ptr = handle; return handle; @@ -112,7 +123,15 @@ void input_mapper_poll(input_mapper_t *handle) if(i < RETROK_LAST) { if (input_state(0, RETRO_DEVICE_JOYPAD, handle->port, i)) + { MAPPER_SET_KEY (handle, settings->uints.input_keymapper_ids[i]); + input_keyboard_event(true, settings->uints.input_keymapper_ids[i], 0, 0, RETRO_DEVICE_KEYBOARD); + } + else + { + input_keyboard_event(false, settings->uints.input_keymapper_ids[i], 0, 0, RETRO_DEVICE_KEYBOARD); + } + } } } @@ -127,6 +146,7 @@ void input_mapper_state( unsigned id) { + settings_t *settings = config_get_ptr(); switch (device) { case RETRO_DEVICE_KEYBOARD: From efce234dc4f9b40405a3135ece29d3a4c60704c1 Mon Sep 17 00:00:00 2001 From: radius Date: Sat, 9 Sep 2017 17:19:04 -0500 Subject: [PATCH 04/14] save and load keymaps from file --- input/input_mapper.c | 31 ------------------ input/input_remapping.c | 69 +++++++++++++++++++++++++++++++---------- 2 files changed, 52 insertions(+), 48 deletions(-) diff --git a/input/input_mapper.c b/input/input_mapper.c index 08436ea61b..fd0c7a8754 100644 --- a/input/input_mapper.c +++ b/input/input_mapper.c @@ -66,37 +66,6 @@ input_mapper_t *input_mapper_new(uint16_t port) if (!handle) return NULL; - - /* testing values for mgs */ - - settings->uints.input_keymapper_ids[0] = RETROK_n; - settings->uints.input_keymapper_ids[1] = RETROK_SPACE; - settings->uints.input_keymapper_ids[2] = RETROK_F1; - settings->uints.input_keymapper_ids[3] = RETROK_RETURN; - settings->uints.input_keymapper_ids[4] = RETROK_UP; - settings->uints.input_keymapper_ids[5] = RETROK_DOWN; - settings->uints.input_keymapper_ids[6] = RETROK_LEFT; - settings->uints.input_keymapper_ids[7] = RETROK_RIGHT; - settings->uints.input_keymapper_ids[8] = RETROK_F1; - settings->uints.input_keymapper_ids[9] = RETROK_F2; - settings->uints.input_keymapper_ids[10] = RETROK_F3; - settings->uints.input_keymapper_ids[11] = RETROK_F4; - settings->uints.input_keymapper_ids[12] = RETROK_F5; - settings->uints.input_keymapper_ids[13] = RETROK_F6; - settings->uints.input_keymapper_ids[14] = RETROK_F7; - settings->uints.input_keymapper_ids[15] = RETROK_F8; - - /* testing values for keen5 */ - /*settings->uints.input_keymapper_ids[0] = RETROK_LCTRL; - settings->uints.input_keymapper_ids[1] = RETROK_SPACE; - settings->uints.input_keymapper_ids[2] = RETROK_ESCAPE; - settings->uints.input_keymapper_ids[3] = RETROK_RETURN; - settings->uints.input_keymapper_ids[4] = RETROK_UP; - settings->uints.input_keymapper_ids[5] = RETROK_DOWN; - settings->uints.input_keymapper_ids[6] = RETROK_LEFT; - settings->uints.input_keymapper_ids[7] = RETROK_RIGHT; - settings->uints.input_keymapper_ids[8] = RETROK_F1; - */ handle->port = port; mapper_ptr = handle; return handle; diff --git a/input/input_remapping.c b/input/input_remapping.c index 2f3bf3cb85..1b459c27af 100644 --- a/input/input_remapping.c +++ b/input/input_remapping.c @@ -23,6 +23,7 @@ #include "input_remapping.h" #include "../configuration.h" #include "../retroarch.h" +#include "../verbosity.h" static unsigned old_analog_dpad_mode[MAX_USERS]; static unsigned old_libretro_device[MAX_USERS]; @@ -50,8 +51,9 @@ bool input_remapping_load_file(void *data, const char *path) for (i = 0; i < MAX_USERS; i++) { - char buf_tmp[64]; + char s1[64], s2[64]; char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}}; + char keymapper_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}}; char key_strings[RARCH_FIRST_CUSTOM_BIND + 4][128] = { "b", "y", "select", "start", "up", "down", "left", "right", @@ -61,17 +63,41 @@ bool input_remapping_load_file(void *data, const char *path) old_analog_dpad_mode[i] = settings->uints.input_analog_dpad_mode[i]; old_libretro_device[i] = settings->uints.input_libretro_device[i]; - snprintf(buf_tmp, sizeof(buf_tmp), "input_player%u", i + 1); + s1[0] = '\0'; + s2[0] = '\0'; + + snprintf(s1, sizeof(s1), "input_player%u", i + 1); + snprintf(s2, sizeof(s2), "input_player%u_key", i + 1); for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++) { int key_remap = -1; - fill_pathname_join_delim(key_ident[j], buf_tmp, + fill_pathname_join_delim(key_ident[j], s1, key_strings[j], '_', sizeof(key_ident[j])); + fill_pathname_join_delim(keymapper_ident[j], s2, + key_strings[j], '_', sizeof(key_ident[j])); + if (config_get_int(conf, key_ident[j], &key_remap) && key_remap < RARCH_FIRST_CUSTOM_BIND) settings->uints.input_remap_ids[i][j] = key_remap; + + key_remap = -1; + + if (settings->uints.keyboard_mapper_port == i) + { + if (config_get_int(conf, keymapper_ident[j], &key_remap)) + { + settings->uints.input_keymapper_ids[j] = key_remap; +#if 0 + RARCH_LOG ("%s: %u\n", keymapper_ident[j], settings->uints.input_keymapper_ids[j]); +#endif + } + else + settings->uints.input_keymapper_ids[j] = RETROK_UNKNOWN; + } + + } for (j = 0; j < 4; j++) @@ -81,7 +107,7 @@ bool input_remapping_load_file(void *data, const char *path) snprintf(key_ident[RARCH_FIRST_CUSTOM_BIND + j], sizeof(key_ident[RARCH_FIRST_CUSTOM_BIND + j]), "%s_%s", - buf_tmp, + s1, key_strings[RARCH_FIRST_CUSTOM_BIND + j]); if (config_get_int(conf, key_ident[RARCH_FIRST_CUSTOM_BIND + j], @@ -90,11 +116,11 @@ bool input_remapping_load_file(void *data, const char *path) key_remap; } - snprintf(buf_tmp, sizeof(buf_tmp), "input_player%u_analog_dpad_mode", i + 1); - CONFIG_GET_INT_BASE(conf, settings, uints.input_analog_dpad_mode[i], buf_tmp); + snprintf(s1, sizeof(s1), "input_player%u_analog_dpad_mode", i + 1); + CONFIG_GET_INT_BASE(conf, settings, uints.input_analog_dpad_mode[i], s1); - snprintf(buf_tmp, sizeof(buf_tmp), "input_libretro_device_p%u", i + 1); - CONFIG_GET_INT_BASE(conf, settings, uints.input_libretro_device[i], buf_tmp); + snprintf(s1, sizeof(s1), "input_libretro_device_p%u", i + 1); + CONFIG_GET_INT_BASE(conf, settings, uints.input_libretro_device[i], s1); } config_file_free(conf); @@ -144,22 +170,27 @@ bool input_remapping_save_file(const char *path) for (i = 0; i < max_users; i++) { - char buf_tmp[64]; + char s1[64], s2[64]; char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}}; + char keymapper_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}}; char key_strings[RARCH_FIRST_CUSTOM_BIND + 4][128] = { "b", "y", "select", "start", "up", "down", "left", "right", "a", "x", "l", "r", "l2", "r2", "l3", "r3", "l_x", "l_y", "r_x", "r_y" }; - buf_tmp[0] = '\0'; + s1[0] = '\0'; + s2[0] = '\0'; - snprintf(buf_tmp, sizeof(buf_tmp), "input_player%u", i + 1); + snprintf(s1, sizeof(s1), "input_player%u", i + 1); + snprintf(s2, sizeof(s2), "input_player%u_key", i + 1); for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++) { - fill_pathname_join_delim(key_ident[j], buf_tmp, - key_strings[j], '_', sizeof(key_ident[j])); + fill_pathname_join_delim(key_ident[j], s1, + key_strings[j], '_', sizeof(key_ident[j])); + fill_pathname_join_delim(keymapper_ident[j], s2, + key_strings[j], '_', sizeof(key_ident[j])); /* only save values that have been modified */ if(j < RARCH_FIRST_CUSTOM_BIND) @@ -168,6 +199,10 @@ bool input_remapping_save_file(const char *path) config_set_int(conf, key_ident[j], settings->uints.input_remap_ids[i][j]); else config_unset(conf,key_ident[j]); + + if (settings->uints.keyboard_mapper_port == i && + settings->uints.input_keymapper_ids[j] != RETROK_UNKNOWN) + config_set_int(conf, keymapper_ident[j], settings->uints.input_keymapper_ids[j]); } else { @@ -177,10 +212,10 @@ bool input_remapping_save_file(const char *path) config_unset(conf,key_ident[j]); } } - snprintf(buf_tmp, sizeof(buf_tmp), "input_libretro_device_p%u", i + 1); - config_set_int(conf, buf_tmp, input_config_get_device(i)); - snprintf(buf_tmp, sizeof(buf_tmp), "input_player%u_analog_dpad_mode", i + 1); - config_set_int(conf, buf_tmp, settings->uints.input_analog_dpad_mode[i]); + snprintf(s1, sizeof(s1), "input_libretro_device_p%u", i + 1); + config_set_int(conf, s1, input_config_get_device(i)); + snprintf(s1, sizeof(s1), "input_player%u_analog_dpad_mode", i + 1); + config_set_int(conf, s1, settings->uints.input_analog_dpad_mode[i]); } ret = config_file_write(conf, remap_file); From 503658b446d0d66be4bc9b6ca1eb303f33b28b31 Mon Sep 17 00:00:00 2001 From: radius Date: Sat, 9 Sep 2017 17:28:20 -0500 Subject: [PATCH 05/14] cleanup --- input/input_mapper.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/input/input_mapper.c b/input/input_mapper.c index fd0c7a8754..b52834e978 100644 --- a/input/input_mapper.c +++ b/input/input_mapper.c @@ -97,10 +97,7 @@ void input_mapper_poll(input_mapper_t *handle) input_keyboard_event(true, settings->uints.input_keymapper_ids[i], 0, 0, RETRO_DEVICE_KEYBOARD); } else - { - input_keyboard_event(false, settings->uints.input_keymapper_ids[i], 0, 0, RETRO_DEVICE_KEYBOARD); - } - + input_keyboard_event(false, settings->uints.input_keymapper_ids[i], 0, 0, RETRO_DEVICE_KEYBOARD); } } } From b93417fbede88129ca91186529de7cc8c9c7c58d Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 10 Sep 2017 00:04:18 -0500 Subject: [PATCH 06/14] start implementing keymapper gui --- intl/msg_hash_us.h | 2 + menu/cbs/menu_cbs_get_value.c | 92 +++++++++++++++++++++ menu/menu_cbs.c | 145 ++++++++++++++++++++++++++++++++++ menu/menu_cbs.h | 10 +++ menu/menu_displaylist.c | 20 +++++ menu/menu_driver.h | 2 + msg_hash.h | 1 + 7 files changed, 272 insertions(+) diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index c26b80c888..13b5e8505c 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -1567,6 +1567,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_SLANG_SHADERS, "Update Slang Shaders") MSG_HASH(MENU_ENUM_LABEL_VALUE_USER, "User") +MSG_HASH(MENU_ENUM_LABEL_VALUE_KEYBOARD, + "Kbd") MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS, "User Interface") MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_LANGUAGE, diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index 5cbcba4dba..6a28343dde 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -39,6 +39,7 @@ #include "../../performance_counters.h" #include "../../paths.h" #include "../../retroarch.h" +#include "../../verbosity.h" #include "../../wifi/wifi_driver.h" #ifndef BIND_ACTION_GET_VALUE @@ -47,6 +48,8 @@ cbs->action_get_value_ident = #name; #endif +extern struct key_desc key_descriptors[192]; + static void menu_action_setting_disp_set_label_cheat_num_passes( file_list_t* list, unsigned *w, unsigned type, unsigned i, @@ -485,6 +488,89 @@ static void menu_action_setting_disp_set_label_input_desc( } +static void menu_action_setting_disp_set_label_input_desc_kbd( + file_list_t* list, + unsigned *w, unsigned type, unsigned i, + const char *label, + char *s, size_t len, + const char *entry_label, + const char *path, + char *s2, size_t len2) +{ + RARCH_LOG("%d %s\n", key_descriptors[10].id, key_descriptors[10].desc); + char descriptor[255]; + const struct retro_keybind *auto_bind = NULL; + const struct retro_keybind *keybind = NULL; + settings_t *settings = config_get_ptr(); + unsigned inp_desc_index_offset = + type - MENU_SETTINGS_INPUT_DESC_BEGIN; + unsigned inp_desc_user = inp_desc_index_offset / + (RARCH_FIRST_CUSTOM_BIND + 4); + unsigned inp_desc_button_index_offset = inp_desc_index_offset - + (inp_desc_user * (RARCH_FIRST_CUSTOM_BIND + 4)); + unsigned remap_id = 0; + + if (!settings) + return; + + descriptor[0] = '\0'; + + remap_id = settings->uints.input_remap_ids + [inp_desc_user][inp_desc_button_index_offset]; + + keybind = &input_config_binds[inp_desc_user][remap_id]; + auto_bind = (const struct retro_keybind*) + input_config_get_bind_auto(inp_desc_user, remap_id); + + input_config_get_bind_string(descriptor, + keybind, auto_bind, sizeof(descriptor)); + + if (inp_desc_button_index_offset < RARCH_FIRST_CUSTOM_BIND) + { + if(strstr(descriptor, "Auto") && !strstr(descriptor, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE))) + strlcpy(s, + descriptor, + len); + else + { + const struct retro_keybind *keyptr = &input_config_binds[inp_desc_user] + [remap_id]; + + strlcpy(s, msg_hash_to_str(keyptr->enum_idx), len); + } + } + + + + else + { + const char *str = NULL; + switch (remap_id) + { + case 0: + str = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X); + break; + case 1: + str = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y); + break; + case 2: + str = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X); + break; + case 3: + str = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y); + break; + } + + if (!string_is_empty(str)) + strlcpy(s, str, len); + } + + *w = 19; + strlcpy(s2, path, len2); +} + + static void menu_action_setting_disp_set_label_cheat( file_list_t* list, unsigned *w, unsigned type, unsigned i, @@ -1726,6 +1812,12 @@ static int menu_cbs_init_bind_get_string_representation_compare_type( BIND_ACTION_GET_VALUE(cbs, menu_action_setting_disp_set_label_libretro_perf_counters); } + else if (type >= MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + && type <= MENU_SETTINGS_INPUT_DESC_KBD_END) + { + BIND_ACTION_GET_VALUE(cbs, + menu_action_setting_disp_set_label_input_desc_kbd); + } else { switch (type) diff --git a/menu/menu_cbs.c b/menu/menu_cbs.c index 7c7005660e..a07fa8da0b 100644 --- a/menu/menu_cbs.c +++ b/menu/menu_cbs.c @@ -32,6 +32,151 @@ static void menu_cbs_init_log(const char *entry_label, const char *bind_label, c #endif } +struct key_desc key_descriptors[192] = +{ + {RETROK_FIRST , 0, "Unmapped"}, + {RETROK_BACKSPACE , 8, "Backspace"}, + {RETROK_TAB , 9, "Tab"}, + {RETROK_CLEAR , 12, "Clear"}, + {RETROK_RETURN , 13, "Return"}, + {RETROK_PAUSE , 19, "Pause"}, + {RETROK_ESCAPE , 27, "Escape"}, + {RETROK_SPACE , 32, "Space"}, + {RETROK_EXCLAIM , 33, "!"}, + {RETROK_QUOTEDBL , 34, "\""}, + {RETROK_HASH , 35, "#"}, + {RETROK_DOLLAR , 36, "$"}, + {RETROK_AMPERSAND , 38, "&"}, + {RETROK_QUOTE , 39, "\'"}, + {RETROK_LEFTPAREN , 40, ")"}, + {RETROK_RIGHTPAREN , 41, ")"}, + {RETROK_ASTERISK , 42, "*"}, + {RETROK_PLUS , 43, "+"}, + {RETROK_COMMA , 44, ","}, + {RETROK_MINUS , 45, "-"}, + {RETROK_PERIOD , 46, "."}, + {RETROK_SLASH , 47, "/"}, + {RETROK_0 , 48, "0"}, + {RETROK_1 , 49, "1"}, + {RETROK_2 , 50, "2"}, + {RETROK_3 , 51, "3"}, + {RETROK_4 , 52, "4"}, + {RETROK_5 , 53, "5"}, + {RETROK_6 , 54, "6"}, + {RETROK_7 , 55, "7"}, + {RETROK_8 , 56, "8"}, + {RETROK_9 , 57, "9"}, + {RETROK_COLON , 58, ":"}, + {RETROK_SEMICOLON , 59, ";"}, + {RETROK_LESS , 60, "-"}, + {RETROK_EQUALS , 61, "="}, + {RETROK_GREATER , 62, ">"}, + {RETROK_QUESTION , 63, "?"}, + {RETROK_AT , 64, "@"}, + {RETROK_LEFTBRACKET , 91, "["}, + {RETROK_BACKSLASH , 92, "\\"}, + {RETROK_RIGHTBRACKET , 93, "]"}, + {RETROK_CARET , 94, "^"}, + {RETROK_UNDERSCORE , 95, "_"}, + {RETROK_BACKQUOTE , 96, "`"}, + {RETROK_a , 97, "a"}, + {RETROK_b , 98, "b"}, + {RETROK_c , 99, "c"}, + {RETROK_d , 100, "d"}, + {RETROK_e , 101, "e"}, + {RETROK_f , 102, "f"}, + {RETROK_g , 103, "g"}, + {RETROK_h , 104, "h"}, + {RETROK_i , 105, "i"}, + {RETROK_j , 106, "j"}, + {RETROK_k , 107, "k"}, + {RETROK_l , 108, "l"}, + {RETROK_m , 109, "m"}, + {RETROK_n , 110, "n"}, + {RETROK_o , 111, "o"}, + {RETROK_p , 112, "p"}, + {RETROK_q , 113, "q"}, + {RETROK_r , 114, "r"}, + {RETROK_s , 115, "s"}, + {RETROK_t , 116, "t"}, + {RETROK_u , 117, "u"}, + {RETROK_v , 118, "v"}, + {RETROK_w , 119, "w"}, + {RETROK_x , 120, "x"}, + {RETROK_y , 121, "y"}, + {RETROK_z , 122, "z"}, + {RETROK_DELETE , 127, "Delete"}, + + {RETROK_KP0 , 256, "Numpad 0"}, + {RETROK_KP1 , 257, "Numpad 1"}, + {RETROK_KP2 , 258, "Numpad 2"}, + {RETROK_KP3 , 259, "Numpad 3"}, + {RETROK_KP4 , 260, "Numpad 4"}, + {RETROK_KP5 , 261, "Numpad 5"}, + {RETROK_KP6 , 262, "Numpad 6"}, + {RETROK_KP7 , 263, "Numpad 7"}, + {RETROK_KP8 , 264, "Numpad 8"}, + {RETROK_KP9 , 265, "Numpad 9"}, + {RETROK_KP_PERIOD , 266, "Numpad ."}, + {RETROK_KP_DIVIDE , 267, "Numpad /"}, + {RETROK_KP_MULTIPLY , 268, "Numpad *"}, + {RETROK_KP_MINUS , 269, "Numpad -"}, + {RETROK_KP_PLUS , 270, "Numpad +"}, + {RETROK_KP_ENTER , 271, "Numpad Enter"}, + {RETROK_KP_EQUALS , 272, "Numpad ="}, + + {RETROK_UP , 273, "Up"}, + {RETROK_DOWN , 274, "Down"}, + {RETROK_RIGHT , 275, "Right"}, + {RETROK_LEFT , 276, "Left"}, + {RETROK_INSERT , 277, "Insert"}, + {RETROK_HOME , 278, "Home"}, + {RETROK_END , 279, "End"}, + {RETROK_PAGEUP , 280, "Page Up"}, + {RETROK_PAGEDOWN , 281, "Page Down"}, + + {RETROK_F1 , 282, "F1"}, + {RETROK_F2 , 283, "F2"}, + {RETROK_F3 , 284, "F3"}, + {RETROK_F4 , 285, "F4"}, + {RETROK_F5 , 286, "F5"}, + {RETROK_F6 , 287, "F6"}, + {RETROK_F7 , 288, "F7"}, + {RETROK_F8 , 289, "F8"}, + {RETROK_F9 , 290, "F9"}, + {RETROK_F10 , 291, "F10"}, + {RETROK_F11 , 292, "F11"}, + {RETROK_F12 , 293, "F12"}, + {RETROK_F13 , 294, "F13"}, + {RETROK_F14 , 295, "F14"}, + {RETROK_F15 , 296, "F15"}, + + {RETROK_NUMLOCK , 300, "Num Lock"}, + {RETROK_CAPSLOCK , 301, "Caps Lock"}, + {RETROK_SCROLLOCK , 302, "Scroll Lock"}, + {RETROK_RSHIFT , 303, "Right Shift"}, + {RETROK_LSHIFT , 304, "Left Shift"}, + {RETROK_RCTRL , 305, "Right Control"}, + {RETROK_LCTRL , 306, "Left Control"}, + {RETROK_RALT , 307, "Right Alt"}, + {RETROK_LALT , 308, "Left Alt"}, + {RETROK_RMETA , 309, "Right Meta"}, + {RETROK_LMETA , 310, "Left Meta"}, + {RETROK_LSUPER , 311, "Right Super"}, + {RETROK_RSUPER , 312, "Left Super"}, + {RETROK_MODE , 313, "Mode"}, + {RETROK_COMPOSE , 314, "Compose"}, + + {RETROK_HELP , 315, "Help"}, + {RETROK_PRINT , 316, "Print"}, + {RETROK_SYSREQ , 317, "Sys Req"}, + {RETROK_BREAK , 318, "Break"}, + {RETROK_MENU , 319, "Menu"}, + {RETROK_POWER , 320, "Power"}, + {RETROK_EURO , 321, "€"}, + {RETROK_UNDO , 322, "Undo"} +}; + /* This sets up all the callback functions for a menu entry. * * OK : When we press the 'OK' button on an entry. diff --git a/menu/menu_cbs.h b/menu/menu_cbs.h index bf83ea49de..02a8f7a662 100644 --- a/menu/menu_cbs.h +++ b/menu/menu_cbs.h @@ -27,6 +27,16 @@ RETRO_BEGIN_DECLS +typedef struct key_desc +{ + /* key id */ + unsigned id; + /* libretro key id */ + unsigned key; + /* description */ + char desc[32]; +} key_desc_t; + enum { ACTION_OK_DL_DEFAULT = 0, diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 98db4e88d4..b20fb9aae6 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -62,6 +62,7 @@ #include "../configuration.h" #include "../file_path_special.h" #include "../defaults.h" +#include "../verbosity.h" #include "../managers/cheat_manager.h" #include "../managers/core_option_manager.h" #include "../paths.h" @@ -3503,6 +3504,25 @@ static int menu_displaylist_parse_options_remappings( } } } + if (system) + { + settings_t *settings = config_get_ptr(); + for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND; retro_id++) + { + char desc_label[64]; + unsigned user = settings->uints.keyboard_mapper_port + 1; + unsigned desc_offset = retro_id; + const char *description = NULL; + + desc_label[0] = '\0'; + + snprintf(desc_label, sizeof(desc_label), + "%s: ", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B + retro_id)); + menu_entries_append_enum(info->list, desc_label, "", + MSG_UNKNOWN, + MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + retro_id, 0, 0); + } + } return 0; } diff --git a/menu/menu_driver.h b/menu/menu_driver.h index e372230de3..922f7f9b26 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -206,6 +206,8 @@ enum menu_settings_type MENU_SETTINGS_CHEAT_END = MENU_SETTINGS_CHEAT_BEGIN + (MAX_CHEAT_COUNTERS - 1), MENU_SETTINGS_INPUT_DESC_BEGIN, MENU_SETTINGS_INPUT_DESC_END = MENU_SETTINGS_INPUT_DESC_BEGIN + (MAX_USERS * (RARCH_FIRST_CUSTOM_BIND + 4)), + MENU_SETTINGS_INPUT_DESC_KBD_BEGIN, + MENU_SETTINGS_INPUT_DESC_KBD_END = MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + 191, MENU_SETTINGS_LAST }; diff --git a/msg_hash.h b/msg_hash.h index 67107195cb..a10d840577 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -927,6 +927,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_NEAREST, MENU_ENUM_LABEL_VALUE_UNKNOWN, MENU_ENUM_LABEL_VALUE_USER, + MENU_ENUM_LABEL_VALUE_KEYBOARD, MENU_ENUM_LABEL_VALUE_CHEAT, MENU_ENUM_LABEL_VALUE_SHADER, MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT, From c8752ec630a6b9939587bce098ddf81170607af3 Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 10 Sep 2017 11:30:10 -0500 Subject: [PATCH 07/14] add left/right callbacks --- input/input_mapper.c | 2 +- menu/cbs/menu_cbs_get_value.c | 74 ++------- menu/cbs/menu_cbs_left.c | 36 +++++ menu/cbs/menu_cbs_right.c | 59 ++++++-- menu/menu_cbs.c | 274 +++++++++++++++++----------------- menu/menu_cbs.h | 5 +- menu/menu_driver.h | 2 +- 7 files changed, 236 insertions(+), 216 deletions(-) diff --git a/input/input_mapper.c b/input/input_mapper.c index b52834e978..3c7660379f 100644 --- a/input/input_mapper.c +++ b/input/input_mapper.c @@ -91,7 +91,7 @@ void input_mapper_poll(input_mapper_t *handle) { if(i < RETROK_LAST) { - if (input_state(0, RETRO_DEVICE_JOYPAD, handle->port, i)) + if (input_state(handle->port, RETRO_DEVICE_JOYPAD, 0, i)) { MAPPER_SET_KEY (handle, settings->uints.input_keymapper_ids[i]); input_keyboard_event(true, settings->uints.input_keymapper_ids[i], 0, 0, RETRO_DEVICE_KEYBOARD); diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index 6a28343dde..be5ac4f9e0 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -48,7 +48,7 @@ cbs->action_get_value_ident = #name; #endif -extern struct key_desc key_descriptors[192]; +extern struct key_desc key_descriptors[MENU_SETTINGS_INPUT_DESC_KBD_END]; static void menu_action_setting_disp_set_label_cheat_num_passes( file_list_t* list, @@ -497,74 +497,22 @@ static void menu_action_setting_disp_set_label_input_desc_kbd( const char *path, char *s2, size_t len2) { - RARCH_LOG("%d %s\n", key_descriptors[10].id, key_descriptors[10].desc); - char descriptor[255]; - const struct retro_keybind *auto_bind = NULL; - const struct retro_keybind *keybind = NULL; - settings_t *settings = config_get_ptr(); - unsigned inp_desc_index_offset = - type - MENU_SETTINGS_INPUT_DESC_BEGIN; - unsigned inp_desc_user = inp_desc_index_offset / - (RARCH_FIRST_CUSTOM_BIND + 4); - unsigned inp_desc_button_index_offset = inp_desc_index_offset - - (inp_desc_user * (RARCH_FIRST_CUSTOM_BIND + 4)); - unsigned remap_id = 0; + settings_t *settings = config_get_ptr(); + unsigned key_id; + unsigned remap_id = + settings->uints.input_keymapper_ids[type - MENU_SETTINGS_INPUT_DESC_KBD_BEGIN]; + char desc[PATH_MAX_LENGTH]; if (!settings) return; - descriptor[0] = '\0'; - - remap_id = settings->uints.input_remap_ids - [inp_desc_user][inp_desc_button_index_offset]; - - keybind = &input_config_binds[inp_desc_user][remap_id]; - auto_bind = (const struct retro_keybind*) - input_config_get_bind_auto(inp_desc_user, remap_id); - - input_config_get_bind_string(descriptor, - keybind, auto_bind, sizeof(descriptor)); - - if (inp_desc_button_index_offset < RARCH_FIRST_CUSTOM_BIND) + for (key_id = 0; key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - 1; key_id++) { - if(strstr(descriptor, "Auto") && !strstr(descriptor, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE))) - strlcpy(s, - descriptor, - len); - else - { - const struct retro_keybind *keyptr = &input_config_binds[inp_desc_user] - [remap_id]; - - strlcpy(s, msg_hash_to_str(keyptr->enum_idx), len); - } - } - - - - else - { - const char *str = NULL; - switch (remap_id) - { - case 0: - str = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X); - break; - case 1: - str = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y); - break; - case 2: - str = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X); - break; - case 3: - str = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y); - break; - } - - if (!string_is_empty(str)) - strlcpy(s, str, len); + if(remap_id == key_descriptors[key_id].key) + break; } + snprintf(desc, sizeof(desc), "Keyboard %s", key_descriptors[key_id].desc); + strlcpy(s, desc, len); *w = 19; strlcpy(s2, path, len2); diff --git a/menu/cbs/menu_cbs_left.c b/menu/cbs/menu_cbs_left.c index 85da1b8e5f..decd74bd45 100644 --- a/menu/cbs/menu_cbs_left.c +++ b/menu/cbs/menu_cbs_left.c @@ -46,6 +46,8 @@ } while(0) #endif +extern struct key_desc key_descriptors[MENU_SETTINGS_INPUT_DESC_KBD_END]; + #ifdef HAVE_SHADER_MANAGER static int generic_shader_action_parameter_left( struct video_shader_parameter *param, @@ -111,6 +113,35 @@ static int action_left_input_desc(unsigned type, const char *label, return 0; } +static int action_left_input_desc_kbd(unsigned type, const char *label, + bool wraparound) +{ + settings_t *settings = config_get_ptr(); + unsigned key_id; + unsigned offset = type - MENU_SETTINGS_INPUT_DESC_KBD_BEGIN; + unsigned remap_id = + settings->uints.input_keymapper_ids[offset]; + char desc[PATH_MAX_LENGTH]; + + if (!settings) + return 0; + + for (key_id = 0; key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - 1; key_id++) + { + if(remap_id == key_descriptors[key_id].key) + break; + } + + if (key_id > 1) + key_id--; + else + key_id = MENU_SETTINGS_INPUT_DESC_KBD_END - 1; + + settings->uints.input_keymapper_ids[offset] = key_descriptors[key_id].key; + + return 0; +} + static int action_left_scroll(unsigned type, const char *label, bool wraparound) { @@ -538,6 +569,11 @@ static int menu_cbs_init_bind_left_compare_type(menu_file_list_cbs_t *cbs, { BIND_ACTION_LEFT(cbs, action_left_input_desc); } + else if (type >= MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + && type <= MENU_SETTINGS_INPUT_DESC_KBD_END) + { + BIND_ACTION_LEFT(cbs, action_left_input_desc_kbd); + } else if ((type >= MENU_SETTINGS_PLAYLIST_ASSOCIATION_START)) { BIND_ACTION_LEFT(cbs, playlist_association_left); diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c index f982745235..fbd690e446 100644 --- a/menu/cbs/menu_cbs_right.c +++ b/menu/cbs/menu_cbs_right.c @@ -37,6 +37,7 @@ #include "../../managers/cheat_manager.h" #include "../../file_path_special.h" #include "../../retroarch.h" +#include "../../verbosity.h" #include "../../ui/ui_companion_driver.h" #ifndef BIND_ACTION_RIGHT @@ -47,6 +48,8 @@ } while(0) #endif +extern struct key_desc key_descriptors[MENU_SETTINGS_INPUT_DESC_KBD_END]; + #ifdef HAVE_SHADER_MANAGER static int generic_shader_action_parameter_right(struct video_shader_parameter *param, unsigned type, const char *label, bool wraparound) @@ -99,28 +102,57 @@ int action_right_cheat(unsigned type, const char *label, wraparound); } -int action_right_input_desc(unsigned type, const char *label, +int action_right_input_desc_kbd(unsigned type, const char *label, bool wraparound) { - unsigned inp_desc_index_offset = type - MENU_SETTINGS_INPUT_DESC_BEGIN; - unsigned inp_desc_user = inp_desc_index_offset / (RARCH_FIRST_CUSTOM_BIND + 4); - unsigned inp_desc_button_index_offset = inp_desc_index_offset - (inp_desc_user * (RARCH_FIRST_CUSTOM_BIND + 4)); settings_t *settings = config_get_ptr(); + unsigned key_id; + unsigned offset = type - MENU_SETTINGS_INPUT_DESC_KBD_BEGIN; + unsigned remap_id = + settings->uints.input_keymapper_ids[offset]; + char desc[PATH_MAX_LENGTH]; - if (inp_desc_button_index_offset < RARCH_FIRST_CUSTOM_BIND) + if (!settings) + return 0; + + for (key_id = 0; key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - 1; key_id++) { - if (settings->uints.input_remap_ids[inp_desc_user][inp_desc_button_index_offset] < RARCH_FIRST_CUSTOM_BIND - 1) - settings->uints.input_remap_ids[inp_desc_user][inp_desc_button_index_offset]++; + if(remap_id == key_descriptors[key_id].key) + break; } + + if (key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - 1) + key_id++; else - { - if (settings->uints.input_remap_ids[inp_desc_user][inp_desc_button_index_offset] < 4 - 1) - settings->uints.input_remap_ids[inp_desc_user][inp_desc_button_index_offset]++; - } + key_id = 0; + + settings->uints.input_keymapper_ids[offset] = key_descriptors[key_id].key; return 0; } +int action_right_input_desc(unsigned type, const char *label, + bool wraparound) +{ +unsigned inp_desc_index_offset = type - MENU_SETTINGS_INPUT_DESC_BEGIN; +unsigned inp_desc_user = inp_desc_index_offset / (RARCH_FIRST_CUSTOM_BIND + 4); +unsigned inp_desc_button_index_offset = inp_desc_index_offset - (inp_desc_user * (RARCH_FIRST_CUSTOM_BIND + 4)); +settings_t *settings = config_get_ptr(); + +if (inp_desc_button_index_offset < RARCH_FIRST_CUSTOM_BIND) +{ + if (settings->uints.input_remap_ids[inp_desc_user][inp_desc_button_index_offset] < RARCH_FIRST_CUSTOM_BIND - 1) + settings->uints.input_remap_ids[inp_desc_user][inp_desc_button_index_offset]++; +} +else +{ + if (settings->uints.input_remap_ids[inp_desc_user][inp_desc_button_index_offset] < 4 - 1) + settings->uints.input_remap_ids[inp_desc_user][inp_desc_button_index_offset]++; +} + +return 0; +} + static int action_right_scroll(unsigned type, const char *label, bool wraparound) { @@ -406,6 +438,11 @@ static int menu_cbs_init_bind_right_compare_type(menu_file_list_cbs_t *cbs, { BIND_ACTION_RIGHT(cbs, action_right_input_desc); } + else if (type >= MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + && type <= MENU_SETTINGS_INPUT_DESC_KBD_END) + { + BIND_ACTION_RIGHT(cbs, action_right_input_desc_kbd); + } else if ((type >= MENU_SETTINGS_PLAYLIST_ASSOCIATION_START)) { BIND_ACTION_RIGHT(cbs, playlist_association_right); diff --git a/menu/menu_cbs.c b/menu/menu_cbs.c index a07fa8da0b..44ccd559fa 100644 --- a/menu/menu_cbs.c +++ b/menu/menu_cbs.c @@ -32,149 +32,149 @@ static void menu_cbs_init_log(const char *entry_label, const char *bind_label, c #endif } -struct key_desc key_descriptors[192] = +struct key_desc key_descriptors[MENU_SETTINGS_INPUT_DESC_KBD_END] = { - {RETROK_FIRST , 0, "Unmapped"}, - {RETROK_BACKSPACE , 8, "Backspace"}, - {RETROK_TAB , 9, "Tab"}, - {RETROK_CLEAR , 12, "Clear"}, - {RETROK_RETURN , 13, "Return"}, - {RETROK_PAUSE , 19, "Pause"}, - {RETROK_ESCAPE , 27, "Escape"}, - {RETROK_SPACE , 32, "Space"}, - {RETROK_EXCLAIM , 33, "!"}, - {RETROK_QUOTEDBL , 34, "\""}, - {RETROK_HASH , 35, "#"}, - {RETROK_DOLLAR , 36, "$"}, - {RETROK_AMPERSAND , 38, "&"}, - {RETROK_QUOTE , 39, "\'"}, - {RETROK_LEFTPAREN , 40, ")"}, - {RETROK_RIGHTPAREN , 41, ")"}, - {RETROK_ASTERISK , 42, "*"}, - {RETROK_PLUS , 43, "+"}, - {RETROK_COMMA , 44, ","}, - {RETROK_MINUS , 45, "-"}, - {RETROK_PERIOD , 46, "."}, - {RETROK_SLASH , 47, "/"}, - {RETROK_0 , 48, "0"}, - {RETROK_1 , 49, "1"}, - {RETROK_2 , 50, "2"}, - {RETROK_3 , 51, "3"}, - {RETROK_4 , 52, "4"}, - {RETROK_5 , 53, "5"}, - {RETROK_6 , 54, "6"}, - {RETROK_7 , 55, "7"}, - {RETROK_8 , 56, "8"}, - {RETROK_9 , 57, "9"}, - {RETROK_COLON , 58, ":"}, - {RETROK_SEMICOLON , 59, ";"}, - {RETROK_LESS , 60, "-"}, - {RETROK_EQUALS , 61, "="}, - {RETROK_GREATER , 62, ">"}, - {RETROK_QUESTION , 63, "?"}, - {RETROK_AT , 64, "@"}, - {RETROK_LEFTBRACKET , 91, "["}, - {RETROK_BACKSLASH , 92, "\\"}, - {RETROK_RIGHTBRACKET , 93, "]"}, - {RETROK_CARET , 94, "^"}, - {RETROK_UNDERSCORE , 95, "_"}, - {RETROK_BACKQUOTE , 96, "`"}, - {RETROK_a , 97, "a"}, - {RETROK_b , 98, "b"}, - {RETROK_c , 99, "c"}, - {RETROK_d , 100, "d"}, - {RETROK_e , 101, "e"}, - {RETROK_f , 102, "f"}, - {RETROK_g , 103, "g"}, - {RETROK_h , 104, "h"}, - {RETROK_i , 105, "i"}, - {RETROK_j , 106, "j"}, - {RETROK_k , 107, "k"}, - {RETROK_l , 108, "l"}, - {RETROK_m , 109, "m"}, - {RETROK_n , 110, "n"}, - {RETROK_o , 111, "o"}, - {RETROK_p , 112, "p"}, - {RETROK_q , 113, "q"}, - {RETROK_r , 114, "r"}, - {RETROK_s , 115, "s"}, - {RETROK_t , 116, "t"}, - {RETROK_u , 117, "u"}, - {RETROK_v , 118, "v"}, - {RETROK_w , 119, "w"}, - {RETROK_x , 120, "x"}, - {RETROK_y , 121, "y"}, - {RETROK_z , 122, "z"}, - {RETROK_DELETE , 127, "Delete"}, + {RETROK_FIRST, "Unmapped"}, + {RETROK_BACKSPACE, "Backspace"}, + {RETROK_TAB, "Tab"}, + {RETROK_CLEAR, "Clear"}, + {RETROK_RETURN, "Return"}, + {RETROK_PAUSE, "Pause"}, + {RETROK_ESCAPE, "Escape"}, + {RETROK_SPACE, "Space"}, + {RETROK_EXCLAIM, "!"}, + {RETROK_QUOTEDBL, "\""}, + {RETROK_HASH, "#"}, + {RETROK_DOLLAR, "$"}, + {RETROK_AMPERSAND, "&"}, + {RETROK_QUOTE, "\'"}, + {RETROK_LEFTPAREN, "("}, + {RETROK_RIGHTPAREN, ")"}, + {RETROK_ASTERISK, "*"}, + {RETROK_PLUS, "+"}, + {RETROK_COMMA, ","}, + {RETROK_MINUS, "-"}, + {RETROK_PERIOD, "."}, + {RETROK_SLASH, "/"}, + {RETROK_0, "0"}, + {RETROK_1, "1"}, + {RETROK_2, "2"}, + {RETROK_3, "3"}, + {RETROK_4, "4"}, + {RETROK_5, "5"}, + {RETROK_6, "6"}, + {RETROK_7, "7"}, + {RETROK_8, "8"}, + {RETROK_9, "9"}, + {RETROK_COLON, ":"}, + {RETROK_SEMICOLON, ";"}, + {RETROK_LESS, "-"}, + {RETROK_EQUALS, "="}, + {RETROK_GREATER, ">"}, + {RETROK_QUESTION, "?"}, + {RETROK_AT, "@"}, + {RETROK_LEFTBRACKET, "["}, + {RETROK_BACKSLASH, "\\"}, + {RETROK_RIGHTBRACKET, "]"}, + {RETROK_CARET, "^"}, + {RETROK_UNDERSCORE, "_"}, + {RETROK_BACKQUOTE, "`"}, + {RETROK_a, "a"}, + {RETROK_b, "b"}, + {RETROK_c, "c"}, + {RETROK_d, "d"}, + {RETROK_e, "e"}, + {RETROK_f, "f"}, + {RETROK_g, "g"}, + {RETROK_h, "h"}, + {RETROK_i, "i"}, + {RETROK_j, "j"}, + {RETROK_k, "k"}, + {RETROK_l, "l"}, + {RETROK_m, "m"}, + {RETROK_n, "n"}, + {RETROK_o, "o"}, + {RETROK_p, "p"}, + {RETROK_q, "q"}, + {RETROK_r, "r"}, + {RETROK_s, "s"}, + {RETROK_t, "t"}, + {RETROK_u, "u"}, + {RETROK_v, "v"}, + {RETROK_w, "w"}, + {RETROK_x, "x"}, + {RETROK_y, "y"}, + {RETROK_z, "z"}, + {RETROK_DELETE, "Delete"}, - {RETROK_KP0 , 256, "Numpad 0"}, - {RETROK_KP1 , 257, "Numpad 1"}, - {RETROK_KP2 , 258, "Numpad 2"}, - {RETROK_KP3 , 259, "Numpad 3"}, - {RETROK_KP4 , 260, "Numpad 4"}, - {RETROK_KP5 , 261, "Numpad 5"}, - {RETROK_KP6 , 262, "Numpad 6"}, - {RETROK_KP7 , 263, "Numpad 7"}, - {RETROK_KP8 , 264, "Numpad 8"}, - {RETROK_KP9 , 265, "Numpad 9"}, - {RETROK_KP_PERIOD , 266, "Numpad ."}, - {RETROK_KP_DIVIDE , 267, "Numpad /"}, - {RETROK_KP_MULTIPLY , 268, "Numpad *"}, - {RETROK_KP_MINUS , 269, "Numpad -"}, - {RETROK_KP_PLUS , 270, "Numpad +"}, - {RETROK_KP_ENTER , 271, "Numpad Enter"}, - {RETROK_KP_EQUALS , 272, "Numpad ="}, + {RETROK_KP0, "Numpad 0"}, + {RETROK_KP1, "Numpad 1"}, + {RETROK_KP2, "Numpad 2"}, + {RETROK_KP3, "Numpad 3"}, + {RETROK_KP4, "Numpad 4"}, + {RETROK_KP5, "Numpad 5"}, + {RETROK_KP6, "Numpad 6"}, + {RETROK_KP7, "Numpad 7"}, + {RETROK_KP8, "Numpad 8"}, + {RETROK_KP9, "Numpad 9"}, + {RETROK_KP_PERIOD, "Numpad ."}, + {RETROK_KP_DIVIDE, "Numpad /"}, + {RETROK_KP_MULTIPLY, "Numpad *"}, + {RETROK_KP_MINUS, "Numpad -"}, + {RETROK_KP_PLUS, "Numpad +"}, + {RETROK_KP_ENTER, "Numpad Enter"}, + {RETROK_KP_EQUALS, "Numpad ="}, - {RETROK_UP , 273, "Up"}, - {RETROK_DOWN , 274, "Down"}, - {RETROK_RIGHT , 275, "Right"}, - {RETROK_LEFT , 276, "Left"}, - {RETROK_INSERT , 277, "Insert"}, - {RETROK_HOME , 278, "Home"}, - {RETROK_END , 279, "End"}, - {RETROK_PAGEUP , 280, "Page Up"}, - {RETROK_PAGEDOWN , 281, "Page Down"}, + {RETROK_UP, "Up"}, + {RETROK_DOWN, "Down"}, + {RETROK_RIGHT, "Right"}, + {RETROK_LEFT, "Left"}, + {RETROK_INSERT, "Insert"}, + {RETROK_HOME, "Home"}, + {RETROK_END, "End"}, + {RETROK_PAGEUP, "Page Up"}, + {RETROK_PAGEDOWN, "Page Down"}, - {RETROK_F1 , 282, "F1"}, - {RETROK_F2 , 283, "F2"}, - {RETROK_F3 , 284, "F3"}, - {RETROK_F4 , 285, "F4"}, - {RETROK_F5 , 286, "F5"}, - {RETROK_F6 , 287, "F6"}, - {RETROK_F7 , 288, "F7"}, - {RETROK_F8 , 289, "F8"}, - {RETROK_F9 , 290, "F9"}, - {RETROK_F10 , 291, "F10"}, - {RETROK_F11 , 292, "F11"}, - {RETROK_F12 , 293, "F12"}, - {RETROK_F13 , 294, "F13"}, - {RETROK_F14 , 295, "F14"}, - {RETROK_F15 , 296, "F15"}, + {RETROK_F1, "F1"}, + {RETROK_F2, "F2"}, + {RETROK_F3, "F3"}, + {RETROK_F4, "F4"}, + {RETROK_F5, "F5"}, + {RETROK_F6, "F6"}, + {RETROK_F7, "F7"}, + {RETROK_F8, "F8"}, + {RETROK_F9, "F9"}, + {RETROK_F10, "F10"}, + {RETROK_F11, "F11"}, + {RETROK_F12, "F12"}, + {RETROK_F13, "F13"}, + {RETROK_F14, "F14"}, + {RETROK_F15, "F15"}, - {RETROK_NUMLOCK , 300, "Num Lock"}, - {RETROK_CAPSLOCK , 301, "Caps Lock"}, - {RETROK_SCROLLOCK , 302, "Scroll Lock"}, - {RETROK_RSHIFT , 303, "Right Shift"}, - {RETROK_LSHIFT , 304, "Left Shift"}, - {RETROK_RCTRL , 305, "Right Control"}, - {RETROK_LCTRL , 306, "Left Control"}, - {RETROK_RALT , 307, "Right Alt"}, - {RETROK_LALT , 308, "Left Alt"}, - {RETROK_RMETA , 309, "Right Meta"}, - {RETROK_LMETA , 310, "Left Meta"}, - {RETROK_LSUPER , 311, "Right Super"}, - {RETROK_RSUPER , 312, "Left Super"}, - {RETROK_MODE , 313, "Mode"}, - {RETROK_COMPOSE , 314, "Compose"}, + {RETROK_NUMLOCK, "Num Lock"}, + {RETROK_CAPSLOCK, "Caps Lock"}, + {RETROK_SCROLLOCK, "Scroll Lock"}, + {RETROK_RSHIFT, "Right Shift"}, + {RETROK_LSHIFT, "Left Shift"}, + {RETROK_RCTRL, "Right Control"}, + {RETROK_LCTRL, "Left Control"}, + {RETROK_RALT, "Right Alt"}, + {RETROK_LALT, "Left Alt"}, + {RETROK_RMETA, "Right Meta"}, + {RETROK_LMETA, "Left Meta"}, + {RETROK_LSUPER, "Right Super"}, + {RETROK_RSUPER, "Left Super"}, + {RETROK_MODE, "Mode"}, + {RETROK_COMPOSE, "Compose"}, - {RETROK_HELP , 315, "Help"}, - {RETROK_PRINT , 316, "Print"}, - {RETROK_SYSREQ , 317, "Sys Req"}, - {RETROK_BREAK , 318, "Break"}, - {RETROK_MENU , 319, "Menu"}, - {RETROK_POWER , 320, "Power"}, - {RETROK_EURO , 321, "€"}, - {RETROK_UNDO , 322, "Undo"} + {RETROK_HELP, "Help"}, + {RETROK_PRINT, "Print"}, + {RETROK_SYSREQ, "Sys Req"}, + {RETROK_BREAK, "Break"}, + {RETROK_MENU, "Menu"}, + {RETROK_POWER, "Power"}, + {RETROK_EURO, "€"}, + {RETROK_UNDO, "Undo"} }; /* This sets up all the callback functions for a menu entry. diff --git a/menu/menu_cbs.h b/menu/menu_cbs.h index 02a8f7a662..261581f7da 100644 --- a/menu/menu_cbs.h +++ b/menu/menu_cbs.h @@ -29,12 +29,11 @@ RETRO_BEGIN_DECLS typedef struct key_desc { - /* key id */ - unsigned id; /* libretro key id */ unsigned key; + /* description */ - char desc[32]; + char desc[32]; } key_desc_t; enum diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 922f7f9b26..2e22806b44 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -207,7 +207,7 @@ enum menu_settings_type MENU_SETTINGS_INPUT_DESC_BEGIN, MENU_SETTINGS_INPUT_DESC_END = MENU_SETTINGS_INPUT_DESC_BEGIN + (MAX_USERS * (RARCH_FIRST_CUSTOM_BIND + 4)), MENU_SETTINGS_INPUT_DESC_KBD_BEGIN, - MENU_SETTINGS_INPUT_DESC_KBD_END = MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + 191, + MENU_SETTINGS_INPUT_DESC_KBD_END = MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + 136, MENU_SETTINGS_LAST }; From 3c9651ace0fc6e6429b6eee36bcd6d4b07b929da Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 10 Sep 2017 11:44:16 -0500 Subject: [PATCH 08/14] fix wrapping --- menu/cbs/menu_cbs_get_value.c | 2 +- menu/cbs/menu_cbs_left.c | 6 +++--- menu/cbs/menu_cbs_right.c | 4 ++-- menu/cbs/menu_cbs_select.c | 11 +++++++++++ menu/menu_driver.h | 2 +- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index be5ac4f9e0..c86d49e6eb 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -506,7 +506,7 @@ static void menu_action_setting_disp_set_label_input_desc_kbd( if (!settings) return; - for (key_id = 0; key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - 1; key_id++) + for (key_id = 0; key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - MENU_SETTINGS_INPUT_DESC_KBD_BEGIN; key_id++) { if(remap_id == key_descriptors[key_id].key) break; diff --git a/menu/cbs/menu_cbs_left.c b/menu/cbs/menu_cbs_left.c index decd74bd45..72d3437b0d 100644 --- a/menu/cbs/menu_cbs_left.c +++ b/menu/cbs/menu_cbs_left.c @@ -126,16 +126,16 @@ static int action_left_input_desc_kbd(unsigned type, const char *label, if (!settings) return 0; - for (key_id = 0; key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - 1; key_id++) + for (key_id = 0; key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - MENU_SETTINGS_INPUT_DESC_KBD_BEGIN; key_id++) { if(remap_id == key_descriptors[key_id].key) break; } - if (key_id > 1) + if (key_id > 0) key_id--; else - key_id = MENU_SETTINGS_INPUT_DESC_KBD_END - 1; + key_id = MENU_SETTINGS_INPUT_DESC_KBD_END - MENU_SETTINGS_INPUT_DESC_KBD_BEGIN; settings->uints.input_keymapper_ids[offset] = key_descriptors[key_id].key; diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c index fbd690e446..9ee53c15d9 100644 --- a/menu/cbs/menu_cbs_right.c +++ b/menu/cbs/menu_cbs_right.c @@ -115,13 +115,13 @@ int action_right_input_desc_kbd(unsigned type, const char *label, if (!settings) return 0; - for (key_id = 0; key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - 1; key_id++) + for (key_id = 0; key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - MENU_SETTINGS_INPUT_DESC_KBD_BEGIN; key_id++) { if(remap_id == key_descriptors[key_id].key) break; } - if (key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - 1) + if (key_id < MENU_SETTINGS_INPUT_DESC_KBD_END - MENU_SETTINGS_INPUT_DESC_KBD_BEGIN) key_id++; else key_id = 0; diff --git a/menu/cbs/menu_cbs_select.c b/menu/cbs/menu_cbs_select.c index 0d1499b65a..cb1f1bf99d 100644 --- a/menu/cbs/menu_cbs_select.c +++ b/menu/cbs/menu_cbs_select.c @@ -145,6 +145,12 @@ static int action_select_input_desc(const char *path, const char *label, unsigne return action_right_input_desc(type, label, true); } +static int action_select_input_desc_kbd(const char *path, const char *label, unsigned type, + size_t idx) +{ + return action_right_input_desc_kbd(type, label, true); +} + static int menu_cbs_init_bind_select_compare_type( menu_file_list_cbs_t *cbs, unsigned type) { @@ -170,6 +176,11 @@ static int menu_cbs_init_bind_select_compare_type( { BIND_ACTION_SELECT(cbs, action_select_input_desc); } + else if (type >= MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + && type <= MENU_SETTINGS_INPUT_DESC_KBD_END) + { + BIND_ACTION_SELECT(cbs, action_select_input_desc_kbd); + } else { switch (type) diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 2e22806b44..7910a89396 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -207,7 +207,7 @@ enum menu_settings_type MENU_SETTINGS_INPUT_DESC_BEGIN, MENU_SETTINGS_INPUT_DESC_END = MENU_SETTINGS_INPUT_DESC_BEGIN + (MAX_USERS * (RARCH_FIRST_CUSTOM_BIND + 4)), MENU_SETTINGS_INPUT_DESC_KBD_BEGIN, - MENU_SETTINGS_INPUT_DESC_KBD_END = MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + 136, + MENU_SETTINGS_INPUT_DESC_KBD_END = MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + 135, MENU_SETTINGS_LAST }; From 9abbf47a8d11e615308de6f2557e10754b35215a Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 10 Sep 2017 11:57:07 -0500 Subject: [PATCH 09/14] fix defaults --- configuration.c | 4 ++-- configuration.h | 4 ++-- input/input_driver.c | 4 ++-- input/input_remapping.c | 4 ++-- menu/menu_displaylist.c | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/configuration.c b/configuration.c index bb85056ac6..8465bb3c85 100644 --- a/configuration.c +++ b/configuration.c @@ -1242,7 +1242,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings, SETTING_BOOL("network_remote_enable", &settings->bools.network_remote_enable, false, false /* TODO */, false); #endif #ifdef HAVE_KEYMAPPER - SETTING_BOOL("keyboard_mapper_enable", &settings->bools.keyboard_mapper_enable, false, false /* TODO */, false); + SETTING_BOOL("keymapper_enable", &settings->bools.keymapper_enable, true, true /* TODO */, false); #endif #ifdef HAVE_NETWORKING SETTING_BOOL("netplay_nat_traversal", &settings->bools.netplay_nat_traversal, true, true, false); @@ -1347,7 +1347,7 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings, SETTING_UINT("network_remote_base_port", &settings->uints.network_remote_base_port, true, network_remote_base_port, false); #endif #ifdef HAVE_KEYMAPPER - SETTING_UINT("keyboard_mapper_port", &settings->uints.keyboard_mapper_port, true, network_remote_base_port, false); + SETTING_UINT("keymapper_port", &settings->uints.keymapper_port, true, 0, false); #endif #ifdef GEKKO SETTING_UINT("video_viwidth", &settings->uints.video_viwidth, true, video_viwidth, false); diff --git a/configuration.h b/configuration.h index 4028527a23..d4a73dba15 100644 --- a/configuration.h +++ b/configuration.h @@ -199,7 +199,7 @@ typedef struct settings bool savestate_thumbnail_enable; bool network_cmd_enable; bool stdin_cmd_enable; - bool keyboard_mapper_enable; + bool keymapper_enable; bool network_remote_enable; bool network_remote_enable_user[MAX_USERS]; bool load_dummy_on_core_shutdown; @@ -305,7 +305,7 @@ typedef struct settings unsigned autosave_interval; unsigned network_cmd_port; unsigned network_remote_base_port; - unsigned keyboard_mapper_port; + unsigned keymapper_port; unsigned video_window_x; unsigned video_window_y; unsigned video_monitor_index; diff --git a/input/input_driver.c b/input/input_driver.c index 894f5be924..b9ac84faaa 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -1378,11 +1378,11 @@ bool input_driver_init_mapper(void) #ifdef HAVE_KEYMAPPER settings_t *settings = config_get_ptr(); - if (!settings->bools.keyboard_mapper_enable) + if (!settings->bools.keymapper_enable) return false; input_driver_mapper = input_mapper_new( - settings->uints.keyboard_mapper_port); + settings->uints.keymapper_port); if (input_driver_mapper) return true; diff --git a/input/input_remapping.c b/input/input_remapping.c index 1b459c27af..cda7ddedc5 100644 --- a/input/input_remapping.c +++ b/input/input_remapping.c @@ -84,7 +84,7 @@ bool input_remapping_load_file(void *data, const char *path) key_remap = -1; - if (settings->uints.keyboard_mapper_port == i) + if (settings->uints.keymapper_port == i) { if (config_get_int(conf, keymapper_ident[j], &key_remap)) { @@ -200,7 +200,7 @@ bool input_remapping_save_file(const char *path) else config_unset(conf,key_ident[j]); - if (settings->uints.keyboard_mapper_port == i && + if (settings->uints.keymapper_port == i && settings->uints.input_keymapper_ids[j] != RETROK_UNKNOWN) config_set_int(conf, keymapper_ident[j], settings->uints.input_keymapper_ids[j]); } diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index b20fb9aae6..51fabf9d25 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -3510,7 +3510,7 @@ static int menu_displaylist_parse_options_remappings( for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND; retro_id++) { char desc_label[64]; - unsigned user = settings->uints.keyboard_mapper_port + 1; + unsigned user = settings->uints.keymapper_port + 1; unsigned desc_offset = retro_id; const char *description = NULL; From 708ff99513e5035f7a85ce34792978e600f78b30 Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 10 Sep 2017 13:03:03 -0500 Subject: [PATCH 10/14] indentation fix --- configuration.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configuration.c b/configuration.c index 8465bb3c85..b0cbe90ee8 100644 --- a/configuration.c +++ b/configuration.c @@ -1347,7 +1347,7 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings, SETTING_UINT("network_remote_base_port", &settings->uints.network_remote_base_port, true, network_remote_base_port, false); #endif #ifdef HAVE_KEYMAPPER - SETTING_UINT("keymapper_port", &settings->uints.keymapper_port, true, 0, false); + SETTING_UINT("keymapper_port", &settings->uints.keymapper_port, true, 0, false); #endif #ifdef GEKKO SETTING_UINT("video_viwidth", &settings->uints.video_viwidth, true, video_viwidth, false); From 551d85630ef141fda970924f6a061600bdd36aaf Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 10 Sep 2017 14:16:07 -0500 Subject: [PATCH 11/14] android build fixes --- input/input_driver.c | 2 +- menu/menu_cbs.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/input/input_driver.c b/input/input_driver.c index b9ac84faaa..8a2f5944fd 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -1346,7 +1346,7 @@ void input_driver_deinit_remote(void) void input_driver_deinit_mapper(void) { -#ifdef HAVE_NETWORKGAMEPAD +#ifdef HAVE_KEYMAPPER if (input_driver_mapper) input_mapper_free(input_driver_mapper); input_driver_mapper = NULL; diff --git a/menu/menu_cbs.h b/menu/menu_cbs.h index 261581f7da..9e10b118ae 100644 --- a/menu/menu_cbs.h +++ b/menu/menu_cbs.h @@ -161,6 +161,9 @@ int core_setting_right(unsigned type, const char *label, int action_right_input_desc(unsigned type, const char *label, bool wraparound); +int action_right_input_desc_kbd(unsigned type, const char *label, + bool wraparound); + int action_right_cheat(unsigned type, const char *label, bool wraparound); From bb2a92c980b6fe05d85b901abfab60917641a618 Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 10 Sep 2017 14:20:51 -0500 Subject: [PATCH 12/14] add defines to android builds --- pkg/android/phoenix/jni/Android.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/android/phoenix/jni/Android.mk b/pkg/android/phoenix/jni/Android.mk index e4be708654..69f555b9ed 100644 --- a/pkg/android/phoenix/jni/Android.mk +++ b/pkg/android/phoenix/jni/Android.mk @@ -68,7 +68,7 @@ else DEFINES += -DHAVE_OPENGLES2 endif -DEFINES += -DRARCH_MOBILE -DHAVE_GRIFFIN -DHAVE_STB_VORBIS -DHAVE_LANGEXTRA -DANDROID -DHAVE_DYNAMIC -DHAVE_OPENGL -DHAVE_FBO -DHAVE_OVERLAY -DHAVE_OPENGLES -DGLSL_DEBUG -DHAVE_DYLIB -DHAVE_EGL -DHAVE_GLSL -DHAVE_MENU -DHAVE_RGUI -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DINLINE=inline -DHAVE_THREADS -D__LIBRETRO__ -DHAVE_RSOUND -DHAVE_NETWORKGAMEPAD -DHAVE_NETWORKING -DRARCH_INTERNAL -DHAVE_FILTERS_BUILTIN -DHAVE_MATERIALUI -DHAVE_XMB -DHAVE_SHADERPIPELINE -DHAVE_LIBRETRODB -DHAVE_STB_FONT -DHAVE_IMAGEVIEWER -DHAVE_UPDATE_ASSETS -DHAVE_CC_RESAMPLER -DHAVE_MINIUPNPC -DHAVE_BUILTINMINIUPNPC -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR +DEFINES += -DRARCH_MOBILE -DHAVE_GRIFFIN -DHAVE_STB_VORBIS -DHAVE_LANGEXTRA -DANDROID -DHAVE_DYNAMIC -DHAVE_OPENGL -DHAVE_FBO -DHAVE_OVERLAY -DHAVE_OPENGLES -DGLSL_DEBUG -DHAVE_DYLIB -DHAVE_EGL -DHAVE_GLSL -DHAVE_MENU -DHAVE_RGUI -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DINLINE=inline -DHAVE_THREADS -D__LIBRETRO__ -DHAVE_RSOUND -DHAVE_NETWORKGAMEPAD -DHAVE_NETWORKING -DRARCH_INTERNAL -DHAVE_FILTERS_BUILTIN -DHAVE_MATERIALUI -DHAVE_XMB -DHAVE_SHADERPIPELINE -DHAVE_LIBRETRODB -DHAVE_STB_FONT -DHAVE_IMAGEVIEWER -DHAVE_UPDATE_ASSETS -DHAVE_CC_RESAMPLER -DHAVE_MINIUPNPC -DHAVE_BUILTINMINIUPNPC -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -DHAVE_KEYMAPPER -DHAVE_NETWORKGAMEPAD DEFINES += -DWANT_IFADDRS ifeq ($(HAVE_VULKAN),1) From f1f4d629addb9d2741be8a8306b811e422d1f12b Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 10 Sep 2017 17:20:44 -0500 Subject: [PATCH 13/14] don't show the keymapper labels when not required --- menu/cbs/menu_cbs_get_value.c | 3 ++- menu/cbs/menu_cbs_left.c | 2 ++ menu/cbs/menu_cbs_right.c | 2 ++ menu/menu_displaylist.c | 31 ++++++++++++++++++++----------- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index c86d49e6eb..46a890c624 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -488,6 +488,7 @@ static void menu_action_setting_disp_set_label_input_desc( } +#ifdef HAVE_KEYMAPPER static void menu_action_setting_disp_set_label_input_desc_kbd( file_list_t* list, unsigned *w, unsigned type, unsigned i, @@ -517,7 +518,7 @@ static void menu_action_setting_disp_set_label_input_desc_kbd( *w = 19; strlcpy(s2, path, len2); } - +#endif static void menu_action_setting_disp_set_label_cheat( file_list_t* list, diff --git a/menu/cbs/menu_cbs_left.c b/menu/cbs/menu_cbs_left.c index 72d3437b0d..55e291b15c 100644 --- a/menu/cbs/menu_cbs_left.c +++ b/menu/cbs/menu_cbs_left.c @@ -113,6 +113,7 @@ static int action_left_input_desc(unsigned type, const char *label, return 0; } +#ifdef HAVE_KEYMAPPER static int action_left_input_desc_kbd(unsigned type, const char *label, bool wraparound) { @@ -141,6 +142,7 @@ static int action_left_input_desc_kbd(unsigned type, const char *label, return 0; } +#endif static int action_left_scroll(unsigned type, const char *label, bool wraparound) diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c index 9ee53c15d9..c93a07dcba 100644 --- a/menu/cbs/menu_cbs_right.c +++ b/menu/cbs/menu_cbs_right.c @@ -102,6 +102,7 @@ int action_right_cheat(unsigned type, const char *label, wraparound); } +#ifdef HAVE_KEYMAPPER int action_right_input_desc_kbd(unsigned type, const char *label, bool wraparound) { @@ -130,6 +131,7 @@ int action_right_input_desc_kbd(unsigned type, const char *label, return 0; } +#endif int action_right_input_desc(unsigned type, const char *label, bool wraparound) diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 51fabf9d25..c0c2de2243 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -3504,25 +3504,34 @@ static int menu_displaylist_parse_options_remappings( } } } + #ifdef HAVE_KEYMAPPER if (system) { settings_t *settings = config_get_ptr(); - for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND; retro_id++) + + unsigned device = settings->uints.input_libretro_device[settings->uints.keymapper_port]; + device &= RETRO_DEVICE_MASK; + + if (device == RETRO_DEVICE_KEYBOARD) { - char desc_label[64]; - unsigned user = settings->uints.keymapper_port + 1; - unsigned desc_offset = retro_id; - const char *description = NULL; + for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND; retro_id++) + { + char desc_label[64]; + unsigned user = settings->uints.keymapper_port + 1; + unsigned desc_offset = retro_id; + const char *description = NULL; - desc_label[0] = '\0'; + desc_label[0] = '\0'; - snprintf(desc_label, sizeof(desc_label), - "%s: ", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B + retro_id)); - menu_entries_append_enum(info->list, desc_label, "", - MSG_UNKNOWN, - MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + retro_id, 0, 0); + snprintf(desc_label, sizeof(desc_label), + "%s: ", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B + retro_id)); + menu_entries_append_enum(info->list, desc_label, "", + MSG_UNKNOWN, + MENU_SETTINGS_INPUT_DESC_KBD_BEGIN + retro_id, 0, 0); + } } } + #endif return 0; } From 529afd8451b7e4109a5703567674250e70816ecb Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 10 Sep 2017 21:41:22 -0500 Subject: [PATCH 14/14] osx buildfixes --- menu/cbs/menu_cbs_get_value.c | 2 ++ menu/cbs/menu_cbs_left.c | 2 ++ menu/cbs/menu_cbs_right.c | 2 ++ menu/cbs/menu_cbs_select.c | 2 ++ 4 files changed, 8 insertions(+) diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index 46a890c624..3deefc98b4 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -1761,12 +1761,14 @@ static int menu_cbs_init_bind_get_string_representation_compare_type( BIND_ACTION_GET_VALUE(cbs, menu_action_setting_disp_set_label_libretro_perf_counters); } +#ifdef HAVE_KEYMAPPER else if (type >= MENU_SETTINGS_INPUT_DESC_KBD_BEGIN && type <= MENU_SETTINGS_INPUT_DESC_KBD_END) { BIND_ACTION_GET_VALUE(cbs, menu_action_setting_disp_set_label_input_desc_kbd); } +#endif else { switch (type) diff --git a/menu/cbs/menu_cbs_left.c b/menu/cbs/menu_cbs_left.c index 55e291b15c..89445c2742 100644 --- a/menu/cbs/menu_cbs_left.c +++ b/menu/cbs/menu_cbs_left.c @@ -571,11 +571,13 @@ static int menu_cbs_init_bind_left_compare_type(menu_file_list_cbs_t *cbs, { BIND_ACTION_LEFT(cbs, action_left_input_desc); } +#ifdef HAVE_KEYMAPPER else if (type >= MENU_SETTINGS_INPUT_DESC_KBD_BEGIN && type <= MENU_SETTINGS_INPUT_DESC_KBD_END) { BIND_ACTION_LEFT(cbs, action_left_input_desc_kbd); } +#endif else if ((type >= MENU_SETTINGS_PLAYLIST_ASSOCIATION_START)) { BIND_ACTION_LEFT(cbs, playlist_association_left); diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c index c93a07dcba..68dd6fa435 100644 --- a/menu/cbs/menu_cbs_right.c +++ b/menu/cbs/menu_cbs_right.c @@ -440,11 +440,13 @@ static int menu_cbs_init_bind_right_compare_type(menu_file_list_cbs_t *cbs, { BIND_ACTION_RIGHT(cbs, action_right_input_desc); } +#ifdef HAVE_KEYMAPPER else if (type >= MENU_SETTINGS_INPUT_DESC_KBD_BEGIN && type <= MENU_SETTINGS_INPUT_DESC_KBD_END) { BIND_ACTION_RIGHT(cbs, action_right_input_desc_kbd); } +#endif else if ((type >= MENU_SETTINGS_PLAYLIST_ASSOCIATION_START)) { BIND_ACTION_RIGHT(cbs, playlist_association_right); diff --git a/menu/cbs/menu_cbs_select.c b/menu/cbs/menu_cbs_select.c index cb1f1bf99d..6c6cb03e44 100644 --- a/menu/cbs/menu_cbs_select.c +++ b/menu/cbs/menu_cbs_select.c @@ -176,11 +176,13 @@ static int menu_cbs_init_bind_select_compare_type( { BIND_ACTION_SELECT(cbs, action_select_input_desc); } +#ifdef HAVE_KEYMAPPER else if (type >= MENU_SETTINGS_INPUT_DESC_KBD_BEGIN && type <= MENU_SETTINGS_INPUT_DESC_KBD_END) { BIND_ACTION_SELECT(cbs, action_select_input_desc_kbd); } +#endif else { switch (type)