summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-01-05 15:15:53 +0100
committerGitHub <noreply@github.com>2021-01-05 15:15:53 +0100
commitee25f03ff9e2a0bfc4c41a41d510c4993b126aaa (patch)
tree2910b576b6d4bf6810c4191246064f9f71aa17f8 /Source/Core/InputCommon/ControllerInterface/DualShockUDPClient
parent9069ad6cce201d6dc0c9b3446121eb84d41acfb6 (diff)
parent1e4a1bee4399f161f43d7b338698ae3343cf2c98 (diff)
Merge pull request #9418 from Filoppi/patch-10
Fix DualShockUDP not adding/removing devices correctly
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/DualShockUDPClient')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp b/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp
index 200b904b17..61ac7b1318 100644
--- a/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp
@@ -28,6 +28,8 @@
namespace ciface::DualShockUDPClient
{
+constexpr std::string_view DUALSHOCKUDP_SOURCE_NAME = "DSUClient";
+
namespace Settings
{
const Config::Info<std::string> SERVER_ADDRESS{
@@ -317,7 +319,7 @@ static void Restart()
}
}
- PopulateDevices(); // remove devices
+ PopulateDevices(); // Only removes devices
if (s_servers_enabled && !s_servers.empty())
StartHotplugThread();
@@ -386,11 +388,14 @@ void PopulateDevices()
{
INFO_LOG_FMT(SERIALINTERFACE, "DualShockUDPClient PopulateDevices");
+ // s_servers has already been updated so we can't use it to know which devices we removed,
+ // also it's good to remove all of them before adding new ones so that their id will be set
+ // correctly if they have the same name
+ g_controller_interface.RemoveDevice(
+ [](const auto* dev) { return dev->GetSource() == DUALSHOCKUDP_SOURCE_NAME; });
+
for (auto& server : s_servers)
{
- g_controller_interface.RemoveDevice(
- [&server](const auto* dev) { return dev->GetName() == server.m_description; });
-
std::lock_guard lock{server.m_port_info_mutex};
for (size_t port_index = 0; port_index < server.m_port_info.size(); port_index++)
{
@@ -478,7 +483,7 @@ std::string Device::GetName() const
std::string Device::GetSource() const
{
- return "DSUClient";
+ return std::string(DUALSHOCKUDP_SOURCE_NAME);
}
void Device::UpdateInput()