Brook PS2 to Xbox One Adapter

Discussion of keyboards, gamepads, joysticks and other input related peripherals.
User avatar
Vespa
Posts: 32
Joined: Sun Nov 01, 2020 5:37 pm
Has thanked: 25 times
Been thanked: 4 times

Brook PS2 to Xbox One Adapter

Unread post by Vespa »

2008213604.jpg
2008213604.jpg (40.2 KiB) Viewed 5965 times

Has anybody managed to get one of these working on a Mister? I assumed since the PC recognises this as an Xbox One pad that it would have worked on the Mister but perhaps I'm missing something. Any help would be appreciated.

User avatar
darksakul
Posts: 353
Joined: Mon May 25, 2020 4:34 pm
Has thanked: 397 times
Been thanked: 73 times

Re: Brook PS2 to Xbox One Adapter

Unread post by darksakul »

Make sure you have the switch set to Game Pad and not Steering Wheel.
Also you would want to update the MiSTer Mains, ether run the Update Script or the Update all Script as the Mister recently updated how it handles Xbox, PlayStation and Switch controllers.
It is my great regret that we live in an age that is proud of machines that think and suspicious of people who try to.
User avatar
Vespa
Posts: 32
Joined: Sun Nov 01, 2020 5:37 pm
Has thanked: 25 times
Been thanked: 4 times

Re: Brook PS2 to Xbox One Adapter

Unread post by Vespa »

darksakul wrote: Wed Oct 13, 2021 5:23 am Make sure you have the switch set to Game Pad and not Steering Wheel.
Also you would want to update the MiSTer Mains, ether run the Update Script or the Update all Script as the Mister recently updated how it handles Xbox, PlayStation and Switch controllers.
Hey darksakul, thanks for your input. It's set to GamePad and the Mister is up to date but still, nothing works, I've tried the powered port too on the Hub.
User avatar
Vespa
Posts: 32
Joined: Sun Nov 01, 2020 5:37 pm
Has thanked: 25 times
Been thanked: 4 times

Re: Brook PS2 to Xbox One Adapter

Unread post by Vespa »

I don't think it's as low lag as the brook is but the Mayflash Universal USB adapter is working.

Really surprised the Brook doesn't work since it spoofs being an Xbox One pad on Console and PC.
justaguy
Posts: 45
Joined: Thu Jun 18, 2020 5:23 pm
Has thanked: 3 times
Been thanked: 20 times

Re: Brook PS2 to Xbox One Adapter

Unread post by justaguy »

I think I've found the answer: the Brook adapter needs to receive a special packet before it starts sending input. With the xpad driver modified to send this packet, the adapter works on my Linux testbed (it didn't work before). Thanks to toyoshim on GitHub for doing the real legwork on this.

I will submit a pull request when I have some more time. The one hitch is that the Brook adapter uses the same VID and PID as a launch Xbox One controller, so the change would affect anyone using one of those controllers as well. I doubt it would cause any problems (Windows presumably does the same thing), but I thought I should mention it.

justaguy
Posts: 45
Joined: Thu Jun 18, 2020 5:23 pm
Has thanked: 3 times
Been thanked: 20 times

Re: Brook PS2 to Xbox One Adapter

Unread post by justaguy »

Ten months later and I still haven't submitted the PR... and my motivation has dropped since I'm no longer interested in using the Brook adapter--I'm going over to the wireless dark side with a DualSense once my Bluetooth dongle arrives.

For anyone interested in pushing this over the goal line, it's just a matter of adding a single line to drivers/input/joystick/xpad.c:

Code: Select all

static const struct xboxone_init_packet xboxone_init_packets[] = {
	XBOXONE_INIT_PKT(0x0e6f, 0x0165, xboxone_hori_init),
	XBOXONE_INIT_PKT(0x0f0d, 0x0067, xboxone_hori_init),
	XBOXONE_INIT_PKT(0x0000, 0x0000, xboxone_fw2015_init),
	XBOXONE_INIT_PKT(0x045e, 0x02d1, xboxone_pdp_init2), // this is the line to add
	XBOXONE_INIT_PKT(0x045e, 0x02ea, xboxone_s_init),
	XBOXONE_INIT_PKT(0x045e, 0x0b00, xboxone_s_init),
	XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init1),
	XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init2),
	XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init),
	XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init),
	XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init),
	XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumbleend_init),
	XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumbleend_init),
	XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumbleend_init),
};

As it turns out, the compatibility fix I needed was already in the driver, it's only a matter of enabling it for the Brook adapter's VID/PID (which are the same as the launch XBox One controller's). I haven't tested this code but it should function identically to my original fix.

Post Reply