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

Leslie Zhai xiangzhai83 at gmail.com
Wed Jan 8 19:06:58 PST 2014


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