95a46c5577
Signed-off-by: Nico Schottelius <nico@ikn.schottelius.org>
143 lines
3.8 KiB
Text
143 lines
3.8 KiB
Text
--- ../original-gpm-1.19.2/mice.c Tue Mar 7 15:10:00 2000
|
||
+++ mice.c Wed Jun 14 12:36:42 2000
|
||
@@ -305,7 +305,6 @@
|
||
return 0;
|
||
}
|
||
|
||
-
|
||
/* Thu Jan 28 20:54:47 MET 1999 hof@hof-berlin.de SummaSketch reportformat */
|
||
static int R_summa(Gpm_Event *state, int fd)
|
||
{
|
||
@@ -332,7 +331,55 @@
|
||
return write(fd,buffer,5);
|
||
}
|
||
|
||
+/* Suvil Penbrush Professional tablet support absolute mode*/
|
||
+/* Summagraphics MM-Series format*/
|
||
+/* (Grzegorz Adam Hankiewicz) gradha@iname.com Wed Jun 14 11:32:27 CEST 2000 */
|
||
+int suvilmaxx,suvilmaxy;
|
||
+static int M_suvil (Gpm_Event *state, unsigned char *data)
|
||
+{
|
||
+ int x, y;
|
||
+
|
||
+ x = data[2] * 128 + data[1];
|
||
+ y = data[4] * 128 + data[3];
|
||
+
|
||
+ if (x >= suvilmaxx) x = suvilmaxx;
|
||
+ if (y >= suvilmaxy) y = suvilmaxy;
|
||
+
|
||
+ state->x = x * win.ws_col / suvilmaxx;
|
||
+ state->y = 1 + y * win.ws_row / suvilmaxy;
|
||
+
|
||
+ realposx = x * REALPOS_MAX / suvilmaxx;
|
||
+ realposy = y * REALPOS_MAX / suvilmaxy;
|
||
+
|
||
+ state->buttons =
|
||
+ !!(data[0]&1) * GPM_B_LEFT +
|
||
+ !!(data[0]&2) * GPM_B_RIGHT +
|
||
+ !!(data[0]&4) * GPM_B_MIDDLE;
|
||
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+/* Wed Jun 14 11:32:27 CEST 2000 gradha@iname.com */
|
||
+static int R_suvil(Gpm_Event *state, int fd)
|
||
+{
|
||
+ signed char buffer[5];
|
||
+ static int x, y;
|
||
+
|
||
+ buffer[0] = 0x98 + ((state->buttons & GPM_B_LEFT) > 0 ? 1:0) +
|
||
+ ((state->buttons & GPM_B_MIDDLE) > 0 ? 2:0) +
|
||
+ ((state->buttons & GPM_B_RIGHT) > 0 ? 3:0);
|
||
+
|
||
+ x = realposx * suvilmaxx / REALPOS_MAX ; y = realposy;
|
||
+
|
||
+ buffer[1] = x & 0x7f;
|
||
+ buffer[2] = (x >> 7) & 0x7f;
|
||
+ buffer[3] = y & 0x7f;
|
||
+ buffer[4] = (y >> 7) & 0x7f;
|
||
+
|
||
+
|
||
+
|
||
+ return write (fd, buffer, 5);
|
||
+}
|
||
|
||
/* 'Genitizer' (kw@dtek.chalmers.se 11/12/97) */
|
||
static int M_geni(Gpm_Event *state, unsigned char *data)
|
||
@@ -1768,6 +1815,57 @@
|
||
return type;
|
||
}
|
||
|
||
+static Gpm_Type *I_suvil(int fd, unsigned short flags,
|
||
+ struct Gpm_Type *type, int argc, char **argv)
|
||
+{
|
||
+ char byte;
|
||
+ char config[5];
|
||
+
|
||
+ #define SUVIL_SP66 0x06
|
||
+
|
||
+ write (fd, 0, 1); /* Reset */
|
||
+ usleep (400000); /* wait */
|
||
+ setspeed (fd, 1200, 1200, 1, B1200|CS7|CREAD|CLOCAL|HUPCL|PARENB|PARODD);
|
||
+ write (fd, 0, 1); /* Reset */
|
||
+ usleep (400000); /* wait */
|
||
+
|
||
+ /* First try setting tablet to tablet mode */
|
||
+ write (fd, "X", 1);
|
||
+ usleep (3000);
|
||
+
|
||
+ /* Now set stablet speed to 9600 */
|
||
+ setspeed (fd, 1200, 9600, 1, B9600|CS8|CREAD|CLOCAL|HUPCL|PARENB|PARODD);
|
||
+
|
||
+ /* Set tablet to not report coordinates and ask model */
|
||
+ write (fd, "D?", 2);
|
||
+ usleep (3000);
|
||
+ read (fd, &byte, 1);
|
||
+
|
||
+ switch (byte)
|
||
+ {
|
||
+ case 'S':
|
||
+ case SUVIL_SP66:
|
||
+ byte = SUVIL_SP66;
|
||
+ /* Set upper left origin and read maximum resolution range */
|
||
+ write (fd, "ba", 2);
|
||
+ read (fd, config, 5);
|
||
+
|
||
+ suvilmaxx = config[2]*128+config[1];
|
||
+ suvilmaxy = config[4]*128+config[3];
|
||
+
|
||
+ /* Finally set tablet to report absolute coordinates in stream mode */
|
||
+ write (fd, "I!@", 3);
|
||
+ break;
|
||
+
|
||
+ default:
|
||
+ /* Don't support this model */
|
||
+ return NULL;
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ return type;
|
||
+}
|
||
+
|
||
static Gpm_Type *I_mtouch(int fd, unsigned short flags,
|
||
struct Gpm_Type *type, int argc, char **argv)
|
||
{
|
||
@@ -2043,6 +2141,9 @@
|
||
"wizardpad", M_wp, I_wp, STD_FLG,
|
||
{0xFA, 0x42, 0x00, 0x00}, 10, 1, 0, 1, 0},
|
||
|
||
+ {"suvil", "Suvil Penbrush Professional (sp-66)", "", M_suvil, I_suvil, STD_FLG,
|
||
+ {0x80, 0x80, 0x00, 0x00}, 5, 1, 0, 1, R_suvil},
|
||
+
|
||
{"", "",
|
||
"", NULL, NULL, 0,
|
||
{0x00, 0x00, 0x00, 0x00}, 0, 0, 0, 0, 0}
|
||
@@ -2068,7 +2169,7 @@
|
||
}
|
||
|
||
|
||
-
|
||
+
|
||
/*
|
||
* Use 4 as indent-level. It used to be 2, but new stuff will be inserted
|
||
* using 4.
|