Fix a problem with wsmouse driver loosing events on 64bit architectures
(XFree86 Bugzilla #1438, John Heasley). "To fix this, I've added a mouse buffer (Xisb buffer) "scale" value to the MouseDevPtr type. If set, it is used as structure size of which we want space for a few."
This commit is contained in:
parent
c57944cd9a
commit
20913b7d5d
|
@ -1,7 +1,30 @@
|
||||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_mouse.c,v 1.24 2003/02/15 05:37:59 paulo Exp $ */
|
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_mouse.c,v 1.28 2004/02/06 17:15:36 tsi Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 1999 by The XFree86 Project, Inc.
|
* Copyright (c) 1999-2003 by The XFree86 Project, Inc.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* Except as contained in this notice, the name of the copyright holder(s)
|
||||||
|
* and author(s) shall not be used in advertising or otherwise to promote
|
||||||
|
* the sale, use or other dealings in this Software without prior written
|
||||||
|
* authorization from the copyright holder(s) and author(s).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "X.h"
|
#include "X.h"
|
||||||
|
@ -45,6 +68,30 @@
|
||||||
static void usbSigioReadInput (int fd, void *closure);
|
static void usbSigioReadInput (int fd, void *closure);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
/* These are for FreeBSD */
|
||||||
|
#define DEFAULT_MOUSE_DEV "/dev/mouse"
|
||||||
|
#define DEFAULT_SYSMOUSE_DEV "/dev/sysmouse"
|
||||||
|
#define DEFAULT_PS2_DEV "/dev/psm0"
|
||||||
|
|
||||||
|
static const char *mouseDevs[] = {
|
||||||
|
DEFAULT_MOUSE_DEV,
|
||||||
|
DEFAULT_SYSMOUSE_DEV,
|
||||||
|
DEFAULT_PS2_DEV,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
#elif defined(__OpenBSD__) && defined(WSCONS_SUPPORT)
|
||||||
|
/* Only wsmouse mices are autoconfigured for now on OpenBSD */
|
||||||
|
#define DEFAULT_WSMOUSE_DEV "/dev/wsmouse"
|
||||||
|
#define DEFAULT_WSMOUSE0_DEV "/dev/wsmouse0"
|
||||||
|
|
||||||
|
static const char *mouseDevs[] = {
|
||||||
|
DEFAULT_WSMOUSE_DEV,
|
||||||
|
DEFAULT_WSMOUSE0_DEV,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
SupportedInterfaces(void)
|
SupportedInterfaces(void)
|
||||||
{
|
{
|
||||||
|
@ -104,6 +151,8 @@ DefaultProtocol(void)
|
||||||
{
|
{
|
||||||
#if defined(__FreeBSD__)
|
#if defined(__FreeBSD__)
|
||||||
return "Auto";
|
return "Auto";
|
||||||
|
#elif defined(__OpenBSD__) && defined(WSCONS_SUPPORT)
|
||||||
|
return "WSMouse";
|
||||||
#else
|
#else
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
|
@ -158,7 +207,7 @@ SetupAuto(InputInfoPtr pInfo, int *protoPara)
|
||||||
protoPara[0] = mode.syncmask[0];
|
protoPara[0] = mode.syncmask[0];
|
||||||
protoPara[1] = mode.syncmask[1];
|
protoPara[1] = mode.syncmask[1];
|
||||||
}
|
}
|
||||||
xf86MsgVerb(X_INFO, 3, "%s: SetupAuto: protocol is %s\n",
|
xf86MsgVerb(X_INFO, 3, "%s: SetupAuto: protocol is %s\n",
|
||||||
pInfo->name, devproto[i].name);
|
pInfo->name, devproto[i].name);
|
||||||
return devproto[i].name;
|
return devproto[i].name;
|
||||||
}
|
}
|
||||||
|
@ -196,7 +245,142 @@ SetSysMouseRes(InputInfoPtr pInfo, const char *protocol, int rate, int res)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(WSCONS_SUPPORT)
|
#if defined(__FreeBSD__)
|
||||||
|
|
||||||
|
#define MOUSED_PID_FILE "/var/run/moused.pid"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Try to check if moused is running. DEFAULT_SYSMOUSE_DEV is useless without
|
||||||
|
* it. There doesn't seem to be a better way of checking.
|
||||||
|
*/
|
||||||
|
static Bool
|
||||||
|
MousedRunning(void)
|
||||||
|
{
|
||||||
|
FILE *f = NULL;
|
||||||
|
unsigned int pid;
|
||||||
|
|
||||||
|
if ((f = fopen(MOUSED_PID_FILE, "r")) != NULL) {
|
||||||
|
if (fscanf(f, "%u", &pid) == 1 && pid > 0) {
|
||||||
|
if (kill(pid, 0) == 0) {
|
||||||
|
fclose(f);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
FindDevice(InputInfoPtr pInfo, const char *protocol, int flags)
|
||||||
|
{
|
||||||
|
int fd = -1;
|
||||||
|
const char **pdev, *dev = NULL;
|
||||||
|
Bool devMouse = FALSE;
|
||||||
|
struct stat devMouseStat;
|
||||||
|
struct stat sb;
|
||||||
|
|
||||||
|
for (pdev = mouseDevs; *pdev; pdev++) {
|
||||||
|
SYSCALL (fd = open(*pdev, O_RDWR | O_NONBLOCK));
|
||||||
|
if (fd == -1) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
ErrorF("Cannot open %s (%s)\n", *pdev, strerror(errno));
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* /dev/mouse is held until checks for matches with other devices
|
||||||
|
* are done. This is so that when it points to /dev/sysmouse,
|
||||||
|
* the test for whether /dev/sysmouse is usable can be made.
|
||||||
|
*/
|
||||||
|
if (!strcmp(*pdev, DEFAULT_MOUSE_DEV)) {
|
||||||
|
if (fstat(fd, &devMouseStat) == 0)
|
||||||
|
devMouse = TRUE;
|
||||||
|
close(fd);
|
||||||
|
continue;
|
||||||
|
} else if (!strcmp(*pdev, DEFAULT_SYSMOUSE_DEV)) {
|
||||||
|
/* Check if /dev/mouse is the same as /dev/sysmouse. */
|
||||||
|
if (devMouse && fstat(fd, &sb) == 0 &&
|
||||||
|
devMouseStat.st_dev == sb.st_dev &&
|
||||||
|
devMouseStat.st_ino == sb.st_ino) {
|
||||||
|
/* If the same, use /dev/sysmouse. */
|
||||||
|
devMouse = FALSE;
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
if (MousedRunning())
|
||||||
|
break;
|
||||||
|
else {
|
||||||
|
#ifdef DEBUG
|
||||||
|
ErrorF("moused isn't running\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
close(fd);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*pdev)
|
||||||
|
dev = *pdev;
|
||||||
|
else if (devMouse)
|
||||||
|
dev = DEFAULT_MOUSE_DEV;
|
||||||
|
|
||||||
|
if (dev) {
|
||||||
|
/* Set the Device option. */
|
||||||
|
pInfo->conf_idev->commonOptions =
|
||||||
|
xf86AddNewOption(pInfo->conf_idev->commonOptions, "Device", dev);
|
||||||
|
xf86Msg(X_INFO, "%s: Setting Device option to \"%s\"\n",
|
||||||
|
pInfo->name, dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *pdev;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__OpenBSD__) && defined(WSCONS_SUPPORT)
|
||||||
|
|
||||||
|
/* Only support wsmouse configuration for now */
|
||||||
|
static const char *
|
||||||
|
SetupAuto(InputInfoPtr pInfo, int *protoPara)
|
||||||
|
{
|
||||||
|
|
||||||
|
xf86MsgVerb(X_INFO, 3, "%s: SetupAuto: protocol is %s\n",
|
||||||
|
pInfo->name, "wsmouse");
|
||||||
|
return "wsmouse";
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
SetMouseRes(InputInfoPtr pInfo, const char *protocol, int rate, int res)
|
||||||
|
{
|
||||||
|
|
||||||
|
xf86MsgVerb(X_INFO, 3, "%s: SetMouseRes: protocol %s rate %d res %d\n",
|
||||||
|
pInfo->name, protocol, rate, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
FindDevice(InputInfoPtr pInfo, const char *protocol, int flags)
|
||||||
|
{
|
||||||
|
int fd = -1;
|
||||||
|
const char **pdev;
|
||||||
|
|
||||||
|
for (pdev = mouseDevs; *pdev; pdev++) {
|
||||||
|
SYSCALL(fd = open(*pdev, O_RDWR | O_NONBLOCK));
|
||||||
|
if (fd != -1) {
|
||||||
|
/* Set the Device option. */
|
||||||
|
pInfo->conf_idev->commonOptions =
|
||||||
|
xf86AddNewOption(pInfo->conf_idev->commonOptions,
|
||||||
|
"Device", *pdev);
|
||||||
|
xf86Msg(X_INFO, "%s: found Device \"%s\"\n",
|
||||||
|
pInfo->name, *pdev);
|
||||||
|
close(fd);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return *pdev;
|
||||||
|
}
|
||||||
|
#endif /* __OpenBSD__ && WSCONS_SUPPORT */
|
||||||
|
|
||||||
|
#ifdef WSCONS_SUPPORT
|
||||||
#define NUMEVENTS 64
|
#define NUMEVENTS 64
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -288,6 +472,7 @@ wsconsPreInit(InputInfoPtr pInfo, const char *protocol, int flags)
|
||||||
|
|
||||||
/* Setup the local input proc. */
|
/* Setup the local input proc. */
|
||||||
pInfo->read_input = wsconsReadInput;
|
pInfo->read_input = wsconsReadInput;
|
||||||
|
pMse->xisbscale = sizeof(struct wscons_event);
|
||||||
|
|
||||||
pInfo->flags |= XI86_CONFIGURED;
|
pInfo->flags |= XI86_CONFIGURED;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -502,11 +687,11 @@ usbPreInit(InputInfoPtr pInfo, const char *protocol, int flags)
|
||||||
#ifdef USB_NEW_HID
|
#ifdef USB_NEW_HID
|
||||||
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_X),
|
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_X),
|
||||||
hid_input, &pUsbMse->loc_x, pUsbMse->iid) < 0) {
|
hid_input, &pUsbMse->loc_x, pUsbMse->iid) < 0) {
|
||||||
xf86Msg(X_WARNING, "%s: no x locator\n");
|
xf86Msg(X_WARNING, "%s: no x locator\n", pInfo->name);
|
||||||
}
|
}
|
||||||
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_Y),
|
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_Y),
|
||||||
hid_input, &pUsbMse->loc_y, pUsbMse->iid) < 0) {
|
hid_input, &pUsbMse->loc_y, pUsbMse->iid) < 0) {
|
||||||
xf86Msg(X_WARNING, "%s: no y locator\n");
|
xf86Msg(X_WARNING, "%s: no y locator\n", pInfo->name);
|
||||||
}
|
}
|
||||||
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_WHEEL),
|
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_WHEEL),
|
||||||
hid_input, &pUsbMse->loc_z, pUsbMse->iid) < 0) {
|
hid_input, &pUsbMse->loc_z, pUsbMse->iid) < 0) {
|
||||||
|
@ -514,11 +699,11 @@ usbPreInit(InputInfoPtr pInfo, const char *protocol, int flags)
|
||||||
#else
|
#else
|
||||||
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_X),
|
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_X),
|
||||||
hid_input, &pUsbMse->loc_x) < 0) {
|
hid_input, &pUsbMse->loc_x) < 0) {
|
||||||
xf86Msg(X_WARNING, "%s: no x locator\n");
|
xf86Msg(X_WARNING, "%s: no x locator\n", pInfo->name);
|
||||||
}
|
}
|
||||||
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_Y),
|
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_Y),
|
||||||
hid_input, &pUsbMse->loc_y) < 0) {
|
hid_input, &pUsbMse->loc_y) < 0) {
|
||||||
xf86Msg(X_WARNING, "%s: no y locator\n");
|
xf86Msg(X_WARNING, "%s: no y locator\n", pInfo->name);
|
||||||
}
|
}
|
||||||
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_WHEEL),
|
if (hid_locate(reportDesc, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_WHEEL),
|
||||||
hid_input, &pUsbMse->loc_z) < 0) {
|
hid_input, &pUsbMse->loc_z) < 0) {
|
||||||
|
@ -588,6 +773,13 @@ xf86OSMouseInit(int flags)
|
||||||
p->SetPS2Res = SetSysMouseRes;
|
p->SetPS2Res = SetSysMouseRes;
|
||||||
p->SetBMRes = SetSysMouseRes;
|
p->SetBMRes = SetSysMouseRes;
|
||||||
p->SetMiscRes = SetSysMouseRes;
|
p->SetMiscRes = SetSysMouseRes;
|
||||||
|
#endif
|
||||||
|
#if defined(__OpenBSD__) && defined(WSCONS_SUPPORT)
|
||||||
|
p->SetupAuto = SetupAuto;
|
||||||
|
p->SetMiscRes = SetMouseRes;
|
||||||
|
#endif
|
||||||
|
#if defined(__FreeBSD__) || defined(__OpenBSD__)
|
||||||
|
p->FindDevice = FindDevice;
|
||||||
#endif
|
#endif
|
||||||
p->PreInit = bsdMousePreInit;
|
p->PreInit = bsdMousePreInit;
|
||||||
return p;
|
return p;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/xf86OSmouse.h,v 1.22 2003/08/24 19:58:06 dawes Exp $ */
|
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/xf86OSmouse.h,v 1.24 2003/11/03 05:11:51 tsi Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999-2003 by The XFree86 Project, Inc.
|
* Copyright (c) 1999-2003 by The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -44,6 +44,36 @@
|
||||||
* specific protocol names that are
|
* specific protocol names that are
|
||||||
* supported for this class. */
|
* supported for this class. */
|
||||||
|
|
||||||
|
/* Mouse Protocol IDs. */
|
||||||
|
typedef enum {
|
||||||
|
PROT_UNKNOWN = -2,
|
||||||
|
PROT_UNSUP = -1, /* protocol is not supported */
|
||||||
|
PROT_MS = 0,
|
||||||
|
PROT_MSC,
|
||||||
|
PROT_MM,
|
||||||
|
PROT_LOGI,
|
||||||
|
PROT_LOGIMAN,
|
||||||
|
PROT_MMHIT,
|
||||||
|
PROT_GLIDE,
|
||||||
|
PROT_IMSERIAL,
|
||||||
|
PROT_THINKING,
|
||||||
|
PROT_ACECAD,
|
||||||
|
PROT_VALUMOUSESCROLL,
|
||||||
|
PROT_PS2,
|
||||||
|
PROT_GENPS2,
|
||||||
|
PROT_IMPS2,
|
||||||
|
PROT_EXPPS2,
|
||||||
|
PROT_THINKPS2,
|
||||||
|
PROT_MMPS2,
|
||||||
|
PROT_GLIDEPS2,
|
||||||
|
PROT_NETPS2,
|
||||||
|
PROT_NETSCPS2,
|
||||||
|
PROT_BM,
|
||||||
|
PROT_AUTO,
|
||||||
|
PROT_SYSMOUSE,
|
||||||
|
PROT_NUMPROTOS /* This must always be last. */
|
||||||
|
} MouseProtocolID;
|
||||||
|
|
||||||
struct _MouseDevRec;
|
struct _MouseDevRec;
|
||||||
|
|
||||||
typedef int (*GetInterfaceTypesProc)(void);
|
typedef int (*GetInterfaceTypesProc)(void);
|
||||||
|
@ -55,10 +85,9 @@ typedef const char *(*DefaultProtocolProc)(void);
|
||||||
typedef const char *(*SetupAutoProc)(InputInfoPtr pInfo, int *protoPara);
|
typedef const char *(*SetupAutoProc)(InputInfoPtr pInfo, int *protoPara);
|
||||||
typedef void (*SetResProc)(InputInfoPtr pInfo, const char* protocol, int rate,
|
typedef void (*SetResProc)(InputInfoPtr pInfo, const char* protocol, int rate,
|
||||||
int res);
|
int res);
|
||||||
typedef void (*checkMovementsProc)(InputInfoPtr,int, int);
|
typedef const char *(*FindDeviceProc)(InputInfoPtr pInfo, const char *protocol,
|
||||||
typedef void (*autoProbeProc)(InputInfoPtr, Bool, Bool);
|
int flags);
|
||||||
typedef Bool (*collectDataProc)(struct _MouseDevRec *, unsigned char);
|
typedef const char *(*GuessProtocolProc)(InputInfoPtr pInfo, int flags);
|
||||||
typedef Bool (*dataGoodProc)(struct _MouseDevRec *);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OSMouseInfoRec is used to pass information from the OSMouse layer to the
|
* OSMouseInfoRec is used to pass information from the OSMouse layer to the
|
||||||
|
@ -74,6 +103,8 @@ typedef struct {
|
||||||
SetResProc SetPS2Res;
|
SetResProc SetPS2Res;
|
||||||
SetResProc SetBMRes;
|
SetResProc SetBMRes;
|
||||||
SetResProc SetMiscRes;
|
SetResProc SetMiscRes;
|
||||||
|
FindDeviceProc FindDevice;
|
||||||
|
GuessProtocolProc GuessProtocol;
|
||||||
} OSMouseInfoRec, *OSMouseInfoPtr;
|
} OSMouseInfoRec, *OSMouseInfoPtr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -100,7 +131,11 @@ typedef struct {
|
||||||
* auto-detection. It returns the name of the detected protocol,
|
* auto-detection. It returns the name of the detected protocol,
|
||||||
* or NULL when detection fails. It may also adjust one or more
|
* or NULL when detection fails. It may also adjust one or more
|
||||||
* of the "protoPara" values for the detected protocol by setting
|
* of the "protoPara" values for the detected protocol by setting
|
||||||
* then to something other than -1.
|
* then to something other than -1. SetupAuto gets called in two
|
||||||
|
* ways. The first is before any devices have been opened. This
|
||||||
|
* can be used when the protocol "Auto" always maps to a single
|
||||||
|
* protocol type. The second is with the device open, allowing
|
||||||
|
* OS-specific probing to be done.
|
||||||
*
|
*
|
||||||
* SetPS2Res: Set the resolution and sample rate for MSE_PS2 and MSE_XPS2
|
* SetPS2Res: Set the resolution and sample rate for MSE_PS2 and MSE_XPS2
|
||||||
* protocol types.
|
* protocol types.
|
||||||
|
@ -108,6 +143,21 @@ typedef struct {
|
||||||
* SetBMRes: Set the resolution and sample rate for MSE_BM protocol types.
|
* SetBMRes: Set the resolution and sample rate for MSE_BM protocol types.
|
||||||
*
|
*
|
||||||
* SetMiscRes: Set the resolution and sample rate for MSE_MISC protocol types.
|
* SetMiscRes: Set the resolution and sample rate for MSE_MISC protocol types.
|
||||||
|
*
|
||||||
|
* FindDevice: This function gets called when no Device has been specified
|
||||||
|
* in the config file. OS-specific methods may be used to guess
|
||||||
|
* which input device to use. This function is called after the
|
||||||
|
* pre-open attempts at protocol discovery are done, but before
|
||||||
|
* the device is open. I.e., after the first SetupAuto() call,
|
||||||
|
* after the DefaultProtocol() call, but before the PreInit()
|
||||||
|
* call. Available protocol information may be used in locating
|
||||||
|
* the default input device.
|
||||||
|
*
|
||||||
|
* GuessProtocol: A last resort attempt at guessing the mouse protocol by
|
||||||
|
* whatever OS-specific means might be available. OS-independent
|
||||||
|
* things should be in the mouse driver. This function gets
|
||||||
|
* called after the mouse driver's OS-independent methods have
|
||||||
|
* failed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern OSMouseInfoPtr xf86OSMouseInit(int flags);
|
extern OSMouseInfoPtr xf86OSMouseInit(int flags);
|
||||||
|
@ -118,11 +168,13 @@ extern OSMouseInfoPtr xf86OSMouseInit(int flags);
|
||||||
* History:
|
* History:
|
||||||
*
|
*
|
||||||
* 1.0.0 - Everything up to when versioning was started.
|
* 1.0.0 - Everything up to when versioning was started.
|
||||||
|
* 1.1.0 - FindDevice and GuessProtocol added to OSMouseInfoRec
|
||||||
|
* 1.2.0 - xisbscale added to MouseDevRec
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define OS_MOUSE_VERSION_MAJOR 1
|
#define OS_MOUSE_VERSION_MAJOR 1
|
||||||
#define OS_MOUSE_VERSION_MINOR 0
|
#define OS_MOUSE_VERSION_MINOR 2
|
||||||
#define OS_MOUSE_VERSION_PATCH 0
|
#define OS_MOUSE_VERSION_PATCH 0
|
||||||
|
|
||||||
#define OS_MOUSE_VERSION_CURRENT \
|
#define OS_MOUSE_VERSION_CURRENT \
|
||||||
|
@ -130,11 +182,24 @@ extern OSMouseInfoPtr xf86OSMouseInit(int flags);
|
||||||
OS_MOUSE_VERSION_MINOR, \
|
OS_MOUSE_VERSION_MINOR, \
|
||||||
OS_MOUSE_VERSION_PATCH)
|
OS_MOUSE_VERSION_PATCH)
|
||||||
|
|
||||||
|
#define HAVE_GUESS_PROTOCOL \
|
||||||
|
(xf86GetBuiltinInterfaceVersion(BUILTIN_IF_OSMOUSE, 0) >= \
|
||||||
|
BUILTIN_INTERFACE_VERSION_NUMERIC(1, 1, 0))
|
||||||
|
|
||||||
|
#define HAVE_FIND_DEVICE \
|
||||||
|
(xf86GetBuiltinInterfaceVersion(BUILTIN_IF_OSMOUSE, 0) >= \
|
||||||
|
BUILTIN_INTERFACE_VERSION_NUMERIC(1, 1, 0))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mouse device record. This is shared by the mouse driver and the OSMouse
|
* Mouse device record. This is shared by the mouse driver and the OSMouse
|
||||||
* layer.
|
* layer.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
typedef void (*checkMovementsProc)(InputInfoPtr,int, int);
|
||||||
|
typedef void (*autoProbeProc)(InputInfoPtr, Bool, Bool);
|
||||||
|
typedef Bool (*collectDataProc)(struct _MouseDevRec *, unsigned char);
|
||||||
|
typedef Bool (*dataGoodProc)(struct _MouseDevRec *);
|
||||||
|
|
||||||
typedef void (*PostMseEventProc)(InputInfoPtr pInfo, int buttons,
|
typedef void (*PostMseEventProc)(InputInfoPtr pInfo, int buttons,
|
||||||
int dx, int dy, int dz, int dw);
|
int dx, int dy, int dz, int dw);
|
||||||
typedef void (*MouseCommonOptProc)(InputInfoPtr pInfo);
|
typedef void (*MouseCommonOptProc)(InputInfoPtr pInfo);
|
||||||
|
@ -146,8 +211,8 @@ typedef struct _MouseDevRec {
|
||||||
DeviceIntPtr device;
|
DeviceIntPtr device;
|
||||||
const char * mseDevice;
|
const char * mseDevice;
|
||||||
const char * protocol;
|
const char * protocol;
|
||||||
int protocolID;
|
MouseProtocolID protocolID;
|
||||||
int oldProtocolID; /* hack */
|
MouseProtocolID oldProtocolID; /* hack */
|
||||||
int class;
|
int class;
|
||||||
int mseModel;
|
int mseModel;
|
||||||
int baudRate;
|
int baudRate;
|
||||||
|
@ -203,6 +268,7 @@ typedef struct _MouseDevRec {
|
||||||
dataGoodProc dataGood;
|
dataGoodProc dataGood;
|
||||||
int angleOffset;
|
int angleOffset;
|
||||||
pointer pDragLock; /* drag lock area */
|
pointer pDragLock; /* drag lock area */
|
||||||
|
int xisbscale; /* buffer size for 1 event */
|
||||||
} MouseDevRec, *MouseDevPtr;
|
} MouseDevRec, *MouseDevPtr;
|
||||||
|
|
||||||
/* Z axis mapping */
|
/* Z axis mapping */
|
||||||
|
|
Loading…
Reference in New Issue