1a9643ea8Slogwang /*- 2*22ce4affSfengbojiang * SPDX-License-Identifier: BSD-1-Clause 3*22ce4affSfengbojiang * 4a9643ea8Slogwang * Copyright (c) 1992, 1993 Erik Forsberg. 5a9643ea8Slogwang * Copyright (c) 1996, 1997 Kazutaka YOKOTA 6a9643ea8Slogwang * All rights reserved. 7a9643ea8Slogwang * 8a9643ea8Slogwang * Redistribution and use in source and binary forms, with or without 9a9643ea8Slogwang * modification, are permitted provided that the following conditions 10a9643ea8Slogwang * are met: 11a9643ea8Slogwang * 1. Redistributions of source code must retain the above copyright 12a9643ea8Slogwang * notice, this list of conditions and the following disclaimer. 13a9643ea8Slogwang * 14a9643ea8Slogwang * THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY EXPRESS OR IMPLIED 15a9643ea8Slogwang * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 16a9643ea8Slogwang * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 17a9643ea8Slogwang * NO EVENT SHALL I BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18a9643ea8Slogwang * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19a9643ea8Slogwang * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20a9643ea8Slogwang * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 21a9643ea8Slogwang * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 22a9643ea8Slogwang * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23a9643ea8Slogwang * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24a9643ea8Slogwang * 25a9643ea8Slogwang * $FreeBSD$ 26a9643ea8Slogwang */ 27a9643ea8Slogwang 28a9643ea8Slogwang #ifndef _SYS_MOUSE_H_ 29a9643ea8Slogwang #define _SYS_MOUSE_H_ 30a9643ea8Slogwang 31a9643ea8Slogwang #include <sys/types.h> 32a9643ea8Slogwang #include <sys/ioccom.h> 33a9643ea8Slogwang 34a9643ea8Slogwang /* ioctls */ 35a9643ea8Slogwang #define MOUSE_GETSTATUS _IOR('M', 0, mousestatus_t) 36a9643ea8Slogwang #define MOUSE_GETHWINFO _IOR('M', 1, mousehw_t) 37a9643ea8Slogwang #define MOUSE_GETMODE _IOR('M', 2, mousemode_t) 38a9643ea8Slogwang #define MOUSE_SETMODE _IOW('M', 3, mousemode_t) 39a9643ea8Slogwang #define MOUSE_GETLEVEL _IOR('M', 4, int) 40a9643ea8Slogwang #define MOUSE_SETLEVEL _IOW('M', 5, int) 41a9643ea8Slogwang #define MOUSE_READSTATE _IOWR('M', 8, mousedata_t) 42a9643ea8Slogwang #define MOUSE_READDATA _IOWR('M', 9, mousedata_t) 43a9643ea8Slogwang 44a9643ea8Slogwang #ifdef notyet 45a9643ea8Slogwang #define MOUSE_SETRESOLUTION _IOW('M', 10, int) 46a9643ea8Slogwang #define MOUSE_SETSCALING _IOW('M', 11, int) 47a9643ea8Slogwang #define MOUSE_SETRATE _IOW('M', 12, int) 48a9643ea8Slogwang #define MOUSE_GETHWID _IOR('M', 13, int) 49a9643ea8Slogwang #endif 50a9643ea8Slogwang 51a9643ea8Slogwang #define MOUSE_SYN_GETHWINFO _IOR('M', 100, synapticshw_t) 52a9643ea8Slogwang 53a9643ea8Slogwang /* mouse status block */ 54a9643ea8Slogwang typedef struct mousestatus { 55a9643ea8Slogwang int flags; /* state change flags */ 56a9643ea8Slogwang int button; /* button status */ 57a9643ea8Slogwang int obutton; /* previous button status */ 58a9643ea8Slogwang int dx; /* x movement */ 59a9643ea8Slogwang int dy; /* y movement */ 60a9643ea8Slogwang int dz; /* z movement */ 61a9643ea8Slogwang } mousestatus_t; 62a9643ea8Slogwang 63a9643ea8Slogwang /* button */ 64a9643ea8Slogwang #define MOUSE_BUTTON1DOWN 0x0001 /* left */ 65a9643ea8Slogwang #define MOUSE_BUTTON2DOWN 0x0002 /* middle */ 66a9643ea8Slogwang #define MOUSE_BUTTON3DOWN 0x0004 /* right */ 67a9643ea8Slogwang #define MOUSE_BUTTON4DOWN 0x0008 68a9643ea8Slogwang #define MOUSE_BUTTON5DOWN 0x0010 69a9643ea8Slogwang #define MOUSE_BUTTON6DOWN 0x0020 70a9643ea8Slogwang #define MOUSE_BUTTON7DOWN 0x0040 71a9643ea8Slogwang #define MOUSE_BUTTON8DOWN 0x0080 72a9643ea8Slogwang #define MOUSE_MAXBUTTON 31 73a9643ea8Slogwang #define MOUSE_STDBUTTONS 0x0007 /* buttons 1-3 */ 74a9643ea8Slogwang #define MOUSE_EXTBUTTONS 0x7ffffff8 /* the others (28 of them!) */ 75a9643ea8Slogwang #define MOUSE_BUTTONS (MOUSE_STDBUTTONS | MOUSE_EXTBUTTONS) 76a9643ea8Slogwang 77a9643ea8Slogwang /* flags */ 78a9643ea8Slogwang #define MOUSE_STDBUTTONSCHANGED MOUSE_STDBUTTONS 79a9643ea8Slogwang #define MOUSE_EXTBUTTONSCHANGED MOUSE_EXTBUTTONS 80a9643ea8Slogwang #define MOUSE_BUTTONSCHANGED MOUSE_BUTTONS 81a9643ea8Slogwang #define MOUSE_POSCHANGED 0x80000000 82a9643ea8Slogwang 83a9643ea8Slogwang typedef struct mousehw { 84a9643ea8Slogwang int buttons; /* -1 if unknown */ 85a9643ea8Slogwang int iftype; /* MOUSE_IF_XXX */ 86a9643ea8Slogwang int type; /* mouse/track ball/pad... */ 87a9643ea8Slogwang int model; /* I/F dependent model ID: MOUSE_MODEL_XXX */ 88a9643ea8Slogwang int hwid; /* I/F dependent hardware ID 89a9643ea8Slogwang * for the PS/2 mouse, it will be PSM_XXX_ID 90a9643ea8Slogwang */ 91a9643ea8Slogwang } mousehw_t; 92a9643ea8Slogwang 93a9643ea8Slogwang typedef struct synapticshw { 94a9643ea8Slogwang int infoMajor; 95a9643ea8Slogwang int infoMinor; 96a9643ea8Slogwang int infoRot180; 97a9643ea8Slogwang int infoPortrait; 98a9643ea8Slogwang int infoSensor; 99a9643ea8Slogwang int infoHardware; 100a9643ea8Slogwang int infoNewAbs; 101a9643ea8Slogwang int capPen; 102a9643ea8Slogwang int infoSimplC; 103a9643ea8Slogwang int infoGeometry; 104a9643ea8Slogwang int capExtended; 105a9643ea8Slogwang int capSleep; 106a9643ea8Slogwang int capFourButtons; 107a9643ea8Slogwang int capMultiFinger; 108a9643ea8Slogwang int capPalmDetect; 109a9643ea8Slogwang int capPassthrough; 110a9643ea8Slogwang int capMiddle; 111a9643ea8Slogwang int capLowPower; 112a9643ea8Slogwang int capMultiFingerReport; 113a9643ea8Slogwang int capBallistics; 114a9643ea8Slogwang int nExtendedButtons; 115a9643ea8Slogwang int nExtendedQueries; 116a9643ea8Slogwang int capClickPad; 117a9643ea8Slogwang int capDeluxeLEDs; 118a9643ea8Slogwang int noAbsoluteFilter; 119a9643ea8Slogwang int capReportsV; 120a9643ea8Slogwang int capUniformClickPad; 121a9643ea8Slogwang int capReportsMin; 122a9643ea8Slogwang int capInterTouch; 123a9643ea8Slogwang int capReportsMax; 124a9643ea8Slogwang int capClearPad; 125a9643ea8Slogwang int capAdvancedGestures; 126a9643ea8Slogwang int multiFingerMode; 127a9643ea8Slogwang int capCoveredPad; 128a9643ea8Slogwang int verticalScroll; 129a9643ea8Slogwang int horizontalScroll; 130a9643ea8Slogwang int verticalWheel; 131a9643ea8Slogwang int capEWmode; 132a9643ea8Slogwang int minimumXCoord; 133a9643ea8Slogwang int minimumYCoord; 134a9643ea8Slogwang int maximumXCoord; 135a9643ea8Slogwang int maximumYCoord; 136a9643ea8Slogwang int infoXupmm; 137a9643ea8Slogwang int infoYupmm; 138*22ce4affSfengbojiang int forcePad; 139*22ce4affSfengbojiang int topButtonPad; 140a9643ea8Slogwang } synapticshw_t; 141a9643ea8Slogwang 142a9643ea8Slogwang /* iftype */ 143a9643ea8Slogwang #define MOUSE_IF_UNKNOWN (-1) 144a9643ea8Slogwang #define MOUSE_IF_SERIAL 0 145*22ce4affSfengbojiang /* 1 was bus */ 146*22ce4affSfengbojiang /* 2 was inport */ 147a9643ea8Slogwang #define MOUSE_IF_PS2 3 148a9643ea8Slogwang #define MOUSE_IF_SYSMOUSE 4 149a9643ea8Slogwang #define MOUSE_IF_USB 5 150a9643ea8Slogwang 151a9643ea8Slogwang /* type */ 152a9643ea8Slogwang #define MOUSE_UNKNOWN (-1) /* should be treated as a mouse */ 153a9643ea8Slogwang #define MOUSE_MOUSE 0 154a9643ea8Slogwang #define MOUSE_TRACKBALL 1 155a9643ea8Slogwang #define MOUSE_STICK 2 156a9643ea8Slogwang #define MOUSE_PAD 3 157a9643ea8Slogwang 158a9643ea8Slogwang /* model */ 159a9643ea8Slogwang #define MOUSE_MODEL_UNKNOWN (-1) 160a9643ea8Slogwang #define MOUSE_MODEL_GENERIC 0 161a9643ea8Slogwang #define MOUSE_MODEL_GLIDEPOINT 1 162a9643ea8Slogwang #define MOUSE_MODEL_NETSCROLL 2 163a9643ea8Slogwang #define MOUSE_MODEL_NET 3 164a9643ea8Slogwang #define MOUSE_MODEL_INTELLI 4 165a9643ea8Slogwang #define MOUSE_MODEL_THINK 5 166a9643ea8Slogwang #define MOUSE_MODEL_EASYSCROLL 6 167a9643ea8Slogwang #define MOUSE_MODEL_MOUSEMANPLUS 7 168a9643ea8Slogwang #define MOUSE_MODEL_KIDSPAD 8 169a9643ea8Slogwang #define MOUSE_MODEL_VERSAPAD 9 170a9643ea8Slogwang #define MOUSE_MODEL_EXPLORER 10 171a9643ea8Slogwang #define MOUSE_MODEL_4D 11 172a9643ea8Slogwang #define MOUSE_MODEL_4DPLUS 12 173a9643ea8Slogwang #define MOUSE_MODEL_SYNAPTICS 13 174a9643ea8Slogwang #define MOUSE_MODEL_TRACKPOINT 14 175*22ce4affSfengbojiang #define MOUSE_MODEL_ELANTECH 15 176a9643ea8Slogwang 177a9643ea8Slogwang typedef struct mousemode { 178a9643ea8Slogwang int protocol; /* MOUSE_PROTO_XXX */ 179a9643ea8Slogwang int rate; /* report rate (per sec), -1 if unknown */ 180a9643ea8Slogwang int resolution; /* MOUSE_RES_XXX, -1 if unknown */ 181a9643ea8Slogwang int accelfactor; /* accelation factor (must be 1 or greater) */ 182a9643ea8Slogwang int level; /* driver operation level */ 183a9643ea8Slogwang int packetsize; /* the length of the data packet */ 184a9643ea8Slogwang unsigned char syncmask[2]; /* sync. data bits in the header byte */ 185a9643ea8Slogwang } mousemode_t; 186a9643ea8Slogwang 187a9643ea8Slogwang /* protocol */ 188a9643ea8Slogwang /* 189a9643ea8Slogwang * Serial protocols: 190a9643ea8Slogwang * Microsoft, MouseSystems, Logitech, MM series, MouseMan, Hitachi Tablet, 191a9643ea8Slogwang * GlidePoint, IntelliMouse, Thinking Mouse, MouseRemote, Kidspad, 192a9643ea8Slogwang * VersaPad 193a9643ea8Slogwang * Bus mouse protocols: 194*22ce4affSfengbojiang * bus, InPort -- both of these are now obsolete and will be remvoed soon. 195a9643ea8Slogwang * PS/2 mouse protocol: 196a9643ea8Slogwang * PS/2 197a9643ea8Slogwang */ 198a9643ea8Slogwang #define MOUSE_PROTO_UNKNOWN (-1) 199a9643ea8Slogwang #define MOUSE_PROTO_MS 0 /* Microsoft Serial, 3 bytes */ 200a9643ea8Slogwang #define MOUSE_PROTO_MSC 1 /* Mouse Systems, 5 bytes */ 201a9643ea8Slogwang #define MOUSE_PROTO_LOGI 2 /* Logitech, 3 bytes */ 202a9643ea8Slogwang #define MOUSE_PROTO_MM 3 /* MM series, 3 bytes */ 203a9643ea8Slogwang #define MOUSE_PROTO_LOGIMOUSEMAN 4 /* Logitech MouseMan 3/4 bytes */ 204*22ce4affSfengbojiang #define MOUSE_PROTO_BUS 5 /* bus mouse -- obsolete */ 205*22ce4affSfengbojiang #define MOUSE_PROTO_INPORT 6 /* inport mosue -- obsolete */ 206a9643ea8Slogwang #define MOUSE_PROTO_PS2 7 /* PS/2 mouse, 3 bytes */ 207a9643ea8Slogwang #define MOUSE_PROTO_HITTAB 8 /* Hitachi Tablet 3 bytes */ 208a9643ea8Slogwang #define MOUSE_PROTO_GLIDEPOINT 9 /* ALPS GlidePoint, 3/4 bytes */ 209a9643ea8Slogwang #define MOUSE_PROTO_INTELLI 10 /* MS IntelliMouse, 4 bytes */ 210a9643ea8Slogwang #define MOUSE_PROTO_THINK 11 /* Kensington Thinking Mouse, 3/4 bytes */ 211a9643ea8Slogwang #define MOUSE_PROTO_SYSMOUSE 12 /* /dev/sysmouse */ 212a9643ea8Slogwang #define MOUSE_PROTO_X10MOUSEREM 13 /* X10 MouseRemote, 3 bytes */ 213a9643ea8Slogwang #define MOUSE_PROTO_KIDSPAD 14 /* Genius Kidspad */ 214a9643ea8Slogwang #define MOUSE_PROTO_VERSAPAD 15 /* Interlink VersaPad, 6 bytes */ 215a9643ea8Slogwang #define MOUSE_PROTO_JOGDIAL 16 /* Vaio's JogDial */ 216a9643ea8Slogwang #define MOUSE_PROTO_GTCO_DIGIPAD 17 217a9643ea8Slogwang 218a9643ea8Slogwang #define MOUSE_RES_UNKNOWN (-1) 219a9643ea8Slogwang #define MOUSE_RES_DEFAULT 0 220a9643ea8Slogwang #define MOUSE_RES_LOW (-2) 221a9643ea8Slogwang #define MOUSE_RES_MEDIUMLOW (-3) 222a9643ea8Slogwang #define MOUSE_RES_MEDIUMHIGH (-4) 223a9643ea8Slogwang #define MOUSE_RES_HIGH (-5) 224a9643ea8Slogwang 225a9643ea8Slogwang typedef struct mousedata { 226a9643ea8Slogwang int len; /* # of data in the buffer */ 227a9643ea8Slogwang int buf[16]; /* data buffer */ 228a9643ea8Slogwang } mousedata_t; 229a9643ea8Slogwang 230a9643ea8Slogwang /* Synaptics Touchpad */ 231a9643ea8Slogwang #define MOUSE_SYNAPTICS_PACKETSIZE 6 /* '3' works better */ 232a9643ea8Slogwang 233*22ce4affSfengbojiang /* Elantech Touchpad */ 234*22ce4affSfengbojiang #define MOUSE_ELANTECH_PACKETSIZE 6 235*22ce4affSfengbojiang 236a9643ea8Slogwang /* Microsoft Serial mouse data packet */ 237a9643ea8Slogwang #define MOUSE_MSS_PACKETSIZE 3 238a9643ea8Slogwang #define MOUSE_MSS_SYNCMASK 0x40 239a9643ea8Slogwang #define MOUSE_MSS_SYNC 0x40 240a9643ea8Slogwang #define MOUSE_MSS_BUTTONS 0x30 241a9643ea8Slogwang #define MOUSE_MSS_BUTTON1DOWN 0x20 /* left */ 242a9643ea8Slogwang #define MOUSE_MSS_BUTTON2DOWN 0x00 /* no middle button */ 243a9643ea8Slogwang #define MOUSE_MSS_BUTTON3DOWN 0x10 /* right */ 244a9643ea8Slogwang 245a9643ea8Slogwang /* Logitech MouseMan data packet (M+ protocol) */ 246a9643ea8Slogwang #define MOUSE_LMAN_BUTTON2DOWN 0x20 /* middle button, the 4th byte */ 247a9643ea8Slogwang 248a9643ea8Slogwang /* ALPS GlidePoint extension (variant of M+ protocol) */ 249a9643ea8Slogwang #define MOUSE_ALPS_BUTTON2DOWN 0x20 /* middle button, the 4th byte */ 250a9643ea8Slogwang #define MOUSE_ALPS_TAP 0x10 /* `tapping' action, the 4th byte */ 251a9643ea8Slogwang 252a9643ea8Slogwang /* Kinsington Thinking Mouse extension (variant of M+ protocol) */ 253a9643ea8Slogwang #define MOUSE_THINK_BUTTON2DOWN 0x20 /* lower-left button, the 4th byte */ 254a9643ea8Slogwang #define MOUSE_THINK_BUTTON4DOWN 0x10 /* lower-right button, the 4th byte */ 255a9643ea8Slogwang 256a9643ea8Slogwang /* MS IntelliMouse (variant of MS Serial) */ 257a9643ea8Slogwang #define MOUSE_INTELLI_PACKETSIZE 4 258a9643ea8Slogwang #define MOUSE_INTELLI_BUTTON2DOWN 0x10 /* middle button in the 4th byte */ 259a9643ea8Slogwang 260a9643ea8Slogwang /* Mouse Systems Corp. mouse data packet */ 261a9643ea8Slogwang #define MOUSE_MSC_PACKETSIZE 5 262a9643ea8Slogwang #define MOUSE_MSC_SYNCMASK 0xf8 263a9643ea8Slogwang #define MOUSE_MSC_SYNC 0x80 264a9643ea8Slogwang #define MOUSE_MSC_BUTTONS 0x07 265a9643ea8Slogwang #define MOUSE_MSC_BUTTON1UP 0x04 /* left */ 266a9643ea8Slogwang #define MOUSE_MSC_BUTTON2UP 0x02 /* middle */ 267a9643ea8Slogwang #define MOUSE_MSC_BUTTON3UP 0x01 /* right */ 268a9643ea8Slogwang #define MOUSE_MSC_MAXBUTTON 3 269a9643ea8Slogwang 270a9643ea8Slogwang /* MM series mouse data packet */ 271a9643ea8Slogwang #define MOUSE_MM_PACKETSIZE 3 272a9643ea8Slogwang #define MOUSE_MM_SYNCMASK 0xe0 273a9643ea8Slogwang #define MOUSE_MM_SYNC 0x80 274a9643ea8Slogwang #define MOUSE_MM_BUTTONS 0x07 275a9643ea8Slogwang #define MOUSE_MM_BUTTON1DOWN 0x04 /* left */ 276a9643ea8Slogwang #define MOUSE_MM_BUTTON2DOWN 0x02 /* middle */ 277a9643ea8Slogwang #define MOUSE_MM_BUTTON3DOWN 0x01 /* right */ 278a9643ea8Slogwang #define MOUSE_MM_XPOSITIVE 0x10 279a9643ea8Slogwang #define MOUSE_MM_YPOSITIVE 0x08 280a9643ea8Slogwang 281a9643ea8Slogwang /* PS/2 mouse data packet */ 282a9643ea8Slogwang #define MOUSE_PS2_PACKETSIZE 3 283a9643ea8Slogwang #define MOUSE_PS2_SYNCMASK 0xc8 284a9643ea8Slogwang #define MOUSE_PS2_SYNC 0x08 285a9643ea8Slogwang #define MOUSE_PS2_BUTTONS 0x07 /* 0x03 for 2 button mouse */ 286a9643ea8Slogwang #define MOUSE_PS2_BUTTON1DOWN 0x01 /* left */ 287a9643ea8Slogwang #define MOUSE_PS2_BUTTON2DOWN 0x04 /* middle */ 288a9643ea8Slogwang #define MOUSE_PS2_BUTTON3DOWN 0x02 /* right */ 289a9643ea8Slogwang #define MOUSE_PS2_TAP MOUSE_PS2_SYNC /* GlidePoint (PS/2) `tapping' 290a9643ea8Slogwang * Yes! this is the same bit 291a9643ea8Slogwang * as SYNC! 292a9643ea8Slogwang */ 293a9643ea8Slogwang 294a9643ea8Slogwang #define MOUSE_PS2_XNEG 0x10 295a9643ea8Slogwang #define MOUSE_PS2_YNEG 0x20 296a9643ea8Slogwang #define MOUSE_PS2_XOVERFLOW 0x40 297a9643ea8Slogwang #define MOUSE_PS2_YOVERFLOW 0x80 298a9643ea8Slogwang 299a9643ea8Slogwang /* Logitech MouseMan+ (PS/2) data packet (PS/2++ protocol) */ 300a9643ea8Slogwang #define MOUSE_PS2PLUS_SYNCMASK 0x48 301a9643ea8Slogwang #define MOUSE_PS2PLUS_SYNC 0x48 302a9643ea8Slogwang #define MOUSE_PS2PLUS_ZNEG 0x08 /* sign bit */ 303a9643ea8Slogwang #define MOUSE_PS2PLUS_BUTTON4DOWN 0x10 /* 4th button on MouseMan+ */ 304a9643ea8Slogwang #define MOUSE_PS2PLUS_BUTTON5DOWN 0x20 305a9643ea8Slogwang 306a9643ea8Slogwang /* IBM ScrollPoint (PS/2) also uses PS/2++ protocol */ 307a9643ea8Slogwang #define MOUSE_SPOINT_ZNEG 0x80 /* sign bits */ 308a9643ea8Slogwang #define MOUSE_SPOINT_WNEG 0x08 309a9643ea8Slogwang 310a9643ea8Slogwang /* MS IntelliMouse (PS/2) data packet */ 311a9643ea8Slogwang #define MOUSE_PS2INTELLI_PACKETSIZE 4 312a9643ea8Slogwang /* some compatible mice have additional buttons */ 313a9643ea8Slogwang #define MOUSE_PS2INTELLI_BUTTON4DOWN 0x40 314a9643ea8Slogwang #define MOUSE_PS2INTELLI_BUTTON5DOWN 0x80 315a9643ea8Slogwang 316a9643ea8Slogwang /* MS IntelliMouse Explorer (PS/2) data packet (variation of IntelliMouse) */ 317a9643ea8Slogwang #define MOUSE_EXPLORER_ZNEG 0x08 /* sign bit */ 318a9643ea8Slogwang /* IntelliMouse Explorer has additional button data in the fourth byte */ 319a9643ea8Slogwang #define MOUSE_EXPLORER_BUTTON4DOWN 0x10 320a9643ea8Slogwang #define MOUSE_EXPLORER_BUTTON5DOWN 0x20 321a9643ea8Slogwang 322a9643ea8Slogwang /* Interlink VersaPad (serial I/F) data packet */ 323a9643ea8Slogwang #define MOUSE_VERSA_PACKETSIZE 6 324a9643ea8Slogwang #define MOUSE_VERSA_IN_USE 0x04 325a9643ea8Slogwang #define MOUSE_VERSA_SYNCMASK 0xc3 326a9643ea8Slogwang #define MOUSE_VERSA_SYNC 0xc0 327a9643ea8Slogwang #define MOUSE_VERSA_BUTTONS 0x30 328a9643ea8Slogwang #define MOUSE_VERSA_BUTTON1DOWN 0x20 /* left */ 329a9643ea8Slogwang #define MOUSE_VERSA_BUTTON2DOWN 0x00 /* middle */ 330a9643ea8Slogwang #define MOUSE_VERSA_BUTTON3DOWN 0x10 /* right */ 331a9643ea8Slogwang #define MOUSE_VERSA_TAP 0x08 332a9643ea8Slogwang 333a9643ea8Slogwang /* Interlink VersaPad (PS/2 I/F) data packet */ 334a9643ea8Slogwang #define MOUSE_PS2VERSA_PACKETSIZE 6 335a9643ea8Slogwang #define MOUSE_PS2VERSA_IN_USE 0x10 336a9643ea8Slogwang #define MOUSE_PS2VERSA_SYNCMASK 0xe8 337a9643ea8Slogwang #define MOUSE_PS2VERSA_SYNC 0xc8 338a9643ea8Slogwang #define MOUSE_PS2VERSA_BUTTONS 0x05 339a9643ea8Slogwang #define MOUSE_PS2VERSA_BUTTON1DOWN 0x04 /* left */ 340a9643ea8Slogwang #define MOUSE_PS2VERSA_BUTTON2DOWN 0x00 /* middle */ 341a9643ea8Slogwang #define MOUSE_PS2VERSA_BUTTON3DOWN 0x01 /* right */ 342a9643ea8Slogwang #define MOUSE_PS2VERSA_TAP 0x02 343a9643ea8Slogwang 344a9643ea8Slogwang /* A4 Tech 4D Mouse (PS/2) data packet */ 345a9643ea8Slogwang #define MOUSE_4D_PACKETSIZE 3 346a9643ea8Slogwang #define MOUSE_4D_WHEELBITS 0xf0 347a9643ea8Slogwang 348a9643ea8Slogwang /* A4 Tech 4D+ Mouse (PS/2) data packet */ 349a9643ea8Slogwang #define MOUSE_4DPLUS_PACKETSIZE 3 350a9643ea8Slogwang #define MOUSE_4DPLUS_ZNEG 0x04 /* sign bit */ 351a9643ea8Slogwang #define MOUSE_4DPLUS_BUTTON4DOWN 0x08 352a9643ea8Slogwang 353a9643ea8Slogwang /* sysmouse extended data packet */ 354a9643ea8Slogwang /* 355a9643ea8Slogwang * /dev/sysmouse sends data in two formats, depending on the protocol 356a9643ea8Slogwang * level. At the level 0, format is exactly the same as MousSystems' 357a9643ea8Slogwang * five byte packet. At the level 1, the first five bytes are the same 358a9643ea8Slogwang * as at the level 0. There are additional three bytes which shows 359a9643ea8Slogwang * `dz' and the states of additional buttons. `dz' is expressed as the 360a9643ea8Slogwang * sum of the byte 5 and 6 which contain signed seven bit values. 361a9643ea8Slogwang * The states of the button 4 though 10 are in the bit 0 though 6 in 362a9643ea8Slogwang * the byte 7 respectively: 1 indicates the button is up. 363a9643ea8Slogwang */ 364a9643ea8Slogwang #define MOUSE_SYS_PACKETSIZE 8 365a9643ea8Slogwang #define MOUSE_SYS_SYNCMASK 0xf8 366a9643ea8Slogwang #define MOUSE_SYS_SYNC 0x80 367a9643ea8Slogwang #define MOUSE_SYS_BUTTON1UP 0x04 /* left, 1st byte */ 368a9643ea8Slogwang #define MOUSE_SYS_BUTTON2UP 0x02 /* middle, 1st byte */ 369a9643ea8Slogwang #define MOUSE_SYS_BUTTON3UP 0x01 /* right, 1st byte */ 370a9643ea8Slogwang #define MOUSE_SYS_BUTTON4UP 0x0001 /* 7th byte */ 371a9643ea8Slogwang #define MOUSE_SYS_BUTTON5UP 0x0002 372a9643ea8Slogwang #define MOUSE_SYS_BUTTON6UP 0x0004 373a9643ea8Slogwang #define MOUSE_SYS_BUTTON7UP 0x0008 374a9643ea8Slogwang #define MOUSE_SYS_BUTTON8UP 0x0010 375a9643ea8Slogwang #define MOUSE_SYS_BUTTON9UP 0x0020 376a9643ea8Slogwang #define MOUSE_SYS_BUTTON10UP 0x0040 377a9643ea8Slogwang #define MOUSE_SYS_MAXBUTTON 10 378a9643ea8Slogwang #define MOUSE_SYS_STDBUTTONS 0x07 379a9643ea8Slogwang #define MOUSE_SYS_EXTBUTTONS 0x7f /* the others */ 380a9643ea8Slogwang 381a9643ea8Slogwang /* Mouse remote socket */ 382a9643ea8Slogwang #define _PATH_MOUSEREMOTE "/var/run/MouseRemote" 383a9643ea8Slogwang 384a9643ea8Slogwang #endif /* _SYS_MOUSE_H_ */ 385