diff options
| author | Joshua de Reeper <joshua@dereeper.co.nz> | 2024-11-04 13:07:10 +0000 |
|---|---|---|
| committer | Joshua de Reeper <joshua@dereeper.co.nz> | 2024-11-04 20:12:38 +0000 |
| commit | 6dbffd1fee448d3c0d890c1e03edfe2bf9334cd2 (patch) | |
| tree | 10eeda6c2d6d48cff05a7a73ea943f7d05bedf01 /Source/Core | |
| parent | 59530966f99136ba4cc412e57e623992586f9db4 (diff) | |
IOS/USB: Reconnect HIDv4 Devices after shutdown
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/IOS/USB/USB_HID/HIDv4.cpp | 4 | ||||
| -rw-r--r-- | Source/Core/Core/IOS/USB/USB_HID/HIDv4.h | 1 |
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; |
