BTEmu: Add helper function for accessing WiimoteDevice instances by index
This makes it much more straightforward to access WiimoteDevice instances and also keeps the implementation details of accessing those instances in one spot. Given as all external accesses to the WiimoteDevice instances go through this function, we can make the other two private.
This commit is contained in:
parent
e4b6d7626b
commit
7eb86cdb67
|
@ -104,9 +104,9 @@ void Connect(unsigned int index, bool connect)
|
|||
ios->GetDeviceByName("/dev/usb/oh1/57e/305"));
|
||||
|
||||
if (bluetooth)
|
||||
bluetooth->AccessWiiMote(index | 0x100)->Activate(connect);
|
||||
bluetooth->AccessWiiMoteByIndex(index)->Activate(connect);
|
||||
|
||||
const char* message = connect ? "Wii Remote %i connected" : "Wii Remote %i disconnected";
|
||||
const char* message = connect ? "Wii Remote %u connected" : "Wii Remote %u disconnected";
|
||||
Core::DisplayMessage(StringFromFormat(message, index + 1), 3000);
|
||||
}
|
||||
|
||||
|
|
|
@ -1740,6 +1740,12 @@ void BluetoothEmu::CommandVendorSpecific_FC4C(const u8* input, u32 size)
|
|||
// --- helper
|
||||
//
|
||||
//
|
||||
WiimoteDevice* BluetoothEmu::AccessWiiMoteByIndex(std::size_t index)
|
||||
{
|
||||
const u16 connection_handle = static_cast<u16>(0x100 + index);
|
||||
return AccessWiiMote(connection_handle);
|
||||
}
|
||||
|
||||
WiimoteDevice* BluetoothEmu::AccessWiiMote(const bdaddr_t& address)
|
||||
{
|
||||
const auto iterator =
|
||||
|
|
|
@ -4,10 +4,9 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstddef>
|
||||
#include <deque>
|
||||
#include <memory>
|
||||
#include <queue>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
@ -57,8 +56,7 @@ public:
|
|||
|
||||
bool RemoteDisconnect(u16 _connectionHandle);
|
||||
|
||||
WiimoteDevice* AccessWiiMote(const bdaddr_t& _rAddr);
|
||||
WiimoteDevice* AccessWiiMote(u16 _ConnectionHandle);
|
||||
WiimoteDevice* AccessWiiMoteByIndex(std::size_t index);
|
||||
|
||||
void DoState(PointerWrap& p) override;
|
||||
|
||||
|
@ -102,6 +100,9 @@ private:
|
|||
u32 m_PacketCount[MAX_BBMOTES] = {};
|
||||
u64 m_last_ticks = 0;
|
||||
|
||||
WiimoteDevice* AccessWiiMote(const bdaddr_t& _rAddr);
|
||||
WiimoteDevice* AccessWiiMote(u16 _ConnectionHandle);
|
||||
|
||||
// Send ACL data to a device (wiimote)
|
||||
void IncDataPacket(u16 _ConnectionHandle);
|
||||
void SendToDevice(u16 _ConnectionHandle, u8* _pData, u32 _Size);
|
||||
|
|
|
@ -926,6 +926,6 @@ void Callback_WiimoteInterruptChannel(int number, u16 channel_id, const u8* data
|
|||
const auto bt = std::static_pointer_cast<IOS::HLE::Device::BluetoothEmu>(
|
||||
IOS::HLE::GetIOS()->GetDeviceByName("/dev/usb/oh1/57e/305"));
|
||||
if (bt)
|
||||
bt->AccessWiiMote(0x100 + number)->ReceiveL2capData(channel_id, data, size);
|
||||
bt->AccessWiiMoteByIndex(number)->ReceiveL2capData(channel_id, data, size);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -466,9 +466,11 @@ void ChangeWiiPads(bool instantly)
|
|||
nullptr;
|
||||
for (int i = 0; i < MAX_WIIMOTES; ++i)
|
||||
{
|
||||
g_wiimote_sources[i] = IsUsingWiimote(i) ? WIIMOTE_SRC_EMU : WIIMOTE_SRC_NONE;
|
||||
const bool is_using_wiimote = IsUsingWiimote(i);
|
||||
|
||||
g_wiimote_sources[i] = is_using_wiimote ? WIIMOTE_SRC_EMU : WIIMOTE_SRC_NONE;
|
||||
if (!SConfig::GetInstance().m_bt_passthrough_enabled && bt)
|
||||
bt->AccessWiiMote(i | 0x100)->Activate(IsUsingWiimote(i));
|
||||
bt->AccessWiiMoteByIndex(i)->Activate(is_using_wiimote);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1401,7 +1401,7 @@ void MainWindow::OnConnectWiiRemote(int id)
|
|||
Core::RunAsCPUThread([&] {
|
||||
const auto bt = std::static_pointer_cast<IOS::HLE::Device::BluetoothEmu>(
|
||||
ios->GetDeviceByName("/dev/usb/oh1/57e/305"));
|
||||
const bool is_connected = bt && bt->AccessWiiMote(id | 0x100)->IsConnected();
|
||||
const bool is_connected = bt && bt->AccessWiiMoteByIndex(id)->IsConnected();
|
||||
Wiimote::Connect(id, !is_connected);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -914,14 +914,16 @@ void MenuBar::UpdateToolsMenu(bool emulation_started)
|
|||
const auto bt = ios ? std::static_pointer_cast<IOS::HLE::Device::BluetoothEmu>(
|
||||
ios->GetDeviceByName("/dev/usb/oh1/57e/305")) :
|
||||
nullptr;
|
||||
bool enable_wiimotes =
|
||||
const bool enable_wiimotes =
|
||||
emulation_started && bt && !SConfig::GetInstance().m_bt_passthrough_enabled;
|
||||
|
||||
for (int i = 0; i < 5; i++)
|
||||
for (std::size_t i = 0; i < m_wii_remotes.size(); i++)
|
||||
{
|
||||
m_wii_remotes[i]->setEnabled(enable_wiimotes);
|
||||
QAction* const wii_remote = m_wii_remotes[i];
|
||||
|
||||
wii_remote->setEnabled(enable_wiimotes);
|
||||
if (enable_wiimotes)
|
||||
m_wii_remotes[i]->setChecked(bt->AccessWiiMote(0x0100 + i)->IsConnected());
|
||||
wii_remote->setChecked(bt->AccessWiiMoteByIndex(i)->IsConnected());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1539,7 +1539,7 @@ void CFrame::OnConnectWiimote(wxCommandEvent& event)
|
|||
const auto bt = std::static_pointer_cast<IOS::HLE::Device::BluetoothEmu>(
|
||||
ios->GetDeviceByName("/dev/usb/oh1/57e/305"));
|
||||
const unsigned int wiimote_index = event.GetId() - IDM_CONNECT_WIIMOTE1;
|
||||
const bool is_connected = bt && bt->AccessWiiMote(wiimote_index | 0x100)->IsConnected();
|
||||
const bool is_connected = bt && bt->AccessWiiMoteByIndex(wiimote_index)->IsConnected();
|
||||
Wiimote::Connect(wiimote_index, !is_connected);
|
||||
});
|
||||
}
|
||||
|
@ -1699,22 +1699,27 @@ void CFrame::UpdateGUI()
|
|||
const auto bt = ios ? std::static_pointer_cast<IOS::HLE::Device::BluetoothEmu>(
|
||||
ios->GetDeviceByName("/dev/usb/oh1/57e/305")) :
|
||||
nullptr;
|
||||
bool ShouldEnableWiimotes = Running && bt && !SConfig::GetInstance().m_bt_passthrough_enabled;
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE1)->Enable(ShouldEnableWiimotes);
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE2)->Enable(ShouldEnableWiimotes);
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE3)->Enable(ShouldEnableWiimotes);
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE4)->Enable(ShouldEnableWiimotes);
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_BALANCEBOARD)->Enable(ShouldEnableWiimotes);
|
||||
if (ShouldEnableWiimotes)
|
||||
const bool should_enable_wiimotes =
|
||||
Running && bt && !SConfig::GetInstance().m_bt_passthrough_enabled;
|
||||
auto* const wiimote_1 = GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE1);
|
||||
auto* const wiimote_2 = GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE2);
|
||||
auto* const wiimote_3 = GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE3);
|
||||
auto* const wiimote_4 = GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE4);
|
||||
auto* const balance_board = GetMenuBar()->FindItem(IDM_CONNECT_BALANCEBOARD);
|
||||
|
||||
wiimote_1->Enable(should_enable_wiimotes);
|
||||
wiimote_2->Enable(should_enable_wiimotes);
|
||||
wiimote_3->Enable(should_enable_wiimotes);
|
||||
wiimote_4->Enable(should_enable_wiimotes);
|
||||
balance_board->Enable(should_enable_wiimotes);
|
||||
if (should_enable_wiimotes)
|
||||
{
|
||||
Core::RunAsCPUThread([&] {
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE1)->Check(bt->AccessWiiMote(0x0100)->IsConnected());
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE2)->Check(bt->AccessWiiMote(0x0101)->IsConnected());
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE3)->Check(bt->AccessWiiMote(0x0102)->IsConnected());
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE4)->Check(bt->AccessWiiMote(0x0103)->IsConnected());
|
||||
GetMenuBar()
|
||||
->FindItem(IDM_CONNECT_BALANCEBOARD)
|
||||
->Check(bt->AccessWiiMote(0x0104)->IsConnected());
|
||||
wiimote_1->Check(bt->AccessWiiMoteByIndex(0)->IsConnected());
|
||||
wiimote_2->Check(bt->AccessWiiMoteByIndex(1)->IsConnected());
|
||||
wiimote_3->Check(bt->AccessWiiMoteByIndex(2)->IsConnected());
|
||||
wiimote_4->Check(bt->AccessWiiMoteByIndex(3)->IsConnected());
|
||||
balance_board->Check(bt->AccessWiiMoteByIndex(4)->IsConnected());
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue