NAME
pms —
PS/2 auxiliary port mouse
driver
SYNOPSIS
pckbc* at isa?
pms* at pckbc?
wsmouse* at pms?
options PMS_DISABLE_POWERHOOK
options PMS_SYNAPTICS_TOUCHPAD
options PMS_ELANTECH_TOUCHPAD
options PMS_ALPS_TOUCHPAD
DESCRIPTION
The
pms driver provides an interface to PS/2 auxiliary port
mice within the
wscons(4)
framework. Parent device in terms of the autoconfiguration framework is
pckbc(4), the PC keyboard
controller. “pms” is a generic driver which supports mice using
common variants of the PS/2 protocol, including wheel mice of the
“IntelliMouse” breed. Wheel movements are mapped to a third (z-)
axis. The driver is believed to work with both 3-button and 5-button mice with
scroll wheels. Mice which use other protocol extensions are not currently
supported, but might be if protocol documentation could be found. Mouse
related data are accessed by
wsmouse(4) devices.
The
pms driver has been updated to attempt to renegotiate
mouse protocol after seeing suspicious or defective mouse protocol packets, or
unusual delays in the middle of a packet; this should improve the chances that
a mouse will recover after being switched away or reset (for instance, by a
console switch).
The
PMS_DISABLE_POWERHOOK kernel option disables PS/2
reset on resume.
In addition, the
pms driver supports the
“Synaptics”, “Elantech” and “ALPS”
touchpads in native mode, enabled with the
PMS_SYNAPTICS_TOUCHPAD,
PMS_ELANTECH_TOUCHPAD and
PMS_ALPS_TOUCHPAD kernel options. This allows the driver
to take advantage of extra features available on Synaptics, Elantech and ALPS
Touchpads.
The following
sysctl(8) variables
control behavior of Synaptics touchpads:
-
-
hw.synaptics.up_down_emulation
- If the touchpad reports the existence of Up/Down buttons,
this value determines if they should be reported as button 4 and 5 events
or if they should be used to emulate some other event. When set to 0,
report Up/Down events as buttons 4 and 5. When set to 1, the Up and Down
buttons are both mapped to the middle button. When set to 2 (default), the
Up and Down buttons are used for Z-axis emulation, which more closely
resembles how mouse wheels operate.
-
-
hw.synaptics.up_down_motion_delta
- When the Up/Down buttons are used for Z-axis emulation,
this value specifies the emulated delta-Z value per click.
-
-
hw.synaptics.gesture_move
- Gestures will not be recognised if the finger moves by more
than this amount between taps.
-
-
hw.synaptics.gesture_length
- Gestures will not be recognised if the number of packets
(at 80 packets per second) between taps exceeds this value.
-
-
hw.synaptics.edge_left
-
hw.synaptics.edge_right
-
hw.synaptics.edge_top
-
hw.synaptics.edge_bottom
- These values define a border around the touchpad which will
be used for edge motion emulation during a drag gesture. If a drag gesture
is in progress and the finger moves into this border, the driver will
behave as if the finger continues to move in the same direction beyond the
edge of the touchpad.
-
-
hw.synaptics.edge_motion_delta
- This specifies the pointer speed when edge motion is in
effect.
-
-
hw.synaptics.finger_high
- The driver will ignore new finger events until the reported
pressure exceeds this value.
-
-
hw.synaptics.finger_low
- The driver will assume a finger remains on the touchpad
until the reported pressure drops below this value.
-
-
hw.synaptics.two_fingers_emulation
- More recent touchpads can report the presence of more than
one finger on the pad. This value determines how such events are used. If
set to 0 (default), two-finger events are ignored. If set to 1, two-finger
events generate a right button click. If set to 2, two-finger events
generate a middle button click.
-
-
hw.synaptics.scale_x
-
hw.synaptics.scale_y
- Scale factor used to divide movement deltas derived from
Synaptics coordinates (0-6143) to yield more reasonable values (default
16).
-
-
hw.synaptics.max_speed_x
-
hw.synaptics.max_speed_y
- Limits pointer rate of change (after scaling) per reported
movement event (default 32).
-
-
hw.synaptics.movement_threshold
- Movements of less than this value (in Synaptics
coordinates) are ignored (default 4).
-
-
hw.synaptics.button_boundary
- Sets the top edge of the button emulation region on a
clickpad. Since a clickpad only reports left clicks this region is used to
emulate two or three buttons by detecting the finger location and
reporting either a button 2 or button 3 click iff the click occurs within
the region bounded by button_boundary and the bottom of the clickpad.
-
-
hw.synaptics.button3_edge
- This defines the left hand edge of the button 3 region. If
a click occurs in the region bounded by button_boundary, button3_edge and
the right hand edge of the click pad then the click will be reported as a
button3 event. Button 3 emulation can be disabled by setting button3_edge
to the right hand edge of the clickpad.
-
-
hw.synaptics.button2_edge
- This defines the left hand edge of the button 2 region. The
button 2 region is bounded by button2_edge, button3_edge and
button_boundary. If a click occurs in this region then it will be reported
as a button2 event. For completeness, the region between the left hand
side of the clickpad, button2_edge and button_boundary will be reported as
a button1 event as will any clicks that occur outside the button emulation
region.
The following
sysctl(8) variables
control behavior of Elantech touchpads:
-
-
hw.elantech.xy_precision_shift
-
hw.elantech.z_precision_shift
- Increased values improve the accuracy of X, Y, and Z-axis
reporting at the expense of slower mouse movement (default 2 for xy, and 3
for z).
For Elantech touchpads, the Z-axis is emulated using two-finger Y-axis
reporting.
The following
sysctl(8) variables
control behavior of ALPS touchpads:
-
-
hw.alps.touchpad_xy_precision_shift
-
hw.alps.tackstick_xy_precision_shift
- Decreased values improve the accuracy of X and Y-axis
reporting at the expense of slower mouse movement (default 2 for touchpad
and 1 for TrackStick).
SEE ALSO
pckbc(4),
ums(4),
wsmouse(4)
AUTHORS
The
pms driver was originally written by
Christopher G. Demetriou. The changes to merge the
“IntelliMouse” protocol in, and reset the mouse in the event of
protocol problems, were contributed by
Peter Seebach.
Special thanks to Ray Trent, at Synaptics, who contributed valuable insight
into how to identify bogus mouse data. The changes to add
“Synaptics” pad support were by
Ales
Krenek,
Kentaro A. Kurahone, and
Steve C. Woodford. The changes to add
“Elantech” pad support were by
Jared D.
McNeill.
BUGS
It is possible for the driver to mistakenly negotiate the non-scroll-wheel
protocol, after which it is unlikely to recover until the device is closed and
reopened.
The “Elantech” pad code only supports trackpads with firmware
version 2.48 or above.