Jump to content

8BitDo SN30 Pro



My goal for my Pico based game controller is to make a USB interface so that I can use an 8BitDo SN30 Pro USB controller with the Atari.


The Pico C++ SDK supports TinyUSB, which should make it possible. In an earlier release, it did not have a USB game controller example, and with me not really understanding how USB works, I was at a loss on how to implement the Pico as a USB host.


However, sometime in the last few months, someone created code to for the Pico to serve as a host for a Dual Shock PS4 gamepad.


So following a bunch of links found in the "hid_app.c" I went down a USB dev rabbit hole. I ended up installing the latest version of Wireshark with the USBPCap plugin. This allowed me to figure out that the 8BitDo SN30 Pro USB controller identies itself as a Xbox 360 game controller "idProduct: Xbox360 Controller (0x028e)".


But then I noticed something odd about the SN30:

Fire button layout of each controller:


Normal XBox360            SN30 Implementation

      Y                                         X

X          B                             Y           A

      A                                         B


The SN30 uses the Nintendo button pattern. IDK, maybe when the SN30 is plugged into a Nintendo is reports back as a Nintendo controller. But I don't have one to test...


In the process of going down this rabbit hole I came across this document on PartsNotIncluded.COM: Understanding the Xbox 360 Wired Controller’s USB Data.


If you read far enough down the page, you'll find an image of the button data that shows the XYAB buttons are found in bytes 2 & 3 of the devices USB report:


From PartsNotIncluded.COM


When the SN30's USB traffic is examined using Wireshark/USBPCap, even though buttons are in the Nintendo layout, pushing buttons report show up in the 3rd byte as follows:

 X  Y A B



So the button locations match the Xbox360 byte order even if the labels on the buttons do not.


A search of Google shows that all wired Xbox360 controllers work for the Nintendo Switch... So I'm guessing this has been a known thing for a while. I'm just late to the game.


Now if I only had a triangle screw driver so I could swap the buttons, to make the button labels match up. Not so important I guess for this Atari project, but it is a bit annoying when I use the SN30 to play Fortnite on my Windows computer.


Anyway, after looking at the Wireshark USB info, and with the example of the PS4 controller Pico TinyUSB code, I'm now fairly confident that I will be able to support the SN30 in this project. So much so, I'm going to remove SNES controller support from the Monster.



  • Like 1


Recommended Comments

There are no comments to display.

Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...