projects
/
wxWidgets.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Compile fix.
[wxWidgets.git]
/
src
/
unix
/
joystick.cpp
diff --git
a/src/unix/joystick.cpp
b/src/unix/joystick.cpp
index 0a32033ee32aad2cf472b190f297db1e44a2ef78..64afa78cb989e8286f7a8fec2b91cb99e1e378e9 100644
(file)
--- a/
src/unix/joystick.cpp
+++ b/
src/unix/joystick.cpp
@@
-1,5
+1,5
@@
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-// Name: joystick.cpp
+// Name:
src/unix/
joystick.cpp
// Purpose: wxJoystick class
// Author: Ported to Linux by Guilhem Lavaux
// Modified by:
// Purpose: wxJoystick class
// Author: Ported to Linux by Guilhem Lavaux
// Modified by:
@@
-9,19
+9,18
@@
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// 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"
// for compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
-#include "wx/defs.h"
-
#if wxUSE_JOYSTICK
#include "wx/joystick.h"
#if wxUSE_JOYSTICK
#include "wx/joystick.h"
+#ifndef WX_PRECOMP
+ #include "wx/event.h"
+ #include "wx/window.h"
+#endif //WX_PRECOMP
+
#include <linux/joystick.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/joystick.h>
#include <sys/types.h>
#include <sys/stat.h>
@@
-30,8
+29,11
@@
#include <fcntl.h>
#include <unistd.h>
#include <fcntl.h>
#include <unistd.h>
-#include "wx/event.h"
-#include "wx/window.h"
+#ifdef HAVE_SYS_SELECT_H
+# include <sys/select.h>
+#endif
+
+#include "wx/unix/private.h"
enum {
wxJS_AXIS_X = 0,
enum {
wxJS_AXIS_X = 0,
@@
-91,7
+93,7
@@
void* wxJoystickThread::Entry()
fd_set read_fds;
struct timeval time_out = {0, 0};
fd_set read_fds;
struct timeval time_out = {0, 0};
- FD_ZERO(&read_fds);
+
wx
FD_ZERO(&read_fds);
while (true)
{
if (TestDestroy())
while (true)
{
if (TestDestroy())
@@
-104,9
+106,9
@@
void* wxJoystickThread::Entry()
else
time_out.tv_usec = 10 * 1000; // check at least every 10 msec in blocking case
else
time_out.tv_usec = 10 * 1000; // check at least every 10 msec in blocking case
- FD_SET(m_device, &read_fds);
+
wx
FD_SET(m_device, &read_fds);
select(m_device+1, &read_fds, NULL, NULL, &time_out);
select(m_device+1, &read_fds, NULL, NULL, &time_out);
- if (FD_ISSET(m_device, &read_fds))
+ if (
wx
FD_ISSET(m_device, &read_fds))
{
memset(&j_evt, 0, sizeof(j_evt));
read(m_device, &j_evt, sizeof(j_evt));
{
memset(&j_evt, 0, sizeof(j_evt));
read(m_device, &j_evt, sizeof(j_evt));
@@
-183,10
+185,17
@@
wxJoystick::wxJoystick(int joystick)
{
wxString dev_name;
{
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);
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);
if (m_device != -1)
{
m_thread = new wxJoystickThread(m_device, m_joystick);
@@
-279,7
+288,7
@@
bool wxJoystick::IsOk() const
return (m_device != -1);
}
return (m_device != -1);
}
-int wxJoystick::GetNumberJoysticks()
const
+int wxJoystick::GetNumberJoysticks()
{
wxString dev_name;
int fd, j;
{
wxString dev_name;
int fd, j;
@@
-288,9
+297,20
@@
int wxJoystick::GetNumberJoysticks() const
dev_name.Printf(wxT("/dev/js%d"), j);
fd = open(dev_name.fn_str(), O_RDONLY);
if (fd == -1)
dev_name.Printf(wxT("/dev/js%d"), j);
fd = open(dev_name.fn_str(), O_RDONLY);
if (fd == -1)
-
return j
;
+
break
;
close(fd);
}
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;
}
return j;
}
@@
-474,4
+494,3
@@
bool wxJoystick::ReleaseCapture()
return false;
}
#endif // wxUSE_JOYSTICK
return false;
}
#endif // wxUSE_JOYSTICK
-