IH_Linux_Joystick cleanup. Hack to make sure thread gets started.
This commit is contained in:
@@ -10,7 +10,6 @@
|
|||||||
class InputHandler_Linux_Event: public InputHandler
|
class InputHandler_Linux_Event: public InputHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum { NUM_JOYSTICKS = 4 };
|
|
||||||
InputHandler_Linux_Event();
|
InputHandler_Linux_Event();
|
||||||
~InputHandler_Linux_Event();
|
~InputHandler_Linux_Event();
|
||||||
bool TryDevice(RString devfile);
|
bool TryDevice(RString devfile);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "LinuxInputManager.h"
|
#include "LinuxInputManager.h"
|
||||||
|
#include "RageInputDevice.h" // NUM_JOYSTICKS
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@@ -16,14 +17,6 @@
|
|||||||
|
|
||||||
REGISTER_INPUT_HANDLER_CLASS2( LinuxJoystick, Linux_Joystick );
|
REGISTER_INPUT_HANDLER_CLASS2( LinuxJoystick, Linux_Joystick );
|
||||||
|
|
||||||
static const char *Paths[InputHandler_Linux_Joystick::NUM_JOYSTICKS] =
|
|
||||||
{
|
|
||||||
"/dev/js0",
|
|
||||||
"/dev/js1",
|
|
||||||
"/dev/input/js0",
|
|
||||||
"/dev/input/js1",
|
|
||||||
};
|
|
||||||
|
|
||||||
InputHandler_Linux_Joystick::InputHandler_Linux_Joystick()
|
InputHandler_Linux_Joystick::InputHandler_Linux_Joystick()
|
||||||
{
|
{
|
||||||
m_bDevicesChanged = false;
|
m_bDevicesChanged = false;
|
||||||
@@ -37,11 +30,6 @@ InputHandler_Linux_Joystick::InputHandler_Linux_Joystick()
|
|||||||
if( LINUXINPUT == NULL ) LINUXINPUT = new LinuxInputManager;
|
if( LINUXINPUT == NULL ) LINUXINPUT = new LinuxInputManager;
|
||||||
LINUXINPUT->InitDriver(this);
|
LINUXINPUT->InitDriver(this);
|
||||||
|
|
||||||
for(int i = 0; i < NUM_JOYSTICKS; ++i)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if( fds[0] != -1 ) // LinuxInputManager found at least one valid joystick for us
|
if( fds[0] != -1 ) // LinuxInputManager found at least one valid joystick for us
|
||||||
StartThread();
|
StartThread();
|
||||||
}
|
}
|
||||||
@@ -72,8 +60,6 @@ void InputHandler_Linux_Joystick::StopThread()
|
|||||||
|
|
||||||
bool InputHandler_Linux_Joystick::TryDevice(RString dev)
|
bool InputHandler_Linux_Joystick::TryDevice(RString dev)
|
||||||
{
|
{
|
||||||
bool hotplug = false;
|
|
||||||
|
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if( stat( dev, &st ) == -1 )
|
if( stat( dev, &st ) == -1 )
|
||||||
{ LOG->Warn( "LinuxJoystick: Couldn't stat %s: %s", dev.c_str(), strerror(errno) ); return false; }
|
{ LOG->Warn( "LinuxJoystick: Couldn't stat %s: %s", dev.c_str(), strerror(errno) ); return false; }
|
||||||
@@ -82,6 +68,7 @@ bool InputHandler_Linux_Joystick::TryDevice(RString dev)
|
|||||||
{ LOG->Warn( "LinuxJoystick: Ignoring %s: not a character device", dev.c_str() ); return false; }
|
{ LOG->Warn( "LinuxJoystick: Ignoring %s: not a character device", dev.c_str() ); return false; }
|
||||||
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
bool hotplug = false;
|
||||||
if( m_InputThread.IsCreated() ) { StopThread(); hotplug = true; }
|
if( m_InputThread.IsCreated() ) { StopThread(); hotplug = true; }
|
||||||
/* Thread is stopped! DO NOT RETURN */
|
/* Thread is stopped! DO NOT RETURN */
|
||||||
{
|
{
|
||||||
@@ -98,6 +85,7 @@ bool InputHandler_Linux_Joystick::TryDevice(RString dev)
|
|||||||
|
|
||||||
LOG->Info("LinuxJoystick: Opened %s", dev.c_str() );
|
LOG->Info("LinuxJoystick: Opened %s", dev.c_str() );
|
||||||
m_iLastFd++;
|
m_iLastFd++;
|
||||||
|
m_bDevicesChanged = true;
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
else LOG->Warn("LinuxJoystick: Failed to open %s: %s", dev.c_str(), strerror(errno) );
|
else LOG->Warn("LinuxJoystick: Failed to open %s: %s", dev.c_str(), strerror(errno) );
|
||||||
@@ -194,6 +182,11 @@ void InputHandler_Linux_Joystick::InputThread()
|
|||||||
|
|
||||||
void InputHandler_Linux_Joystick::GetDevicesAndDescriptions( vector<InputDeviceInfo>& vDevicesOut )
|
void InputHandler_Linux_Joystick::GetDevicesAndDescriptions( vector<InputDeviceInfo>& vDevicesOut )
|
||||||
{
|
{
|
||||||
|
// HACK: If IH_Linux_Joystick is constructed before IH_Linux_Event, our thread won't be started
|
||||||
|
// as part of the constructor. This isn't called until all InputHandlers have been constructed,
|
||||||
|
// and is (hopefully) in the same thread as TryDevice... so doublecheck our thread now.
|
||||||
|
if( !m_InputThread.IsCreated() ) StartThread();
|
||||||
|
|
||||||
for(int i = 0; i < NUM_JOYSTICKS; ++i)
|
for(int i = 0; i < NUM_JOYSTICKS; ++i)
|
||||||
{
|
{
|
||||||
if (fds[i] < 0)
|
if (fds[i] < 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user