Drivers for the Cross iPen

Here are a couple of drivers I’ve been working on for the Cross iPen. The iPen is a long-discontinued drawing tablet that tries to act much like a pen, but which has a odd (and for the longest time proprietary) output format. My iPen languished in my office for about 4 years before Christopher Barrington-Leigh managed to get a specification for the output to me, at which point I picked it up off the floor, replaced the exploded AAAA battery with a new one, and started writing drivers.

I’ve written drivers for gpm version 1.19.6 and for XFree86 3.3.6. I’ve also hacked support into the FreeBSD moused driver, but that driver isn’t really good for handling tablets, so I’ve not pursued it very far.

I’ve written:

A test program
This little program (which works under FreeBSD and [Linux] ( with gl*bc) simply configures the iPen and reports status changes on stdout.
A GPM patch
This patch adds iPen support to gpm 1.19.6. The iPen is not well-suited to autodetection (because you have to do a funny initialization sequence) so you have to explicitly set the mouse type to ipen. This software is released both under a BSD-style license and a stripped down version of that license that should be compatable with the GPL.
An Xinput driver

This program, once you get it built, adds an XExtensionDevice to your X server that lets you use the iPen as a mouse (and I think also as a drawing device for the GIMP and other graphics programs.) I’ve built it as a loadable module for X11, but I think it will also work if you statically link it into the server. It wasn’t easy for me to get this thing to build (I had to manually hack the Makefile in xc/programs/Xserver/hw/xfree86/common to build it, so I’d be intensely thankful if someone could point me to a tutorial on how to write Xinput modules without having to drag the whole obnoxious X11R6 source distribution around after it.

To build the iPen driver as part of the X server (for Xfree 3.3.6; I don’t know what the build process is for Xfree 4 or the Xopen offering), you need to

  1. get a X source distribution and unpack it into $ROOT (pick your $ROOT, but remember it.
  2. copy xf86iPen.c to ${ROOT}/programs/Xserver/hw/xfree86/common.
  3. cd to ${ROOT}/programs/Xserver/hw/xfree86/common.
  4. edit the Imakefile (add xf86iPen.c to XINPUT_DEV_SRCS and xf86iPen.o to XINPUT_DEV_OBJS)
  5. run “xmkmf” (will build the makefile).
  6. cd to $ROOT.
  7. run “make”.

All of this code is released under a BSD-style copyright, so you can do just about everything you want with it.