Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to connect with Switch update 12.0.0 #104

Open
illie0 opened this issue Apr 7, 2021 · 21 comments · May be fixed by #110
Open

Unable to connect with Switch update 12.0.0 #104

illie0 opened this issue Apr 7, 2021 · 21 comments · May be fixed by #110

Comments

@illie0
Copy link

illie0 commented Apr 7, 2021

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
Copy link
Author

illie0 commented Apr 7, 2021

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
Copy link

RocMax commented Apr 7, 2021

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

@sir-joel
Copy link

sir-joel commented Apr 7, 2021

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
Copy link

@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
Copy link

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
Copy link

dentedghost commented Apr 8, 2021 via email

@dentedghost
Copy link

dentedghost commented Apr 8, 2021 via email

@pokemon-bot
Copy link

@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
Copy link

tomifil commented Apr 9, 2021

I can confirm is not working anymore as switch update 12.0

@pokemon-bot
Copy link

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
Copy link

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:

  • The Switch is pickier with which controllers it connects to. More aspects of the authentic Pro Controller need to be emulated to lure the Switch into connecting.
  • The connection procedure has changed slightly when first communicating with the Switch.
  • The Switch will kick controllers off that exceed a certain input frequency (typically 15Hz) in certain scenarios. I'm still looking into the exact mechanism by which the frequency is updated.

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
Copy link

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

@pokemon-bot
Copy link

@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
Copy link
Author

illie0 commented Apr 13, 2021

@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
Copy link

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

@thxomas
Copy link

thxomas commented Apr 16, 2021

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

If interested, please refer to Poohl#3 (comment)

T.

@Venryx
Copy link

Venryx commented Apr 19, 2021

@pokemon-bot The NXBT v12 branch worked fine for me, in an Xubuntu VM on Windows, with the ZEXMTE Bluetooth dongle: Brikwerk/nxbt#18 (comment)

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
Copy link

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
Copy link

Venryx commented Apr 24, 2021

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): Brikwerk/nxbt#18 (comment)

@pokemon-bot
Copy link

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
Copy link

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 Poohl#11 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.