diff options
author | Tomas Chvatal <scarabeus@gentoo.org> | 2010-01-23 19:43:30 +0000 |
---|---|---|
committer | Tomas Chvatal <scarabeus@gentoo.org> | 2010-01-23 19:43:30 +0000 |
commit | 7b4d76940730a9357341d6d79bab31f12fbb5651 (patch) | |
tree | 040a4ba331d48f2001c9df3e4e4169169e3210fd /x11-drivers/xf86-input-fpit/files | |
parent | rm (diff) | |
download | gentoo-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')
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 */ |