static Bool logiParse (KdPointerInfo *pi, unsigned char *ev, int ne) { Kmouse *km = pi->driverPrivate; int dx, dy; unsigned long flags; flags = KD_MOUSE_DELTA; if (ne == 3) { if (ev[0] & 0x20) flags |= KD_BUTTON_1; if (ev[0] & 0x10) flags |= KD_BUTTON_3; dx = (signed char)(((ev[0] & 0x03) << 6) | (ev[1] & 0x3F)); dy = (signed char)(((ev[0] & 0x0C) << 4) | (ev[2] & 0x3F)); flags |= km->state & KD_BUTTON_2; } else { if (ev[0] & 0x20) flags |= KD_BUTTON_2; dx = 0; dy = 0; flags |= km->state & (KD_BUTTON_1|KD_BUTTON_3); } if (!MouseReasonable (pi, flags, dx, dy)) return FALSE; if (km->stage == MouseWorking) KdEnqueuePointerEvent (pi, flags, dx, dy, 0); return TRUE; }
/* * Standard PS/2 mouse protocol */ static Bool ps2Parse (KdMouseInfo *mi, unsigned char *ev, int ne) { Kmouse *km = mi->driver; int dx, dy, dz; unsigned long flags; unsigned long flagsrelease = 0; flags = KD_MOUSE_DELTA; if (ev[0] & 4) flags |= KD_BUTTON_2; if (ev[0] & 2) flags |= KD_BUTTON_3; if (ev[0] & 1) flags |= KD_BUTTON_1; if (ne > 3) { dz = (int) (signed char) ev[3]; /*if (dz > 0)*/ if (dz < 0) { flags |= KD_BUTTON_4; /*else if (dz < 0)*/ flagsrelease = KD_BUTTON_4; } else if (dz > 0) { flags |= KD_BUTTON_5; flagsrelease = KD_BUTTON_5; } } dx = ev[1]; if (ev[0] & 0x10) dx -= 256; dy = ev[2]; if (ev[0] & 0x20) dy -= 256; dy = -dy; if (!MouseReasonable (mi, flags, dx, dy)) return FALSE; if (km->stage == MouseWorking) { KdEnqueueMouseEvent (mi, flags, dx, dy); if (flagsrelease) { flags &= ~flagsrelease; KdEnqueueMouseEvent (mi, flags, dx, dy); } } return TRUE; }
static Bool busParse (KdPointerInfo *pi, unsigned char *ev, int ne) { Kmouse *km = pi->driverPrivate; int dx, dy; unsigned long flags; flags = KD_MOUSE_DELTA; dx = (signed char) ev[1]; dy = -(signed char) ev[2]; if ((ev[0] & 4) == 0) flags |= KD_BUTTON_1; if ((ev[0] & 2) == 0) flags |= KD_BUTTON_2; if ((ev[0] & 1) == 0) flags |= KD_BUTTON_3; if (!MouseReasonable (pi, flags, dx, dy)) return FALSE; if (km->stage == MouseWorking) KdEnqueuePointerEvent (pi, flags, dx, dy, 0); return TRUE; }
static Bool msParse (KdMouseInfo *mi, unsigned char *ev, int ne) { Kmouse *km = mi->driver; int dx, dy; unsigned long flags; flags = KD_MOUSE_DELTA; if (ev[0] & 0x20) flags |= KD_BUTTON_1; if (ev[0] & 0x10) flags |= KD_BUTTON_3; dx = (signed char)(((ev[0] & 0x03) << 6) | (ev[1] & 0x3F)); dy = (signed char)(((ev[0] & 0x0C) << 4) | (ev[2] & 0x3F)); if (!MouseReasonable (mi, flags, dx, dy)) return FALSE; if (km->stage == MouseWorking) KdEnqueueMouseEvent (mi, flags, dx, dy); return TRUE; }
/* * Mouse systems protocol, 5 bytes */ static Bool mscParse (KdPointerInfo *pi, unsigned char *ev, int ne) { Kmouse *km = pi->driverPrivate; int dx, dy; unsigned long flags; flags = KD_MOUSE_DELTA; if (!(ev[0] & 0x4)) flags |= KD_BUTTON_1; if (!(ev[0] & 0x2)) flags |= KD_BUTTON_2; if (!(ev[0] & 0x1)) flags |= KD_BUTTON_3; dx = (signed char)(ev[1]) + (signed char)(ev[3]); dy = - ((signed char)(ev[2]) + (signed char)(ev[4])); if (!MouseReasonable (pi, flags, dx, dy)) return FALSE; if (km->stage == MouseWorking) KdEnqueuePointerEvent (pi, flags, dx, dy, 0); return TRUE; }