UATP(4) | Device Drivers Manual | UATP(4)

# NAME

`uatp` —
USB Apple trackpad driver

# SYNOPSIS

`uatp* at uhidev? reportid ?`
`wsmouse* at uatp? mux 0`

# DESCRIPTION

The `uatp` driver provides support for the USB trackpads found in Apple laptops since 2005, exposed through wsmouse(4). Some USB Apple trackpads are standard USB HID mice supported by ums(4), but `uatp` supports more features. The following sysctl(8) variables control behavior of USB Apple trackpads:

`hw.uatpN.two_finger_buttons`
  Bit mask of buttons to emulate when two fingers are on the trackpad while the button is pressed.
`hw.uatpN.three_finger_buttons`
  Bit mask of buttons to emulate when three fingers are on the trackpad while the button is pressed.
`hw.uatpN.multifinger_track`
  What to do when multiple fingers are moved on the trackpad. If set to 0, ignore the input. If set to 1, move as if a single finger were at the mean position of the fingers. If set to 2, scroll. Note that scrolling is currently broken.
`hw.uatpN.x_sensors`
  Number of sensor columns detecting the x positions of fingers on the trackpad. The driver should detect this based on the model of hardware, so you should not have to set this, and likewise for the x ratio and y sensors and ratio.
`hw.uatpN.x_ratio`
  Ratio of the number of sensor columns in the trackpad to the number of distinct cursor x positions.
`hw.uatpN.y_sensors`
  Number of sensor rows detecting the y positions of fingers on the trackpad.
`hw.uatpN.y_ratio`
  Ratio of the number of sensor rows in the trackpad to the number of distinct cursor y positions.
`hw.uatpN.sensor_threshold`
  Nonnegative integer giving a lower bound on the “pressure” a sensor must report for the driver to recognize input from it.
`hw.uatpN.sensor_normalizer`
  Nonnegative integer to subtract from the “pressure” reported by a sensor when averaging them to estimate the pressure of a single finger.
`hw.uatpN.palm_width`
  If zero, palm detection is disabled. Otherwise, a positive integer giving the number of consecutive sensors wide or high that will be interpreted as a palm instead of a finger and therefore ignored.
`hw.uatpN.old_raw_weight`
`hw.uatpN.old_smoothed_weight`
`hw.uatpN.new_raw_weight`
  When a finger moves on the trackpad, the new smoothed (cursor) position is computed as a positive linear combination of the old raw (trackpad) position, the old smoothed position, and the new raw position. The weights of the linear combination are given by these sysctl knobs.
`hw.uatpN.motion_threshold`
  Threshold below which a difference in smoothed position will not be reported as an input event to userland.
`hw.uatpN.motion_multiplier`
  Positive integer by which a difference in smoothed position will be multiplied before passing it as an input event to userland.
`hw.uatpN.motion_divisor`
  Positive integer by which a difference in smoothed position will be divided, after multiplying it by the motion multiplier, before passing it as an input event to userland.
`hw.uatpN.fast_motion_threshold`
  Threshold above which to use the fast motion factors below.
`hw.uatpN.fast_motion_multiplier`
  Positive integer by which to multiply a large difference in smoothed position.
`hw.uatpN.fast_motion_divisor`
  Positive integer by which to divide a large difference in smoothed position, after multiplying it by the fast motion multiplier.
`hw.uatpN.motion_delay`
  Number of input packets before `uatp` reports motion to userland.
`hw.uatpN.tap_limit_msec`
  Positive integer giving the number of milliseconds of a finger's contact with the trackpad before it will not be considered a tap.
`hw.uatpN.double_tap_limit_msec`
  Positive integer giving the maximum number of milliseconds after a tap before a second tap will keep the button down.
`hw.uatpN.one_finger_tap_buttons`
  Bit mask of buttons that a one-finger tap will press.
`hw.uatpN.two_finger_tap_buttons`
  Bit mask of buttons that a two-finger tap will press.
`hw.uatpN.three_finger_tap_buttons`
  Bit mask of buttons that a three-finger tap will press.
`hw.uatpN.tap_track_distance_limit`
  Maximum distance in smoothed position that will be interpreted as a tap instead of motion.

# SEE ALSO

ums(4), wsmouse(4)

# HISTORY

The `uatp` driver first appeared in NetBSD 7.0.

# AUTHORS

The `uatp` driver was originally written by Taylor R. Campbell <riastradh@NetBSD.org>.

# BUGS

Sometimes, particularly when X starts up, the driver gets wedged in an interrupt storm and does not reset the device. Setting `hw.uatpN.sensor_threshold` to a large number, say 1000, and then back to its original value, can fix this.

Palm detection is not very robust.

Multi-touch scrolling is currently broken.

Pinch-to-zoom and other fancy multi-touch input is not implemented.

On suspending and resuming, `uatp` detaches and reattaches, and loses all sysctl settings in the process.

Do not submerge your `uatp` devices in water: USB adenosine triphosphate is unstable in water, and will hydrolyze to USB adenosine diphosphate and phosphate, which is a lower energy state that makes your mouse narcoleptic in X.

August 4, 2012 | NetBSD 9.5