summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpingc <pingc>2006-12-11 19:53:06 +0000
committerpingc <pingc>2006-12-11 19:53:06 +0000
commit84398848acc61f5fca46e0c3850f277546b8ff59 (patch)
tree0358aecce85f9de46b6b17fc6eca576d83612832
parenta4f118a610c3294ea1533bf2643bb89b2092707c (diff)
downloadxf86-input-wacom-dev-0_7_7-1.tar.gz
Incorporated Magnus Vigerlöf's patchdev-0_7_7-1dev-0.7.7-1
-rw-r--r--ChangeLog8
-rw-r--r--docs/docs.html161
-rw-r--r--src/2.6.13/Makefile.in6
-rw-r--r--src/2.6.14/Makefile.in8
-rw-r--r--src/2.6.16/wacom_wac.c7
-rwxr-xr-xsrc/include/Xwacom.h25
-rwxr-xr-xsrc/util/wacusb.c204
-rwxr-xr-xsrc/util/xsetwacom.c8
-rw-r--r--src/wacom.4x7
-rwxr-xr-xsrc/xdrv/wcmUSB.c18
-rwxr-xr-xsrc/xdrv/xf86Wacom.c43
11 files changed, 287 insertions, 208 deletions
diff --git a/ChangeLog b/ChangeLog
index b40280c..9b8cfe4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-12-11 Ping Cheng <pingc@wacom.com>
+ * Split wacom.c under 2.6.13 into 4 files
+ * Fixed an ExpressKeys report bug in wcmUSB.c
+ * Removed duplicated sync event in wacom_wac.c (Magnus Vigerlöf)
+
+2006-12-01 Ping Cheng <pingc@wacom.com>
+ * updated xsetwacom
+
2006-11-30 Ping Cheng <pingc@wacom.com>
* Fixed cursor relative out-prox issue
* Changed CursorProx option from 2 inputs into 1
diff --git a/docs/docs.html b/docs/docs.html
index 3058ad6..e3aa419 100644
--- a/docs/docs.html
+++ b/docs/docs.html
@@ -40,7 +40,7 @@
&nbsp;&nbsp;<a class="menu" href="http://sourceforge.net/projects/linuxwacom">Development</a>&nbsp;&nbsp; |
&nbsp;&nbsp;<a class="menu" href="http://linuxwacom.sourceforge.net/index.php/toc">TOC</a>&nbsp;&nbsp; |
&nbsp;&nbsp;<a class="menu" href="http://linuxwacom.sourceforge.net/index.php/all">All</a>&nbsp;&nbsp;
-</td><td class="menu" align="right">Nov 01, 2006</td></tr>
+</td><td class="menu" align="right">Dec 11, 2006</td></tr>
<tr><td colspan="2" bgcolor="#000066"><img src="docs_files/null.gif" height="4" width="1"></td></tr>
<tr><td colspan="2" bgcolor="#aaaaaa"><img src="docs_files/null.gif" height="2" width="1"></td></tr>
</tbody></table>
@@ -80,7 +80,20 @@ The </a><a href="#chg">ChangeLog</a> has a more complete list.
<br><br>
<table border="0" width="100%">
-<tbody><tr><td valign="top"><b>October 31, 2006</b> - Updated acinclude.m4 and wacom.c. label 0.7.6-2. </td></tr>
+<tbody><tr><td valign="top"><b>December 1, 2006</b> - Updated xsetwacom. </td></tr>
+<tr><td>&nbsp;</td></tr>
+<tr><td valign="top"><b>November 30, 2006</b> - Fixed cursor relative
+out-prox issue. Changed CursorProx option from 2 inputs into 1. Updated
+xsetwacom and wacom_drv. Split wacom.c under 2.6.11 into 4 files. label
+0.7.7 for testing. </td></tr>
+<tr><td>&nbsp;</td></tr>
+<tr><td valign="top"><b>November 21, 2006</b> - Updated web scripts
+(Magnus Vigerlöf). Removed serial number and device ID in 4th - 5th
+high bytes due to bug 1592814. label 0.7.6-3. </td></tr>
+<tr><td>&nbsp;</td></tr>
+<tr><td valign="top"><b>November 13, 2006</b> - Updated acinclude.m4 and configure.in (Mats Johannesson). Updated X driver for Xinerama setup. Removed option gimp. </td></tr>
+<tr><td>&nbsp;</td></tr>
+<tr><td valign="top"><b>October 31, 2006</b> - Updated acinclude.m4 and wacom.c. label 0.7.6-2. </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td valign="top"><b>October 24, 2006</b> - Fixed a relative mode
acceleration problem. Updated webpages, acinclude.m4, and configure.in.
@@ -107,57 +120,6 @@ page, wacom.4x. Updated wacdump. Fixed an I3 and Cintiq 21UX pad
out-prox bit (Martin Wawro). Applied TabletPC button XFree86 workaround
to Xorg. </td></tr>
<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>September 14, 2006</b> - Fixed a filter bug (Wolfgang Oertl, etc). Ready to release 0.7.5-4. </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>September 13, 2006</b> - Fixed a typo in 2.6.18/Makefile.in (Mats Johannesson). Ready to release 0.7.5-2. </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>September 12, 2006</b> - Updated Makefile.am
-for xdrv (Magnus Vigerlöf) Fixed a typo in 2.4.x/wacom.c (Magnus
-Vigerlöf) Cleaned initialization code for tablet unplug/plug </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>September 8, 2006</b> - Fixed Graphire 4
-pad/wheel bug. Unified support of USB hot plug/unplug with different
-tablets for both XFree86 and Xorg. Ready to release 0.7.5-1. </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>August 30, 2006</b> - Added Intuos3 4x6
-support. Updated acinclude.m4 and configure.in. Fixed a pad display
-issue in xidump.c and wacom_drv.o (Mats Johannesson). </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>August 24, 2006</b> - Added GetTabletID to
-"xsetwacom get" command for apps in X space to acquire USB tablet's ID.
-Added Rotate to "xsetwacom set" command to change tablet orentation
-(Patch 1170661 from Denis Auroux). Incorporated Andrew Zabolotny's
-patches. </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>August 22, 2006</b> - Updated acinclude.m4 scripts for kernel 2.6.18. Updated wacom.c for accurately report tablet buttons. </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>August 18, 2006</b> - Updated configure scripts and xidump.c. Support USB hot plug/unplug with different tablets. </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>August 10, 2006</b> - Backward tablet menu strip support. </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>August 7, 2006</b> - Created 3 new directories,
-xdrv, include, and util under src to store X driver, common headers,
-and utility programs separately. </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>August 3, 2006</b> - Increased MAX_SUPPRESS from 6 to 20 (Patch ID 1529268 from Wolfgang Oertl). Updated wacomcpl. </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>July 28, 2006</b> - Updated xsetwacom to avoid writing data to files from X driver (more work to be done). Updated wacomcpl accordingly. </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>July 19, 2006</b> - Modified the definition of
-wacom_features in wacom_wac.h. Modified newwacom.inc.php to get rid of
-a kernel warning (Magnus Vigerlöf). Added mouse and key combined event
-support in X driver (Andrew Zabolotny). </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>July 14, 2006</b> - Split wacom.c into
-wacom_sys.c and wacom_wac.c, where wacom_sys.c deals with system
-specific code and wacom-wac.c deals with wacom specific code. This work
-only applies to kernel 2.6.16 for this release. wacom.c split for other
-kernels will be considered in future releases. Add Wacom vendor id into
-hid_blacklist in hid-core.c, that is, all Wacom devices, existing and
-future, will be ignored by (usb)hid driver. </td></tr>
-<tr><td>&nbsp;</td></tr>
-<tr><td valign="top"><b>June 22, 2006</b> - Added more default Xlib and Xorg SDK searching pathes for x86_64 system. </td></tr>
-<tr><td>&nbsp;</td></tr>
</tbody></table>
<a name="faq">
</a></p><h1><a name="faq">2.0 - Frequently Asked Questions</a></h1>
@@ -215,12 +177,17 @@ work to varying degrees, so if you are running into trouble, send me email.
Also, if you are having trouble with the stable build, try the beta. Many
of the tools have been recently added and have not yet been moved to the
production release.</a></p>
+
+<p><a name="BUSTED">Note, tilt is only supported with protocol V
+tablets, which include Intuos series and Cintiq 21UX to date (Nov. 9,
+2006). Any other tablets don't have tilt no matter you have the tilt
+option in your xorg.conf or not.</a></p>
<a name="dl">
</a><h1><a name="dl">3.0 - Downloads</a></h1>
<h3><a name="dl">Stable Packages by Version and Date:</a></h3>
<table border="0" cellspacing="5">
<tbody><tr><th align="left">File</th><th></th><th align="left">Date</th><th align="left">Comment</th></tr>
-<tr><td valign="top"><a href="http://prdownloads.sourceforge.net/linuxwacom/linuxwacom-0.7.6-2.tar.bz2">linuxwacom-0.7.6-2.tar.bz2</a></td><td valign="top">-</td><td valign="top">2006-10-13</td><td valign="top">Updated configuration script and support kernel 2.6.17/18, Intuos3 4x6 and on-the-fly tablet rotation.</td></tr>
+<tr><td valign="top"><a href="http://prdownloads.sourceforge.net/linuxwacom/linuxwacom-0.7.6-4.tar.bz2">linuxwacom-0.7.6-4.tar.bz2</a></td><td valign="top">-</td><td valign="top">2006-12-01</td><td valign="top">Updated xsetwacom and support kernel 2.6.17/18, Intuos3 4x6 and on-the-fly tablet rotation.</td></tr>
<tr><td valign="top"><a href="http://prdownloads.sourceforge.net/linuxwacom/linuxwacom-0.7.4-3.tar.bz2">linuxwacom-0.7.4-3.tar.bz2</a></td><td valign="top">-</td><td valign="top">2006-06-19</td><td valign="top">Supports kernels 2.6.15/16, 2 new Intuos3 (12x12 and 12x19), and DTF 521.</td></tr>
<tr><td valign="top"><a href="http://prdownloads.sourceforge.net/linuxwacom/linuxwacom-0.7.2.tar.bz2">linuxwacom-0.7.2.tar.bz2</a></td><td valign="top">-</td><td valign="top">2005-12-21</td><td valign="top">Updated configuration script and support kernel 2.6.13/14, Graphire4, PL710, DTF720, Intuos3 6x11 and Volito2 .</td></tr>
<tr><td valign="top"><a href="http://prdownloads.sourceforge.net/linuxwacom/linuxwacom-0.7.0-1.tar.bz2">linuxwacom-0.7.0-1.tar.bz2</a></td><td valign="top">-</td><td valign="top">2005-09-23</td><td valign="top">Updated wacomcpl and support 16 buttons for all tools.</td></tr>
@@ -259,21 +226,21 @@ production release.</a></p>
</a><h1><a name="minihowto">5.0 - Mini-HOWTO</a></h1>
<center><h2><a name="minihowto">Mini HOWTO for Updating Wacom Driver on FC4 and FC5</a></h2></center>
-<a name="minihowto">$pkg="linuxwacom-$prod_pckg"
-<br>
+<a name="minihowto"><br>
</a><p><a name="minihowto">First, download the most recent linuxwacom driver package from
</a><a href="http://linuxwacom.sourceforge.net/index.php/howto/download">Downloading the Code</a> page to your home directory
and unpack it:
</p><blockquote><pre>
-[jej@ayukawa jej]$ bunzip2 $pkg.tar.bz2
-[jej@ayukawa jej]$ tar xvf $pkg.tar
+[jej@ayukawa jej]$ bunzip2 linuxwacom-0.7.6-4.tar.bz2
+[jej@ayukawa jej]$ tar xvf linuxwacom-0.7.6-4.tar
</pre></blockquote>
-<p>The following HOWTO describes the compiling and install details for $pkg
-on FC4 and FC5. For descriptions on other platforms, please refer to <a href="http://linuxwacom.sourceforge.net/index.php/howto/success">Success Stories</a> page.
+<p>The following HOWTO describes the compiling and install details for
+linuxwacom-0.7.6-4on FC4 and FC5. For descriptions on other platforms,
+please refer to <a href="http://linuxwacom.sourceforge.net/index.php/howto/success">Success Stories</a> page.
</p><p><b>Kernel Drivers for USB Tablets</b>
@@ -282,10 +249,8 @@ Note, this section is for USB tablets only. Serial tablet and Tablet PC
users can skip this section since your tablets don't need kernel driver
to run. </div>
-<p>Before updating your system with linuxwacom driver, you need to make sure your FC4 or FC5 is up to date. To do so, issue <i>up2date</i> for FC4 and <i>yum update</i>
-for FC5. The following testings are based on January 6, 2006's FC4,
-kernel 2.6.14-1.1653_FC4 and Oct. 25, 2006's FC5, kernel
-2.6.18-1.2200.fc5.
+<p>Before updating your system with linuxwacom driver, you need to make sure your FC4 or FC5 is up to date. To do so, issue <i>up2date</i> for FC4 and <i>yum update</i> for FC5. The following testings are based on FC4 (kernel 2.6.14-1.1653_FC4) and FC5 (kernel 2.6.17-1.2174_FC5).
+
</p><div class="diff">
<p>Note, after updating your kernel, those of you with nVidia and other
such graphics cards who like their 3D acceleration or dual monitor
@@ -322,8 +287,8 @@ Password:
[root@ayukawa jej]# cd /usr/src
[root@ayukawa src]# ln -s redhat/BUILD/kernel-2.6.14/linux-2.6.14 linux
[root@ayukawa src]# cd linux
-[root@ayukawa linux]# cp ~/$pkg/src/2.6.14/wacom.c /usr/src/linux/drivers/usb/input/
-[root@ayukawa linux]# cp ~/$pkg/src/2.6.14/hid-core.c /usr/src/linux/drivers/usb/input/
+[root@ayukawa linux]# cp ~/linuxwacom-0.7.6-4/src/2.6.14/wacom.c /usr/src/linux/drivers/usb/input/
+[root@ayukawa linux]# cp ~/linuxwacom-0.7.6-4/src/2.6.14/hid-core.c /usr/src/linux/drivers/usb/input/
[root@ayukawa linux]# make all
[root@ayukawa linux]# make modules_install
[root@ayukawa linux]# make install
@@ -352,15 +317,11 @@ Password:
[root@ayukawa jej]# yum install tcl-devel
[root@ayukawa jej]# yum install tk-devel
[root@ayukawa jej]# yum install xorg-x11-sdk
-For FC4:
-[root@ayukawa jej]# cp $pkg/prebuilt/wacom_drv.o /usr/X11R6/lib/modules/input
-For FC5
-[root@ayukawa jej]# cp $pkg/prebuilt/wacom_drv.o /usr/lib/xorg/modules/input
[root@ayukawa jej]# exit
-[jej@ayukawa jej]$ cd $pkg
-[jej@ayukawa $pkg]$ ./configure
-[jej@ayukawa $pkg]$ make
-[jej@ayukawa $pkg]$ su
+[jej@ayukawa jej]$ cd linuxwacom-0.7.6-4
+[jej@ayukawa linuxwacom-0.7.6-4]$ ./configure
+[jej@ayukawa linuxwacom-0.7.6-4]$ make
+[jej@ayukawa linuxwacom-0.7.6-4]$ su
Password:
[root@ayukawa ]# make install
@@ -399,7 +360,7 @@ the production release recognize and work with all known Wacom tablets.
</a></p><blockquote><ul>
<a name="help"> </a><li><a name="help">Kernel: 2.4.18 and up, preferably 2.4.20 or up
</a></li><li><a name="help">XFree86: 4.0 and up, preferably 4.2 or up
- </a></li><li><a name="help">linuxwacom: </a><a href="http://prdownloads.sourceforge.net/linuxwacom/linuxwacom-0.7.6-2.tar.bz2">linuxwacom-0.7.6-2</a></li></ul></blockquote>
+ </a></li><li><a name="help">linuxwacom: </a><a href="http://prdownloads.sourceforge.net/linuxwacom/linuxwacom-0.7.6-4.tar.bz2">linuxwacom-0.7.6-4</a></li></ul></blockquote>
<p>You will need to be running at least kernel 2.4.18, preferably 2.4.20.
You should be aware that Redhat and other vendors will back-port features
@@ -467,7 +428,8 @@ Generally, you will get a faster response (from me even), if you post to
the linuxwacom-discuss mailing list.
<a name="tpd">
</a><h1><a name="tpd">7.0 - Third Party Developers</a></h1>
-<a name="tpd">For application developers, we have an </a><a href="http://linuxwacom.sourceforge.net/index.php/appdev">overview</a> of adding new capabilities to your applications by using a Wacom tablet and <a href="http://linuxwacom.sourceforge.net/index.php/quantumtest">sample code</a> for getting the button and valuator values.<a name="appdev">
+<a name="tpd">For application developers, we have an </a><a href="http://linuxwacom.sourceforge.net/index.php/appdev">overview</a> of adding new capabilities to your applications by using a Wacom tablet and <a href="http://linuxwacom.sourceforge.net/index.php/quantumtest">sample code</a> for getting the button and valuator values.
+<a name="appdev">
</a><h2><a name="appdev">7.1 - Overview</a></h2>
<center><h2><a name="appdev">Overview for Third Party Developers</a></h2></center>
@@ -508,7 +470,7 @@ line rendering, such as modulation line width with pressure. The
descriptions below explain special treatment of valuator events.
</a></p><p><a name="appdev"><b>Controlling the Driver</b>
-</a></p><p><a name="appdev">To change the driver’s default values,
+</a></p><p><a name="appdev">To change the driverâ&#8364;&#8482;s default values,
there are options which can be defined through the configuration file,
XF86Config, XF86Config-4, or xorg.conf under directory /etc/X11. Please
refer to </a><a href="http://linuxwacom.sourceforge.net/index.php/howto/inputdev">Adding the InputDevices</a> for examples and a list of available options.
@@ -558,7 +520,7 @@ modulate the width of a stroke, opacity, color, etc. Be sure to scale
the pressure value to use the full range of pressure. Don't assume a
maximum pressure level, check the tablet's capabilities to find the
maximum pressure value (Check the maximum for the third valuator).
-Don’t think of pressure as only useful for drawing. For example: Use
+Donâ&#8364;&#8482;t think of pressure as only useful for drawing. For example: Use
pressure to control scrolling speed in a scroll bar. Or maybe
Click-drag with low pressure does a move; click-drag with high pressure
does a copy-move. Pressure is reported in the third valuator.
@@ -593,9 +555,9 @@ to allow for future changes.
</p><p>The Intuos and Intuos2 series tablets have a device that is
similar to a puck. In addition to normal puck parameters, this puck
-supports axial rotation and a wheel. For example, using the 4D Mouse’s
-rotation you can rotate the paper, or an object, and zoom with the
-wheel.
+supports axial rotation and a wheel. For example, using the 4D
+Mouseâ&#8364;&#8482;s rotation you can rotate the paper, or an object, and zoom
+with the wheel.
</p><p>4D Mouse axial rotation is reported in the forth valuator. Values in this field range from -900 to 900 in 0.2 degree increments.
</p><p><b>4D Mouse Wheel</b>
@@ -1442,7 +1404,36 @@ int toggle_pen_mode(Display *display, char *name)
<a name="chg">
</a><h1><a name="chg">8.0 - ChangeLog</a></h1>
<ul>
-<li><a name="chg">2006-10-31 Ping Cheng &lt;pingc@wacom.com&gt;<br>
+<li><a name="chg">2006-12-01 Ping Cheng &lt;pingc@wacom.com&gt;<br>
+</a><blockquote>
+<a name="chg"> * updated xsetwacom<br>
+</a></blockquote>
+
+</li><li><a name="chg">2006-11-30 Ping Cheng &lt;pingc@wacom.com&gt;<br>
+</a><blockquote>
+<a name="chg"> * Fixed cursor relative out-prox issue<br>
+ * Changed CursorProx option from 2 inputs into 1<br>
+ * updated xsetwacom and wacom_drv<br>
+ * Split wacom.c under 2.6.11 into 4 files<br>
+ * label 0.7.7 for testing<br>
+</a></blockquote>
+
+</li><li><a name="chg">2006-11-21 Ping Cheng &lt;pingc@wacom.com&gt;<br>
+</a><blockquote>
+<a name="chg"> * Updated web scripts (Magnus Vigerlöf)<br>
+ * Removed serial number and device ID in 4th - 5th<br>
+ high bytes due to bug 1592814<br>
+ * label 0.7.6-3<br>
+</a></blockquote>
+
+</li><li><a name="chg">2006-11-13 Ping Cheng &lt;pingc@wacom.com&gt;<br>
+</a><blockquote>
+<a name="chg"> * Updated acinclude.m4 and configure.in (Mats Johannesson)<br>
+ * Updated X driver for Xinerama setup<br>
+ * Removed option gimp<br>
+</a></blockquote>
+
+</li><li><a name="chg">2006-10-31 Ping Cheng &lt;pingc@wacom.com&gt;<br>
</a><blockquote>
<a name="chg"> * Updated acinclude.m4 and wacom.c<br>
* label 0.7.6-2<br>
@@ -1450,7 +1441,7 @@ int toggle_pen_mode(Display *display, char *name)
</li><li><a name="chg">2006-10-24 Ping Cheng &lt;pingc@wacom.com&gt;<br>
</a><blockquote>
-<a name="chg"> * Fixed a relative mode acceleration problem<br>
+<a name="chg"> * Fixed a relative mode acceleration problem<br>
* Updated webpages, acinclude.m4, and configure.in<br>
* Updated wacdump for TabletPC<br>
* Supports Graphire outbound tracking<br>
@@ -1458,7 +1449,7 @@ int toggle_pen_mode(Display *display, char *name)
</li><li><a name="chg">2006-10-16 Ping Cheng &lt;pingc@wacom.com&gt;<br>
</a><blockquote>
-<a name="chg"> * Updated README and NEWS<br>
+<a name="chg"> * Updated README and NEWS<br>
</a></blockquote>
</li><li><a name="chg">2006-10-13 Ping Cheng &lt;pingc@wacom.com&gt;<br>
@@ -2907,7 +2898,7 @@ Public License, to permit their use in free software.
<br><br>
<div class="copy" align="center">
- Copyright (C) 2002-2006 - LinuxWacom -Last updated October 31, 2006<br>
+ Copyright (C) 2002-2006 - LinuxWacom -Last updated December 1, 2006<br>
This website and its contents are
<a class="copy" href="http://linuxwacom.sourceforge.net/index.php/lic">licensed under the GNU FDL</a>.<br>
</div>
diff --git a/src/2.6.13/Makefile.in b/src/2.6.13/Makefile.in
index 12023ae..c5af401 100644
--- a/src/2.6.13/Makefile.in
+++ b/src/2.6.13/Makefile.in
@@ -48,6 +48,7 @@ endif # WCM_OPTION_HID not
ifeq ($(WCM_OPTION_WACOM),yes)
ifneq ($(CONFIG_USB_WACOM),y)
+wacom-objs := wacom_wac.o wacom_sys.o
obj-m += wacom.o
else
$(error You requested to build wacom with configure, but wacom is configured as built-in in your kernel config)
@@ -76,6 +77,11 @@ ifeq ($(WCM_OPTION_HID),yes)
done
endif
+# Copy Wacom specific code which is common to all kernel releases
+ifeq ($(WCM_OPTION_WACOM),yes)
+ cp -f ../2.6.16/wacom_wac.c .
+ cp -f ../2.6.16/wacom_wac.h .
+endif
@echo ' Building linuxwacom drivers for 2.6 kernel.'
@echo '***Note: Drivers not enabled as modules in your kernel config but requested through configure are NOT built'
$(MAKE) -C $(KDIR) M=$(PWD)
diff --git a/src/2.6.14/Makefile.in b/src/2.6.14/Makefile.in
index 12023ae..966aa34 100644
--- a/src/2.6.14/Makefile.in
+++ b/src/2.6.14/Makefile.in
@@ -48,6 +48,7 @@ endif # WCM_OPTION_HID not
ifeq ($(WCM_OPTION_WACOM),yes)
ifneq ($(CONFIG_USB_WACOM),y)
+wacom-objs := wacom_wac.o wacom_sys.o
obj-m += wacom.o
else
$(error You requested to build wacom with configure, but wacom is configured as built-in in your kernel config)
@@ -76,6 +77,13 @@ ifeq ($(WCM_OPTION_HID),yes)
done
endif
+# Copy Wacom specific code which is common to all kernel releases
+ifeq ($(WCM_OPTION_WACOM),yes)
+ cp -f ../2.6.16/wacom_wac.c .
+ cp -f ../2.6.16/wacom_wac.h .
+ cp -f ../2.6.13/wacom.h .
+ cp -f ../2.6.13/wacom_sys.c .
+endif
@echo ' Building linuxwacom drivers for 2.6 kernel.'
@echo '***Note: Drivers not enabled as modules in your kernel config but requested through configure are NOT built'
$(MAKE) -C $(KDIR) M=$(PWD)
diff --git a/src/2.6.16/wacom_wac.c b/src/2.6.16/wacom_wac.c
index beccc47..78f3627 100644
--- a/src/2.6.16/wacom_wac.c
+++ b/src/2.6.16/wacom_wac.c
@@ -225,11 +225,11 @@ static int wacom_graphire_irq(struct wacom_wac *wacom, void *wcombo)
wacom_report_key(wcombo, wacom->tool[0], 1);
if (!(data[1] & 0x90)) /* report prox-out when physically out */
wacom_report_key(wcombo, wacom->tool[0], 0);
- wacom_input_sync(wcombo);
/* send pad data */
if (wacom->features->type == WACOM_G4) {
- if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ if (data[7] & 0xf8) {
+ wacom_input_sync(wcombo); /* sync last event */
wacom->id[1] = 1;
wacom->serial[1] = (data[7] & 0xf8);
wacom_report_key(wcombo, BTN_0, (data[7] & 0x40));
@@ -239,7 +239,10 @@ static int wacom_graphire_irq(struct wacom_wac *wacom, void *wcombo)
wacom_report_key(wcombo, BTN_TOOL_FINGER, 0xf0);
wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xf0);
} else if (wacom->id[1]) {
+ wacom_input_sync(wcombo); /* sync last event */
wacom->id[1] = 0;
+ wacom_report_key(wcombo, BTN_0, (data[7] & 0x40));
+ wacom_report_key(wcombo, BTN_4, (data[7] & 0x80));
wacom_report_key(wcombo, BTN_TOOL_FINGER, 0);
wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xf0);
}
diff --git a/src/include/Xwacom.h b/src/include/Xwacom.h
index 426bceb..82a362f 100755
--- a/src/include/Xwacom.h
+++ b/src/include/Xwacom.h
@@ -29,17 +29,10 @@
#define XWACOM_PARAM_BOTTOMY 4
#define XWACOM_PARAM_DEBUGLEVEL 5
#define XWACOM_PARAM_PRESSCURVE 6
-#define XWACOM_PARAM_RAWFILTER 7
-#define XWACOM_PARAM_MODE 8
-#define XWACOM_PARAM_SPEEDLEVEL 9
-#define XWACOM_PARAM_CLICKFORCE 10
-#define XWACOM_PARAM_ACCEL 11
-#define XWACOM_PARAM_XYDEFAULT 12
-#define XWACOM_PARAM_MMT 13
-#define XWACOM_PARAM_TPCBUTTON 14
-#define XWACOM_PARAM_CURSORPROX 15
-#define XWACOM_PARAM_TID 16
-#define XWACOM_PARAM_ROTATE 17
+#define XWACOM_PARAM_MODE 7
+#define XWACOM_PARAM_TPCBUTTON 8
+#define XWACOM_PARAM_CURSORPROX 9
+#define XWACOM_PARAM_ROTATE 10
#define XWACOM_PARAM_BUTTON1 101
#define XWACOM_PARAM_BUTTON2 102
#define XWACOM_PARAM_BUTTON3 103
@@ -72,7 +65,15 @@
#define XWACOM_PARAM_BUTTON30 130
#define XWACOM_PARAM_BUTTON31 131
#define XWACOM_PARAM_BUTTON32 132
-#define XWACOM_PARAM_GETMODEL 133
+#define XWACOM_PARAM_NOXOPTION 200
+#define XWACOM_PARAM_SPEEDLEVEL 201
+#define XWACOM_PARAM_CLICKFORCE 202
+#define XWACOM_PARAM_ACCEL 203
+#define XWACOM_PARAM_XYDEFAULT 204
+#define XWACOM_PARAM_MMT 205
+#define XWACOM_PARAM_RAWFILTER 206
+#define XWACOM_PARAM_TID 207
+#define XWACOM_PARAM_GETMODEL 208
#define XWACOM_VALUE_ROTATE_NONE 0
#define XWACOM_VALUE_ROTATE_CW 1
diff --git a/src/util/wacusb.c b/src/util/wacusb.c
index ce63ce7..e4c32de 100755
--- a/src/util/wacusb.c
+++ b/src/util/wacusb.c
@@ -61,6 +61,9 @@
#define LONG(x) ((x)/BITS_PER_LONG)
#define ISBITSET(x,y) ((x)[LONG(y)] & BIT(y))
+#define MAX_CHANNELS 2
+#define MAX_USB_EVENTS 32
+
/*****************************************************************************
** Structures
*****************************************************************************/
@@ -83,6 +86,7 @@ struct _USBDEVICE
const char* pszDesc;
unsigned int uDevice;
USBSUBTYPE* pSubTypes;
+ unsigned int uChannelCnt;
};
struct _USBVENDOR
@@ -109,8 +113,12 @@ struct _USBTABLET
USBSUBTYPE* pSubType;
int nBus;
int nVersion;
- WACOMSTATE state;
- int nToolProx;
+ WACOMSTATE state[MAX_CHANNELS];
+ int nToolProx[MAX_CHANNELS];
+ int nChannel;
+ int nLastToolSerial;
+ int nEventCnt;
+ struct input_event events[MAX_USB_EVENTS];
};
/*****************************************************************************
@@ -273,19 +281,19 @@ static int USBIdentifyModel(USBTABLET* pUSB);
static USBDEVICE xWacomDevices[] =
{
- { "pp", "PenPartner", WACOMDEVICE_PENPARTNER, xPenPartner },
- { "gr", "Graphire", WACOMDEVICE_GRAPHIRE, xGraphire },
- { "gr2", "Graphire2", WACOMDEVICE_GRAPHIRE2, xGraphire2 },
- { "gr3", "Graphire3", WACOMDEVICE_GRAPHIRE3, xGraphire3 },
- { "gr4", "Graphire4", WACOMDEVICE_GRAPHIRE4, xGraphire4 },
- { "int", "Intuos", WACOMDEVICE_INTUOS, xIntuos },
- { "int2", "Intuos2", WACOMDEVICE_INTUOS2, xIntuos2 },
- { "int3", "Intuos3", WACOMDEVICE_INTUOS3, xIntuos3 },
- { "ctq", "Cintiq (V5)", WACOMDEVICE_CINTIQV5, xCintiqV5 },
- { "pl", "Cintiq (PL)", WACOMDEVICE_CINTIQ, xCintiq },
- { "ptu", "Cintiq Partner (PTU)", WACOMDEVICE_PTU, xCintiqPartner },
- { "vol", "Volito", WACOMDEVICE_VOLITO, xVolito },
- { "vol2", "Volito2", WACOMDEVICE_VOLITO2, xVolito2 },
+ { "pp", "PenPartner", WACOMDEVICE_PENPARTNER, xPenPartner, 1 },
+ { "gr", "Graphire", WACOMDEVICE_GRAPHIRE, xGraphire, 1 },
+ { "gr2", "Graphire2", WACOMDEVICE_GRAPHIRE2, xGraphire2, 1 },
+ { "gr3", "Graphire3", WACOMDEVICE_GRAPHIRE3, xGraphire3, 1 },
+ { "gr4", "Graphire4", WACOMDEVICE_GRAPHIRE4, xGraphire4, 2 },
+ { "int", "Intuos", WACOMDEVICE_INTUOS, xIntuos, 2 },
+ { "int2", "Intuos2", WACOMDEVICE_INTUOS2, xIntuos2, 2 },
+ { "int3", "Intuos3", WACOMDEVICE_INTUOS3, xIntuos3, 2 },
+ { "ctq", "Cintiq (V5)", WACOMDEVICE_CINTIQV5, xCintiqV5, 2 },
+ { "pl", "Cintiq (PL)", WACOMDEVICE_CINTIQ, xCintiq, 1 },
+ { "ptu", "Cintiq Partner (PTU)", WACOMDEVICE_PTU, xCintiqPartner, 1 },
+ { "vol", "Volito", WACOMDEVICE_VOLITO, xVolito, 1 },
+ { "vol2", "Volito2", WACOMDEVICE_VOLITO2, xVolito2, 1 },
{ NULL }
};
@@ -446,9 +454,9 @@ static int USBGetRange(USBTABLET* pUSB, unsigned long* pBits, int nAbsField,
if (ioctl(pUSB->fd, EVIOCGABS(nAbsField), nAbs) != 0)
return 1;
- pUSB->state.values[uField].nMin = nAbs[1];
- pUSB->state.values[uField].nMax = nAbs[2];
- pUSB->state.uValid |= BIT(uField);
+ pUSB->state[0].values[uField].nMin = nAbs[1];
+ pUSB->state[0].values[uField].nMax = nAbs[2];
+ pUSB->state[0].uValid |= BIT(uField);
return 0;
}
@@ -467,7 +475,7 @@ static int USBFindModel(USBTABLET* pUSB, unsigned int uVendor,
static USBDEVICE xUnkDev[] =
{
- { "unk", "Unknown", WACOMDEVICE_UNKNOWN, xUnkSub },
+ { "unk", "Unknown", WACOMDEVICE_UNKNOWN, xUnkSub, MAX_CHANNELS },
{ NULL }
};
@@ -506,7 +514,7 @@ static int USBFindModel(USBTABLET* pUSB, unsigned int uVendor,
static int USBIdentifyModel(USBTABLET* pUSB)
{
- int nCnt;
+ int nCnt, chcnt;
short sID[4];
unsigned int uVendor, uProduct;
unsigned long evbits[NBITS(EV_MAX)];
@@ -519,7 +527,7 @@ static int USBIdentifyModel(USBTABLET* pUSB)
return 1;
/* initialize state structure */
- pUSB->state.uValueCnt = WACOMFIELD_MAX;
+ pUSB->state[0].uValueCnt = WACOMFIELD_MAX;
/* Get event types supported */
nCnt = ioctl(pUSB->fd,EVIOCGBIT(0 /*EV*/,sizeof(evbits)),evbits);
@@ -573,9 +581,9 @@ static int USBIdentifyModel(USBTABLET* pUSB)
if (ISBITSET(relbits,REL_WHEEL))
{
- pUSB->state.uValid |= BIT(WACOMFIELD_RELWHEEL);
- pUSB->state.values[WACOMFIELD_RELWHEEL].nMin = -1;
- pUSB->state.values[WACOMFIELD_RELWHEEL].nMax = 1;
+ pUSB->state[0].uValid |= BIT(WACOMFIELD_RELWHEEL);
+ pUSB->state[0].values[WACOMFIELD_RELWHEEL].nMin = -1;
+ pUSB->state[0].values[WACOMFIELD_RELWHEEL].nMax = 1;
}
}
@@ -598,7 +606,7 @@ static int USBIdentifyModel(USBTABLET* pUSB)
ISBITSET(keybits,BTN_MIDDLE) ||
ISBITSET(keybits,BTN_SIDE) ||
ISBITSET(keybits,BTN_EXTRA))
- pUSB->state.uValid |= BIT(WACOMFIELD_BUTTONS);
+ pUSB->state[0].uValid |= BIT(WACOMFIELD_BUTTONS);
/* tool events */
if (ISBITSET(keybits,BTN_TOOL_PEN) ||
@@ -609,7 +617,7 @@ static int USBIdentifyModel(USBTABLET* pUSB)
ISBITSET(keybits,BTN_TOOL_FINGER) ||
ISBITSET(keybits,BTN_TOOL_MOUSE) ||
ISBITSET(keybits,BTN_TOOL_LENS))
- pUSB->state.uValid |= BIT(WACOMFIELD_PROXIMITY) |
+ pUSB->state[0].uValid |= BIT(WACOMFIELD_PROXIMITY) |
BIT(WACOMFIELD_TOOLTYPE);
/* Detect button codes */
@@ -630,14 +638,19 @@ static int USBIdentifyModel(USBTABLET* pUSB)
/* add additional capabilities by device type */
switch (pUSB->pDevice->uDevice)
{
+ case WACOMDEVICE_GRAPHIRE4:
case WACOMDEVICE_INTUOS:
case WACOMDEVICE_INTUOS2:
case WACOMDEVICE_INTUOS3:
case WACOMDEVICE_CINTIQV5:
- pUSB->state.uValid |= BIT(WACOMFIELD_SERIAL);
+ pUSB->state[0].uValid |= BIT(WACOMFIELD_SERIAL);
default: ;
}
+ /* Initialize all channels with the same values */
+ for(chcnt=1; chcnt<MAX_CHANNELS; chcnt++)
+ pUSB->state[chcnt] = pUSB->state[0];
+
return 0;
}
@@ -687,13 +700,13 @@ static int USBGetROMVer(WACOMTABLET_PRIV* pTablet, int* pnMajor,
static int USBGetCaps(WACOMTABLET_PRIV* pTablet)
{
USBTABLET* pUSB = (USBTABLET*)pTablet;
- return pUSB->state.uValid;
+ return pUSB->state[0].uValid;
}
static int USBGetState(WACOMTABLET_PRIV* pTablet, WACOMSTATE* pState)
{
USBTABLET* pUSB = (USBTABLET*)pTablet;
- return WacomCopyState(pState,&pUSB->state);
+ return WacomCopyState(pState,&pUSB->state[pUSB->nChannel]);
}
static int USBGetFD(WACOMTABLET_PRIV* pTablet)
@@ -725,9 +738,9 @@ static int USBReadRaw(WACOMTABLET_PRIV* pTablet, unsigned char* puchData,
static int USBParseMSC(USBTABLET* pUSB, struct input_event* pEv)
{
if (pEv->code == MSC_SERIAL && pEv->value)
- pUSB->state.values[WACOMFIELD_SERIAL].nValue = pEv->value;
- if (!pUSB->state.values[WACOMFIELD_PROXIMITY].nValue)
- pUSB->state.values[WACOMFIELD_SERIAL].nValue = 0;
+ pUSB->state[pUSB->nChannel].values[WACOMFIELD_SERIAL].nValue = pEv->value;
+ if (!pUSB->state[pUSB->nChannel].values[WACOMFIELD_PROXIMITY].nValue)
+ pUSB->state[pUSB->nChannel].values[WACOMFIELD_SERIAL].nValue = 0;
return 0;
}
@@ -766,9 +779,9 @@ static int USBParseKEY(USBTABLET* pUSB, struct input_event* pEv)
{
/* button state change */
if (pEv->value)
- pUSB->state.values[WACOMFIELD_BUTTONS].nValue |= BIT(button);
+ pUSB->state[pUSB->nChannel].values[WACOMFIELD_BUTTONS].nValue |= BIT(button);
else
- pUSB->state.values[WACOMFIELD_BUTTONS].nValue &= ~BIT(button);
+ pUSB->state[pUSB->nChannel].values[WACOMFIELD_BUTTONS].nValue &= ~BIT(button);
}
/* if a tool was specified */
@@ -778,44 +791,44 @@ static int USBParseKEY(USBTABLET* pUSB, struct input_event* pEv)
if (pEv->value)
{
/* no prior tool in proximity */
- if (!(pUSB->nToolProx & BIT(tool)))
+ if (!(pUSB->nToolProx[pUSB->nChannel] & BIT(tool)))
{
- pUSB->state.values[WACOMFIELD_PROXIMITY].nValue = 1;
+ pUSB->state[pUSB->nChannel].values[WACOMFIELD_PROXIMITY].nValue = 1;
}
/* remember tool in prox */
- pUSB->nToolProx |= BIT(tool);
- pUSB->state.values[WACOMFIELD_TOOLTYPE].nValue = tool;
+ pUSB->nToolProx[pUSB->nChannel] |= BIT(tool);
+ pUSB->state[pUSB->nChannel].values[WACOMFIELD_TOOLTYPE].nValue = tool;
}
/* otherwise, going out of proximity */
else
{
/* forget tool in prox */
- if (pUSB->nToolProx & BIT(tool))
+ if (pUSB->nToolProx[pUSB->nChannel] & BIT(tool))
{
- pUSB->nToolProx &= ~BIT(tool);
+ pUSB->nToolProx[pUSB->nChannel] &= ~BIT(tool);
}
/* single input */
- if (!(pUSB->state.uValid & BIT(WACOMFIELD_SERIAL)))
- pUSB->nToolProx = 0;
+ if (!(pUSB->state[pUSB->nChannel].uValid & BIT(WACOMFIELD_SERIAL)))
+ pUSB->nToolProx[pUSB->nChannel] = 0;
- pUSB->state.values[WACOMFIELD_PROXIMITY].nValue = 0;
- pUSB->state.values[WACOMFIELD_TOOLTYPE].nValue = 0;
+ pUSB->state[pUSB->nChannel].values[WACOMFIELD_PROXIMITY].nValue = 0;
+ pUSB->state[pUSB->nChannel].values[WACOMFIELD_TOOLTYPE].nValue = 0;
/* nobody left? out of proximity */
- if (!pUSB->nToolProx)
- memset(pUSB->state.values, 0,
- pUSB->state.uValueCnt * sizeof(WACOMVALUE));
+ if (!pUSB->nToolProx[pUSB->nChannel])
+ memset(pUSB->state[pUSB->nChannel].values, 0,
+ pUSB->state[pUSB->nChannel].uValueCnt * sizeof(WACOMVALUE));
/* otherwise, switch to next tool */
else
{
for (i=WACOMTOOLTYPE_PEN; i<WACOMTOOLTYPE_MAX; ++i)
{
- if (pUSB->nToolProx & BIT(i))
+ if (pUSB->nToolProx[pUSB->nChannel] & BIT(i))
{
- pUSB->state.values[WACOMFIELD_TOOLTYPE].nValue = i;
+ pUSB->state[pUSB->nChannel].values[WACOMFIELD_TOOLTYPE].nValue = i;
}
}
}
@@ -842,7 +855,7 @@ static int USBParseABS(USBTABLET* pUSB, struct input_event* pEv)
}
if (field)
- pUSB->state.values[field].nValue = pEv->value;
+ pUSB->state[pUSB->nChannel].values[field].nValue = pEv->value;
return 0;
}
@@ -856,7 +869,7 @@ static int USBParseREL(USBTABLET* pUSB, struct input_event* pEv)
}
if (field)
- pUSB->state.values[field].nValue = pEv->value;
+ pUSB->state[pUSB->nChannel].values[field].nValue = pEv->value;
return 0;
}
@@ -865,15 +878,93 @@ static int USBParseData(WACOMTABLET_PRIV* pTablet,
const unsigned char* puchData, unsigned int uLength,
WACOMSTATE* pState)
{
+ int evcnt, chcnt;
USBTABLET* pUSB = (USBTABLET*)pTablet;
struct input_event* pEv = (struct input_event*)puchData;
if (uLength != sizeof(struct input_event)) return 1;
- pUSB->state.values[WACOMFIELD_RELWHEEL].nValue = 0;
+ /* store event until we receive a MSC_SERIAL/SYN_REPORT
+ * so we can figure out with channel to use */
+ if (pUSB->nEventCnt >= MAX_USB_EVENTS)
+ {
+ /* no more buffer space */
+ pUSB->nEventCnt = 0;
+ pUSB->nLastToolSerial = 0;
+ errno = ENOBUFS;
+ return -1;
+ }
+ pUSB->events[pUSB->nEventCnt++] = *pEv;
+
+ if ((pEv->type == EV_MSC) && (pEv->code == MSC_SERIAL))
+ {
+ /* store the serial for the tool for later use */
+ pUSB->nLastToolSerial = pEv->value;
+#ifdef EV_SYN
+ /* Kernel 2.4 uses MSC_SERIAL as an end-of-report, 2.6
+ * don't so we're not done yet */
+ return 0;
+ }
+ else if ((pEv->type == EV_SYN) && (pEv->code == SYN_REPORT))
+ {
+ /* Kernel 2.6 used SYN_REPORT as an end-of-record,
+ * fall through */
+#endif
+ }
+ else
+ {
+ /* Not a MSC_SERIAL or SYN_REPORT, we're not done yet */
+ return 0;
+ }
+
+ /* Select channel here based on the serial number, tablets
+ * with only one channel will always use channel 0, so no
+ * check.
+ */
+ if (pUSB->pDevice->uChannelCnt > 1)
+ {
+ pUSB->nChannel = -1;
+ /* Find existing channel */
+ for (chcnt=0; chcnt<pUSB->pDevice->uChannelCnt; chcnt++)
+ {
+ if (pUSB->state[chcnt].values[WACOMFIELD_SERIAL].nValue == pUSB->nLastToolSerial)
+ {
+ pUSB->nChannel = chcnt;
+ break;
+ }
+ }
+
+ /* Find en empty channel */
+ if(pUSB->nChannel == -1)
+ {
+ for (chcnt=0; chcnt<pUSB->pDevice->uChannelCnt; chcnt++)
+ {
+ if(!pUSB->nToolProx[chcnt])
+ {
+ pUSB->nChannel = chcnt;
+ break;
+ }
+ }
+ }
+
+ /* no more channels?? */
+ if(pUSB->nChannel == -1)
+ {
+ pUSB->nChannel = 0;
+ pUSB->nEventCnt = 0;
+ pUSB->nLastToolSerial = 0;
+ errno = ENOBUFS;
+ return -1;
+ }
+ }
+
+ /* Channel found/allocated, lets process events */
+ pUSB->state[pUSB->nChannel].values[WACOMFIELD_RELWHEEL].nValue = 0;
- /* dispatch event */
- switch (pEv->type)
+ for (evcnt=0; evcnt<pUSB->nEventCnt; evcnt++)
{
+ /* dispatch event */
+ switch (pEv->type)
+ {
#ifdef EV_SYN
case EV_SYN: /* kernel 2.6 */
#endif
@@ -883,9 +974,12 @@ static int USBParseData(WACOMTABLET_PRIV* pTablet,
case EV_ABS: if (USBParseABS(pUSB,pEv)) return pEv->type; break;
case EV_REL: if (USBParseREL(pUSB,pEv)) return pEv->type; break;
default: errno = EINVAL; return pEv->type;
+ }
}
- return pState ? WacomCopyState(pState,&pUSB->state) : 0;
+ pUSB->nEventCnt = 0;
+ pUSB->nLastToolSerial = 0;
+ return pState ? WacomCopyState(pState,pUSB->state + pUSB->nChannel) : 0;
}
/*****************************************************************************
diff --git a/src/util/xsetwacom.c b/src/util/xsetwacom.c
index d80b7ff..54b0b4e 100755
--- a/src/util/xsetwacom.c
+++ b/src/util/xsetwacom.c
@@ -758,7 +758,13 @@ static void DisplayValue (WACOMDEVICE *hDev, const char *devname, PARAMINFO *p,
printf ("xsetwacom set %s %s \"%s\"\n", devname, p->pszParam, strval);
break;
case gfXCONF:
- printf ("\tOption\t\"%s\"\t\"%s\"\n", p->pszParam, strval);
+ if (p->nParamID > XWACOM_PARAM_NOXOPTION)
+ {
+ printf ("%s is only an xsetwacom command \n", p->pszParam);
+ printf ("xsetwacom set %s %s \"%s\"\n", devname, p->pszParam, strval);
+ }
+ else
+ printf ("\tOption\t\"%s\"\t\"%s\"\n", p->pszParam, strval);
break;
default:
printf ("%d\n", value);
diff --git a/src/wacom.4x b/src/wacom.4x
index 11f727d..6de9c29 100644
--- a/src/wacom.4x
+++ b/src/wacom.4x
@@ -144,8 +144,8 @@ this option if your screens are displaying in the same resolutions.
.B Option \fI"ScreenNo"\fP \fI"n"\fP
In a multi-monitor environment, specifies the screen number in which the cursor can move.
.TP 4
-.B Option \fI"Rotate"\fP \fI"CW"|"CCW"|"NONE"\fP
-rotates the tablet orientation clockwise (CCW) or anti-clockwise (CW). The default is "NONE".
+.B Option \fI"Rotate"\fP \fI"CW"|"CCW"|"HALF"|"NONE"\fP
+rotates the tablet orientation clockwise (CCW) or anti-clockwise (CW) or 180 degrees (HALF). The default is "NONE".
.TP 4
.B Option \fI"PressCurve"\fP \fI"x1,y1,x2,y2"\fP
sets pressure curve by control points x1, y1, x2, and y2. Their values are in range
@@ -166,6 +166,9 @@ the integers between 1 and 12. Once it is defined, all the debug messages
with a level less than or equal to the number will be logged into
/etc/X11/XFree86.0.log.
.TP 4
+.B Option \fI"CursorProx"\fP \fI"number"\fP
+sets the max distance from tablet to stop reporting movement for cursor in relative mode. Default for Intuos series is 10, for Graphire series (including Volitos) is 42.
+.TP 4
.B Option \fI"Serial"\fP \fI"number"\fP
sets the serial number associated with the physical device. This allows
to have multiple devices of the same type (i.e. multiple pens). This
diff --git a/src/xdrv/wcmUSB.c b/src/xdrv/wcmUSB.c
index 842c46e..a0e48be 100755
--- a/src/xdrv/wcmUSB.c
+++ b/src/xdrv/wcmUSB.c
@@ -392,12 +392,12 @@ static struct
{ 0x45, 2540, 2540, &usbIntuos2 }, /* Intuos2 12x18 */
{ 0x47, 2540, 2540, &usbIntuos2 }, /* Intuos2 6x8 */
- { 0x60, 37, 50, &usbVolito }, /* Volito */
+ { 0x60, 1016, 1016, &usbVolito }, /* Volito */
- { 0x61, 37, 50, &usbVolito2 }, /* PenStation */
- { 0x62, 37, 50, &usbVolito2 }, /* Volito2 4x5 */
- { 0x63, 20, 30, &usbVolito2 }, /* Volito2 2x3 */
- { 0x64, 20, 30, &usbVolito2 }, /* Volito2 2x3 */
+ { 0x61, 1016, 1016, &usbVolito2 }, /* PenStation */
+ { 0x62, 1016, 1016, &usbVolito2 }, /* Volito2 4x5 */
+ { 0x63, 1016, 1016, &usbVolito2 }, /* Volito2 2x3 */
+ { 0x64, 1016, 1016, &usbVolito2 }, /* PenPartner2 */
{ 0xB0, 5080, 5080, &usbIntuos3 }, /* Intuos3 4x5 */
{ 0xB1, 5080, 5080, &usbIntuos3 }, /* Intuos3 6x8 */
@@ -786,7 +786,7 @@ static void usbParseEvent(WacomCommonPtr common,
static void usbParseChannel(WacomCommonPtr common, int channel, int serial)
{
- int i, shift;
+ int i, shift, nkeys;
WacomDeviceState* ds;
struct input_event* event;
@@ -903,10 +903,10 @@ static void usbParseChannel(WacomCommonPtr common, int channel, int serial)
MOD_BUTTONS (4, event->value);
else
{
- for (i = 0; i < common->npadkeys; i++)
- if (event->code == common->padkey_code [i])
+ for (nkeys = 0; nkeys < common->npadkeys; nkeys++)
+ if (event->code == common->padkey_code [nkeys])
{
- MOD_BUTTONS ((MAX_MOUSE_BUTTONS/2+i), event->value);
+ MOD_BUTTONS ((MAX_MOUSE_BUTTONS/2+nkeys), event->value);
break;
}
}
diff --git a/src/xdrv/xf86Wacom.c b/src/xdrv/xf86Wacom.c
index b452c9f..618f277 100755
--- a/src/xdrv/xf86Wacom.c
+++ b/src/xdrv/xf86Wacom.c
@@ -40,53 +40,12 @@
* Brion Vibber <brion@pobox.com>,
* Aaron Optimizer Digulla <digulla@hepe.com>,
* Jonathan Layes <jonathan@layes.com>.
- *
+ * John Joganic <jej@j-arkadia.com>
*/
/*
* REVISION HISTORY
*
- * 2002-12-17 26-j0.3.3 - added Intuos2
- * 2002-12-31 26-j0.3.5 - added module loading for usb wacom and evdev
- * 2003-01-01 26-j0.3.6 - fix for 2D Intuos2 mouse buttons
- * 2003-01-25 26-j0.3.7 - cleaned up usb conditions for FreeBSD
- * 2003-01-31 26-j0.5.0 - new release
- * 2003-01-31 26-j0.5.1 - added Ping Cheng's PL code
- * 2003-01-31 26-j0.5.2 - fixed serial number code for Intuos and Intuos2
- * 2003-02-12 26-j0.5.3 - added Ping Cheng's USB patch
- * 2003-02-12 26-j0.5.4 - added Ping Cheng's "device_on" patch
- * 2003-02-22 26-j0.5.5 - added Ping Cheng's "multi" patch
- * 2003-02-22 26-j0.5.6 - applied J. Yen's origin patch
- * 2003-03-06 26-j0.5.7 - added Ping Cheng's "suppress" patch
- * 2003-03-22 26-j0.5.8 - added Dean Townsley's ISDV4 patch
- * 2003-04-02 26-j0.5.9 - added J. Yen's "misc fixes" patch
- * 2003-04-06 26-j0.5.10 - refactoring
- * 2003-04-29 26-j0.5.11 - all devices using same data path
- * 2003-05-01 26-j0.5.12 - changed graphire wheel to report relative
- * 2003-05-02 26-j0.5.13 - added parameter configuration code
- * 2003-05-15 26-j0.5.14 - added relative wheel button 4 and 5
- * 2003-05-15 26-j0.5.15 - intuos filter code on by default, fixed APM init
- * 2003-06-19 26-j0.5.16 - added Intuos2 6x8 id 0x47, suppress of 0 disables
- * 2003-06-25 26-j0.5.17 - support TwinView and kernel 2.5 for USB tablet
- * 2003-07-10 26-j0.5.18 - fix to Intuos filter, ignores first samples
- * 2003-07-16 26-j0.5.19 - added noise reducing filter, improved USB relative mode
- * 2003-07-24 26-j0.5.20 - added new xsetwacom commands (Mode, SpeedLevel, and ClickForce)
- * 2003-08-13 26-j0.5.21 - added speed acceleration xsetwacom commands (Accel)
- * 2003-09-30 26-j0.5.22 - added TwinView with different resolution support and
- - enabled ScreenNo option for TwinView
- * 2003-11-10 26-j0.5.23 - support kernel 2.4.22 and user specified tcl/tk src dir
- * 2003-11-18 26-j0.5.24 - support general Tablet PC (ISDV4) and xsetwacom mmonitor
- * 2003-12-10 26-j0.5.25 - support kernel 2.6
- * 2003-01-10 26-j0.5.26 - added double click speed and radius
- * 2004-02-02 26-j0.6.0 - new release
- * 2004-03-02 26-j0.6.1 - new release
- * 2004-04-04 26-j0.6.2 - new release
- * 2004-05-25 26-j0.6.3 - new release
- * 2004-10-05 26-j0.6.5 - new release
- * 2004-11-22 42-j0.6.6 - new release
- * 2005-02-17 42-j0.6.7 - added 64-bit support
- * 2005-03-10 42-j0.6.8 - added Cintiq 21UX support
- * 2005-05-16 47-pc0.6.9 - added tablet orentation rotation for all tablets
* 2005-10-17 47-pc0.7.1 - Added DTU710, DTF720, G4
* 2005-11-17 47-pc0.7.1-1 - Report tool serial number and ID to Xinput
* 2005-12-02 47-pc0.7.1-2 - Grap the USB port so /dev/input/mice won't get it