x, y in struct _SynapticsSHM is ABS_X, ABS_Y, why not ABS_MT_POSITION_X, ABS_MT_POSITION_Y?

Peter Hutterer peter.hutterer at who-t.net
Wed Jan 8 16:07:13 PST 2014


On Wed, Jan 08, 2014 at 09:28:29PM +0800, Zhai Xiang wrote:
> 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.

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.

> 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 http://v.youku.com/v_show/id_XNjU5MTk4MTk2.html
> 
> 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?

well, given that I'm the input maintainer I'm gonna say "yes" :)

> 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?

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 https://github.com/whot/libtouchpad which is a test-bed for a
couple of things that I'll move over to libinput eventually.

Cheers,
   Peter

> 
> 2014/1/6 Peter Hutterer <peter.hutterer at who-t.net>
> 
> > On Sat, Jan 04, 2014 at 04:25:51PM +0800, Leslie Zhai wrote:
> > > Hi xorg developers,
> > >
> > > in xserver-xorg-input-synaptics-1.6.2/include/synaptics.h
> > > the struct _SynapticsSHM is shown as below:
> >
> > 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
> >
> > > ```
> > > 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
> > > _______________________________________________
> > > xorg-devel at lists.x.org: X.Org development
> > > Archives: http://lists.x.org/archives/xorg-devel
> > > Info: http://lists.x.org/mailman/listinfo/xorg-devel
> > >
> >


More information about the xorg-devel mailing list