use uDraw GameTablet on PC as mouse/tablet

uDraw GameTablet for the PC

Latest versions:

If you're having trouble with the latest version (8.0.0), try an older one.

The latest source can be found at:

overview

This is a .NET PC application that allows you to use either the Wii, PS3, or Xbox 360 uDraw GameTablets as a mouse input device. It supports absolute vs. relative cursor movement, mapping of actions to specific buttons, and multiple tablets at once.

The latest version adds:


 

For the Wii version, you need to attach a Wii remote to it and sync it via Bluetooth with your PC. Not all USB Bluetooth adapters are compatible; see elsewhere about pairing a Wii remote with your PC.
You may need to re-pair it after turning off the Wii remote; I don't know why, but it's something I have to do.

For the PS3 version, you just need the USB dongle that comes with the tablet (what you normally plug into the PS3, and fits inside the tablet's battery compartment).
For the Xbox 360 version, you need an Xbox 360 USB wireless receiver (what people use to play PC games with wireless Xbox 360 controllers). They sometimes come bundled with Microsoft Xbox 360 wireless controllers, or you can buy a Chinese knockoff online, or you can make one yourself by salvaging the RF board of a broken console.

This application is open source and has no license attached to it, so you're free to do whatever you want with it; but please don't slap your name on it and call it your own, that's just rude. Plus you'll probably go to hell for it.

how to set it up

For the Wii tablet, no additional set-up is necessary beyond initial pairing.

For the PS3 tablet, no additional set-up is necessary.

For the Xbox 360 tablet, you must install a libusb driver for your USB wireless controller receiver. This means you CANNOT use it simultaneously with other controllers; you will have to manually switch back and forth between Microsoft's driver and the libusb one in Device Manager. If you're only using the wireless receiver for the tablet, then you don't need to worry about it.

Install LibUsbDotNet and then run its "USB InfWizard". Go through the wizard to generate a driver for the wireless receiver (you'll need to specify a location to save the driver files), and then click "Install Now" to install it.

Once you have it set up correctly, run the executable in the "bin" folder and double-click the notification area icon. You should see "PS3 uDraw Tablet Device" in green if using the PS3 tablet, or "Xbox 360 Wireless USB Receiver" in green if using the 360 tablet. If you see red instead, you haven't installed the driver correctly (or it's not connected to the PC).

Next, to sync the 360 tablet, hold down the Xbox Guide button on the tablet until the lights flash. You may need to hold down the sync button on the bottom of the tablet (and press the sync button on the USB wireless receiver) as well. When it is synced, the tablet will illuminate one of the four corners of the Xbox Guide button (same as when a controller is synced).

how to use it

Just run the executable in the "bin" folder. It will add an icon to the notification area, which you can double-click or right-click to bring up the options dialogs above.

Wii and PS3 tablet settings are global, and Xbox 360 tablet settings are configured per tablet based on serial number. It will save to an INI file (file name is in the title of the window).

The settings themselves should be self-explanatory; play around with them. Previous versions of this application had problems with consistent speed; hopefully those problems are resolved now.

technical information

(Where ambiguous, assume little endian.)

PS3 version

There are 0x08 bytes that can be sent on the device's OUT interrupt pipe -- I don't know what these are.
There are 0x1B bytes constantly received on the device's IN interrupt pipe, described below:

OffsetDescription
0x00Button status information:
BitDescription
0Set means square is being held down.
1Set means cross is being held down.
2Set means cricle is being held down.
3Set means triangle is being held down.
4No idea, but it set itself while playing around. More playing around reset it.
5Unknown / nothing.
6Unknown / nothing.
7Unknown / nothing.
8Set means select is being held down.
9Set means start is being held down.
10Unknown / nothing.
11Unknown / nothing.
12Set means the PS button is being held down.
0x02D-pad status information:
Description
Value
0x00UP being held down.
0x01UP+RIGHT being held down.
0x02RIGHT being held down.
0x03DOWN+RIGHT being held down.
0x04DOWN being held down.
0x05DOWN+LEFT being held down.
0x06LEFT being held down.
0x07UP+LEFT being held down.
0x0FNothing pressed.
0x03Unknown, HID report descriptor indicates X, Y, Z, and Rz and range 0x00-0xFF.
I can't get these to ever change from 80 80 80 80.
0x07Position data:
OffsetDescription
0Unknown / nothing.
1Unknown / nothing.
2Unknown / nothing.
3Unknown / nothing.
40x40 when using the pen, 0x80 when using the finger and something crazy when pinching/stretching.
50x00 normally, seems to be the distance between two fingers when pinching/stretching.
6Starts at 0x74 and goes up to 0xFF depending on how hard the pen is held down, 0x60 when not pressed.
7Unknown / nothing.
8Minimum X grid that something is being pressed in (0-7, see below). 0x0F if not pressed.
9Minimum Y grid that something is being pressed in (0-4, see below). 0x0F if not pressed.
10X offset from top-left corner of current grid of press point, or 0xFF for not pressed.
11Y offset from top-left corner of current grid of press point, or 0xFF for not pressed.
0x13Accelerometer data, four 16-bit little endian values -- all 0x0200 when not sync'd:
OffsetsDescription
0x00-0x01X axis value; 0x200 at rest, increases to ~0x215 when tilting left vertically, decreases to ~0x1EA when tilting right vertically.
0x02-0x03Y axis value; 0x200 at rest, decreases to ~0x01E6 when tilted fully forward, increases to ~0x215 when tilted fully backward.
0x04-0x05Z axis value; around 0x01EC at rest, increases to 0x200 when tilted fully forward, backward, left, or right, increases to ~0x217 when fully upside down.
0x06-0x07Unknown, never seems to change from 0x200.

Xbox 360 version

OffsetDescription
0x00Fixed 00 01 00 F0 00 13 (part of the event packet from the Xbox 360 USB wireless receiver).
0x06Directional status information:
BitDescription
0Set means UP is being held down.
1Set means DOWN is being held down.
2Set means LEFT is being held down.
3Set means RIGHT is being held down.
4Set means START is being held down.
5Set means BACK is being held down.
0x07Button status information:
BitDescription
0Unknown / nothing.
1Unknown / nothing.
2Set means Xbox Guide button is being held down.
3Unknown / nothing.
4Set means A is being held down.
5Set means B is being held down.
6Set means X is being held down.
7Set means Y is being held down.
0x08Starts around 0x72-0x74 (when not pressed) and goes up to 0xFF depending on pen pressure.
0x09Z accelerometer data; around 0x0C at rest, increases to ~0x35 when fully upside down.
0x0AX offset from top-left corner of current grid of press point, or 0xFF if not pressed.
0x0BMinimum X grid that something is being pressed in (0-7). 0x0F if not pressed.
0x0CY offset from top-left corner of current grid of press point, or 0xFF if not pressed.
0x0DMinimum Y grid that something is being pressed in (0-4), 0x0F if not pressed.
0x0E0x40 when using the pen, 0x80 when using the finger and something crazy when pinching/stretching.
0x0F0x00 normally, seems to be the distance between two fingers when pinching/stretching.
0x10X accelerometer data; starts at ~0x20, increases to ~0x35 when tilted fully left, decreases to ~0x0C when tilted fully right.
0x11Y accelerometer data; starts at ~0x24, increases to ~0x35 when tilted fully backward, decreases to ~0x0A when tilted fully forward.

Wii version

The Wii tablet is a Wii remote extension with ID 0xFF00A4200112. It returns six bytes of data:

OffsetDescription
0x00Y offset from top-left corner of current grid of press point, or 0xFF if not pressed.
0x01X offset from top-left corner of current grid of press point, or 0xFF if not pressed.
0x02Upper nibble is minimum X grid that something is being pressed in (0-5), starting at lower left corner, or 0x0F if not pressed. Lower nibble is minimum Y grid (0-7).
0x03Pen pressure, goes from ~0x08 (not pressed at all) to ~0xF4 (pressed hard).
0x04Unknown, always 0xFF.
0x05Bit 1 is reset when the pen button is being held down.

additional notes

The PS3 and 360 tablets are broken up into an 8x5 grid of 256x256 each. As the tablet's resolution is 1920x1080 (which doesn't divide evenly), the last row and column are slightly smaller:

256x256256x256256x256256x256256x256256x256256x256128x256
256x256256x256256x256256x256256x256256x256256x256128x256
256x256256x256256x256256x256256x256256x256256x256128x256
256x256256x256256x256256x256256x256256x256256x256128x256
256x56256x56256x56256x56256x56256x56256x56128x56

You can get the absolute coordinates of the point being pressed with:

The Wii tablet is a little nuttier, and is broken up into an 8x6 grid (or something like this):

158x158256x158256x158256x158256x158256x158256x158158x156
158x256256x256256x256256x256256x256256x256256x256158x156
158x256256x256256x256256x256256x256256x256256x256158x156
158x256256x256256x256256x256256x256256x256256x256158x156
158x256256x256256x256256x256256x256256x256256x256158x156
158x158256x158256x158256x158256x158256x158256x158128x158

Tablet/controller data is sent to PPJoy as follows:

Digital 0Cross / A
Digital 1Circle / B
Digital 2Triangle / Y
Digital 3Square / X
Digital 4Up
Digital 5Down
Digital 6Left
Digital 7Right
Digital 8Playstation / Xbox Guide Button
Digital 9Select / Back
Digital 10Start
Digital 11Tablet Pen Click
Digital 12Controller Left Stick Button
Digital 13Controller Right Stick Button
Digital 14Controller Left Shoulder
Digital 15Controller Right SHoulder
Analog 0Tablet Accelerometer X Axis
Analog 1Tablet Accelerometer Y Axis
Analog 2Tablet Accelerometer Z Axis
Analog 3Tablet Pressure Point X Axis (centered when not pressed)
Analog 4Tablet Pressure Point Y Axis (centered when not pressed)
Analog 5Controller Left Trigger
Analog 6Controller Right Trigger
Analog 7Controller Left Stick X Axis
Analog 8Controller Left Stick Y Axis
Analog 9Controller Right Stick X Axis
Analog 10Controller Right Stick Y Axis
(rest coming soon)

frequently asked questions

Will I still be able to use my uDraw GameTablet like normal after this? This won't affect either my tablet or the console in any way, right?
Of course; it won't affect either the tablet or the console in any way.

What do I need on my PC to run this?
.NET Framework 2.0 or better (as well as a Windows OS that it supports -- anything modern). For the Xbox 360 tablet, you also need an Xbox 360 USB wireless receiver (either the official Microsoft one, a Chinese knockoff, or a salvaged console RF board).

What do I do after running the application?
Use the tablet. Right-click the icon in the notification area and choose "Options..." (or double-click the icon) to bring up per-tablet settings you can configure.

Will you ever add Photoshop pressure sensitivity to it?
Highly unlikely. Photoshop looks for actual USB tablet devices, which this is not. This is just some code to communicate with the tablet and/or 360 receiver directly. There is no way to provide pressure sensitivity in Windows without the device actually showing up as a tablet instead of a custom device. There are only two ways I can think of around this -- expose a virtual USB tablet device and pass through all the information, or create a WINTAB32.DLL bridge between Photoshop and the real tablet. I'm probably not going to work on it.

This sucks, it's choppy and/or some parts of it don't work for me, etc.
This was never meant to be the best implementation of this kind of thing; if you don't like it, I encourage you to use the documentation on this page to produce something better.

Will there ever be a Mac or Linux port of this?
Not by me. You're welcome to use the documentation on this page to produce one.

What tools did you use to assemble/build this?
It can be built with Visual Studio C# 2010 Express from microsoft.com (or similar).

How can I scream at you / profess my undying love / ask a question / etc.?
brandonlw@gmail.com.