GIMX for Xbox 360 Peripherals on Xbox One

Discuss everything to do with GIMX here
SrgntBallistic
Posts: 2
Joined: Thu Jan 31, 2019 6:00 pm

GIMX for Xbox 360 Peripherals on Xbox One

Post by SrgntBallistic » Fri Feb 01, 2019 5:57 pm

Hello,

I'm new here* and just getting a grasp on the capabilities of GIMX. I did a search and saw a few older threads about Rock Band compatibility. I know it's currently listed in the incompatible list.

A while back Harmonix (RB developer) worked with PDP (officially licensed peripheral company) to produce a limited run of a Legacy Peripheral Adapter that let people used their Xbox 360 wired peripherals on Rock Band 4 for Xbox One. For some reason despite there still being a large demand they decided to discontinue the adapter. Some conjecture it's because they had a falling out with Harmonix. Others that the licensing/auth costs associated with making devices for Xbox One made the product unprofitable.

Image

To this day people are still trying to find these devices for reasonable prices. Of course people have taken advantage and bought multiple listing them for as much as $500 on ebay (MSRP was $29.999 and dropped to $9.99 at points).

A few people discussed reverse engineering the PDP adapter but nothing much came of it. Specifically for drums there's quite a few people that bought nice Electronic Drum kits just to play. Now they're left without a way to play the newest game. A lot of us have put hundreds or more into our music libraries. Some people have even bought PS4s and abandoned their non-transferable song library to keep playing.

I have a PDP Legacy adapter and decided to look into see if there was a reasonable alternative to the adapter. That's why I'm here. I think quite a few people would gladly pick up GIMX adapters DIY or from the shop if it helped them.

I've done a little bit of work to figure out what the PDP device is doing. I hooked them up to my PC and sniffed the USB messages when hitting buttons and drums. Similar to GIMX it takes the poll response from the Xbox 360 peripherals and changes it to what Rock Band on the Xbox One expects.

Image

My understanding of the report format is as follows
Reports are type 0x00, and 20 bytes long:

0014ttttxxyyaaaaaaaabbbbbbbb000000000000
x - left trigger
y - right trigger
a - left thumbstick
b - right thumbstick buttons:

tttt is the rest of the buttons and used the following button mask.
0x0001 Left shoulder
0x0002 Right shoulder
0x0004 XBox button
0x0008 ??
0x0010 A
0x0020 B
0x0040 X
0x0080 Y
0x0100 D-pad up
0x0200 D-pad down
0x0400 D-pad left
0x0800 D-pad right
0x1000 Start
0x2000 Back
0x4000 Left thumbstick button
0x8000 Right thumbstick button

So as seen in the image Rock Band on both systems seems to encode the different drum hits to a combination of controller buttons along with the left and right thumbstick angle.

So it seems possible to map this and passthrough the data. I'm not sure what or if the first 8 or so bytes of the Xbox One reports represent.

Wondering if it might be possible to use GIMX for this with Drums at first at least. If not would anyone have any recommendations to accomplish this with something more custom.

Thanks in Advance,
Brian

User avatar
Matlo
Posts: 5395
Joined: Wed Jul 06, 2011 7:01 am
Location: France
Contact:

Re: GIMX for Xbox 360 Peripherals on Xbox One

Post by Matlo » Fri Feb 01, 2019 9:56 pm

Hello,

I recommend to capture communication between the adapter and the console. Then see if there are unexpected thing happening. If you see strange transfers with data looking random between captures, then there is probably some authentication involved.

For this task you can use serialusb: https://github.com/matlo/serialusb
GIMX creator Donate Shop

SrgntBallistic
Posts: 2
Joined: Thu Jan 31, 2019 6:00 pm

Re: GIMX for Xbox 360 Peripherals on Xbox One

Post by SrgntBallistic » Fri Feb 01, 2019 9:58 pm

Thank you. I'll look into this! I'm not sure I have the hardware on hand to get it down right away. But will update if when I'm able to.

Not sure if the Device Info reported to Windows is of importance. But here it is.
https://imgur.com/a/r8ET4cd

I can also get the initialization/handshake between the devices and windows in the mean time.

Captive
Posts: 1
Joined: Fri Feb 08, 2019 6:32 pm

Re: GIMX for Xbox 360 Peripherals on Xbox One

Post by Captive » Fri Feb 08, 2019 8:02 pm

SrgntBallistic, thank you for starting this.
I am one of those people seeking the wired PDP adapter, or an affordable alternative.

I've ordered a GIMX adapter. I have the ION Drum rocker and a few Linux PCs including a Pi3.
If I can assist without the wired PDP legacy adapter, I'll try my best.

shakey3526
Posts: 1
Joined: Sun Feb 24, 2019 6:30 pm

Re: GIMX for Xbox 360 Peripherals on Xbox One

Post by shakey3526 » Sun Feb 24, 2019 6:33 pm

hey thanks for looking into this. i will stay posted to this thread, maybe in the future i might be able to add some insight but right now i'm still learning.

Forbidden Era
Posts: 44
Joined: Thu Dec 27, 2018 6:21 am

Re: GIMX for Xbox 360 Peripherals on Xbox One

Post by Forbidden Era » Wed Feb 27, 2019 6:23 pm

Matlo wrote:
Fri Feb 01, 2019 9:56 pm
Hello,

I recommend to capture communication between the adapter and the console. Then see if there are unexpected thing happening. If you see strange transfers with data looking random between captures, then there is probably some authentication involved.

For this task you can use serialusb: https://github.com/matlo/serialusb
Just saw this..sick!! Off topic for the thread but this is potentially useful for lots of interesting stuff. Bookmarked!

redion1992
Posts: 22
Joined: Wed Dec 13, 2017 3:19 pm

Re: GIMX for Xbox 360 Peripherals on Xbox One

Post by redion1992 » Mon Mar 04, 2019 6:59 am

Ooh, here’s something I’m in a good position to help with. I have a GIMX, the full setup for e-drums on RB4 X1 (PDP adapter, MadCatz MIDI Pro adapter, ekit) and a wireless RB3 kit with MadCatz X1 adapter to compare against, if necessary. I may even be able to dual-proxy to capture the input and output of the PDP adapter, using multiple GIMXs.

I know that the analog data is used to encode velocity information, while the different pads mapped to the same colour are handled by a combination of buttons.

If anyone has any requests for tests to perform, let me know and I’ll see what I can produce.

I’m seeing two different parts to implementing this into GIMX; the ability to output PDP-esque data to the X1, based on the data transmitted in via the MadCatz MIDI adapter; and further down the line, the possibility of being able to map MIDI data to controller outputs. This would eliminate the requirement for a MIDI adapter, which are also increasingly rare.

redion1992
Posts: 22
Joined: Wed Dec 13, 2017 3:19 pm

Re: GIMX for Xbox 360 Peripherals on Xbox One

Post by redion1992 » Sun Mar 24, 2019 9:29 am

OK, I’ve just been doing some reading on this, and the differences between the 360 and X1 controller packet formats.

The PDP adapter does only a few things to the 360 packet; it adds a header to it, calculates some bytes based on input, and sends it on.

Code: Select all

|360 packet               |Value              |X1 packet           |Value                           |
+---------------------------------------------------------------------------------------------------+
|                         |                   |Packet type         |0x20                            |
|                         |                   |Empty               |0x00                            |
|                         |                   |Counter             |Rolling (add 1 per packet sent) |
|                         |                   |Size                |0x17                            |
|                         |                   |Button state (high) |Based on bytes 3/4 of 360 packet|
|                         |                   |Button state (low)  |Based on bytes 3/4 or 360 packet|
|                         |                   |Static value        |0x08                            |
|Init                     |0x00               |Start of X360 report|                                |
|Size                     |0x14               |                    |                                |
|Button state (high byte) |                   |                    |                                |
|Button state (low byte)  |                   |                    |                                |
|LT                       |0x00               |                    |                                |
|RT                       |0x00               |                    |                                |
|Left stick X (high byte) |0x00               |                    |                                |
|Left stick X (low byte)  |Red pad velocity   |                    |                                |
|Left stick Y (high byte) |0x00               |                    |                                |
|Left stick Y (low byte)  |Yellow pad velocity|                    |                                |
|Right stick X (high byte)|0x00               |                    |                                |
|Right stick X (low byte) |Blue pad velocity  |                    |                                |
|Right stick Y (high byte)|0x00               |                    |                                |
|Right stick Y (low byte) |Green pad velocity |                    |                                |
|Packet end               |0x000000000000     |                    |                                |
+---------------------------------------------------------------------------------------------------+

The calculated bytes for the buttons are as follows:

Code: Select all

+------------------------------------------------------------+
|Button        |360 Value|X1 Value                           |
+------------------------------------------------------------+
|Menu (Start)  |0x1000   |0x0004                             |
|View (Back)   |0x2000   |0x0008                             |
|A             |0x0010   |0x1000                             |
|B             |0x0020   |0x2000                             |
|X             |0x0040   |0x4000                             |
|Y             |0x0080   |0x8000                             |
|D-pad Up      |0x0100   |0x0001                             |
|D-pad Down    |0x0200   |0x0002                             |
|D-pad Left    |0x0400   |0x0004 (guess)                     |
|D-pad Right   |0x0800   |0x0008 (guess)                     |
|Left Shoulder |0x0001   |0x0010                             |
|Right Shoulder|0x0002   |0x0020                             |
|Left Stick    |0x4000   |Guessing 0x0040 (assuming dropped) |
|Right Stick   |0x8000   |Guessing 0x0080; definitely dropped|
+------------------------------------------------------------+

Guesses based on info from https://vestigl.com/packetformat/packet ... l#From0x20 and https://raw.githubusercontent.com/torva ... ick/xpad.c. It is likely that the game ignores this content, however it is included for the purposes of navigating the dashboard.

The biggest thing now would be to emulate the X1 authentication process, and also handle guide button presses. The guide button apparently has a completely different report type on X1...

redion1992
Posts: 22
Joined: Wed Dec 13, 2017 3:19 pm

Re: GIMX for Xbox 360 Peripherals on Xbox One

Post by redion1992 » Tue May 07, 2019 2:14 pm

OK, got some bad news. The adapter passthrough works for dual proxying - on the dashboard. However, in-game it appears that no controller is connected, so I can only capture the input side. I'm guessing here that the RB4 software is performing a VID/PID check for a valid adapter (the PDP device is VID 0x0e6f PID 0x0175), so we may need to spoof that as well. Tried to figure that out between firmwares, avrdude, and trying to copy together a custom board for the Arduino IDE, but no luck.

User avatar
Matlo
Posts: 5395
Joined: Wed Jul 06, 2011 7:01 am
Location: France
Contact:

Re: GIMX for Xbox 360 Peripherals on Xbox One

Post by Matlo » Tue May 07, 2019 8:00 pm

I'm not sure you got serialusb to work correctly. Connect as following: PDP <--> RPi <--> adapter <--> Xbox One. Then run 'sudo serialusb-capture.sh', select '/dev/ttyUSB0', and lastly select the device matching VID:PID 0x0e6f:0x0175.
GIMX creator Donate Shop

Post Reply