Beispiel #1
0
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;
}
Beispiel #2
0
/*
 * 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;
}
Beispiel #3
0
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;
}
Beispiel #4
0
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;
}
Beispiel #5
0
/*
 * 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;
}