xf86-input-vmmouse 12.4.3
This commit is contained in:
parent
56e7cfaabc
commit
f497ca5fa4
@ -22,7 +22,7 @@
|
||||
|
||||
AC_PREREQ(2.57)
|
||||
AC_INIT([xf86-input-vmmouse],
|
||||
12.4.0,
|
||||
12.4.3,
|
||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
|
||||
xf86-input-vmmouse)
|
||||
|
||||
|
@ -1,228 +1,47 @@
|
||||
.\" $XFree86: xc/programs/Xserver/hw/xfree86/input/mouse/mouse.man,v 1.5 2002/12/17 20:55:21 dawes Exp $
|
||||
.\" shorthand for double quote that works everywhere.
|
||||
.ds q \N'34'
|
||||
.TH MOUSE __drivermansuffix__ __vendorversion__
|
||||
.TH VMMOUSE __drivermansuffix__ __vendorversion__
|
||||
.SH NAME
|
||||
mouse \- Mouse input driver
|
||||
vmmouse \- VMware Mouse input driver
|
||||
.SH SYNOPSIS
|
||||
.nf
|
||||
.B "Section \*qInputDevice\*q"
|
||||
.BI " Identifier \*q" idevname \*q
|
||||
.B " Driver \*qmouse\*q"
|
||||
.BI " Option \*qProtocol\*q \*q" protoname \*q
|
||||
.BI " Option \*qDevice\*q \*q" devpath \*q
|
||||
.B " Driver \*qvmmouse\*q"
|
||||
\ \ ...
|
||||
.B EndSection
|
||||
.fi
|
||||
.SH DESCRIPTION
|
||||
.B mouse
|
||||
.B vmmouse
|
||||
is an XFree86 input driver for mice. The driver supports most available
|
||||
mouse types and interfaces. USB mice are only supported on some OSs,
|
||||
and the level of support for PS/2 mice depends on the OS.
|
||||
.PP
|
||||
The
|
||||
.B mouse
|
||||
.B vmmouse
|
||||
driver functions as a pointer input device, and may be used as the
|
||||
X server's core pointer. Multiple mice are supported by multiple
|
||||
instances of this driver.
|
||||
.SH SUPPORTED HARDWARE
|
||||
There is a detailed list of hardware that the
|
||||
.B mouse
|
||||
driver supports in the
|
||||
.I README.mouse
|
||||
document. This can be found
|
||||
in __projectroot__/lib/X11/doc/, or online at
|
||||
http://www.xfree86.org/current/mouse.html.
|
||||
.SH CONFIGURATION DETAILS
|
||||
Please refer to XF86Config(__filemansuffix__) for general configuration
|
||||
Please refer to __xconfigfile__(__filemansuffix__) for general configuration
|
||||
details and for options that can be used with all input drivers. This
|
||||
section only covers configuration details specific to this driver.
|
||||
.PP
|
||||
The driver can auto-detect the mouse type on some platforms On some
|
||||
platforms this is limited to plug and play serial mice, and on some the
|
||||
auto-detection works for any mouse that the OS's kernel driver supports.
|
||||
On others, it is always necessary to specify the mouse protocol in the
|
||||
config file. The
|
||||
.I README.mouse
|
||||
document contains some detailed information about this.
|
||||
The driver will automatically detect if the vmmouse device is present and if
|
||||
it is not, it will load the regular
|
||||
.B mouse
|
||||
driver and attempt to fall back to it. There are no
|
||||
.B vmmouse
|
||||
specific options, but if you set
|
||||
.B mouse(__drivermansuffix__)
|
||||
options, they will be passed on.
|
||||
.PP
|
||||
The following driver
|
||||
.B Options
|
||||
are supported:
|
||||
.TP 7
|
||||
.BI "Option \*qProtocol\*q \*q" string \*q
|
||||
Specify the mouse protocol. Valid protocol types include:
|
||||
.PP
|
||||
.RS 12
|
||||
Auto, Microsoft, MouseSystems, MMSeries, Logitech, MouseMan, MMHitTab,
|
||||
GlidePoint, IntelliMouse, ThinkingMouse, AceCad, PS/2, ImPS/2,
|
||||
ExplorerPS/2, ThinkingMousePS/2, MouseManPlusPS/2, GlidePointPS/2,
|
||||
NetMousePS/2, NetScrollPS/2, BusMouse, SysMouse, WSMouse, USB, Xqueue.
|
||||
.RE
|
||||
.PP
|
||||
.RS 7
|
||||
Not all protocols are supported on all platforms. The "Auto" platform
|
||||
specifies that protocol auto-detection should be attempted. There is no
|
||||
default protocol setting, and specifying this option is mandatory.
|
||||
.RE
|
||||
.TP 7
|
||||
.BI "Option \*qDevice\*q \*q" string \*q
|
||||
Specifies the device through which the mouse can be accessed. A common
|
||||
setting is "/dev/mouse", which is often a symbolic link to the real
|
||||
device. This option is mandatory, and there is no default setting.
|
||||
.TP 7
|
||||
.BI "Option \*qButtons\*q \*q" integer \*q
|
||||
Specifies the number of mouse buttons. In cases where the number of buttons
|
||||
cannot be auto-detected, the default value is 3.
|
||||
.TP 7
|
||||
.BI "Option \*qEmulate3Buttons\*q \*q" boolean \*q
|
||||
Enable/disable the emulation of the third (middle) mouse button for mice
|
||||
which only have two physical buttons. The third button is emulated by
|
||||
pressing both buttons simultaneously. Default: off
|
||||
.TP 7
|
||||
.BI "Option \*qEmulate3Timeout\*q \*q" integer \*q
|
||||
Sets the timeout (in milliseconds) that the driver waits before deciding
|
||||
if two buttons where pressed "simultaneously" when 3 button emulation is
|
||||
enabled. Default: 50.
|
||||
.TP 7
|
||||
.BI "Option \*qChordMiddle\*q \*q" boolean \*q
|
||||
Enable/disable handling of mice that send left+right events when the middle
|
||||
button is used. Default: off.
|
||||
.TP 7
|
||||
.BI "Option \*qEmulateWheel\*q \*q" boolean \*q
|
||||
Enable/disable "wheel" emulation. Wheel emulation means emulating button
|
||||
press/release events when the mouse is moved while a specific real button
|
||||
is pressed. Wheel button events (typically buttons 4 and 5) are
|
||||
usually used for scrolling. Wheel emulation is useful for getting wheel-like
|
||||
behaviour with trackballs. It can also be useful for mice with 4 or
|
||||
more buttons but no wheel. See the description of the
|
||||
.BR EmulateWheelButton ,
|
||||
.BR EmulateWheelInertia ,
|
||||
.BR XAxisMapping ,
|
||||
and
|
||||
.B YAxisMapping
|
||||
options below. Default: off.
|
||||
.TP 7
|
||||
.BI "Option \*qEmulateWheelButton\*q \*q" integer \*q
|
||||
Specifies which button must be held down to enable wheel emulation mode.
|
||||
While this button is down, X and/or Y pointer movement will generate button
|
||||
press/release events as specified for the
|
||||
.B XAxisMapping
|
||||
and
|
||||
.B YAxisMapping
|
||||
settings. Default: 4.
|
||||
.TP 7
|
||||
.BI "Option \*qEmulateWheelInertia\*q \*q" integer \*q
|
||||
Specifies how far (in pixels) the pointer must move to generate button
|
||||
press/release events in wheel emulation mode. Default: 50.
|
||||
.TP 7
|
||||
.BI "Option \*qXAxisMapping\*q \*q" "N1 N2" \*q
|
||||
Specifies which buttons are mapped to motion in the X direction in wheel
|
||||
emulation mode. Button number
|
||||
.I N1
|
||||
is mapped to the negative X axis motion and button number
|
||||
.I N2
|
||||
is mapped to the positive X axis motion. Default: no mapping.
|
||||
.TP 7
|
||||
.BI "Option \*qYAxisMapping\*q \*q" "N1 N2" \*q
|
||||
Specifies which buttons are mapped to motion in the Y direction in wheel
|
||||
emulation mode. Button number
|
||||
.I N1
|
||||
is mapped to the negative Y axis motion and button number
|
||||
.I N2
|
||||
is mapped to the positive Y axis motion. Default: "4 5".
|
||||
.TP 7
|
||||
.BI "Option \*qZAxisMapping\*q \*qX\*q"
|
||||
.TP 7
|
||||
.BI "Option \*qZAxisMapping\*q \*qY\*q"
|
||||
.TP 7
|
||||
.BI "Option \*qZAxisMapping\*q \*q" "N1 N2" \*q
|
||||
.TP 7
|
||||
.BI "Option \*qZAxisMapping\*q \*q" "N1 N2 N3 N4" \*q
|
||||
Set the mapping for the Z axis (wheel) motion to buttons or another axis
|
||||
.RB ( X
|
||||
or
|
||||
.BR Y ).
|
||||
Button number
|
||||
.I N1
|
||||
is mapped to the negative Z axis motion and button number
|
||||
.I N2
|
||||
is mapped to the positive Z axis motion. For mice with two wheels,
|
||||
four button numbers can be specified, with the negative and positive motion
|
||||
of the second wheel mapped respectively to buttons number
|
||||
.I N3
|
||||
and
|
||||
.IR N4 .
|
||||
Default: no mapping.
|
||||
.TP 7
|
||||
.BI "Option \*qFlipXY\*q \*q" boolean \*q
|
||||
Enable/disable swapping the X and Y axes. This transformation is applied
|
||||
after the
|
||||
.BR InvX ,
|
||||
.B InvY
|
||||
and
|
||||
.BR AngleOffset
|
||||
transformations. Default: off.
|
||||
.TP 7
|
||||
.BI "Option \*qInvX\*q \*q" boolean \*q
|
||||
Invert the X axis. Default: off.
|
||||
.TP 7
|
||||
.BI "Option \*qInvY\*q \*q" boolean \*q
|
||||
Invert the Y axis. Default: off.
|
||||
.TP 7
|
||||
.BI "Option \*qAngleOffset\*q \*q" integer \*q
|
||||
Specify a clockwise angular offset (in degrees) to apply to the pointer
|
||||
motion. This transformation is applied before the
|
||||
.BR FlipXY ,
|
||||
.B InvX
|
||||
and
|
||||
.B InvY
|
||||
transformations. Default: 0.
|
||||
.TP 7
|
||||
.BI "Option \*qSampleRate\*q \*q" integer \*q
|
||||
Sets the number of motion/button events the mouse sends per second. Setting
|
||||
this is only supported for some mice, including some Logitech mice and
|
||||
some PS/2 mice on some platforms. Default: whatever the mouse is
|
||||
already set to.
|
||||
.TP 7
|
||||
.BI "Option \*qResolution\*q \*q" integer \*q
|
||||
Sets the resolution of the device in counts per inch. Setting this is
|
||||
only supported for some mice, including some PS/2 mice on some platforms.
|
||||
Default: whatever the mouse is already set to.
|
||||
.TP 7
|
||||
.BI "Option \*qDragLockButtons\*q \*q" "L1 B2 L3 B4" \*q
|
||||
Sets \*qdrag lock buttons\*q that simulate holding a button down, so
|
||||
that low dexterity people do not have to hold a buttton down at the
|
||||
same time they move a mouse cursor. Button numbers occur in pairs,
|
||||
with the lock button number occurring first, followed by the button
|
||||
number that is the target of the lock button.
|
||||
.TP 7
|
||||
.BI "Option \*qDragLockButtons\*q \*q" "M1" \*q
|
||||
Sets a \*qmaster drag lock button\*q that acts as a \*qMeta Key\*q
|
||||
indicating that the next button pressed is to be
|
||||
\*qdrag locked\*q.
|
||||
.TP 7
|
||||
.BI "Option \*qClearDTR\*q \*q" boolean \*q
|
||||
Enable/disable clearing the DTR line on the serial port used by the mouse.
|
||||
Some dual-protocol mice require the DTR line to be cleared to operate
|
||||
in the non-default protocol. This option is for serial mice only.
|
||||
Default: off.
|
||||
.TP 7
|
||||
.BI "Option \*qClearRTS\*q \*q" boolean \*q
|
||||
Enable/disable clearing the RTS line on the serial port used by the mouse.
|
||||
Some dual-protocol mice require the RTS line to be cleared to operate
|
||||
in the non-default protocol. This option is for serial mice only.
|
||||
Default: off.
|
||||
.TP 7
|
||||
.BI "Option \*qBaudRate\*q \*q" integer \*q
|
||||
Set the baud rate to use for communicating with a serial mouse. This
|
||||
option should rarely be required because the default is correct for almost
|
||||
all situations. Valid values include: 300, 1200, 2400, 4800, 9600, 19200.
|
||||
Default: 1200.
|
||||
.PP
|
||||
There are some other options that may be used to control various parameters
|
||||
for serial port communication, but they are not documented here because
|
||||
the driver sets them correctly for each mouse protocol type.
|
||||
See the
|
||||
.B mouse(__drivermansuffix__)
|
||||
man page for details on these options.
|
||||
.SH "SEE ALSO"
|
||||
XFree86(1), XF86Config(__filemansuffix__), xf86config(1), Xserver(1), X(__miscmansuffix__),
|
||||
README.mouse.
|
||||
__xservername__(1), __xconfigfile__(__filemansuffix__), xorgconfig(1), Xserver(1), X(__miscmansuffix__),
|
||||
mouse(__drivermansuffix__)
|
||||
.SH AUTHORS
|
||||
Copyright (c) 1999-2007 VMware, Inc.
|
||||
|
@ -76,12 +76,42 @@
|
||||
****************************************************************************/
|
||||
#include "vmmouse_client.h"
|
||||
|
||||
/*
|
||||
* This is the only way I know to turn a #define of an integer constant into
|
||||
* a constant string.
|
||||
*/
|
||||
#define VMW_INNERSTRINGIFY(s) #s
|
||||
#define VMW_STRING(str) VMW_INNERSTRINGIFY(str)
|
||||
|
||||
/*
|
||||
* So that the file compiles unmodified when dropped into an xfree source tree.
|
||||
*/
|
||||
#ifndef XORG_VERSION_CURRENT
|
||||
#define XORG_VERSION_CURRENT XF86_VERSION_CURRENT
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Version constants
|
||||
*/
|
||||
#define VMMOUSE_MAJOR_VERSION 12
|
||||
#define VMMOUSE_MINOR_VERSION 4
|
||||
#define VMMOUSE_PATCHLEVEL 0
|
||||
#define VMMOUSE_PATCHLEVEL 3
|
||||
#define VMMOUSE_DRIVER_VERSION \
|
||||
(VMMOUSE_MAJOR_VERSION * 65536 + VMMOUSE_MINOR_VERSION * 256 + VMMOUSE_PATCHLEVEL)
|
||||
#define VMMOUSE_DRIVER_VERSION_STRING \
|
||||
VMW_STRING(VMMOUSE_MAJOR_VERSION) "." VMW_STRING(VMMOUSE_MINOR_VERSION) \
|
||||
"." VMW_STRING(VMMOUSE_PATCHLEVEL)
|
||||
|
||||
/*
|
||||
* Standard four digit version string expected by VMware Tools installer.
|
||||
* As the driver's version is only {major, minor, patchlevel}, simply append an
|
||||
* extra zero for the fourth digit.
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
const char vm_mouse_version[] __attribute__((section(".modinfo"),unused)) =
|
||||
"version=" VMMOUSE_DRIVER_VERSION_STRING ".0";
|
||||
#endif
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* static function header
|
||||
@ -323,7 +353,9 @@ VMMousePreInit(InputDriverPtr drv, IDevPtr dev, int flags)
|
||||
pInfo->flags = XI86_POINTER_CAPABLE | XI86_SEND_DRAG_EVENTS;
|
||||
pInfo->device_control = VMMouseDeviceControl;
|
||||
pInfo->read_input = VMMouseReadInput;
|
||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
|
||||
pInfo->motion_history_proc = xf86GetMotionEvents;
|
||||
#endif
|
||||
pInfo->control_proc = VMMouseControlProc;
|
||||
pInfo->close_proc = VMMouseCloseProc;
|
||||
pInfo->switch_mode = VMMouseSwitchMode;
|
||||
@ -753,8 +785,18 @@ VMMouseDeviceControl(DeviceIntPtr device, int mode)
|
||||
|
||||
InitPointerDeviceStruct((DevicePtr)device, map,
|
||||
min(pMse->buttons, MSE_MAXBUTTONS),
|
||||
miPointerGetMotionEvents, pMse->Ctrl,
|
||||
miPointerGetMotionBufferSize());
|
||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
|
||||
miPointerGetMotionEvents,
|
||||
#else
|
||||
GetMotionHistory,
|
||||
#endif
|
||||
pMse->Ctrl,
|
||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
|
||||
miPointerGetMotionBufferSize()
|
||||
#else
|
||||
GetMotionHistorySize(), 2
|
||||
#endif
|
||||
);
|
||||
|
||||
/* X valuator */
|
||||
xf86InitValuatorAxisStruct(device, 0, 0, -1, 1, 0, 1);
|
||||
@ -762,7 +804,9 @@ VMMouseDeviceControl(DeviceIntPtr device, int mode)
|
||||
/* Y valuator */
|
||||
xf86InitValuatorAxisStruct(device, 1, 0, -1, 1, 0, 1);
|
||||
xf86InitValuatorDefaults(device, 1);
|
||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
|
||||
xf86MotionHistoryAllocate(pInfo);
|
||||
#endif
|
||||
|
||||
xf86Msg(X_INFO, "VMWARE(0): VMMOUSE DEVICE_INIT\n");
|
||||
#ifdef EXTMOUSEDEBUG
|
||||
@ -919,9 +963,18 @@ GetVMMouseMotionEvent(InputInfoPtr pInfo){
|
||||
int buttons, dx, dy, dz, dw;
|
||||
VMMOUSE_INPUT_DATA vmmouseInput;
|
||||
int ps2Buttons = 0;
|
||||
int numPackets;
|
||||
|
||||
pMse = pInfo->private;
|
||||
while(VMMouseClient_GetInput(&vmmouseInput)){
|
||||
while((numPackets = VMMouseClient_GetInput(&vmmouseInput))){
|
||||
if (numPackets == VMMOUSE_ERROR) {
|
||||
VMMouseClient_Disable();
|
||||
VMMouseClient_Enable();
|
||||
VMMouseClient_RequestAbsolute();
|
||||
xf86Msg(X_INFO, "VMWARE(0): re-requesting absolute mode after reset\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if(vmmouseInput.Buttons & VMMOUSE_MIDDLE_BUTTON)
|
||||
ps2Buttons |= 0x04; /* Middle*/
|
||||
if(vmmouseInput.Buttons & VMMOUSE_RIGHT_BUTTON)
|
||||
|
Loading…
Reference in New Issue
Block a user