Wiimote/Extension Controllers/Guitar Hero World Tour (Wii) Drums
Note: This is different from Rock Band drums, which are USB.
The Drums are identified by the 6 bytes: 01 00 A4 20 01 03 at register address 0x(4)a400fa. The first 01 indicates that it is drums and not a guitar (which would be 00). To read these bytes unencrypted, you must first write 0x55 to 0x(4)a400f0, then 0 to 0x(4)a400fb. Trying to read the 6 bytes after initialising the old way will just return FF FF FF FF FF FF, like many other expansions.
The drum kit reports its information as 6 bytes of data, readable at 0x(4)a40008 and streamable using Data Reporting Modes that include Extension bytes. The Guitar Hero World Tour game uses mode 0x37 with continuous reporting. The data is packed into the six bytes as follows (after decryption):
R, B, and G are the drum pads by colour (Red, Blue, and Green). O and Y are the cymbals. Bass is the pedal. B- and B+ are the black - and + buttons behind the Wii Remote. They will be 0 when hit, 1 when not.
SX and SY are the black analog stick behind the Wii Remote. 0x20 means centered.
None will be 0 if there is velocity data, and 1 if there is none. If there is none, bytes 2 and 3 will be FF FF and contain no data, and all the ??s will be 1.
If there is velocity data, then "Which" tells you which pad it is for:
Pedal = 11011 = 27 dec, 0x1B Red = 11001 = 25 dec, 0x19 Yellow = 10001 = 17 dec, 0x11 Blue = 01111 = 15 dec, 0x0F Orange = 01110 = 14 dec, 0x0E Green = 10010 = 18 dec, 0x12
"Softness" is how hard or soft you hit the pad. It ranges from 0 = Very hard to 6 = very soft, with 7 = not hit at all
"HHP" is 0 if the velocity data is for the hi-hat pedal (unmarked 3.5mm jack above bass pedal jack), and 1 otherwise. When hi-hat pedal data is sent, "Which" is set as it is for the bass drum pedal (ie 11011). The velocity varies according to how far the pedal is pressed. The pedal to connect to the jack is not the same as the bass drum pedal; it must be a some sort of variable resistor (varying between 20k Ohms when down and 40 Ohms when up seems to give a good spread of velocity values from 0 to 7). The messages are not always sent and are delayed by around 35ms (probably due to the home-made pedal I'm using working wrong).
"0110" is 0110 if there is velocity information, or 1111 if there is not. Its meaning is unknown.
The data in the "??" bits is also unknown, although they are always 1 if there is no velocity data.
Thanks to Metallica1969, death_au, l0stsign, MonkeyJamboree and Carl Kenner.