BitBucket repository is live: https://bitbucket.org/MostThingsWeb/usbdrumming/src
So, you’ve got one of those Guitar Hero (World Tour) drumsets, and want to use it with your computer? Are you also looking for a fun DIY project involving soldering, electronics, and possibly voiding a few warranties on consumer hardware? Great! Read on.
I can’t claim all the credit. This project is based on a 2009 article, How to use Guitar Hero World Tour Drums as a real MIDI drumkit, by Mathijs van den Berg. His article proved to be very useful in helping me to initially understand the protocol and devise my plan of attack.
Like Mathijs, there were several reasons why I didn’t want to settle for any of the already existing solutions:
- All required the Xbox 360 wireless receiver (or some Wiimote receiver)
- All required software from dark corners of the internet
- Since a wireless receiver had to be used, latency (lag) would be introduced
I approached this project with two goals:
- Be able to interface with the drumset over USB to any computer
- Still be able to use the drumset for its intended purpose (i.e. play Guitar Hero on my PS3)
If you read Mathijs’ article (cited above), you already know that the drumset consists of two main components that communicate with SPI; the control box and the drumpad controller. The control box is the box that sits at the top of the drumset. It is specific to each console (the Playstation 3 drumset has a different control box than the Wii drumset, for example). The drumpad controller, inside the drumset, is the circuit board that interfaces the drumpads and cymbals to the control box. The drumpad controller board is common to all versions of the drumset.
It was nice to begin this project with a good idea of what lay ahead, and I’d like to thank Mathijs for reporting his findings. Unfortunately, his blog post lacked two important resources: the circuit he used to interface with the drumset and his software. Also, I would bet that his solution sacrificed the ability to still use the drumset to play Guitar Hero, which is one of my objectives.
Exploring the hardware
With knowledge of the basic protocol in hand, I knew that I would need a way to debug whatever I was building to make sure that it was communicating correctly, so I ended up purchasing a Saleae logic analyzer. The first thing I did with it was to record some communications between the drumpad controller and the control box while the system was operating normally. These “control” communications would be important for later when I tried to iron out the details of the protocol and emulate it myself.
In the screenshot below, you can see an example of “normal” communications. Every 10 ms (100 times a second), the control box polls the drumpad controller for information on the pads that have been hit. To do this, it pulls ENABLE low and, 27.5 microseconds later, sends 0xAA (control box communications are on the MOSI line). The drumpad controller simultaneously responds (on MISO) with 0xAA to confirm. About 33 microseconds later, the control box sends 0x55. The drumpad controller responds with the number of drumpads that have been hit since the last time it has been polled.
When no drumpads have been hit (as is the case in the above screenshot), no further action is required. The control box simply places the ENABLE line high, disabling communications until next time (10 ms later). If a drumpad was hit, then the following happens for each pad hit:
- Control box sends 0; drumpad controller responds with 0x99
- Control box sends 0; drumpad controller responds with the pad that was hit
- Control box sends 0; drumpad controller responds with the velocity of the hit (i.e. how hard it was hit)
You might notice that even when ENABLE is high (meaning communications between control box and drumpad controller are disabled), there is still chatter. I was wondering about this, so I appealed to the Electrical Engineering Stack Exchange for help. They helped me realize that there were other “slaves” sharing the SPI bus. In this case, the transmitter that communicates between the control box and console (PS3, Wii, etc.) were sharing the communication lines. Those communications can be ignored.
In Part 2, I’ll crack open the drumset and prototype the embedded software and hardware that communicates with it (spoiler: Arduino is involved).