diff options
| author | Jordan Woyak <jordan.woyak@gmail.com> | 2025-04-23 23:25:34 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-23 23:25:34 -0500 |
| commit | 3025cd472ce86edf26cd2894718ab6901d1fd920 (patch) | |
| tree | f54ebd102508e93a444275e17ef857fc7a850b57 /Source/Core | |
| parent | 879a8889aacd3be6707e6b663f1dac8de09c9941 (diff) | |
| parent | bda1f379b7cefa4bdc4c3b4d6210003018d0f4b4 (diff) | |
Merge pull request #13491 from JosJuice/oh0-removed-opened
IOS: Remove from m_opened_devices in OH0::OnDeviceChange
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/IOS/USB/OH0/OH0.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/Source/Core/Core/IOS/USB/OH0/OH0.cpp b/Source/Core/Core/IOS/USB/OH0/OH0.cpp index dad3c182c9..4f5df4cf10 100644 --- a/Source/Core/Core/IOS/USB/OH0/OH0.cpp +++ b/Source/Core/Core/IOS/USB/OH0/OH0.cpp @@ -81,10 +81,10 @@ void OH0::DoState(PointerWrap& p) 5000); Core::DisplayMessage("If USB doesn't work properly, an emulation reset may be needed.", 5000); } + p.Do(m_insertion_hooks); + p.Do(m_removal_hooks); + p.Do(m_opened_devices); } - p.Do(m_insertion_hooks); - p.Do(m_removal_hooks); - p.Do(m_opened_devices); USBHost::DoState(p); } @@ -243,9 +243,18 @@ bool OH0::HasDeviceWithVidPid(const u16 vid, const u16 pid) const void OH0::OnDeviceChange(const ChangeEvent event, std::shared_ptr<USB::Device> device) { if (event == ChangeEvent::Inserted) + { TriggerHook(m_insertion_hooks, {device->GetVid(), device->GetPid()}, IPC_SUCCESS); + } else if (event == ChangeEvent::Removed) + { TriggerHook(m_removal_hooks, device->GetId(), IPC_SUCCESS); + + // This fixes a problem where Rock Band 3 randomly fails to detect reconnected microphones. + // Real IOS behavior untested. + std::lock_guard lk(m_devices_mutex); + m_opened_devices.erase(device->GetId()); + } } template <typename T> @@ -286,6 +295,7 @@ std::pair<ReturnCode, u64> OH0::DeviceOpen(const u16 vid, const u16 pid) void OH0::DeviceClose(const u64 device_id) { TriggerHook(m_removal_hooks, device_id, IPC_ENOENT); + std::lock_guard lk(m_devices_mutex); m_opened_devices.erase(device_id); } |
