www.nico.schottelius.org/software/gpm/browse_source/gpm-1.99.7/patches/todo/pnp.patch

563 lines
19 KiB
Diff
Raw Normal View History

diff -uNrX gpm-ignore-files gpm-1.18.1/gpmInt.h gpm-1.18.1.eb1/gpmInt.h
--- gpm-1.18.1/gpmInt.h Fri Nov 12 07:27:37 1999
+++ gpm-1.18.1.eb1/gpmInt.h Sun Jan 30 00:30:04 2000
@@ -67,6 +67,7 @@
int (*repeat_fun)(Gpm_Event *state, int fd); /* repeat this event into fd */
/* itz Mon Jan 11 23:27:54 PST 1999 */
+ char *pnp_names[10];
} Gpm_Type;
#define GPM_EXTRA_MAGIC_1 0xAA
Binary files gpm-1.18.1/hltest and gpm-1.18.1.eb1/hltest differ
diff -uNrX gpm-ignore-files gpm-1.18.1/mice.c gpm-1.18.1.eb1/mice.c
--- gpm-1.18.1/mice.c Fri Nov 12 07:27:37 1999
+++ gpm-1.18.1.eb1/mice.c Sun Jan 30 03:19:45 2000
@@ -1189,6 +1189,349 @@
return type;
}
+
+/* The routines:
+ * pnpgets, pnpparse, & pnpproto are by Kazutaka YOKOTA, see below.
+ *
+ * This is code ripped almost directly out of X to enable automatic
+ * protocol selection in gpm.
+ *
+ * Eric Biederman 30 January 2000
+ */
+/*
+ * Copyright 1998 by Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Kazutaka YOKOTA not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Kazutaka YOKOTA makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * KAZUTAKA YOKOTA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KAZUTAKA YOKOTA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+
+static int pnpgets(int fd, char *buf)
+{
+ struct termios tty;
+ fd_set fds;
+ struct timeval timeout;
+ int i;
+ char c;
+
+ /*
+ * Just put the device to 1200 baud. Thanks to Francois Chastrette
+ * for his great help and debugging with his own pnp device.
+ */
+ tcgetattr(fd, &tty);
+
+ tty.c_iflag = IGNBRK | IGNPAR;
+ tty.c_oflag = 0;
+ tty.c_lflag = 0;
+ tty.c_line = 0;
+ tty.c_cc[VTIME] = 0;
+ tty.c_cc[VMIN] = 1;
+ tty.c_cflag = (CS7 | CREAD | CLOCAL | HUPCL) | B1200;
+ tcsetattr(fd, TCSAFLUSH, &tty); /* set parameters */
+
+ /* toggle rts */
+ ioctl(fd, TIOCMGET, &i);
+ i |= TIOCM_DTR; /* DTR = 1 */
+ i &= ~TIOCM_RTS; /* RTS = 0 */
+ ioctl(fd, TIOCMSET, &i);
+ usleep(200000);
+
+ /* wait for response */
+ tcflush(fd, TCIFLUSH);
+ i = TIOCM_DTR | TIOCM_RTS; /* DTR = 1, RTS = 1 */
+ ioctl(fd, TIOCMBIS, &i);
+
+ /* try to read something */
+ FD_ZERO(&fds);
+ FD_SET(fd, &fds);
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 200000;
+ if (select(FD_SETSIZE, &fds, NULL, NULL, &timeout) <= 0)
+ goto connect_idle;
+
+ /* collect PnP COM device ID (2.1.7) */
+ i = 0;
+ usleep(200000); /* the mouse must send `Begin ID' within 200msec */
+
+ while (read(fd, &c, 1) != 0) {
+ /* we may see "M", or "M3..." before `Begin ID' */
+ if ((c == 0x08) || (c == 0x28)) { /* Begin ID */
+ buf[i++] = c;
+ break;
+ }
+ }
+
+ if (i <= 0) {
+ /* we haven't seen `Begin ID' in time... */
+ goto connect_idle;
+ }
+
+ ++c; /* make it `End ID' */
+ for (;;) {
+ FD_ZERO(&fds);
+ FD_SET(fd, &fds);
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 200000;
+ if (select(FD_SETSIZE, &fds, NULL, NULL, &timeout) <= 0)
+ break;
+
+ read (fd, &buf[i], 1);
+ if (buf[i++] == c) /* End ID */
+ break;
+ if (i >= 256)
+ break;
+ }
+ if (buf[i -1] != c)
+ goto connect_idle;
+ return i;
+
+ /*
+ * According to PnP spec, we should set DTR = 1 and RTS = 0 while
+ * in idle state. But, `moused' shall set DTR = RTS = 1 and proceed,
+ * assuming there is something at the port even if it didn't
+ * respond to the PnP enumeration procedure.
+ */
+ disconnect_idle:
+ i = TIOCM_DTR | TIOCM_RTS; /* DTR = 1, RTS = 1 */
+ ioctl(fd, TIOCMBIS, &i);
+ connect_idle:
+ return 0;
+}
+
+/* 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;
+
+static int pnpparse(pnpid_t *id, char *buf, int len)
+{
+ char s[3];
+ int offset;
+ int sum = 0;
+ int i, j;
+
+ id->revision = 0;
+ id->eisaid = NULL;
+ id->serial = NULL;
+ id->class = NULL;
+ id->compat = NULL;
+ id->description = NULL;
+ id->neisaid = 0;
+ id->nserial = 0;
+ id->nclass = 0;
+ id->ncompat = 0;
+ id->ndescription = 0;
+
+ offset = 0x28 - buf[0];
+
+ /* calculate checksum */
+ for (i = 0; i < len - 3; ++i) {
+ sum += buf[i];
+ buf[i] += offset;
+ }
+ sum += buf[len - 1];
+ for (; i < len; ++i)
+ buf[i] += offset;
+ gpm_debug_log(LOG_DEBUG, "Mouse: PnP ID string: '%*.*s'\n", len, len, buf);
+
+ /* revision */
+ buf[1] -= offset;
+ buf[2] -= offset;
+ id->revision = ((buf[1] & 0x3f) << 6) | (buf[2] & 0x3f);
+ gpm_debug_log(LOG_DEBUG, "Mouse: PnP rev %d.%02d\n",
+ id->revision / 100, id->revision % 100);
+
+ /* EISA vender and product ID */
+ id->eisaid = &buf[3];
+ id->neisaid = 7;
+
+ /* option strings */
+ i = 10;
+ if (buf[i] == '\\') {
+ /* device serial # */
+ for (j = ++i; i < len; ++i) {
+ if (buf[i] == '\\')
+ break;
+ }
+ if (i >= len)
+ i -= 3;
+ if (i - j == 8) {
+ id->serial = &buf[j];
+ id->nserial = 8;
+ }
+ }
+ if (buf[i] == '\\') {
+ /* PnP class */
+ for (j = ++i; i < len; ++i) {
+ if (buf[i] == '\\')
+ break;
+ }
+ if (i >= len)
+ i -= 3;
+ if (i > j + 1) {
+ id->class = &buf[j];
+ id->nclass = i - j;
+ }
+ }
+ if (buf[i] == '\\') {
+ /* compatible driver */
+ for (j = ++i; i < len; ++i) {
+ if (buf[i] == '\\')
+ break;
+ }
+ /*
+ * PnP COM spec prior to v0.96 allowed '*' in this field,
+ * it's not allowed now; just igore it.
+ */
+ if (buf[j] == '*')
+ ++j;
+ if (i >= len)
+ i -= 3;
+ if (i > j + 1) {
+ id->compat = &buf[j];
+ id->ncompat = i - j;
+ }
+ }
+ if (buf[i] == '\\') {
+ /* product description */
+ for (j = ++i; i < len; ++i) {
+ if (buf[i] == ';')
+ break;
+ }
+ if (i >= len)
+ i -= 3;
+ if (i > j + 1) {
+ id->description = &buf[j];
+ id->ndescription = i - j;
+ }
+ }
+
+ /* checksum exists if there are any optional fields */
+ if ((id->nserial > 0) || (id->nclass > 0)
+ || (id->ncompat > 0) || (id->ndescription > 0)) {
+ gpm_debug_log(LOG_DEBUG, "Mouse: PnP checksum: 0x%02X\n", sum);
+ sprintf(s, "%02X", sum & 0x0ff);
+ if (strncmp(s, &buf[len - 3], 2) != 0) {
+#if 0
+ /*
+ * Checksum error!!
+ * I found some mice do not comply with the PnP COM device
+ * spec regarding checksum... XXX
+ */
+ return 0;
+#endif
+ }
+ }
+
+ return 1;
+}
+
+static Gpm_Type *pnplookup(char *s, int len)
+{
+ Gpm_Type *csr;
+ int index;
+ gpm_debug_log(LOG_DEBUG, "Mouse: PnP Looking up: %*.*s\n", len, len, s);
+ for(csr = mice; csr->fun; csr++) {
+ for(index = 0; csr->pnp_names[index]; index++) {
+ if (strncmp(csr->pnp_names[index], s, len) == 0) {
+ gpm_debug_log(LOG_DEBUG, "Mouse: PnP using: %*.*s\n", len, len, s);
+ return csr;
+ }
+ }
+ }
+ return NULL;
+}
+
+static Gpm_Type *pnpproto(pnpid_t *id)
+{
+ Gpm_Type *type;
+ int i, j;
+
+ if (id->nclass > 0)
+ if (strncmp(id->class, "MOUSE", id->nclass) != 0)
+ /* this is not a mouse! */
+ return NULL;
+
+ if (id->neisaid > 0) {
+ if (type = pnplookup(id->eisaid, id->neisaid)) {
+ return type;
+ }
+ }
+
+ /*
+ * The 'Compatible drivers' field may contain more than one
+ * ID separated by ','.
+ */
+ if (id->ncompat <= 0)
+ return NULL;
+ for (i = 0; i < id->ncompat; ++i) {
+ for (j = i; id->compat[i] != ','; ++i)
+ if (i >= id->ncompat)
+ break;
+ if (i > j) {
+ if (type = pnplookup(id->compat +j, i - j)) {
+ return type;
+ }
+ }
+ }
+ return NULL;
+}
+
+static Gpm_Type *I_pnp_auto(int fd, unsigned short flags, struct Gpm_Type *type)
+{
+ int len;
+ char buf[256];
+ pnpid_t pnpid;
+ int ret;
+
+ ret = 0;
+ len = pnpgets(fd, buf);
+
+ if (len) {
+ ret = pnpparse(&pnpid, buf, len);
+ }
+ if (ret == 0) {
+ return NULL;
+ }
+
+ type = pnpproto(&pnpid);
+ if (type) {
+ type = type->init(fd, type->flags, type);
+ }
+ return type;
+}
+
+
+static int M_pnp_auto(Gpm_Event *state, unsigned char *data)
+{
+ return -1;
+}
+
/* intellimouse, ps2 version: Ben Pfaff and Colin Plumb */
static Gpm_Type *I_imps2(int fd, unsigned short flags, struct Gpm_Type *type)
{
@@ -1438,84 +1781,126 @@
Gpm_Type mice[]={
{"mman", "The \"MouseMan\" and similar devices (3/4 bytes per packet).",
"Mouseman", M_mman, I_serial, CS7 | STD_FLG, /* first */
- {0x40, 0x40, 0x40, 0x00}, 3, 1, 1, 0, 0},
+ {0x40, 0x40, 0x40, 0x00}, 3, 1, 1, 0, 0, {}},
{"ms", "The original ms protocol, with a middle-button extension.",
"", M_ms, I_serial, CS7 | STD_FLG,
- {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0},
+ {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0, {
+ }},
{"ms+", "Like 'ms', but allows dragging with the middle button.",
"", M_ms_plus, I_serial, CS7 | STD_FLG,
- {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0},
+ {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0, {}},
{"ms+lr", "'ms+', but you can reset m by pressing lr (see man page).",
"", M_ms_plus_lr, I_serial, CS7 | STD_FLG,
- {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0},
+ {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0, {}},
{"bare", "Unadorned ms protocol. Needed with some 2-buttons mice.",
"Microsoft", M_bare, I_serial, CS7 | STD_FLG,
- {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0},
+ {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0, {}},
{"msc", "Mouse-Systems-Compatible (5bytes). Most 3-button mice.",
"MouseSystems", M_msc, I_serial, CS8 | CSTOPB | STD_FLG,
- {0xf8, 0x80, 0x00, 0x00}, 5, 1, 0, 0, R_msc},
+ {0xf8, 0x80, 0x00, 0x00}, 5, 1, 0, 0, R_msc, {
+ "PNP0F04", /* MouseSystems */
+ "PNP0F05", /* MouseSystems */
+ }},
{"sun", "'msc' protocol, but only 3 bytes per packet.",
"", M_sun, I_serial, CS8 | CSTOPB | STD_FLG,
- {0xf8, 0x80, 0x00, 0x00}, 3, 1, 0, 0, 0},
+ {0xf8, 0x80, 0x00, 0x00}, 3, 1, 0, 0, 0, {}},
{"mm", "MM series. Probably an old protocol...",
"MMSeries", M_mm, I_serial, CS8 | PARENB|PARODD | STD_FLG,
- {0xe0, 0x80, 0x80, 0x00}, 3, 1, 0, 0, 0},
+ {0xe0, 0x80, 0x80, 0x00}, 3, 1, 0, 0, 0, {}},
{"logi", "Used in some Logitech devices (only serial).",
"Logitech", M_logi, I_logi, CS8 | CSTOPB | STD_FLG,
- {0xe0, 0x80, 0x80, 0x00}, 3, 3, 0, 0, 0},
+ {0xe0, 0x80, 0x80, 0x00}, 3, 3, 0, 0, 0, {
+ "LGI8001", /* Logitech serial */
+ "PNP0F08", /* Logitech serial */
+ "PNP0F17", /* Logitech compatible serial */
+ }},
{"bm", "Micro$oft busmice and compatible devices.",
"BusMouse", M_bm, NULL, STD_FLG, /* bm is sun */
- {0xf8, 0x80, 0x00, 0x00}, 3, 3, 0, 0, 0},
+ {0xf8, 0x80, 0x00, 0x00}, 3, 3, 0, 0, 0, {
+ "PNP0F00", /* MS bus */
+ "PNP0F02", /* MS InPort */
+ "PNP0F0D", /* MS InPort compatible */
+ "PNP0F11", /* MS bus compatible */
+ "PNP0F15", /* Logitech bus */
+ "PNP0F18", /* Logitech bus compatible */
+ }},
{"ps2", "Busmice of the ps/2 series. Most busmice, actually.",
"PS/2", M_ps2, NULL, STD_FLG,
- {0xc0, 0x00, 0x00, 0x00}, 3, 1, 0, 0, 0},
+ {0xc0, 0x00, 0x00, 0x00}, 3, 1, 0, 0, 0, {
+ "PNP0F03", /* MS PS/2 */
+ "PNP0F0E", /* MS PS/2 compatible */
+ "PNP0F12", /* Logitech PS/2 */
+ "PNP0F13", /* PS/2 */
+ "PNP0F19", /* Logitech PS/2 compatible */
+ }},
{"ncr", "Ncr3125pen, found on some laptops",
"", M_ncr, NULL, STD_FLG,
- {0x08, 0x08, 0x00, 0x00}, 7, 7, 0, 1, 0},
+ {0x08, 0x08, 0x00, 0x00}, 7, 7, 0, 1, 0, {}},
{"wacom", "Wacom graphire tablet: pen, mouse",
"", M_wacom, I_wacom, STD_FLG,
- {0x80, 0x80, 0x80, 0x00}, 8, 8, 0, 0, 0},
+ {0x80, 0x80, 0x80, 0x00}, 8, 8, 0, 0, 0, {}},
{"genitizer", "\"Genitizer\" tablet, in relative mode.",
"", M_geni, I_serial, CS8|PARENB|PARODD,
- {0x80, 0x80, 0x00, 0x00}, 3, 1, 0, 0, 0},
+ {0x80, 0x80, 0x00, 0x00}, 3, 1, 0, 0, 0, {}},
{"logim", "Turn logitech into Mouse-Systems-Compatible.",
"", M_logimsc, I_serial, CS8 | CSTOPB | STD_FLG,
- {0xf8, 0x80, 0x00, 0x00}, 5, 1, 0, 0, 0},
+ {0xf8, 0x80, 0x00, 0x00}, 5, 1, 0, 0, 0, {}},
{"pnp", "Plug and pray. New mice may not run with '-t ms'.",
"", M_bare, I_pnp, CS7 | STD_FLG,
- {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0},
+ {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0, {}},
+ {"pnp+", "Plug and pray. New mice may not run with '-t ms'.",
+ "", M_ms_plus, I_pnp, CS7 | STD_FLG,
+ {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0, {
+ "KYEEZ00", /* Genius EZScroll */
+ "KYE0001", /* Genius PnP Mouse */
+ "PNP0F01", /* MS serial */
+ "PNP0F09", /* MS BallPoint serial */
+ "PNP0F0A", /* MS PnP serial */
+ "PNP0F0B", /* MS PnP BallPoint serial */
+ "PNP0F0C", /* MS serial comatible */
+ "PNP0F0F", /* MS BallPoint compatible */
+ }},
{"imps2", "Microsoft Intellimouse (ps2) - 3 buttons, wheel unused",
"", M_ps2, I_imps2, STD_FLG,
- {0xc0, 0x00, 0x00, 0x00}, 4, 1, 0, 0, 0},
+ {0xc0, 0x00, 0x00, 0x00}, 4, 1, 0, 0, 0, {}},
{"ms3", "Microsoft Intellimouse (serial) - 3 buttons, wheel unused",
"", M_ms3, I_pnp, CS7 | STD_FLG,
- {0xc0, 0x40, 0xc0, 0x00}, 4, 1, 0, 0, 0},
+ {0xc0, 0x40, 0xc0, 0x00}, 4, 1, 0, 0, 0, {
+ "MSH0001", /* MS IntelliMouse */
+ "MSH0004", /* MS IntelliMouse TrackBall */
+ "KYE0003", /* Genius NetMouse */
+ "LGI800C", /* Logitech MouseMan (4 button model) */
+ "LGI8050", /* Logitech MouseMan+ */
+ "LGI8051", /* Logitech FirstMouse+ */
+ }},
{"netmouse", "Genius NetMouse - 2 buttons and 2 buttons 'up'/'down'.",
"", M_netmouse, I_netmouse, CS7 | STD_FLG,
- {0xc0, 0x00, 0x00, 0x00}, 4, 1, 0, 0, 0},
+ {0xc0, 0x00, 0x00, 0x00}, 4, 1, 0, 0, 0, {}},
{"cal", "Calcomp UltraSlate",
"", M_calus, I_calus, CS8 | CSTOPB | STD_FLG,
- {0x80, 0x80, 0x80, 0x00}, 6, 6, 0, 1, 0},
+ {0x80, 0x80, 0x80, 0x00}, 6, 6, 0, 1, 0, {}},
{"calr", "Calcomp UltraSlate - relative mode",
"", M_calus_rel, I_calus, CS8 | CSTOPB | STD_FLG,
- {0x80, 0x80, 0x80, 0x00}, 6, 6, 0, 0, 0},
+ {0x80, 0x80, 0x80, 0x00}, 6, 6, 0, 0, 0, {}},
{"twid", "Twidddler keyboard",
"", M_twid, I_twid, CS8 | STD_FLG,
- {0x80, 0x00, 0x80, 0x80}, 5, 1, 0, 0, 0},
+ {0x80, 0x00, 0x80, 0x80}, 5, 1, 0, 0, 0, {}},
{"syn", "The \"Synaptics\" serial TouchPad.",
"synaptics", M_synaptics_serial, I_serial, CS7 | STD_FLG,
- {0x40, 0x40, 0x40, 0x00}, 6, 6, 1, 0, 0},
+ {0x40, 0x40, 0x40, 0x00}, 6, 6, 1, 0, 0, {}},
{"synps2", "The \"Synaptics\" PS/2 TouchPad",
"synaptics_ps2", M_synaptics_ps2, I_synps2, STD_FLG,
- {0x80, 0x80, 0x00, 0x00}, 6, 1, 1, 0, 0},
+ {0x80, 0x80, 0x00, 0x00}, 6, 1, 1, 0, 0, {}},
{"brw", "Fellowes Browser - 4 buttons (and a wheel) (dual protocol?)",
"", M_brw, I_pnp, CS7 | STD_FLG,
- {0xc0, 0x40, 0xc0, 0x00}, 4, 1, 0, 0, 0},
+ {0xc0, 0x40, 0xc0, 0x00}, 4, 1, 0, 0, 0, {
+ "KYE0002",
+ }},
#ifdef HAVE_LINUX_JOYSTICK_H
{"js", "Joystick mouse emulation",
"Joystick", M_js, NULL, 0,
- {0xFC, 0x00, 0x00, 0x00}, 12, 12, 0, 0, 0},
+ {0xFC, 0x00, 0x00, 0x00}, 12, 12, 0, 0, 0, {}},
#endif
{"summa", "Summagraphics or Genius tablet absolute mode(MM-Series)",
@@ -1523,19 +1908,38 @@
{0x98, 0x98, 0x00, 0x00}, 5, 1, 0, 1, R_summa},
{"mtouch", "MicroTouch touch-screens (only button-1 events, by now)",
"", M_mtouch, I_mtouch, STD_FLG,
- {0x80, 0x80, 0x80, 0x00}, 5, 1, 0, 1, NULL},
+ {0x80, 0x80, 0x80, 0x00}, 5, 1, 0, 1, NULL, {}},
{"acecad", "Acecad tablet absolute mode(Sumagrapics MM-Series mode)",
"", M_summa, I_summa, STD_FLG,
- {0x80, 0x80, 0x00, 0x00}, 7, 1, 0, 1, 0},
+ {0x80, 0x80, 0x00, 0x00}, 7, 1, 0, 1, 0, {}},
{"wp", "Genius WizardPad tablet",
"wizardpad", M_wp, I_wp, STD_FLG,
- {0xFA, 0x42, 0x00, 0x00}, 10, 1, 0, 1, 0},
+ {0xFA, 0x42, 0x00, 0x00}, 10, 1, 0, 1, 0, {}},
+
+ {"auto", "Automatic PNP mouse selection",
+ "", M_pnp_auto, I_pnp_auto, 0,
+ {0x00, 0x00, 0x00, 0x00}, 0, 0, 0, 0, 0, {}},
{"", "",
"", NULL, NULL, 0,
- {0x00, 0x00, 0x00, 0x00}, 0, 0, 0, 0, 0}
+ {0x00, 0x00, 0x00, 0x00}, 0, 0, 0, 0, 0, {NULL}}
+#if notyet
+ {
+ "KML0001", /* Kensignton ThinkingMouse */
+ "PNP0F06", /* Genius Mouse */
+ "PNP0F07", /* Genius Mouse */
+ "PNP0F10", /* TI QuickPort */
+ "PNP0F14", /* MS Kids Mouse */
+ "PNP0F16", /* Logitech SWIFT */
+ "PNP0F1A", /* Logitech SWIFT compatible */
+ "PNP0F1B", /* HP Omnibook */
+ "PNP0F1C", /* Compaq LTE TrackBall PS/2 */
+ "PNP0F1D", /* Compaq LTE TrackBall serial */
+ "PNP0F1E", /* MS Kids TrackBall */
+ }
+#endif
};
/*------------------------------------------------------------------------*/