From 1d71d4b87415b2581e6757f07d29275e02671b7a Mon Sep 17 00:00:00 2001
From: german77 <juangerman-13@hotmail.com>
Date: Mon, 25 Oct 2021 12:53:14 -0500
Subject: [PATCH] input_common: Fix UDP uuid

---
 src/input_common/drivers/udp_client.cpp           | 10 +++++++++-
 src/input_common/drivers/udp_client.h             |  2 ++
 src/yuzu/configuration/configure_input_player.cpp |  6 +++++-
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/input_common/drivers/udp_client.cpp b/src/input_common/drivers/udp_client.cpp
index 192ab336b..7cab707da 100644
--- a/src/input_common/drivers/udp_client.cpp
+++ b/src/input_common/drivers/udp_client.cpp
@@ -4,6 +4,7 @@
 
 #include <random>
 #include <boost/asio.hpp>
+#include <fmt/format.h>
 
 #include "common/logging/log.h"
 #include "common/param_package.h"
@@ -279,6 +280,7 @@ void UDPClient::StartCommunication(std::size_t client, const std::string& host,
                             [this](Response::PortInfo info) { OnPortInfo(info); },
                             [this, client](Response::PadData data) { OnPadData(data, client); }};
     LOG_INFO(Input, "Starting communication with UDP input server on {}:{}", host, port);
+    clients[client].uuid = GetHostUUID(host);
     clients[client].host = host;
     clients[client].port = port;
     clients[client].active = 0;
@@ -293,12 +295,18 @@ void UDPClient::StartCommunication(std::size_t client, const std::string& host,
 const PadIdentifier UDPClient::GetPadIdentifier(std::size_t pad_index) const {
     const std::size_t client = pad_index / PADS_PER_CLIENT;
     return {
-        .guid = Common::UUID{clients[client].host},
+        .guid = clients[client].uuid,
         .port = static_cast<std::size_t>(clients[client].port),
         .pad = pad_index,
     };
 }
 
+const Common::UUID UDPClient::GetHostUUID(const std::string host) const {
+    const auto ip = boost::asio::ip::address_v4::from_string(host);
+    const auto hex_host = fmt::format("{:06x}", ip.to_ulong());
+    return Common::UUID{hex_host};
+}
+
 void UDPClient::Reset() {
     for (auto& client : clients) {
         if (client.thread.joinable()) {
diff --git a/src/input_common/drivers/udp_client.h b/src/input_common/drivers/udp_client.h
index 639325b17..1f02adba5 100644
--- a/src/input_common/drivers/udp_client.h
+++ b/src/input_common/drivers/udp_client.h
@@ -69,6 +69,7 @@ private:
     struct ClientConnection {
         ClientConnection();
         ~ClientConnection();
+        Common::UUID uuid{"7F000001"};
         std::string host{"127.0.0.1"};
         u16 port{26760};
         s8 active{-1};
@@ -87,6 +88,7 @@ private:
     void OnPadData(Response::PadData, std::size_t client);
     void StartCommunication(std::size_t client, const std::string& host, u16 port);
     const PadIdentifier GetPadIdentifier(std::size_t pad_index) const;
+    const Common::UUID GetHostUUID(const std::string host) const;
 
     // Allocate clients for 8 udp servers
     static constexpr std::size_t MAX_UDP_CLIENTS = 8;
diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp
index acb29a6b4..9a1b3575e 100644
--- a/src/yuzu/configuration/configure_input_player.cpp
+++ b/src/yuzu/configuration/configure_input_player.cpp
@@ -1178,7 +1178,7 @@ void ConfigureInputPlayer::HandleClick(
     }
 
     timeout_timer->start(2500); // Cancel after 2.5 seconds
-    poll_timer->start(50);      // Check for new inputs every 50ms
+    poll_timer->start(25);      // Check for new inputs every 25ms
 }
 
 void ConfigureInputPlayer::SetPollingResult(const Common::ParamPackage& params, bool abort) {
@@ -1205,6 +1205,10 @@ bool ConfigureInputPlayer::IsInputAcceptable(const Common::ParamPackage& params)
         return true;
     }
 
+    if (params.Has("motion")) {
+        return true;
+    }
+
     // Keyboard/Mouse
     if (ui->comboDevices->currentIndex() == 1 || ui->comboDevices->currentIndex() == 2) {
         return params.Get("engine", "") == "keyboard" || params.Get("engine", "") == "mouse";