What are the controller ids in a Steam announcement?

In the Steam announcement "v1.55 Released - XInput Support, Xbox One Controller Compatibility", a number of controllers were listed, each with an id of some sort after them. Some of them were as follows:

• PS3 dual shock [0x00050925]
• Afterglow PS3 Controller [0x08361A34]
• USB Joystick (PS2 adapter) [0x00030E8F]
• Twin USB Joystick (PS2 adapter) [0x00010810]
• PS2 USB [0x00030810]
• OUYA Controller [0x00012836]
• RetroUSB RetroPad [0x0003F000]

What are these ids following the name of each controller? Do they mean something? Is there a list of them somewhere?


Solution 1:

USB and Bluetooth devices are identified by a pair of 16-bit values representing the Vendor and Product. Usually this is what the system will look at when deciding whether a device is supported by a particular driver.

Vendor IDs must be registered with the USB Implementers Forum to make sure no two devices have the same ID. It's the responsibility of the vendor to assign unique product IDs. A single vendor ID costs $5000.

The hex values in the Steam compatibility notes are 32-bit values with the product ID in the first 4 digits and vendor ID in last 4 digits. The names are a little confusing because none of these devices are genuine Sony gamepads, even when it says PS2 or PS3. There are sites that maintain lists of known device IDs, but they are incomplete and sometimes inaccurate.

Let's run through the list to illustrate some of the issues.

PS3 dual shock has vendor 0925, registered to Lakeview Research. A device with that product ID is also known as "Gamtec.,Ltd SmartJoy PLUS Adapter". Probably it's this thing.

Afterglow PS3 Controller has vendor 1a34, registered to ACRUX. It's not in the database but there's an open-source project that has a configuration file for this gamepad and calls it "PDP Afterglow AP.1 Controller for PS3". Maybe it's one of these?

USB Joystick (PS2 adapter) has vendor 0e8f, registered to GreenAsia. Maybe this is the MaxFire Blaze2? Or maybe this product ID was reused for a PS2 adapter, as the name suggests.

Twin USB Joystick (PS2 adapter) and PS2 USB both have vendor 0810, registered to Personal Communication Systems. The latter is in the database as "PlayStation Gamepad", but I'd be surprised if it is using that trademark with permission.

OUYA Controller has vendor ID 2836, which as far as I know was never registered. This is the official gamepad for the now-defunct Android-based OUYA console.

RetroUSB RetroPad has vendor ID f000, which is not registered. Probably it's this NES-styled gamepad.

For gamepads, the most complete sources of information on vendor and product IDs are third-party open source gamepad drivers like SDL2, 360Controller, and xpad.