Merge pull request #2199 from skidau/remove-controls-lock
Cleaned up the controller locking mechanism
This commit is contained in:
commit
a86f2fe2e7
|
@ -55,8 +55,6 @@ void GetStatus(u8 _port, KeyboardStatus* _pKeyboardStatus)
|
||||||
memset(_pKeyboardStatus, 0, sizeof(*_pKeyboardStatus));
|
memset(_pKeyboardStatus, 0, sizeof(*_pKeyboardStatus));
|
||||||
_pKeyboardStatus->err = PAD_ERR_NONE;
|
_pKeyboardStatus->err = PAD_ERR_NONE;
|
||||||
|
|
||||||
std::unique_lock<std::recursive_mutex> lk(s_config.controls_lock, std::try_to_lock);
|
|
||||||
|
|
||||||
// get input
|
// get input
|
||||||
((GCKeyboard*)s_config.controllers[_port])->GetInput(_pKeyboardStatus);
|
((GCKeyboard*)s_config.controllers[_port])->GetInput(_pKeyboardStatus);
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,26 +57,17 @@ void GetStatus(u8 _numPAD, GCPadStatus* _pPADStatus)
|
||||||
memset(_pPADStatus, 0, sizeof(*_pPADStatus));
|
memset(_pPADStatus, 0, sizeof(*_pPADStatus));
|
||||||
_pPADStatus->err = PAD_ERR_NONE;
|
_pPADStatus->err = PAD_ERR_NONE;
|
||||||
|
|
||||||
std::unique_lock<std::recursive_mutex> lk(s_config.controls_lock, std::try_to_lock);
|
|
||||||
|
|
||||||
|
|
||||||
// get input
|
// get input
|
||||||
((GCPad*)s_config.controllers[_numPAD])->GetInput(_pPADStatus);
|
((GCPad*)s_config.controllers[_numPAD])->GetInput(_pPADStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Rumble(u8 _numPAD, const ControlState strength)
|
void Rumble(u8 _numPAD, const ControlState strength)
|
||||||
{
|
{
|
||||||
std::unique_lock<std::recursive_mutex> lk(s_config.controls_lock, std::try_to_lock);
|
|
||||||
|
|
||||||
((GCPad*)s_config.controllers[ _numPAD ])->SetOutput(strength);
|
((GCPad*)s_config.controllers[ _numPAD ])->SetOutput(strength);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GetMicButton(u8 pad)
|
bool GetMicButton(u8 pad)
|
||||||
{
|
{
|
||||||
|
|
||||||
std::unique_lock<std::recursive_mutex> lk(s_config.controls_lock, std::try_to_lock);
|
|
||||||
|
|
||||||
|
|
||||||
return ((GCPad*)s_config.controllers[pad])->GetMicButton();
|
return ((GCPad*)s_config.controllers[pad])->GetMicButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -118,9 +118,6 @@ void Update(int _number)
|
||||||
{
|
{
|
||||||
//PanicAlert( "Wiimote_Update" );
|
//PanicAlert( "Wiimote_Update" );
|
||||||
|
|
||||||
// TODO: change this to a try_to_lock, and make it give empty input on failure
|
|
||||||
std::unique_lock<std::recursive_mutex> lk(s_config.controls_lock, std::try_to_lock);
|
|
||||||
|
|
||||||
if (WIIMOTE_SRC_EMU & g_wiimote_sources[_number])
|
if (WIIMOTE_SRC_EMU & g_wiimote_sources[_number])
|
||||||
((WiimoteEmu::Wiimote*)s_config.controllers[_number])->Update();
|
((WiimoteEmu::Wiimote*)s_config.controllers[_number])->Update();
|
||||||
else
|
else
|
||||||
|
|
|
@ -300,7 +300,6 @@ void GamepadPage::ClearAll(wxCommandEvent&)
|
||||||
// no point in using the real ControllerInterface i guess
|
// no point in using the real ControllerInterface i guess
|
||||||
ControllerInterface face;
|
ControllerInterface face;
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
controller->UpdateReferences(face);
|
controller->UpdateReferences(face);
|
||||||
|
|
||||||
UpdateGUI();
|
UpdateGUI();
|
||||||
|
@ -310,7 +309,6 @@ void GamepadPage::LoadDefaults(wxCommandEvent&)
|
||||||
{
|
{
|
||||||
controller->LoadDefaults(g_controller_interface);
|
controller->LoadDefaults(g_controller_interface);
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
controller->UpdateReferences(g_controller_interface);
|
controller->UpdateReferences(g_controller_interface);
|
||||||
|
|
||||||
UpdateGUI();
|
UpdateGUI();
|
||||||
|
@ -320,7 +318,6 @@ bool ControlDialog::Validate()
|
||||||
{
|
{
|
||||||
control_reference->expression = WxStrToStr(textctrl->GetValue());
|
control_reference->expression = WxStrToStr(textctrl->GetValue());
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
||||||
|
|
||||||
UpdateGUI();
|
UpdateGUI();
|
||||||
|
@ -339,7 +336,6 @@ void GamepadPage::SetDevice(wxCommandEvent&)
|
||||||
controller->UpdateDefaultDevice();
|
controller->UpdateDefaultDevice();
|
||||||
|
|
||||||
// update references
|
// update references
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
controller->UpdateReferences(g_controller_interface);
|
controller->UpdateReferences(g_controller_interface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,7 +354,6 @@ void ControlDialog::ClearControl(wxCommandEvent&)
|
||||||
{
|
{
|
||||||
control_reference->expression.clear();
|
control_reference->expression.clear();
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
||||||
|
|
||||||
UpdateGUI();
|
UpdateGUI();
|
||||||
|
@ -420,7 +415,6 @@ void ControlDialog::SetSelectedControl(wxCommandEvent&)
|
||||||
textctrl->WriteText(expr);
|
textctrl->WriteText(expr);
|
||||||
control_reference->expression = textctrl->GetValue();
|
control_reference->expression = textctrl->GetValue();
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
||||||
|
|
||||||
UpdateGUI();
|
UpdateGUI();
|
||||||
|
@ -455,7 +449,6 @@ void ControlDialog::AppendControl(wxCommandEvent& event)
|
||||||
textctrl->WriteText(expr);
|
textctrl->WriteText(expr);
|
||||||
control_reference->expression = textctrl->GetValue();
|
control_reference->expression = textctrl->GetValue();
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
||||||
|
|
||||||
UpdateGUI();
|
UpdateGUI();
|
||||||
|
@ -463,20 +456,17 @@ void ControlDialog::AppendControl(wxCommandEvent& event)
|
||||||
|
|
||||||
void GamepadPage::AdjustSetting(wxCommandEvent& event)
|
void GamepadPage::AdjustSetting(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
((PadSetting*)((wxControl*)event.GetEventObject())->GetClientData())->UpdateValue();
|
((PadSetting*)((wxControl*)event.GetEventObject())->GetClientData())->UpdateValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GamepadPage::AdjustSettingUI(wxCommandEvent& event)
|
void GamepadPage::AdjustSettingUI(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
m_iterate = !m_iterate;
|
m_iterate = !m_iterate;
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
((PadSetting*)((wxControl*)event.GetEventObject())->GetClientData())->UpdateValue();
|
((PadSetting*)((wxControl*)event.GetEventObject())->GetClientData())->UpdateValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GamepadPage::AdjustControlOption(wxCommandEvent&)
|
void GamepadPage::AdjustControlOption(wxCommandEvent&)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
m_control_dialog->control_reference->range = (ControlState)(m_control_dialog->range_slider->GetValue()) / SLIDER_TICK_COUNT;
|
m_control_dialog->control_reference->range = (ControlState)(m_control_dialog->range_slider->GetValue()) / SLIDER_TICK_COUNT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -496,7 +486,6 @@ void GamepadPage::ClearControl(wxEvent& event)
|
||||||
btn->control_reference->expression.clear();
|
btn->control_reference->expression.clear();
|
||||||
btn->control_reference->range = 1.0;
|
btn->control_reference->range = 1.0;
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
controller->UpdateReferences(g_controller_interface);
|
controller->UpdateReferences(g_controller_interface);
|
||||||
|
|
||||||
// update changes
|
// update changes
|
||||||
|
@ -516,7 +505,6 @@ void ControlDialog::DetectControl(wxCommandEvent& event)
|
||||||
// This makes the "waiting" text work on Linux. true (only if needed) prevents crash on Windows
|
// This makes the "waiting" text work on Linux. true (only if needed) prevents crash on Windows
|
||||||
wxTheApp->Yield(true);
|
wxTheApp->Yield(true);
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
ciface::Core::Device::Control* const ctrl = control_reference->Detect(DETECT_WAIT_TIME, dev);
|
ciface::Core::Device::Control* const ctrl = control_reference->Detect(DETECT_WAIT_TIME, dev);
|
||||||
|
|
||||||
// if we got input, select it in the list
|
// if we got input, select it in the list
|
||||||
|
@ -556,7 +544,6 @@ bool GamepadPage::DetectButton(ControlButton* button)
|
||||||
// This makes the "waiting" text work on Linux. true (only if needed) prevents crash on Windows
|
// This makes the "waiting" text work on Linux. true (only if needed) prevents crash on Windows
|
||||||
wxTheApp->Yield(true);
|
wxTheApp->Yield(true);
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
ciface::Core::Device::Control* const ctrl = button->control_reference->Detect(DETECT_WAIT_TIME, dev);
|
ciface::Core::Device::Control* const ctrl = button->control_reference->Detect(DETECT_WAIT_TIME, dev);
|
||||||
|
|
||||||
// if we got input, update expression and reference
|
// if we got input, update expression and reference
|
||||||
|
@ -681,7 +668,6 @@ void GamepadPage::LoadProfile(wxCommandEvent&)
|
||||||
IniFile inifile;
|
IniFile inifile;
|
||||||
inifile.Load(fname);
|
inifile.Load(fname);
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
controller->LoadConfig(inifile.GetOrCreateSection("Profile"));
|
controller->LoadConfig(inifile.GetOrCreateSection("Profile"));
|
||||||
controller->UpdateReferences(g_controller_interface);
|
controller->UpdateReferences(g_controller_interface);
|
||||||
|
|
||||||
|
@ -746,8 +732,6 @@ void GamepadPage::RefreshDevices(wxCommandEvent&)
|
||||||
{
|
{
|
||||||
bool was_unpaused = Core::PauseAndLock(true);
|
bool was_unpaused = Core::PauseAndLock(true);
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
|
|
||||||
|
|
||||||
// refresh devices
|
// refresh devices
|
||||||
g_controller_interface.Reinitialize();
|
g_controller_interface.Reinitialize();
|
||||||
|
|
||||||
|
|
|
@ -453,11 +453,6 @@ void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
|
||||||
|
|
||||||
g_controller_interface.UpdateInput();
|
g_controller_interface.UpdateInput();
|
||||||
|
|
||||||
// don't want game thread updating input when we are using it here
|
|
||||||
std::unique_lock<std::recursive_mutex> lk(g_controller_interface.update_lock, std::try_to_lock);
|
|
||||||
if (!lk.owns_lock())
|
|
||||||
return;
|
|
||||||
|
|
||||||
GamepadPage* const current_page = (GamepadPage*)m_pad_notebook->GetPage(m_pad_notebook->GetSelection());
|
GamepadPage* const current_page = (GamepadPage*)m_pad_notebook->GetPage(m_pad_notebook->GetSelection());
|
||||||
|
|
||||||
for (ControlGroupBox* g : current_page->control_groups)
|
for (ControlGroupBox* g : current_page->control_groups)
|
||||||
|
|
|
@ -134,8 +134,6 @@ void ControllerInterface::Shutdown()
|
||||||
//
|
//
|
||||||
void ControllerInterface::UpdateInput()
|
void ControllerInterface::UpdateInput()
|
||||||
{
|
{
|
||||||
std::unique_lock<std::recursive_mutex> lk(update_lock, std::defer_lock);
|
|
||||||
|
|
||||||
for (ciface::Core::Device* d : m_devices)
|
for (ciface::Core::Device* d : m_devices)
|
||||||
d->UpdateInput();
|
d->UpdateInput();
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,8 +122,6 @@ public:
|
||||||
void UpdateReference(ControlReference* control, const ciface::Core::DeviceQualifier& default_device) const;
|
void UpdateReference(ControlReference* control, const ciface::Core::DeviceQualifier& default_device) const;
|
||||||
void UpdateInput();
|
void UpdateInput();
|
||||||
|
|
||||||
std::recursive_mutex update_lock;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_is_init;
|
bool m_is_init;
|
||||||
void* m_hwnd;
|
void* m_hwnd;
|
||||||
|
|
|
@ -26,8 +26,6 @@ public:
|
||||||
|
|
||||||
std::vector<ControllerEmu*> controllers;
|
std::vector<ControllerEmu*> controllers;
|
||||||
|
|
||||||
std::recursive_mutex controls_lock; // for changing any control references
|
|
||||||
|
|
||||||
const char* const ini_name;
|
const char* const ini_name;
|
||||||
const char* const gui_name;
|
const char* const gui_name;
|
||||||
const char* const profile_name;
|
const char* const profile_name;
|
||||||
|
|
Loading…
Reference in New Issue