Skip to content

Commit

Permalink
Merge pull request #9638 from leoetlino/btemu-is-not-wiimoteemu
Browse files Browse the repository at this point in the history
WiiUtils: Add helper functions to get emulated/real Bluetooth device
  • Loading branch information
JosJuice committed Apr 13, 2021
2 parents 5322256 + 3365180 commit e8ac63d
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 45 deletions.
13 changes: 3 additions & 10 deletions Source/Core/Core/HW/Wiimote.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "Core/IOS/USB/Bluetooth/WiimoteDevice.h"
#include "Core/Movie.h"
#include "Core/NetPlayClient.h"
#include "Core/WiiUtils.h"

#include "InputCommon/ControllerEmu/ControlGroup/ControlGroup.h"
#include "InputCommon/InputConfig.h"
Expand Down Expand Up @@ -49,16 +50,8 @@ void SetSource(unsigned int index, WiimoteSource source)

void UpdateSource(unsigned int index)
{
const auto ios = IOS::HLE::GetIOS();
if (!ios)
return;

if (s_wiimote_sources[index] != WiimoteSource::Emulated)
return;

const auto bluetooth = std::static_pointer_cast<IOS::HLE::BluetoothEmuDevice>(
ios->GetDeviceByName("/dev/usb/oh1/57e/305"));
if (!bluetooth)
const auto bluetooth = WiiUtils::GetBluetoothEmuDevice();
if (bluetooth == nullptr)
return;

bluetooth->AccessWiimoteByIndex(index)->SetSource(GetHIDWiimoteSource(index));
Expand Down
8 changes: 3 additions & 5 deletions Source/Core/Core/Movie.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
#include "Core/IOS/USB/Bluetooth/WiimoteDevice.h"
#include "Core/NetPlayProto.h"
#include "Core/State.h"
#include "Core/WiiUtils.h"

#include "DiscIO/Enums.h"

Expand Down Expand Up @@ -469,16 +470,13 @@ void ChangeWiiPads(bool instantly)
if (instantly && (s_controllers >> 4) == controllers)
return;

const auto ios = IOS::HLE::GetIOS();
const auto bt = ios ? std::static_pointer_cast<IOS::HLE::BluetoothEmuDevice>(
ios->GetDeviceByName("/dev/usb/oh1/57e/305")) :
nullptr;
const auto bt = WiiUtils::GetBluetoothEmuDevice();
for (int i = 0; i < MAX_WIIMOTES; ++i)
{
const bool is_using_wiimote = IsUsingWiimote(i);

WiimoteCommon::SetSource(i, is_using_wiimote ? WiimoteSource::Emulated : WiimoteSource::None);
if (!SConfig::GetInstance().m_bt_passthrough_enabled && bt)
if (bt != nullptr)
bt->AccessWiimoteByIndex(i)->Activate(is_using_wiimote);
}
}
Expand Down
22 changes: 22 additions & 0 deletions Source/Core/Core/WiiUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
#include "Core/IOS/ES/Formats.h"
#include "Core/IOS/FS/FileSystem.h"
#include "Core/IOS/IOS.h"
#include "Core/IOS/USB/Bluetooth/BTEmu.h"
#include "Core/IOS/USB/Bluetooth/BTReal.h"
#include "Core/IOS/Uids.h"
#include "Core/SysConf.h"
#include "DiscIO/DiscExtractor.h"
Expand Down Expand Up @@ -957,4 +959,24 @@ bool RepairNAND(IOS::HLE::Kernel& ios)
{
return !CheckNAND(ios, true).bad;
}

static std::shared_ptr<IOS::HLE::Device> GetBluetoothDevice()
{
auto* ios = IOS::HLE::GetIOS();
return ios ? ios->GetDeviceByName("/dev/usb/oh1/57e/305") : nullptr;
}

std::shared_ptr<IOS::HLE::BluetoothEmuDevice> GetBluetoothEmuDevice()
{
if (SConfig::GetInstance().m_bt_passthrough_enabled)
return nullptr;
return std::static_pointer_cast<IOS::HLE::BluetoothEmuDevice>(GetBluetoothDevice());
}

std::shared_ptr<IOS::HLE::BluetoothRealDevice> GetBluetoothRealDevice()
{
if (!SConfig::GetInstance().m_bt_passthrough_enabled)
return nullptr;
return std::static_pointer_cast<IOS::HLE::BluetoothRealDevice>(GetBluetoothDevice());
}
} // namespace WiiUtils
9 changes: 9 additions & 0 deletions Source/Core/Core/WiiUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#include "Common/CommonTypes.h"
#include "Core/IOS/ES/Formats.h"
#include "Core/IOS/USB/Bluetooth/BTReal.h"

// Small utility functions for common Wii related tasks.

Expand All @@ -22,6 +23,7 @@ class VolumeWAD;

namespace IOS::HLE
{
class BluetoothEmuDevice;
class ESDevice;
class Kernel;
} // namespace IOS::HLE
Expand Down Expand Up @@ -101,4 +103,11 @@ struct NANDCheckResult
};
NANDCheckResult CheckNAND(IOS::HLE::Kernel& ios);
bool RepairNAND(IOS::HLE::Kernel& ios);

// Get the BluetoothEmuDevice for an active emulation instance.
// It is only safe to call this from the CPU thread.
// Returns nullptr if we're not currently emulating a Wii game or if Bluetooth passthrough is used.
std::shared_ptr<IOS::HLE::BluetoothEmuDevice> GetBluetoothEmuDevice();
// Same as GetBluetoothEmuDevice, but for Bluetooth passthrough.
std::shared_ptr<IOS::HLE::BluetoothRealDevice> GetBluetoothRealDevice();
} // namespace WiiUtils
15 changes: 5 additions & 10 deletions Source/Core/DolphinQt/Config/WiimoteControllersWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "Core/HW/WiimoteReal/WiimoteReal.h"
#include "Core/IOS/IOS.h"
#include "Core/IOS/USB/Bluetooth/BTReal.h"
#include "Core/WiiUtils.h"

#include "DolphinQt/Config/Mapping/MappingWindow.h"
#include "DolphinQt/QtUtils/ModalMessageBox.h"
Expand Down Expand Up @@ -242,11 +243,9 @@ void WiimoteControllersWidget::OnBluetoothPassthroughResetPressed()
return;
}

auto device = ios->GetDeviceByName("/dev/usb/oh1/57e/305");
auto device = WiiUtils::GetBluetoothRealDevice();
if (device != nullptr)
{
std::static_pointer_cast<IOS::HLE::BluetoothBaseDevice>(device)->TriggerSyncButtonHeldEvent();
}
device->TriggerSyncButtonHeldEvent();
}

void WiimoteControllersWidget::OnBluetoothPassthroughSyncPressed()
Expand All @@ -260,13 +259,9 @@ void WiimoteControllersWidget::OnBluetoothPassthroughSyncPressed()
return;
}

auto device = ios->GetDeviceByName("/dev/usb/oh1/57e/305");

auto device = WiiUtils::GetBluetoothRealDevice();
if (device != nullptr)
{
std::static_pointer_cast<IOS::HLE::BluetoothBaseDevice>(device)
->TriggerSyncButtonPressedEvent();
}
device->TriggerSyncButtonPressedEvent();
}

void WiimoteControllersWidget::OnWiimoteRefreshPressed()
Expand Down
3 changes: 3 additions & 0 deletions Source/Core/DolphinQt/GameList/GameList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
#ifdef DeleteFile
#undef DeleteFile
#endif
#ifdef interface
#undef interface
#endif
#endif

#include "DolphinQt/GameList/GameList.h"
Expand Down
13 changes: 4 additions & 9 deletions Source/Core/DolphinQt/HotkeyScheduler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
#include "Core/HotkeyManager.h"
#include "Core/IOS/IOS.h"
#include "Core/IOS/USB/Bluetooth/BTBase.h"
#include "Core/IOS/USB/Bluetooth/BTReal.h"
#include "Core/State.h"
#include "Core/WiiUtils.h"

#include "DolphinQt/Settings.h"

Expand Down Expand Up @@ -231,15 +233,8 @@ void HotkeyScheduler::Run()
emit ToggleReadOnlyMode();

// Wiimote
if (SConfig::GetInstance().m_bt_passthrough_enabled)
{
const auto ios = IOS::HLE::GetIOS();
auto device = ios ? ios->GetDeviceByName("/dev/usb/oh1/57e/305") : nullptr;

if (device != nullptr)
std::static_pointer_cast<IOS::HLE::BluetoothBaseDevice>(device)->UpdateSyncButtonState(
IsHotkey(HK_TRIGGER_SYNC_BUTTON, true));
}
if (auto bt = WiiUtils::GetBluetoothRealDevice())
bt->UpdateSyncButtonState(IsHotkey(HK_TRIGGER_SYNC_BUTTON, true));

if (SConfig::GetInstance().bEnableDebugging)
{
Expand Down
7 changes: 2 additions & 5 deletions Source/Core/DolphinQt/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
#include "Core/NetPlayProto.h"
#include "Core/NetPlayServer.h"
#include "Core/State.h"
#include "Core/WiiUtils.h"

#include "DiscIO/NANDImporter.h"

Expand Down Expand Up @@ -1723,12 +1724,8 @@ void MainWindow::ShowTASInput()

void MainWindow::OnConnectWiiRemote(int id)
{
const auto ios = IOS::HLE::GetIOS();
if (!ios || SConfig::GetInstance().m_bt_passthrough_enabled)
return;
Core::RunAsCPUThread([&] {
if (const auto bt = std::static_pointer_cast<IOS::HLE::BluetoothEmuDevice>(
ios->GetDeviceByName("/dev/usb/oh1/57e/305")))
if (const auto bt = WiiUtils::GetBluetoothEmuDevice())
{
const auto wm = bt->AccessWiimoteByIndex(id);
wm->Activate(!wm->IsConnected());
Expand Down
8 changes: 2 additions & 6 deletions Source/Core/DolphinQt/MenuBar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1023,12 +1023,8 @@ void MenuBar::UpdateToolsMenu(bool emulation_started)
m_perform_online_update_for_current_region->setEnabled(tmd.IsValid());
}

const auto ios = IOS::HLE::GetIOS();
const auto bt = ios ? std::static_pointer_cast<IOS::HLE::BluetoothEmuDevice>(
ios->GetDeviceByName("/dev/usb/oh1/57e/305")) :
nullptr;
const bool enable_wiimotes =
emulation_started && bt && !SConfig::GetInstance().m_bt_passthrough_enabled;
const auto bt = WiiUtils::GetBluetoothEmuDevice();
const bool enable_wiimotes = emulation_started && bt != nullptr;

for (std::size_t i = 0; i < m_wii_remotes.size(); i++)
{
Expand Down

0 comments on commit e8ac63d

Please sign in to comment.