Hardware Android JoyCon Lag

  • Thread starter Thread starter gudenau
  • Start date Start date
  • Views Views 155,140
  • Replies Replies 136
  • Likes Likes 1

Does this happen to you?

  • Yes

  • No


Results are only viewable after voting.
Thanks to this info I was successful with modifying the file on my Samsung Galaxy S 5 running a old version of Android 4.4.2
Neither option matched so I used Google to figure out how to disassemble the file with GDB and find the range of offsets that dealt with bta_hh_read_ssr_param. I didn't understand what each of the multiple mov lines did. So I just used a hex editor and did a less specific search for 4F F4 48 (since even the start of the search strings provided never had any hits) and found one result in the same offset range from the disassembly that had a 70 as the last number. I changed those all to 18 21 00 BF and rebooted. Then tested a Joy-Con and everything worked.


Update: I have found one problem, when I eventually got around to trying my Pro Controller I found that it still has the normal lag. Why would it not be affected by this fix.
The fix is working because when I swap back to a Joy-Con it works without lag.
Has anyone else actually tested a Switch Pro Controller?

Thanks !
Your method works on Oreo too ! (At least on Samsung Galaxy S7)


EDIT : it worked only for the left joycon and only until reboot... Which is very weird. Now it doesn't work at all :/

EDIT 2 : There is also a bluetooth.default.so file in /system/lib64/hw, but it does not have any matching pattern...

EDIT 3 : I was able to make it work by editing the second bluetooth.default.so (in the lib64 folder). I can't make a general protocol on how to patch the file, but on my Galaxy S7 running Oreo I had to replace the first occurence of 09648052 with 09038052. I used objdump to decompile the file (but I wan't able to find any reference to ssr), and searched a line with value 0x320 in it (which is 800, the default value). I wanted to try all lines where 0x320 is assigned, I was lucky it worked on the first one ! (This is why you have to replace only the first occurence)
I found that (this is in reverse order)
  • 52 means "mov"
  • 80 means ???
  • 6409 is 0x640 in the 9th register. I don't know why the value is doubled. (And so, to put 24, which is 0x18, just replace 640 with 0x018 * 2 = 0x030)
I know very little (almost nothing) about assembly and machine code, so this may be completly wrong. However, this works on my phone, so it may be worth it for you to try this (always with a backup just in case :P )
 
Last edited by MK73DS, , Reason: Solved my issue
  • Like
Reactions: lordelan
Hahaha I've been looking to root my Android but MetroPCs doesn't like that. Too bad there's no a solution for non rooted phones at the time.
 
You could try KingRoot, its usually a one press and phone is rooted, however I can't say I liked the crap root management and other crapware it used to have (don't know at what point is the app nowadays) ;).
 
You could try KingRoot, its usually a one press and phone is rooted, however I can't say I liked the crap root management and other crapware it used to have (don't know at what point is the app nowadays) ;).
No :(
Kingroot still doesn't support my phone.
I think I already went offtopic enough.
 
Its not off topic at all as you need to be rooted for doing the guide ;).

I only rooted one of my devices and KingRoot worked 4 it a few years ago, was just a one press and bam, rooted, but sadly I couldnt install a better superuser root manager :(.

However it totally helped me a lot on that low performance, low memory phone...

Other than that I only unlocked the bootloader of my Nvidia Shield with Nvidia authorization as I had problems, but was only to install a full first version FW, it all went well, then I locked it again, then I went to update the android version officially from Nvidia Software and boom blackout LOL.
 
Last edited by guily6669,
  • Like
Reactions: Xabring
Wow so this lag fix works for ds4 controllers?

Btw it's not possible to use a Wii u pro controller on Android phones right?
 
I did a patch to android 7.1.1 for the Moto Z Pure
Patch:
Search) B0 F5 48 7F 1A D9 28 48
Change) B0 F1 14 0F 1A D9 28 48

Search) F4 48 71 AD F8 02 10 78
Change) F0 14 01 AD F8 02 10 78

Search) F4 48 72 79 44 DA F7 71
Change) F0 14 02 79 44 DA F7 71

Search) F4 48 72 79 44 DA F7 72
Change) F0 14 02 79 44 DA F7 72
 
I read the thread.... And so I bought this.
1538177756-79-large-default.jpg

8Bitdo Wireless Bluetooth adapter for Windows/Mac/Raspberry Pi/Nintendo Switch
1538178110-51l65o6x7al-sx342.jpg

Problem solved ( no latency ) on android otg on windows on mac etc...
Absolutely perfect on everything I tested, this pad has rumbled hd as a jewel, it is more ergonomic, it holds longer the load ,perfect analog, need to continue? And at mario kart8 switch, I'm kicking ass with this great pad.
I'm not talking about the super famicom version of super mario kart, because the... how can I say this?
Of course this pad is also perfect because it is the original custom design, in short pure homebrew happiness.
The joycon are really the worst controllers nintendo has ever built, and without dpad, so they exist on games and watches nintendo, what the hell is this shit seriously? At 79€ or 80$ bullshit yes......

And now let's talk about joycon ergonomics on android? I have the sfc30pro clip
It looks like this...
1538179332-8bitdo-gamepad-mobile-phone-xtander-grip-for-sfc30.jpg

See you later and have a good game
 
Last edited by KHEOPS,
This is unrelated to this post. it is about getting certain controllers working with out lag, not about buying an alternative. I also have that controller but again, not on topic in anyway.
 
This is unrelated to this post. it is about getting certain controllers working with out lag, not about buying an alternative. I also have that controller but again, not on topic in anyway.
I know, but so much more practical is this pad.
 
I can confirm this works on the ZTE Zmax Pro, if bluetooth doesn't turn on change the permissions to (RW, R, R)

The first line was the one that appeared.

Thank you so much for the fix! I've been wanting to play with my joy-cons/pro controller on my phone for a long time.
 
I'm on a Galaxy S9+ with Oreo 8.0.0 and a Galaxy Tab A with S Pen, also on Oreo 8.1.0, and all Nintendo controllers for the Switch lag for me by about a full second. Every emulator I try them on is just unplayable. Hopefully a joycon update eventually fixes the issue.
 
Thanks !
Your method works on Oreo too ! (At least on Samsung Galaxy S7)


EDIT : it worked only for the left joycon and only until reboot... Which is very weird. Now it doesn't work at all :/

EDIT 2 : There is also a bluetooth.default.so file in /system/lib64/hw, but it does not have any matching pattern...

EDIT 3 : I was able to make it work by editing the second bluetooth.default.so (in the lib64 folder). I can't make a general protocol on how to patch the file, but on my Galaxy S7 running Oreo I had to replace the first occurence of 09648052 with 09038052. I used objdump to decompile the file (but I wan't able to find any reference to ssr), and searched a line with value 0x320 in it (which is 800, the default value). I wanted to try all lines where 0x320 is assigned, I was lucky it worked on the first one ! (This is why you have to replace only the first occurence)
I found that (this is in reverse order)
  • 52 means "mov"
  • 80 means ???
  • 6409 is 0x640 in the 9th register. I don't know why the value is doubled. (And so, to put 24, which is 0x18, just replace 640 with 0x018 * 2 = 0x030)
I know very little (almost nothing) about assembly and machine code, so this may be completely wrong. However, this works on my phone, so it may be worth it for you to try this (always with a backup just in case :P )

Hey! Thanks SO MUCH for this. I was able to get my Xiaomi Pocophone working with my switch pro controller.

One thing that changed in the latest Android iterations is that there is no Bluetooth.defaults.so anymore. The file to modify is /system/lib64/libbluetooth.so
 
Last edited by Oscar_Barajas,
Hey! Thanks SO MUCH for this. I was able to get my Xiaomi Pocophone working with my switch pro controller.

One thing that changed in the latest Android iterations is that there is no Bluetooth.defaults.so anymore. The file to modify is /system/lib64/libbluetooth.so
Can I edit that file without needing to be rooted? I'm leasing my phone and can't root it.
 
Can I edit that file without needing to be rooted? I'm leasing my phone and can't root it.
Unfortunately no, since you'll be modifying a system file which is the purpose of "Rooting". However even if youre leasing you can always "unroot" your phone by re-locking your bootloader and reinstalling stock firmware.
 
Unfortunately no, since you'll be modifying a system file which is the purpose of "Rooting". However even if youre leasing you can always "unroot" your phone by re-locking your bootloader and reinstalling stock firmware.
Okay, then maybe I'll root my tablet and try it out. Thanks!
 
Hey! Thanks SO MUCH for this. I was able to get my Xiaomi Pocophone working with my switch pro controller.

One thing that changed in the latest Android iterations is that there is no Bluetooth.defaults.so anymore. The file to modify is /system/lib64/libbluetooth.so
Could you please host it somewhere? I have the Mix 2S and I've been endlessly trying to get it to work. We have the same BT module so your file will work on my device. I'll be forever grateful for this!

Edit. Nevermind, finally did it myself.
 
Last edited by teddy74eva,
Thanks !
Your method works on Oreo too ! (At least on Samsung Galaxy S7)


EDIT : it worked only for the left joycon and only until reboot... Which is very weird. Now it doesn't work at all :/

EDIT 2 : There is also a bluetooth.default.so file in /system/lib64/hw, but it does not have any matching pattern...

EDIT 3 : I was able to make it work by editing the second bluetooth.default.so (in the lib64 folder). I can't make a general protocol on how to patch the file, but on my Galaxy S7 running Oreo I had to replace the first occurence of 09648052 with 09038052. I used objdump to decompile the file (but I wan't able to find any reference to ssr), and searched a line with value 0x320 in it (which is 800, the default value). I wanted to try all lines where 0x320 is assigned, I was lucky it worked on the first one ! (This is why you have to replace only the first occurence)
I found that (this is in reverse order)
  • 52 means "mov"
  • 80 means ???
  • 6409 is 0x640 in the 9th register. I don't know why the value is doubled. (And so, to put 24, which is 0x18, just replace 640 with 0x018 * 2 = 0x030)
I know very little (almost nothing) about assembly and machine code, so this may be completly wrong. However, this works on my phone, so it may be worth it for you to try this (always with a backup just in case :P )

I tried this running Android 9.0 on moto g6 plus but did not work at all. Sometimes it lags, sometimes it doesn't. Joy con still lags.

The bluetooth.default.so file doesnt exist anymore on pie, is there anything else to fix this problem?
 
I tried this running Android 9.0 on moto g6 plus but did not work at all. Sometimes it lags, sometimes it doesn't. Joy con still lags.

The bluetooth.default.so file doesnt exist anymore on pie, is there anything else to fix this problem?

Sorry, the only phone I have which supports Android 9 is my Note 9 and I don't want to root it yet :/
 

Site & Scene News

Popular threads in this forum