summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJoshua de Reeper <joshua@dereeper.co.nz>2024-11-04 13:07:10 +0000
committerJoshua de Reeper <joshua@dereeper.co.nz>2024-11-04 20:12:38 +0000
commit6dbffd1fee448d3c0d890c1e03edfe2bf9334cd2 (patch)
tree10eeda6c2d6d48cff05a7a73ea943f7d05bedf01 /Source/Core
parent59530966f99136ba4cc412e57e623992586f9db4 (diff)
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;