summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Chvatal <scarabeus@gentoo.org>2010-01-23 19:43:30 +0000
committerTomas Chvatal <scarabeus@gentoo.org>2010-01-23 19:43:30 +0000
commit7b4d76940730a9357341d6d79bab31f12fbb5651 (patch)
tree040a4ba331d48f2001c9df3e4e4169169e3210fd /x11-drivers/xf86-input-fpit/files
parentrm (diff)
downloadgentoo-2-7b4d76940730a9357341d6d79bab31f12fbb5651.tar.gz
gentoo-2-7b4d76940730a9357341d6d79bab31f12fbb5651.tar.bz2
gentoo-2-7b4d76940730a9357341d6d79bab31f12fbb5651.zip
rm
(Portage version: 2.2_rc61/cvs/Linux x86_64)
Diffstat (limited to 'x11-drivers/xf86-input-fpit/files')
-rw-r--r--x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update1.diff400
-rw-r--r--x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update2.diff30
-rw-r--r--x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update3.diff355
3 files changed, 0 insertions, 785 deletions
diff --git a/x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update1.diff b/x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update1.diff
deleted file mode 100644
index 81ef3798f16a..000000000000
--- a/x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update1.diff
+++ /dev/null
@@ -1,400 +0,0 @@
-commit 4b06c8f70e8b1d6cfaeb41e1584f9efcfef83bb0
-Author: Justin Blanchard <justinb04@aim.com>
-Date: Tue Jan 30 20:12:07 2007 -0500
-
- Updates from Justin Blanchard - patch 1
-
- * Make the docs reflect more accurately what the code actually does.
- * Update the docs: remove material specific to XFree86 3.x/4.0. Re-organize to
- reflect the wider variety of machines that use this device. Change the link to
- linuxslate.com. Expand troubleshooting section.
- * Code cleanup: assorted trivial changes.
-
-diff --git a/man/fpit.man b/man/fpit.man
-index fba0e6f..4964dbe 100644
---- a/man/fpit.man
-+++ b/man/fpit.man
-@@ -23,11 +23,15 @@ driver functions as a pointer input devi
- X server's core pointer.
- .SH SUPPORTED HARDWARE
- This driver supports the touchscreen of the Stylistic LT and (with
--special options) of the Stylistic 500, 1000 and 2300.
-+special options) of the Stylistic 500, 1000, 1200, 2300, and 3400.
-+Modern FinePoint MP800 devices will also work with this driver.
-
--Under Linux the Fujitsus serial port is not, by default, detected.
--Therefore the following must be added to one of your start-up scripts.
--(Either one of the X scripts, or to rc.local or similar).
-+Under Linux the Fujitsu's serial port is not, by default, detected.
-+Therefore the port must be configured manually as described in the
-+accompanying readme.txt file.
-+
-+For example, add the following to your startup scripts for Stylistic xx00
-+devices:
-
- .TP 4
- .B setserial /dev/ttyS3 autoconfig
-@@ -70,12 +74,12 @@ Same as for X axis, but for Y axis.
- Invert the specified axis.
- .TP 4
- .B Option \fI"SwapXY"\fP
--Swap the X and Y axis.
-+Swap the X and Y axis (after inversions).
- .TP 4
- .B Option \fI"Rotate"\fP \fI"CW"\fP
- .B Option \fI"Rotate"\fP \fI"CWW"\fP
- Manipulate the invert and swap options to match screen
--rotations.
-+rotations. (Will behave strangely if combined with invert or swap options.)
- .TP 4
- .B Option \fI"DeviceName"\fP \fI"name"\fP
- .B Option \fI"DeviceName"\fP \fI"name"\fP
-@@ -92,7 +96,7 @@ enabled for any other value.
- .B Option \fI"DebugLevel"\fP \fInumber \fP
- sets the level of debugging info reported.
- .TP 4
--.B Option \fI"BaudRate"\fP \fI"38400"\fP, \fI"19200"\fP or \fI"9600"\fP (default)
-+.B Option \fI"BaudRate"\fP \fI"38400"\fP, \fI"19200"\fP (default) or \fI"9600"\fP
- changes the serial link speed.
- .TP 4
- .B Option \fI"Passive"\fP
-diff --git a/readme.txt b/readme.txt
-index fd0990c..075c52e 100644
---- a/readme.txt
-+++ b/readme.txt
-@@ -1,15 +1,8 @@
- xf86Fpit.c
- (and associated files).
-
--Documentation updated by John Apfelbaum, linuxslate.com Oct 2001
--
--*** P L E A S E N O T E ***
--* Due to a Hardrive failure, the version of this driver that was previously
--* on the linuxslate.com website was lost. This is a version came from a
--* directory on my development system that was marked "Works", and I belive it
--* to be the latest version I worked on (about a year ago), but I have not had
--* time to build from this source and verify this driver.
--***
-+Last updated Jan 2007
-+This information applies to version 1.1.0 of this driver.
-
- Supported Hardware:
-
-@@ -19,6 +12,8 @@ Supported Hardware:
- Fujistu Stylistic 1000 (Should Work)
- Fujistu Stylistic 1200 (Should Work)
- Fujistu Stylistic 2300 (Should Work)
-+ Fujitsu Stylistic 3400 (and possibly other passive-pen systems)
-+ FinePoint MP800
-
- History and Contributors:
-
-@@ -30,9 +25,11 @@ History and Contributors:
- project into the XFree86 4.0.2 Elographics driver by Patrick Lecoanet.
- - John Apfelbaum continuted the work to produce a working XFree86 4.0.x driver for the
- Stylistic 1200.
--- David Clay added support for Stylistic 3400 passive pen.
-+- David Clay added support for Stylistic 3400 passive pen, and possibly
-+ others. (Also fixed processing of all packets, and enabled right mouse button.)
-
--Please visit http://linuxslate.com for the latest information.
-+Please visit http://webcvs.freedesktop.org/xorg/driver/xf86-input-fpit/ for the
-+latest version of this driver.
-
- License:
-
-@@ -52,73 +49,53 @@ Please visit http://XFree86.org for lice
-
- Installation:
-
--THIS RELEASE IS FOR XFree86 Version 4.0.2. Hopefully it will also work
--with other Version 4 systems. The source is written so that hopefully
--it can be compiled under 3.3.6 - THIS HAS NOT BEEN TESTED (yet).
--
--Copied from original xf86fpit.c readme:
--
- 1. Install and configure Linux w/o consideration of the digitizer tablet.
- 2. Get X working the way you want it.
--3. Add or Change your appropriate startup scripts to include:
-+3. Set up a serial device to be initialized at startup.
-+ Modify /etc/serial.conf if your distribution uses it. Otherwise
-+ add or modify your appropriate startup scripts to include:
-
- setserial /dev/ttyS3 autoconfig
--setserial /dev/ttyS3 IRQ 15 baud_base 115200
--(Some models may also have to specify: port 0xfce8)
-+setserial /dev/ttyS3 port ??? IRQ ?? baud_base 115200 [uart 16450]
-
--
--New/Different for Ver 4.0.2
-+The uart setting may be necessary for the device to work.
-+See below for appropriate port/IRQ values.
-
- 4. Copy fpit_drv.o to /usr/X11R6/lib/modules/input
-
--5. Add the following to your XF86Config(-4) file:
-+5. Add the following to your X config file (XF86Config/XF86Config-4/xorg.conf)
-
- Section "InputDevice"
- Identifier "mouse0"
- Driver "fpit"
- Option "Device" "/dev/ttyS3"
-+ # These may need tweaking; see below.
- Option "BaudRate" "19200"
- Option "MaximumXPosition" "6250"
- Option "MaximumYPosition" "4950"
- Option "MinimumXPosition" "130"
- Option "MinimumYPosition" "0"
- Option "InvertY"
-+ # For a passive pen, e.g. Stylistic 3400
-+ Option "Passive"
- EndSection
-
- 6. Remember to add this Input Device to the server description (Near the end of the file.)
-
- 7. Start or restart X.
-
--8. If required adjust the Min/Max X/Y positions so that the pointer
-+8. If required adjust the baud rate and Min/Max X/Y positions so that the pointer
- tracks the pen correctly.
-
-+For Fujitsu Stylistic xx00 models, try IRQ 15, with port either unspecified
-+ or set to 0xfce8.
-
--New for Ver 4.5.0
--
-- * supports Stylistic 3400 (and possibly other passive-pen systems)
-- * Fixed processing of all packets
-- * Fixed hover-mode pointer movement
-- * Added Passive parameter for passive displays
-- * Added switch 3 for "right" mouse button
--
--Try this serial configuration for the 3400:
-+For Fujitsu Stylistic 3400 models, try IRQ 4 and port 0xfd68.
-+ Recommended X config settings are BaudRate 9600, Min X/Y 0, MaxX 4070, MaxY 4020.
-
--setserial /dev/ttyS3 autoconfig
--setserial /dev/ttyS3 uart 16450 irq 5 port 0xfd68
--
--Try this config for the 3400:
--Section "InputDevice"
-- Identifier "mouse0"
-- Driver "fpit"
-- Option "Device" "/dev/ttyS3"
-- Option "BaudRate" "9600"
-- Option "Passive"
-- Option "MaximumXPosition" "4070"
-- Option "MaximumYPosition" "4020"
-- Option "MinimumXPosition" "0"
-- Option "MinimumYPosition" "0"
-- Option "SendCoreEvents"
--EndSection
-+In general you may wish to consult /proc/ioports or /sys/devices/pnp0/*
-+(under Linux 2.6) for serial information. BaudRate should generally be 9600,
-+19200, or 38400.
-
-
- Hints if you are having problems (Thanks to Aron Hsiao):
-@@ -135,6 +112,8 @@ This should be re-stating the defaults,
- to be an XFree86 4.x bug.
-
- Problem 2: X Server crash during GUI startup (Particularly Gnome).
-+ Or: programs using high-resolution pen tracking via XInput
-+ don't work.
-
- Solution: You must have a regular mouse defined as the default pointer
- even if no mouse is used. During startup, Gnome attempts to
-@@ -142,6 +121,10 @@ Solution: You must have a regular mous
- pendrivers are absolute pointers, and acceleration is meaningless,
- they do not take well to attempts to set it :-)
-
-+ Additionally, setting the tablet as a core pointer prevents X
-+ from sending XInput events. This lowers the pen-tracking
-+ resolution available to programs by 1 or 2 orders of magnitude!
-+
- Problem 3: Jittery cursor and undesired mouse clicks (both buttons),
- particuarly on the Stylistic 1200, and particuarly after the
- system has warmed up.
-@@ -152,6 +135,9 @@ Solution: (Not really a solution) This
- actively using it extends battery life, and keeps the system from
- getting too hot.
-
-+ If cursor movement seems completely random and mouse clicks seem
-+ inexplicable, your baud rate may be set incorrectly.
-+
- Bugs and Needed Work:
-
- (See above)
-diff --git a/src/xf86Fpit.c b/src/xf86Fpit.c
-index b7a9a60..d0b9fe3 100644
---- a/src/xf86Fpit.c
-+++ b/src/xf86Fpit.c
-@@ -63,8 +63,6 @@
-
- # include <misc.h>
- # include <xf86.h>
--# if !defined(DGUX)
--# endif
- # include <xf86_OSproc.h>
- # include <xf86Xinput.h>
- # include <exevents.h>
-@@ -79,7 +77,6 @@
- *
- ***************************************************************************
- */
--#define FPIT_LINK_SPEED B19200 /* 19200 Baud */
- #define FPIT_PORT "/dev/ttyS3"
-
- #define FPIT_MAX_X 4100
-@@ -87,19 +84,6 @@
- #define FPIT_MAX_Y 4100
- #define FPIT_MIN_Y 0
-
--#define PHASING_BIT 0x80
--#define PROXIMITY_BIT 0x20 /* DMC: This was 0x40 but the chart says its bit 5 which is 0x20 */
--/*#define TABID_BIT 0x20 */
--#define XSIGN_BIT 0x10
--#define YSIGN_BIT 0x08
--#define BUTTON_BITS 0x07
--#define COORD_BITS 0x7f
--
--/* DMC: Added these */
--#define SW1 0x01
--#define SW2 0x02
--#define SW3 0x04
--
-
- /*
- ***************************************************************************
-@@ -123,8 +107,6 @@ typedef struct {
- int screen_width;
- int screen_height;
- int screen_no;
-- int fpitInc; /* increment between transmits */
-- int fpitButTrans; /* button translation flags */
- int fpitOldX; /* previous X position */
- int fpitOldY; /* previous Y position */
- int fpitOldProximity; /* previous proximity */
-@@ -135,10 +117,7 @@ typedef struct {
- int fpitMaxY; /* max Y value */
- int fpitInvX; /* Invert X axis */
- int fpitInvY; /* Invert Y axis */
-- int fpitRes; /* resolution in lines per inch */
-- int flags; /* various flags */
- int fpitIndex; /* number of bytes read */
-- int fpitBaud; /* Baud rate of device */
- unsigned char fpitData[BUFFER_SIZE]; /* data read on the device */
- int fpitSwapXY; /* swap X and Y values */
- int fpitPassive; /* translate passive buttons */
-@@ -209,37 +188,45 @@ static void xf86FpitReadInput(LocalDevic
-
- priv->fpitIndex += len;
-
-- /* process each packet in this block */
-- for (loop=0;loop+FPIT_PACKET_SIZE<=priv->fpitIndex;loop++) {
-- if (!(priv->fpitData[loop] & 0x80)) continue; /* we don't have a start bit yet */
-
-+#define PHASING_BIT 0x80
-+#define PROXIMITY_BIT 0x20
-+#define BUTTON_BITS 0x07
-+#define SW1 0x01
-+#define SW2 0x02
-+#define SW3 0x04
-+
-+ /* process each packet in this block */
- /* Format of 5 bytes data packet for Fpit Tablets
- Byte 1
-- bit 7 Phasing bit always 1
-- bit 6 Switch status change
-- bit 5 Proximity
-- bit 4 Always 0
-- bit 3 Test data
-- bit 2 Sw3 (2nd side sw)
-- bit 1 Sw2 (1st side sw)
-- bit 0 Sw1 (Pen tip sw)
-+ bit 7 (0x80) Phasing bit always 1
-+ bit 6 (0x40) Switch status change
-+ bit 5 (0x20) Proximity
-+ bit 4 (0x10) Always 0
-+ bit 3 (0x08) Test data
-+ bits 2-0 (0x07) Buttons:
-+ bit 2 (0x04) Sw3 (2nd side sw)
-+ bit 1 (0x02) Sw2 (1st side sw)
-+ bit 0 (0x01) Sw1 (Pen tip sw)
-
- Byte 2
-- bit 7 Always 0
-- bits 6-0 = X6 - X0
-+ bit 7 (0x80) Always 0
-+ bits 6-0 (0x7f) X6 - X0
-
- Byte 3
-- bit 7 Always 0
-- bits 6-0 = X13 - X7
-+ bit 7 (0x80) Always 0
-+ bits 6-0 (0x7f) X13 - X7
-
- Byte 4
-- bit 7 Always 0
-- bits 6-0 = Y6 - Y0
-+ bit 7 (0x80) Always 0
-+ bits 6-0 (0x7f) Y6 - Y0
-
- Byte 5
-- bit 7 Always 0
-- bits 6-0 = Y13 - Y7
-+ bit 7 (0x80) Always 0
-+ bits 6-0 (0x7f) Y13 - Y7
- */
-+ for (loop=0;loop+FPIT_PACKET_SIZE<=priv->fpitIndex;loop++) {
-+ if (!(priv->fpitData[loop] & PHASING_BIT)) continue; /* we don't have a start bit yet */
-
- x = (int) (priv->fpitData[loop + 1] & 0x7f) + ((int) (priv->fpitData[loop + 2] & 0x7f) << 7);
- y = (int) (priv->fpitData[loop + 3] & 0x7f) + ((int) (priv->fpitData[loop + 4] & 0x7f) << 7);
-@@ -256,7 +243,7 @@ static void xf86FpitReadInput(LocalDevic
- xf86FpitConvert(local, 0, 2, x, y, 0, 0, 0, 0, &conv_x, &conv_y);
- xf86XInputSetScreen(local, priv->screen_no, conv_x, conv_y);
-
-- /* coordonates are ready we can send events */
-+ /* coordinates are ready we can send events */
-
- if (prox!=priv->fpitOldProximity) /* proximity changed */
- if (!is_core_pointer) xf86PostProximityEvent(device, prox, 0, 2, x, y);
-@@ -268,9 +255,7 @@ static void xf86FpitReadInput(LocalDevic
- /*
- For passive pen (Stylistic 3400, et al.):
- sw1 = 1 if pen is moving
-- sw1 = 0 if pen is not moving
-- sw2 = 0 if pen is contacting the pad
-- sw2 = 1 if pen was lifted from the pad
-+ sw2 = 1 if pen was lifted from the pad / isn't in contact
- sw3 = 1 if right mouse-button icon was chosen
- */
- /* convert the pen button bits to actual mouse buttons */
-@@ -378,7 +363,7 @@ static Bool xf86FpitControl(DeviceIntPtr
- * screen to fit one meter.
- */
- if (InitValuatorClassDeviceStruct(dev, 2, xf86GetMotionEvents, local->history_size, Absolute) == FALSE) {
-- ErrorF("Unable to allocate Elographics touchscreen ValuatorClassDeviceStruct\n");
-+ ErrorF("Unable to allocate Fpit touchscreen ValuatorClassDeviceStruct\n");
- return !Success;
- } else {
- InitValuatorAxisStruct(dev, 0, priv->fpitMinX, priv->fpitMaxX, 9500, 0 /* min_res */ ,
-@@ -542,13 +527,13 @@ static InputInfoPtr xf86FpitInit(InputDr
- xf86Msg(X_CONFIG, "FPIT device name: %s\n", local->name);
- priv->screen_no = xf86SetIntOption(local->options, "ScreenNo", 0);
- xf86Msg(X_CONFIG, "Fpit associated screen: %d\n", priv->screen_no);
-- priv->fpitMaxX = xf86SetIntOption(local->options, "MaximumXPosition", 4100);
-+ priv->fpitMaxX = xf86SetIntOption(local->options, "MaximumXPosition", FPIT_MAX_X);
- xf86Msg(X_CONFIG, "FPIT maximum x position: %d\n", priv->fpitMaxX);
-- priv->fpitMinX = xf86SetIntOption(local->options, "MinimumXPosition", 0);
-+ priv->fpitMinX = xf86SetIntOption(local->options, "MinimumXPosition", FPIT_MIN_X);
- xf86Msg(X_CONFIG, "FPIT minimum x position: %d\n", priv->fpitMinX);
-- priv->fpitMaxY = xf86SetIntOption(local->options, "MaximumYPosition", 4100);
-+ priv->fpitMaxY = xf86SetIntOption(local->options, "MaximumYPosition", FPIT_MAX_Y);
- xf86Msg(X_CONFIG, "FPIT maximum y position: %d\n", priv->fpitMaxY);
-- priv->fpitMinY = xf86SetIntOption(local->options, "MinimumYPosition", 0);
-+ priv->fpitMinY = xf86SetIntOption(local->options, "MinimumYPosition", FPIT_MIN_Y);
- xf86Msg(X_CONFIG, "FPIT minimum y position: %d\n", priv->fpitMinY);
- priv->fpitInvX = xf86SetBoolOption(local->options, "InvertX", 0);
- priv->fpitInvY = xf86SetBoolOption(local->options, "InvertY", 0);
diff --git a/x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update2.diff b/x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update2.diff
deleted file mode 100644
index 120db6e4b533..000000000000
--- a/x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update2.diff
+++ /dev/null
@@ -1,30 +0,0 @@
-commit 979c283a6ecb1ba718790a147b3e910a106cb473
-Author: Justin Blanchard <justinb04@aim.com>
-Date: Tue Jan 30 20:13:52 2007 -0500
-
- update from Justin Blanchard - part 2
-
- * Fix a bug that prevents active-pen users from right-clicking while hovering.
- * Bug was introduced with passive pen support; fix is simple and has been
- recommended in forums since Oct 2006
- (http://ubuntuforums.org/showpost.php?p=1620646&postcount=15).
- For some reason I don't see a bug report for the issue.
-
-diff --git a/src/xf86Fpit.c b/src/xf86Fpit.c
-index d0b9fe3..636d6d0 100644
---- a/src/xf86Fpit.c
-+++ b/src/xf86Fpit.c
-@@ -262,11 +262,9 @@ static void xf86FpitReadInput(LocalDevic
- if (buttons & SW2) buttons=0; /* the pen was lifted, so no buttons are pressed */
- else if (buttons & SW3) buttons=SW3; /* the "right mouse" button was pressed, so send down event */
- else if (prox) buttons=SW1; /* the "left mouse" button was pressed and we are not hovering, so send down event */
-- else buttons=0; /* We are in hover mode, so no buttons */
-- }
-- else { /* the active pen's buttons map directly to the mouse buttons */
-- if (!prox) buttons=0; /* We are in hover mode, so no buttons */
-+ else buttons=0; /* We are in hover mode, so not left-clicking. */
- }
-+ /* the active pen's buttons map directly to the mouse buttons. Right-click may happen even in hover mode. */
-
- /* DBG(2, ErrorF("%02d/%02d Prox=%d SW:%x Buttons:%x->%x (%d, %d)\n",
- loop,priv->fpitIndex,prox,priv->fpitData[loop]&BUTTON_BITS,priv->fpitOldButtons,buttons,x,y));*/
diff --git a/x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update3.diff b/x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update3.diff
deleted file mode 100644
index a232a9d8631e..000000000000
--- a/x11-drivers/xf86-input-fpit/files/xf86-input-fpit-update3.diff
+++ /dev/null
@@ -1,355 +0,0 @@
-commit cb6adfe32f929e57eedcab189e9f359fc9e970ab
-Author: Justin Blanchard <justinb04@aim.com>
-Date: Tue Jan 30 20:15:50 2007 -0500
-
- update from Justin Blanchard - part 3
-
- * Adds support for detecting/responding to screen resize and rotate events
- (i.e., fixing bug 3421 for FPIT users). This corrects both cursor-related and
- extended events.
- * The fix is disabled unless the user adds 'Option "TrackRandR"' to the
- InputDevice section. This is to avoid breaking setups where some nightmarish
- workaround was already in place.
- * Use of RRGetRotation may break driver under XFree86. If this is a problem I
- think xf86GetRotation can be used instead.
-
-diff --git a/man/fpit.man b/man/fpit.man
-index 4964dbe..1809d2b 100644
---- a/man/fpit.man
-+++ b/man/fpit.man
-@@ -80,6 +80,7 @@ Swap the X and Y axis (after inversions)
- .B Option \fI"Rotate"\fP \fI"CWW"\fP
- Manipulate the invert and swap options to match screen
- rotations. (Will behave strangely if combined with invert or swap options.)
-+New users should consider the \fI"TrackRandR"\fP option instead.
- .TP 4
- .B Option \fI"DeviceName"\fP \fI"name"\fP
- .B Option \fI"DeviceName"\fP \fI"name"\fP
-@@ -101,6 +102,9 @@ changes the serial link speed.
- .TP 4
- .B Option \fI"Passive"\fP
- decodes the passive pen.
-+.B Option \fI"TrackRandR"\fP
-+automatically keeps the cursor synchronized with the pen's position, even when
-+the screen is resized or rotated. (Recommended for tablet PC's.)
- .RE
-
- Example, for Stylistic LT setup is:
-@@ -109,6 +113,7 @@ Example, for Stylistic LT setup is:
- .BI " Identifier \*q" mouse0 \*q
- .B " Driver \*qfpit\*q"
- .BI " Option \*qDevice\*q \*q"/dev/ttyS3 \*q
-+.BI " # Option \*qTrackRandR\*q"
- .B EndSection
- .fi
-
-@@ -124,6 +129,7 @@ And for other Stylistic devices try:
- .BI " Option \*qMinimumXPosition\*q \*q"130 \*q
- .BI " Option \*qMinimumYPosition\*q \*q"0 \*q
- .BI " Option \*qInvertY\*q"
-+.BI " # Option \*qTrackRandR\*q"
- .B EndSection
- .fi
-
-@@ -140,6 +146,7 @@ For Stylistic 3400:
- .BI " Option \*qMinimumYPosition\*q \*q"0 \*q
- .BI " Option \*qPassive\*q"
- .BI " Option \*qSendCoreEvents\*q"
-+.BI " # Option \*qTrackRandR\*q"
- .B EndSection
- .fi
-
-diff --git a/readme.txt b/readme.txt
-index 075c52e..3e6051c 100644
---- a/readme.txt
-+++ b/readme.txt
-@@ -78,6 +78,9 @@ Section "InputDevice"
- Option "InvertY"
- # For a passive pen, e.g. Stylistic 3400
- Option "Passive"
-+ # To make the touchscreen respond automatically to
-+ # resolution changes and screen rotation:
-+ Option "TrackRandR"
- EndSection
-
- 6. Remember to add this Input Device to the server description (Near the end of the file.)
-@@ -142,8 +145,6 @@ Bugs and Needed Work:
-
- (See above)
-
--X rotation (Portrait mode is not supported). -- I plan to add this soon.
--
- Adjusting the constants in the XF86Config(-4) is teedious and requires
- multiple restarts of the X Window system. -- Somebody PLEASE write a
- calibration program !
-diff --git a/src/xf86Fpit.c b/src/xf86Fpit.c
-index 636d6d0..99d8bdb 100644
---- a/src/xf86Fpit.c
-+++ b/src/xf86Fpit.c
-@@ -66,6 +66,7 @@
- # include <xf86_OSproc.h>
- # include <xf86Xinput.h>
- # include <exevents.h>
-+# include <randrstr.h>
-
- # include <xf86Module.h>
-
-@@ -98,6 +99,20 @@
- /*
- ***************************************************************************
- *
-+ * Screen orientation descriptors.
-+ *
-+ ***************************************************************************
-+ */
-+
-+typedef enum {
-+ FPIT_INVERT_X = 0x01,
-+ FPIT_INVERT_Y = 0x02,
-+ FPIT_THEN_SWAP_XY = 0x04
-+} FpitOrientation;
-+
-+/*
-+ ***************************************************************************
-+ *
- * Device private records.
- *
- ***************************************************************************
-@@ -106,6 +121,7 @@ typedef struct {
- char *fpitDev; /* device file name */
- int screen_width;
- int screen_height;
-+ Rotation screen_rotation;
- int screen_no;
- int fpitOldX; /* previous X position */
- int fpitOldY; /* previous Y position */
-@@ -115,12 +131,14 @@ typedef struct {
- int fpitMinY; /* min Y value */
- int fpitMaxX; /* max X value */
- int fpitMaxY; /* max Y value */
-- int fpitInvX; /* Invert X axis */
-- int fpitInvY; /* Invert Y axis */
- int fpitIndex; /* number of bytes read */
- unsigned char fpitData[BUFFER_SIZE]; /* data read on the device */
-- int fpitSwapXY; /* swap X and Y values */
-+ FpitOrientation fpitBaseOrientation; /* read from X config */
-+ FpitOrientation fpitTotalOrientation; /* above + RandR */
- int fpitPassive; /* translate passive buttons */
-+ int fpitTrackRandR; /* check for, react to screen rotate/resize */
-+ /* XXX when this last option is unset, we provide "compatibly stupid"
-+ * behavior. */
- } FpitPrivateRec, *FpitPrivatePtr;
-
-
-@@ -139,21 +157,73 @@ typedef struct {
- static Bool xf86FpitConvert(LocalDevicePtr local, int first, int num, int v0, int v1, int v2, int v3, int v4, int v5, int *x, int *y)
- {
- FpitPrivatePtr priv = (FpitPrivatePtr) local->private;
-+ AxisInfoPtr axes = local->dev->valuator->axes;
- if (first != 0 || num != 2) {
- return FALSE;
- }
-
-- if (priv->fpitSwapXY != 0) {
-- *x = xf86ScaleAxis(v1, 0, priv->screen_width, priv->fpitMinY, priv->fpitMaxY);
-- *y = xf86ScaleAxis(v0, 0, priv->screen_height, priv->fpitMinX, priv->fpitMaxX);
-- } else {
-- *x = xf86ScaleAxis(v0, 0, priv->screen_width, priv->fpitMinX, priv->fpitMaxX);
-- *y = xf86ScaleAxis(v1, 0, priv->screen_height, priv->fpitMinY, priv->fpitMaxY);
-- }
-+ *x = xf86ScaleAxis(v0, 0, priv->screen_width, axes[0].min_value, axes[0].max_value);
-+ *y = xf86ScaleAxis(v1, 0, priv->screen_height, axes[1].min_value, axes[1].max_value);
-+
- return TRUE;
- }
-
- /*
-+ ***************************************************************************
-+ *
-+ * xf86FpitSetUpAxes --
-+ * Based on current screen resolution and, if RandR support is enabled,
-+ * current rotation state, set up the XInput axes and orientation info.
-+ *
-+ ***************************************************************************
-+ */
-+
-+static void xf86FpitSetUpAxes(DeviceIntPtr dev, FpitPrivatePtr priv)
-+{
-+ /*
-+ * Device reports motions on 2 axes in absolute coordinates.
-+ * Axes min and max values are reported in raw coordinates.
-+ * Resolution is computed roughly by the difference between
-+ * max and min values scaled from the approximate size of the
-+ * screen to fit one meter.
-+ */
-+ int quarter_turns;
-+
-+ priv->screen_width = screenInfo.screens[priv->screen_no]->width;
-+ priv->screen_height = screenInfo.screens[priv->screen_no]->height;
-+
-+ priv->fpitTotalOrientation = priv->fpitBaseOrientation;
-+ if (!priv->fpitTrackRandR)
-+ return;
-+
-+ /* now apply transforms specified by RandR:
-+ * slightly complicated because invertX/Y and swapXY don't commute. */
-+ priv->screen_rotation = RRGetRotation(screenInfo.screens[priv->screen_no]);
-+ quarter_turns = (
-+ (priv->screen_rotation & RR_Rotate_90 ? 1 : 0) +
-+ (priv->screen_rotation & RR_Rotate_180 ? 2 : 0) +
-+ (priv->screen_rotation & RR_Rotate_270 ? 3 : 0) ) % 4;
-+ if (quarter_turns / 2 != 0)
-+ priv->fpitTotalOrientation ^= FPIT_INVERT_X | FPIT_INVERT_Y;
-+ if (quarter_turns % 2 != 0) {
-+ priv->fpitTotalOrientation ^=
-+ (priv->fpitTotalOrientation & FPIT_THEN_SWAP_XY ? FPIT_INVERT_X : FPIT_INVERT_Y)
-+ | FPIT_THEN_SWAP_XY;
-+ }
-+
-+ if (priv->fpitTotalOrientation & FPIT_THEN_SWAP_XY) {
-+ InitValuatorAxisStruct(dev, 1, priv->fpitMinX, priv->fpitMaxX, 9500, 0 /* min_res */ ,
-+ 9500 /* max_res */ );
-+ InitValuatorAxisStruct(dev, 0, priv->fpitMinY, priv->fpitMaxY, 10500, 0 /* min_res */ ,
-+ 10500 /* max_res */ );
-+ } else {
-+ InitValuatorAxisStruct(dev, 0, priv->fpitMinX, priv->fpitMaxX, 9500, 0 /* min_res */ ,
-+ 9500 /* max_res */ );
-+ InitValuatorAxisStruct(dev, 1, priv->fpitMinY, priv->fpitMaxY, 10500, 0 /* min_res */ ,
-+ 10500 /* max_res */ );
-+ }
-+}
-+/*
- ** xf86FpitReadInput
- ** Reads from the Fpit and posts any new events to the server.
- */
-@@ -166,6 +236,13 @@ static void xf86FpitReadInput(LocalDevic
- DeviceIntPtr device;
- int conv_x, conv_y;
-
-+ if (priv->fpitTrackRandR && (
-+ priv->screen_width != screenInfo.screens[priv->screen_no]->width ||
-+ priv->screen_height != screenInfo.screens[priv->screen_no]->height ||
-+ priv->screen_rotation != RRGetRotation(screenInfo.screens[priv->screen_no])
-+ ))
-+ xf86FpitSetUpAxes(local->dev, priv);
-+
- do { /* keep reading blocks until there are no more */
-
- /* Read data into buffer */
-@@ -230,11 +307,15 @@ static void xf86FpitReadInput(LocalDevic
-
- x = (int) (priv->fpitData[loop + 1] & 0x7f) + ((int) (priv->fpitData[loop + 2] & 0x7f) << 7);
- y = (int) (priv->fpitData[loop + 3] & 0x7f) + ((int) (priv->fpitData[loop + 4] & 0x7f) << 7);
-- /* Add in any offsets */
-- if (priv->fpitInvX)
-+ /* Adjust to orientation */
-+ if (priv->fpitTotalOrientation & FPIT_INVERT_X)
- x = priv->fpitMaxX - x + priv->fpitMinX;
-- if (priv->fpitInvY)
-+ if (priv->fpitTotalOrientation & FPIT_INVERT_Y)
- y = priv->fpitMaxY - y + priv->fpitMinY;
-+ if (priv->fpitTotalOrientation & FPIT_THEN_SWAP_XY) {
-+ int z = x; x = y; y = z;
-+ }
-+
- prox = (priv->fpitData[loop] & PROXIMITY_BIT) ? 0 : 1;
- buttons = (priv->fpitData[loop] & BUTTON_BITS);
- device = local->dev;
-@@ -334,8 +415,6 @@ static Bool xf86FpitControl(DeviceIntPtr
- if (priv->screen_no >= screenInfo.numScreens || priv->screen_no < 0) {
- priv->screen_no = 0;
- }
-- priv->screen_width = screenInfo.screens[priv->screen_no]->width;
-- priv->screen_height = screenInfo.screens[priv->screen_no]->height;
- /*
- * Device reports button press for up to 3 buttons.
- */
-@@ -353,22 +432,11 @@ static Bool xf86FpitControl(DeviceIntPtr
- ErrorF("Unable to allocate PtrFeedBackClassDeviceStruct\n");
- }
-
-- /*
-- * Device reports motions on 2 axes in absolute coordinates.
-- * Axes min and max values are reported in raw coordinates.
-- * Resolution is computed roughly by the difference between
-- * max and min values scaled from the approximate size of the
-- * screen to fit one meter.
-- */
- if (InitValuatorClassDeviceStruct(dev, 2, xf86GetMotionEvents, local->history_size, Absolute) == FALSE) {
- ErrorF("Unable to allocate Fpit touchscreen ValuatorClassDeviceStruct\n");
- return !Success;
-- } else {
-- InitValuatorAxisStruct(dev, 0, priv->fpitMinX, priv->fpitMaxX, 9500, 0 /* min_res */ ,
-- 9500 /* max_res */ );
-- InitValuatorAxisStruct(dev, 1, priv->fpitMinY, priv->fpitMaxY, 10500, 0 /* min_res */ ,
-- 10500 /* max_res */ );
- }
-+ xf86FpitSetUpAxes(dev, priv);
-
- if (InitFocusClassDeviceStruct(dev) == FALSE) {
- ErrorF("Unable to allocate Fpit touchscreen FocusClassDeviceStruct\n");
-@@ -451,6 +519,7 @@ static LocalDevicePtr xf86FpitAllocate(I
- priv->screen_no = 0;
- priv->screen_width = -1;
- priv->screen_height = -1;
-+ priv->screen_rotation = RR_Rotate_0;
- priv->fpitMinX = FPIT_MIN_X;
- priv->fpitMaxX = FPIT_MAX_X;
- priv->fpitMinY = FPIT_MIN_Y;
-@@ -459,7 +528,6 @@ static LocalDevicePtr xf86FpitAllocate(I
- priv->fpitOldButtons = 0;
- priv->fpitOldProximity = 0;
- priv->fpitIndex = 0;
-- priv->fpitSwapXY = 0;
- priv->fpitPassive = 0;
- local->name = XI_TOUCHSCREEN;
- local->flags = 0 /* XI86_NO_OPEN_ON_INIT */ ;
-@@ -533,29 +601,33 @@ static InputInfoPtr xf86FpitInit(InputDr
- xf86Msg(X_CONFIG, "FPIT maximum y position: %d\n", priv->fpitMaxY);
- priv->fpitMinY = xf86SetIntOption(local->options, "MinimumYPosition", FPIT_MIN_Y);
- xf86Msg(X_CONFIG, "FPIT minimum y position: %d\n", priv->fpitMinY);
-- priv->fpitInvX = xf86SetBoolOption(local->options, "InvertX", 0);
-- priv->fpitInvY = xf86SetBoolOption(local->options, "InvertY", 0);
-- priv->fpitSwapXY = xf86SetBoolOption(local->options, "SwapXY", 0);
-+
-+ priv->fpitBaseOrientation = 0;
-+ if (xf86SetBoolOption(local->options, "InvertX", 0))
-+ priv->fpitBaseOrientation |= FPIT_INVERT_X;
-+ if (xf86SetBoolOption(local->options, "InvertY", 0))
-+ priv->fpitBaseOrientation |= FPIT_INVERT_Y;
-+ if (xf86SetBoolOption(local->options, "SwapXY", 0))
-+ priv->fpitBaseOrientation |= FPIT_THEN_SWAP_XY;
- priv->fpitPassive = xf86SetBoolOption(local->options, "Passive", 0);
-+ priv->fpitTrackRandR = xf86SetBoolOption(local->options, "TrackRandR", 0);
-+ /* XXX "Rotate" option provides compatibly stupid behavior. JEB. */
- str = xf86SetStrOption(local->options, "Rotate", 0);
-- if (!xf86NameCmp(str, "CW")) {
-- priv->fpitInvX = 1;
-- priv->fpitInvY = 1;
-- priv->fpitSwapXY = 1;
-- } else if (!xf86NameCmp(str, "CCW")) {
-- priv->fpitInvX = 0;
-- priv->fpitInvY = 0;
-- priv->fpitSwapXY = 1;
-- }
-- xf86Msg(X_CONFIG, "FPIT invert X axis: %s\n", priv->fpitInvX ? "Yes" : "No");
-- xf86Msg(X_CONFIG, "FPIT invert Y axis: %s\n", priv->fpitInvY ? "Yes" : "No");
-- xf86Msg(X_CONFIG, "FPIT swap X and Y axis: %s\n", priv->fpitSwapXY ? "Yes" : "No");
-+ if (!xf86NameCmp(str, "CW"))
-+ priv->fpitBaseOrientation |= FPIT_INVERT_X | FPIT_INVERT_Y | FPIT_THEN_SWAP_XY;
-+ else if (!xf86NameCmp(str, "CCW"))
-+ priv->fpitBaseOrientation |= FPIT_THEN_SWAP_XY;
-+ xf86Msg(X_CONFIG, "FPIT invert X axis: %s\n", priv->fpitBaseOrientation & FPIT_INVERT_X ? "Yes" : "No");
-+ xf86Msg(X_CONFIG, "FPIT invert Y axis: %s\n", priv->fpitBaseOrientation & FPIT_INVERT_Y ? "Yes" : "No");
-+ xf86Msg(X_CONFIG, "FPIT swap X and Y axis: %s\n", priv->fpitBaseOrientation & FPIT_THEN_SWAP_XY ? "Yes" : "No");
- xf86Msg(X_CONFIG, "FPIT Passive button mode: %s\n", priv->fpitPassive ? "Yes" : "No");
-+ xf86Msg(X_CONFIG, "FPIT RandR tracking: %s\n", priv->fpitTrackRandR ? "Yes" : "No");
- /* mark the device configured */
- local->flags |= XI86_CONFIGURED;
- return local;
- }
-
-+
- _X_EXPORT InputDriverRec FPIT = {
- 1, /* driver version */
- "fpit", /* driver name */