equal
deleted
inserted
replaced
57 #include <libusb.h> |
57 #include <libusb.h> |
58 #elif defined(HAVE_LIBUSBHID_H) |
58 #elif defined(HAVE_LIBUSBHID_H) |
59 #include <libusbhid.h> |
59 #include <libusbhid.h> |
60 #endif |
60 #endif |
61 |
61 |
62 #ifdef __FREEBSD__ |
62 #if defined(__FREEBSD__) || defined(__FreeBSD_kernel__) |
63 #ifndef __DragonFly__ |
63 #ifndef __DragonFly__ |
64 #include <osreldate.h> |
64 #include <osreldate.h> |
65 #endif |
65 #endif |
66 #include <sys/joystick.h> |
66 #include <sys/joystick.h> |
67 #endif |
67 #endif |
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 |
80 |
81 #if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063) |
81 #if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063) && false |
82 struct usb_ctl_report { |
82 struct usb_ctl_report { |
83 int ucr_report; |
83 int ucr_report; |
84 u_char ucr_data[1024]; /* filled data size will vary */ |
84 u_char ucr_data[1024]; /* filled data size will vary */ |
85 }; |
85 }; |
86 #endif |
86 #endif |
146 static char *joydevnames[MAX_JOYS]; |
146 static char *joydevnames[MAX_JOYS]; |
147 |
147 |
148 static int report_alloc(struct report *, struct report_desc *, int); |
148 static int report_alloc(struct report *, struct report_desc *, int); |
149 static void report_free(struct report *); |
149 static void report_free(struct report *); |
150 |
150 |
151 #if defined(USBHID_UCR_DATA) || (defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063)) |
151 #if defined(USBHID_UCR_DATA) || (defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063)) || defined(__FreeBSD_kernel__) |
152 #define REP_BUF_DATA(rep) ((rep)->buf->ucr_data) |
152 #define REP_BUF_DATA(rep) ((rep)->buf->ucr_data) |
153 #else |
153 #else |
154 #define REP_BUF_DATA(rep) ((rep)->buf->data) |
154 #define REP_BUF_DATA(rep) ((rep)->buf->data) |
155 #endif |
155 #endif |
156 |
156 |
302 SDL_SetError("%s: USB_GET_REPORT_DESC: %s", hw->path, |
302 SDL_SetError("%s: USB_GET_REPORT_DESC: %s", hw->path, |
303 strerror(errno)); |
303 strerror(errno)); |
304 goto usberr; |
304 goto usberr; |
305 } |
305 } |
306 rep = &hw->inreport; |
306 rep = &hw->inreport; |
307 #if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063) |
307 #if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063) || defined(__FreeBSD_kernel__) |
308 rep->rid = hid_get_report_id(fd); |
308 rep->rid = hid_get_report_id(fd); |
309 if (rep->rid < 0) { |
309 if (rep->rid < 0) { |
310 #else |
310 #else |
311 if (ioctl(fd, USB_GET_REPORT_ID, &rep->rid) < 0) { |
311 if (ioctl(fd, USB_GET_REPORT_ID, &rep->rid) < 0) { |
312 #endif |
312 #endif |
319 SDL_SetError("%s: Input report descriptor has invalid length", |
319 SDL_SetError("%s: Input report descriptor has invalid length", |
320 hw->path); |
320 hw->path); |
321 goto usberr; |
321 goto usberr; |
322 } |
322 } |
323 |
323 |
324 #if defined(USBHID_NEW) || (defined(__FREEBSD__) && __FreeBSD_kernel_version >= 500111) |
324 #if defined(USBHID_NEW) || (defined(__FREEBSD__) && __FreeBSD_kernel_version >= 500111) || defined(__FreeBSD_kernel__) |
325 hdata = hid_start_parse(hw->repdesc, 1 << hid_input, rep->rid); |
325 hdata = hid_start_parse(hw->repdesc, 1 << hid_input, rep->rid); |
326 #else |
326 #else |
327 hdata = hid_start_parse(hw->repdesc, 1 << hid_input); |
327 hdata = hid_start_parse(hw->repdesc, 1 << hid_input); |
328 #endif |
328 #endif |
329 if (hdata == NULL) { |
329 if (hdata == NULL) { |
403 struct hid_data *hdata; |
403 struct hid_data *hdata; |
404 struct report *rep; |
404 struct report *rep; |
405 int nbutton, naxe = -1; |
405 int nbutton, naxe = -1; |
406 Sint32 v; |
406 Sint32 v; |
407 |
407 |
408 #if defined(__FREEBSD__) || SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H |
408 #if defined(__FREEBSD__) || SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H || defined(__FreeBSD_kernel__) |
409 struct joystick gameport; |
409 struct joystick gameport; |
410 |
410 |
411 if (joy->hwdata->type == BSDJOY_JOY) { |
411 if (joy->hwdata->type == BSDJOY_JOY) { |
412 if (read(joy->hwdata->fd, &gameport, sizeof gameport) != sizeof gameport) |
412 if (read(joy->hwdata->fd, &gameport, sizeof gameport) != sizeof gameport) |
413 return; |
413 return; |
458 rep = &joy->hwdata->inreport; |
458 rep = &joy->hwdata->inreport; |
459 |
459 |
460 if (read(joy->hwdata->fd, REP_BUF_DATA(rep), rep->size) != rep->size) { |
460 if (read(joy->hwdata->fd, REP_BUF_DATA(rep), rep->size) != rep->size) { |
461 return; |
461 return; |
462 } |
462 } |
463 #if defined(USBHID_NEW) || (defined(__FREEBSD__) && __FreeBSD_kernel_version >= 500111) |
463 #if defined(USBHID_NEW) || (defined(__FREEBSD__) && __FreeBSD_kernel_version >= 500111) || defined(__FreeBSD_kernel__) |
464 hdata = hid_start_parse(joy->hwdata->repdesc, 1 << hid_input, rep->rid); |
464 hdata = hid_start_parse(joy->hwdata->repdesc, 1 << hid_input, rep->rid); |
465 #else |
465 #else |
466 hdata = hid_start_parse(joy->hwdata->repdesc, 1 << hid_input); |
466 hdata = hid_start_parse(joy->hwdata->repdesc, 1 << hid_input); |
467 #endif |
467 #endif |
468 if (hdata == NULL) { |
468 if (hdata == NULL) { |