This adds rumble support for Xbox One controller by sending continuous rumble
command. Trigger button rumbling does not yet implemented.
Signed-off-by: Ming-ting Yao Wei m...@lxde.org
---
drivers/input/joystick/xpad.c | 21 -
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index 3aa2f3f..61c7611 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -31,12 +31,14 @@
* - the iForce driverdrivers/char/joystick/iforce.c
* - the skeleton-driver drivers/usb/usb-skeleton.c
* - Xbox 360 information http://www.free60.org/wiki/Gamepad
+ * - Xbox One information
https://github.com/quantus/xbox-one-controller-protocol
*
* Thanks to:
* - ITO Takayuki for providing essential xpad information on his website
* - Vojtech Pavlik - iforce driver / input subsystem
* - Greg Kroah-Hartman - usb-skeleton driver
* - XBOX Linux project - extra USB id's
+ * - Pekka Pöyry (quantus) - Xbox One controller reverse engineering
*
* TODO:
* - fine tune axes (especially trigger axes)
@@ -828,6 +830,23 @@ static int xpad_play_effect(struct input_dev *dev, void
*data, struct ff_effect
return usb_submit_urb(xpad-irq_out, GFP_ATOMIC);
+ case XTYPE_XBOXONE:
+ xpad-odata[0] = 0x09; /* activate rumble */
+ xpad-odata[1] = 0x08;
+ xpad-odata[2] = 0x00;
+ xpad-odata[3] = 0x08; /* continuous effect */
+ xpad-odata[4] = 0x00; /* simple rumble mode */
+ xpad-odata[5] = 0x03; /* L and R actuator only */
+ xpad-odata[6] = 0x00; /* TODO: LT actuator */
+ xpad-odata[7] = 0x00; /* TODO: RT actuator */
+ xpad-odata[8] = strong / 256; /* left actuator */
+ xpad-odata[9] = weak / 256;/* right actuator */
+ xpad-odata[10] = 0x80; /* length of pulse */
+ xpad-odata[11] = 0x00; /* stop period of pulse */
+ xpad-irq_out-transfer_buffer_length = 12;
+
+ return usb_submit_urb(xpad-irq_out, GFP_ATOMIC);
+
default:
dev_dbg(xpad-dev-dev,
%s - rumble command sent to unsupported xpad
type: %d\n,
@@ -841,7 +860,7 @@ static int xpad_play_effect(struct input_dev *dev, void
*data, struct ff_effect
static int xpad_init_ff(struct usb_xpad *xpad)
{
- if (xpad-xtype == XTYPE_UNKNOWN || xpad-xtype == XTYPE_XBOXONE)
+ if (xpad-xtype == XTYPE_UNKNOWN)
return 0;
input_set_capability(xpad-dev, EV_FF, FF_RUMBLE);
--
2.3.2 (Apple Git-55)
--
To unsubscribe from this list: send the line unsubscribe linux-input in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html