Merge pull request #7143 from lioncash/bt-helper

BTEmu: Make m_WiiMotes private
This commit is contained in:
Markus Wick 2018-06-21 10:00:28 +02:00 committed by GitHub
commit b4b9b53239
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 51 additions and 36 deletions

View File

@ -59,7 +59,7 @@ State GetState();
void SaveScreenShot(bool wait_for_completion = false);
void SaveScreenShot(const std::string& name, bool wait_for_completion = false);
void Callback_WiimoteInterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);
void Callback_WiimoteInterruptChannel(int number, u16 channel_id, const u8* data, u32 size);
// This displays messages in a user-visible way.
void DisplayMessage(const std::string& message, int time_in_ms);

View File

@ -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);
}

View File

@ -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 =

View File

@ -4,10 +4,9 @@
#pragma once
#include <algorithm>
#include <cstddef>
#include <deque>
#include <memory>
#include <queue>
#include <string>
#include <vector>
@ -57,13 +56,13 @@ public:
bool RemoteDisconnect(u16 _connectionHandle);
std::vector<WiimoteDevice> m_WiiMotes;
WiimoteDevice* AccessWiiMote(const bdaddr_t& _rAddr);
WiimoteDevice* AccessWiiMote(u16 _ConnectionHandle);
WiimoteDevice* AccessWiiMoteByIndex(std::size_t index);
void DoState(PointerWrap& p) override;
private:
std::vector<WiimoteDevice> m_WiiMotes;
bdaddr_t m_ControllerBD{{0x11, 0x02, 0x19, 0x79, 0x00, 0xff}};
// this is used to trigger connecting via ACL
@ -101,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);

View File

@ -914,12 +914,10 @@ void WiimoteDevice::ReceiveL2capData(u16 scid, const void* data, u32 size)
namespace Core
{
/* This is called continuously from the Wiimote plugin as soon as it has received
a reporting mode. _Size is the byte size of the report. */
void Callback_WiimoteInterruptChannel(int number, u16 channel_id, const void* opaque_data, u32 size)
// This is called continuously from the Wiimote plugin as soon as it has received
// a reporting mode. size is the byte size of the report.
void Callback_WiimoteInterruptChannel(int number, u16 channel_id, const u8* data, u32 size)
{
const u8* data = (const u8*)opaque_data;
DEBUG_LOG(WIIMOTE, "====================");
DEBUG_LOG(WIIMOTE, "Callback_WiimoteInterruptChannel: (Wiimote: #%i)", number);
DEBUG_LOG(WIIMOTE, " Data: %s", ArrayToString(data, size, 50).c_str());
@ -928,6 +926,6 @@ void Callback_WiimoteInterruptChannel(int number, u16 channel_id, const void* op
const auto bt = std::static_pointer_cast<IOS::HLE::Device::BluetoothEmu>(
IOS::HLE::GetIOS()->GetDeviceByName("/dev/usb/oh1/57e/305"));
if (bt)
bt->m_WiiMotes[number].ReceiveL2capData(channel_id, opaque_data, size);
bt->AccessWiiMoteByIndex(number)->ReceiveL2capData(channel_id, data, size);
}
}

View File

@ -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);
}
}

View File

@ -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);
});
}

View File

@ -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());
}
}

View File

@ -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());
});
}