// 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"
#include "wx/event.h"
#include "wx/window.h"
+#include "wx/unix/private.h"
enum {
wxJS_AXIS_X = 0,
fd_set read_fds;
struct timeval time_out = {0, 0};
- FD_ZERO(&read_fds);
+ wxFD_ZERO(&read_fds);
while (true)
{
if (TestDestroy())
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));
{
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);
return (m_device != -1);
}
-int wxJoystick::GetNumberJoysticks() const
+int wxJoystick::GetNumberJoysticks()
{
wxString dev_name;
int fd, j;
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;
}