src/joystick/bsd/SDL_sysjoystick.c
branchSDL-1.2
changeset 4323 b3171b7561d8
parent 4307 f4ee83767bfd
child 4401 1a7b62893c9d
equal deleted inserted replaced
4322:a8e5b518e194 4323:b3171b7561d8
    75 #include "../SDL_joystick_c.h"
    75 #include "../SDL_joystick_c.h"
    76 
    76 
    77 #define MAX_UHID_JOYS	4
    77 #define MAX_UHID_JOYS	4
    78 #define MAX_JOY_JOYS	2
    78 #define MAX_JOY_JOYS	2
    79 #define MAX_JOYS	(MAX_UHID_JOYS + MAX_JOY_JOYS)
    79 #define MAX_JOYS	(MAX_UHID_JOYS + MAX_JOY_JOYS)
       
    80 
       
    81 #if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063)
       
    82 struct usb_ctl_report {
       
    83 	int	ucr_report;
       
    84 	u_char	ucr_data[1024]; /* filled data size will vary */
       
    85 };
       
    86 #endif
    80 
    87 
    81 struct report {
    88 struct report {
    82 	struct	usb_ctl_report *buf;	/* Buffer */
    89 	struct	usb_ctl_report *buf;	/* Buffer */
    83 	size_t	size;			/* Buffer size */
    90 	size_t	size;			/* Buffer size */
    84 	int	rid;			/* Report ID */
    91 	int	rid;			/* Report ID */
   139 static char *joydevnames[MAX_JOYS];
   146 static char *joydevnames[MAX_JOYS];
   140 
   147 
   141 static int	report_alloc(struct report *, struct report_desc *, int);
   148 static int	report_alloc(struct report *, struct report_desc *, int);
   142 static void	report_free(struct report *);
   149 static void	report_free(struct report *);
   143 
   150 
   144 #ifdef USBHID_UCR_DATA
   151 #if defined(USBHID_UCR_DATA) || (defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063))
   145 #define REP_BUF_DATA(rep) ((rep)->buf->ucr_data)
   152 #define REP_BUF_DATA(rep) ((rep)->buf->ucr_data)
   146 #else
   153 #else
   147 #define REP_BUF_DATA(rep) ((rep)->buf->data)
   154 #define REP_BUF_DATA(rep) ((rep)->buf->data)
   148 #endif
   155 #endif
   149 
   156 
   294 	if (hw->repdesc == NULL) {
   301 	if (hw->repdesc == NULL) {
   295 		SDL_SetError("%s: USB_GET_REPORT_DESC: %s", hw->path,
   302 		SDL_SetError("%s: USB_GET_REPORT_DESC: %s", hw->path,
   296 		    strerror(errno));
   303 		    strerror(errno));
   297 		goto usberr;
   304 		goto usberr;
   298 	}
   305 	}
   299 
   306 #if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063)
       
   307        rep->rid = hid_get_report_id(fd);
       
   308        if (rep->rid < 0) {
       
   309 #else
   300 	rep = &hw->inreport;
   310 	rep = &hw->inreport;
   301 	if (ioctl(fd, USB_GET_REPORT_ID, &rep->rid) < 0) {
   311 	if (ioctl(fd, USB_GET_REPORT_ID, &rep->rid) < 0) {
       
   312 #endif
   302 		rep->rid = -1; /* XXX */
   313 		rep->rid = -1; /* XXX */
   303 	}
   314 	}
   304 	if (report_alloc(rep, hw->repdesc, REPORT_INPUT) < 0) {
   315 	if (report_alloc(rep, hw->repdesc, REPORT_INPUT) < 0) {
   305 		goto usberr;
   316 		goto usberr;
   306 	}
   317 	}