The Linux Wacom Project
SourceForge.net Logo

The Linux Wacom Project

Copyright (C) 2002-2011 - LinuxWacom

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU GENERAL PUBLIC LICENSE as published by the
Free Software Foundation; either version 2 of the License, or
(at your option) any later version.


1.0 - Recent News

This is a list of the updates for the past month or so. The ChangeLog has a more complete list.

October 12, 2010 - Fixed a kernel bug for Cintiq 21UX2 pressure (Aristeu Rozanski ). Fixed a print format error in xidump.c (Aristeu Rozanski). Label 0.8.8-10.
 
October 1, 2010 - Specify the tools supported by Intuos and CintiqV5. series respectively in the kernel. Calibration-only wacomcpl has the options to display warnings or. flashing the crosshairs in red when abnormal (x,y) is detected. Enable all tools for X server 1.4 and older and kernel 2.6.24 and older. Peter Hutterer's configure message update for newer Xorg. Label 0.8.8-9.
 
July 27, 2010 - Updated kernel driver for 2.6.23 and later. Label 0.8.8-8.
 
July 22, 2010 - Fixed a memory leakage in util/wacomcfg.c (Eldar Firing ). Replaced usb_buffer_free with usb_free_coherent for 2.6.35. - by Diego Calleja . Removed a few unused routines in xf86Wacom.c. Label 0.8.8-7.
 
July 14, 2010 - Updated udev wacom rules. Updated web pages for new devices. Added call EVIOCGKEY back in wcmUSB.c. Label 0.8.8-6.
 
July 12, 2010 - Updated configure.in and src/Makefile.am to include xorg server 1.6.5. Updated wcmUSB.c to use default nbuttons and npadkeys since kernels. older than 2.6.24 doesn't return proper keys from EVIOCGKEY. Added a new xsetwacom option, isDisplay, to report if the tablet is. a display tablet or not. Label 0.8.8-5.
 
June 29, 2010 - Updated configure.in and src/Makefile.am for XFree86 servers. Updated 2.6.16/wacom_wac.c for kernels older than 2.6.21. Added \ (backslash) to wacomcpl-exec to continue the partial lines. Label 0.8.8-4.
 
June 18, 2010 - Updated configure.in for older X servers. Updated 2.6.16/wacom_wac.c for Cintiq 21UX2. Label 0.8.8-3.
 
June 16, 2010 - Updated wacom_wac.c and wacom_wac.h for DTU-2231 and DTU-1631. Updated wacomcpl. Label 0.8.8-2.
 
June 11, 2010 - Fixed a few minor issues. Added DTU-2231 support. Added DTU-1631 support. Label 0.8.8-1.
 
June 7, 2010 - Fixed free toolarea issue. Moved retrieving tools from wcmCommon to wcmUSB, where it belongs. Initialize common->npadkeys before recounting the keys. Label 0.8.8.
 
June 2, 2010 - Added the xsetwacom manpage. - by Peter Hutterer . Free common, common->toollist, priv->tool, and toolarea. Added Application Defined functionality for buttons. Retrieve supported tools from the kernel if a tool is on. the tablet when X server started. Label 0.8.7-2.
 
May 21, 2010 - Normalized the 6th valuator to 2048. this valuator reports absolute wheel or ArtPen rotation. they are normally considered as the tangential pressure<. Updated wacomcpl for button options. Added support for Intuos4WL (USB Endpoint) in the kernel. Added support for Intuos4WL in xdrv (both bluetooth and USB). Label 0.8.7-1.
 
May 17, 2010 - Restructured supported kernels. Removed kernels 2.6.9 to 2.6.15 support. Added support for Cintiq 21UX2. Label 0.8.7.
 
May 12, 2010 - Updated configure.in to disable wacom_drv and its utilities. and tell user to build wacom_drv from xf86-input-wacom for. Xorg server 1.7 or later. Label 0.8.6-2.
 
April 30, 2010 - Updated wacom_sys.c for system resume. Reset wcmTouchpadMode in xf86WcmSoftOutEvent. Added wcmCustomDebug.c for extra debug information. - by Stefan Schimanski. Label 0.8.6-1.
 
April 9, 2010 - Updated calibration in wacomcpl (Stefan Schimanski). Updated wacom_wac.c for 2.6.24+. - by Dmitry Torokhov . Updated pressure normalization. Updated ISDV4 data parsing routine. Updated wacom man page. Updated linuxwacom web pages. Label 0.8.6.
 
March 26, 2010 - Updated kernel driver for 2FGT and Bamboo touch. Added 2.6.30 path for kernels 2.6.30 and later. Normalized pressure sensitivity to 2048. Updated 2FGT gesture with Chris Bagwell's suggestion. Label 0.8.5-12.
 
March 10, 2010 - Add HAL_CFLAGS to CFLAGS. - by Pedro Gimeno . Retrieve tablet_id early on in wcmValidateDevice. Call getRange for both touch and pad, whichever comes the first. - by Chris Bagwell . Fixed a keystroke bug for non-core mode of older Xorgs. - by Stefan Schimanski. Added wacom XRandR daemon to support RandR settting. - by Takashi Iwai . Add modifiers (right) to wcmAction.c. Fixed a copy/paste error in the license statement. Support kernel 2.6.33. Cleaned kernel drivers for 2FGT. Label 0.8.5-11.
 
February 12, 2010 - Updated Bamboo series support in the kernel and X drivers. - by Jason Childs . Support at least 7 buttons for each tool. - by Alexia Death . Avoid lose of duplicated second finger data in wacom_wac. - by Chris Bagwell . Label 0.8.5-10.
 
December 30, 2009 - Incorporated Ayuthia's Bamboo P&T patch -34. - submitted by Favux . Fixed some kernel misplacement. Fixed a protocol4 mouse button click issue. Label 0.8.5-9.
 
December 22, 2009 - Added max and resolution for local tool. Use linuxwacom.fdi gathered from Ubuntu forum. - modified by Kory Prince and cyberfish. - submitted by Favux . Merged Nicholas Hirsch's Intuos4 OLED Support. - Patch ID 2878608 at Tracker. Fixed tablet rotate bug reported by Favux. Label 0.8.5-8.
 
December 15, 2009 - Updated serial Tablet PCs support. Added 5 new Bamboo tablets support. - kernel patch submitted by K Gingerich. - xorg by Enrico Ros <enrico.ros@gmail.com. Label 0.8.5-7.
 
December 8, 2009 - Merged src/2.6.28 into src/2.6.27 so we have less files to worry. Updated src/2.6.27 to version 1.52 in the kernel tree. Removed src/2.6.28. Support new serial Tablet PCs. Label 0.8.5-6.
 
November 30, 2009 - Fixed a kernel driver bug for E3. Updated serial ISDv4 support with newer protocol. Support suspend/resume for kernel 2.6.26 and later. Label 0.8.5-5.
 
November 13, 2009 - Allow multiple tools defined with the same type. Label 0.8.5-4.
 
November 10, 2009 - Added right click, scroll, and zoom for two finger touch. Updated kernel driver. Validating tool by retriving device type from kernel driver. Fixed a bug in xsetwacom TWINVIEW option. Fixed a device id issue in xsetwacom TOOLID option. Label 0.8.5-3.
 
October 31, 2009 - Avoid duplicated devices. Validate tool type before adding it. Use struct input_id and struct input_absinfo in wcmUSB.c. - for kernel cross version compatibility support. Support device names with white spaces in xsetwacom and wacomcpl. - for hot-plugged devices. Fine tuned configure.in (tested by Camille Moncelier). Label 0.8.5-1.
 
October 19, 2009 - Added Cap+ (9F) touch support (Camille Moncelier). Added TabletPC (E2 and E3) support. Merged Thomas Jaeger's xidump patch. Merged Peter Hutterer's remove kernel 2.4 support patch. Updated 10-linuxwacom.fdi for touch. Don't allow HAL add tools defined in xorg.conf again. Added calibration-only feature to wacomcpl (Oleg Gaier). Fixed a package configuration issue for Xorgs 6.7 - 7.2. Label 0.8.5.
 

2.0 - Frequently Asked Questions

This FAQ is based on the questions that we receive in email. If you have a question that is not answered here, send your email directly to the mailing list.

Index




Who is responsible for this code?

We are. That is, Linux users with Wacom tablets are responsible for the development of this code. John Joganic took up the code in November of 2002 and created this project. The source code was written by at least two dozen individuals, most of them are not directly involved in the project any more. I, Ping Cheng, have assumed the project administrator since 2003. What I ask of you, is to use the drivers and report the problems you encounter.

Is my tablet supported? What about my special stylus?

The main page contains a list of all tablets that are known to be supported.

Why does my cursor move randomly or stay at the top-left cornor?

If you use a USB tablet, it is most probably because you didn't configure the X driver properly. Please refer to Mouse1 for solutions.

If it happens to a serial tablet, please post your problem at general discussion

How do I get the special features of my stylus to work?

There are many different types of styli, mice, and pucks. All of them work to varying degrees. So if you are running into trouble, post a message to the mailing list.

Note, tilt is only supported with protocol V tablets, which include Intuos series and Cintiq 21UX/20WSX/12WX to date (May. 04, 2011). Any other tablets don't have tilt no matter you have the tilt option in your xorg.conf or not.

Is hot plug supported for X intput devices?

X Intput Device Hotplug is not fullly supported at Xorg yet. But, Wacom X driver has implemented a workaround for those who have to unplug/replug the tablet while X is running. To make your tablet work without restarting X server, please switch your virtual terminals after replug your tablet. That is, press Ctrl + Alt + F1 together then release them (screen turns to console); and press Ctrl + Alt + F7 together then release them (screen returns back to normal).

Another workaround made by Aristeu is available at wdaemon. The email message related to this solution can be found at Tablet Hotplugging.

3.0 - Downloads

Stable Packages by Version and Date:

FileDateComment
linuxwacom-0.9.4.tar.bz2-2012-07-20Add Cintiq 22HD support.
linuxwacom-0.9.4.tar.bz2-2012-04-25Add Intuos5 support.
linuxwacom-0.9.3.tar.bz2-2012-01-13Add Cintiq 24HD support.
linuxwacom-0.9.2.tar.bz2-2011-10-18Add LED support for Cintiq 21UX2 and Intuos4.
linuxwacom-0.9.0.tar.bz2-2011-06-20Updated src/xdrv/Makefile.am for SLED11.
linuxwacom-0.8.9.tar.bz2-2011-05-04Some bug fixes. Still support: kernels 2.6.16 up to 2.6.35; Xorg older than 1.7.
linuxwacom-0.8.8-11.tar.bz2-2011-03-03Support: Cintiq 21UX2, DTU-2231 & -1631, and Intuos4 USB Endpoint; kernels 2.6.16 up to 2.6.35; Xorg older than 1.7.
linuxwacom-0.8.6-2.tar.bz2-2010-05-12Support tablets 0xE2, 0xE3, and 0x9F. Support new serial ISDv4 Tablet PCs. Avoid duplicated and invalid devices and types for X server 1.4 and later. Support kernels up to 2.6.35. Add 5 new Bamboo devices.
linuxwacom-0.8.4-4.tar.bz2-2009-11-13Support: Intuos4; kernels up to 2.6.31; Xorg up to 1.6.0.
linuxwacom-0.8.2-2.tar.bz2-2009-01-19Support: USB Tablet PC with and without touch; kernels up to 2.6.28; Bamboo1 and Monarch; new wacomcpl features.
linuxwacom-0.8.0-3.tar.bz2-2008-05-23Support: kernels up to 2.6.25; Keystrokes for both buttons and expresskeys; New tablets: Bamboo series and Cintiq 12WX & 20WSX, and so much more that you can not afford to miss.
linuxwacom-0.7.8-3.tar.bz2-2007-08-15Supports new tablet, Bamboo. Provides prebuilt Wacom X driver and its utility programs for x86_32 and x86_64 systems. Adds many new xsetwacom options.
linuxwacom-0.7.6-4.tar.bz2-2006-12-01Updated xsetwacom and support kernel 2.6.17/18, Intuos3 4x6 and on-the-fly tablet rotation.
linuxwacom-0.7.4-3.tar.bz2-2006-06-19Supports kernels 2.6.15/16, 2 new Intuos3 (12x12 and 12x19), and DTF 521.
linuxwacom-0.7.2.tar.bz2-2005-12-21Updated configuration script and support kernel 2.6.13/14, Graphire4, PL710, DTF720, Intuos3 6x11 and Volito2 .
linuxwacom-0.7.0-1.tar.bz2-2005-09-23Updated wacomcpl and support 16 buttons for all tools.
linuxwacom-0.7.0-x86-64-1.tar.bz2-2005-09-23Updated wacomcpl and support 16 buttons for all tools.

4.0 - Mini-HOWTO

This section outlines the Wacom Driver updating steps on a Fedora 9 x86 system. It is mainly here for those who don't want to go through the detailed HOWTO. For specific helps on other platforms/distributors, search the distributor's disscussion forum; search the general discussion list; or google with the key words of "your platform, your distributor, linux, and wacom" will most probably bring you enough information to get started.

First, download the most recent linuxwacom driver package from Downloading the Code page to your home directory and unpack it:


[jej@ayukawa jej]$ bunzip2 linuxwacom-0.9.5.tar.bz2
[jej@ayukawa jej]$ tar xvf linuxwacom-0.9.5.tar

Note, if you have a Serial tablet and Tablet PC, there is no need to update your kernel driver.

Before updating your system with linuxwacom driver, you need to make sure your Fedora 9 is up to date. To do so, issue yum update. You most likely need to reboot your system to use the updated kernel. The following steps are based on kernel 2.6.26.

After updating your kernel, those of you who have installed other customer kernel drivers, such as nVidia graphic card driver, will need to reinstall the drivers again.

 
[jej@ayukawa jej]$ su
Password:
[root@ayukawa jej]# yum remove linuxwacom
[root@ayukawa jej]# yum install xorg-x11-server-devel
[root@ayukawa jej]# yum install kernel-devel
[root@ayukawa jej]# yum install automake
[root@ayukawa jej]# yum install gcc
[root@ayukawa jej]# yum install libtool
[root@ayukawa jej]# yum install libXi
[root@ayukawa jej]# yum install libXi-devel.i386
[root@ayukawa jej]# yum install ncurses
[root@ayukawa jej]# yum install ncurses-devel
[root@ayukawa jej]# yum install tcl
[root@ayukawa jej]# yum install tcl-devel
[root@ayukawa jej]# yum install tk
[root@ayukawa jej]# yum install tk-devel
[root@ayukawa jej]# cd linuxwacom-0.9.5 
[root@ayukawa linuxwacom-0.9.5]# ./configure --enable-wacom
[root@ayukawa linuxwacom-0.9.5]# make
[root@ayukawa linuxwacom-0.9.5]# cp /lib/modules/`uname -r`/kernel/drivers/usb/input/wacom.ko wacom.ko_`uname -r`
[root@ayukawa linuxwacom-0.9.5]# cp src/2.6.30/wacom.ko /lib/modules/`uname -r`/kernel/drivers/input/tablet
[root@ayukawa linuxwacom-0.9.5]# make install

Then check if there is a file with the word wacom in its name under /etc/udev/rules.d (refer to Wacom Kernel Driver for detailed information). And make certain that the following lines are in the file:

 
BUS=="usb", KERNEL=="event*", SYSFS{bInterfaceNumber}=="00", ENV{WACOM_TYPE}="stylus"
BUS=="usb", KERNEL=="event*", SYSFS{bInterfaceNumber}=="01", ENV{WACOM_TYPE}="touch"

BUS=="usb", KERNEL=="event*", SYSFS{idVendor}=="056a", ENV{WACOM_TYPE}!="touch", SYMLINK+="input/wacom"
BUS=="usb", KERNEL=="event*", SYSFS{idVendor}=="056a", ENV{WACOM_TYPE}=="touch", SYMLINK+="input/wacom-touch"

Now, the driver upgrading part is done. You need to update /etc/X11/xorg.conf file to load the driver. Open /etc/X11/xorg.conf with your favorite editor (vi, gedit, emacs...) and add proper lines as stated at Configuring X driver.

To add a fallback layer to the process, open /etc/inittab in an editor and change id:5:initdefault to id:3:initdefault. ONLY change 5 to 3 in the file of that line! This step is for testing purpose only.

Plug your tablet in if you haven't done so. Reboot your system. When the system is up, login as yourself, and issue startx. If everything works, i.e., cursor follows the pen tip on the tablet, etc, you are done. You can change id:3 back to id:5 in your /etc/inittab now.

Otherwise, post your problem to the general discussion mailing list.

5.0 - Help

Having trouble? Help is available.



Step 1 - Are you using the correct software?

The following configuration is known to work on various platforms. Additionally, the production release recognize and work with all known Wacom tablets.



Step 2 - Have you read the appropriate HOWTO?

The HOWTO is a bit long, but it is comprehensive. If you cannot get your tablet working after going through the entire thing, please let me know so we can update it to better handle your situation.

Step 3 - Who is taking control?

If you are running an USB tablet, you need to read the pages at The USB Kernel Driver to see if your tablet is under Wacom driver's control or not.

Step 4 - Have you tested your tablet's output with wacdump?

The wacdump diagnostic program helps determine whether your tablet is working correctly, partially, or not at all.

Step 5 - Have you tested X's output with xidump?

The xidump diagnostic program shows you exactly what programs like gimp and gsumi are receiving from the XInput subsystem. If gimp is behaving strangely, xidump can tell you if the pressure values are out-of-range, or which buttons are actually pressed and when.

Step 6 - Have you checked the online resources?

There is an FAQ for some of the more general questions. Certainly, you've already been there. There are three mailing lists, including archives. They are linuxwacom-announce, linuxwacom-devel, and linuxwacom-discuss. SourceForge also provides the ability to track bugs and request features. Please report bugs, post feature requests, and commit patches so we can keep track of them and prioritize the development. Forums are available on SourceForge, but the preferred way to be heard is through the linuxwacom-discuss mailing list.

Step 7 - Totally and Completely Stumped?

Send me email, and I'll see what I can do. Please include the word WACOM in the subject field so I can sort it out of the mess that in my inbox. Generally, you will get a faster response (from me even), if you post to the linuxwacom-discuss mailing list.

6.0 - Third Party Developers

For application developers, check the
overview of adding new capabilities to your applications by using a Wacom tablet, or take a look at the overview of Wacom XInput driver. The sample code shows how to get the button and valuator values.

6.1 - Overview for Third Party Developers


There are two main points in an application where modifications may be made to support tablets:

1) Initialization

During initialization you need to determine if a tablet is attached.

If there is a tablet, you need to get static information about the tablet, such as tablet dimensions, coordinate resolution, pressure range, tangential pressure range, and other features.

2) Event Handler

Here, you will get data from the tablet and find information about the tablet device currently in use. The tablet data is used for line rendering or navigation. The device information can be used to change tools or screen cursors. Tablets produce three event types: pointer events, button events, and valuator events.

2a) Button and Pointer events

Tablet button and pointer events are indistinguishable from mouse button and pointer events. Since most applications use these events for drawing and navigation the tablet works transparently.

2b) Valuator events

The real tablet data is contained in valuator events. High resolution X and Y data, pressure, proximity, absolute or relative mode, and other information is available here. This information can be used for advanced navigation, such as using 4D Mouse rotation to rotate an object. It can also be used for advanced line rendering, such as modulation line width with pressure. The descriptions below explain special treatment of valuator events.

Controlling the Driver

To change the driver’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 Adding the InputDevices for examples and a list of available options.

Getting Data From the Driver

The Linux Wacom driver for serial tablet is implemented as an XFree86 Input Extension device. The USB tablet is first loaded through wacom.o in the kernel and then communicated with the XFree86 module, xf86wacom.o, to fulfill the tablet events.

Device Stylus handles all kinds of the pens, such as the Grip Pen, AirBrush, InkingPen, etc.

Device Cursor handles all of the pucks, such as the 4D Mouse, 2D Mouse, Lens Cursor, etc.

Device Eraser handles the eraser button of a pen or airbrush device.

The driver sends events through the XFree86 event queue to applications. The Wacom tablet sends several types of events to the XFree86 event queue. The most immediately obvious are pointer and button events, which can be captured by applications to determine the current location and active buttons. Sample code shows how these values are defined.

The valuators are reported as follow:

  • X position
  • Y position
  • Pressure
  • Tilt X; or rotation for 4D mouse; or Tablet Left Menu strip (Intuos3 and Cintiq 21UX)
  • Tilt Y; or wheel for 4D mouse; or Tablet Right Menu strip (Intuos3 and Cintiq 21UX)
  • Airbrush Wheel position; or Marker Pen rotation (Intuos3 and Cintiq 21UX); or Touch Ring (Bamboo)

Coordinate Processing

Features That Have Been Around for a Long Time

Pressure, Eraser, and Tilt are features that have been around for some time. A large installed base of tablets support these capabilities and, if you have not already done so, you can increase the power and performance of your application by implementing these features.

Pressure

There are many obvious uses for pressure. It can be used to 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 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.

Eraser

The obvious purpose of the eraser is to use it as an erasing tool. But you can change the function of the eraser to perform more advanced tasks. Using the stylus tip in conjunction with the eraser, you can easily perform two opposing functions such as dodge and burn, or ink and bleach. The eraser can also function independently as any tool selected in the application.

Tilt

Stylus tilt has several uses, but the most obvious is to change brush shape. A good example of using stylus tilt to change brush shape is the Wacom PenTools Virtual Airbrush tool for the Macintosh or PC. Tilt can also be used for object rotation, or as a joystick. X and Y tilt are in the forth and fifth valuators respectively.

Airbrush Fingerwheel

The Intuos and Intuos2 series tablets have a device that is similar to an airbrush. It not only supports pressure on the tip, but also has a fingerwheel on the side to simultaneously vary a second value. For example, using the fingerwheel, you can vary line width with pressure and ink density.

The value of the fingerwheel on the side of the Airbrush is reported in the sixth valuator. The full range is from 0 when pushed forward to 1023 when pulled back, but be sure to use the value contained in the max_value field of the valuator to get the full range to allow for future changes.

4D Mouse Rotation

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.

4D Mouse axial rotation is reported in the forth valuator. Values in this field range from -900 to 900 in 0.2 degree increments.

4D Mouse Wheel

Uses for the 4D Mouse wheel include zooming, scrolling, and 3D navigation. The 4D Mouse wheel value is reported in the sixth valuator. The wheel varies from 1023 when pushed forward to -1023 when pulled back and snaps to the middle, which is of course zero, when released. But as usual, make sure to use the range reported in min_value and max_value fields of the valuator to allow for future changes.

2D Mouse Wheel

Intuos2 series tablets have 2D Mouse that is similar to a puck. In addition to normal puck parameters, this puck supports a wheel. This wheel reports relative movement value in the sixth valuator. The wheel value is 1 when pushed forward and -1 when pulled back. This wheel event is translated into 4th and 5th button events.

Device ID for Intuos Series and Cintiq 21UX

 
	0x812: /* Intuos2 ink pen */
	0x801: /* Intuos3 Inking pen */
	0x012: /* Inking pen */
	0x20802: /* Intuos4 Inking Pen */

	0x822: /* Intuos Pen */
	0x852: /* Intuos2 Grip Pen */
	0x842: /* Designer Pen */
	0x823: /* Intuos3 Grip Pen */
	0x813: /* Intuos3 Classic Pen */
	0x885: /* Intuos3 Marker Pen */
	0x022: /* Intuos Pen */
	0x802: /* Intuos4 Grip Pen Eraser */
	0x804: /* Intuos4 Marker Pen */
	0x40802: /* Intuos4 Classic Pen */

	0x832: /* Intuos2 stroke pen */
	0x032: /* Stroke pen */

	0x007: /* 2D Mouse */
	0x094: /* 4D Mouse */
	0x017: /* Intuos3 2D Mouse */
	0x806: /* Intuos4 Mouse */

	0x096: /* Lens cursor */
	0x097: /* Intuos3 Lens cursor */
	0x006: /* Intuos4 Lens cursor */

	0x82A: /* Intuos Eraser */
	0x85A: /* Intuos2 Eraser */
	0x91A: /* Intuos Eraser */
	0xD1A: /* Intuos Eraser */
	0x0FA: /* Intuos Eraser */
	0x82B: /* Intuos3 Grip Pen Eraser */
	0x81B: /* Intuos3 Classic Pen Eraser */
	0x91B: /* Intuos3 Airbrush Eraser */
	0x80c: /* Intuos4 Marker Pen Eraser */
	0x80a: /* Intuos4 Grip Pen Eraser */
	0x4080a: /* Intuos4 Classic Pen Eraser */
	0x90a: /* Intuos4 Airbrush Eraser */

	0x112: /* Airbrush */
	0x912: /* Intuos2 Airbrush */
	0xD12: /* Intuos Airbrush */
	0x913: /* Intuos3 Airbrush */
	0x902: /* Intuos4 Airbrush */

Device ID for all the other tablets

 
	0x002: /* pen */
	0x006: /* cursor */
	0x00A: /* eraser */
	0x003: /* touch */
	0x00F: /* pad */

6.2 - Sample Code



Getting Values Reported from Wacom Devices

The following is a routine of getting valuator data from xidump.c, a program helps users

trobleshooting Wacom X driver. The whole source code can be viewed from xidump.c source


static int RawRunDefault(Display* pDisp, XDeviceInfo* pDevInfo)
{
	XEvent event;
	XAnyEvent* pAny;
	struct timeval tv;
	double dStart, dNow;

	gettimeofday(&tv,NULL);
	dStart = tv.tv_sec + (double)tv.tv_usec / 1E6;

	while (1)
	{
		XNextEvent(pDisp,&event);

		pAny = (XAnyEvent*)&event;
		/* printf("event: type=%s\n",GetEventName(pAny->type)); */

		/* display time */
		gettimeofday(&tv,NULL);
		dNow = tv.tv_sec + (double)tv.tv_usec / 1E6;
		printf("%.8f: ",(dNow - dStart));

		if (pAny->type == gnInputEvent[INPUTEVENT_PROXIMITY_IN])
			printf("Proximity In\n");
		else if (pAny->type == gnInputEvent[INPUTEVENT_PROXIMITY_OUT])
			printf("Proximity Out\n");
		else if (pAny->type == gnInputEvent[INPUTEVENT_FOCUS_IN])
			printf("Focus In\n");
		else if (pAny->type == gnInputEvent[INPUTEVENT_FOCUS_OUT])
			printf("Focus Out\n");
		else if (pAny->type == gnInputEvent[INPUTEVENT_MOTION_NOTIFY])
		{
			XDeviceMotionEvent* pMove = (XDeviceMotionEvent*)pAny;

			/* ID and serial number are not reported from wacom_drv 
			 * due to valuator backward compatibility concern
			 */
			int v = (pMove->axis_data[4]&0xffff0000) | 
					((pMove->axis_data[5]&0xffff0000)>>16);

			printf("Motion: x=%+6d y=%+6d p=%4d tx=%+4d ty=%+4d "
				"w=%+5d ID: %4d Serial: %11d \n",
					pMove->axis_data[0],
					pMove->axis_data[1],
					pMove->axis_data[2],
					(short)(pMove->axis_data[3]&0xffff),
					(short)(pMove->axis_data[4]&0xffff),
					(short)(pMove->axis_data[5]&0xffff),
					(pMove->axis_data[3]&0xffff0000)>>16,
					v);

		}
		else if ((pAny->type == gnInputEvent[INPUTEVENT_BTN_PRESS]) ||
				(pAny->type == gnInputEvent[INPUTEVENT_BTN_RELEASE]))
		{
			XDeviceButtonEvent* pBtn = (XDeviceButtonEvent*)pAny;
			printf("Button: %d %s\n",pBtn->button,
					pAny->type == gnInputEvent[INPUTEVENT_BTN_PRESS] ?
						"DOWN" : "UP");
		}
		else
		{
			printf("Event: %s\n",GetEventName(pAny->type));
		}

		/* flush data to terminal */
		fflush(stdout);
	}

	return 0;
}

Utilitizing Intuos3 or Cintiq 21UX Menu Strips

Mats Johannesson (aka Voluspa) offered an example for using the Tablet Menus and Touch

Strips of Intuos3 and Cintiq 21UX tablets. Listed below is his version 0.09.

Mats' program has been obsolete since we now support keystrokes through xsetwacom.

/* Version 0.09 4 April 2005
 *
 * To compile (example in 2 steps):
 * gcc -O2 -fomit-frame-pointer -c expresskeys.c
 * gcc -s -L/usr/X11R6/lib -o expresskeys expresskeys.o -lX11 -lXi -lXext -lXtst
 *
 *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 * Important: If you use the linuxwacom-0.6.8 or later
 * released versions you must change the pad statement in X config
 * file to:
 *
 * Section "ServerLayout"
 * [...]
 * InputDevice "pad" # Intuos3, Cintiq 21UX or Graphire 4. It must NOT send core event
 * [...]
 * EndSection
 *
 * See: http://linuxwacom.sourceforge.net/index.php/howto/srvlayout
 *
 * If you use the old pad statement, any pad button press will jump the
 * mouse cursor to the upper left corner (0,0) when another tool isn't
 * in proximity.
 *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *
 * Run example: expresskeys pad &
 * Which will push it into the background. It is safe to close the terminal
 * afterwards. Oh, and X _must_ be running... The name, "pad" here, is
 * how it's called in xorg.conf (the "Identifier" option).
 * 
 * Key configuration is easy to change in the "user config area" below.
 * Use the "xev" program to find keycodes or look them up somewhere...
 * I've set the Wacom Intuos3 defaults on both sides, which is:
 * Shift, Alt, Control and Space. Touch strips are mildly supported.
 */

/* ++++++++++ Begin user config area ++++++++++ */

#define HANDLE_PEN 0	/* Main switch: 1 = yes handle a pen, 0 = no please */
#define PEN_NAME "stylus"	/* Identifier name as configured in xorg.conf */
#define PEN_MODE "Absolute"	/* The mode we should expect the pen to be in */
			/* when starting this program. Default usually */
			/* is Absolute. The "mousy" feeling is Relative */

/* Now, on to the next area. Please walk this way madam!		*/
/*----------------------------------------------.			*/
struct program {		/*		|			*/
	char *class_name;	/*		|			*/
	int handle_touch;	/*		|			*/
	int l_touch_up;		/*		|			*/
	int l_touch_up_plus;	/*		|			*/
	int l_touch_down;	/*		|			*/
	int l_touch_down_plus;	/*		|			*/
	int r_touch_up;		/*		|			*/
	int r_touch_up_plus;	/*		|			*/
	int r_touch_down;	/*		|			*/
	int r_touch_down_plus;	/*		|			*/
	int key_9;		/*		|			*/
	int key_9_plus;		/*		|			*/
	int key_10;		/*		|			*/
	int key_10_plus;	/*		|			*/
	int key_11;		/*	Nothing to see here		*/
	int key_11_plus;	/*	madam... Please move		*/
	int key_12;		/*	along.				*/
	int key_12_plus;	/*		|			*/
	int key_13;		/*		|			*/
	int key_13_plus;	/*		|			*/
	int key_14;		/*		|			*/
	int key_14_plus;	/*		|			*/
	int key_15;		/*		|			*/
	int key_15_plus;	/*		|			*/
	int key_16;		/*		|			*/
	int key_16_plus;	/*		|			*/
} prog_list[] = {		/*		|			*/
				/*		|			*/
/*-------------------------------.		V			*/
/*					Go further down, past
 * 					these comments for the
 * 					real configuration area.
 */
/* Left ExpressKey Pad
------------ 
|  |   |   |		Wacom Intuos3 defaults are:
|  | 9 | T |
|11|---| O |		Key 9  = (left) Shift	= keycode 50
|  |10 | U |		Key 10 = (left) Alt	= keycode 64
|------| C |		Key 11 = (left) Control	= keycode 37
|  12  | H |		Key 12 = Space		= keycode 65
------------
*/
/* Right ExpressKey Pad
------------ 
|   |   |  |		Wacom Intuos3 defaults are:
| T |13 |  |
| O |---|15|		Key 13 = (left) Shift	= keycode 50
| U |14 |  |		Key 14 = (left) Alt	= keycode 64
| C |------|		Key 15 = (left) Control	= keycode 37
| H |  16  |		Key 16 = Space		= keycode 65
------------
*/

/* The top configuration (named "default") will be used with
 * all programs and their windows that are not specified in a
 * separate configuration below this one. Default keycodes are
 * the now famous Wacom Intuos3 ones. I've also set totally
 * non-destructive touch strip keys (only used if handle_touch
 * is altered to a "1" - without quotes) which are: Arrow-keys
 * Up/Down on the left strip and Arrow-keys Right/Left on the
 * right strip. Change direction of the movement by switching
 * the _up and _down values.
 * 
 * If you want a key to do pen mode changes, use the value 999
 * under the corresponding keylabel. To be able to switch mode
 * anywhere, each configuration must contain one 999 definition.
 * And, of course, the main HANDLE_PEN definition above must
 * first be set to "1" - without quotes.
 * 
 * Please don't alter or remove the commas (,) after the keycodes.
 * They _must_ be there just as written.
 */
/*	Name	handle_touch */
{"default",	0,
/*		l_touch_up	l_touch_up_plus	l_touch_down	l_touch_down_plus */
		98,		0,		104,		0,
/*		r_touch_up	r_touch_up_plus	r_touch_down	r_touch_down_plus */
		102,		0,		100,		0,
/*		key_9		key_9_plus	key_10		key_10_plus */
		50,		0,		64,		0,
/*		key_11		key_11_plus	key_12		key_12_plus */
		37,		0,		65,		0,
/*		key_13		key_13_plus	key_14		key_14_plus */
		50,		0,		64,		0,
/*		key_15		key_15_plus	key_16		key_16_plus */
		37,		0,		65,		0	},

/*
 * Gimp has the touch strips turned on by default. The keycodes are:
 * 20 = "+" = Gimp Zoom In. Left/Right touch strip up motion
 * 61 = "-" = Gimp Zoom Out. Left/Right touch strip down motion
 * Change direction of the movement by switching _up and _down values.
 */
/*	Name	handle_touch */
{"Gimp",	1,
/*		l_touch_up	l_touch_up_plus	l_touch_down	l_touch_down_plus */
		20,		0,		61,		0,
/*		r_touch_up	r_touch_up_plus	r_touch_down	r_touch_down_plus */
		20,		0,		61,		0,
/*		key_9		key_9_plus	key_10		key_10_plus */
		50,		0,		64,		0,
/*		key_11		key_11_plus	key_12		key_12_plus */
		37,		0,		65,		0,
/*		key_13		key_13_plus	key_14		key_14_plus */
		50,		0,		64,		0,
/*		key_15		key_15_plus	key_16		key_16_plus */
		37,		0,		65,		0	},

/* This is my private definition for the 3D program blender...
 */
/*	Name	handle_touch */
{"Blender",	1,
/*		l_touch_up	l_touch_up_plus	l_touch_down	l_touch_down_plus */
		102,		0,		100,		0,
/*		r_touch_up	r_touch_up_plus	r_touch_down	r_touch_down_plus */
		98,		0,		104,		0,
/*		key_9		key_9_plus	key_10		key_10_plus */
		37,		0,		9,		0,
/*		key_11		key_11_plus	key_12		key_12_plus */
		50,		0,		23,		0,
/*		key_13		key_13_plus	key_14		key_14_plus */
		50,		30,		30,		0,
/*		key_15		key_15_plus	key_16		key_16_plus */
		999,		0,		65,		0	},

/* I feel that an xterm is too important a window to have _any_
 * interference from the pad. But observe that I want to be able
 * to switch pen mode even with such a window in focus.
 */
/*	Name	handle_touch */
{"XTerm",	0,
/*		l_touch_up	l_touch_up_plus	l_touch_down	l_touch_down_plus */
		0,		0,		0,		0,
/*		r_touch_up	r_touch_up_plus	r_touch_down	r_touch_down_plus */
		0,		0,		0,		0,
/*		key_9		key_9_plus	key_10		key_10_plus */
		0,		0,		0,		0,
/*		key_11		key_11_plus	key_12		key_12_plus */
		0,		0,		0,		0,
/*		key_13		key_13_plus	key_14		key_14_plus */
		0,		0,		0,		0,
/*		key_15		key_15_plus	key_16		key_16_plus */
		999,		0,		0,		0	},

/* And that's how it's done. Just copy a section and tweak the
 * settings for a new program. Your machine speed and memory
 * sets the limit ;-)
 */
/* ++++++++++ End user config area ++++++++++ */

};
#define NUM_LIST (sizeof prog_list / sizeof prog_list[0])

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/extensions/XInput.h>
#include <X11/extensions/XTest.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

#define EXIT_OK 1
#define EXIT_KO 0
#define INVALID_EVENT_TYPE -1
#define TOGGLE_PEN 999

Bool check_xinput (Display *display);
int find_device_info(Display *display, char *name, Bool only_extended);
int register_events(Display	*display, XDeviceInfo *info, char *dev_name);
int use_events(Display *display);
int toggle_pen_mode(Display *display, char *name);

int pen_mode = 1;
int elder_rotation = 4097;
int old_rotation = 4097;
int elder_throttle = 4097;
int old_throttle = 4097;

int main (int argc, char *argv[])
{

   if (PEN_MODE == "Absolute") {
	pen_mode = Absolute;
   } else {
	pen_mode = Relative;
   }

   Display *display = XOpenDisplay(NULL);

   if (display == NULL) {
	fprintf(stderr, "Can not connect to X-Server\n");
	return EXIT_KO;
   }

   int event_base, error_base;
   int major_version, minor_version;
   if (!XTestQueryExtension (display, &event_base, &error_base,
		&major_version, &minor_version)) {
	fprintf (stderr, "XTest extension not supported on server\n");
	XCloseDisplay(display);
	return EXIT_KO;
   }

   if (!check_xinput(display)) {
	fprintf(stderr, "%s extension not present\n", INAME);
	XCloseDisplay(display);
	return EXIT_KO;
   }

   if (argc < 2) {
	fprintf(stderr, "Usage: expresskeys \n");
	fprintf(stderr, "Example: expresskeys pad &\n");
	XCloseDisplay(display);
	return EXIT_KO;
   }

   XDeviceInfo	*info;
   int		idx = 1;

   info = find_device_info(display, argv[idx], True);

   if (!info) {
	fprintf(stderr, "Unable to find device %s\n", argv[idx]);
	XCloseDisplay(display);		
	return EXIT_KO;
   }

   if (register_events(display, info, argv[idx])) {
	use_events(display);
   } else {
	fprintf(stderr, "No event registered...\n");
	XCloseDisplay(display);
	return EXIT_KO;
   }

   XCloseDisplay(display);
   return EXIT_OK;
}

Bool check_xinput (Display *display)
{
   XExtensionVersion *version;
   Bool present;
	
   version = XGetExtensionVersion (display, INAME);
	
   if (version && (version != (XExtensionVersion*) NoSuchExtension)) {
	present = version->present;
	XFree(version);
	return present;
   } else {
	return False;
   }
}	

int find_device_info(Display *display, char *name, Bool only_extended)
{
   XDeviceInfo	*devices; 
   int		loop;
   int		num_devices;
   int		len = strlen(name);
   Bool		is_id = True;
   XID		id = 0;
    
   for(loop=0; loopid);

   if (!device) {
	fprintf(stderr, "Unable to open device %s\n", dev_name);
	return 0;
   }

   if (device->num_classes > 0) {
	for (ip = device->classes, i=0; inum_classes; ip++, i++) {
	   switch (ip->input_class) {

		case ButtonClass:
		DeviceButtonPress(device, button_press_type, event_list[number]); number++;
		DeviceButtonRelease(device, button_release_type, event_list[number]); number++;
		break;

		case ValuatorClass:
		DeviceMotionNotify(device, motion_type, event_list[number]); number++;
		break;

		default:
		break;
	   }
	}
	if (XSelectExtensionEvent(display, root_win, event_list, number)) {
	   fprintf(stderr, "Error selecting extended events\n");
	   return 0;		
	}
   }
   return number;	
}

int use_events(Display *display)
{
   XEvent Event;
   while(1) {
	XNextEvent(display, &Event);

	XClassHint *class_hint;
	class_hint = XAllocClassHint();

	Window focus_window = None;
	int focus_state;

	Window root, parent;
	Window *children;
	unsigned int num_children;

	struct program *p;
	int in_list = 0;

	XGetInputFocus(display, &focus_window, &focus_state);
	XQueryTree(display, focus_window, &root, &parent, &children, &num_children);
	XGetClassHint(display, focus_window, class_hint);

	if ((!class_hint->res_class) && (parent) && (focus_window != root)){
	   XFree(class_hint->res_class);
	   XFree(class_hint->res_name);
	   XGetClassHint(display, parent, class_hint);
	}

	if ((focus_window == root) || (class_hint->res_class == NULL)){
	   p = prog_list;
	}
	else {
	   for (p = prog_list; p < prog_list + NUM_LIST; p++)
		if (strcmp (class_hint->res_class, p->class_name) == 0){
		   in_list = 1;
		   break;
		}
	}
		
	XFree(class_hint->res_class);
	XFree(class_hint->res_name);
	if (children) XFree((char *)children);

	if (!in_list){
	   p = prog_list;
	}

	if (Event.type == motion_type) {

	   if (p->handle_touch){
		int rotation;
		int throttle;
	
		XDeviceMotionEvent *motion = (XDeviceMotionEvent *) &Event;

		rotation = motion->axis_data[3];
		throttle = motion->axis_data[4];

		if (rotation > 1){
		   if ((rotation < old_rotation) && (old_rotation <= elder_rotation)){
			if (p->l_touch_up){
			   XTestFakeKeyEvent(display, p->l_touch_up, True, CurrentTime);
			   if (p->l_touch_up_plus){
				XTestFakeKeyEvent(display, p->l_touch_up_plus, True, CurrentTime);
				XTestFakeKeyEvent(display, p->l_touch_up_plus, False, CurrentTime);
			   }
			   XTestFakeKeyEvent(display, p->l_touch_up, False, CurrentTime);
			}
		   }
		   else if ((rotation > old_rotation) && (old_rotation >= elder_rotation)){
			if (p->l_touch_down){
			   XTestFakeKeyEvent(display, p->l_touch_down, True, CurrentTime);
			   if (p->l_touch_down_plus){
				XTestFakeKeyEvent(display, p->l_touch_down_plus, True, CurrentTime);
				XTestFakeKeyEvent(display, p->l_touch_down_plus, False, CurrentTime);
			   }
			   XTestFakeKeyEvent(display, p->l_touch_down, False, CurrentTime);
			}
		   }
		   elder_rotation = old_rotation;
		   old_rotation = rotation;
		}

		if (throttle > 1){
		   if ((throttle < old_throttle) && (old_throttle <= elder_throttle)){
			if (p->r_touch_up){
			   XTestFakeKeyEvent(display, p->r_touch_up, True, CurrentTime);
			   if (p->r_touch_up_plus){
				XTestFakeKeyEvent(display, p->r_touch_up_plus, True, CurrentTime);
				XTestFakeKeyEvent(display, p->r_touch_up_plus, False, CurrentTime);
			   }
			   XTestFakeKeyEvent(display, p->r_touch_up, False, CurrentTime);
			}
		   }
		   else if ((throttle > old_throttle) && (old_throttle >= elder_throttle)){
			if (p->r_touch_down){
			   XTestFakeKeyEvent(display, p->r_touch_down, True, CurrentTime);
			   if (p->r_touch_down_plus){
				XTestFakeKeyEvent(display, p->r_touch_down_plus, True, CurrentTime);
				XTestFakeKeyEvent(display, p->r_touch_down_plus, False, CurrentTime);
			   }
			   XTestFakeKeyEvent(display, p->r_touch_down, False, CurrentTime);
			}
		   }
		   elder_throttle = old_throttle;
		   old_throttle = throttle;
		}
	   }
	}

	if (Event.type == button_press_type) {

	   XDeviceButtonEvent *button = (XDeviceButtonEvent *) &Event;

	   switch (button->button) {
		case 9:
		   if (p->key_9 == TOGGLE_PEN)
			if (HANDLE_PEN)
			   toggle_pen_mode(display, PEN_NAME);
			else
			   break;
		   else if (p->key_9)
			XTestFakeKeyEvent(display, p->key_9, True, CurrentTime );
		   if (p->key_9_plus)
			XTestFakeKeyEvent(display, p->key_9_plus, True, CurrentTime );
		   else
			break;
		   break;
		case 10:
		   if (p->key_10 == TOGGLE_PEN)
			if (HANDLE_PEN)
			   toggle_pen_mode(display, PEN_NAME);
			else
			   break;
		   else if (p->key_10)
			XTestFakeKeyEvent(display, p->key_10, True, CurrentTime );
		   if (p->key_10_plus)
			XTestFakeKeyEvent(display, p->key_10_plus, True, CurrentTime );
		   else
			break;
		   break;
		case 11:
		   if (p->key_11 == TOGGLE_PEN)
			if (HANDLE_PEN)
			   toggle_pen_mode(display, PEN_NAME);
			else
			   break;
		   else if (p->key_11)
			XTestFakeKeyEvent(display, p->key_11, True, CurrentTime );
		   if (p->key_11_plus)
			XTestFakeKeyEvent(display, p->key_11_plus, True, CurrentTime );
		   else
			break;
		   break;
		case 12:
		   if (p->key_12 == TOGGLE_PEN)
			if (HANDLE_PEN)
			   toggle_pen_mode(display, PEN_NAME);
			else   
			   break;
		   else if (p->key_12)
			XTestFakeKeyEvent(display, p->key_12, True, CurrentTime );
		   if (p->key_12_plus)
			XTestFakeKeyEvent(display, p->key_12_plus, True, CurrentTime );
		   else
			break;
		   break;
		case 13:
		   if (p->key_13 == TOGGLE_PEN)
			if (HANDLE_PEN)
			   toggle_pen_mode(display, PEN_NAME);
			else
			   break;
		   else if (p->key_13)
			XTestFakeKeyEvent(display, p->key_13, True, CurrentTime );
		   if (p->key_13_plus)
			XTestFakeKeyEvent(display, p->key_13_plus, True, CurrentTime );
		   else
			break;
		   break;
		case 14:
		   if (p->key_14 == TOGGLE_PEN)
			if (HANDLE_PEN)
			   toggle_pen_mode(display, PEN_NAME);
			else
			   break;
		   else if (p->key_14)
			XTestFakeKeyEvent(display, p->key_14, True, CurrentTime );
		   if (p->key_14_plus)
			XTestFakeKeyEvent(display, p->key_14_plus, True, CurrentTime );
		   else
			break;
		   break;
		case 15:
		   if (p->key_15 == TOGGLE_PEN)
			if (HANDLE_PEN)
			   toggle_pen_mode(display, PEN_NAME);
			else
			   break;
		   else if (p->key_15)
			XTestFakeKeyEvent(display, p->key_15, True, CurrentTime );
		   if (p->key_15_plus)
			XTestFakeKeyEvent(display, p->key_15_plus, True, CurrentTime );
		   else
			break;
		   break;
		case 16:
		   if (p->key_16 == TOGGLE_PEN)
			if (HANDLE_PEN)
			   toggle_pen_mode(display, PEN_NAME);
			else
			   break;
		   else if (p->key_16)
			XTestFakeKeyEvent(display, p->key_16, True, CurrentTime );
		   if (p->key_16_plus)
			XTestFakeKeyEvent(display, p->key_16_plus, True, CurrentTime );
		   else
			break;
		   break;			
		default:
		   break;
	   }
	}

	if (Event.type == button_release_type) {
	   XDeviceButtonEvent *button = (XDeviceButtonEvent *) &Event;

           switch (button->button) {
		case 9:
		   if (p->key_9 == TOGGLE_PEN)
			break;
		   else if (p->key_9_plus)
			XTestFakeKeyEvent(display, p->key_9_plus, False, CurrentTime );
		   if (p->key_9)
			XTestFakeKeyEvent(display, p->key_9, False, CurrentTime );
		   else
			break;
		   break;
		case 10:
		   if (p->key_10 == TOGGLE_PEN)		
			break;
		   else if (p->key_10_plus)
			XTestFakeKeyEvent(display, p->key_10_plus, False, CurrentTime );
		   if (p->key_10)
			XTestFakeKeyEvent(display, p->key_10, False, CurrentTime );
		   else
			break;
		   break;
		case 11:
		   if (p->key_11 == TOGGLE_PEN)
			break;
		   else if (p->key_11_plus)
			XTestFakeKeyEvent(display, p->key_11_plus, False, CurrentTime );
		   if (p->key_11)
			XTestFakeKeyEvent(display, p->key_11, False, CurrentTime );
		   else
			break;
		   break;
		case 12:
		   if (p->key_12 == TOGGLE_PEN)
			break;
		   else if (p->key_12_plus)
			XTestFakeKeyEvent(display, p->key_12_plus, False, CurrentTime );
		   if (p->key_12)
			XTestFakeKeyEvent(display, p->key_12, False, CurrentTime );
		   else
			break;
		   break;
		case 13:
		   if (p->key_13 == TOGGLE_PEN)
			break;
		   else if (p->key_13_plus)		
			XTestFakeKeyEvent(display, p->key_13_plus, False, CurrentTime );
		   if (p->key_13)
			XTestFakeKeyEvent(display, p->key_13, False, CurrentTime );
		   else
			break;
		   break;
		case 14:
		   if (p->key_14 == TOGGLE_PEN)
			break;
		   else if (p->key_14_plus)
			XTestFakeKeyEvent(display, p->key_14_plus, False, CurrentTime );
		   if (p->key_14)
			XTestFakeKeyEvent(display, p->key_14, False, CurrentTime );
		   else
			break;
		   break;
		case 15:
		   if (p->key_15 == TOGGLE_PEN)
			break;
		   else if (p->key_15_plus)
			XTestFakeKeyEvent(display, p->key_15_plus, False, CurrentTime );
		   if (p->key_15)
			XTestFakeKeyEvent(display, p->key_15, False, CurrentTime );
		   else
			break;
		   break;
		case 16:
		   if (p->key_16 == TOGGLE_PEN)
			break;
		   else if (p->key_16_plus)
			XTestFakeKeyEvent(display, p->key_16_plus, False, CurrentTime );
		   if (p->key_16)
			XTestFakeKeyEvent(display, p->key_16, False, CurrentTime );
		   else
			break;
		   break;
		default:
		   break;
	   }
	}
   }
}

int toggle_pen_mode(Display *display, char *name)
{
   XDeviceInfo	*info;
   XDevice		*device;

   info = find_device_info(display, PEN_NAME, True);

   if (!info) {
	fprintf(stderr, "unable to find device %s\n", PEN_NAME);
	return 0;
   }

   if (pen_mode == Absolute) {
	pen_mode = Relative;
   } else {
	pen_mode = Absolute;
   }

   device = XOpenDevice(display, info->id);

   if (device) {
	XSetDeviceMode(display, device, pen_mode);
	return 0;
   } else {
	fprintf(stderr, "Unable to open device %s\n", PEN_NAME);
	return 0;
   }
}

6.3 - Wacom XInput Driver

The xf86Wacom driver is divided into seven distinct pieces.

  • XInput application interface
  • module management and configuration
  • data path and event notification
  • raw data filter
  • supporting user space configuration
  • compatibility operations for 3.x and 4.x versions of XFree86
  • device-specific functionality

xf86Wacom.c

The core elements of the driver, particularly the functions necessary to implement the XInput interface are contained in xf86Wacom.c. Here, the devices declared in the InputDevice sections of XF86Config are opened, closed, and configured. This is also where the device capabilities are declared and valuator ranges are set.

wcmConfig.c

All options supported by the driver are queried and set in wcmConfig.c. This includes values like Threshold, BaudRate, and Suppress. Some parameters are global to all tablets, while others are specific to a single tablet. Most parameters apply to a particular class of tool for a given tablet. It is also possible to subdivide the tablet into discrete regions, and devices may be assigned serial numbers to uniquely identify a particular tool.

Code for loading and unloading the module is also contained in wcmConfig.c. The driver can be loaded into memory as a module or compiled directly into the XFree86 libraries. Additionally, this driver can be compiled for the 3.x and 4.x version of XFree86 as well as X.org 6.x and 7.x. Some care has been taken to preserve the ability to compile for 3.x; however, actual testing is not generally performed. For all intents and purposes, only the 4.x version of XFree86 and X.org are actively supported.

wcmCommon.c

The functionality which implements the data path, filters, and event notifications is located in wcmCommon.c. In principal, all devices should report their data to the xf86WcmEvent function in precisely the same way: unfiltered, but within valid ranges, and normalized. As an example, some devices report pressure internally as -128 to 127; normalized pressure values would be from 0 to 255 for such a device. Once in the data path, filtering for suppression, rotations, ZAxisMapping, and the like are performed as needed. Ultimately, the event is dispatched to the XInput subsystem and on to the appropriate client applications.

wcmFilter.c

Pressure sensitivity is one of the essential feature of Wacom tablet. This code enables user to customize pressure output to their own preference, such as firm, mild, soft. This code also enables user to filter tablet raw data. Changing the RawSample parameter is not recommanded since it normally reduces the data rate which reduces data accuracy. RawSample may be used to deal with jitter of unknown cause. If this is your case, you most probably need to test a range of RawSamples to figure out the most suitable one.

wcmXCommand.c

To facilitate the configuration and access to the driver from user space, a command line utility program called xsetwacom is introduced. wcmXCommand.c is the driver side interface to receive and reply to xsetwacom calls. Every command in xsetwacom is processed here before it goes into the driver to set or retrieve information. Configuration data is validated here.

wcmCompat.c

In order to maintain compatibility with the XFree86 3.x build, the names of many routines are aliased using macros or implemented depending on the platform and version. As an example, xf86WcmWait is implemented differently for both major versions of XFree86. In contrast, xf86WcmOpenTablet is simply aliased to xf86OpenSerial for version 4.x while fully implemented using the low-level open call in version 3.x.

wcmSerial.c, wcmUSB.c, and wcmISDV4.c

At present, there are three different classes of tablets: auto-detecting serial tablets, Linux Input System based USB tablets, and ISDV4 protocol based serial Tablet PC's. Each tablet class implements a detection, initialization, and device reading function. Using this model, new device classes can be added easily.

7.0 - ChangeLog

  • 2011-06-20 Ping Cheng <pingc@wacom.com>
    * Add "-lc" to Makefile.am (Daniel Grafe)
    * Add "ignore the first two USB motion events" back.
    Otherwise the cursor jumps at the first time when the tool is in prox
    * Updated wacdump.php with input from Patrick Horgan and David Foley
    * Updated "Building wacom driver On RHEL 5" page by Sylvain Giasson
    * Label 0.9.0
  • 2011-04-27 Ping Cheng <pingc@wacom.com>
    * Put wacom_ioctl back for OLED (Eduard Hasenleithner)
    * Fixed error path in wacom_probe (Alexander Strakh)
    * Updated wacomcfg.c for touch device (David Foley)
    * Some minor kernel updated
    * Label 0.8.9
  • 2011-03-03 Ping Cheng <pingc@wacom.com>
    * Always retrieve (x,y) from the kernel the first time in prox for non-pad tool
    * Don't read data while driver loading/unloading to avoid a hotplugging race condition
    * Don't turn device off when getting read errors
    * Fixed a missing tool type for Cintiq in 2.6.16/wacom_wac.c
    * Label 0.8.8-11
  • 2010-10-12 Ping Cheng <pingc@wacom.com>
    * Fixed a kernel bug for Cintiq 21UX2 pressure (Aristeu Rozanski <aris@redhat.com>)
    * Fixed a print format error in xidump.c (Aristeu Rozanski)
    * Label 0.8.8-10
  • 2010-10-01 Ping Cheng <pingc@wacom.com>
    * Specify the tools supported by Intuos and CintiqV5
    series respectively in the kernel
    * Calibration-only wacomcpl has the options to display warnings or
    flashing the crosshairs in red when abnormal (x,y) is detected
    * Enable all tools for X server 1.4 and older and kernel 2.6.24 and older
    * Peter Hutterer's configure message update for newer Xorg
    * Label 0.8.8-9
  • 2010-07-27 Ping Cheng <pingc@wacom.com>
    * Updated kernel driver for 2.6.23 and later
    * Label 0.8.8-8
  • 2010-07-22 Ping Cheng <pingc@wacom.com>
    * Fixed a memory leakage in util/wacomcfg.c (Eldar Firing <eldarf@sf.net>)
    * Replaced usb_buffer_free with usb_free_coherent for 2.6.35
    - by Diego Calleja <diegocg@gmail.com>
    * Removed a few unused routines in xf86Wacom.c
    * Label 0.8.8-7
  • 2010-07-14 Ping Cheng <pingc@wacom.com>
    * Updated udev wacom rules
    * Updated web pages for new devices
    * Added call EVIOCGKEY back in wcmUSB.c
    * Label 0.8.8-6
  • 2010-07-12 Ping Cheng <pingc@wacom.com>
    * Updated configure.in and src/Makefile.am to include xorg server 1.6.5
    * Updated wcmUSB.c to use default nbuttons and npadkeys since kernels
    older than 2.6.24 doesn't return proper keys from EVIOCGKEY
    * Added a new xsetwacom option, isDisplay, to report if the tablet is a
    display tablet or not
    * Label 0.8.8-5
  • 2010-06-29 Ping Cheng <pingc@wacom.com>
    * Updated configure.in and src/Makefile.am for XFree86 servers
    * Updated 2.6.16/wacom_wac.c for kernels older than 2.6.21
    * Added "\" to wacomcpl-exec to continue the partial lines
    * Label 0.8.8-4
  • 2010-06-18 Ping Cheng <pingc@wacom.com>
    * Updated configure.in for older X servers
    * Updated 2.6.16/wacom_wac.c for Cintiq 21UX2
    * Label 0.8.8-3
  • 2010-06-16 Ping Cheng <pingc@wacom.com>
    * Updated wacom_wac.c and wacom_wac.h for DTU-2231 and DTU-1631
    * Updated wacomcpl
    * Label 0.8.8-2
  • 2010-06-11 Ping Cheng <pingc@wacom.com>
    * Fixed a few minor issues
    * Added DTU-2231 support
    * Added DTU-1631 support
    * Label 0.8.8-1
  • 2010-06-07 Ping Cheng <pingc@wacom.com>
    * Fixed free toolarea issue
    * Moved "retrieving tools" from wcmCommon to wcmUSB, where it belongs
    * Initialize common->npadkeys before recounting the keys
    * Label 0.8.8
  • 2010-06-02 Ping Cheng <pingc@wacom.com>
    * Added the xsetwacom manpage
    - by Peter Hutterer <peter.hutterer@redhat.com>
    * Free common, common->toollist, priv->tool, and toolarea
    * Added Application Defined functionality for buttons
    * Retrieve supported tools from the kernel if a tool is on
    the tablet when X server started
    * Label 0.8.7-2
  • 2010-05-21 Ping Cheng <pingc@wacom.com>
    * Normalized the 6th valuator to 2048
    this valuator reports absolute wheel or ArtPen rotation
    they are normally considered as the tangential pressure
    * Updated wacomcpl for button options
    * Added support for Intuos4WL (USB Endpoint) in the kernel
    * Added support for Intuos4WL in xdrv (both bluetooth and USB)
    * Label 0.8.7-1
  • 2010-05-17 Ping Cheng <pingc@wacom.com>
    * Restructured supported kernesl
    * Removed kernels 2.6.9 to 2.6.15 support
    * Added support for Cintiq 21UX2
    * Label 0.8.7
  • 2010-05-12 Ping Cheng <pingc@wacom.com>
    * Updated configure.in to disable wacom_drv and its utilities
    and tell user to build wacom_drv from xf86-input-wacom for
    Xorg server 1.7 or later
    * Label 0.8.6-2
  • 2010-04-30 Ping Cheng <pingc@wacom.com>
    * Updated wacom_sys.c for system resume
    * Reset wcmTouchpadMode in xf86WcmSoftOutEvent
    * Added wcmCustomDebug.c for extra debug information
    - by Stefan Schimanski
    * Label 0.8.6-1
  • 2010-04-09 Ping Cheng <pingc@wacom.com>
    * Updated calibration in wacomcpl (Stefan Schimanski)
    * Updated wacom_wac.c for 2.6.24+
    - by Dmitry Torokhov <dmitry.torokhov@gmail.com>
    * Updated pressure normalization * Updated ISDV4 data parsing routine
    * Updated wacom man page
    * Updated linuxwacom web pages
    * Label 0.8.6
  • 2010-03-26 Ping Cheng <pingc@wacom.com>
    * Updated kernel driver for 2FGT and Bamboo touch
    * Added 2.6.30 path for kernels 2.6.30 and later
    * Normalized pressure sensitivity to 2048
    * Updated 2FGT gesture with Chris Bagwell's suggestion
    * Label 0.8.5-12
  • 2010-03-10 Ping Cheng <pingc@wacom.com>
    * Add HAL_CFLAGS to CFLAGS
    - by Pedro Gimeno * Retrieve tablet_id early on in wcmValidateDevice
    * Call getRange for both touch and pad, whichever comes the first
    - by Chris Bagwell * Fixed a keystroke bug for non-core mode of older Xorgs
    - by Stefan Schimanski
    * Added wacom XRandR daemon to support RandR settting
    - by Takashi Iwai * Add modifiers (right) to wcmAction.c
    * Fixed a copy/paste error in the license statement
    * Support kernel 2.6.33
    * Cleaned kernel drivers for 2FGT
    * Label 0.8.5-11
  • 2010-02-12 Ping Cheng <pingc@wacom.com>
    * Updated Bamboo series support in the kernel and X drivers
    - by Jason Childs <oblivian@users.sourceforge.net>
    * Support at least 7 buttons for each tool
    - by Alexia Death <alexiadeath@gmail.com>
    * Avoid lose of duplicated second finger data in wacom_wac
    - by Chris Bagwell <chris@cnpbagwell.com>
    * Label 0.8.5-10
  • 2009-12-30 Ping Cheng <pingc@wacom.com>
    * Incorporated Ayuthia's Bamboo P&T patch -34
    - submitted by Favux <favux.is@gmail.com>
    * Fixed some kernel misplacement
    * Fixed a protocol4 mouse button click issue
    * Label 0.8.5-9
  • 2009-12-22 Ping Cheng <pingc@wacom.com>
    * Added max and resolution for local tool
    * Use linuxwacom.fdi gathered from Ubuntu forum
    - modified by Kory Prince and cyberfish
    - submitted by Favux <favux.is@gmail.com>
    * Merged Nicholas Hirsch's Intuos4 OLED Support
    - Patch ID 2878608 at Tracker
    * Fixed tablet rotate bug reported by Favux
    * Label 0.8.5-8
  • 2009-12-15 Ping Cheng <pingc@wacom.com>
    * Updated serial Tablet PCs support
    * Added 5 new Bamboo tablets support
    - kernel patch submitted by K Gingerich
    - xorg by Enrico Ros <enrico.ros@gmail.com>
    * Label 0.8.5-7
  • 2009-12-08 Ping Cheng <pingc@wacom.com>
    * Merged src/2.6.28 into src/2.6.27 so we have less files to worry
    * Removed src/2.6.28
    * Updated src/2.6.27 to version 1.52 in the kernel tree
    * Support new serial Tablet PCs
    * Label 0.8.5-6
  • 2009-11-30 Ping Cheng <pingc@wacom.com>
    * Fixed a kernel driver bug for E3
    * Updated serial ISDv4 support with newer protocol
    * Support suspend/resume for kernel 2.6.26 and later
    * Label 0.8.5-5
  • 2009-11-13 Ping Cheng <pingc@wacom.com>
    * Allow multiple tools defined with one type
    * Label 0.8.5-4
  • 2009-11-10 Ping Cheng <pingc@wacom.com>
    * Added right click, scroll, and zoom for two finger touch
    * Updated kernel driver
    * Validating tool by retriving device type from kernel driver
    * Fixed a bug in xsetwacom TWINVIEW option
    * Fixed a device id issue in xsetwacom TOOLID option
    * Label 0.8.5-3
  • 2009-10-31 Ping Cheng <pingc@wacom.com>
    * Avoid duplicated devices
    * Validate tool type before adding it
    * Use struct input_id and struct input_absinfo in wcmUSB.c
    - for kernel cross version compatibility support
    * Support device names with white spaces in xsetwacom and wacomcpl
    - for hot-plugged devices
    * Fine tuned configure.in (tested by Camille Moncelier)
    * Label 0.8.5-1
  • 2009-10-19 Ping Cheng <pingc@wacom.com>
    * Added Cap+ (9F) touch support (Camille Moncelier)
    * Added TabletPC (E2 and E3) support
    * Merged Thomas Jaeger's xidump patch
    * Merged Peter Hutterer's remove kernel 2.4 support patch
    * Updated 10-linuxwacom.fdi for touch
    * Don't allow HAL add tools defined in xorg.conf again
    * Added calibration-only feature to wacomcpl (Oleg Gaier)
    * Fixed a package configuration issue for Xorgs 6.7 - 7.2
    * Label 0.8.5
  • 2009-10-07 Ping Cheng <pingc@wacom.com>
    * Fixed a minor TwinView bug in xsetwacom command
    * Fixed a serial number = 0 case in wcmUSB.c
    * Fixed a crash issue on Xserver 1.6 or later
    * Label 0.8.4-3
  • 2009-09-16 Ping Cheng <pingc@wacom.com>
    * Fixed a mapping issue introduced by non-TwinView support
    * Label 0.8.4-2
  • 2009-08-28 Ping Cheng <pingc@wacom.com>
    * Updated wacomcpl for Nvidia non-TwinView setting
    * Fixed ring event jump accrossing 0 and 71 points
    * Label 0.8.4-1
  • 2009-07-30 Ping Cheng <pingc@wacom.com>
    * Support Nvidia non-TwinView setting
    * Updated webpages and man page (Sylvain Giasson and Alexander Rettig)
    * Fixed bug 2789354 for Graphire
    * Label 0.8.4
  • 2009-06-28 Ping Cheng <pingc@wacom.com>
    * Added support for DFT720a
    * Fixed DFT720 and DTF521 product ID swapped issue in wacom_wac.c
    * Added ABS_Z out-prox event for the newer kernels
    * Support kernel 2.6.31
    * Label 0.8.3-6
  • 2009-05-22 Ping Cheng <pingc@wacom.com>
    * Fixed a menu strip out-prox issue in wacom_wac.c (Sylvain Giasson)
    * Fixed a relative mode button issue for ExpressKeys
    * Updated --enable-quirk-tablet-rescale support
    * Split TOOLSEIAL from SERIAL for xsetwacom
    * Support boundary cases of "usbParse: Exceeded channel" (Stefan Schimanski)
    * Label 0.8.3-5
  • 2009-05-01 Ping Cheng <pingc@wacom.com>
    * Updated web pages and docs
    * Fixed a tool index bug in wacom_wac.c
    * Updated configure.in for Xorg earlier than 7.0
    * Label 0.8.3-4
  • 2009-04-23 Ping Cheng <pingc@wacom.com>
    * Updated README
    * Updated GPL to version 2
    * Updated wacom_wac.c
    * Brought configure.in and inlcude files in-sync with Fedora 10/11
    * Fixed a few button and in-prox/out-prox issues
    * Label 0.8.3-3
  • 2009-04-03 Ping Cheng <pingc@wacom.com>
    * Support kernels 2.6.28 and 2.6.29
    * Added 10-linuxwacom.fdi from Peter Hutterer
    * Updated install/uninstall and util/Makefile.am to support HAL
    * Patch 2653689 from Peter Hutterer
    * Label 0.8.3-2
  • 2009-03-26 Ping Cheng <pingc@wacom.com>
    * Patch "Don't touch the button map" from Thomas Jaeger
    * Patch 2653696 from Matthew Garret
    * Patch 2653697 from Peter Hutterer
    * Removed kernels 2.4.x and 2.6.8 support
    * Updated TwinView and Xinerama mapping
    * Bug 2517856 fixed by Calvin Walton
    * Fixed bug 2578477
    * Support Intuos4
    * Label 0.8.3
  • 2009-01-19 Ping Cheng <pingc@wacom.com>
    * Patch to support Xorg server 1.6 from Alexia Death
    * Patch for "usbParse: Exceeded channel" workaround from Markus Gaugusch
    * Fixed Bug #2499414
    * Label 0.8.2-2
  • 2008-12-31 Ping Cheng <pingc@wacom.com>
    * Updated patch 1998051 for none KP buttons
    * Updated wcmUSB.c to ignore unparsed data
    * Updated wacom_wac.c with Bartosz' suggestion
    * Fixed bug 2432258
    * Support Xorg 1.6.0
    * Label 0.8.2-1
  • 2008-12-01 Ping Cheng <pingc@wacom.com>
    * Added workaround for X Server 1.5 to send beep
    * Patch from Vicenç
    * Patch from Rene van Paassen
    * web pages updated
    * Label 0.8.2
  • 2008-10-23 Ping Cheng <pingc@wacom.com>
    * Fixed a configure.in bug (Bartosz Fabianowski)
    * Added kernel 2.6.27 support
    * Use BTN_TOOL_DOUBLETAP for USB Tablet PC touch event
    * Unified USB BTN_TOUCH event for mousedev before X server starts
    * Label 0.8.1-6
  • 2008-10-08 Ping Cheng <pingc@wacom.com>
    * Updated configure.in for Xorg 1.5
    * USB Tablet PC 0x90, 0x93, 0x9A are supported
    * Merged Danny's xf86Config patch
    * Updated wacomcpl for touch w/o capacity
    * Label 0.8.1-5
  • 2008-09-01 Ping Cheng <pingc@wacom.com>
    * Support Xorg 7.3 or newer in wacomcpl
    * Modified wacom_sys.c according to Bartosz Fabianowski's suggestion
    * Added a link to Bartosz Fabianowski's FreeBSD Wacom driver download page
    * Merged bug 2074297 fix (Mike Auty)
    * Fixed a few minor bugs
    * Label 0.8.1-4
  • 2008-08-12 Ping Cheng <pingc@wacom.com>
    * Merged patch 1994583 (Craig Wiegert) for wacom_sys.c
    * Merged patch 2035856 (Trifon Trifonov) for Uninit on Xorg 7.3 and later
    * Modified configure.in for Danny's patch
    * Added serial Tablet PC with capacitive touch
    * Label 0.8.1-3
  • 2008-08-01 Ping Cheng <pingc@wacom.com>
    * Added kernel 2.6.26 support
    * Updated USB Tablet PC pressure data in kernel
    * Merged patches from Danny Kukawka for wacomcpl and xsetwacom
    * Merged patch 1998051 (Yuri Shchedov) for keystroke
    * Label 0.8.1-2
  • 2008-07-17 Ping Cheng <pingc@wacom.com>
    * Updated USB and serial Tablet PC with touch support
    * Label 0.8.1-1
  • 2008-07-08 Ping Cheng <pingc@wacom.com>
    * Merged USB Tablet PC patch 1949610 (Andrew Zappacky)
    * Label 0.8.1
  • 2008-05-23 Ping Cheng <pingc@wacom.com>
    * Fixed an issue in configure.in (Ron and Magnus)
    * Fixed an issue in wcmISDV4.c
    * Label 0.8.0-3
  • 2008-05-14 Ping Cheng <pingc@wacom.com>
    * Fixed rotation issue
    * Label 0.8.0-2
  • 2008-05-09 Ping Cheng <pingc@wacom.com>
    * Updated xidump for Xserver 1.4 or later
    * Fixed no eraser calibration issue for LCD tablets
    * Fixed serial Tablet PC baudrate issue
    * Label 0.8.0-1
  • 2008-04-25 Ping Cheng <pingc@wacom.com>
    * Updated wacom.4x
    * Update ~/.xsession from wacomcpl for KDE system
    * Added IsXExtensionKeyboard check for Xserver 1.4 or later in wacomcfg.c
    * Label 0.8.0
  • 2008-04-11 Ping Cheng <pingc@wacom.com>
    * Excluded dixScreenOrigins call for Xorg 6.8.x
    * Synchronized databases
    * Updated webpages
    * Label 0.7.9-11
  • 2008-04-03 Ping Cheng <pingc@wacom.com>
    * Minor fixes in kernel and wacomcpl
    * Removed debug statement in wcmSerial.c
    * Label 0.7.9-10
  • 2008-03-30 Ping Cheng <pingc@wacom.com>
    * Updated configure.in for keystrokes (Magnus Vigerlöf)
    * Added touch support for serial TabletPC (ISDv4)
    * Added autoprobe patch (Matthias Hopf @ Suse)
    * Label 0.7.9-9
  • 2008-03-07 Ping Cheng <pingc@wacom.com>
    * Updated wacomcpl for keystrokes
    * Excluded keystroke support for XFree86
    * Introduced wacom defined keymap (Magnus Vigerlöf)
    * Support building outside the source-directory (Magnus Vigerlöf)
  • 2008-02-28 Ping Cheng <pingc@wacom.com>
    * Added support for Cintiq 20WSX
    * Fixed Bug 1875050 (Kovid Goyal)
    * Incorporated patch 1901778 (Steven Seed)
  • 2008-02-23 Magnus Vigerlöf <Magnus.Vigerlof@ipbo.se>
    * The rescaling patch is now in X.org master database
    * Updated configure.in
    * Added 2.6.24 support
    * Updated kernel 2.4 make file
  • 2008-01-22 Ping Cheng <pingc@wacom.com>
    * Updarted xsetwacom for Cintiq 12WX, Bamboo1, and BambooFun
    * Regrouped the routines for coming Xorg 7.3 hot-plug support (Magnus Vigerlöf)
    * Refer to http://git.debian.org/?p=collab-maint/linux-wacom.git;a=summary for detailed changes
    * Label 0.7.9-7
  • 2008-01-10 Ping Cheng <pingc@wacom.com>
    * Label 0.7.9-6
  • 2008-01-02 Ping Cheng <pingc@wacom.com>
    * Updated build and configure scripts (Magnus Vigerlöf)
    * Support Xorg 7.3 with multimonitors
    * Unified screen, tablet, and cordinate initialization
  • 2007-12-19 Ping Cheng <pingc@wacom.com>
    * Support multimonitor setup on 4 directions
  • 2007-12-13 Ping Cheng <pingc@wacom.com>
    * Updated wacomcpl
    * Incorporated Xorg 7.3 workaround from Magnus Vigerlöf
    * Label 0.7.9-4
  • 2007-11-29 Ping Cheng <pingc@wacom.com>
    * Clean support of outbound tracking for Bamboo, etc
    * Updated kernel 2.4.x code
    * Label 0.7.9-3
  • 2007-11-28 Ping Cheng <pingc@wacom.com>
    * Updated TwinView support to eliminate the unnecessary tvoffset (bug 1812593)
    * Incorporated Bartosz Fabianowski's patch (bug 1831998)
    * Patch 1818295 from Alexander V. Inyukhin
    * Patch 1834712 from Magnus Vigerlöf
    * Fixed bug 1791005 (protocol 4 tablets don't support serial numbers)
    * Patch 1839008 from Magnus Vigerlöf
  • 2007-11-12 Ping Cheng <pingc@wacom.com>
    * Support legacy kernels
    * Label 0.7.9-2
  • 2007-11-08 Ping Cheng <pingc@wacom.com>
    * Added support for BambooFun, Bamboo1 and Hummingbird
    * Support multimonitors horizontally and vertically in the same configuration
  • 2007-10-24 Ping Cheng <pingc@wacom.com>
    * Added support for 2.6.22
    * Temporary workaround for Xorg 7.3 (Magnus and Ron)
    * Support up to 8 screens in xsetwacom
    * Label 0.7.9
  • 2007-08-15 Ping Cheng <pingc@wacom.com>
    * Fixed a wacom.c bug for 2.4 and older 2.6's
    * Fixed a double click issue
    * Updated wacomcpl
    * Label 0.7.8-3
  • 2007-07-24 Ping Cheng <pingc@wacom.com>
    * Fixed a xsetwacom bug
    * Updated wacomcpl
    * Label 0.7.8-2
  • 2007-07-12 Ping Cheng <pingc@wacom.com>
    * Updated HowTo pages
    * Fixed a control panel button bug
    * Label 0.7.8-1
  • 2007-06-25 Ping Cheng <pingc@wacom.com>
    * Merged patch 1689476 (Gregor Richards)
    * Merged patch 1674472 (Magnus Vigerlöf)
    * Updated new xsetwacom commands
    * Updated wacom man page
    * Updated webpages to make /PRE scalable
    * Fixed an older UD pressure calculation error
    (Pierre-Alain Tercier)
    * Label 0.7.8
  • 2007-06-14 Ping Cheng <pingc@wacom.com>
    * Added RawSample option to xsetwacom
    * Reset old data after each out-prox event
    * Change Bamboo ring from strip to absolute wheel
  • 2007-06-05 Ping Cheng <pingc@wacom.com>
    * Updated xsetwacom suppress option
    * Merged Ron's building and configuration patches
    * Label 0.7.7-11
  • 2007-05-25 Ping Cheng <pingc@wacom.com>
    * Fixed a typo in 2.6.16/wacom_wac.c
    * Label 0.7.7-10
  • 2007-05-25 Ping Cheng <pingc@wacom.com>
    * Added 2 new xsetwacom potions
    (TVResolution0/1 and Screen_No)
    * Added support for Bamboo
    * Split wcmXCommand.c from xf86Wacom.c
  • 2007-05-18 Ping Cheng <pingc@wacom.com>
    * Added 2 new xsetwacom potions
    (Common DebugLevel and TwinView)
    * Increased MAX_SUPPRESS from 20 to 100
    * Added new xsetwacom option to change suppress
    * Fixed suppress bug (Allan Wind)
  • 2007-04-30 Ping Cheng <pingc@wacom.com>
    * Fixed a xsetwacom button and a relative wheel bug
    * label 0.7.7-9
  • 2007-04-17 Ping Cheng <pingc@wacom.com>
    * Prepared for toggling CoreEvent option
    * Fixed bug 1698123
  • 2007-03-30 Ping Cheng <pingc@wacom.com>
    * Updated acinclude.m4 to default to system running kernel
  • 2007-03-29 Ping Cheng <pingc@wacom.com>
    * Incorporated patch 1680163 from Magnus Vigerlöf
    * Updated wacom man page, wacom.4x
  • 2007-03-21 Ping Cheng <pingc@wacom.com>
    * Updated wacomcpl with new xsetwacom command
    * Removed xsetwacom GetModel option
    - no more writing to file from Wacom X driver
    * label 0.7.7-7
  • 2007-03-19 Ping Cheng <pingc@wacom.com>
    * Fixed bug 1675567
    * Updated cordinates initialization
  • 2007-03-09 Ping Cheng <pingc@wacom.com>
    * Report screen cordinates through xsetwacom
    * Support I3 strips and relatvie wheel with
    button and keystroke events through xsetwacom
  • 2007-02-20 Ping Cheng <pingc@wacom.com>
    * Fixed an install typo
    * Fixed a dual Cintiq TwinView setup in wacom_drv.o
  • 2007-02-16 Ping Cheng <pingc@wacom.com>
    * Updated install script to deal with broken uname -p
    * Support pad as core and non-core device
    * Support keystrokes
    * Support 2.6.19 (Magnus Vigerlöf)
    * label 0.7.7-5
  • 2007-02-02 Ping Cheng <pingc@wacom.com>
    * Updated kernel driver to report full out-prox data
    * Updated pad in X driver
    * Fine tuned outbound tracking
    * label 0.7.7-4
  • 2007-01-29 Ping Cheng
    * Added 3 new xsetwacom options
    * Updated wacom_wac.c and wacom.c for Intuos outbound tracking
    * label 0.7.7-3
  • 2007-01-25 Ping Cheng <pingc@wacom.com>
    * Added support for Thinkpad X60t
    * label 0.7.7-2 for testing
  • 2007-01-22 Ping Cheng <pingc@wacom.com>
    * Incorporated Magnus' patches
  • 2007-01-19 Ping Cheng <pingc@wacom.com>
    * Split wacom.c for 2.6.15
    * Fixed bugs related to multiarea support
  • 2007-01-15 Ping Cheng <pingc@wacom.com>
    * Split wacom.c for 2.6.14
    * Fixed wacom_sys.c in 2.6.11 and 2.6.13
    * Fixed bugs related to multiarea support
  • 2007-01-11 Ping Cheng <pingc@wacom.com>
    * Incorporated patches 1630928, 1630926, and 1614296
    * Updated xidump to ignore uninitialized tools
    * Fixed kfree bug in wacom_sys.c for 2.6.13
  • 2007-01-08 Ping Cheng <pingc@wacom.com>
    * Report raw tablet data in valuators for relative mode
    * Improve relative movement accuracy in general
  • 2007-01-03 Ping Cheng <pingc@wacom.com>
    * Improve relative small movement accuracy
    * Reset pressure for relative in-prox event
    to fix bug 1562718
  • 2006-12-27 Ping Cheng <pingc@wacom.com>
    * label 0.7.7-1 for testing
  • 2006-12-22 Ping Cheng <pingc@wacom.com>
    * Update install and uninstall scripts for prebuilt
    X driver and its utility programs
    * Feature request #1519017 and patch #1614296
    * Patch #1606288
    * Updated web scripts
  • 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
    * updated xsetwacom and wacom_drv
    * Split wacom.c under 2.6.11 into 4 files
    * label 0.7.7 for testing
  • 2006-11-21 Ping Cheng <pingc@wacom.com>
    * 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
  • 2006-11-13 Ping Cheng <pingc@wacom.com>
    * Updated acinclude.m4 and configure.in (Mats Johannesson)
    * Updated X driver for Xinerama setup
    * Removed option gimp
  • 2006-10-31 Ping Cheng <pingc@wacom.com>
    * Updated acinclude.m4 and wacom.c
    * label 0.7.6-2
  • 2006-10-24 Ping Cheng <pingc@wacom.com>
    * Fixed a relative mode acceleration problem
    * Updated webpages, acinclude.m4, and configure.in
    * Updated wacdump for TabletPC
    * Supports Graphire outbound tracking
  • 2006-10-16 Ping Cheng <pingc@wacom.com>
    * Updated README and NEWS
  • 2006-10-13 Ping Cheng <pingc@wacom.com>
    * Removed 2.4 kernel unchanged $Id lines
    * label 0.7.6-1
  • 2006-10-09 Ping Cheng <pingc@wacom.com>
    * Updated install scripts to install wacom man
    page, wacom.4x.gz, under /usr/share/man/man4
    * Updated release version to 0.7.6
    * Ready to label the source
  • 2006-10-06 Ping Cheng <pingc@wacom.com>
    * Updated xf86Wacom.h to support Xorg 7.1
    * Fixed a bug in src/2.6.16/wacom_sys.c
    * Updates xidump and xsetwacom
  • 2006-10-03 Ping Cheng <pingc@wacom.com>
    * Updated configure.in and acinclude.m4 for x86_64
    * Updated src/2.6.16/wacom_sys.c to sync with kernel.org
  • 2006-09-27 Ping Cheng <pingc@wacom.com>
    * Updated wacserial.c (Adam Marmbrant)
    * Updated package configuration scripts
    (Patch 1538734, Magnus Vigerlöf and Kai Sattler)
  • 2006-09-22 Ping Cheng <pingc@wacom.com>
    * Updated wacom man page, wacom.4x
    * Updated wacdump
    * Fixed an I3 and Cintiq 21UX pad out-prox bit (Martin Wawro)
    * Applied TabletPC button XFree86 workaround to Xorg
  • 2006-09-14 Ping Cheng <pingc@wacom.com>
    * Fixed a filter bug (Wolfgang Oertl, etc)
    * Ready to release 0.7.5-3
  • 2006-09-13 Ping Cheng <pingc@wacom.com>
    * Fixed a typo in 2.6.18/Makefile.in (Mats Johannesson)
    * Ready to release 0.7.5-2
  • 2006-09-12 Ping Cheng <pingc@wacom.com>
    * 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
  • 2006-09-08 Ping Cheng <pingc@wacom.com>
    * 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
  • 2006-08-30 Ping Cheng <pingc@wacom.com>
    * Added Intuos3 4x6 support
    * Updated acinclude.m4 and configure.in
    * Fixed a pad display issue in xidump.c and wacom_drv.o (Mats Johannesson)
  • 2006-08-24 Ping Cheng <pingc@wacom.com>
    * 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
  • 2006-08-22 Ping Cheng <pingc@wacom.com>
    * Updated acinclude.m4 scripts for kernel 2.6.18
    * Updated wacom.c for accurately report tablet buttons
  • 2006-08-18 Ping Cheng <pingc@wacom.com>
    * Updated configure scripts and xidump.c
    * Support USB hot plug/unplug with different tablets
  • 2006-08-10 Ping Cheng <pingc@wacom.com>
    * Backward tablet menu strip support
  • 2006-08-07 Ping Cheng <pingc@wacom.com>
    * Created 3 new directories, xdrv, include, and util under src to store
    X driver, common headers, and utility programs separately
  • 2006-08-03 Ping Cheng <pingc@wacom.com>
    * Increased MAX_SUPPRESS from 6 to 20 (Patch ID 1529268 from Wolfgang Oertl)
    * Updated wacomcpl
  • 2006-07-28 Ping Cheng <pingc@wacom.com>
    * Updated xsetwacom to avoid writing data to files from X driver (more work to be done)
    * Updated wacomcpl accordingly
  • 2006-07-19 Ping Cheng <pingc@wacom.com>
    * 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)
  • 2006-07-14 Ping Cheng <pingc@wacom.com>
    * 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.
  • 2006-06-22 Ping Cheng <pingc@wacom.com>
    * Added more default Xlib and Xorg SDK searching pathes for x86_64 system
  • 2006-06-16 Ping Cheng <pingc@wacom.com>
    * Ready to release 0.7.4-3
  • 2006-06-15 Ping Cheng <pingc@wacom.com>
    * Updated web pages with new success stories and a
    link to Wacom Ubuntu Wiki
    * Fixed a Volito1 wacom.c issue as reported by
    Samuel Colin (Samuel.Colin@laposte.net)
  • 2006-05-25 Ping Cheng <pingc@wacom.com>
    * Fixed a typo in some wacom.c files
    * Update configure.in and acinclude.m4 for
    xorg 7 installation path
    assigning building arch
    configuring xlib path
    * Release package as 0.7.4-2
  • 2006-05-05 Ping Cheng <pingc@wacom.com>
    * Updated website
    * Ready to release 0.7.4
  • 2006-05-03 Ping Cheng <pingc@wacom.com>
    * Removed kernels 2.6.2/3/4/5/6/7
  • 2006-05-01 Ping Cheng <pingc@wacom.com>
    * Updated DTF-521 support
    * Updated PenPartner code in wacom.c (Nick Lamb)
    * Support X.Org 7 wacom driver paths
    * Removed SYSCALL for unnecessary statements (Andrew Zabolotny)
  • 2006-04-06 Ping Cheng <pingc@wacom.com>
    * Ready to release 0.7.3-1
  • 2006-03-31 Ping Cheng <pingc@wacom.com>
    * Support 2.6.16
    * Updated Mouse1 page to include kernel 2.6
    * Release 0.7.3-1
  • 2006-03-27 Ping Cheng <pingc@wacom.com>
    * Fixed serial id report issue in wacom.c (Rob Engle)
    * Fixed Xinput events being reported twice (Rob Engle)
  • 2006-03-14 Ping Cheng <pingc@wacom.com>
    * Fixed a relative distance bug in wcmCommon.c
    * Ready to release 0.7.3 as beta
  • 2006-03-06 Ping Cheng <pingc@wacom.com>
    * Fixed a Volito bug (Kirill Frolov)
    * Fixed a xsetwacom.c typo
    * Supporting tablet attach/detach while X driver running (Christian Lupien)
    * Remove SYSCALL from xf86 calls (Christian Lupien)
    * Swapped USB tablet wheel directions (Christian Lupien)
  • 2006-02-27 Ping Cheng <pingc@wacom.com>
    * Updated website
    * Support 2.6.15
    * Fixed a Graphire 2 issue
  • 2006-02-11 Ping Cheng <pingc@wacom.com>
    * Updated website
    * Added DTF 521, I3 12x12, and I3 12x19
  • 2006-01-09 Ping Cheng <pingc@wacom.com>
    * Restructured the website
    * Added a page for Tablet PC
    * Added a mini-HOWTO page for Fedora Core 4
    * Updated application developers' page
  • 2005-12-21 Ping Cheng <pingc@wacom.com>
    * Updated website
    * Released 0.7.2
  • 2005-12-16 Ping Cheng <pingc@wacom.com>
    * updated configure.in and acinclude.m4 to use system info to decide wacom_drv default module and etc.
    * Removed evdev.c in src/2.6.x
    * Updated configure scripts and src/2.6.x/Makefile.in to remove evdev from building string
  • 2005-12-05 Ping Cheng <pingc@wacom.com>
    * Updated README and NEWS
    * Modified configure.in
  • 2005-12-02 Ping Cheng <pingc@wacom.com>
    * Send EVIOCGRAB ioctl to kernel in wcmUSB.c (Christian Lupien)
    * Removed mousedev.c and usbmouse.c in src/2.6.x since wacom takes whole control of the tablet now
    * Updated configure scripts and src/2.6.x/Makefile.in to remove mousedev and usbmouse from building string
  • 2005-11-22 Ping Cheng <pingc@wacom.com>
    * linuxwacom-0.7.1-1 released
    * Fixed a dual monitor display issue
  • 2005-11-18 Ping Cheng <pingc@wacom.com>
    * Fixed a wacomcpl and an X driver bug
  • 2005-11-17 Ping Cheng <pingc@wacom.com>
    * Updated wacomcpl
    * Updated wacom.c and xsetwacom
  • 2005-11-14 Ping Cheng <pingc@wacom.com>
    * Updated xidump
    * Support 2.6.14
    * Updated acinclude.m4 (Radomir Dopieralski)
    * Check tool serial number configured in xorg.conf/XF86Config
    * Report tool id and serial number in 4th-6th valuators
  • 2005-11-02 Ping Cheng <pingc@wacom.com>
    * linuxwacom-0.7.1 Released as beta
  • 2005-10-26 Ping Cheng <pingc@wacom.com>
    * Updated wacdump and xidump
    * Support 2.6.x without EV_SYN defined
    * Ready to release 0.7.1 beta
  • 2005-10-20 Ping Cheng <pingc@wacom.com>
    * Updated configure options (added --with-x-src)
    * Added Device ID info for USB and P4 tablets
    * Support 2.6.13
  • 2005-10-11 Ping Cheng <pingc@wacom.com>
    * Added DTU710, DTF 720 and Graphire 4
  • 2005-09-21 Ping Cheng <pingc@wacom.com>
    * linuxwacom-0.7.0 Released
  • 2005-09-19 Ping Cheng <pingc@wacom.com>
    * Fixed a serial Graphire bug
    * Tag -1 for 0.7.0
  • 2005-09-16 Ping Cheng <pingc@wacom.com>
    * Fixed a P4 eraser bug
    * Fixed an initial relative pressure bug (Fred)
    * Reports USB tool ID
    * Ready to release 0.7.0
  • 2005-09-09 Ping Cheng <pingc@wacom.com>
    * Supports 16 button events for all tools
    * Merged TabletPC button1 patch from Brent Baccala
  • 2005-09-07 Ping Cheng <pingc@wacom.com>
    * Updated wacdump for Cintiq 21UX
    * Updated docs.html
    * Updated acinclude.m4 to deal with version checking,
    such as 2.6.12.4 (Tim Jedlicka)
  • 2005-08-18 Ping Cheng <pingc@wacom.com>
    * Merged patches for Volito2 and PL700
    * Updated wacomcpl and configure.in
  • 2005-08-09 Ping Cheng <pingc@wacom.com>
    * Fxied a dlloader option bug (Jeremy Huddleston)
  • 2005-08-08 Ping Cheng <pingc@wacom.com>
    * Added --enable-dlloader configuration option
    * Cleaned Grahire wacom.c code
    * Cleaned relative Convert/revConvert X code
    * Released linuxwacom-0.6.9 as beta
  • 2005-07-28 Ping Cheng <pingc@wacom.com>
    * Removed GTK from configure script and xidump code (Jens Georg)
  • 2005-07-26 Ping Cheng pingc@wacom.com>
    * Fixed a serial protocol 4 eraser/3rd button switch bug
  • 2005-07-20 Ping Cheng <pingc@wacom.com>
    * Support x86-64 X driver
    * Fixed a Cintiq 21UX kernel bug
    * Fixed a TabletPC eraser bug
  • 2005-06-15 Ping Cheng <pingc@wacom.com>
    * Added src/2.4.30x86-64 directory for x86-64 kernel 2.4.30
  • 2005-06-14 Ping Cheng <pingc@wacom.com>
    * Merged with xf86Wacom.c version 1.47 at www.xfree86.org
    * Support tablet orentation rotation for all tablets
    * Support x86-64 kernel
  • 2005-05-05 Ping Cheng <pingc@wacom.com>
    * Added 3rd party developer support pagesu
    * released linuxwacom-0.6.8
  • 2005-04-25 Ping Cheng <pingc@wacom.com>
    * Updated linuxwacom.sf.net website
    * Cleaned tablet mapping and resolution code
  • 2005-03-28 Ping Cheng <pingc@wacom.com>
    * Updated linuxwacom.sf.net
    * Released linuxwacom-0.6.7 as a beta
  • 2005-03-18 Ping Cheng <pingc@wacom.com>
    * Added support to kernel 2.6.11
    * Cleaned wacom_graphire_irq routine
  • 2005-03-10 Ping Cheng <pingc@wacom.com>
    * Merged Jens' 2.6.*/Makefile.in and a few other updates
    * Added Cintiq 21UX support
    * Added 2 new X config options: Gimp and MMonitor
    "Gimp off" reports raw x and y in valuator;
    "Gimp on" reports modified x and y when Top
    and Bottom values are set;
    default is on to support Gimp;
    "MMonitor on" moves cursor accross screens;
    "MMonitor off" cursor stays in the current screen;
    default is on.
    * Fixed bug 1146135
  • 2005-02-28 Ping Cheng <pingc@wacom.com>
    * Fixed Graphire/Volito button bug
    * Added xserver64 option to configure
    * Added EVIOCGRAB to wcmUSB.c as suggested by Vojtech Pavlik to
    grab the USB tablet event so nothing else can get the data
    * Modified acinclude.m4 for tcl.h default checking (Jens Georg)
  • 2005-02-02 Ping Cheng <pingc@wacom.com>
    * Added missing routine in src/2.6.8/wacom.c
    * Fixed maxZ in wcmSerial.c for penpartner
  • 2004-12-01 Ping Cheng <pingc@wacom.com>
    * Removed src/2.6.x/Makefile.am to build .ko locally (Jens Georg)
    * Updated src/2.6.x/Makefile.in (Jens Georg)
    * Added support for kernel 2.6.10
    * Fixed a P4 bug in wcmSerial.c
    * Added wacom.man to dev
    * Released 0.6.6
    * Updated web pages
  • 2004-11-05 Ping Cheng <pingc@wacom.com>
    * Updated configure script Kristian Høgsberg <krh@redhat.com>
    * Removed XFree86v3 support
    * Cleaned wacom.c files
    * Released 0.6.5 as beta
  • 2004-11-02 Ping Cheng <pingc@wacom.com>
    * Added subdirs for each kernel 2.6.x
    * Updated web scripts
  • 2004-10-15 Ping Cheng <pingc@wacom.com>
    * Fixed Intuos3 pressure bug
  • 2004-10-06 Ping Cheng <pingc@wacom.com>
    * Added Intuos3 support
    * Fixed z-rot valuator initialization error
  • 2004-08-06 Ping Cheng <pingc@wacom.com>
    * Fixed USB tablet protocol V dual input for kernel 2.6
    * Updated wacusb.c to fix wacdump ParseData error
    * Fixed speed and acceleration bug
  • 2004-06-04 Ping Cheng <pingc@wacom.com>
    * Updated configure.in for option verification
    * Removed XFree86/xorg.conf 3.x code
    * Fixed XF86Config multi-word identifier issue
    * Fixed warnings in X.org 6.7.0
  • 2004-05-24 Ping Cheng <pingc@wacom.com>
    * Merged changes from 2.6.6 kernel Dan Bullok <dan.devel@bullok.com>
    * Support protocol V dual input for both serial and USB
    * Fixed wacomcpl-exec Feel window bug
    * Released version 0.6.3
  • 2004-05-18 Ping Cheng <pingc@wacom.com>
    * Fixed Relative Speed bug
    * Added a workaround for TPCButton to deal with XFree86 button bug (occasionally unreleased left click when simultaneously pressed with another button)
  • 2004-05-14 Ping Cheng <pingc@wacom.com>
    * Removed DoubleSpeed and DoubleRadius options (use system default instead)
    * Fixed tool on tablet when driver starts issue
    * Updated wacomcpl and webpages
    * Added MODVER string to default option in configure.in
  • 2004-04-02 Ping Cheng <pingc@wacom.com>
    * Fixed TwinView Absolute mode and DoubleSpeed check
    * Fixed tool on tablet when driver starts issue
    * Released version 0.6.2
  • 2004-03-11 Ping Cheng <pingc@wacom.com>
    * Modified wacusb.c for Debian
    * Fixed DoubleSpeed and DoubleRadius issues
  • 2004-03-05 Ping Cheng <pingc@wacom.com>
    * Modified tcl and tk configuration options
    * Updated webpage for kernel 2.6 support
  • 2004-03-02 Ping Cheng <pingc@wacom.com>
    * Support 2.6.2/3 (Ned Konz)
    * Released version 0.6.1
  • 2004-02-24 Ping Cheng <pingc@wacom.com>
    * Support module versioning for kernel 2.4.22 and later (Adrian Secord)
    * Added "Mode Toggle" to button functions to switch mode
  • 2004-02-05 Ping Cheng <pingc@wacom.com>
    * Work around for 2.4.24 support (Marek Olszewski)
  • 2004-02-04 Ping Cheng <pingc@wacom.com>
    * Released version 0.6.0
  • 2004-01-19 Ping Cheng <pingc@wacom.com>
    * Sync wacom.c in kernel 2.6 with wacom.c in kernel 2.4 (Ned Konz)
    * Work around for 2.4.23 support (Jens Georg)
  • 2004-01-13 Ping Cheng <pingc@wacom.com>
    * Fixed relative wheel bug in wacom.c for 2.6
    * Modified tcl and tk configuration options
    * Rearranged wacomcpl windows for Tablet PC
    * Updated README
  • 2003-12-15 Ping Cheng <pingc@wacom.com>
    * Fixed a wacom.c bug for 2.6 (Martin Renold)
    * Added evdev.c to src/2.6 to attach replugged device
    * Updated README
  • 2003-12-10 Ping Cheng <pingc@wacom.com>
    * Support kernel 2.6.0
  • 2003-11-26 Ping Cheng <pingc@wacom.com>
    * Support Tablet PC Buttons. Default is off.
    Usage:
    xsetwacom set $device tpcbutton 1 (to turn it on)
    xsetwacom set $device tpcbutton 0 (to turn it off)
    * Turned configure option "--disable-wacom" as default
    * Added wacom_drv.o into the install script so wacom_drv.o will be installed along with the other executables and libs when "make install" is issued.
    This enables the systems "identical" to the development system to install the Wacom X driver related items without rebuilding them on the targeted system.
    Where "identical" means both systems have the same version of XFree86, tcl, and tk.
    Usage:
    After building and testing the package on the development system, copy the whole package directory onto the "identical" system, then
    cd $package_home_dir
    su
    make install
  • 2003-11-18 Ping Cheng <pingc@wacom.com>
    * Support general Tablet PC (ISDV4)
    * Added a new xsetwacom command for mult-monitor setup:
    xsetwacom set $device mmmonitor $value
    $value 0: let cursor move across monitors (default)
    1: cursor will stay in the monitor it was
  • 2003-11-10 Ping Cheng <pingc@wacom.com>
    * Support wacomcpl with user specified tcl/tk src dirs
    * Moved kernel files to 2.4 and 2.4.22 for easy upgrading
    * Refined filters
  • 2003-10-09 Ping Cheng <pingc@wacom.com>
    * Support kernel-2.4.22
  • 2003-09-30 Ping Cheng <pingc@wacom.com>
    * Fixed TwinView relative mapping error
  • 2003-09-24 Ping Cheng <pingc@wacom.com>
    * Support TwinView with different Screen resolutions
    * Added a new option, "TVResolution", to configure each resolution
  • 2003-09-22 Ping Cheng <pingc@wacom.com>
    * Support TwinView Cintiq calibration
    * Enable Screenno Option for TwinView setup
    * Minor serial tablet and kernel 2.6 support fixes
  • 2003-08-13 Ping Cheng <pingc@wacom.com>
    * Added relative movement acceleration
    * Added Mapping, Tip Feel, and Movement Controls in wacomcpl
  • 2003-07-31 Ping Cheng <pingc@wacom.com>
    * Added "Left Double Click" and "Ignore Button Event" commands into xsetwacom
    * Set Mode default values: cursor - relative
    stylus/eraser - absolute
  • 2003-07-24 Ping Cheng <pingc@wacom.com>
    * Added new xsetwacom commands (Mode, SpeedLevel, and ClickForce)
  • 2003-07-19 Ping Cheng <pingc@wacom.com>
    * Fixed Intuos tilt filter
    * Send raw values of tilt, pressure, rotation and 4D mouse
    wheel to valuators when the device is in relative mode
  • 2003-07-16 Ping Cheng <pingc@wacom.com>
    * Fixed Intuos filter to ignore the first sample
    * Added noise reducing filter for all tablets
    * Cleaned up old filters
    * Improved USB relative movement
  • 2003-07-10 John E. Joganic <john@joganic.com>
    * Fixed Intuos filter to ignore first couple samples.
    * Added pedantic to compiler options
    * Fixed minor warnings caused by pedantic setting.
  • 2003-07-08 Ping Cheng <pingc@wacom.com>
    * Changed src/Makefile.am for kernel 2.5 (Kris Verbeeck)
  • 2003-06-25 Ping Cheng <pingc@wacom.com>
    * Added TwinView support (Ron Woods)
    * Fixed single screen mapping problem
    * Added TabletPC calibration
    * Support 2.5 kernel in X driver (Kris Verbeeck)
  • 2003-06-19 John E. Joganic <john@joganic.com>
    * Reapplied patch for tablets reporting as 0x47.
    * Suppress value of 0 disables suppression.
  • 2003-06-16 John E. Joganic <john@joganic.com>
    * Added mkxincludes, automatic check for x-includes in configure
  • 2003-06-15 John E. Joganic <john@joganic.com>
    * Released version 0.5.1-beta
  • 2003-06-14 John E. Joganic <john@joganic.com>
    * Fixed wacomcpl/wacomxi to run on systems with tcl and tk installed
    * Moved wacomxi into subdirectory
    * Modified checks for tcl and tk to search include and library paths
    * Applied conditional build and install to wacomxi
    * Modified wacomcpl to install and run regardless of install prefix
    * Added Intuos filter code back into data path
    * Nixed Graphire filter code because suppression code does same thing
    * Raw filtering is enabled by default
    * Intuos filter code works for both serial and USB tablets
  • 2003-06-03 Ping Cheng <pingc@wacom.com>
    * Added calibration tool and made it install as default
    * Added gimp option for calibration
  • 2003-05-15 John E. Joganic <john@joganic.com>
    * Added timestamp to sample structure
    * Added acceleration format to raw xidump for viewing jitter
  • 2003-05-12 Ping Cheng <pingc@wacom.com>
    * Removed FIRST_TOUCH_FLAG (J. Yen's patch for wcmCommon.c)
    * Cleaned valuator report for relative mode
    * Send 4th/5th buttons for all relative wheels
    * Report in-prox after tool is set (J. Yen's patch for wacom.c)
    * Fixed compile warning for xf86Wacom.c
  • 2003-05-09 Ping Cheng <pingc@wacom.com>
    * Added Cintiq Partner, Graphire3 4x5 and 6x8
    * Added a few new xsetwacom commands
  • 2003-05-04 John E. Joganic <john@joganic.com>
    * Overhauled device reading.
    * Consolidated serial data path.
    * Updated ISDV4 data path, untested.
    * Added data history buffer and working state.
    * Added raw data filtering.
    * Commented out some incomplete features.
  • 2003-05-03 John E. Joganic <john@joganic.com>
    * Fixed USB 4D mouse button mapping to be consistent with serial 4D.
  • 2003-05-02 John E. Joganic <john@joganic.com>
    * Added xsetwacom, libwacomcfg, and Xwacom.h; work in progress
    * xsetwacom, wacdump, libwacomcfg, and xidump now install by default.
    * Added pressure curve, buttons, and bounding rect parameters.
  • 2003-05-01 John E. Joganic <john@joganic.com>
    * Changed Graphire from absolute wheel to relative.
    * Moved throttle position check out of Suppress. Need it elsewhere.
    * Fixed xidump library dependencies for non-gtk build
  • 2003-04-29 John E. Joganic <john@joganic.com>
    * Expanded graphire parsing; all devices use same data path
    * Disabled throttle/wheel correlation for now; needs work and option for enabling/disabling.
    * Split absolute and relative wheel at early data path stage
    * Added pressure curve; implementation is a bit overkill, but it works
  • 2003-04-21 Ping Cheng <pingc@wacom.com>
    * Updated serial UD and PL code for the refactored src
  • 2003-04-19 Jimmy Yen <jimmy@yen.tp>
    * Fixed throttle code.
    * Slightly refined Xinerama code. Use X's own global variable instead for Xinerama detection.
    * Disallow pointers to enter dead areas, causing setting screen to fail.
  • 2003-04-18 Jimmy Yen <jimmy@yen.tp>
    * Extra checking to set screen only when the device sends core events.
    * Made KeepShape compatible with multiple screen setup.
    * Reenabled throttle and fake button 4/5 code. Can be disabled by setting 'Option "MouseWheel" "off"'. This still needs work.
    * Unified cursor acceleration in both directions.
  • 2003-04-17 Jimmy Yen <jimmy@yen.tp>
    * Software solution of dual channel input for USB devices.
  • 2003-04-16 Jimmy Yen <jimmy@yen.tp>
    * Basic Xinerama setup support. Works with horizontal, non-overlapping screen combinations with different resoluions. Users need to specify 'Option Xinerama "on"' for each absolute device.
  • 2003-04-14 Jimmy Yen <jimmy@yen.tp>
    * Small KeepShape fix.
    * Cleaned up xf86WcmSendEvents.
    * Fallback case in device selection code.
  • 2003-04-08 John E. Joganic <john@joganic.com>
    * Fixed USB tilt ranges.
    * Exploded out serial tablet initialization.
    * Reporting throttle on cursor valuator 4
    * Fixed serial 4D mouse rotation value
    * Default threshold to 1/32 maximum pressure
  • 2003-04-07 John E. Joganic <john@joganic.com>
    * Fixed bug in tilt filter.
    * MaxZ determined at tablet detection
    * Changed pressure code; all values positive.
    * Added channel code, device proximity bound to channel
  • 2003-04-07 Jimmy Yen <jimmy@yen.tp>
    * Set resolutions for USB tablets.
  • 2003-04-06 John E. Joganic <john@joganic.com>
    * Refactored xf86Wacom.c into separate files.
  • 2003-04-02 John E. Joganic <john@joganic.com>
    * Added J. Yen's "misc fixes" patch to xf86Wacom.c
    * Added J. Paisley's "reattach" patch to evdev.c
  • 2003-03-31 John E. Joganic <john@joganic.com>
    * Added mousedev.c with fix to ignore wacom
  • 2003-03-22 John E. Joganic <john@joganic.com>
    * Added ncurses detection.
    * Cleaned up output of xidump.
    * Added Dean Townsley's ISDV4 patch.
  • 2003-03-21 - John E. Joganic <jej@j-arkadia.com>
    * Release 0.4.1.
    * Added xidump to production build.
    * Checks for ncurses.h in configure.
    * Added xidump section to HOWTO.
  • 2003-02-12 - John E. Joganic <jej@j-arkadia.com>
    * Updated wacdump documentation.
    * Added serial support to HOWTO.
  • 2003-01-31 - John E. Joganic <jej@j-arkadia.com>
    * Released 0.4.0
    * Added serial reset to wacdump on bit errors.
    * Added logging to wacdump.
    * Added timeout for reset and tablet detection in wacserial.c
    * Changed macros from WAC_ to WCM_ due to bug in Mandrake 9 autoconf.
  • 2003-01-26 - John E. Joganic <jej@j-arkadia.com>
    * Release 0.3.7-beta
    * Merged Dean Townsley's Acer C100 patch
    * Changed internal device identification model to handle new tablets
    * Added configuration option to disable non-linux code
    * Moved USB code from wacdump into wacusb.c
    * Added check for Mandrake .o.gz modules in configure
    * Changed bit macros for Graphire
    * Fixed Intuos and Intuos2 sizes
    * Added Gilbert Ramirez's no-merge-constants patch
    * Added patch for HID_QUIRK on 2.4.18
  • 2003-01-23 - John E. Joganic <jej@j-arkadia.com>
    * Updated the USB-HOWTO with some suggestions by various people.
  • 2003-01-06 - John E. Joganic <jej@j-arkadia.com>
    * Added volito to hid-core.c.
    * Fixed volito report #99.
    * Updated volito ranges.
    * Fixed wacdump refresh
    * Fixed 2D mouse buttons in xf86Wacom.c
  • 2002-12-31 - John E. Joganic <jej@j-arkadia.com>
    * Added Ping Cheng's new tool IDs.
    * Fix for unknown report #1 using simple kernel thread
    * Added automatic module loading for usb wacom and evdev
    * Backported hid-core.c fix for 2.4.20 in production build.
    * Backported curses namspace fix in production build.
    * Release 0.3.5-beta and 0.2.1 packages.
  • 2002-12-26 - John E. Joganic <jej@j-arkadia.com>
    * Updated linuxwacom.sourceforge.net web site with new document structure.
    * Fixed serial initialization code in wacserial.c
  • 2002-12-22 - John E. Joganic <jej@j-arkadia.com>
    * Added serial code to wacdump
    * Added serial protocols IV 1.0 - 1.4.
    * Added serial protocol V 1.0 - 1.1.
    * Intuos mouse wheels are now positive when rolled backwards per PS/2 Intellimouse convention
    * Added Intuos2 to xf86Wacom.c
    * Added build help for Debian Stable users
  • 2002-12-17 - John E. Joganic <jej@j-arkadia.com>
    * Merged code from 2.4.20 hid-core.c
    * Added configuration code to handle kernels still at 2.4.19
    * Split wacdump curses code into wacscrn.c to solve namespace collision
    * Added volito to wacom.c
  • 2002-12-16 - John E. Joganic <jej@j-arkadia.com>
    * House cleaning on the website.
    * Dropped the Intuos constraint from the document name.
    * Added the expectations page.
    * Changed the internal indexing to identifier rather than chapter.
  • 2002-12-15 - John E. Joganic <jej@j-arkadia.com>
    * Removed some debugging code, redeployed package with wacom_drv.o version 0.3.2a.
    * New build has fix for 4D mouse wheel.
    * wcm-beta.c fleshed out with new driver code.
  • 2002-12-13 - John E. Joganic <jej@j-arkadia.com>
    * Added development page.
    * New build has relative events and fix for 2D mouse wheel.
    * wcm-beta.c added to build.
  • 2002-12-09 - John E. Joganic <jej@j-arkadia.com>
    * Added detail on "Threshold" parameter.
    * Included man page.
  • 2002-11-24 - John E. Joganic <jej@j-arkadia.com>
    * Updated docs for version 0.2.0.
    * Package uses configure-based scripts.
  • 2002-11-14 - John E. Joganic <jej@j-arkadia.com>
    * Moved wacom_drv.o to prebuilt directory.
    * Added xf86Wacom.c (version 26) to package along with changes to Makefile
    * Extended documentation on X11 setup including caveat over Mouse1 device.
    * Added xf86Wacom.c build instructions.
    * Updated wacdump (0.2) to display identifiers, maximum values, and all registered event types.
    * Added highlighting in wacdump to display button down state.
  • 2002-11-11 - John E. Joganic <jej@j-arkadia.com>
    * wacom.c - fixed ranges for intuos2 6x8
  • 2002-11-10 - John E. Joganic <jej@j-arkadia.com>
    * wacdump.c - updated display to identify values
    * wacom.c - fixed ranges for intuos2 12x12
  • 2002-11-09 - John E. Joganic <jej@j-arkadia.com>
    * wacom.c - merged some of Cheng's changes, fixes to the pressure calculation, device ranges.
    * wacom.c - added an extra device (0x47) for M. T.
    * wacdump.c - added text messages for event types
    * wacdump.c - added usage and device override option
    * wacdump.c - exits when channel is closed.
    * Fixed module dependency problem in wacom.o and hid.o
    * Added clarification for devfs and Mandrake 9.0
  • 2002-11-06 - John E. Joganic <jej@j-arkadia.com>
    * Busted page out into discrete chapters.
    * Added some php magic to turn it into an active book.
    * Added Mandrake 9.0
    * Gimp may need to be compiled from source (1.2.3)
  • 2002-11-05 - John E. Joganic <jej@j-arkadia.com>
    * Updated wacom driver with Christer Nilsson's 2.4.20 patch
    * Added RedHat 7.3 success
    * Added more discussion on the device driver election.
    * Added more discussion on HID mode 1 and the correct mode 2.
    * Added usbmouse.c and hid-core.c to wacpack-0.1b.
  • 2002-11-04 - John E. Joganic <jej@j-arkadia.com>
    * Added update section.
    * Added success stories.
    * Added RedHat 7.2 specific information
    * Added more information about "unknown report #1"

8.0 - GNU GENERAL PUBLIC LICENSE

GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.

Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.

1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.

You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.

b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.

c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.

In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.

4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.

7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.

10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS



Copyright (C) 2002-2011 - LinuxWacom -Last updated July 23, 2012
This website and its contents are licensed under the GNU GENERAL PUBLIC LICENSE.