October 20, 2018, 06:20:04 AM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News: You can attach photos hosted by the forum rather than using an external image hosting site, this means they will stay forever and not disappear after a year or two.
   Home   Help Search Login Register  
Pages: [1]
Author Topic: Converting Wacom GD-0405-R from Serial to USB  (Read 13111 times)
Full Member
Posts: 121

View Profile WWW
« on: January 04, 2012, 08:38:52 AM »

This was my second conversion of a serial to USB tablet so I'll be more brief in this log.  You should first read this log for additional details.

For anyone new to soldering, see this post for a mini tutorial or do some Google research.

Warning: This mod will permanently disable the external serial & power connections.  Playing with electronics is not without risks. You can break or burn anything including your fingers.

Before opening and touching electronics, be sure to wear a grounding wire or anti-static strap.  Static electricity can cause invisible damage to electronics that might not be immediately noticeable, but can shorten their lifespan.  If you can't wait to get a strap or make one yourself, at least touch the case of a computer or other piece of grounded electronics periodically.

The GD-0405-R opens by unscrewing 5 screws from the bottom:

* IMG_20120102_231334-K484.jpg (426.46 KB. 2592x1952 - viewed 1259 times.)

There is no glue or clips.  Once you remove the bottom, try to take a picture but accidentally drop your $400 smart phone on the metal reflector and leave two dents:

* IMG_20120102_231723-K484.jpg (341.69 KB. 2592x1952 - viewed 885 times.)

I guess you can skip that step if you really want to, but it's a really fun and important step...  Honest.   Roll Eyes

I was surprised to see this hand print where skin oils had turned to a slight film of rust:

* IMG_20120102_231734-K484.jpg (380.02 KB. 2592x1952 - viewed 809 times.)

I guess Wacoms were hand assembled without gloves when this one was built...

This tablet is built like a mini version of the big Intuos except there's a thin plastic spacer between the metal reflector and the sensor instead of a thick styrofoam spacer.  Note the aluminum foil thing on the right.  This piece easily falls off when you take the sensor out of the case so note its orientation and position.  Also note that one side of it slides between the plastic and the metal reflector.  If you accidentally slide it between the sensor and the plastic when you put the tablet back together, I wouldn't be surprised if Bad Things Were To Happen (tm).

* IMG_20120102_232010-K484.jpg (299.48 KB. 2592x1952 - viewed 1418 times.)

Here it is from the other side.  The blue serial cable isn't screwed in to the case or anything, it just pops out with a little wiggle.

* IMG_20120102_232213-K484.jpg (380.79 KB. 2592x1952 - viewed 1108 times.)

Notice the clear plastic rectangle sitting in the top middle of the case.  That's where the light on the tablet shines through.  The clear plastic is not glued in and falls out if the case is turned over, so be careful.

As with the previous build, I started by testing that Bernard's table of connected points on the GD-0912-R was the same on this board.  It is.

                   | Internal connector |            | ADM202 pins
 Direction | PC DB9  | (board marking)    | CheckPoint |  RS --- TTL
 <--tablet | 2 (RXD) | 7 (TXD)            | CP1        |  14 <-- 11
 -->tablet | 3 (TXD) | 8 (RXD)            | CP2        |  13 --> 12
 -->tablet | 4 (DTR) | 6 (/DSR)           | CP3        |   8 --> 9
           | 5 (GND) | 4 (GND)            |            |
 <--tablet | 6 (DSR) | 5 (/DTR)           | CP4        |   7 <-- 10
 -->tablet | 7 (RTS) | 2 (CTS)            | CP5        | R2R --> TR1R

I constructed a wiring diagram next.  Red lines mark wires that need to be cut, a red box marks a component to remove, and yellow lines are parts that need to be wired together.

* Wiring diagram.jpg (213.09 KB. 644x855 - viewed 1221 times.)

The diagram above was based on a diagram from my previous build and from the GD-0912-R log.  Note that the top left of TR1R is grounded which is another way to confirm that it's the top left instead of the top right that you want to connect to the single pin on the other side.

Bernard later pointed out that there are VCC and GND holes at the bottom of the Teensy that would make wiring less messy and allow you to more easily poke the USB port out of an enclosure:

* Wiring diagram.jpg (215.26 KB. 644x855 - viewed 955 times.)

The labels for the bottom holes are not on the front of the Teensy but on the back.  You'll have to decide which set you want to use, but I would generally pick the more messy upper set because it allows you to more easily hot glue the thick part of the blue serial cable to the teensy to prevent putting any strain on the tiny wires.

I used my pocket knife scissors to cut each pin on the ADM202 chip (labeled IC1R on the board):

* IMG_20120103_102641-K484.jpg (483.27 KB. 2143x1614 - viewed 985 times.)

The wiring diagram shows you only need to cut 5 pins, but I later discovered that a plastic ridge in the case will hit your wires if you don't solder them from the side the ADM202 used to rest:

* IMG_20120103_182719-K484.jpg (483.86 KB. 2248x1693 - viewed 879 times.)

To remove TR1R I used an exacto blade to gently "saw" at its pins, and that worked pretty well:

* IMG_20120103_105247-K484.jpg (484.86 KB. 2387x1798 - viewed 909 times.)

I cut the leg of the IC2R with my pocket knife scissors, but it's very hard because the metal is so thick.  Like with the GD-1218 mod, I ended up breaking the leg off its pad when the scissors finally snapped through.  I didn't break the pad in either case, but that's probably luck.  So use extra care in cutting this leg.  Maybe try "sawing" it with an exacto or a tiny wood saw, or risk the Dremel cutting wheel, or try to desolder it before cutting it.

Since there is no room for the Teensy inside this tablet, I soldered wires from the Wacom board to wires in the blue serial cable and then connected the wires to the Teensy on the other end:

* IMG_20120103_182701-K484.jpg (484.43 KB. 1727x2294 - viewed 954 times.)

I'm going to have to buy an electronics project enclosure to put the Teensy in eventually.

For some reason, the ground wire would not stick where I tried to solder it in the wiring diagram.  I spent 30 minutes trying and it never stuck even for a moment.  It must be a heat dissipation problem because the ground plane is really wide there.  I moved it to pin 4 of the internal connector and it stuck immediately.  Then I found that plastic ridge was hitting it when the case was closed so I moved it to the bottom of the internal connector.  Then I found other wires wouldn't fit with it there so I moved it to the top of the internal connector.  Wires still wouldn't fit, so I cracked apart the internal connector with my pocket knife scissors and cut its little pins away one by one:

* IMG_20120103_214005-K484.jpg (476.03 KB. 2592x1952 - viewed 968 times.)

In the end, only its top remained where I'd soldered the ground wire to.  I must have spent two hours trying to get these damn wires to fit, and the case still bulges slightly in the middle, I think because the wires are just too thick.  Here's the configuration that worked best:

* IMG_20120103_220931-K484.jpg (483.82 KB. 1693x2248 - viewed 903 times.)

The problem is that wires must run to the left of a vertical plastic ridge that sits to the right of the ADM202.  Then there's two or three short plastic ridges sticking out horizontally from the left side, so wires must not be too far left, either.  In fact, I had to remove the hot glue to the right of the two wires that have Z bends in them because the Z bends were hitting a plastic ridge on the left.  Removing the hot glue let the Z bends sit farther right.  I glued the wire down with a single drop of hot glue a little lower but forgot to take a picture.

So if you don't want to waste two hours trying to make your wires fit, here's some tips:
  • Use really small wires.  Wires the same size as the ones from the serial cable would do well.
  • Place the end of the blue serial cable exactly where it will end up sitting, then cut your wires almost exactly the correct length so you don't have to do sharp bends like I did to make them fit.
  • Hot glue is recommended to prevent your wires from moving and breaking the solder.  When you hot glue wires down, move the wire to the side and place a small drop of hot glue directly on the Wacom board and then quickly mush the wire into it as deep as it will go.  Don't add extra hot glue because you may need to pull it off and move the wire if it doesn't fit right.  Cut the glue down in with scissors or an exacto blade so it doesn't protrude much above the surface of the Wacom sensor.
  • Use minimal solder and minimal hot glue around where wires connect from the blue serial cable to the internal wires.  Use a scissors to trim the glue down so it doesn't bulge too far around the wires.
  • Angle the VCC wire to the right and thread it between some components like in the picture above.  That way, the D2 and D3 wires have room to run to the left of the VCC wire.

In my GD-1218 mod, I'd encountered a lot of corruption in the serial data until I carefully cleaned off the flux I'd used during soldering.  With this build, I used less flux but I still cleaned it all carefully with a soft toothbrush dipped in 70% rubbing alcohol (100% would be better).  In this case, I didn't see any change in resistance between pins before and after cleaning.  I compared resistance values in this mod with the GD-1218 mod and they were fairly similar, though a little higher in most cases and I didn't find the odd 3-6ohm resistance between ground points.  Resistance between pins 9 and 10 or 11 or 12 was 64kohm in this mod instead of 39kohm.

Since there was no Intuos 4x5 config template in WaxBee, I had to create one.  First, I measured the button strip height as drawn in white outline on the sensor board and found it to be 10mm (instead of 12mm on larger tablets).  I calculated the resolution as follows:

Y resolution = 4 inches * 2540 lpi + (10mm/0.01) = 10160 + 1000 = 11160
X resolution = 5 inches * 2540 lpi = 12700

Since none of the existing configurations for emulating a 9x12 or 12x18 have the same aspect ratio as a 4x5 tablet, I decided to emulate a 4x5 directly, so I replaced all references to X and Y resolutions with the values above.  The only other change needed to convince the Wacom driver I was using a 4x5 Intuos2 was to change the "product id" value of the USB_DEVICEDESC parameter.  The existing product id for a 12x18 tablet was 0x45 and I found some source code that showed 0x45 was an Intuos2 12x18 while 0x41 was an Intuos2 4x5, so I replaced 0x45 with 0x41.

Here's the product ids I found for various Wacom tablets if anyone needs them to emulate other tablets:
056a  Wacom Co., Ltd
        0000  PenPartner
        0001  PenPartner 4x5
        0002  PenPartner 6x8
        0010  Graphire
        0011  Graphire 2
        0013  Graphire 3 4x5
        0020  Intuos 4x5
        0021  Intuos 6x8
        0022  Intuos 9x12
        0023  Intuos 12x12
        0024  Intuos 12x18
        0030  PL400
        0031  PL500
        0032  PL600
        0034  PL550
        0035  PL800
        0041  Intuos2 4x5
        0042  Intuos 2 6x8
        0043  Intuos 2
        0044  Intuos2 12x12
        0045  Intuos2 12x18
        0400  PenPartner 4x5
        4850  PenPartner 6x8

Using hid_listen with the same debug Teensy config I'd used with my 12x18 mod, I saw that my Intuos firmware was less than 2.0, so I assumed 38400 baud would not work, but I tried it just in case.  As expected, it doesn't work, so I used 19200 baud in my config file.

Here's the resulting config file and it works great, including the button strip:

# WaxBee configuration
NAME = "GD-0405-R to Intuos2 4x5, 19.2k"
DESCRIPTION = "Converts an Intuos 4x5 (GD-0405-R) to a USB Intuos2 (XD-0405-U)"

# Valid choices for USB_PORT:
# 2: DEBUG


# Valid choices for SERIAL_PORT:
# 2: DEBUG


# Valid choices for ADB_PORT:

0x12, # bLength
0x1, # bDescriptorType
0x0,0x2, # bcdUSB - the Graphire3 is set at 1.1 (0x110) -- hope that is not a problem
0x0, # bDeviceClass
0x0, # bDeviceSubClass
0x0, # bDeviceProtocol
0x8, # bMaxPacketSize0 for endpoint 0
0x6a,0x5, # vendor id - WACOM Co., Ltd.
0x41,0x0, # product id - Intuos2 4x5
0x26,0x1, # bcdDevice - "version number" of the Wacom XD-1218-U
0x1, # iManufacturer
0x2, # iProduct
0x0, # iSerialNumber
0x1 # bNumConfigurations

0x9, # bLength - USB spec 9.6.3, page 264-266, Table 9-10
0x2, # bDescriptorType;
0x22,0x0, # wTotalLength (9+9+9+7)
0x1, # bNumInterfaces
0x1, # bConfigurationValue
0x0, # iConfiguration
0x80, # bmAttributes
0x32, # bMaxPower (mA/2)(XD-1218-U = 140mA, Teensy = ??? : Total: 100mA)
0x9, # bLength - interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
0x4, # bDescriptorType
0x0, # bInterfaceNumber
0x0, # bAlternateSetting
0x1, # bNumEndpoints
0x3, # bInterfaceClass (0x03 = HID)
0x1, # bInterfaceSubClass (0x01 = Boot)
0x1, # bInterfaceProtocol (0x02 = Mouse)
0x0, # iInterface
0x9, # bLength - HID interface descriptor, HID 1.11 spec, section 6.2.1
0x21, # bDescriptorType
0x0,0x1, # bcdHID - Intuos2 is using HID version 1.00 (instead of 1.11)
0x0, # bCountryCode
0x1, # bNumDescriptors
0x22, # bDescriptorType
0x9a,0x0, # wDescriptorLength  HIDREPORTDESC Length (Graphire3 is 0x0062)
0x7, # bLength - endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
0x5, # bDescriptorType
0x81, # bEndpointAddress  1 | 0x80
0x3, # bmAttributes (0x03=intr)
0xa,0x0, # wMaxPacketSize
0x5 # bInterval max number of ms between transmit packets

0x5,0x1, # USAGE_PAGE (Generic Desktop)
0x9,0x2, # USAGE (Mouse)
0xa1,0x1, # COLLECTION (Application)
0x85,0x1, #   REPORT_ID (1)
0x9,0x1, #   USAGE (Pointer)
0xa1,0x0, #   COLLECTION (Physical)
0x5,0x9, #     USAGE_PAGE (Button)
0x19,0x1, #     USAGE_MINIMUM (Button 1)
0x29,0x3, #     USAGE_MAXIMUM (Button 3)
0x15,0x0, #     LOGICAL_MINIMUM (0)
0x25,0x1, #     LOGICAL_MAXIMUM (1)
0x95,0x3, #     REPORT_COUNT (3)
0x75,0x1, #     REPORT_SIZE (1)
0x81,0x2, #     INPUT (Data,Var,Abs)
0x95,0x5, #     REPORT_COUNT (5)
0x81,0x3, #     INPUT (Cnst,Var,Abs)
0x5,0x1, #     USAGE_PAGE (Generic Desktop)
0x9,0x30, #     USAGE (X)
0x9,0x31, #     USAGE (Y)
0x9,0x38, #     USAGE (Wheel)
0x15,0x81, #     LOGICAL_MINIMUM (-127)
0x25,0x7f, #     LOGICAL_MAXIMUM (127)
0x75,0x8, #     REPORT_SIZE (8)
0x95,0x3, #     REPORT_COUNT (3)
0x81,0x6, #     INPUT (Data,Var,Rel)
0x5,0xd, # USAGE_PAGE (Digitizers)
0x9,0x1, # USAGE (Digitizer)
0xa1,0x1, # COLLECTION (Application)
0x85,0x2, #   REPORT_ID (2)
0x9,0x0, #   USAGE (Undefined)
0x75,0x8, #   REPORT_SIZE (8)
0x95,0x9, #   REPORT_COUNT (9)
0x15,0x0, #   LOGICAL_MINIMUM (0)
0x26,0xff,0x0, #   LOGICAL_MAXIMUM (255)
0x81,0x2, #   INPUT (Data,Var,Abs)
0x9,0x3a, #   USAGE (Program Change Keys)
0x25,0x2, #   LOGICAL_MAXIMUM (2)
0x95,0x1, #   REPORT_COUNT (1)
0xb1,0x2, #   FEATURE (Data,Var,Abs)
0x85,0x3, #   REPORT_ID (3)
0x9,0x0, #   USAGE (Undefined)
0x26,0xff,0x0, #   LOGICAL_MAXIMUM (255)
0xb1,0x2, #   FEATURE (Data,Var,Abs)
0x85,0x4, #   REPORT_ID (4)
0x9,0x3a, #   USAGE (Program Change Keys)
0x25,0x1, #   LOGICAL_MAXIMUM (1)
0xb1,0x2, #   FEATURE (Data,Var,Abs)
0x85,0x5, #   REPORT_ID (5)
0x9,0x0, #   USAGE (Undefined)
0x26,0xff,0x0, #   LOGICAL_MAXIMUM (255)
0x95,0x8, #   REPORT_COUNT (8)
0xb1,0x2, #   FEATURE (Data,Var,Abs)
0x85,0x6, #   REPORT_ID (6)
0x9,0x0, #   USAGE (Undefined)
0xb1,0x2, #   FEATURE (Data,Var,Abs)
0x85,0x7, #   REPORT_ID (7)
0x9,0x0, #   USAGE (Undefined)
0x95,0x4, #   REPORT_COUNT (4)
0xb1,0x2, #   FEATURE (Data,Var,Abs)
0x85,0x8, #   REPORT_ID (8)
0x9,0x0, #   USAGE (Undefined)
0xb1,0x2, #   FEATURE (Data,Var,Abs)
0x85,0x9, #   REPORT_ID (9)
0x9,0x0, #   USAGE (Undefined)
0x95,0x1, #   REPORT_COUNT (1)
0xb1,0x2, #   FEATURE (Data,Var,Abs)
0x85,0xa, #   REPORT_ID (10)
0x9,0x0, #   USAGE (Undefined)
0x95,0x2, #   REPORT_COUNT (2)
0xb1,0x2, #   FEATURE (Data,Var,Abs)
0x85,0xb, #   REPORT_ID (11)
0x9,0x0, #   USAGE (Undefined)
0x95,0x1, #   REPORT_COUNT (1)
0xb1,0x2, #   FEATURE (Data,Var,Abs)


USB_STRING2 = "XD-0405-U - WaxBee emulation"

# Valid choices for USB_PROTOCOL:

USB_X_MAX = 12700
USB_Y_MAX = 11160

# Valid choices for USB_BUTTON_ENCODING:
# 0: NONE
# 1: WACOM_INTUOS2_1218


# Valid choices for SLAVE_PROTOCOL:
# 6: TOPAZ


# (not implemented yet) Orientation affect X,Y coordinates but should also
# affect "tilt" and "rotation" values accordingly.
# NOTE: Data is rotated before MIN/MAX/ANCHOR transformation#

# Valid choices for SLAVE_ORIENTATION:

SLAVE_X_MAX = 12700
SLAVE_Y_MAX = 11160

# Configuration of special "Active" areas on the tablet (like a button).#

# 16Mhz is not recommended with 3.3v supply.#

# Valid choices for CPU_CORE_CLOCK:
# 0: F_16MHZ
# 1: F_8MHZ


# Serial port speed at initialization time.#

# Valid choices for INITIAL_SERIAL_PORT_SPEED:
# 0: BAUD_9600
# 1: BAUD_19200
# 2: BAUD_38400


# Serial port speed during normal operation.#

# Valid choices for SERIAL_PORT_SPEED:
# 0: BAUD_9600
# 1: BAUD_19200
# 2: BAUD_38400


# Maximum time before packet gets repeated.
# 0 to disable; max: 1200 ms#

# Power up setup of GPIO pins
# Syntax: comma separated list of commands. Example:
# C7^,D4-,P250,D4+,P500,D4-
# D4 : Pin D4, + drive high (VCC), - drive low (GND), ^ pull-up, ~ floating, Pn Pause for "n" ms#

# Multi-purpose internal debug data. To be left empty for normal operation.#

#Original notes at the bottom of this file not included because my post exceeds 20,000 characters.

« Last Edit: January 05, 2012, 11:58:57 PM by Dragon » Logged
Hero Member
Posts: 2590

pato mania

View Profile
« Reply #1 on: January 04, 2012, 02:36:50 PM »

Great stuff!  WaxBee used to its potential!  Grin I will add your new template to the waxbee distribution.

BTW, in case you haven't seen them, you can use the VCC and GND pins from the other side of the Teensy to "clear out" the mini-usb connector area of wires (if that is "exposed" as a something the user can manipulate).

Full Member
Posts: 121

View Profile WWW
« Reply #2 on: January 04, 2012, 05:21:00 PM »

Yay Waxbee!

Aww man, I thought I'd seen VCC or GND near the bottom of the Teensy and I looked for them before I connected the wires, but I didn't look at the back... Blarg.  Teach me to do wiring diagrams at midnight.
Hero Member
Posts: 2590

pato mania

View Profile
« Reply #3 on: January 04, 2012, 07:23:15 PM »

Teensy enclosure suggestion: You could get 18 mm diameter heat shrink tubing (lots of color choices). It is a perfect fit for the Teensy. You shrink it and cut the remaining in whatever form you like to fit the connector and the board side. You can use a series of smaller and smaller tubes to get to the size of the wire going to the board. For the reset button, the trick is to put a little piece of spacer wood (like 1 or 2 mm) in front of the switch while doing the shrinking. Then carefully remove the wood. That way there is space for the button to stay depressed. To press the reset button, just press through the plastic tube. Simple, small, cheap and clean!  Grin
New Poster
Posts: 1

View Profile
« Reply #4 on: February 25, 2014, 11:49:46 AM »

I'd like to share pictures of my modification, perhaps these can be handy for others. I've found two of these GD-0405-R boards from trash and I modified both to work over USB.

I modified GD-0405-R by removing components from PCB and adding short wires on board. Then I could use the original cable by removing DB9 connector and soldering wires directly to microprosessor board similar to Teensy.

ADM202 level converter removed and TTL level signals routed directly to connector.

* IMG_4310 (Medium).JPG (176.07 KB. 1024x768 - viewed 706 times.)

Regulator was also removed and voltage supply was connected directly with short wire on unused place of R10A

* IMG_4311 (Medium).JPG (203.79 KB. 1024x768 - viewed 687 times.)

Original cable and connector. DO NOT USE THESE COLOURS without checking as your device might have different colours on cable.
Pin Function
1  GND (shield on cable)
3  Voltage supply in (previously 12V, now 5V, NOT USED/CONNECTED ON CABLE)
4  GND
7  T1out of ADM202 (connected to RXI on Teensy equivalent board)
8  R1in of ADM202 (connected to TXO on Teensy equivalent board)
9  Voltage supply in (previously 12V, now 5V)

* IMG_4312 (Medium).JPG (145.35 KB. 1024x768 - viewed 698 times.)

Wires soldered to processor board. I didn't use Teensy, but board doesn't have as much free space as Teensy has, I suggest that you stick with Teensy so that you can use the original and unmodified waxbee.

* IMG_4318 (Medium).JPG (154.9 KB. 1024x768 - viewed 750 times.)

Thank you Bernard on your support on this and your efforts on creating Waxbee. Bernard also modified waxbee to prevent lost bytes.
Version 0.15:
Interruption based serial reception with a 800 bytes buffer. No more loose bytes.

I used the configuration file from first Dragons post, which worked great. Thank you Dragon.

I used these drivers.
from here

ADM202 datasheet

« Last Edit: February 25, 2014, 01:33:40 PM by jaker » Logged
New Poster
Posts: 2

View Profile
« Reply #5 on: September 06, 2016, 04:48:28 AM »

Hey guys,

I have a GD-0405-R that was working in Win 7 x64 with a serial to usb PL-2303 converter but not in Win 10 x64, so after lots of reading ( MUCH thanks to Bernard, Dragon and Jaker and this thread!  Cheesy Cheesy ) I converted it to an intuos 2 4x5 waxbee reusing the existing wires like Jaker. I don't even need the 12V power supply any more!
Now it works in Win 10 Pro x64 using the WacomTablet_6.2.0w5 drivers.

Thanks so much for all the info, you've saved my really old but almost pristine wacom from being thrown out in the trash! Now my nephews can use it ( and not my Wacom 4 wireless  Tongue ). Much appreciated, guys!

Just in case it helps anyone, I installed the drivers with Vista compatibility, and the tablet shows up in Device Manager under Human Interface Devices as "HID-compliant digitizer" (location: USB Input device) and "USB Input Device" (Location: Port_#0001.Hub_#0004, VID_056A PID_0041).

« Last Edit: September 06, 2016, 04:53:12 AM by acediac » Logged
Pages: [1]
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!