summaryrefslogtreecommitdiff
path: root/devel/SDL2/patches
diff options
context:
space:
mode:
authorjmcneill <jmcneill@pkgsrc.org>2015-02-13 23:31:06 +0000
committerjmcneill <jmcneill@pkgsrc.org>2015-02-13 23:31:06 +0000
commit0425ac6867a9a8b389d8ee785b01e50a485572ed (patch)
tree3aebce3914908fc8b2e886e7d4071e0c39af73e3 /devel/SDL2/patches
parent0dd60fc26e63e63d0c986e60bb94e5651d4ec4f6 (diff)
downloadpkgsrc-0425ac6867a9a8b389d8ee785b01e50a485572ed.tar.gz
Bring forward the joystick changes I made for devel/SDL to devel/SDL2:
- Skip non-joystick HID devices - On NetBSD, try to give joysticks a better name than "/dev/uhid4". Try to read the device name from the USB descriptor and append "@ /dev/uhid4" to the end.
Diffstat (limited to 'devel/SDL2/patches')
-rw-r--r--devel/SDL2/patches/patch-src_joystick_bsd_SDL__sysjoystick.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/devel/SDL2/patches/patch-src_joystick_bsd_SDL__sysjoystick.c b/devel/SDL2/patches/patch-src_joystick_bsd_SDL__sysjoystick.c
new file mode 100644
index 00000000000..a9d9f059ff3
--- /dev/null
+++ b/devel/SDL2/patches/patch-src_joystick_bsd_SDL__sysjoystick.c
@@ -0,0 +1,67 @@
+$NetBSD: patch-src_joystick_bsd_SDL__sysjoystick.c,v 1.1 2015/02/13 23:31:06 jmcneill Exp $
+
+Skip non-joystick HID devices, and give joysticks on NetBSD a human readable
+name.
+
+--- src/joystick/bsd/SDL_sysjoystick.c.orig 2014-03-16 02:31:41.000000000 +0000
++++ src/joystick/bsd/SDL_sysjoystick.c
+@@ -76,7 +76,7 @@
+ #include "../SDL_sysjoystick.h"
+ #include "../SDL_joystick_c.h"
+
+-#define MAX_UHID_JOYS 16
++#define MAX_UHID_JOYS 64
+ #define MAX_JOY_JOYS 2
+ #define MAX_JOYS (MAX_UHID_JOYS + MAX_JOY_JOYS)
+
+@@ -342,6 +342,38 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joy,
+ #endif
+ rep->rid = -1; /* XXX */
+ }
++#if defined(__NetBSD__)
++ usb_device_descriptor_t udd;
++ struct usb_string_desc usd;
++ if (ioctl(fd, USB_GET_DEVICE_DESC, &udd) == -1)
++ goto desc_failed;
++
++ /* Get default language */
++ usd.usd_string_index = USB_LANGUAGE_TABLE;
++ usd.usd_language_id = 0;
++ if (ioctl(fd, USB_GET_STRING_DESC, &usd) == -1 || usd.usd_desc.bLength < 4) {
++ usd.usd_language_id = 0;
++ } else {
++ usd.usd_language_id = UGETW(usd.usd_desc.bString[0]);
++ }
++
++ usd.usd_string_index = udd.iProduct;
++ if (ioctl(fd, USB_GET_STRING_DESC, &usd) == 0) {
++ char str[128];
++ char *new_name = NULL;
++ int i;
++ for (i = 0; i < (usd.usd_desc.bLength >> 1) - 1 && i < sizeof(str) - 1; i++) {
++ str[i] = UGETW(usd.usd_desc.bString[i]);
++ }
++ str[i] = '\0';
++ asprintf(&new_name, "%s @ %s", str, path);
++ if (new_name != NULL) {
++ free(joydevnames[SDL_SYS_numjoysticks]);
++ joydevnames[SDL_SYS_numjoysticks] = new_name;
++ }
++ }
++desc_failed:
++#endif
+ if (report_alloc(rep, hw->repdesc, REPORT_INPUT) < 0) {
+ goto usberr;
+ }
+@@ -414,6 +446,11 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joy,
+ if (hw->axis_map[i] > 0)
+ hw->axis_map[i] = joy->naxes++;
+
++ if (joy->naxes == 0 && joy->nbuttons == 0 && joy->nhats == 0 && joy->nballs == 0) {
++ SDL_SetError("%s: Not a joystick, ignoring", hw->path);
++ goto usberr;
++ }
++
+ usbend:
+ /* The poll blocks the event thread. */
+ fcntl(fd, F_SETFL, O_NONBLOCK);