All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Input: xpad - fix rumble on Xbox One controllers with 2015 firmware
@ 2016-05-31 22:19 Cameron Gutman
  2016-05-31 22:32 ` Dmitry Torokhov
  0 siblings, 1 reply; 5+ messages in thread
From: Cameron Gutman @ 2016-05-31 22:19 UTC (permalink / raw)
  To: linux-input, dmitry.torokhov; +Cc: rojtberg

Xbox One controllers that shipped with or were upgraded to the 2015
firmware discard the current rumble packets we send. This patch changes
the Xbox One rumble packet to a form that the newer firmware will accept.

It is based on changes made to support newer Xbox One controllers in
the SteamOS brewmaster-4.1 kernel branch.

Signed-off-by: Cameron Gutman <aicommander@gmail.com>
---
 drivers/input/joystick/xpad.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index 804dbcc..923c572 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -1031,17 +1031,17 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect
 
 	case XTYPE_XBOXONE:
 		packet->data[0] = 0x09; /* activate rumble */
-		packet->data[1] = 0x08;
+		packet->data[1] = 0x00;
 		packet->data[2] = xpad->odata_serial++;
-		packet->data[3] = 0x08; /* continuous effect */
-		packet->data[4] = 0x00; /* simple rumble mode */
-		packet->data[5] = 0x03; /* L and R actuator only */
-		packet->data[6] = 0x00; /* TODO: LT actuator */
-		packet->data[7] = 0x00; /* TODO: RT actuator */
+		packet->data[3] = 0x09;
+		packet->data[4] = 0x00;
+		packet->data[5] = 0x0F;
+		packet->data[6] = 0x00;
+		packet->data[7] = 0x00;
 		packet->data[8] = strong / 512;	/* left actuator */
 		packet->data[9] = weak / 512;	/* right actuator */
-		packet->data[10] = 0x80;	/* length of pulse */
-		packet->data[11] = 0x00;	/* stop period of pulse */
+		packet->data[10] = 0xFF;
+		packet->data[11] = 0x00;
 		packet->data[12] = 0x00;
 		packet->len = 13;
 		packet->pending = true;
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] Input: xpad - fix rumble on Xbox One controllers with 2015 firmware
  2016-05-31 22:19 [PATCH] Input: xpad - fix rumble on Xbox One controllers with 2015 firmware Cameron Gutman
@ 2016-05-31 22:32 ` Dmitry Torokhov
  2016-05-31 22:49   ` Cameron Gutman
  0 siblings, 1 reply; 5+ messages in thread
From: Dmitry Torokhov @ 2016-05-31 22:32 UTC (permalink / raw)
  To: Cameron Gutman; +Cc: linux-input, rojtberg

Hi Cameron,

On Tue, May 31, 2016 at 05:19:51PM -0500, Cameron Gutman wrote:
> Xbox One controllers that shipped with or were upgraded to the 2015
> firmware discard the current rumble packets we send. This patch changes
> the Xbox One rumble packet to a form that the newer firmware will accept.

But what do we do with the older devices?

Thanks.

> 
> It is based on changes made to support newer Xbox One controllers in
> the SteamOS brewmaster-4.1 kernel branch.
> 
> Signed-off-by: Cameron Gutman <aicommander@gmail.com>
> ---
>  drivers/input/joystick/xpad.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
> index 804dbcc..923c572 100644
> --- a/drivers/input/joystick/xpad.c
> +++ b/drivers/input/joystick/xpad.c
> @@ -1031,17 +1031,17 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect
>  
>  	case XTYPE_XBOXONE:
>  		packet->data[0] = 0x09; /* activate rumble */
> -		packet->data[1] = 0x08;
> +		packet->data[1] = 0x00;
>  		packet->data[2] = xpad->odata_serial++;
> -		packet->data[3] = 0x08; /* continuous effect */
> -		packet->data[4] = 0x00; /* simple rumble mode */
> -		packet->data[5] = 0x03; /* L and R actuator only */
> -		packet->data[6] = 0x00; /* TODO: LT actuator */
> -		packet->data[7] = 0x00; /* TODO: RT actuator */
> +		packet->data[3] = 0x09;
> +		packet->data[4] = 0x00;
> +		packet->data[5] = 0x0F;
> +		packet->data[6] = 0x00;
> +		packet->data[7] = 0x00;
>  		packet->data[8] = strong / 512;	/* left actuator */
>  		packet->data[9] = weak / 512;	/* right actuator */
> -		packet->data[10] = 0x80;	/* length of pulse */
> -		packet->data[11] = 0x00;	/* stop period of pulse */
> +		packet->data[10] = 0xFF;
> +		packet->data[11] = 0x00;
>  		packet->data[12] = 0x00;
>  		packet->len = 13;
>  		packet->pending = true;
> -- 
> 2.7.4

-- 
Dmitry

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Input: xpad - fix rumble on Xbox One controllers with 2015 firmware
  2016-05-31 22:32 ` Dmitry Torokhov
@ 2016-05-31 22:49   ` Cameron Gutman
  2016-05-31 23:04     ` Cameron Gutman
  0 siblings, 1 reply; 5+ messages in thread
From: Cameron Gutman @ 2016-05-31 22:49 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, rojtberg

It looks like SteamOS has always used this rumble packet for Xbox One per [0].
Commit 0604949ce3b9a59c ("Input: xpad - add rumble support for Xbox One
controller") implemented a different rumble packet than Valve did in
their fork. Pierre-Loup A. Griffais pushed some of their changes upstream in
commit 2a6d7527b35cf987 ("Input: xpad - update Xbox One Force Feedback
Support") but seemed to have missed these differences in the packet format.


[0]: https://github.com/ValveSoftware/steamos_kernel/commit/f5f73eb889cac32cbabfc40362fe5635a2255836

On 05/31/2016 05:32 PM, Dmitry Torokhov wrote:
> Hi Cameron,
> 
> On Tue, May 31, 2016 at 05:19:51PM -0500, Cameron Gutman wrote:
>> Xbox One controllers that shipped with or were upgraded to the 2015
>> firmware discard the current rumble packets we send. This patch changes
>> the Xbox One rumble packet to a form that the newer firmware will accept.
> 
> But what do we do with the older devices?
> 
> Thanks.
> 
>>
>> It is based on changes made to support newer Xbox One controllers in
>> the SteamOS brewmaster-4.1 kernel branch.
>>
>> Signed-off-by: Cameron Gutman <aicommander@gmail.com>
>> ---
>>  drivers/input/joystick/xpad.c | 16 ++++++++--------
>>  1 file changed, 8 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
>> index 804dbcc..923c572 100644
>> --- a/drivers/input/joystick/xpad.c
>> +++ b/drivers/input/joystick/xpad.c
>> @@ -1031,17 +1031,17 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect
>>  
>>  	case XTYPE_XBOXONE:
>>  		packet->data[0] = 0x09; /* activate rumble */
>> -		packet->data[1] = 0x08;
>> +		packet->data[1] = 0x00;
>>  		packet->data[2] = xpad->odata_serial++;
>> -		packet->data[3] = 0x08; /* continuous effect */
>> -		packet->data[4] = 0x00; /* simple rumble mode */
>> -		packet->data[5] = 0x03; /* L and R actuator only */
>> -		packet->data[6] = 0x00; /* TODO: LT actuator */
>> -		packet->data[7] = 0x00; /* TODO: RT actuator */
>> +		packet->data[3] = 0x09;
>> +		packet->data[4] = 0x00;
>> +		packet->data[5] = 0x0F;
>> +		packet->data[6] = 0x00;
>> +		packet->data[7] = 0x00;
>>  		packet->data[8] = strong / 512;	/* left actuator */
>>  		packet->data[9] = weak / 512;	/* right actuator */
>> -		packet->data[10] = 0x80;	/* length of pulse */
>> -		packet->data[11] = 0x00;	/* stop period of pulse */
>> +		packet->data[10] = 0xFF;
>> +		packet->data[11] = 0x00;
>>  		packet->data[12] = 0x00;
>>  		packet->len = 13;
>>  		packet->pending = true;
>> -- 
>> 2.7.4
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Input: xpad - fix rumble on Xbox One controllers with 2015 firmware
  2016-05-31 22:49   ` Cameron Gutman
@ 2016-05-31 23:04     ` Cameron Gutman
  2016-06-01 18:34       ` Dmitry Torokhov
  0 siblings, 1 reply; 5+ messages in thread
From: Cameron Gutman @ 2016-05-31 23:04 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, rojtberg

Sorry, I realized I didn't directly answer the question you were asking.

To clarify my point,
Valve's rumble code was committed in 2014 for the original Xbox One controller
(before the 2015 firmware existed). It continues to work with the latest
firmware versions. It's our different implementation that isn't working
with the newer firmware.

Thanks,
Cameron


On 05/31/2016 05:49 PM, Cameron Gutman wrote:
> It looks like SteamOS has always used this rumble packet for Xbox One per [0].
> Commit 0604949ce3b9a59c ("Input: xpad - add rumble support for Xbox One
> controller") implemented a different rumble packet than Valve did in
> their fork. Pierre-Loup A. Griffais pushed some of their changes upstream in
> commit 2a6d7527b35cf987 ("Input: xpad - update Xbox One Force Feedback
> Support") but seemed to have missed these differences in the packet format.
> 
> 
> [0]: https://github.com/ValveSoftware/steamos_kernel/commit/f5f73eb889cac32cbabfc40362fe5635a2255836
> 
> On 05/31/2016 05:32 PM, Dmitry Torokhov wrote:
>> Hi Cameron,
>>
>> On Tue, May 31, 2016 at 05:19:51PM -0500, Cameron Gutman wrote:
>>> Xbox One controllers that shipped with or were upgraded to the 2015
>>> firmware discard the current rumble packets we send. This patch changes
>>> the Xbox One rumble packet to a form that the newer firmware will accept.
>>
>> But what do we do with the older devices?
>>
>> Thanks.
>>
>>>
>>> It is based on changes made to support newer Xbox One controllers in
>>> the SteamOS brewmaster-4.1 kernel branch.
>>>
>>> Signed-off-by: Cameron Gutman <aicommander@gmail.com>
>>> ---
>>>  drivers/input/joystick/xpad.c | 16 ++++++++--------
>>>  1 file changed, 8 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
>>> index 804dbcc..923c572 100644
>>> --- a/drivers/input/joystick/xpad.c
>>> +++ b/drivers/input/joystick/xpad.c
>>> @@ -1031,17 +1031,17 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect
>>>  
>>>  	case XTYPE_XBOXONE:
>>>  		packet->data[0] = 0x09; /* activate rumble */
>>> -		packet->data[1] = 0x08;
>>> +		packet->data[1] = 0x00;
>>>  		packet->data[2] = xpad->odata_serial++;
>>> -		packet->data[3] = 0x08; /* continuous effect */
>>> -		packet->data[4] = 0x00; /* simple rumble mode */
>>> -		packet->data[5] = 0x03; /* L and R actuator only */
>>> -		packet->data[6] = 0x00; /* TODO: LT actuator */
>>> -		packet->data[7] = 0x00; /* TODO: RT actuator */
>>> +		packet->data[3] = 0x09;
>>> +		packet->data[4] = 0x00;
>>> +		packet->data[5] = 0x0F;
>>> +		packet->data[6] = 0x00;
>>> +		packet->data[7] = 0x00;
>>>  		packet->data[8] = strong / 512;	/* left actuator */
>>>  		packet->data[9] = weak / 512;	/* right actuator */
>>> -		packet->data[10] = 0x80;	/* length of pulse */
>>> -		packet->data[11] = 0x00;	/* stop period of pulse */
>>> +		packet->data[10] = 0xFF;
>>> +		packet->data[11] = 0x00;
>>>  		packet->data[12] = 0x00;
>>>  		packet->len = 13;
>>>  		packet->pending = true;
>>> -- 
>>> 2.7.4
>>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Input: xpad - fix rumble on Xbox One controllers with 2015 firmware
  2016-05-31 23:04     ` Cameron Gutman
@ 2016-06-01 18:34       ` Dmitry Torokhov
  0 siblings, 0 replies; 5+ messages in thread
From: Dmitry Torokhov @ 2016-06-01 18:34 UTC (permalink / raw)
  To: Cameron Gutman; +Cc: linux-input, rojtberg

On Tue, May 31, 2016 at 06:04:18PM -0500, Cameron Gutman wrote:
> Sorry, I realized I didn't directly answer the question you were asking.
> 
> To clarify my point,
> Valve's rumble code was committed in 2014 for the original Xbox One controller
> (before the 2015 firmware existed). It continues to work with the latest
> firmware versions. It's our different implementation that isn't working
> with the newer firmware.

I see. I will tweak the commit message then.

Thanks!

> 
> Thanks,
> Cameron
> 
> 
> On 05/31/2016 05:49 PM, Cameron Gutman wrote:
> > It looks like SteamOS has always used this rumble packet for Xbox One per [0].
> > Commit 0604949ce3b9a59c ("Input: xpad - add rumble support for Xbox One
> > controller") implemented a different rumble packet than Valve did in
> > their fork. Pierre-Loup A. Griffais pushed some of their changes upstream in
> > commit 2a6d7527b35cf987 ("Input: xpad - update Xbox One Force Feedback
> > Support") but seemed to have missed these differences in the packet format.
> > 
> > 
> > [0]: https://github.com/ValveSoftware/steamos_kernel/commit/f5f73eb889cac32cbabfc40362fe5635a2255836
> > 
> > On 05/31/2016 05:32 PM, Dmitry Torokhov wrote:
> >> Hi Cameron,
> >>
> >> On Tue, May 31, 2016 at 05:19:51PM -0500, Cameron Gutman wrote:
> >>> Xbox One controllers that shipped with or were upgraded to the 2015
> >>> firmware discard the current rumble packets we send. This patch changes
> >>> the Xbox One rumble packet to a form that the newer firmware will accept.
> >>
> >> But what do we do with the older devices?
> >>
> >> Thanks.
> >>
> >>>
> >>> It is based on changes made to support newer Xbox One controllers in
> >>> the SteamOS brewmaster-4.1 kernel branch.
> >>>
> >>> Signed-off-by: Cameron Gutman <aicommander@gmail.com>
> >>> ---
> >>>  drivers/input/joystick/xpad.c | 16 ++++++++--------
> >>>  1 file changed, 8 insertions(+), 8 deletions(-)
> >>>
> >>> diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
> >>> index 804dbcc..923c572 100644
> >>> --- a/drivers/input/joystick/xpad.c
> >>> +++ b/drivers/input/joystick/xpad.c
> >>> @@ -1031,17 +1031,17 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect
> >>>  
> >>>  	case XTYPE_XBOXONE:
> >>>  		packet->data[0] = 0x09; /* activate rumble */
> >>> -		packet->data[1] = 0x08;
> >>> +		packet->data[1] = 0x00;
> >>>  		packet->data[2] = xpad->odata_serial++;
> >>> -		packet->data[3] = 0x08; /* continuous effect */
> >>> -		packet->data[4] = 0x00; /* simple rumble mode */
> >>> -		packet->data[5] = 0x03; /* L and R actuator only */
> >>> -		packet->data[6] = 0x00; /* TODO: LT actuator */
> >>> -		packet->data[7] = 0x00; /* TODO: RT actuator */
> >>> +		packet->data[3] = 0x09;
> >>> +		packet->data[4] = 0x00;
> >>> +		packet->data[5] = 0x0F;
> >>> +		packet->data[6] = 0x00;
> >>> +		packet->data[7] = 0x00;
> >>>  		packet->data[8] = strong / 512;	/* left actuator */
> >>>  		packet->data[9] = weak / 512;	/* right actuator */
> >>> -		packet->data[10] = 0x80;	/* length of pulse */
> >>> -		packet->data[11] = 0x00;	/* stop period of pulse */
> >>> +		packet->data[10] = 0xFF;
> >>> +		packet->data[11] = 0x00;
> >>>  		packet->data[12] = 0x00;
> >>>  		packet->len = 13;
> >>>  		packet->pending = true;
> >>> -- 
> >>> 2.7.4
> >>

-- 
Dmitry

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-06-01 18:34 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-31 22:19 [PATCH] Input: xpad - fix rumble on Xbox One controllers with 2015 firmware Cameron Gutman
2016-05-31 22:32 ` Dmitry Torokhov
2016-05-31 22:49   ` Cameron Gutman
2016-05-31 23:04     ` Cameron Gutman
2016-06-01 18:34       ` Dmitry Torokhov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.