diff options
author | sos <sos@FreeBSD.org> | 1996-12-01 19:05:50 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 1996-12-01 19:05:50 +0000 |
commit | 0a8ebf33fc34909b6f0e7ecd100e7c353b856355 (patch) | |
tree | 54352ee80d9cef4ec7de46e9031694a7e6a7126f /sys/alpha | |
parent | facb673a9aff2058f0ae04c490c808063761bc84 (diff) | |
download | FreeBSD-src-0a8ebf33fc34909b6f0e7ecd100e7c353b856355.zip FreeBSD-src-0a8ebf33fc34909b6f0e7ecd100e7c353b856355.tar.gz |
Alot of fixes from kazu:
1. All the suggestions earlier made by Bruce: renaming some symbols,
stricter error checking, removing redundant code, etc.
2. The `psm' driver preserves the default counter resolution and
report rate, whatever they are after reset. (Based on reports and
suggestion from Nate and Rob Bolin).
3. The `psm' driver now does not check the so-called sync. bit in the
first byte of the data packet by default, so that the tapping feature
of ALPUS GlidePoint works (based on reports from Louis Mamakos). I
tested the code with ALPUS Desktop GlidePoint (M/N GP101) and found
no problem; tapping worked. It appears ALPUS produces several models
of GlidePoint. I hope the other models are OK too.
The check code can still be activated by defining the PSM_CHECKSYNC
option in the config file. (The bit checking slightly reduces, if not
completely eliminates, weird mouse behavior cased by unsynchronized
mouse data packets. It also helps us to detect if the mouse interrupt
can ever be lost. But, well, if there are devices which cannot be
supported this way...)
4. The `psm' driver does not include the protocol emulation code by
default. The code can still be compiled in if the PSM_EMULATION option
is specified in the config file. Louis Mamakos suggests the emulation
code is putting too much in the kernel, and `moused' works well.
I will think about this later and decide if the entire emulation
code should be removed.
5. And, of course, the fix in `scprobe()' from Bruce to cure the
UserConfig problem. My code in `kbdio.c' is slightly different from
his patch, but has the same effect. There still is a possibility that
`scprobe()' gets confused, if, for whatever reasons, the user holds
down a key for very long time during the boot process. But we cannot
cope with everything, can we?
Submitted by: Kazutaka YOKOTA (yokota@zodiac.mech.utsunomiya-u.ac.jp)
Diffstat (limited to 'sys/alpha')
-rw-r--r-- | sys/alpha/include/mouse.h | 62 |
1 files changed, 48 insertions, 14 deletions
diff --git a/sys/alpha/include/mouse.h b/sys/alpha/include/mouse.h index 1303a31..110c503 100644 --- a/sys/alpha/include/mouse.h +++ b/sys/alpha/include/mouse.h @@ -19,7 +19,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: mouse.h,v 1.2 1996/11/14 22:18:25 sos Exp $ + * $Id: mouse.h,v 1.1 1994/09/09 11:27:31 dfr Exp $ */ #ifndef _MACHINE_MOUSE_H_ @@ -29,26 +29,20 @@ #include <sys/ioccom.h> /* - * NOTE: MOUSEIOC and MOUSEIOCREAD are now obsolete, but will stay - * for compatibility reasons. But, remember, the MOUSEIOCREAD ioctl - * command doesn't work and never worked before. Some day we shall - * get rid of these... + * NOTE: MOUSEIOC, MOUSEIOCREAD, and mouseinfo are now obsolete, + * but will stay for compatibility reasons. But, remember, + * the MOUSEIOCREAD ioctl command doesn't work and never worked before. + * Some day we shall get rid of these... */ #define MOUSEIOC ('M'<<8) #define MOUSEIOCREAD (MOUSEIOC|60) -#define MOUSE_GETSTATE _IOR('M',0,mouseinfo_t) -#define MOUSE_GETINFO _IOR('M',1,mousehw_t) -#define MOUSE_GETMODE _IOR('M',2,mousemode_t) -#define MOUSE_SETMODE _IOW('M',3,mousemode_t) - typedef struct mouseinfo { unsigned char status; char xmotion; char ymotion; } mouseinfo_t; - /* status */ #define BUTSTATMASK 0x07 /* Any mouse button down if any bit set */ #define BUTCHNGMASK 0x38 /* Any mouse button changed if any bit set */ @@ -60,6 +54,32 @@ typedef struct mouseinfo { #define BUT1CHNG 0x20 /* Button 1 changed if set */ #define MOVEMENT 0x40 /* Mouse movement detected */ +#define MOUSE_GETSTATE _IOR('M',0,mousestatus_t) +#define MOUSE_GETINFO _IOR('M',1,mousehw_t) +#define MOUSE_GETMODE _IOR('M',2,mousemode_t) +#define MOUSE_SETMODE _IOW('M',3,mousemode_t) + +/* new ioctls */ + +/* mouse status block */ +typedef struct mousestatus { + int button; /* button status */ + int obutton; /* previous button status */ + int dx; /* x movement */ + int dy; /* y movement */ +} mousestatus_t; +/* button */ +#define MOUSE_BUTTON1DOWN 0x0001 /* left */ +#define MOUSE_BUTTON2DOWN 0x0002 /* middle */ +#define MOUSE_BUTTON3DOWN 0x0004 /* right */ +#define MOUSE_BUTTON4DOWN 0x0008 +#define MOUSE_BUTTON5DOWN 0x0010 +#define MOUSE_BUTTON6DOWN 0x0020 +#define MOUSE_BUTTON7DOWN 0x0040 +#define MOUSE_BUTTON8DOWN 0x0080 +#define MOUSE_STDBUTTONS 0x0007 /* buttons 1-3 */ +#define MOUSE_EXTBUTTONS 0x00f8 /* the others */ + typedef struct mousehw { int buttons; int iftype; /* MOUSE_IF_XXX */ @@ -67,13 +87,11 @@ typedef struct mousehw { int hwid; /* I/F dependent hardware ID for the PS/2 mouse, it will be PSM_XXX_ID */ } mousehw_t; - /* iftype */ #define MOUSE_IF_SERIAL 0 #define MOUSE_IF_BUS 1 #define MOUSE_IF_INPORT 2 #define MOUSE_IF_PS2 3 - /* type */ #define MOUSE_UNKNOWN (-1) /* should be treated as a mouse */ #define MOUSE_MOUSE 0 @@ -87,7 +105,6 @@ typedef struct mousemode { int resolution; /* ppi, -1 if unknown */ int accelfactor; /* accelation factor (must be 1 or greater) */ } mousemode_t; - /* protocol */ #define MOUSE_PROTO_MS 0 /* Microsoft Serial, 3 bytes */ #define MOUSE_PROTO_MSC 1 /* Mouse Systems, 5 bytes */ @@ -107,6 +124,9 @@ typedef struct mousemode { #define MOUSE_MSS_BUTTON2DOWN 0x00 /* no middle button */ #define MOUSE_MSS_BUTTON3DOWN 0x10 /* right */ +/* Logitech MouseMan data packet (M+ protocol) */ +#define MOUSE_LMAN_BUTTON2DOWN 0x20 /* middle button, in the 4th byte */ + /* Mouse Systems Corp. mouse data packet */ #define MOUSE_MSC_PACKETSIZE 5 #define MOUSE_MSC_SYNCMASK 0xf8 @@ -116,6 +136,17 @@ typedef struct mousemode { #define MOUSE_MSC_BUTTON2UP 0x02 /* middle */ #define MOUSE_MSC_BUTTON3UP 0x01 /* right */ +/* MM series mouse data packet */ +#define MOUSE_MM_PACKETSIZE 3 +#define MOUSE_MM_SYNCMASK 0xe0 +#define MOUSE_MM_SYNC 0x80 +#define MOUSE_MM_BUTTONS 0x07 +#define MOUSE_MM_BUTTON1DOWN 0x04 /* left */ +#define MOUSE_MM_BUTTON2DOWN 0x02 /* middle */ +#define MOUSE_MM_BUTTON3DOWN 0x01 /* right */ +#define MOUSE_MM_XPOSITIVE 0x10 +#define MOUSE_MM_YPOSITIVE 0x08 + /* PS/2 mouse data packet */ #define MOUSE_PS2_PACKETSIZE 3 #define MOUSE_PS2_SYNCMASK 0x08 /* 0x0c for 2 button mouse */ @@ -124,6 +155,9 @@ typedef struct mousemode { #define MOUSE_PS2_BUTTON1DOWN 0x01 /* left */ #define MOUSE_PS2_BUTTON2DOWN 0x04 /* middle */ #define MOUSE_PS2_BUTTON3DOWN 0x02 /* right */ +#define MOUSE_PS2_BUTTON4UP 0x08 /* GlidePoint tapping feature + * Yes! this is the same bit as SYNC! + */ #define MOUSE_PS2_XNEG 0x10 #define MOUSE_PS2_YNEG 0x20 #define MOUSE_PS2_XOVERFLOW 0x40 |