summaryrefslogtreecommitdiff
path: root/devel/SDL/patches/patch-aa
blob: 52b2987dbb19a711375345a642b3a7e428ef0b0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
$NetBSD: patch-aa,v 1.9 2005/01/05 12:05:19 adam Exp $

--- src/joystick/bsd/SDL_sysjoystick.c.orig	2004-12-13 07:54:32.000000000 +0000
+++ src/joystick/bsd/SDL_sysjoystick.c
@@ -60,7 +60,7 @@ static char rcsid =
 #include <sys/joystick.h>
 #endif
 
-#if defined(__NetBSD__) || defined(__OpenBSD__)
+#if defined(HAVE_MACHINE_JOYSTICK) || defined(__OpenBSD__)
 #include <machine/joystick.h>
 #endif
 
@@ -239,6 +239,7 @@ SDL_SYS_JoystickOpen(SDL_Joystick *joy)
 	struct hid_data *hdata;
 	struct report *rep;
 	int fd;
+	int i;
 
 	fd = open(path, O_RDONLY);
 	if (fd == -1) {
@@ -303,6 +304,8 @@ SDL_SYS_JoystickOpen(SDL_Joystick *joy)
 	joy->nbuttons = 0;
 	joy->nhats = 0;
 	joy->nballs = 0;
+	for (i=0; i<JOYAXE_count; i++)
+		hw->axis_map[i] = -1;
 
 	while (hid_get_item(hdata, &hitem) > 0) {
 		char *sp;
@@ -329,8 +332,7 @@ SDL_SYS_JoystickOpen(SDL_Joystick *joy)
 			    unsigned usage = HID_USAGE(hitem.usage);
 			    int joyaxe = usage_to_joyaxe(usage);
 			    if (joyaxe >= 0) {
-				hw->axis_map[joyaxe] = joy->naxes;
-				joy->naxes++;
+				hw->axis_map[joyaxe] = 1;
 			    } else if (usage == HUG_HAT_SWITCH) {
 				joy->nhats++;
 			    }
@@ -348,6 +350,9 @@ SDL_SYS_JoystickOpen(SDL_Joystick *joy)
 		}
 	}
 	hid_end_parse(hdata);
+	for (i=0; i<JOYAXE_count; i++)
+		if (hw->axis_map[i] > 0)
+			hw->axis_map[i] = joy->naxes++;
 
 usbend:
 	/* The poll blocks the event thread. */
@@ -370,7 +375,7 @@ SDL_SYS_JoystickUpdate(SDL_Joystick *joy
 	int nbutton, naxe = -1;
 	Sint32 v;
 
-#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+#if defined(__FreeBSD__) || defined(HAVE_MACHINE_JOYSTICK) || defined(__OpenBSD__)
 	struct joystick gameport;
 	static int x, y, xmin = 0xffff, ymin = 0xffff, xmax = 0, ymax = 0;
  
@@ -457,7 +462,8 @@ SDL_SYS_JoystickUpdate(SDL_Joystick *joy
 			    } else if (usage == HUG_HAT_SWITCH) {
 				v = (Sint32)hid_get_data(REP_BUF_DATA(rep),
 							 &hitem);
-				SDL_PrivateJoystickHat(joy, 0, hatval_to_sdl(v));
+				SDL_PrivateJoystickHat(joy, 0,
+					hatval_to_sdl(v)-hitem.logical_minimum);
 			    }
 			    break;
 			}
@@ -530,9 +536,9 @@ report_alloc(struct report *r, struct re
 #endif
 #else
 # ifdef USBHID_NEW
-	len = hid_report_size(rd, repinfo[repind].kind, &r->rid);
-# else
 	len = hid_report_size(rd, repinfo[repind].kind, r->rid);
+# else
+	len = hid_report_size(rd, repinfo[repind].kind, &r->rid);
 # endif
 #endif