<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Peter,<br>
    <br>
    I am debugging geis-2.2.16 these days, and also read about synaptics
    1.7.x source code, in 1.7.x, it uses xf86PostTouchEvent, post
    multitouch event to X, then the client application, such as
    touchegg, is able to get XEvent in a while loop, is that right?<br>
    <br>
    But in 1.7.x src/eventcomm.c, about the 576 line, it still treats
    ABS_MT_POSITION_X as cumulative_dx, and I read about your
    libtouchpad source code hosting on github src/touchpad-events.c,
    about the 42 line, it correctly treats ABS_MT_POSITION_X as x.<br>
    <br>
    Take Linux multitouch protocol type B for example,<br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <br>
    ABS_MT_SLOT 0<br>
    ABS_MT_TRACKING_ID 45
    <br>
    ABS_MT_POSITION_X x[0]
    <br>
    ABS_MT_POSITION_Y y[0]
    <br>
    ABS_MT_SLOT 1
    <br>
    ABS_MT_TRACKING_ID 46
    <br>
    ABS_MT_POSITION_X x[1]
    <br>
    ABS_MT_POSITION_Y y[1]
    <br>
    SYN_REPORT<br>
    <br>
    During a SYN_REPORT period, there are might several
    (ABS_MT_POSITION_X, ABS_MT_POSITION_Y) 2D points to indicate the
    positions where multi-fingers touched, but synaptics 1.7.x only
    maintain 1 (ABS_MT_POSITION_X, ABS_MT_POSITION_Y) point, it might
    lost other multitouch points.<br>
    It is able to switch to tty2, because synaptics process used device
    file descriptor, run evtest /dev/input/eventX to print_absdata, and
    I have no idea how to directly read the device fd under tty7, such
    as gnome shell, kde, sort of DE... thanks a lot :)<br>
    <br>
    <blockquote cite="mid:20140109000712.GA17716@yabbi.redhat.com"
      type="cite">
      <pre wrap="">On Wed, Jan 08, 2014 at 09:28:29PM +0800, Zhai Xiang wrote:
</pre>
      <blockquote type="cite">
        <pre wrap="">Hi Peter,

Sorry for my late reply because I wen to Beijing for a short business
travel.

Yes, I read about the source code about 1.7.x by apt-get source
xserver-xorg-input-synaptics under Linux Deepin 2014, the SHM has been
completely removed.
</pre>
      </blockquote>
      <pre wrap="">
generally I recommend looking at the git sources before you hack on any
software project, much more likely to be up-to-date than the package a
distribution ships.

</pre>
      <blockquote type="cite">
        <pre wrap="">And I do not want to hack the 1.6.x source code under Linux Deepin 2013 to
support ABS_MT_SLOT, ABS_MT_POSITION_X && ABS_MT_POSITION_Y sort of
multitouch support, even it supports multitouch and gesture recognition,
such as 2 fingers to zoom out/in, 4 fingers swipe up to show all open
windows, 4 fingers swipe right to switch to 2nd work space, 4 fingers swipe
left to switch to 1st work space, 3 fingers to move active window, the demo
video shown as <a class="moz-txt-link-freetext" href="http://v.youku.com/v_show/id_XNjU5MTk4MTk2.html">http://v.youku.com/v_show/id_XNjU5MTk4MTk2.html</a>

You said you are writing the driver with multitouch support using a
different base design, can I ask whether or not the driver`s source code
will be accepted by xorg official maintainer?
</pre>
      </blockquote>
      <pre wrap="">
well, given that I'm the input maintainer I'm gonna say "yes" :)

</pre>
      <blockquote type="cite">
        <pre wrap="">Would it be OK for you if I also contribute to your driver? If it is OK,
may I have your driver source code version control link such as github or
something else?
</pre>
      </blockquote>
      <pre wrap="">
it's called libinput but currently spread across some personal github
repositories. it'll be on freedesktop soon, but it's still very early
stages with a lot of the top-level work to be sorted out first so it's a bit
too early to go full volume on hacking on it. I've got an experimental
driver in <a class="moz-txt-link-freetext" href="https://github.com/whot/libtouchpad">https://github.com/whot/libtouchpad</a> which is a test-bed for a
couple of things that I'll move over to libinput eventually.

Cheers,
   Peter

</pre>
      <blockquote type="cite">
        <pre wrap="">
2014/1/6 Peter Hutterer <a class="moz-txt-link-rfc2396E" href="mailto:peter.hutterer@who-t.net"><peter.hutterer@who-t.net></a>

</pre>
        <blockquote type="cite">
          <pre wrap="">On Sat, Jan 04, 2014 at 04:25:51PM +0800, Leslie Zhai wrote:
</pre>
          <blockquote type="cite">
            <pre wrap="">Hi xorg developers,

in xserver-xorg-input-synaptics-1.6.2/include/synaptics.h
the struct _SynapticsSHM is shown as below:
</pre>
          </blockquote>
          <pre wrap="">
SHM has been completely removed in synaptics 1.7, it's largely a leftover
from before device properties where it was needed for run-time
configuration. it had't been updated in a while, so any code that deals
with
it is likely outdated.

updating synaptics to support multitouch properly is a bit of a larger
issue, it's likely easier to write the driver from scratch using a
different
base design (which I'm currently in the process of doing).

Cheers,
   Peter

</pre>
          <blockquote type="cite">
            <pre wrap="">```
typedef struct _SynapticsSHM {
int version; /* Driver version */

/* Current device state */
int x, y; /* actual x, y coordinates */
int z; /* pressure value */
int numFingers; /* number of fingers */
int fingerWidth; /* finger width value */
int left, right, up, down; /* left/right/up/down buttons */
Bool multi[8];
Bool middle;
} SynapticsSHM;
```

there are x and y, because I want to know what they are, then read about
src/eventcomm.c
```
if (ev.code < ABS_MT_SLOT) {
switch (ev.code) {
case ABS_X:
hw->x = apply_st_scaling(proto_data, ev.value, 0);
break;
case ABS_Y:
hw->y = apply_st_scaling(proto_data, ev.value, 1);
break;
case ABS_PRESSURE:
hw->z = ev.value;
break;
case ABS_TOOL_WIDTH:
hw->fingerWidth = ev.value;
break;
}
}
```

Why use ABS_X for hw->x?
I want to recognize multi-touch gesture, such as zoom in/out, with
ABS_MT_SLOT, ABS_MT_POSITION_X and ABS_MT_POSITION_Y based on Linux
Multi-touch (MT) Protocol.
But struct _SynapticsSHM only provides ABS_X and ABS_Y, even there is
numFingers, it is still unable to distinguish which finger touching the
point1, point2 or pointN...

So I hacked the struct _SynapticsSHM, added int slot, mt_x, mt_y, shown
as below:
```
typedef struct _SynapticsSHM {
int version; /* Driver version */

/* Current device state */
int x, y; /* actual x, y coordinates */
int z; /* pressure value */
int numFingers; /* number of fingers */
int fingerWidth; /* finger width value */
int left, right, up, down; /* left/right/up/down buttons */
Bool multi[8];
Bool middle;

int slot;
int mt_x;
int mt_y;
} SynapticsSHM;
```

and also hacked src/eventcomm.c, using ABS_MT_POSITION_X for mt_x, shown
as below:
```
case EV_ABS:
if (ev.code == ABS_MT_SLOT)
hw->slot = ev.value;
if (ev.code == ABS_MT_POSITION_X)
hw->mt_x = ev.value;
if (ev.code == ABS_MT_POSITION_Y)
hw->mt_y = ev.value;
```

Then I can use slot, mt_x, mt_y to recognize multi-touch gesture such as
zoom in, rotate ... but that is hacking way, perhaps there are some
synaptics developers already considered about multi-touch gesture
recognization requirement, it might be in TODO list.

Please someone give me some advice, thanks a lot!

Leslie Zhai
_______________________________________________
<a class="moz-txt-link-abbreviated" href="mailto:xorg-devel@lists.x.org">xorg-devel@lists.x.org</a>: X.Org development
Archives: <a class="moz-txt-link-freetext" href="http://lists.x.org/archives/xorg-devel">http://lists.x.org/archives/xorg-devel</a>
Info: <a class="moz-txt-link-freetext" href="http://lists.x.org/mailman/listinfo/xorg-devel">http://lists.x.org/mailman/listinfo/xorg-devel</a>

</pre>
          </blockquote>
          <pre wrap="">
</pre>
        </blockquote>
      </blockquote>
    </blockquote>
    <br>
  </body>
</html>