summaryrefslogtreecommitdiff
path: root/usr.sbin/wsmoused/mouse_protocols.h
diff options
context:
space:
mode:
authorAaron Campbell <aaron@cvs.openbsd.org>2001-04-14 04:47:42 +0000
committerAaron Campbell <aaron@cvs.openbsd.org>2001-04-14 04:47:42 +0000
commit42ffb54282c89d5371bfcb33cc988020b1c94d91 (patch)
tree06f5fd8264dcc971c73bbb3d01f00f3d930be2ad /usr.sbin/wsmoused/mouse_protocols.h
parentadffc27bad14cc984251f7b99221c20ae0ecef8f (diff)
Userland daemon for wscons console mouse features.
Diffstat (limited to 'usr.sbin/wsmoused/mouse_protocols.h')
-rw-r--r--usr.sbin/wsmoused/mouse_protocols.h203
1 files changed, 203 insertions, 0 deletions
diff --git a/usr.sbin/wsmoused/mouse_protocols.h b/usr.sbin/wsmoused/mouse_protocols.h
new file mode 100644
index 00000000000..2ac9abe1158
--- /dev/null
+++ b/usr.sbin/wsmoused/mouse_protocols.h
@@ -0,0 +1,203 @@
+/* $OpenBSD: mouse_protocols.h,v 1.1 2001/04/14 04:47:41 aaron Exp $ */
+
+/*
+ * Copyright (c) 2001 Jean-Baptiste Marchand, Julien Montagne and Jerome Verdon
+ *
+ * Copyright (c) 1998 by Kazutaka Yokota
+ *
+ * Copyright (c) 1995 Michael Smith
+ *
+ * Copyright (c) 1993 by David Dawes <dawes@xfree86.org>
+ *
+ * Copyright (c) 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+ *
+ * All rights reserved.
+ *
+ * Most of this code was taken from the FreeBSD moused daemon, written by
+ * Michael Smith. The FreeBSD moused daemon already contained code from the
+ * Xfree Project, written by David Dawes and Thomas Roell and Kazutaka Yokota.
+ *
+ * Adaptation to OpenBSD was done by Jean-Baptiste Marchand, Julien Montagne
+ * and Jerome Verdon.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by
+ * David Dawes, Jean-Baptiste Marchand, Julien Montagne, Thomas Roell,
+ * Michael Smith, Jerome Verdon and Kazutaka Yokota.
+ * 4. The name authors may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ */
+
+
+/* Mouse protocols */
+
+#define P_UNKNOWN (-1)
+#define P_MS 0 /* Microsoft Serial, 3 bytes */
+#define P_MSC 1 /* Mouse Systems, 5 bytes */
+#define P_LOGI 2 /* Logitech, 3 bytes */
+#define P_MM 3 /* MM series, 3 bytes */
+#define P_LOGIMAN 4 /* Logitech MouseMan 3/4 bytes */
+#define P_MMHIT 5 /* Hitachi Tablet 3 bytes */
+#define P_GLIDEPOINT 6 /* ALPS GlidePoint, 3/4 bytes */
+#define P_IMSERIAL 7 /* MS IntelliMouse, 4 bytes */
+#define P_THINKING 8 /* Kensignton Thinking Mouse, 3/4 bytes */
+
+/* flags */
+
+#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_BUTTONS 0x00FF
+#define MOUSE_POSCHANGED 0x0100
+
+/*
+ * List of all the protocols parameters
+ * The parameters are :
+ * - size of the packet
+ * - synchronization mask
+ * - synchronization value (must be equal to data ANDed with SYNCMASK)
+ * - mask of buttons
+ * - mask of each button separetely
+ */
+
+/* Microsoft Serial mouse data packet */
+#define MOUSE_MSS_PACKETSIZE 3
+#define MOUSE_MSS_SYNCMASK 0x40
+#define MOUSE_MSS_SYNC 0x40
+#define MOUSE_MSS_BUTTONS 0x30
+#define MOUSE_MSS_BUTTON1DOWN 0x20 /* left */
+#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, the 4th byte */
+
+/* ALPS GlidePoint extention (variant of M+ protocol) */
+#define MOUSE_ALPS_BUTTON2DOWN 0x20 /* middle button, the 4th byte */
+#define MOUSE_ALPS_TAP 0x10 /* `tapping' action, the 4th byte */
+
+/* Kinsington Thinking Mouse extention (variant of M+ protocol) */
+#define MOUSE_THINK_BUTTON2DOWN 0x20 /* lower-left button, the 4th byte */
+#define MOUSE_THINK_BUTTON4DOWN 0x10 /* lower-right button, the 4th byte */
+
+/* MS IntelliMouse (variant of MS Serial) */
+#define MOUSE_INTELLI_PACKETSIZE 4
+#define MOUSE_INTELLI_BUTTON2DOWN 0x10 /* middle button the 4th byte */
+
+/* Mouse Systems Corp. mouse data packet */
+#define MOUSE_MSC_PACKETSIZE 5
+#define MOUSE_MSC_SYNCMASK 0xf8
+#define MOUSE_MSC_SYNC 0x80
+#define MOUSE_MSC_BUTTONS 0x07
+#define MOUSE_MSC_BUTTON1UP 0x04 /* left */
+#define MOUSE_MSC_BUTTON2UP 0x02 /* middle */
+#define MOUSE_MSC_BUTTON3UP 0x01 /* right */
+#define MOUSE_MSC_MAXBUTTON 3
+
+/* 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
+
+/* Interlink VersaPad (serial I/F) data packet */
+#define MOUSE_VERSA_PACKETSIZE 6
+#define MOUSE_VERSA_IN_USE 0x04
+#define MOUSE_VERSA_SYNCMASK 0xc3
+#define MOUSE_VERSA_SYNC 0xc0
+#define MOUSE_VERSA_BUTTONS 0x30
+#define MOUSE_VERSA_BUTTON1DOWN 0x20 /* left */
+#define MOUSE_VERSA_BUTTON2DOWN 0x00 /* middle */
+#define MOUSE_VERSA_BUTTON3DOWN 0x10 /* right */
+#define MOUSE_VERSA_TAP 0x08
+
+/* Mouse resolutions */
+
+#define MOUSE_RES_DEFAULT 254
+#define MOUSE_RES_UNKNOWN 255
+#define MOUSE_RES_LOW 0
+#define MOUSE_RES_MEDIUMLOW 1
+#define MOUSE_RES_MEDIUMHIGH 2
+#define MOUSE_RES_HIGH 3
+
+/* Mouse report rates */
+
+#define MOUSE_RATE_UNKNOWN 255
+#define MOUSE_RATE_DEFAULT 80
+#define MOUSE_RATE_VERY_LOW 20
+#define MOUSE_RATE_LOW 40
+#define MOUSE_RATE_MEDIUM_LOW 60
+#define MOUSE_RATE_MEDIUM_HIGH 80
+#define MOUSE_RATE_HIGH 100
+#define MOUSE_RATE_VERY_HIGH 200
+
+/* serial PnP ID string */
+typedef struct {
+ int revision; /* PnP revision, 100 for 1.00 */
+ char *eisaid; /* EISA ID including mfr ID and product ID */
+ char *serial; /* serial No, optional */
+ char *class; /* device class, optional */
+ char *compat; /* list of compatible drivers, optional */
+ char *description; /* product description, optional */
+ int neisaid; /* length of the above fields... */
+ int nserial;
+ int nclass;
+ int ncompat;
+ int ndescription;
+} pnpid_t;
+
+/* symbol table entry */
+typedef struct {
+ char *name;
+ int val;
+} symtab_t;
+
+/* current status of the mouse */
+typedef struct mousestatus {
+ int flags; /* state change flags */
+ int button; /* button status */
+ int obutton; /* previous button status */
+ int dx; /* x movement */
+ int dy; /* y movement */
+ int dz; /* z movement */
+} mousestatus_t;
+
+/* Prototypes */
+
+void mouse_init(void);
+int mouse_identify(void);
+int mouse_protocol(unsigned char, mousestatus_t *);
+