- Joined
- Feb 23, 2015
- Messages
- 575
- Trophies
- 0
- Age
- 25
- Location
- France
- Website
- www.youtube.com
- XP
- 1,536
- Country
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?
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)
Last edited by MK73DS,
, Reason: Solved my issue