--- xc_335/programs/Xserver/hw/xfree86/common/xf86Summa.c Thu Jul 29 11:22:49 1999 +++ xc/programs/Xserver/hw/xfree86/common/xf86Summa.c Tue Oct 19 01:01:27 1999 @@ -93,6 +93,7 @@ #define ABSOLUTE_FLAG 1 #define STYLUS_FLAG 2 #define COMPATIBLE_FLAG 4 +#define EASYPEN_FLAG 8 typedef struct { @@ -161,10 +162,12 @@ #define PUCK 1 #define STYLUS 2 +#define EASYPEN 3 static SymTabRec SumPointTabRec[] = { {PUCK, "puck"}, {STYLUS, "stylus"}, + {EASYPEN, "easypen"}, {-1, ""} }; @@ -185,17 +188,23 @@ #define SS_ABSOLUTE 'F' /* Absolute mode */ #define SS_RELATIVE 'E' /* Relative mode */ -#define SS_UPPER_ORIGIN "b" /* Origin upper left */ +#define SS_UPPER_ORIGIN "b" /* Origin lower left */ +#define EP_UPPER_ORIGIN "c" /* Origin lower left */ +#define EP_GRID4 "p" /* Grid of 4 lpi */ +#define EP_254LPI "f" /* 254 lines per inch */ #define SS_500LPI "h" /* 500 lines per inch */ #define SS_PROMPT_MODE "B" /* Prompt mode */ +#define EP_PROMPT_MODE "D" /* EasyPen prompt mode */ #define SS_STREAM_MODE "@" /* Stream mode */ #define SS_INCREMENT 'I' /* Set increment */ #define SS_BINARY_FMT "zb" /* Binary reporting */ +#define EP_BINARY_FMT ":" /* EasyPen binary reporting */ #define SS_PROMPT "P" /* Prompt for current position */ static const char * ss_initstr = SS_TABID0 SS_UPPER_ORIGIN SS_BINARY_FMT SS_STREAM_MODE; +static const char * ep_initstr = SS_TABID0 EP_UPPER_ORIGIN EP_BINARY_FMT SS_STREAM_MODE; #define PHASING_BIT 0x80 #define PROXIMITY_BIT 0x40 @@ -298,6 +307,9 @@ case PUCK: priv->flags &= ~STYLUS_FLAG; break; + case EASYPEN: + priv->flags |= EASYPEN_FLAG; + break; default: xf86ConfigError("Illegal cursor type"); break; @@ -520,6 +532,9 @@ if (priv->flags & ABSOLUTE_FLAG) { x = (int)priv->sumData[1] + ((int)priv->sumData[2] << 7); y = (int)priv->sumData[3] + ((int)priv->sumData[4] << 7); + + /*if (priv->flags & EASYPEN_FLAG) */ + y = priv->sumMaxY - y; } else { x = priv->sumData[0] & XSIGN_BIT? priv->sumData[1]: -priv->sumData[1]; y = priv->sumData[0] & YSIGN_BIT? priv->sumData[2]: -priv->sumData[2]; @@ -734,6 +749,7 @@ /* Clear any pending input */ tcflush(local->fd, TCIFLUSH); + if ( ! (priv->flags & EASYPEN_FLAG)) { if ( ! (priv->flags & COMPATIBLE_FLAG)) { DBG(2, ErrorF("reading firmware ID\n")); if (!xf86SumWriteAndRead(local->fd, SS_FIRMID, buffer, 255, 1)) @@ -750,6 +766,10 @@ return !Success; priv->sumMaxX = (int)buffer[1] + ((int)buffer[2] << 7); priv->sumMaxY = (int)buffer[3] + ((int)buffer[4] << 7); + } else { + priv->sumMaxX = 2000; + priv->sumMaxY = 1500; + } if (xf86Verbose) ErrorF("%s SummaSketch tablet size is %d.%1dinx%d.%1din, %dx%d " @@ -807,8 +827,14 @@ } /* Sets up the tablet mode to increment, stream, and such */ - for (idx = 0; ss_initstr[idx]; idx++) { - buffer[idx] = ss_initstr[idx]; + if (priv->flags & EASYPEN_FLAG) { + for (idx = 0; ep_initstr[idx]; idx++) { + buffer[idx] = ep_initstr[idx]; + } + } else { + for (idx = 0; ss_initstr[idx]; idx++) { + buffer[idx] = ss_initstr[idx]; + } } buffer[idx++] = SS_INCREMENT; buffer[idx++] = 32 + priv->sumInc;