1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
---
configure |38107 -----------------------------------------------------------
configure.ac | 2 -
hw/kdrive/linux/tslib.c | 68 ++++++++++++++++++++++++++----------------------
2 files changed, 39 insertions(+), 31 deletions(-)
Index: xorg-server-1.1.99.3/configure.ac
===================================================================
--- xorg-server-1.1.99.3.orig/configure.ac 2007-01-30 00:22:41.000000000 +0000
+++ xorg-server-1.1.99.3/configure.ac 2007-01-30 00:22:41.000000000 +0000
@@ -717,7 +717,7 @@ fi
if test "x$XCALIBRATE" = xyes && test "$KDRIVE" = yes; then
AC_DEFINE(XCALIBRATE, 1, [Build XCalibrate extension])
- REQUIRED_MODULES="$REQUIRED_MODULES xcalibrateproto"
+ REQUIRED_MODULES="$REQUIRED_MODULES xcalibrateext"
else
XCALIBRATE=no
fi
Index: xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c
===================================================================
--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/tslib.c 2007-01-30 00:44:13.000000000 +0000
+++ xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c 2007-01-30 21:55:52.000000000 +0000
@@ -47,6 +47,10 @@
#define TSLIB_QUEUE_SIZE 3
+/* For XCalibrate extension */
+void (*tslib_raw_event_hook)(int x, int y, int pressure, void *closure);
+void *tslib_raw_event_closure;
+
struct TslibPrivate {
int fd;
int lastx, lasty;
@@ -76,6 +80,19 @@ TsRead (int fd, void *closure)
unsigned long flags = 0;
int discard = 0;
+ if (tslib_raw_event_hook)
+ {
+ /* XCalibrate Ext */
+ if (ts_read_raw(private->tsDev, &event, 1) == 1)
+ {
+ tslib_raw_event_hook (event.x,
+ event.y,
+ event.pressure,
+ tslib_raw_event_closure);
+ }
+ return;
+ }
+
if (!private->tsDev) {
DebugF("[tslib] EXTREME BADNESS: TsRead called while tsDev is null!\n");
return;
@@ -322,14 +339,14 @@ TsRead (int fd, void *closure)
}
}
-/* must always be NULL-terminated. */
-char *valid_ts_names[] = {
- "ADS784x Touchscreen",
- "omap-ts",
- "TSC2301 touchscreen",
- NULL
+static char *TsNames[] = {
+ NULL, /* set via TSLIB_TSDEVICE */
+ "/dev/ts",
+ "/dev/touchscreen/0",
};
+#define NUM_TS_NAMES (sizeof (TsNames) / sizeof (TsNames[0]))
+
#define TS_NAME_SIZE 32
static Status
@@ -383,11 +400,10 @@ TslibDisable (KdPointerInfo *pi)
private->tsDev = NULL;
}
-
static Status
TslibInit (KdPointerInfo *pi)
{
- int fd = 0, i = 0;
+ int fd = 0, i = 0, j = 0;
char devpath[PATH_MAX], devname[TS_NAME_SIZE];
DIR *inputdir = NULL;
struct dirent *inputent = NULL;
@@ -397,33 +413,25 @@ TslibInit (KdPointerInfo *pi)
return !Success;
if (!pi->path || strcmp(pi->path, "auto") == 0) {
- if (!(inputdir = opendir("/dev/input"))) {
- ErrorF("[tslib/TslibInit]: couldn't open /dev/input!\n");
- return BadMatch;
- }
- while ((inputent = readdir(inputdir))) {
- if (strncmp(inputent->d_name, "event", 5) != 0)
- continue;
+ if ((TsNames[0] = getenv("TSLIB_TSDEVICE")) == NULL)
+ j++;
+
+ for (i = j; i < NUM_TS_NAMES; i++)
+ {
+ struct tsdev *tsDev;
- snprintf(devpath, PATH_MAX, "/dev/input/%s", inputent->d_name);
- fd = open(devpath, O_RDWR);
+ if(!(tsDev = ts_open(TsNames[i], 0)))
+ continue;
- if (!ioctl(fd, EVIOCGNAME(sizeof(devname)), devname)) {
- close(fd);
+ if (ts_config(tsDev))
continue;
- }
- close(fd);
- for (i = 0; valid_ts_names[i]; i++) {
- if (strcmp(devname, valid_ts_names[i]) == 0) {
- pi->path = KdSaveString(devpath);
- break;
- }
- }
- }
-
- closedir(inputdir);
+ ts_close(tsDev);
+
+ pi->path = KdSaveString(TsNames[i]);
+ break;
+ }
}
if (!pi->path || strcmp(pi->path, "auto") == 0) {
|