mart1nro / joycontrol

Emulate Nintendo Switch Controllers over Bluetooth
GNU General Public License v3.0
1.24k stars 279 forks source link

Unable to connect with Switch update 12.0.0 #104

Open illie0 opened 3 years ago

illie0 commented 3 years ago

I have two switches, and one of them has been upgraded to 12.0.0 and it is unable to connect through the joycontrol app. It hangs at "Waiting for Switch to connect". I've confirmed that it functions properly still with 11.0.1.

[17:47:31] joycontrol.device set_name::69 INFO - setting device name to Pro Controller... [17:47:31] joycontrol.server create_hid_server::83 INFO - Advertising the Bluetooth SDP record... [17:47:31] joycontrol.device set_class::61 INFO - setting device class to 0x002508... [17:47:31] joycontrol.utils run_system_command::75 DEBUG - ['hciconfig hci0 class 0x002508' exited with 0] [17:47:31] joycontrol.server create_hid_server::96 INFO - Waiting for Switch to connect... Please open the "Change Grip/Order" menu.

illie0 commented 3 years ago

This doesn't seem to be specific to joycontrol, as I see tweets about the android app "JoyCon Droid" also not working for people who upgraded to 12.0. So something has changed in the controller pairing.

RocMax commented 3 years ago

Same on my two switches, unfortunately I updated both of them :(

sir-joel commented 3 years ago

I'm encountering this problem when trying to connect from a new computer, but a computer that I previously used, which has a .reconnect file present, can still connect without issue.

From the new computer, however, I've noticed that if you let the Switch sit on the Change Grip/Order screen long enough, the system will eventually crash, stating that it has encountered and error and needs to restart. This happens consistently.

pokemon-bot commented 3 years ago

@sir-joel The .reconnect for me fails most of the time because it will get to the end and says its connected but pressing a button will make it disconnect and you need to reconnect again. I need to retry 10-20 times before it randomly connects and stay connected.
One of the troubleshooting steps I followed online was to settings and go to Disconnect Controllers (DONT DO THAT) you wont be able to use reconnect (mac address) it will now always fail.
So now I am stuck at its not pairing. just waiting forever pairing

Nebulas123 commented 3 years ago

Same on my two switches, unfortunately I updated both of them :( My switch was automatically updated to 12.0.0, and the bluetooth just disconnects and connects repeatedly when I try to use joycontrol.....

dentedghost commented 3 years ago

DeepBlue LabsApril 6, 2021 We noticed the JoyCon Droid is not compatible with 12.0.0 or above. We are working on the issue but it might take time.

Sent from my iPhone

On Apr 6, 2021, at 6:07 PM, illie0 @.***> wrote:

JoyCon Droid

dentedghost commented 3 years ago

In 12.0 switch did update the Bluetooth-sysmodule

Sent from my iPhone

On Apr 7, 2021, at 10:20 PM, S C M @.***> wrote:



DeepBlue LabsApril 6, 2021 We noticed the JoyCon Droid is not compatible with 12.0.0 or above. We are working on the issue but it might take time.

Sent from my iPhone

On Apr 6, 2021, at 6:07 PM, illie0 @.***> wrote:

JoyCon Droid

pokemon-bot commented 3 years ago

@dentedghost Just wondering how Joycon Droid is related to JoyControl python library ? is there a linux module that both uses ? who is in charge of that linux module so I can post on their forum about this issue ?

tomifil commented 3 years ago

I can confirm is not working anymore as switch update 12.0

pokemon-bot commented 3 years ago

If it helps I am using an HP laptop with the built-in intel bluetooth adapter. Before the 12.00 update which broke Joycontrol. Joycontrol has been working for me for a few months now and there were no issues pairing/connecting.

Brikwerk commented 3 years ago

Hi all, I work on NXBT, a similar project to Joycontrol, and we've also been dealing with comparable issues after the v12.0.0 update. After some changes/fixes were applied to NXBT, it was able to pair/connect and communicate with the Switch (on v12.0.0) again, so controller emulation is still possible with Linux and BlueZ. I found that the main changes that come with the v12.0.0 update are:

For those interested in further details on the changes, you can refer to this issue which contains a more detailed writeup.

If I find some time, I'll see if I can port the changes needed over to this project and post a PR. NXBT uses a different emulation and protocol backend than Joycontrol so, unfortunately, it's not a 1-to-1 operation.

dentedghost commented 3 years ago

I updated the Ticket on Nintendo_Switch_Reverse_Engineering with @Brikwerk details and this thread.

pokemon-bot commented 3 years ago

@Brikwerk since most of the changes are command line. is it possible to just have a script or python to run once at the beginning before using JoyControl ? Then at least the pairing would now work ?

illie0 commented 3 years ago

@pokemon-bot I don't believe that alone would be sufficient, as joycontrol tries to do some of this already, and in the wrong order or with values that need to be changed. For example it sets the class, and then sets discoverable on which causes the class to be reset to a different value. So some code changes are required.

Additionally, some bluetooth adapters may not be compatible now, such as the Qualcomm Atheros. I haven't found a way of changing the MAC address on them (they weren't supported by bdaddr, and doesn't use 'hcitool cmd 0x3f 0x001' either.)

pokemon-bot commented 3 years ago

Yeah I tried using the NXBT branch which has the 12.00 fix but its not working for me

thxomas commented 3 years ago

I managed to get a running setup, with quite stable connection.

If interested, please refer to https://github.com/Poohl/joycontrol/issues/3#issuecomment-821082464

T.

Venryx commented 3 years ago

@pokemon-bot The NXBT v12 branch worked fine for me, in an Xubuntu VM on Windows, with the ZEXMTE Bluetooth dongle: https://github.com/Brikwerk/nxbt/issues/18#issuecomment-822151271

I tried using the joycontrol v12 branch, but I was unable to get it to work (the Pair popup just never showed up).

There are some limitations with NXBT on firmware v12 (main one: the fake-pro-controller would disconnect whenever I connected more than 1 physical joycon), but since it works for the most part, I'm sticking with that until joycontrol and/or NXBT get a more robust solution figured out.

pokemon-bot commented 3 years ago

I used the NXBT v12 branch and followed the directions. But unfortunately my built in intel bluetooth adaptor on my HP laptop has no support to change the bluetooth mac address and I could never get it to pair with my switch. Today I decided to try again. My switch was updated to 12.01 and even though I could not change the mac address of my intel bluetooth adaptor, it paired successfully ! I was surprised. It never paired no matter how many times I tried on switch update 12.00. But on 12.01 it paired everytime. So I decided to try Joycontrol again. did the reconnect + mac address and it connected fine but it will cause an exception whenever I send a button press. I tried reconnect and send button for maybe 10 times and somehow on the 11th try, it stayed connected and is stable.

Venryx commented 3 years ago

Thanks for adding your experience @pokemon-bot, and great to hear that someone else has had success with joycontrol on 12.0+. (I was not able to get joycontrol working on 12.0.0, but I maybe didn't follow some instructions correctly, and may try again sometime with 12.0.1.)

Regarding it working without the mac address being changed, this may be relevant (and the comment after it): https://github.com/Brikwerk/nxbt/issues/18#issuecomment-825877288

pokemon-bot commented 3 years ago

If I were to add a connectWithRetry( maxRetry) call into joycontrol with the idea to connect then send an "a" button then wait to make sure it stays connected. If it disconnects. It will loop upto maxRetry. How would I do that. or if someone already did that could you share your code ? I am getting tired of waiting and retrying over and over again manually to connect

lowlevel-1989 commented 3 years ago

If I were to add a connectWithRetry( maxRetry) call into joycontrol with the idea to connect then send an "a" button then wait to make sure it stays connected. If it disconnects. It will loop upto maxRetry. How would I do that. or if someone already did that could you share your code ? I am getting tired of waiting and retrying over and over again manually to connect

here https://github.com/Poohl/joycontrol/issues/11#issuecomment-920226012