Yet another ALPS dualpoint TP protocol in preparation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello everybody,

yes, I'm another poor soul who ended up with an ALPS touchpad.

More specifically (although not much helpfully), it's a device
ALPS manufactured for my Toshiba Portege Z30-A-12N.
I've written to both ALPS and Toshiba with pleads for tech.
documentation, but (not surprisingly) Toshiba didn't respond
at all, ALPS just told me they can't help me...
The same old song (although it never hurts to try).

Well, being Linux user for quite some time and SW developer
myself, I decided to do a reverse analysis of the device,
hoping to get proper support of its capabilities in psmouse
kernel module.

Here's a short list of what I've done (hope I didn't bore
you off up to this point, it'll turn worse ;-):

1/
I've contacted Sebastian Kapfer, the current maintainer
of the ALPS sub-driver; with his advice and support,
I was able to find out that the device responds to
"AlpsPS/2 v3 Rushmore" flavour of HW initialisation routine.
I should note here that the device works in plain PS/2 mouse
compatibility mode unless the HW init. sequence above is executed.

2/
I've created a simple tool for reverse analysis of the device PS/2
protocol; it's here (just in case someone else would find it helpful):
https://github.com/vencik/alsp-ra
I was able to successfully unravel the device protocol packet structure
and have drafted a new version (codename "v7").

3/
I'm now in process of implementing the driver; so far, the trackstick
works fine, the TP sends abs. coords OK, I got tap and tap-and-drag
working too (although fine tuning shall be nice).
I can distinguish 2 fingers, either, and get secondary coords.
I've however hit a few issues:

4/
I'm using the (apparently) old BTN_TOOL_FINGER / BTN_TOOL_DOUBLETAP
input_report_* interface.
Accordingly to the documentation and what I saw in the code,
the new input_mt_slot & input_mt_report_slot_state should be more
suitable for multitouch (the touchpad can apparently detect at least
3, maybe even more, fingers).
Although I don't really need that, it seems better to use the more
general approach.
However, I don't seem to be able to get any events reported using
that new iface.
Do I need to do any special initialisation or something?
Note that I do use alps_set_abs_params_mt for the set_abs_params
callback.
Or perhaps do I need to set something on the synaptics X11 driver?

5/
I've also noticed that the TP seems to get out-of-sync or something
if I re-load the driver and touch it too soon before the X server
loads the synaptics driver.
If I wait for about 3 seconds, it works fine.
If I touch it sooner, I get no cursor (although the other trackstick
device still works nicely and so do the TP buttons).
Is there any reset required/possible?

6/
I also have a bit of trouble reporting switch from 2 to one touch.
When that happens, I try to
input_report_key(dev, BTN_TOOL_DOUBLETAP, 0)
and then
input_report_key(dev, BTN_TOOL_FINGER, 1)
(with sync) to avoid cursor skip if the primary touch is the lost
one, but that doesn't seem to do the trick.
What should I do?

7/
Well, there'll be much more to do, but so far, the above are the most
interesting/bugging issues.

Any help/advice/moral support highly appreciated. :-)

Also, don't hesitate to point me to any existing info resources
(and at this point, I'd like to apologise if asking an already responded
question).

Of course, if anyone else have similar device, I'd very much like to
share findings or (at some point) perhaps get the opportunity to
test the code on another machine.

Thanks,

Best regards

vencik



--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux