Hi Peter,
Yes, it is my issue short of communication with other developers from
all over the world. There are a lot of good Linux developers in China
contributed to open source, but owing to be lack of proper communication
with original authors or official maintainers, I have to hack &&
maintain out-of-date source code, then I want to change the bad
situation, for example, followed the official maintainer, forked the
github, discussed with you nice people :)
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.hutte...@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@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel
_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel