Research & Development Resources regarding Gaming Input Peripherals.
An ever growing collection of research material, firmware copies, packet dumps and documentation about PS4/PS5/Xbox/... controllers that could potentially be used on PC via DS4Windows, [REDACTED]Bus and alike.
You do not need to be a programmer or reverse engineer to contribute. If you have a controller that is missing here, or a capture of a scenario we do not have yet, a careful Windows USB recording plus a short write-up is already useful.
This page walks through:
- What files and notes to collect
- How to record USB traffic on Windows with Wireshark
- How to describe the device so someone else can use the capture
- How to send the files with GitHub Desktop and open a pull request
The capture steps below are for Windows USB traffic. Bluetooth and Linux captures are welcome too, but they are not covered here.
Useful submissions usually include some mix of the following:
| Item | Why it helps |
|---|---|
USB packet capture (.pcapng) |
Shows what the controller and Windows actually exchange |
| Short notes about the device and the exact steps you took | Makes the capture usable instead of a mystery file |
| USB Device Tree Viewer report | Identifies vendor ID, product ID, revision, and how Windows sees the device |
| Photos of the pad, PCB, or labels | Helps match hardware revisions and knockoffs |
You do not have to send everything. A clean plugin capture plus a filled-in device folder is already a good start.
USB capture records traffic for every device on the same USB host controller, not only the controller you care about. Treat the resulting file as sensitive.
- Installing USBPcap and capturing USB traffic needs administrator rights. Only install the official Wireshark/USBPcap packages, and reboot when the installer asks.
- Unplug unused USB devices before you start: flash drives, phones, webcams, extra hubs, and wireless dongles. A keyboard and mouse on a different controller is fine; a phone that starts syncing on the same hub is not.
- Captures can include serial numbers and other device identifiers. Photos can include receipts, usernames, or desktop clutter. Review both before you submit.
- Do not share captures from someone else's machine without their permission.
- Save the raw capture. Do not "clean it up" in a hex editor or replace it with a screenshot of Wireshark.
If you are unsure whether a file contains personal information, say so in the pull request and a maintainer can help review it.
- Download Wireshark from https://www.wireshark.org/.
- Run the installer.
- When the installer offers additional components, leave USBPcap enabled. This is the Windows USB capture driver. If you already installed Wireshark without it, run the installer again and add USBPcap.
- Reboot when asked. USBPcap will not show up until after a restart.
USBPcap's own site is https://desowin.org/usbpcap/. You normally do not need a separate download if Wireshark installed it.
- Open Wireshark. If no USB interfaces appear, right-click the shortcut and choose Run as administrator.
- On the start screen you should see one or more interfaces named
USBPcap1,USBPcap2, and so on. Each one is a USB host controller (a group of ports), not a single physical port. - If those names are missing, USBPcap is not installed or the PC has not been rebooted.
Wireshark cannot usefully record a controller that is plugged into a different host controller than the one you selected.
- Leave the game controller unplugged.
- In Wireshark, click the small gear icon next to a
USBPcapinterface if you have one. That options dialog lists devices already on that controller. - If you are not sure which interface to use, start a short test capture on
USBPcap1, plug the controller in, and watch for a burst of USB packets. If nothing new appears, stop, try the nextUSBPcapinterface, and repeat. - USB Device Tree Viewer can also help: plug the controller in, find it in the tree, and note the hub/port chain. After that, unplug it again before the real capture.
Do one job per file. A plugin capture, a firmware-updater capture, and a "play the game for ten minutes" capture should be three files, not one.
- Unplug the controller. Close other programs that talk to gamepads if you can (Steam Input, DS4Windows, vendor software), unless that software is the thing you are documenting.
- Start the capture on the correct
USBPcapinterface before you plug the device in. The first seconds after connection (enumeration) are often the most useful part. - Plug the controller into a direct motherboard or case port if you can. Avoid cheap unpowered hubs for the recording.
- Perform one documented action, for example:
- Plug in and wait until Windows finishes installing it
- Switch the pad into another mode (XInput, DirectInput, "PS4 mode", and so on) and plug it in again
- Hold the vendor's firmware-update button combo while plugging in
- Press each face button, stick, trigger, and pad once
- Launch one specific official app or updater and complete one short action
- Stop the capture as soon as that action is done. Long recordings get large and fill up with unrelated USB noise.
- Use File → Save As and keep the format as pcapng.
- Open the saved file in Wireshark once to confirm it is not empty.
Do not export a CSV, a screenshot, or a "selected packets only" file unless a maintainer asked for that. The original .pcapng is the artifact.
Match the style already used in this repository:
2026-09-06_nacon_bb4469_windows_plugin.pcapng
2024-02-23_ds_bth_pairing_capture.pcapng
2023-03-14_logitech_driving_force_gt_plugin_OS_stock_drivers.pcapng
A good name includes the date, a short device nickname, and the scenario. Use only letters, numbers, hyphens, and underscores.
- Start recording with the device disconnected so the plugin/enumeration traffic is in the file.
- Keep one scenario per file, and write down the exact button presses or program you used.
- Write down Windows version, controller firmware version if you know it, and any extra software that was running (DS4Windows, Steam, a vendor updater).
- If the pad has several personalities, capture each mode separately and say how you selected that mode.
- After saving, confirm the file opens and that you can see USB packets around the moment you plugged the device in.
This repository uses one folder per device, named after the product people would search for:
Sony DualSense/
NACON PS4 Compact Controller BB4469Blk/
Knockoff PS3 Controller/
If the device is already here, add your new capture and notes to that folder. If it is new, create a folder with the manufacturer and model, then put the capture and a README.md inside it.
Optional extras that fit the existing layout:
images/for photos- a
.txtexport from USB Device Tree Viewer - firmware copies as
.bin(these are stored with Git LFS, same as.pcapng)
Copy this into README.md in the device folder and fill in what you know. Empty lines are fine. Guessing is worse than writing "unknown".
# Manufacturer Model Name
## Device
- Manufacturer:
- Product name / SKU:
- Hardware revision / date code (if printed on the case or PCB):
- USB vendor ID (VID):
- USB product ID (PID):
- Connection: USB
- Mode during the capture (XInput, DirectInput, PS4, updater, ...):
- Firmware version (if shown by an official app):
## Capture environment
- Windows version (Settings → System → About):
- Other gamepad software running (none / Steam / DS4Windows / vendor app):
- Wireshark version:
- USBPcap installed with Wireshark: yes
## Scenario
What you captured, in order:
1. Started Wireshark on USBPcapN with the controller unplugged
2. ...
3. Stopped the capture
## Files
- `YYYY-MM-DD_device_scenario.pcapng`:
- `UsbTreeView` report or pasted dump:
- Photos:
## Notes
Anything odd: extra modes, button combos, the pad freezing USB Device Tree Viewer, knockoff labeling, and so on.To collect identifiers without extra tools, plug the controller in, open Device Manager, find the game controller or USB device, open Properties → Details, and choose Hardware Ids. You should see something like USB\VID_054C&PID_0CE6. The four digits after VID_ and PID_ are what to copy.
To collect a descriptor dump, run USB Device Tree Viewer, select the controller, and copy the report into the README or save it as a .txt file in the same folder.
A pull request (PR) is a request that this project accept the files from your copy of it. You will:
- Make a fork (your own copy of the project on GitHub)
- Download that copy with GitHub Desktop
- Add your folder and capture on your PC
- Commit and push (save a snapshot, then upload it)
- Open the pull request on the GitHub website
You need a free GitHub account.
This repository stores packet captures with Git Large File Storage (Git LFS). The .pcapng and .bin rules are already in .gitattributes.
GitHub's Add file → Upload files page does not store those uploads as LFS objects. A browser upload can produce a commit that looks fine and then breaks clones, or it can fail because the file is larger than the website's 25 MiB limit.
Use GitHub Desktop (or another LFS-aware Git client) to add captures. Use the GitHub website afterward to write the pull request.
- Open https://github.com/nefarius/GameControllerResearch.
- Sign in.
- Click Fork in the top right and create the fork under your account. Leave Copy the default branch only checked unless you have a reason not to.
You now have https://github.com/YOUR-USERNAME/GameControllerResearch.
- Install GitHub Desktop and sign in with the same GitHub account.
- In GitHub Desktop: File → Clone repository.
- Select your fork (
YOUR-USERNAME/GameControllerResearch), choose a local folder, and click Clone.
GitHub Desktop includes Git LFS, but you still need to turn it on once on this PC:
- In GitHub Desktop, open the cloned repository.
- Choose Repository → Open in Command Prompt (or Open in Git Bash). If that menu item is missing, choose Repository → Show in Explorer, click the folder address bar, type
cmd, and press Enter. - Type the following and press Enter:
git lfs install
You should see Git LFS initialized. You only need to do this once per computer, not once per contribution.
A branch is a named line of work so your upload is not mixed into master until it is reviewed.
- In GitHub Desktop, click Current branch.
- Click New branch.
- Name it after the device or scenario, for example
add-nacon-bb4469-plugin-capture. - Create the branch from
master.
- In GitHub Desktop, choose Repository → Show in Explorer.
- If the device is new, create a folder next to the existing device folders. Use the same naming style (
Manufacturer Model). - Copy your
.pcapnginto that folder. Do not rename it to drop the.pcapngextension. - Create or update
README.mdwith the template above. Notepad is enough. Keep the.mdextension. - Add photos under an
imagesfolder only if they help identify the hardware.
GitHub Desktop's Changes tab should now list the new folder and files.
- In GitHub Desktop, keep the new files checked.
- In Summary, write a short description such as
Add USB plugin capture for NACON BB4469. - Click Commit to your branch.
- Click Push origin to upload the branch to your fork.
If GitHub Desktop warns that large files need Git LFS, do not skip LFS and do not switch to a browser upload. Confirm LFS is initialized as above and push again.
- Open https://github.com/nefarius/GameControllerResearch (the original project, not only your fork).
- If GitHub shows a yellow banner Compare & pull request, use that.
- If the banner is gone: click Pull requests → New pull request, then compare across forks. Set the base repository to
nefarius/GameControllerResearchand branchmaster. Set the head fork to your copy and the compare branch to the branch you just pushed. - Title the request after the device and scenario.
- In the description, say what you captured, on which Windows version, and how to reproduce the steps. Mention any extra software that was running.
- Click Create pull request.
After that, wait for review. A maintainer may ask for a shorter capture, a missing VID/PID, or a USB Device Tree Viewer dump. You can add files to the same branch in GitHub Desktop, commit, and push; the pull request updates automatically.
- The controller was unplugged when the capture started, then connected on purpose
- The file is a
.pcapngsaved from Wireshark, and it opens again on your PC - One scenario per capture file, with the steps written down
- Device folder uses the manufacturer/model naming already used here
-
README.mdincludes VID/PID if you can get them, Windows version, and the action sequence - Photos and notes were checked for personal information
- Files were added with GitHub Desktop, not GitHub's browser uploader
-
git lfs installwas run once on this PC before pushing captures - The pull request says what the capture is and how it was made