History log of /haiku/src/add-ons/kernel/bus_managers/ps2/ps2_synaptics.h
Revision Date Author Comments
# 49efa33d 17-Jan-2023 PulkoMandy <pulkomandy@pulkomandy.tk>

ps2 synaptics: implement 'extended W' mode.

"Newer" synaptics touchpad support a new mode where they can report more
information to the host. In this mode, there is a different packet
format for tracking extra data from the touchpad, including a wheel
encoder (mousewheel) if available, and multitouch finger tracking.

This mode is documented in the Synaptics touchpad interfacing guide
(Synaptics document 511-000275-01 Rev. B), but was not yet implemented
in our driver.

It should help with detecting multiple fingers, or finger position on
clickpads to determine right or left click.

This change implements the following items from the Synaptics
interfacing guide:

- Cleanup and clarify the code for features detection to properly report
clickpads
- Enable "extended W" mode if supported
- Process extended W values 0 (mouse wheels, reported in the
touchpad_event structure and could be used by input_server for
scrolling), 1 (secondary finger), and 2 (finger count)
- Fix handling of wValue, which is not always a finger width
- Add handling of vValuen which indicates the finger width when wValue
doesn't

Overall, this should provide the movement_maker with a better picture of
what's happening.

Also improve tracing to show received packets and the corresponding
WValue since that's an important value in identifying which type of
packet it is.

Unfortunately I currently don't have a laptop with synaptics touchpad to
test this with.

Change-Id: If334392f4eb2a146955f6c8c897f0ab64d79b8d9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4425
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
Reviewed-by: nephele <nep@packageloss.eu>


# 5e596efe 15-Jul-2022 Augustin Cavalier <waddlesplash@gmail.com>

Refactor touchpad movement generation by migrating MovementMaker to userland.

This considerably overhauls touchpad event generation, simplifying and
cleaning it up considerably:

* Return the touchpad specifications through the MS_IS_TOUCHPAD ioctl.

* There is now a dedicated MS_READ_TOUCHPAD ioctl, as touchpads
can either return touchpad_movement structures or mouse_movement
ones depending on what mode they are operating in.

* Event repeating on timeouts is now handled in MovementMaker and
the input_server control thread, so MS_READ_TOUCHPAD takes
a timeout value. This means we can drop all the EventProducers.

* Use the real floating-point math functions in MovementMaker now
that we are running in userland.

* Drop unused structures, constants, headers, and other things
related to touchpad support.

Change-Id: I28cdb28e4100393a9338a8ebb865573cec13fc1e
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5455
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 79cb8f02 13-May-2018 Adrien Destugues <pulkomandy@pulkomandy.tk>

PS/2 synaptics: minimal clickpad support

Handled as a 1-button mouse. We didn't really support this since the old
Macintosh ADB mouses, so let's see if that code aged well!

Change-Id: Ibed2423023e821ae4ce608f0ddbc5ac32bfbd8f7


# 258b7d4a 10-May-2018 Adrien Destugues <pulkomandy@pulkomandy.tk>

ps2_synaptics: support Lenovo use of extra buttons

On some Thinkpads, the extra buttons are used for the trackpoint, so
they should be reported as "main" buttons, not extended ones. An
(undocumented) information query was added to the firmware to report
when this is the case, however it is not advertised as supported by the
firmware itself by the usual mechanism.

What we do is (just as the Linux driver) detect that the tocuhpad has a
PS/2 passthrough (likely used to daisy-chain a trackpoint on the same
PS/2 port) and also advertises extra buttons (an unlikely case, it is
already uncommon to even get a middle button these days...) and assume
that the information query is available then.

When the query is available and reports the quirk, the extended buttons
are reported as 0, 1, 2 (left, right, middle), instead of extra buttons
the userland would have no idea what to do with.

Change-Id: Iad5a9e140b6e49c298dcc901f4e331a4a847d7b2


# e003057f 10-May-2018 Adrien Destugues <pulkomandy@pulkomandy.tk>

PS/2 Synaptics: add support for extended buttons

It is possible to get up to 8 extra buttons on synaptics touchpads.
On some Thinkpad models, these are used to implement the trackpoint
buttons (reported as buttons 4, 5 and 6). Since the touchpad itself has
no buttons (it is a clickpad), we may at least try to handle these
properly.

Change-Id: I5d4021e36fb3ac86ecf213c5666f9b6ddd3e2bca


# 4b722b91 27-Jun-2011 Siarzhuk Zharski <zharik@gmx.li>

Proper handling of middle mouse event on capFourButtons and capMiddleButton
capable touchpads.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42329 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c152c70b 30-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

- ALPS and synaptics are sharing the same code to generate mouse events now. The movement generation is calibrated on the synaptics touchpad, though.
ALPS movements are fine now, hope the synaptics is still working. Please test! There are still some leftovers form switching from a c struct to a c++
class will fix that later.
- Support ALPS devices with passthrough.
- ALPS is still disabled because tap and edge motion is not working yet. The
problem is that synaptics generates more helper events which makes this a lot
easier to implement. My plan is to emulate this events to imitate the synatics touchpad.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41140 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e637ccf5 28-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Reapply the ps2 cpp patch. Thanks Axel.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41134 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 79bdca06 28-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Revert r41129 to get history back.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41133 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 278a2b8a 27-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Making the ps2 busmanager c++.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41129 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b78920b3 27-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Work in progress on a ALPS touchpad driver. The driver is roughly working but disabled at the moment. Its
more or less a copy of the synaptics driver. Next step is to refactor the movement generation and share the
code with the synaptics driver.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41124 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2c494653 14-Apr-2010 Axel Dörfler <axeld@pinc-software.de>

* Removed the at_kbd_io and AT keyboard stuff; this is now done within the PS/2
driver, and that driver is using the raw_key_info structure as well.
* Renamed kb_mouse_driver.h to keyboard_mouse_driver.h.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36267 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 707e415d 23-Jan-2010 Clemens Zeidler <clemens.zeidler@googlemail.com>

Allow a tap click when the right touchpad button is pressed.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35265 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f4992c30 27-Nov-2009 Clemens Zeidler <clemens.zeidler@googlemail.com>

- The right and bottom touchpad size was a bit to small, at least on my maschine (fix bug #5043).
- Don't allow scrolling when a pad button is pressed because we are likely in a drag action.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34326 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 34eb485a 06-Oct-2009 Axel Dörfler <axeld@pinc-software.de>

* Refactored the former touchevent_to_movement() code to get rid of the gotos,
and some code duplication.
* Fixed the missing click count in the former "movement" label (now in the
move_to_movement() function); the click count was always 0 in that case,
this was most obvious with Firefox where you couldn't click anything as long
as you had a finger on the touchpad.
* Made the functions static that aren't exported to the outside.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33469 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f229f567 06-Oct-2009 Axel Dörfler <axeld@pinc-software.de>

* Made the ps2_synactics.h header stand-alone.
* Coding style cleanup.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33447 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5c197c75 13-Nov-2008 Stephan Aßmus <superstippi@gmx.de>

* Implemented setting the "click count" correctly in the Synaptics driver.
* I feel the Synaptics driver is now good enough to give it more exposure
and turned it on again. If it gives you trouble for some reason, you can
turn it off again in ps2_dev.c, line 105.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28643 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 03973d27 02-Nov-2008 Stephan Aßmus <superstippi@gmx.de>

Automatic white space cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28459 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 802b6330 01-Nov-2008 Stephan Aßmus <superstippi@gmx.de>

* Fixed some of the weirdly changed define names.
* A few more style cleanups.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28429 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6849a228 01-Nov-2008 Stephan Aßmus <superstippi@gmx.de>

Patch by Clemens Zeilder:
* Implemented Synaptics touchpad support in the PS2 bus_manager by
refactoring/splitting the structure some and adding touchpad device
handling.
* Implemented Touchpad input_server device add-on
* Created Touchpad preflet for configuring advances Synaptics touchpad
options like scroll region (both horizontal and vertical) as well
as other neat stuff

Thanks a lot, Clemens!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28416 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4b722b91dbef7f8d005bfaec6174faa7cfcaecb4 27-Jun-2011 Siarzhuk Zharski <zharik@gmx.li>

Proper handling of middle mouse event on capFourButtons and capMiddleButton
capable touchpads.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42329 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c152c70b467536ee3e54c43674f70e1f849c4532 30-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

- ALPS and synaptics are sharing the same code to generate mouse events now. The movement generation is calibrated on the synaptics touchpad, though.
ALPS movements are fine now, hope the synaptics is still working. Please test! There are still some leftovers form switching from a c struct to a c++
class will fix that later.
- Support ALPS devices with passthrough.
- ALPS is still disabled because tap and edge motion is not working yet. The
problem is that synaptics generates more helper events which makes this a lot
easier to implement. My plan is to emulate this events to imitate the synatics touchpad.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41140 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e637ccf5c1c22c87fa0cb695a2d62d6ee1d92308 28-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Reapply the ps2 cpp patch. Thanks Axel.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41134 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 79bdca06506e69ebd8d9a1eecc5a246b21286472 28-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Revert r41129 to get history back.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41133 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 278a2b8aaa75b3252ca8de1eef36ca6afc836ac1 27-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Making the ps2 busmanager c++.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41129 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b78920b3f15866e9e833be60d1a57b6ecdf4dbee 27-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Work in progress on a ALPS touchpad driver. The driver is roughly working but disabled at the moment. Its
more or less a copy of the synaptics driver. Next step is to refactor the movement generation and share the
code with the synaptics driver.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41124 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2c4946532910e3cc9f66a92228a2334098e6de49 14-Apr-2010 Axel Dörfler <axeld@pinc-software.de>

* Removed the at_kbd_io and AT keyboard stuff; this is now done within the PS/2
driver, and that driver is using the raw_key_info structure as well.
* Renamed kb_mouse_driver.h to keyboard_mouse_driver.h.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36267 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 707e415d477a16f4f492840ee9315d6b473ec64c 23-Jan-2010 Clemens Zeidler <clemens.zeidler@googlemail.com>

Allow a tap click when the right touchpad button is pressed.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35265 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f4992c302567351487013cc0248f75a022ad50e0 27-Nov-2009 Clemens Zeidler <clemens.zeidler@googlemail.com>

- The right and bottom touchpad size was a bit to small, at least on my maschine (fix bug #5043).
- Don't allow scrolling when a pad button is pressed because we are likely in a drag action.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34326 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 34eb485aea4ff251540584055abaa954bb568057 06-Oct-2009 Axel Dörfler <axeld@pinc-software.de>

* Refactored the former touchevent_to_movement() code to get rid of the gotos,
and some code duplication.
* Fixed the missing click count in the former "movement" label (now in the
move_to_movement() function); the click count was always 0 in that case,
this was most obvious with Firefox where you couldn't click anything as long
as you had a finger on the touchpad.
* Made the functions static that aren't exported to the outside.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33469 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f229f56702c2cf5bd17912b8188dba836ed6508e 06-Oct-2009 Axel Dörfler <axeld@pinc-software.de>

* Made the ps2_synactics.h header stand-alone.
* Coding style cleanup.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33447 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5c197c75466ba2e970402dd5e942903238d2aea8 13-Nov-2008 Stephan Aßmus <superstippi@gmx.de>

* Implemented setting the "click count" correctly in the Synaptics driver.
* I feel the Synaptics driver is now good enough to give it more exposure
and turned it on again. If it gives you trouble for some reason, you can
turn it off again in ps2_dev.c, line 105.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28643 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 03973d27ebb2efebc7849de071648334e139b0cb 02-Nov-2008 Stephan Aßmus <superstippi@gmx.de>

Automatic white space cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28459 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 802b6330823547ede6b71a30219c4455c0a301a6 01-Nov-2008 Stephan Aßmus <superstippi@gmx.de>

* Fixed some of the weirdly changed define names.
* A few more style cleanups.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28429 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6849a22864a9edc90482d16a5fd35f64f671b3b9 01-Nov-2008 Stephan Aßmus <superstippi@gmx.de>

Patch by Clemens Zeilder:
* Implemented Synaptics touchpad support in the PS2 bus_manager by
refactoring/splitting the structure some and adding touchpad device
handling.
* Implemented Touchpad input_server device add-on
* Created Touchpad preflet for configuring advances Synaptics touchpad
options like scroll region (both horizontal and vertical) as well
as other neat stuff

Thanks a lot, Clemens!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28416 a95241bf-73f2-0310-859d-f6bbb57e9c96