Mercurial > sdl-ios-xcode
annotate src/joystick/bsd/SDL_sysjoystick.c @ 1629:ef4a796e7f24
Fixed bug #55
From Christian Walther:
When writing my patch for #12, I ended up doing all sorts of changes to the way
application/window activating/deactivating is handled in the Quartz backend,
resulting in the attached patch. It does make the code a bit cleaner IMHO, but
as it might be regarded as a case of "if it ain't broken, don't fix it" I'd
like to hear other people's opinion about it. Please shout if some change
strikes you as unnecessary or wrong, and I'll explain the reasons behind it. As
far as I tested it, it does not introduce any new bugs, but I may well have
missed some.
- The most fundamental change (that triggered most of the others) is irrelevant
for the usual single-window SDL applications, it only affects the people who
are crazy enough to display other Cocoa windows alongside the SDL window (I'm
actually doing this currently, although the additional window only displays
debugging info and won't be present in the final product): Before, some things
were done on the application becoming active, some on the window becoming key,
and some on the window becoming main. Conceptually, all these actions belong to
the window becoming key, so that's what I implemented. However, since in a
single-window application these three events always happen together, the
previous implementation "ain't broken".
- This slightly changed the meaning of the SDL_APPMOUSEFOCUS flag from
SDL_GetAppState(): Before, it meant "window is main and mouse is inside window
(or mode is fullscreen)". Now, it means "window is key and mouse is inside
window (or mode is fullscreen)". It makes more sense to me that way. (See
http://developer.apple.com/documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html
for a discussion of what key and main windows are.) The other two flags are
unchanged: SDL_APPACTIVE = application is not hidden and window is not
minimized, SDL_APPINPUTFOCUS = window is key (or mode is fullscreen).
- As a side effect, the reorganization fixes the following two issues (and
maybe others) (but they could also be fixed in less invasive ways):
* A regression that was introduced in revision 1.42 of SDL_QuartzVideo.m
(http://libsdl.org/cgi/cvsweb.cgi/SDL12/src/video/quartz/SDL_QuartzVideo.m.diff?r1=1.41&r2=1.42)
(from half-desirable to undesirable behavior):
Situation: While in windowed mode, hide the cursor using
SDL_ShowCursor(SDL_DISABLE), move the mouse outside of the window so that the
cursor becomes visible again, and SDL_SetVideoMode() to a fullscreen mode.
What happened before revision 1.42: The cursor is visible, but becomes
invisible as soon as the mouse is moved (half-desirable).
What happens in revision 1.42 and after (including current CVS): The cursor is
visible and stays visible (undesirable).
What happens after my patch: The cursor is invisible from the beginning
(desirable).
* When the cursor is hidden and grabbed, switch away from the application using
cmd-tab (which ungrabs and makes the cursor visible), move the cursor outside
of the SDL window, then cmd-tab back to the application. In 1.2.8 and in the
current CVS, the cursor is re-grabbed, but it stays visible (immovable in the
middle of the window). With my patch, the cursor is correctly re-grabbed and
hidden. (For some reason, it still doesn't work correctly if you switch back to
the application using the dock instead of cmd-tab. I haven't been able to
figure out why. I can step over [NSCursor hide] being called in the debugger,
but it seems to have no effect.)
- The patch includes my patch for #12 (it was easier to obtain using cvs diff
that way). If you apply both of them, you will end up with 6 duplicate lines in
SDL_QuartzEvents.m.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 13 Apr 2006 14:17:48 +0000 |
parents | 57431b199aed |
children | 92947e3a18db |
rev | line source |
---|---|
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1185
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1185
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1185
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1185
diff
changeset
|
13 Lesser General Public License for more details. |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1185
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1185
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1185
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1185
diff
changeset
|
20 slouken@libsdl.org |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
22 #include "SDL_config.h" |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 /* |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 * Joystick driver for the uhid(4) interface found in OpenBSD, |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 * NetBSD and FreeBSD. |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 * |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 * Maintainer: <vedge at csoft.org> |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 */ |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 |
552
639d58d32471
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
544
diff
changeset
|
31 #include <sys/param.h> |
639d58d32471
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
544
diff
changeset
|
32 |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 #include <unistd.h> |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 #include <fcntl.h> |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 #include <errno.h> |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 |
403
8d431937739d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
402
diff
changeset
|
37 #if defined(HAVE_USB_H) |
8d431937739d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
402
diff
changeset
|
38 #include <usb.h> |
8d431937739d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
402
diff
changeset
|
39 #endif |
1565 | 40 #ifdef __DragonFly__ |
41 #include <bus/usb/usb.h> | |
42 #include <bus/usb/usbhid.h> | |
43 #else | |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 #include <dev/usb/usb.h> |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 #include <dev/usb/usbhid.h> |
1565 | 46 #endif |
358
1f148809d972
Wilbern Cobb fixed joystick code on FreeBSD
Sam Lantinga <slouken@libsdl.org>
parents:
307
diff
changeset
|
47 |
381
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
48 #if defined(HAVE_USBHID_H) |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
49 #include <usbhid.h> |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
50 #elif defined(HAVE_LIBUSB_H) |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
51 #include <libusb.h> |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
52 #elif defined(HAVE_LIBUSBHID_H) |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
53 #include <libusbhid.h> |
358
1f148809d972
Wilbern Cobb fixed joystick code on FreeBSD
Sam Lantinga <slouken@libsdl.org>
parents:
307
diff
changeset
|
54 #endif |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
56 #ifdef __FREEBSD__ |
1565 | 57 #ifndef __DragonFly__ |
611
0a2ef9e8ca41
Date: Wed, 9 Apr 2003 01:03:25 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
552
diff
changeset
|
58 #include <osreldate.h> |
1565 | 59 #endif |
776
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
60 #include <sys/joystick.h> |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
61 #endif |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
62 |
1565 | 63 #if SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H |
776
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
64 #include <machine/joystick.h> |
611
0a2ef9e8ca41
Date: Wed, 9 Apr 2003 01:03:25 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
552
diff
changeset
|
65 #endif |
0a2ef9e8ca41
Date: Wed, 9 Apr 2003 01:03:25 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
552
diff
changeset
|
66 |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 #include "SDL_joystick.h" |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
68 #include "../SDL_sysjoystick.h" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
69 #include "../SDL_joystick_c.h" |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 #define MAX_UHID_JOYS 4 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 #define MAX_JOY_JOYS 2 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 #define MAX_JOYS (MAX_UHID_JOYS + MAX_JOY_JOYS) |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 struct report { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 struct usb_ctl_report *buf; /* Buffer */ |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 size_t size; /* Buffer size */ |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 int rid; /* Report ID */ |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
79 enum { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 SREPORT_UNINIT, |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 SREPORT_CLEAN, |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
82 SREPORT_DIRTY |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 } status; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 }; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 static struct { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 int uhid_report; |
402
7efee6e36f00
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
381
diff
changeset
|
88 hid_kind_t kind; |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 const char *name; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 } const repinfo[] = { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 { UHID_INPUT_REPORT, hid_input, "input" }, |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 { UHID_OUTPUT_REPORT, hid_output, "output" }, |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 { UHID_FEATURE_REPORT, hid_feature, "feature" } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 }; |
307
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
95 |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
96 enum { |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
97 REPORT_INPUT = 0, |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
98 REPORT_OUTPUT = 1, |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
99 REPORT_FEATURE = 2 |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
100 }; |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
101 |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
102 enum { |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
103 JOYAXE_X, |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
104 JOYAXE_Y, |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
105 JOYAXE_Z, |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
106 JOYAXE_SLIDER, |
632
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
107 JOYAXE_WHEEL, |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
108 JOYAXE_RX, |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
109 JOYAXE_RY, |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
110 JOYAXE_RZ, |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
111 JOYAXE_count |
307
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
112 }; |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
113 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
114 struct joystick_hwdata { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 int fd; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
116 char *path; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
117 enum { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
118 BSDJOY_UHID, /* uhid(4) */ |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 BSDJOY_JOY /* joy(4) */ |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
120 } type; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 struct report_desc *repdesc; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 struct report inreport; |
632
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
123 int axis_map[JOYAXE_count]; /* map present JOYAXE_* to 0,1,..*/ |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 }; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 static char *joynames[MAX_JOYS]; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 static char *joydevnames[MAX_JOYS]; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 static int report_alloc(struct report *, struct report_desc *, int); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 static void report_free(struct report *); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 |
381
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
132 #ifdef USBHID_UCR_DATA |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
133 #define REP_BUF_DATA(rep) ((rep)->buf->ucr_data) |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
134 #else |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
135 #define REP_BUF_DATA(rep) ((rep)->buf->data) |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
136 #endif |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
137 |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 int |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 SDL_SYS_JoystickInit(void) |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 { |
503
2ee72e47ca08
Fixed memory overwrite in BSD joystick driver (thanks SUGIMOTO Sadahiro!)
Sam Lantinga <slouken@libsdl.org>
parents:
461
diff
changeset
|
141 char s[16]; |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 int i, fd; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 SDL_numjoysticks = 0; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
146 SDL_memset(joynames, 0, sizeof(joynames)); |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
147 SDL_memset(joydevnames, 0, sizeof(joydevnames)); |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
148 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 for (i = 0; i < MAX_UHID_JOYS; i++) { |
544
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
150 SDL_Joystick nj; |
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
151 |
1338
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
152 SDL_snprintf(s, SDL_arraysize(s), "/dev/uhid%d", i); |
544
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
153 |
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
154 nj.index = SDL_numjoysticks; |
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
155 joynames[nj.index] = strdup(s); |
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
156 |
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
157 if (SDL_SYS_JoystickOpen(&nj) == 0) { |
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
158 SDL_SYS_JoystickClose(&nj); |
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
159 SDL_numjoysticks++; |
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
160 } else { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
161 SDL_free(joynames[nj.index]); |
965
b68e551205e9
Fix from Alfred Perlstein
Sam Lantinga <slouken@libsdl.org>
parents:
776
diff
changeset
|
162 joynames[nj.index] = NULL; |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
163 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 for (i = 0; i < MAX_JOY_JOYS; i++) { |
1338
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
166 SDL_snprintf(s, SDL_arraysize(s), "/dev/joy%d", i); |
544
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
167 fd = open(s, O_RDONLY); |
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
168 if (fd != -1) { |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 joynames[SDL_numjoysticks++] = strdup(s); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
170 close(fd); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
171 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
172 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 /* Read the default USB HID usage table. */ |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
175 hid_init(NULL); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
176 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
177 return (SDL_numjoysticks); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
178 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
179 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
180 const char * |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
181 SDL_SYS_JoystickName(int index) |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
182 { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
183 if (joydevnames[index] != NULL) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
184 return (joydevnames[index]); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
185 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
186 return (joynames[index]); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
187 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
188 |
632
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
189 static int |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
190 usage_to_joyaxe(unsigned usage) |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
191 { |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
192 int joyaxe; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
193 switch (usage) { |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
194 case HUG_X: |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
195 joyaxe = JOYAXE_X; break; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
196 case HUG_Y: |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
197 joyaxe = JOYAXE_Y; break; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
198 case HUG_Z: |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
199 joyaxe = JOYAXE_Z; break; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
200 case HUG_SLIDER: |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
201 joyaxe = JOYAXE_SLIDER; break; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
202 case HUG_WHEEL: |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
203 joyaxe = JOYAXE_WHEEL; break; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
204 case HUG_RX: |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
205 joyaxe = JOYAXE_RX; break; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
206 case HUG_RY: |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
207 joyaxe = JOYAXE_RY; break; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
208 case HUG_RZ: |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
209 joyaxe = JOYAXE_RZ; break; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
210 default: |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
211 joyaxe = -1; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
212 } |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
213 return joyaxe; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
214 } |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
215 |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
216 static unsigned |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
217 hatval_to_sdl(Sint32 hatval) |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
218 { |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
219 static const unsigned hat_dir_map[8] = { |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
220 SDL_HAT_UP, SDL_HAT_RIGHTUP, SDL_HAT_RIGHT, SDL_HAT_RIGHTDOWN, |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
221 SDL_HAT_DOWN, SDL_HAT_LEFTDOWN, SDL_HAT_LEFT, SDL_HAT_LEFTUP |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
222 }; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
223 unsigned result; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
224 if ((hatval & 7) == hatval) |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
225 result = hat_dir_map[hatval]; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
226 else |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
227 result = SDL_HAT_CENTERED; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
228 return result; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
229 } |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
230 |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
231 |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 int |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
233 SDL_SYS_JoystickOpen(SDL_Joystick *joy) |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
234 { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 char *path = joynames[joy->index]; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 struct joystick_hwdata *hw; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
237 struct hid_item hitem; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 struct hid_data *hdata; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
239 struct report *rep; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 int fd; |
1565 | 241 int i; |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 |
715
de0351c47596
Date: Mon, 01 Sep 2003 15:37:52 +0900
Sam Lantinga <slouken@libsdl.org>
parents:
632
diff
changeset
|
243 fd = open(path, O_RDONLY); |
544
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
244 if (fd == -1) { |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
245 SDL_SetError("%s: %s", path, strerror(errno)); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
246 return (-1); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
249 hw = (struct joystick_hwdata *)SDL_malloc(sizeof(struct joystick_hwdata)); |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
250 if (hw == NULL) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
251 SDL_OutOfMemory(); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
252 close(fd); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
253 return (-1); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
254 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 joy->hwdata = hw; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 hw->fd = fd; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 hw->path = strdup(path); |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
258 if (! SDL_strncmp(path, "/dev/joy", 8)) { |
776
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
259 hw->type = BSDJOY_JOY; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
260 joy->naxes = 2; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
261 joy->nbuttons = 2; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
262 joy->nhats = 0; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
263 joy->nballs = 0; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
264 joydevnames[joy->index] = strdup("Gameport joystick"); |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
265 goto usbend; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
266 } else { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
267 hw->type = BSDJOY_UHID; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
268 } |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
269 |
632
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
270 { |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
271 int ax; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
272 for (ax = 0; ax < JOYAXE_count; ax++) |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
273 hw->axis_map[ax] = -1; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
274 } |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 hw->repdesc = hid_get_report_desc(fd); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 if (hw->repdesc == NULL) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 SDL_SetError("%s: USB_GET_REPORT_DESC: %s", hw->path, |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 strerror(errno)); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 goto usberr; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 rep = &hw->inreport; |
1559
e7f61857028a
------- Comment #8 From Sergey Svishchev 2006-03-19 12:35 [reply] -------
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
283 if (ioctl(fd, USB_GET_REPORT_ID, &rep->rid) < 0) { |
e7f61857028a
------- Comment #8 From Sergey Svishchev 2006-03-19 12:35 [reply] -------
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
284 rep->rid = -1; /* XXX */ |
e7f61857028a
------- Comment #8 From Sergey Svishchev 2006-03-19 12:35 [reply] -------
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
285 } |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 if (report_alloc(rep, hw->repdesc, REPORT_INPUT) < 0) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 goto usberr; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 if (rep->size <= 0) { |
307
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
290 SDL_SetError("%s: Input report descriptor has invalid length", |
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
291 hw->path); |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 goto usberr; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
295 #if defined(USBHID_NEW) || (defined(__FREEBSD__) && __FreeBSD_version >= 500111) |
407
173909e17b7f
API changes on OpenBSD and FreeBSD...
Sam Lantinga <slouken@libsdl.org>
parents:
405
diff
changeset
|
296 hdata = hid_start_parse(hw->repdesc, 1 << hid_input, rep->rid); |
173909e17b7f
API changes on OpenBSD and FreeBSD...
Sam Lantinga <slouken@libsdl.org>
parents:
405
diff
changeset
|
297 #else |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 hdata = hid_start_parse(hw->repdesc, 1 << hid_input); |
407
173909e17b7f
API changes on OpenBSD and FreeBSD...
Sam Lantinga <slouken@libsdl.org>
parents:
405
diff
changeset
|
299 #endif |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 if (hdata == NULL) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 SDL_SetError("%s: Cannot start HID parser", hw->path); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 goto usberr; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 joy->naxes = 0; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 joy->nbuttons = 0; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 joy->nhats = 0; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 joy->nballs = 0; |
1565 | 308 for (i=0; i<JOYAXE_count; i++) |
309 hw->axis_map[i] = -1; | |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
310 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 while (hid_get_item(hdata, &hitem) > 0) { |
358
1f148809d972
Wilbern Cobb fixed joystick code on FreeBSD
Sam Lantinga <slouken@libsdl.org>
parents:
307
diff
changeset
|
312 char *sp; |
1f148809d972
Wilbern Cobb fixed joystick code on FreeBSD
Sam Lantinga <slouken@libsdl.org>
parents:
307
diff
changeset
|
313 const char *s; |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
314 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 switch (hitem.kind) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 case hid_collection: |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 switch (HID_PAGE(hitem.usage)) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 case HUP_GENERIC_DESKTOP: |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 switch (HID_USAGE(hitem.usage)) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 case HUG_JOYSTICK: |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 case HUG_GAME_PAD: |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 s = hid_usage_in_page(hitem.usage); |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
323 sp = SDL_malloc(SDL_strlen(s) + 5); |
1338
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
324 SDL_snprintf(sp, SDL_strlen(s) + 5, "%s (%d)", s, |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
325 joy->index); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 joydevnames[joy->index] = sp; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 break; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 case hid_input: |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 switch (HID_PAGE(hitem.usage)) { |
632
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
332 case HUP_GENERIC_DESKTOP: { |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
333 unsigned usage = HID_USAGE(hitem.usage); |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
334 int joyaxe = usage_to_joyaxe(usage); |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
335 if (joyaxe >= 0) { |
1565 | 336 hw->axis_map[joyaxe] = 1; |
632
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
337 } else if (usage == HUG_HAT_SWITCH) { |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
338 joy->nhats++; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
339 } |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
340 break; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
341 } |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
342 case HUP_BUTTON: |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 joy->nbuttons++; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
344 break; |
405
b5de7389a0a5
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
404
diff
changeset
|
345 default: |
b5de7389a0a5
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
404
diff
changeset
|
346 break; |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 break; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 default: |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
350 break; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 hid_end_parse(hdata); |
1565 | 354 for (i=0; i<JOYAXE_count; i++) |
355 if (hw->axis_map[i] > 0) | |
356 hw->axis_map[i] = joy->naxes++; | |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
357 |
776
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
358 usbend: |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
359 /* The poll blocks the event thread. */ |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
360 fcntl(fd, F_SETFL, O_NONBLOCK); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
361 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
362 return (0); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
363 usberr: |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
364 close(hw->fd); |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
365 SDL_free(hw->path); |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
366 SDL_free(hw); |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
367 return (-1); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
368 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
369 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
370 void |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
371 SDL_SYS_JoystickUpdate(SDL_Joystick *joy) |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
372 { |
381
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
373 struct hid_item hitem; |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
374 struct hid_data *hdata; |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
375 struct report *rep; |
358
1f148809d972
Wilbern Cobb fixed joystick code on FreeBSD
Sam Lantinga <slouken@libsdl.org>
parents:
307
diff
changeset
|
376 int nbutton, naxe = -1; |
307
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
377 Sint32 v; |
776
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
378 |
1565 | 379 #if defined(__FREEBSD__) || SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H |
776
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
380 struct joystick gameport; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
381 static int x, y, xmin = 0xffff, ymin = 0xffff, xmax = 0, ymax = 0; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
382 |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
383 if (joy->hwdata->type == BSDJOY_JOY) { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
384 if (read(joy->hwdata->fd, &gameport, sizeof gameport) != sizeof gameport) |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
385 return; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
386 if (abs(x - gameport.x) > 8) { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
387 x = gameport.x; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
388 if (x < xmin) { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
389 xmin = x; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
390 } |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
391 if (x > xmax) { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
392 xmax = x; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
393 } |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
394 if (xmin == xmax) { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
395 xmin--; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
396 xmax++; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
397 } |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
398 v = (Sint32)x; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
399 v -= (xmax + xmin + 1)/2; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
400 v *= 32768/((xmax - xmin + 1)/2); |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
401 SDL_PrivateJoystickAxis(joy, 0, v); |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
402 } |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
403 if (abs(y - gameport.y) > 8) { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
404 y = gameport.y; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
405 if (y < ymin) { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
406 ymin = y; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
407 } |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
408 if (y > ymax) { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
409 ymax = y; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
410 } |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
411 if (ymin == ymax) { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
412 ymin--; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
413 ymax++; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
414 } |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
415 v = (Sint32)y; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
416 v -= (ymax + ymin + 1)/2; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
417 v *= 32768/((ymax - ymin + 1)/2); |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
418 SDL_PrivateJoystickAxis(joy, 1, v); |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
419 } |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
420 if (gameport.b1 != joy->buttons[0]) { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
421 SDL_PrivateJoystickButton(joy, 0, gameport.b1); |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
422 } |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
423 if (gameport.b2 != joy->buttons[1]) { |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
424 SDL_PrivateJoystickButton(joy, 1, gameport.b2); |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
425 } |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
426 return; |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
427 } |
1565 | 428 #endif /* defined(__FREEBSD__) || SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H */ |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
429 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
430 rep = &joy->hwdata->inreport; |
381
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
431 |
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
432 if (read(joy->hwdata->fd, REP_BUF_DATA(rep), rep->size) != rep->size) { |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
433 return; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
434 } |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
435 #if defined(USBHID_NEW) || (defined(__FREEBSD__) && __FreeBSD_version >= 500111) |
407
173909e17b7f
API changes on OpenBSD and FreeBSD...
Sam Lantinga <slouken@libsdl.org>
parents:
405
diff
changeset
|
436 hdata = hid_start_parse(joy->hwdata->repdesc, 1 << hid_input, rep->rid); |
173909e17b7f
API changes on OpenBSD and FreeBSD...
Sam Lantinga <slouken@libsdl.org>
parents:
405
diff
changeset
|
437 #else |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
438 hdata = hid_start_parse(joy->hwdata->repdesc, 1 << hid_input); |
407
173909e17b7f
API changes on OpenBSD and FreeBSD...
Sam Lantinga <slouken@libsdl.org>
parents:
405
diff
changeset
|
439 #endif |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
440 if (hdata == NULL) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
441 fprintf(stderr, "%s: Cannot start HID parser\n", |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
442 joy->hwdata->path); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
443 return; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
444 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
445 |
307
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
446 for (nbutton = 0; hid_get_item(hdata, &hitem) > 0;) { |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
447 switch (hitem.kind) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
448 case hid_input: |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
449 switch (HID_PAGE(hitem.usage)) { |
632
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
450 case HUP_GENERIC_DESKTOP: { |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
451 unsigned usage = HID_USAGE(hitem.usage); |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
452 int joyaxe = usage_to_joyaxe(usage); |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
453 if (joyaxe >= 0) { |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
454 naxe = joy->hwdata->axis_map[joyaxe]; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
455 /* scaleaxe */ |
381
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
456 v = (Sint32)hid_get_data(REP_BUF_DATA(rep), |
632
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
457 &hitem); |
461
1d36f593078a
Date: Thu, 18 Jul 2002 23:51:40 +0200 (MEST)
Sam Lantinga <slouken@libsdl.org>
parents:
426
diff
changeset
|
458 v -= (hitem.logical_maximum + hitem.logical_minimum + 1)/2; |
1d36f593078a
Date: Thu, 18 Jul 2002 23:51:40 +0200 (MEST)
Sam Lantinga <slouken@libsdl.org>
parents:
426
diff
changeset
|
459 v *= 32768/((hitem.logical_maximum - hitem.logical_minimum + 1)/2); |
307
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
460 if (v != joy->axes[naxe]) { |
632
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
461 SDL_PrivateJoystickAxis(joy, naxe, v); |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
462 } |
632
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
463 } else if (usage == HUG_HAT_SWITCH) { |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
464 v = (Sint32)hid_get_data(REP_BUF_DATA(rep), |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
465 &hitem); |
1565 | 466 SDL_PrivateJoystickHat(joy, 0, |
467 hatval_to_sdl(v)-hitem.logical_minimum); | |
632
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
468 } |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
469 break; |
85e104fe14c2
Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents:
611
diff
changeset
|
470 } |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
471 case HUP_BUTTON: |
381
bc1401311390
Wilbern Cobb submitted a fix for building BSD joystick support that should work on all BSD flavors.
Sam Lantinga <slouken@libsdl.org>
parents:
358
diff
changeset
|
472 v = (Sint32)hid_get_data(REP_BUF_DATA(rep), |
307
0185452e9f83
This properly scales axes, and adds support for sliders/wheels
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
473 &hitem); |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
474 if (joy->buttons[nbutton] != v) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
475 SDL_PrivateJoystickButton(joy, |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
476 nbutton, v); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
477 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
478 nbutton++; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
479 break; |
405
b5de7389a0a5
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
404
diff
changeset
|
480 default: |
b5de7389a0a5
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
404
diff
changeset
|
481 continue; |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
482 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
483 break; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
484 default: |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
485 break; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
486 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
487 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
488 hid_end_parse(hdata); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
489 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
490 return; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
491 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
492 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
493 /* Function to close a joystick after use */ |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
494 void |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
495 SDL_SYS_JoystickClose(SDL_Joystick *joy) |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
496 { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
497 if (SDL_strncmp(joy->hwdata->path, "/dev/joy", 8)) { |
776
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
498 report_free(&joy->hwdata->inreport); |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
499 hid_dispose_report_desc(joy->hwdata->repdesc); |
18922ae3ee07
Added support for /dev/joy* on Free/Net/OpenBSD (thanks Christian!)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
500 } |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
501 close(joy->hwdata->fd); |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
502 SDL_free(joy->hwdata->path); |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
503 SDL_free(joy->hwdata); |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
504 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
505 return; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
506 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
507 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
508 void |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
509 SDL_SYS_JoystickQuit(void) |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
510 { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
511 int i; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
512 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
513 for (i = 0; i < MAX_JOYS; i++) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
514 if (joynames[i] != NULL) |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
515 SDL_free(joynames[i]); |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
516 if (joydevnames[i] != NULL) |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
517 SDL_free(joydevnames[i]); |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
518 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
519 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
520 return; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
521 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
522 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
523 static int |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
524 report_alloc(struct report *r, struct report_desc *rd, int repind) |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
525 { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
526 int len; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
527 |
1565 | 528 #ifdef __DragonFly__ |
529 len = hid_report_size(rd, r->rid, repinfo[repind].kind); | |
530 #elif __FREEBSD__ | |
715
de0351c47596
Date: Mon, 01 Sep 2003 15:37:52 +0900
Sam Lantinga <slouken@libsdl.org>
parents:
632
diff
changeset
|
531 # if (__FreeBSD_version >= 460000) |
611
0a2ef9e8ca41
Date: Wed, 9 Apr 2003 01:03:25 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
552
diff
changeset
|
532 # if (__FreeBSD_version <= 500111) |
552
639d58d32471
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
544
diff
changeset
|
533 len = hid_report_size(rd, r->rid, repinfo[repind].kind); |
611
0a2ef9e8ca41
Date: Wed, 9 Apr 2003 01:03:25 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
552
diff
changeset
|
534 # else |
0a2ef9e8ca41
Date: Wed, 9 Apr 2003 01:03:25 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
552
diff
changeset
|
535 len = hid_report_size(rd, repinfo[repind].kind, r->rid); |
0a2ef9e8ca41
Date: Wed, 9 Apr 2003 01:03:25 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
552
diff
changeset
|
536 # endif |
552
639d58d32471
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
544
diff
changeset
|
537 # else |
544
2d7373ffd131
Fixed bsd joystick detection ... again (thanks Wilbern)
Sam Lantinga <slouken@libsdl.org>
parents:
503
diff
changeset
|
538 len = hid_report_size(rd, repinfo[repind].kind, &r->rid); |
1565 | 539 # endif |
552
639d58d32471
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
544
diff
changeset
|
540 #else |
639d58d32471
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
544
diff
changeset
|
541 # ifdef USBHID_NEW |
1565 | 542 len = hid_report_size(rd, repinfo[repind].kind, r->rid); |
552
639d58d32471
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
544
diff
changeset
|
543 # else |
1565 | 544 len = hid_report_size(rd, repinfo[repind].kind, &r->rid); |
552
639d58d32471
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
544
diff
changeset
|
545 # endif |
639d58d32471
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
544
diff
changeset
|
546 #endif |
639d58d32471
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
544
diff
changeset
|
547 |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
548 if (len < 0) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
549 SDL_SetError("Negative HID report size"); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
550 return (-1); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
551 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
552 r->size = len; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
553 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
554 if (r->size > 0) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
555 r->buf = SDL_malloc(sizeof(*r->buf) - sizeof(REP_BUF_DATA(r)) + |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
556 r->size); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
557 if (r->buf == NULL) { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
558 SDL_OutOfMemory(); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
559 return (-1); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
560 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
561 } else { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
562 r->buf = NULL; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
563 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
564 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
565 r->status = SREPORT_CLEAN; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
566 return (0); |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
567 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
568 |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
569 static void |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
570 report_free(struct report *r) |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
571 { |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
572 if (r->buf != NULL) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
573 SDL_free(r->buf); |
278
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
574 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
575 r->status = SREPORT_UNINIT; |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
576 } |
dcd9f7b50a1c
Added support for joysticks on *BSD (thanks Wilbern!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
577 |