mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-14 13:27:45 -07:00
Move the Wiimote connect code out of Host
I don't know who thought it would be a good idea to put the Wiimote connect code as part of the Host interface, and have that called from both the UI code and the core. And then hack around it by having "force connect" events whenever Host_ConnectWiimote is called from the core...
This commit is contained in:
parent
9237137c3a
commit
ee868e2362
@ -140,10 +140,6 @@ bool Host_RendererIsFullscreen()
|
||||
return false;
|
||||
}
|
||||
|
||||
void Host_ConnectWiimote(int wm_idx, bool connect)
|
||||
{
|
||||
}
|
||||
|
||||
void Host_ShowVideoConfig(void*, const std::string&)
|
||||
{
|
||||
}
|
||||
|
@ -6,9 +6,15 @@
|
||||
|
||||
#include "Common/ChunkFile.h"
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "Common/StringUtil.h"
|
||||
|
||||
#include "Core/ConfigManager.h"
|
||||
#include "Core/Core.h"
|
||||
#include "Core/HW/WiimoteEmu/WiimoteEmu.h"
|
||||
#include "Core/HW/WiimoteReal/WiimoteReal.h"
|
||||
#include "Core/IOS/IOS.h"
|
||||
#include "Core/IOS/USB/Bluetooth/BTEmu.h"
|
||||
#include "Core/IOS/USB/Bluetooth/WiimoteDevice.h"
|
||||
#include "Core/Movie.h"
|
||||
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/ControlGroup.h"
|
||||
@ -81,6 +87,25 @@ void Initialize(InitializeMode init_mode)
|
||||
Movie::ChangeWiiPads();
|
||||
}
|
||||
|
||||
void Connect(unsigned int index, bool connect)
|
||||
{
|
||||
if (SConfig::GetInstance().m_bt_passthrough_enabled || index >= MAX_BBMOTES)
|
||||
return;
|
||||
|
||||
const auto ios = IOS::HLE::GetIOS();
|
||||
if (!ios)
|
||||
return;
|
||||
|
||||
const auto bluetooth = std::static_pointer_cast<IOS::HLE::Device::BluetoothEmu>(
|
||||
ios->GetDeviceByName("/dev/usb/oh1/57e/305"));
|
||||
|
||||
if (bluetooth)
|
||||
bluetooth->AccessWiiMote(index | 0x100)->Activate(connect);
|
||||
|
||||
const char* message = connect ? "Wii Remote %i connected" : "Wii Remote %i disconnected";
|
||||
Core::DisplayMessage(StringFromFormat(message, index + 1), 3000);
|
||||
}
|
||||
|
||||
void ResetAllWiimotes()
|
||||
{
|
||||
for (int i = WIIMOTE_CHAN_0; i < MAX_BBMOTES; ++i)
|
||||
|
@ -58,6 +58,7 @@ enum class InitializeMode
|
||||
|
||||
void Shutdown();
|
||||
void Initialize(InitializeMode init_mode);
|
||||
void Connect(unsigned int index, bool connect);
|
||||
void ResetAllWiimotes();
|
||||
void LoadConfig();
|
||||
void Resume();
|
||||
|
@ -948,7 +948,7 @@ void Wiimote::ConnectOnInput()
|
||||
|
||||
if (buttons != 0 || m_extension->IsButtonPressed())
|
||||
{
|
||||
Host_ConnectWiimote(m_index, true);
|
||||
::Wiimote::Connect(m_index, true);
|
||||
// arbitrary value so it doesn't try to send multiple requests before Dolphin can react
|
||||
// if Wii Remotes are polled at 200Hz then this results in one request being sent per 500ms
|
||||
m_last_connect_request_counter = 100;
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "Common/Thread.h"
|
||||
#include "Core/ConfigManager.h"
|
||||
#include "Core/Core.h"
|
||||
#include "Core/HW/Wiimote.h"
|
||||
#include "Core/HW/WiimoteCommon/WiimoteHid.h"
|
||||
#include "Core/HW/WiimoteEmu/WiimoteEmu.h"
|
||||
#include "Core/HW/WiimoteReal/IOAndroid.h"
|
||||
@ -390,7 +391,7 @@ void Wiimote::ConnectOnInput()
|
||||
// check any button without checking accelerometer data
|
||||
if ((rpt[2] & 0x1F) != 0 || (rpt[3] & 0x9F) != 0)
|
||||
{
|
||||
Host_ConnectWiimote(m_index, true);
|
||||
::Wiimote::Connect(m_index, true);
|
||||
// see WiimoteEmu::Wiimote::ConnectOnInput(), same idea here
|
||||
m_last_connect_request_counter = 100;
|
||||
}
|
||||
@ -795,11 +796,14 @@ void ChangeWiimoteSource(unsigned int index, int source)
|
||||
}
|
||||
|
||||
// reconnect to the emulator
|
||||
Host_ConnectWiimote(index, false);
|
||||
if (WIIMOTE_SRC_EMU & source)
|
||||
Host_ConnectWiimote(index, true);
|
||||
Core::RunAsCPUThread([index, source] {
|
||||
::Wiimote::Connect(index, false);
|
||||
if (WIIMOTE_SRC_EMU & source)
|
||||
::Wiimote::Connect(index, true);
|
||||
});
|
||||
}
|
||||
|
||||
// Called from the Wiimote scanner thread
|
||||
static bool TryToConnectWiimoteToSlot(Wiimote* wm, unsigned int i)
|
||||
{
|
||||
if (WIIMOTE_SRC_REAL & g_wiimote_sources[i] && !g_wiimotes[i])
|
||||
@ -808,7 +812,7 @@ static bool TryToConnectWiimoteToSlot(Wiimote* wm, unsigned int i)
|
||||
{
|
||||
NOTICE_LOG(WIIMOTE, "Connected to Wiimote %i.", i + 1);
|
||||
g_wiimotes[i] = wm;
|
||||
Host_ConnectWiimote(i, true);
|
||||
Core::RunAsCPUThread([i] { ::Wiimote::Connect(i, true); });
|
||||
std::lock_guard<std::mutex> lk(s_known_ids_mutex);
|
||||
s_known_ids.insert(wm->GetId());
|
||||
}
|
||||
@ -884,13 +888,11 @@ void Update(int wiimote_number)
|
||||
if (g_wiimotes[wiimote_number])
|
||||
g_wiimotes[wiimote_number]->Update();
|
||||
|
||||
g_wiimotes_mutex.unlock();
|
||||
|
||||
// Wiimote::Update() may remove the Wiimote if it was disconnected.
|
||||
if (!g_wiimotes[wiimote_number])
|
||||
{
|
||||
Host_ConnectWiimote(wiimote_number, false);
|
||||
}
|
||||
|
||||
g_wiimotes_mutex.unlock();
|
||||
::Wiimote::Connect(wiimote_number, false);
|
||||
}
|
||||
|
||||
void ConnectOnInput(int wiimote_number)
|
||||
|
@ -26,7 +26,6 @@
|
||||
bool Host_UINeedsControllerState();
|
||||
bool Host_RendererHasFocus();
|
||||
bool Host_RendererIsFullscreen();
|
||||
void Host_ConnectWiimote(int wm_idx, bool connect);
|
||||
void Host_Message(int Id);
|
||||
void Host_NotifyMapLoaded();
|
||||
void Host_RefreshDSPDebuggerWindow();
|
||||
|
@ -22,12 +22,9 @@
|
||||
#include "Core/BootManager.h"
|
||||
#include "Core/ConfigManager.h"
|
||||
#include "Core/Core.h"
|
||||
#include "Core/HW/Wiimote.h"
|
||||
#include "Core/Host.h"
|
||||
#include "Core/IOS/IOS.h"
|
||||
#include "Core/IOS/STM/STM.h"
|
||||
#include "Core/IOS/USB/Bluetooth/BTEmu.h"
|
||||
#include "Core/IOS/USB/Bluetooth/WiimoteDevice.h"
|
||||
#include "Core/State.h"
|
||||
|
||||
#include "UICommon/CommandLineParse.h"
|
||||
@ -131,22 +128,6 @@ bool Host_RendererIsFullscreen()
|
||||
return rendererIsFullscreen;
|
||||
}
|
||||
|
||||
void Host_ConnectWiimote(int wm_idx, bool connect)
|
||||
{
|
||||
Core::QueueHostJob([=] {
|
||||
const auto ios = IOS::HLE::GetIOS();
|
||||
if (!ios || SConfig::GetInstance().m_bt_passthrough_enabled)
|
||||
return;
|
||||
Core::RunAsCPUThread([&] {
|
||||
const auto bt = std::static_pointer_cast<IOS::HLE::Device::BluetoothEmu>(
|
||||
ios->GetDeviceByName("/dev/usb/oh1/57e/305"));
|
||||
if (bt)
|
||||
bt->AccessWiiMote(wm_idx | 0x100)->Activate(connect);
|
||||
Host_UpdateMainFrame();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
void Host_ShowVideoConfig(void*, const std::string&)
|
||||
{
|
||||
}
|
||||
|
@ -104,9 +104,6 @@ void Host_NotifyMapLoaded()
|
||||
void Host_UpdateDisasmDialog()
|
||||
{
|
||||
}
|
||||
void Host_ConnectWiimote(int wm_idx, bool connect)
|
||||
{
|
||||
}
|
||||
void Host_ShowVideoConfig(void* parent, const std::string& backend_name)
|
||||
{
|
||||
}
|
||||
|
@ -817,22 +817,6 @@ void CFrame::OnHostMessage(wxCommandEvent& event)
|
||||
case IDM_STOPPED:
|
||||
OnStopped();
|
||||
break;
|
||||
|
||||
case IDM_FORCE_CONNECT_WIIMOTE1:
|
||||
case IDM_FORCE_CONNECT_WIIMOTE2:
|
||||
case IDM_FORCE_CONNECT_WIIMOTE3:
|
||||
case IDM_FORCE_CONNECT_WIIMOTE4:
|
||||
case IDM_FORCE_CONNECT_BALANCEBOARD:
|
||||
ConnectWiimote(event.GetId() - IDM_FORCE_CONNECT_WIIMOTE1, true);
|
||||
break;
|
||||
|
||||
case IDM_FORCE_DISCONNECT_WIIMOTE1:
|
||||
case IDM_FORCE_DISCONNECT_WIIMOTE2:
|
||||
case IDM_FORCE_DISCONNECT_WIIMOTE3:
|
||||
case IDM_FORCE_DISCONNECT_WIIMOTE4:
|
||||
case IDM_FORCE_DISCONNECT_BALANCEBOARD:
|
||||
ConnectWiimote(event.GetId() - IDM_FORCE_DISCONNECT_WIIMOTE1, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -256,7 +256,6 @@ private:
|
||||
void OnStopped();
|
||||
void OnRenderWindowSizeRequest(int width, int height);
|
||||
void UpdateTitle(const wxString& str);
|
||||
static void ConnectWiimote(int wm_idx, bool connect);
|
||||
|
||||
// Event functions
|
||||
void PostEvent(wxCommandEvent& event);
|
||||
|
@ -1406,27 +1406,6 @@ void CFrame::OnFifoPlayer(wxCommandEvent& WXUNUSED(event))
|
||||
}
|
||||
}
|
||||
|
||||
void CFrame::ConnectWiimote(int wm_idx, bool connect)
|
||||
{
|
||||
if (Core::IsRunning() && SConfig::GetInstance().bWii &&
|
||||
!SConfig::GetInstance().m_bt_passthrough_enabled)
|
||||
{
|
||||
Core::RunAsCPUThread([&] {
|
||||
const auto ios = IOS::HLE::GetIOS();
|
||||
if (!ios)
|
||||
return;
|
||||
|
||||
const auto bt = std::static_pointer_cast<IOS::HLE::Device::BluetoothEmu>(
|
||||
ios->GetDeviceByName("/dev/usb/oh1/57e/305"));
|
||||
if (bt)
|
||||
bt->AccessWiiMote(wm_idx | 0x100)->Activate(connect);
|
||||
const char* message = connect ? "Wii Remote %i connected" : "Wii Remote %i disconnected";
|
||||
Core::DisplayMessage(StringFromFormat(message, wm_idx + 1), 3000);
|
||||
Host_UpdateMainFrame();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void CFrame::OnConnectWiimote(wxCommandEvent& event)
|
||||
{
|
||||
const auto ios = IOS::HLE::GetIOS();
|
||||
@ -1435,9 +1414,9 @@ void CFrame::OnConnectWiimote(wxCommandEvent& event)
|
||||
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((event.GetId() - IDM_CONNECT_WIIMOTE1) | 0x100)->IsConnected();
|
||||
ConnectWiimote(event.GetId() - IDM_CONNECT_WIIMOTE1, !is_connected);
|
||||
const unsigned int wiimote_index = event.GetId() - IDM_CONNECT_WIIMOTE1;
|
||||
const bool is_connected = bt && bt->AccessWiiMote(wiimote_index | 0x100)->IsConnected();
|
||||
Wiimote::Connect(wiimote_index, !is_connected);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -308,18 +308,6 @@ enum
|
||||
IDM_STOPPED,
|
||||
IDM_HOST_MESSAGE,
|
||||
|
||||
// Used for Host_ConnectWiimote()
|
||||
IDM_FORCE_CONNECT_WIIMOTE1,
|
||||
IDM_FORCE_CONNECT_WIIMOTE2,
|
||||
IDM_FORCE_CONNECT_WIIMOTE3,
|
||||
IDM_FORCE_CONNECT_WIIMOTE4,
|
||||
IDM_FORCE_CONNECT_BALANCEBOARD,
|
||||
IDM_FORCE_DISCONNECT_WIIMOTE1,
|
||||
IDM_FORCE_DISCONNECT_WIIMOTE2,
|
||||
IDM_FORCE_DISCONNECT_WIIMOTE3,
|
||||
IDM_FORCE_DISCONNECT_WIIMOTE4,
|
||||
IDM_FORCE_DISCONNECT_BALANCEBOARD,
|
||||
|
||||
IDM_MPANEL,
|
||||
ID_STATUSBAR,
|
||||
|
||||
|
@ -5,7 +5,6 @@
|
||||
#include <OptionParser.h>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <wx/app.h>
|
||||
@ -70,8 +69,6 @@ std::string wxStringTranslator(const char*);
|
||||
|
||||
CFrame* main_frame = nullptr;
|
||||
|
||||
static std::mutex s_init_mutex;
|
||||
|
||||
bool DolphinApp::Initialize(int& c, wxChar** v)
|
||||
{
|
||||
#if defined HAVE_X11 && HAVE_X11
|
||||
@ -122,8 +119,6 @@ bool DolphinApp::OnInit()
|
||||
|
||||
ParseCommandLine();
|
||||
|
||||
std::lock_guard<std::mutex> lk(s_init_mutex);
|
||||
|
||||
UICommon::SetUserDirectory(m_user_path.ToStdString());
|
||||
UICommon::CreateDirectories();
|
||||
InitLanguageSupport(); // The language setting is loaded from the user directory
|
||||
@ -473,21 +468,6 @@ bool Host_RendererIsFullscreen()
|
||||
return main_frame->RendererIsFullscreen();
|
||||
}
|
||||
|
||||
void Host_ConnectWiimote(int wm_idx, bool connect)
|
||||
{
|
||||
std::lock_guard<std::mutex> lk(s_init_mutex);
|
||||
if (connect)
|
||||
{
|
||||
wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_FORCE_CONNECT_WIIMOTE1 + wm_idx);
|
||||
main_frame->GetEventHandler()->AddPendingEvent(event);
|
||||
}
|
||||
else
|
||||
{
|
||||
wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_FORCE_DISCONNECT_WIIMOTE1 + wm_idx);
|
||||
main_frame->GetEventHandler()->AddPendingEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
void Host_ShowVideoConfig(void* parent, const std::string& backend_name)
|
||||
{
|
||||
wxWindow* const parent_window = static_cast<wxWindow*>(parent);
|
||||
|
@ -51,9 +51,6 @@ bool Host_RendererIsFullscreen()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
void Host_ConnectWiimote(int, bool)
|
||||
{
|
||||
}
|
||||
void Host_ShowVideoConfig(void*, const std::string&)
|
||||
{
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user