]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/joystick.cpp
Applied patch [ 1443707 ] kill "cast truncates constant value" warnings
[wxWidgets.git] / src / unix / joystick.cpp
index 0a32033ee32aad2cf472b190f297db1e44a2ef78..92e36ad5d795372fed3f81769b006cfda067bace 100644 (file)
@@ -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;
 }