Re: [PATCH] HID: wiimote: Fix IR data parser

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 8 May 2012, David Herrmann wrote:

> We incorrectly parse incoming IR data. The extra byte contains the upper
> bits and not the lower bits of the x/y coordinates. User-space expects
> absolute position data from us so this patch does not break existing
> applications. On the contrary, it extends the virtual view and fixes
> garbage reports for margin areas of the virtual screen.
> 
> Cc: stable@xxxxxxxxxx
> Reported-by: Peter Bukovsky <bukovsky.peter@xxxxxxxxx>
> Signed-off-by: David Herrmann <dh.herrmann@xxxxxxxxxxxxxx>
> ---
>  drivers/hid/hid-wiimote-core.c |   16 +++++-----------
>  1 file changed, 5 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/hid/hid-wiimote-core.c b/drivers/hid/hid-wiimote-core.c
> index cac3589..84e2fbe 100644
> --- a/drivers/hid/hid-wiimote-core.c
> +++ b/drivers/hid/hid-wiimote-core.c
> @@ -769,7 +769,7 @@ static void __ir_to_input(struct wiimote_data *wdata, const __u8 *ir,
>  
>  	/*
>  	 * Basic IR data is encoded into 3 bytes. The first two bytes are the
> -	 * upper 8 bit of the X/Y data, the 3rd byte contains the lower 2 bits
> +	 * lower 8 bit of the X/Y data, the 3rd byte contains the upper 2 bits
>  	 * of both.
>  	 * If data is packed, then the 3rd byte is put first and slightly
>  	 * reordered. This allows to interleave packed and non-packed data to
> @@ -778,17 +778,11 @@ static void __ir_to_input(struct wiimote_data *wdata, const __u8 *ir,
>  	 */
>  
>  	if (packed) {
> -		x = ir[1] << 2;
> -		y = ir[2] << 2;
> -
> -		x |= ir[0] & 0x3;
> -		y |= (ir[0] >> 2) & 0x3;
> +		x = ir[1] | ((ir[0] & 0x03) << 8);
> +		y = ir[2] | ((ir[0] & 0x0c) << 6);
>  	} else {
> -		x = ir[0] << 2;
> -		y = ir[1] << 2;
> -
> -		x |= (ir[2] >> 4) & 0x3;
> -		y |= (ir[2] >> 6) & 0x3;
> +		x = ir[0] | ((ir[2] & 0x30) << 4);
> +		y = ir[1] | ((ir[2] & 0xc0) << 2);

Applied, thanks David.

-- 
Jiri Kosina
SUSE Labs
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux