From 111e05d98ea336de6537e2d464d64c23197da52b Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 12 Oct 2009 09:42:50 +0000 Subject: [PATCH] Joystick patch from FreeBSD ports system --- src/joystick/bsd/SDL_sysjoystick.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/joystick/bsd/SDL_sysjoystick.c b/src/joystick/bsd/SDL_sysjoystick.c index 4d60b6a12..da328cb6f 100644 --- a/src/joystick/bsd/SDL_sysjoystick.c +++ b/src/joystick/bsd/SDL_sysjoystick.c @@ -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 char *joydevnames[MAX_JOYS]; 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 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joy) 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) {