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

[feature request] dump Bluetooth pairing keys for audio devices from HOS to import them to andorid/Linux #865

Open
zekromisblack opened this issue Jun 11, 2023 · 8 comments

Comments

@zekromisblack
Copy link

This would be a incredible feature for people like me who has earbuds and don't wanna have to repair them every time I switch my OS

@impeeza
Copy link

impeeza commented Jun 11, 2023

the bluetooth database do not include them?

@OrGoN3
Copy link

OrGoN3 commented Jun 11, 2023

You can dump the hos title, https://gbatemp.net/threads/pairing-the-joy-con-on-emunand-and-sysnand.562519/, not sure if that's enough.

@impeeza
Copy link

impeeza commented Jun 12, 2023

Wait one moment.

Since version 1.5.1, Atmosphère have a new setting enable_external_bluetooth_db = u8!0x1 on SD:/atmosphere/system_settings.ini file:

Once you enable that setting the first instance of atmosphère you run will copy the actual Bluetooth sync database to the file SD:/atmosphere/bluetooth_devices.db then on all instances of Atmosphère you run and if you set the value en on System_Setting.ini file will use the database on the dump file instead of the one on EmuMMC or SysMMC so, all your instances will share the same bluetooth database, including headsets and controllers.

And if you use MissionControl you can even spoof any mac from controllers synced with other consoles or PCs and you don't need to lose your sync with external devices.

More information on:

https://github.com/Atmosphere-NX/Atmosphere/releases/tag/1.5.1

@zekromisblack
Copy link
Author

Wait one moment.

Since version 1.5.1, Atmosphère have a new setting enable_external_bluetooth_db = u8!0x1 on SD:/atmosphere/system_settings.ini file:

Once you enable that setting the first instance of atmosphère you run will copy the actual Bluetooth sync database to the file SD:/atmosphere/bluetooth_devices.db then on all instances of Atmosphère you run and if you set the value en on System_Setting.ini file will use the database on the dump file instead of the one on EmuMMC or SysMMC so, all your instances will share the same bluetooth database, including headsets and controllers.

And if you use MissionControl you can even spoof any mac from controllers synced with other consoles or PCs and you don't need to lose your sync with external devices.

More information on:

https://github.com/Atmosphere-NX/Atmosphere/releases/tag/1.5.1

that does not allow me to get the pairing keys from that database file, and i have no idea how its formatted in a hex editor

@impeeza
Copy link

impeeza commented Jun 15, 2023

its a dump of the HOS database, so you can look on Switchbrew page about that information.

@TechniXC
Copy link

@zekromisblack Hey! I think I found the sollution! It works for me to transfer non OEM joy-cons LTK to L4T, but you could do the same for all your BT devices.

You could open bluetooth_devices.db with https://hexed.it/ and on the first BT device mac start at 0x00000008.
Then LTK is the sequence of 16 bytes between 25:08 and 01 bytes. Aprox address of it's first byte is 0x00000031. Important thing that LTK bytes here in REVERSE order. That's mean if you have 78A62351XXXXXXXXXXXXXXD37C24 sequence in bluetooth_devices.db you should copy LTK as 247CD3XXXXXXXXXXXXXX5123A678.

@organizedkaos
Copy link

I just recently discovered and installed the picofly chip and hekate etc. etc. I have a good grasp of how everything goes together considering I have been at this for 2 weeks now. My 3rd party (spican jc200) bluetooth switch controller works between ofw and cfw emummc using the bluetooth_devices.db setting. @TechniXC instructions allowed me to get the ltk for this controller but I can't seem to figure out how to make this information/controller work in android/linux without re-pairing. Unfortunately, the controller only seems to have 1 pair memory so everytime I pair it to android/linux, I have to re-pair it to ofw and go through the bluetooth sync between ofw and cfw. Nyx joycon dump only works for genuine joycons. Is there any way the nyx joycon dump can read the bluetooth_devices.db and create a similar file (joycon_mac.ini/bin) or would the android/linux builders have to create the feature (reading the bluetooth_devices.db file) on their end?

@organizedkaos
Copy link

I'm not a coder but I can write some bash and I can understand some code. But again, I am not a coder. I managed to write a bash script that grabs the information needed for the joycon_mac.ini file (device mac, system mac, ltk) from the bluetooth_devices.db file and the switch.cal file and generate a joycon_mac.ini file with the properly formatted ltk.

I am doing this for my 3rd party wireless bt "pro controller" but ubuntu is still not working to accept the joycon_mac.ini information.

After I did this, I was wondering if an option could be added next to the "dump joycon bt" button to "dump hos bt pairs" to the same file joycon_mac.ini by reading the file that contains the bt information from hos? I used the "syncfix" script to make the hos bt pairs work in atmosphere and apparently it (syncfix script) copies a "save" file name 8000000000000050 from sysnand into emummc and thats where the bt pair information is stored.

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

No branches or pull requests

5 participants