summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2024-11-05 15:02:22 -0500
committerGitHub <noreply@github.com>2024-11-05 15:02:22 -0500
commit7e1074b140809b0da7aa7d02b6303a68cc351be2 (patch)
tree1eee0fa73a927d35399636e007c299cd72002a74 /Source/Core
parent29172fab9ec85952be0e3efb57909af2b5436721 (diff)
parent6dbffd1fee448d3c0d890c1e03edfe2bf9334cd2 (diff)
Merge pull request #13172 from deReeperJosh/superchargersfix
IOS/USB: Reconnect HIDv4 Devices after shutdown
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/IOS/USB/USB_HID/HIDv4.cpp4
-rw-r--r--Source/Core/Core/IOS/USB/USB_HID/HIDv4.h1
2 files changed, 4 insertions, 1 deletions
diff --git a/Source/Core/Core/IOS/USB/USB_HID/HIDv4.cpp b/Source/Core/Core/IOS/USB/USB_HID/HIDv4.cpp
index b60339a8f1..0b464b13d6 100644
--- a/Source/Core/Core/IOS/USB/USB_HID/HIDv4.cpp
+++ b/Source/Core/Core/IOS/USB/USB_HID/HIDv4.cpp
@@ -96,10 +96,11 @@ std::optional<IPCReply> USB_HIDv4::GetDeviceChange(const IOCtlRequest& request)
m_devicechange_hook_request = std::make_unique<IOCtlRequest>(GetSystem(), request.address);
// If there are pending changes, the reply is sent immediately (instead of on device
// insertion/removal).
- if (m_has_pending_changes)
+ if (m_has_pending_changes || m_is_shut_down)
{
TriggerDeviceChangeReply();
m_has_pending_changes = false;
+ m_is_shut_down = false;
}
return std::nullopt;
}
@@ -114,6 +115,7 @@ IPCReply USB_HIDv4::Shutdown(const IOCtlRequest& request)
memory.Write_U32(0xffffffff, m_devicechange_hook_request->buffer_out);
GetEmulationKernel().EnqueueIPCReply(*m_devicechange_hook_request, -1);
m_devicechange_hook_request.reset();
+ m_is_shut_down = true;
}
return IPCReply(IPC_SUCCESS);
}
diff --git a/Source/Core/Core/IOS/USB/USB_HID/HIDv4.h b/Source/Core/Core/IOS/USB/USB_HID/HIDv4.h
index 44c8213ae0..33fc31f461 100644
--- a/Source/Core/Core/IOS/USB/USB_HID/HIDv4.h
+++ b/Source/Core/Core/IOS/USB/USB_HID/HIDv4.h
@@ -45,6 +45,7 @@ private:
static constexpr u8 HID_CLASS = 0x03;
bool m_has_pending_changes = true;
+ bool m_is_shut_down = false;
std::mutex m_devicechange_hook_address_mutex;
std::unique_ptr<IOCtlRequest> m_devicechange_hook_request;