X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/627b2b2a0db4017fe243ee5d676b04eebf5bb632..de63b922cadc81306a1905c81cfd0be7ae32adbb:/src/unix/joystick.cpp diff --git a/src/unix/joystick.cpp b/src/unix/joystick.cpp index 0a32033ee3..92e36ad5d7 100644 --- a/src/unix/joystick.cpp +++ b/src/unix/joystick.cpp @@ -9,10 +9,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "joystick.h" -#endif - // for compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -32,6 +28,7 @@ #include "wx/event.h" #include "wx/window.h" +#include "wx/unix/private.h" enum { wxJS_AXIS_X = 0, @@ -91,7 +88,7 @@ void* wxJoystickThread::Entry() fd_set read_fds; struct timeval time_out = {0, 0}; - FD_ZERO(&read_fds); + wxFD_ZERO(&read_fds); while (true) { if (TestDestroy()) @@ -104,9 +101,9 @@ void* wxJoystickThread::Entry() else time_out.tv_usec = 10 * 1000; // check at least every 10 msec in blocking case - FD_SET(m_device, &read_fds); + wxFD_SET(m_device, &read_fds); select(m_device+1, &read_fds, NULL, NULL, &time_out); - if (FD_ISSET(m_device, &read_fds)) + if (wxFD_ISSET(m_device, &read_fds)) { memset(&j_evt, 0, sizeof(j_evt)); read(m_device, &j_evt, sizeof(j_evt)); @@ -183,10 +180,17 @@ wxJoystick::wxJoystick(int joystick) { wxString dev_name; - // Assume it's the same device name on all Linux systems ... - dev_name.Printf( wxT("/dev/js%d"), (joystick == wxJOYSTICK1) ? 0 : 1); + // old /dev structure + dev_name.Printf( wxT("/dev/js%d"), joystick); m_device = open(dev_name.fn_str(), O_RDONLY); + // new /dev structure with "input" subdirectory + if (m_device == -1) + { + dev_name.Printf( wxT("/dev/input/js%d"), joystick); + m_device = open(dev_name.fn_str(), O_RDONLY); + } + if (m_device != -1) { m_thread = new wxJoystickThread(m_device, m_joystick); @@ -279,7 +283,7 @@ bool wxJoystick::IsOk() const return (m_device != -1); } -int wxJoystick::GetNumberJoysticks() const +int wxJoystick::GetNumberJoysticks() { wxString dev_name; int fd, j; @@ -288,9 +292,20 @@ int wxJoystick::GetNumberJoysticks() const dev_name.Printf(wxT("/dev/js%d"), j); fd = open(dev_name.fn_str(), O_RDONLY); if (fd == -1) - return j; + break; close(fd); } + + if (j == 0) { + for (j=0; j<4; j++) { + dev_name.Printf(wxT("/dev/input/js%d"), j); + fd = open(dev_name.fn_str(), O_RDONLY); + if (fd == -1) + return j; + close(fd); + } + } + return j; }