Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * Interface to raw PS/2 aux port.
 * Used by user-level mouse daemon.
 */

#include "u.h"
#include "../port/lib.h"
#include "mem.h"
#include "dat.h"
#include "fns.h"
#include "../port/error.h"
#include "io.h"

#define Image   IMAGE
#include <draw.h>
#include <memdraw.h>
#include <cursor.h>
#include "screen.h"

/*
 * BUG: we ignore shift here.
 * we need a more general solution,
 * one that will also work for serial mice.
 */
Queue *psauxq;

static void
psauxputc(int c, int)
{
        uchar uc;

        uc = c;
        qproduce(psauxq, &uc, 1);
}

static long
psauxread(Chan*, void *a, long n, vlong)
{
        return qread(psauxq, a, n);
}

static long
psauxwrite(Chan*, void *a, long n, vlong)
{
        return i8042auxcmds(a, n);
}

void
psauxlink(void)
{
        psauxq = qopen(1024, 0, 0, 0);
        if(psauxq == nil)
                panic("psauxlink");
        qnoblock(psauxq, 1);
        i8042auxenable(psauxputc);
        addarchfile("psaux", DMEXCL|0660, psauxread, psauxwrite);
}