Re: [Qemu-devel] [PATCH v2] usb-hid: Fix 0/0 position for Windows in tablet mode

2011-07-29 Thread andrzej zaborowski
On 13 July 2011 23:05, Andreas Färber andreas.faer...@web.de wrote:
 Am 12.07.2011 um 09:47 schrieb Jan Kiszka:

 On 2011-07-04 20:15, andrzej zaborowski wrote:

 On 26 June 2011 11:11, Jan Kiszka jan.kis...@web.de wrote:

 On 2011-06-25 15:10, Andreas Färber wrote:

 Am 25.06.2011 um 14:55 schrieb Jan Kiszka:

 On 2011-06-25 14:37, Andreas Färber wrote:

 Am 24.06.2011 um 16:27 schrieb Jan Kiszka:

 For unknown reasons, Windows drivers (tested with XP and Win7)
 ignore
 usb-tablet events that move the pointer to 0/0. So always set bit 0
 of
 the coordinates.

 Signed-off-by: Jan Kiszka jan.kis...@siemens.com
 ---
 hw/usb-hid.c |    6 --
 1 files changed, 4 insertions(+), 2 deletions(-)

 diff --git a/hw/usb-hid.c b/hw/usb-hid.c
 index d711b5c..2b9a451 100644
 --- a/hw/usb-hid.c
 +++ b/hw/usb-hid.c
 @@ -457,8 +457,10 @@ static void
 usb_pointer_event_combine(USBPointerEvent *e, int xyrel,
      e-xdx += x1;
      e-ydy += y1;
  } else {
 -        e-xdx = x1;
 -        e-ydy = y1;
 +        /* Windows drivers do not like the 0/0 position and ignore
 such
 +         * events. */
 +        e-xdx = x1 | 1;
 +        e-ydy = y1 | 1;

 Doesn't this change mean we can't access any other even pixel either?

 Only on 32767x32767 screens (that's the resolution of the tablet).

 Well, if it's just a fix for 0/0 I would've expected something like:

 e-xdx = x1 ? x1 : 1;
 e-ydy = y1 ? y1 : 1;

 Works as well, my version is a little bit simpler. But I don't mind,
 will post whatever is preferred to fix this.

 Would it be enough to just do this for x or y, not both?

 Yes, looks like. Is this one better?

I pushed this version, thanks.

Cheers



Re: [Qemu-devel] [PATCH v2] usb-hid: Fix 0/0 position for Windows in tablet mode

2011-07-13 Thread Andreas Färber

Am 12.07.2011 um 09:47 schrieb Jan Kiszka:


On 2011-07-04 20:15, andrzej zaborowski wrote:

On 26 June 2011 11:11, Jan Kiszka jan.kis...@web.de wrote:

On 2011-06-25 15:10, Andreas Färber wrote:

Am 25.06.2011 um 14:55 schrieb Jan Kiszka:


On 2011-06-25 14:37, Andreas Färber wrote:

Am 24.06.2011 um 16:27 schrieb Jan Kiszka:

For unknown reasons, Windows drivers (tested with XP and Win7)  
ignore
usb-tablet events that move the pointer to 0/0. So always set  
bit 0 of

the coordinates.

Signed-off-by: Jan Kiszka jan.kis...@siemens.com
---
hw/usb-hid.c |6 --
1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/hw/usb-hid.c b/hw/usb-hid.c
index d711b5c..2b9a451 100644
--- a/hw/usb-hid.c
+++ b/hw/usb-hid.c
@@ -457,8 +457,10 @@ static void
usb_pointer_event_combine(USBPointerEvent *e, int xyrel,
  e-xdx += x1;
  e-ydy += y1;
  } else {
-e-xdx = x1;
-e-ydy = y1;
+/* Windows drivers do not like the 0/0 position and  
ignore

such
+ * events. */
+e-xdx = x1 | 1;
+e-ydy = y1 | 1;


Doesn't this change mean we can't access any other even pixel  
either?


Only on 32767x32767 screens (that's the resolution of the tablet).


Well, if it's just a fix for 0/0 I would've expected something  
like:


e-xdx = x1 ? x1 : 1;
e-ydy = y1 ? y1 : 1;


Works as well, my version is a little bit simpler. But I don't mind,
will post whatever is preferred to fix this.


Would it be enough to just do this for x or y, not both?


Yes, looks like. Is this one better?


To me it looks better, yes.

Thanks,
Andreas


--8-

From: Jan Kiszka jan.kis...@siemens.com

For unknown reasons, Windows drivers (tested with XP and Win7) ignore
usb-tablet events that move the pointer to 0/0. So always report 0/0  
as

1/0.

Signed-off-by: Jan Kiszka jan.kis...@siemens.com
---
hw/usb-hid.c |5 +
1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/hw/usb-hid.c b/hw/usb-hid.c
index d711b5c..faf91c4 100644
--- a/hw/usb-hid.c
+++ b/hw/usb-hid.c
@@ -459,6 +459,11 @@ static void  
usb_pointer_event_combine(USBPointerEvent *e, int xyrel,

} else {
e-xdx = x1;
e-ydy = y1;
+/* Windows drivers do not like the 0/0 position and ignore  
such

+ * events. */
+if (!(x1 | y1)) {
+x1 = 1;
+}
}
e-dz += z1;
}
--
1.7.3.4





[Qemu-devel] [PATCH v2] usb-hid: Fix 0/0 position for Windows in tablet mode

2011-07-12 Thread Jan Kiszka
On 2011-07-04 20:15, andrzej zaborowski wrote:
 On 26 June 2011 11:11, Jan Kiszka jan.kis...@web.de wrote:
 On 2011-06-25 15:10, Andreas Färber wrote:
 Am 25.06.2011 um 14:55 schrieb Jan Kiszka:

 On 2011-06-25 14:37, Andreas Färber wrote:
 Am 24.06.2011 um 16:27 schrieb Jan Kiszka:

 For unknown reasons, Windows drivers (tested with XP and Win7) ignore
 usb-tablet events that move the pointer to 0/0. So always set bit 0 of
 the coordinates.

 Signed-off-by: Jan Kiszka jan.kis...@siemens.com
 ---
 hw/usb-hid.c |6 --
 1 files changed, 4 insertions(+), 2 deletions(-)

 diff --git a/hw/usb-hid.c b/hw/usb-hid.c
 index d711b5c..2b9a451 100644
 --- a/hw/usb-hid.c
 +++ b/hw/usb-hid.c
 @@ -457,8 +457,10 @@ static void
 usb_pointer_event_combine(USBPointerEvent *e, int xyrel,
e-xdx += x1;
e-ydy += y1;
} else {
 -e-xdx = x1;
 -e-ydy = y1;
 +/* Windows drivers do not like the 0/0 position and ignore
 such
 + * events. */
 +e-xdx = x1 | 1;
 +e-ydy = y1 | 1;

 Doesn't this change mean we can't access any other even pixel either?

 Only on 32767x32767 screens (that's the resolution of the tablet).

 Well, if it's just a fix for 0/0 I would've expected something like:

 e-xdx = x1 ? x1 : 1;
 e-ydy = y1 ? y1 : 1;

 Works as well, my version is a little bit simpler. But I don't mind,
 will post whatever is preferred to fix this.
 
 Would it be enough to just do this for x or y, not both?

Yes, looks like. Is this one better?

Jan

--8-

From: Jan Kiszka jan.kis...@siemens.com

For unknown reasons, Windows drivers (tested with XP and Win7) ignore
usb-tablet events that move the pointer to 0/0. So always report 0/0 as
1/0.

Signed-off-by: Jan Kiszka jan.kis...@siemens.com
---
 hw/usb-hid.c |5 +
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/hw/usb-hid.c b/hw/usb-hid.c
index d711b5c..faf91c4 100644
--- a/hw/usb-hid.c
+++ b/hw/usb-hid.c
@@ -459,6 +459,11 @@ static void usb_pointer_event_combine(USBPointerEvent *e, 
int xyrel,
 } else {
 e-xdx = x1;
 e-ydy = y1;
+/* Windows drivers do not like the 0/0 position and ignore such
+ * events. */
+if (!(x1 | y1)) {
+x1 = 1;
+}
 }
 e-dz += z1;
 }
-- 
1.7.3.4