changeset 3385:45d7f0f70b27

Joystick patch from FreeBSD ports system
author Sam Lantinga <slouken@libsdl.org>
date Mon, 12 Oct 2009 09:42:50 +0000
parents 04af265172f9
children fff074de9675
files src/joystick/bsd/SDL_sysjoystick.c
diffstat 1 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/joystick/bsd/SDL_sysjoystick.c	Mon Oct 12 08:21:43 2009 +0000
+++ b/src/joystick/bsd/SDL_sysjoystick.c	Mon Oct 12 09:42:50 2009 +0000
@@ -78,6 +78,13 @@
 #define MAX_JOY_JOYS	2
 #define MAX_JOYS	(MAX_UHID_JOYS + MAX_JOY_JOYS)
 
+#if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063)
+struct usb_ctl_report {
+    int     ucr_report;
+    u_char  ucr_data[1024]; /* filled data size will vary */
+};
+#endif
+
 struct report
 {
     struct usb_ctl_report *buf; /* Buffer */
@@ -142,7 +149,7 @@
 static int report_alloc(struct report *, struct report_desc *, int);
 static void report_free(struct report *);
 
-#ifdef USBHID_UCR_DATA
+#if defined(USBHID_UCR_DATA) || (defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063))
 #define REP_BUF_DATA(rep) ((rep)->buf->ucr_data)
 #else
 #define REP_BUF_DATA(rep) ((rep)->buf->data)
@@ -300,9 +307,13 @@
                      strerror(errno));
         goto usberr;
     }
-
+#if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063)
+    rep->rid = hid_get_report_id(fd);
+    if (rep->rid < 0) {
+#else
     rep = &hw->inreport;
     if (ioctl(fd, USB_GET_REPORT_ID, &rep->rid) < 0) {
+#endif
         rep->rid = -1;          /* XXX */
     }
     if (report_alloc(rep, hw->repdesc, REPORT_INPUT) < 0) {