diff --git a/Makefile.common b/Makefile.common index ceb21ff587..7a3aedca2d 100644 --- a/Makefile.common +++ b/Makefile.common @@ -484,6 +484,10 @@ ifeq ($(HAVE_COMMAND), 1) OBJ += command.o endif +ifeq ($(HAVE_NETWORK_GAMEPAD), 1) + OBJ += remote.o +endif + #Input ifeq ($(HAVE_WAYLAND), 1) diff --git a/command_event.c b/command_event.c index 19144e852a..0dc1f8bfd1 100644 --- a/command_event.c +++ b/command_event.c @@ -75,6 +75,17 @@ static void event_init_command(void) } #endif +#ifdef HAVE_NETWORK_GAMEPAD +static void event_init_remote(void) +{ + driver_t *driver = driver_get_ptr(); + settings_t *settings = config_get_ptr(); + + if (!(driver->remote = rarch_remote_new(55400,1))) + RARCH_ERR("Failed to initialize remote gamepad interface.\n"); +} +#endif + /** * event_free_temporary_content: * @@ -1684,6 +1695,20 @@ bool event_command(enum event_command cmd) event_init_command(); #endif break; +case EVENT_CMD_REMOTE_DEINIT: +#ifdef HAVE_NETWORK_GAMEPAD + if (driver->remote) + rarch_remote_free(driver->remote); + driver->remote = NULL; +#endif + break; +case EVENT_CMD_REMOTE_INIT: + event_command(EVENT_CMD_REMOTE_DEINIT); + +#ifdef HAVE_NETWORK_GAMEPAD + event_init_remote(); +#endif + break; case EVENT_CMD_TEMPORARY_CONTENT_DEINIT: if (!global) break; diff --git a/command_event.h b/command_event.h index d60e1c60eb..fc96ea19e0 100644 --- a/command_event.h +++ b/command_event.h @@ -175,6 +175,10 @@ enum event_command EVENT_CMD_COMMAND_INIT, /* Deinitialize command interface. */ EVENT_CMD_COMMAND_DEINIT, + /* Initializes remote gamepad interface. */ + EVENT_CMD_REMOTE_INIT, + /* Deinitializes remote gamepad interface. */ + EVENT_CMD_REMOTE_DEINIT, /* Deinitializes drivers. */ EVENT_CMD_DRIVERS_DEINIT, /* Initializes drivers. */ diff --git a/driver.h b/driver.h index cde7f6f649..92e796bf9e 100644 --- a/driver.h +++ b/driver.h @@ -49,6 +49,10 @@ #include "command.h" #endif +#ifdef HAVE_NETWORK_GAMEPAD +#include "remote.h" +#endif + #ifdef __cplusplus extern "C" { #endif @@ -258,6 +262,9 @@ typedef struct driver #ifdef HAVE_COMMAND rarch_cmd_t *command; +#endif +#ifdef HAVE_NETWORK_GAMEPAD + rarch_remote_t *remote; #endif bool block_hotkey; bool block_libretro_input; diff --git a/griffin/griffin.c b/griffin/griffin.c index 2fd70ebc4b..c6ecc3fb57 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -856,6 +856,10 @@ MENU #include "../command.c" #endif +#ifdef HAVE_NETWORK_GAMEPAD +#include "../remote.c" +#endif + #include "../command_event.c" #ifdef __cplusplus diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index edeefbfa6e..eed6438fd6 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -588,6 +588,13 @@ static int menu_displaylist_parse_system_info(menu_displaylist_info_t *info) _network_command_supp ? menu_hash_to_str(MENU_LABEL_VALUE_YES) : menu_hash_to_str(MENU_LABEL_VALUE_NO)); menu_entries_push(info->list, feat_str, "", MENU_SETTINGS_CORE_INFO_NONE, 0, 0); + + snprintf(feat_str, sizeof(feat_str), + "%s : %s", + menu_hash_to_str(MENU_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT), + _network_gamepad_supp ? menu_hash_to_str(MENU_LABEL_VALUE_YES) : menu_hash_to_str(MENU_LABEL_VALUE_NO)); + menu_entries_push(info->list, feat_str, "", + MENU_SETTINGS_CORE_INFO_NONE, 0, 0); snprintf(feat_str, sizeof(feat_str), "%s: %s", diff --git a/retroarch.c b/retroarch.c index a07b947442..e90a8a6d5c 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1213,6 +1213,7 @@ int rarch_main_init(int argc, char *argv[]) event_command(EVENT_CMD_DRIVERS_INIT); event_command(EVENT_CMD_COMMAND_INIT); + event_command(EVENT_CMD_REMOTE_INIT); event_command(EVENT_CMD_REWIND_INIT); event_command(EVENT_CMD_CONTROLLERS_INIT); event_command(EVENT_CMD_RECORD_INIT); @@ -1457,6 +1458,7 @@ void rarch_main_deinit(void) event_command(EVENT_CMD_NETPLAY_DEINIT); event_command(EVENT_CMD_COMMAND_DEINIT); + event_command(EVENT_CMD_REMOTE_DEINIT); if (global->sram.use) event_command(EVENT_CMD_AUTOSAVE_DEINIT);