xserver-multidpi/hw/kdrive/linux/ts.c
Marc Aurele La France 367cab99ec 721. PCI chip ID updates to ATI driver (Marc La France).
720. Fix i810 driver for -probe and -configure (Marc La France).
719. Change message when default modes are deleted (Marc La France).
718. Fix Xinerama byte swapping bug (Marc La France).
717. IA-64 and Alpha fixes for pswrap, Mesa, DRI, Xpm, libX11, Xt, Xaw,
    Xmu, dps, Type1 fonts, cfb24, most output drivers, ELF loader, ramdac
    module, xf4bpp and xf86cfg (Marc La France).
716. Improve IA-64 support by removing a plethora of 32-bit'isms (Marc La
    France).
715. Default HasLinuxDoc to NO (Marc La France).
ident lines and warning fixes.
2000-09-26 15:57:04 +00:00

105 lines
2.5 KiB
C

/*
* $XFree86$
*
* Derived from ps2.c by Jim Gettys
*
* Copyright © 1999 Keith Packard
* Copyright © 2000 Compaq Computer Corporation
*
* 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 Keith Packard or Compaq not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. Keith Packard and Compaq makes no
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
*
* KEITH PACKARD AND COMPAQ DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
* IN NO EVENT SHALL KEITH PACKARD 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.
*/
#define NEED_EVENTS
#include "X.h"
#include "Xproto.h"
#include "inputstr.h"
#include "scrnintstr.h"
#include "kdrive.h"
#include "Xpoll.h"
#include <sys/ioctl.h>
#include <linux/h3600_ts.h> /* touch screen events */
void
TsRead (int tsPort)
{
TS_EVENT event;
long buf[3];
int n;
long pressure;
long x, y;
unsigned long flags;
unsigned long buttons;
n = Ps2ReadBytes (tsPort, (char *) &event,
sizeof (event), sizeof (event));
if (n == sizeof (event))
{
if (event.pressure)
{
flags = KD_BUTTON_1;
x = event.x;
y = event.y;
}
else {
flags = KD_MOUSE_DELTA;
x = 0;
y = 0;
}
KdEnqueueMouseEvent (flags, x, y);
}
}
char *TsNames[] = {
"/dev/ts",
"/dev/h3600_ts" /* temporary name; note this code can try
to open more than one device */
};
#define NUM_TS_NAMES (sizeof (TsNames) / sizeof (TsNames[0]))
int
TsInit (void)
{
int i;
int TsPort;
for (i = 0; i < NUM_TS_NAMES; i++)
{
TsPort = open (TsNames[i], 0);
if (TsPort >= 0)
return TsPort;
}
perror("Touch screen not found.\n");
exit (1);
}
void
TsFini (int tsPort)
{
if (tsPort >= 0)
close (tsPort);
}
KdTsFuncs TsFuncs = {
TsInit,
TsRead,
TsFini
};