# HG changeset patch # User Sam Lantinga # Date 1255340570 0 # Node ID 45d7f0f70b2736b36decc25dd7218ba686f689a3 # Parent 04af265172f9134b796f30c848a0c3d6554f5a7e Joystick patch from FreeBSD ports system diff -r 04af265172f9 -r 45d7f0f70b27 src/joystick/bsd/SDL_sysjoystick.c --- 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) {