diff options
author | mischief <mischief@offblast.org> | 2018-10-10 13:56:28 -0700 |
---|---|---|
committer | mischief <mischief@offblast.org> | 2018-10-10 13:56:28 -0700 |
commit | 7af5442d3b031a3f81ea5c25c88f99692fb16822 (patch) | |
tree | be0cf60d6fe76ed02314144d1bcb4610fd8358ac /sys/src/cmd/nusb/joy | |
parent | 67e14807e960d99d34ba1fc28fb3d2d656830249 (diff) |
nusb/joy: send magic packet to enable playstation controller events
Diffstat (limited to 'sys/src/cmd/nusb/joy')
-rw-r--r-- | sys/src/cmd/nusb/joy/joy.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/src/cmd/nusb/joy/joy.c b/sys/src/cmd/nusb/joy/joy.c index c1f7cca71..147c46d87 100644 --- a/sys/src/cmd/nusb/joy/joy.c +++ b/sys/src/cmd/nusb/joy/joy.c @@ -359,6 +359,21 @@ joywork(void *a) } } +/* apply quirks for special devices */ +static void +quirks(Dev *d) +{ + int ret; + uchar buf[17]; + + /* sony dualshock 3 (ps3) controller requires special enable command */ + if(d->usb->vid == 0x054c && d->usb->did == 0x0268){ + ret = usbcmd(d, Rd2h|Rclass|Riface, Getreport, (0x3<<8) | 0xF2, 0, buf, sizeof(buf)); + if(ret < 0) + sysfatal("failed to enable ps3 controller: %r"); + } +} + static void kbstart(Dev *d, Ep *ep, void (*f)(void*)) { @@ -380,6 +395,7 @@ kbstart(Dev *d, Ep *ep, void (*f)(void*)) fprint(2, "%s: %s: opendevdata: %r\n", argv0, kd->ep->dir); goto Err; } + quirks(kd->dev); f(kd); return; Err: |