o0Zz / sys-con

Nintendo Switch sysmodule that allows support for third-party controllers (XBox, PSX, PC, ...)
GNU General Public License v3.0
74 stars 6 forks source link

8BitDo Ultimate C 2.4g Wireless Controller not working #21

Closed Scdk closed 1 month ago

Scdk commented 5 months ago

First of all thanks continuing the project!!

Information Atmosphere version: 1.6.2 Switch OS version: 17.0.1 Syscon version: 1.2.1 Controller: 8BitDo Ultimate C 2.4g Wireless Controller

Description I connect the controller in both d-input or x-input mode and even though the light of the controller stays on, indicating a successful connection, the controller is not recognized by the switch. Neither buttons, analog sticks of dpad works and the controller doesn't even show up in the controllers menu.

I tried to verify the HID code for the 8bitdo in the device manager, but when I was going to insert it into the config file I noticed that it was already there (2dc8-3106). I noticed that in x-input mode the button layout resemble more the xbox template than the xbox360, but even changing this configuration the controller still not works.

When I enabled the log level 0 I got the message "No HID or XBOX interfaces found !" in the logs.

Both my config and log files are in the zip attached to the issue.

Logs logs.zip

o0Zz commented 5 months ago

HI, yeah the profile don't have any impact regarding the detection, it will have an impact only for the configuration. Here the switch don't detect controller at all. What happen if you do exactly the same thing on a PC ? Does your PC detect the controller ? I assume you tried it with the dongle, could you try just to plug it with a USB cable to see if it change something ? Thanks

o0Zz commented 5 months ago

Any progress on this issue ?

Scdk commented 5 months ago

The logs previously sent were in fact made using the dongle. I had made tests with the cable but unfortunately the controller didn't even show signs of connection, the center LED kept blinking, indicating it was searching for connection.

My PC with Windows detects the controller normally, both with the dongle and the cable.

The log file of my tests can be found bellow.

log.log

texita commented 5 months ago

May i ask if you have Mission control enabled?

o0Zz commented 5 months ago

Ok sounds to be a controller issue,. I did some research on the net and people have same issue than you with various systems (linux etc ...) a workaround is to force the system to detect this controller with vid/pid and associate the correct driver.

So let's try it, edit you configuration file like that:

[global]
discovery_mode=1
discovery_vidpid=2dc8-3106

Reference: https://gist.github.com/ammuench/0dcf14faf4e3b000020992612a2711e2

Let us know if its better.

Scdk commented 5 months ago

I had mission control enabled, just to be sure I disabled it.

Unfortunately even with the edited configuration file the controller still wasn't detected.

The log file of my tests can be found bellow.

log.log

texita commented 5 months ago

I had mission control enabled, just to be sure I disabled it.

Unfortunately even with the edited configuration file the controller still wasn't detected.

The log file of my tests can be found bellow.

log.log

Just to be sure:

Scdk commented 5 months ago

I disabled the mission control via hekate toolbox and restarted the switch, I even tried to connect my ps4 controller but it didn't work so motion control was in fact not working.

Just to be sure I attached both my config and log files bellow. But I tried both discovery mode 0 and 1 with discovery_vidpid=2dc8-3106.

I tried both cable and dongle in both modes, the cable doesn't seem to send any signal to the switch, it just charges the controller.

I updated the firmware of both the dongle and the controller and tried every combination again, but unfortunately had the same result. The combinations wore: cable, X input dongle, D input dongle and all those again with discovery mode in 0.

In the 8BitDo Ultimate C 2.4g Wireless Controller the change between X mode and D mode are done by turning the controller on by pressing the X button or the B button. I tried on my PC and could see that the controller was in fact changing modes.

config_and_log.zip

texita commented 5 months ago

Thanks for your tests, i explain why asked you this for everyone:

Because of the behavior of no logs when a pad is connected was similar to ps3 pads when mission control is enabled, i personally tested that. The problem is the bluetooth, have a look on this issue, is still valid for this sys-con https://github.com/ndeadly/MissionControl/issues/782 So i was thinking your pad got bluetooth feature because of this issue https://github.com/ndeadly/MissionControl/issues/651 if you read the last comment from ndeadly he's not sure C version of this pad is without bluetooh. So best thing to do is try your pad without Mission control enabled until we get it working.

At this point i don't know why you get empty logs, more questions that i can ask: have you got other controllers working? like ps4 pad is working with sys-con? other installed modules? without sys-con enabled is your controller working on the switch?

Maybe with these informations @o0Zz can think something

o0Zz commented 5 months ago

Hi, 4 questions here: 1) Could you try this verion and let us know if it change something: sys-con-1.2.2-ATMOSPHERE-1.6.x-custom.zip 2) Could you let us know if you installed any driver on your windows PC ? 3) Could you send a screenshot of your 'joy.cpl' and your 'Device Manager' to try to understand how the controller is detected by windows 4) Additionnaly, could you can get the VID/PID reported by windows

Thanks

Scdk commented 4 months ago

Hi, I'm happy to help with the tests, I hope the controller works with sys-con but even if it doesn't I want to at least help figure out why this happens.

I believe this version of the controller really does not have an Bluetooth adapter. The naming convention of the 8bitdo controllers is very confusing, but as one of the cheapest versions i believe this one truly only supports 2.4g connection.

Answering to texita questions:

Now answering to o0Zz questions:

  1. I've installed the 1.2.2 version of the module on it's release day, unfortunately it didn't solve the controller's problem. In fact I believe most of my tests wore made in this version.

  2. I didn't install any drivers in my pc, both the connection by dongle and cable worked from the get go.

  3. I annexed bellow screenshots of both my joy.cpl and device manager in all modes of connection.

  4. Seeing the screenshots of the previous question I realized that each mode of connection has a different VID/PID, those being [2dc8-3015] for cable, [2dc8-3016] for dongle in d-input mode and (the one that was used in the previous tests) [2dc8-3106] for dongle in x-input mode. Just to be sure I added the new VID/PID to my config mode and tested all modes of connection again. The results unfortunately wore the same. I also tested setting the discovery mode to 1 and doing all the tests with both the d-input and cable VID/PID. Unfortunately none of those strategies worked.

The log of my tests and the final config file can also be found bellow.

config-logs-images.zip

texita commented 4 months ago

Thanks for all the informations. First, i was reading and linked the wrong FAQ above, for the non C version, sorry for that, this is the right one https://support.8bitdo.com/faq/ultimate-c-2.4g-wireless-controller.html so this controller will never work without sys-con enabled. Anyway the situation is not changing for now. Second i don't see any module that should interfere with sys-con, except for Mission Control (IF your controller has got bluetooth of course, but at this point i agree with you and i don't think so)

from the FAQ i read this, have you tried on the switch? (with sys-con enabled) The controller is not pairing with its 2.4G receiver, what should I do? Press and hold [X+home] or [B+home] to turn on the controller, plug the 2.4G receiver into your device, hold the minus button on the controller for 5 seconds to re-pair the controller and its receiver, the home LED starts to blink rapidly, then wait for the reconnection between them.

i think you have to use only X+HOME, as in the FAQs they say B+HOME is for android Is the controller plug-and-play? Yes. Please plug the dongle into the USB port of your Windows device, then press the home button to play. When it’s on Android or Raspberry Pi device, plug the dongle into the USB port of the device, then press and hold [B+home] to turn it on.

i've seen the images you attach, in windows if you test the controller properties and press buttons (where you see red circles) is it working in every mode? I mean, if you press buttons you see red circles lighting up? I'm thinking it should only work only in x-input mode: [2dc8-3106] dongle x-input mode and maybe with [2dc8-3015] for cable. With [2dc8-3016] dongle in d-input it should work only in android/raspberry right?

Plus i wanna ask if you tried the custom version of 1.2.2 that o0Zz attach in his latest post, not the original 1.2.2 on the release section.

o0Zz commented 4 months ago

@Scdk I think you didn't tried the version I attached to this ticket, this one exactly -> https://github.com/user-attachments/files/16025023/sys-con-1.2.2-ATMOSPHERE-1.6.x-custom.zip

This binary is diffrent from the v1.2.2 released in this github. It's a custom binary built just for you with some additionnal code in order to try to better understand your issue. From the log you sent, it seems you are still running the official release and not this One exactly. Could you please confirm and try this one exactly (By clicking on the link here). thanks

Scdk commented 4 months ago

Hi, sorry I didn't realize it was an altered version.

Unfortunately even after the installation of the new version the controller still refuses to respond to any input in any of the modes. I've even tried with discovery mode 1 but the controller still behaved the same way. As always I will attach the config and logs bellow.

As for holding the minus button to reconnect the controller to the dongle, I hadn't tested, but when trying the controller didn't even blink it's lights or showed other signs of a search for connection. I think that this only works if the controller has no connection to the dongle.

When connected to the windows all modes works in the "joy.cpl". In d-input the button layout changes, but some circle always turn red when a button is pressed.

My roommate also has a controller exactly like mine, just to be sure I also realized the tests in his controller and got the same results.

One thing that I thought could influence sys-con is the Pro Controller Wired Communication configuration. I recently bought an 8BitDo Ultimate 2.4G Controller and in its FAQ it is stated that for it to work in the switch this option must be turned on. Mine was always on through all the tests but for today I turned it off in some tests just to see if I made any difference, unfortunately it didn't.

config-log.zip

o0Zz commented 4 months ago

Ok That's crazy, the switch don't reconize at all this USB device. I'm not sure to understand why, we will do a last test:

[global]
discovery_mode=1
discovery_vidpid=2dc8-*

We updated the discovery_vidpid. From the screenshots you provided, we can see that depending how you plug your controller (Via dongle, via usb, via d-input or x-input) there is multiple PID. Thus all tests we did by the past was based on "dongle usb x-input" with PID=3106 if i'm correct. Let's try to ask the switch to discover all VID=2dc8 and see when you plug it with USB Cable or d-input if it works.

Thanks for doing all these tests ;)

Scdk commented 4 months ago

It was my pleasure helping with the tests. Unfortunately the last ones still didn't produce any response from the controller.

Yesterday I had tried each of the VID/PID found in the screenshots, but to no avail.

As always, my config and log files can be found bellow.

config-log.zip

o0Zz commented 4 months ago

Ok nothing really great here. Do you have another controller with you other than the 8bit one ? If yes, could you try to connect it and see if it works?

Indeed I wondering if this issue is not caused by another problem with your switch (exemple: OTG adaptor not working, other system module installed etc ...) Because i'm not able to figure out why the controller is not detected at all. Indeed when we look at the log, the switch don't notify at all something has been plugged, like if you never plugged anything.

texita commented 4 months ago

@o0Zz He already tried that, working.

Answering to texita questions:

  • The ps4 controller works flawlessly with sys-con, mission control is still disabled, and just to confirm I disabled sys-con and the controller stooped working.

What about a wireshark capture ath this point? https://github.com/o0Zz/sys-con/blob/master/doc/WiresharkCapture.md

o0Zz commented 4 months ago

Ok, I didn't see that answer. Wireshark capture won't help because it's at the low level of the Nintendo Switch that the controller is not detected, meaning that Horizon OS doesn't provide the information to sys-con to be able to address this controller. So either we have to play with the detection functions (which we tried a bit with pid/vid) or maybe wait for a Nintendo Switch update (FW 18 ?)

o0Zz commented 3 months ago

After a while I changed my mind :), If you can provide a wireshark capture. I will try to update the switch detection mode in order to detect your controller by "InterfaceProtocol" instead of InterfaceClass or bcdDevice, we will see if it change something

gvilardefarias commented 3 months ago

Hi, I have this same controller and I'm having this same issue.

o0Zz commented 3 months ago

Ok. could you do make a wireshark capture. and share it in order to see if there is something to do.

gvilardefarias commented 3 months ago

I attached one wireshark usb capture, I put the receiver then started the controller and after I pressed a few buttons and removed the receiver.

8bit ultimate C usb capture.zip

o0Zz commented 3 months ago

Thank you, could you try this in your configuration file:

[global]
discovery_mode=1
discovery_vidpid=2dc8-*

The original post mention that the pid of the device is 3106 while it's in fact 3016 according to the wireshark capture.

EDIT: Ok indeed there is multiple pid as mentionned by Scdk: input mode: [2dc8-3106] dongle x-input mode and maybe with [2dc8-3015] for cable. With [2dc8-3016] dongle in d-input it should work only in android/raspberry right?

gvilardefarias commented 3 months ago

I tried it but it didn't work even plugging in by cable, Maybe this can help: https://gist.github.com/ammuench/0dcf14faf4e3b000020992612a2711e2

o0Zz commented 3 months ago

Thanks for the share. Unfortunatly the problem in this post is a bit different than your. Like #30 I will try to simulate this controller on my side to understand what the switch dont like and try to find a workaround but it will not be quick I will need some time to do it. I will keep you updated.

o0Zz commented 2 months ago

Hi,

Quick question, Do you use the Switch Dock ? I means, when you did these tests, did you plug this controller to the dock or did you used a USB-C adapter ? If you only tried Dock, could you try to use a USB-C adapter and see if this controller is working ?

Thanks

gvilardefarias commented 1 month ago

Hi, Tried it and didnt work.

o0Zz commented 1 month ago

Thank you for your reply. I did some investigation on my side in order to better understand the switch USB discovery process: https://github.com/o0Zz/sys-con/blob/master/doc/ReverseEngineerUSB.md For now I don't really understand what's wrong here. Do you have any USB hub with an external power supply (Like this: https://www.amazon.co.uk/Powered-RSHTECH-Aluminum-4-port-Individual-Black/dp/B08ZKSK6MB)? Or do you have a way to have 1 in order to make a test ? I would like to check if the issue would be a "power consumption" issue. In other words the idea would be to plug the powered USB hub to the switch and plug the controller on it.

o0Zz commented 1 month ago

Thank you for the all the information and investigations you provided in this ticket. I believe we can close this issue for now, marking it as unresolved. It appears there's some incompatibility between the Switch and this controller, but it doesn’t seem to be related to the controller’s profile. I simulated your controller on my side using the Wireshark capture you provided, and everything worked properly. This suggests the controller profile is not at fault, but rather there may be an issue at a lower level between the Switch and the controller. The only potential solutions I see are either updating your controller (if possible - You can also try to downgrade it the idea here is to change the controller behavior to make the switch happy) or waiting for Nintendo to modify the Switch's behavior at low level which seems unlikely.