Stop Your Screen From Turning Off with KeepItOn

We all know the feeling of reading a news article orrather longdocument, when our screen … more

The XDA LG QPair Developer Challenge Voting Has Begun!

It seems like it was just yesterday that weannounced that we had paired up with LGto … more

Major Update for the Sony Smartwatch 2 Brings DND and More

With the wearables landscape now dominated by Android Wear and Pebble, its … more

How to Root Android Wear 5.0.1 Lollipop Devices – XDA TV

The Lollipop update for Android Wear devices has hit the market and people are … more

Welcome to XDA

Search to go directly to your device's forum

Register an account

Unlock full posting privileges

Ask a question

No registration required
Post Reply

Custom Bluetooth module for Nexus 5 (4.4.3) that works with BMW's ULF car kit

OP S1010

9th June 2014, 08:35 AM   |  #1  
OP Junior Member
Thanks Meter: 3
 
1 posts
Join Date:Joined: Jun 2014
Apologies for the links: as I am a new user, I am not allowed to directly link to outside sources. Please replace _ with :// or . (Forum suggestion: use optional pre-publication review for posts from new users that depend strongly on external links.)

INTRODUCTION: My BMW 318 (E46, 2004) had a factory default BMW ULF bluetooth module (early generation) that worked fine with my BB Q10 and all phones up to Android 4.1. From 4.2 onwards, I and many others have been having problems with keeping the Bluetooth connection alive for more than a few seconds. This has been widely reported but never addressed in stock Android. As even the latest OTA upgrade to 4.4.3 didn't solve it, I decided to compile the required Bluetooth kernel module myself.

BACKGROUND: The change from the Bluez to Bluedroid system in Android 4.2 caused the compatibility issues. User 'wulu' at the forums of CyanogenMod reported on how he patched his CM10.2 (and later) to include a patch that solves the issue. I repeated his procedure for stock 4.4.3 for the Nexus 5.
  • Markus Schmidt's problem description & patch: https_github_com/Root-Box/external_bluetooth_bluedroid/commit/97d2f6346bad56299f60cfcd8c45ad893a0da78c
  • Wulu's specifics for Nexus 5 & BMW's ULF for CM: http_forum_cyanogenmod_com/topic/77834-bluetooth-connection-drops-car-kit-bmw/
METHODS:
The following procedure is specifically to compiled the Bluetooth kernel module for the Nexus 5 hardware and the 4.4.3_r1.1 (OTA) release. It should therefore only work for this specific combination. If you want to compile the module yourself, please read the linked pages with Google's excellent instructions: http_source_android_com/source/initializing.html

Here are a couple of notes I made that deal with some specifics for my Mac and the Nexus 5:
  • On Mountain Lion (Mac), I had to use Xcode 5.0.2 to get past a compile error. See instructions here on how to download and use the older 5.0.2 version of Xcode: https_groups_google_com/forum/#!topic/android-building/FPCSo1xKJ4U
  • Do not download the "master" source using the repo command, but download "android-4.4.3_r1.1". The master source has post-OTA changes that make a compiled module incompatible with the OTA release for the Nexus 5. "android-4.4.3_r1.1" was listed on those pages as specifically the version that was used for the OTA 4.4.3 upgrade for the Nexus 5.
  • Setup the environment as instructed and add the three proprietary driver sets listed for the Nexus 5 and 4.4.3 (see "Building for devices" on the Google pages).
  • There is no need to use the full patch. You can make the two small modifications to the bta_ag_sdp.c file using any text editor. Find the file first (find . -name "bta_ag_sdp.c") and commend out the two lines with the minus signs given in wulu's the first post (or Markus Schmidt's patch) by putting a # in front of both lines: #if (p_scb->peer_features == 0), #p_scb->peer_features = p_attr->attr_value.v.u16;.
  • Select the "aosp_hammerhead-userdebug" (=Nexus 5) option with the lunch command, and compile using the make command. I was able to follow the instructions pretty much to the letter without any problems.
After the compilation I had two version of the file, in four locations. They are easily found using the find command (find . -name "bluetooth.default.so" -exec ls -la {} \;). The bigger one (in the symbols subdirectory) is for debugging. The smaller one is the one I used (and which is linked in this message). It was located at "./out/target/product/hammerhead/system/lib/hw/bluetooth.default.so" in my source tree.

After this, it was pretty straightforward. I rooted my Nexus 5, re-installed FX (with paid-for Root add-on, but the free ES File Explorer should also work), uploaded the file via Dropbox and its Save to SD, transferred it to the R/W mounted system directory to replace /system/lib/hw/bluetooth.default.so with it, and restarted my phone. I also modified the config file (/system/etc/bluetooth/auto_pair_devlist.conf) that blacklists BMW components by commenting out most lines, but I am not sure if this is helpful or not.

RESULTS: It seems a little bit less stable than the Bluetooth connection I had with my Blackberry, but it definitely works. I was able to transfer my contacts and to make and receive calls. For anybody with stock KitKat 4.4.3 on the Nexus 5, here is the bluetooth.default.so kernel module: http_s000_tinyupload_com/index.php?file_id=07750725920558658087

DISCUSSION: The compilation procedure can undoubtedly be optimized. I compiled the entire source tree over several hours, just to be sure I didn't miss out on things. Feel free to give tips, but I'm happy that it worked at all.

CONCLUSION: Thanks to wulu's advice in the CM forum thread I was able to compile a patched Bluetooth module for stock Android with KitKat 4.4.3 that works with my BMW 318 (E46, 2004) ULF car kit.
The Following 3 Users Say Thank You to S1010 For This Useful Post: [ View ]
2nd July 2014, 02:54 PM   |  #2  
Junior Member
Thanks Meter: 0
 
1 posts
Join Date:Joined: Jul 2014
More
Thatīs great!

Is it possible for you to provide the same for Nexus 5 - 4.4.4 OTA ?
21st July 2014, 03:25 PM   |  #3  
Junior Member
Thanks Meter: 5
 
18 posts
Join Date:Joined: Jun 2013
Quote:
Originally Posted by mnasty

Thatīs great!

Is it possible for you to provide the same for Nexus 5 - 4.4.4 OTA ?

Yes, great job!

Nobody have already done this for 4.4.4 ? I'll do this if I have time.
21st July 2014, 10:06 PM   |  #4  
Lethargy's Avatar
Senior Member
Flag Somewhere quiet.
Thanks Meter: 2,485
 
4,086 posts
Join Date:Joined: Jan 2014
More
Quote:
Originally Posted by ZeroKcm

Yes, great job!

Nobody have already done this for 4.4.4 ? I'll do this if I have time.

4.4.4 from 4.4.3 is only security fixes, everything else is the same.
17th November 2014, 11:31 PM   |  #5  
Junior Member
Thanks Meter: 0
 
7 posts
Join Date:Joined: Aug 2011
Question Does 5.0 Lollipop resolve the BMW ULF connection issue?
guys, do you think 5.0 Lollipop would resolve the current BMW ULF connection problem? Have anyone tried the 5.0 yet ?

I'm still in 4.4.3 working great on N5 paring ULF 8th Gen kit, thanks for S1010, wulu and Alpejohn guiding me the entire process.
18th November 2014, 09:03 AM   |  #6  
Junior Member
Thanks Meter: 0
 
4 posts
Join Date:Joined: Jun 2009
Quote:
Originally Posted by REV HRD

guys, do you think 5.0 Lollipop would resolve the current BMW ULF connection problem? Have anyone tried the 5.0 yet ?

I'm still in 4.4.3 working great on N5 paring ULF 8th Gen kit, thanks for S1010, wulu and Alpejohn guiding me the entire process.

I have the same disconnect issue with my Seat, haven't tried the fix cause I was running 4.4.4 and there was no ready module for it, but lollipop didn't fixed it. I tried compilation without success. I followed all the instructions and compiled it successfully, but after replacing it, bluetooth fails to start. In the logcat logs I can see that it complains there is no bluetooth (something like that, don't have the exact logs to check it now), seems the compiled so file is not compatible.
If anyone can give a hand on this
Last edited by damencho; 18th November 2014 at 09:13 AM.
19th November 2014, 06:39 PM   |  #7  
Junior Member
Thanks Meter: 0
 
7 posts
Join Date:Joined: Aug 2011
Not sure if Seat using the same implementation as BMW ULF kit provides, my family also has a 06 Audi A4 with stock BT, I don't experience any connection issue from the stock 4.4.3 on N5. I would think Audi / Seat might use the same BT module as they share most of the VW parts.
19th November 2014, 08:38 PM   |  #8  
Junior Member
Thanks Meter: 0
 
4 posts
Join Date:Joined: Jun 2009
I experience the same disconnects. I was experiencing it and with the old phone Galaxy Nexus, till one day I updated to cyanogenmod and the problem was gone. Then changed the phone with Nexus5 and again I have the same issues, tried everything with no luck. Changing the kernel, doing some stuff with paid bluetooth apps to manage the phonebook that the car is accessing. So I suspect the problem is the same
(Seems I'm still not able to post links, I just prepared one with the Blutooth device model number and year on it, if it mean anything to someone it is from 03.2007).
21st November 2014, 07:48 PM   |  #9  
Junior Member
Thanks Meter: 3
 
2 posts
Join Date:Joined: Feb 2005
Don't work in lollipop, in your free time please compile a new file.
Thks.




Quote:
Originally Posted by S1010

Apologies for the links: as I am a new user, I am not allowed to directly link to outside sources. Please replace _ with :// or . (Forum suggestion: use optional pre-publication review for posts from new users that depend strongly on external links.)

INTRODUCTION: My BMW 318 (E46, 2004) had a factory default BMW ULF bluetooth module (early generation) that worked fine with my BB Q10 and all phones up to Android 4.1. From 4.2 onwards, I and many others have been having problems with keeping the Bluetooth connection alive for more than a few seconds. This has been widely reported but never addressed in stock Android. As even the latest OTA upgrade to 4.4.3 didn't solve it, I decided to compile the required Bluetooth kernel module myself.

BACKGROUND: The change from the Bluez to Bluedroid system in Android 4.2 caused the compatibility issues. User 'wulu' at the forums of CyanogenMod reported on how he patched his CM10.2 (and later) to include a patch that solves the issue. I repeated his procedure for stock 4.4.3 for the Nexus 5.

  • Markus Schmidt's problem description & patch: https_github_com/Root-Box/external_bluetooth_bluedroid/commit/97d2f6346bad56299f60cfcd8c45ad893a0da78c
  • Wulu's specifics for Nexus 5 & BMW's ULF for CM: http_forum_cyanogenmod_com/topic/77834-bluetooth-connection-drops-car-kit-bmw/
METHODS:
The following procedure is specifically to compiled the Bluetooth kernel module for the Nexus 5 hardware and the 4.4.3_r1.1 (OTA) release. It should therefore only work for this specific combination. If you want to compile the module yourself, please read the linked pages with Google's excellent instructions: http_source_android_com/source/initializing.html

Here are a couple of notes I made that deal with some specifics for my Mac and the Nexus 5:
  • On Mountain Lion (Mac), I had to use Xcode 5.0.2 to get past a compile error. See instructions here on how to download and use the older 5.0.2 version of Xcode: https_groups_google_com/forum/#!topic/android-building/FPCSo1xKJ4U
  • Do not download the "master" source using the repo command, but download "android-4.4.3_r1.1". The master source has post-OTA changes that make a compiled module incompatible with the OTA release for the Nexus 5. "android-4.4.3_r1.1" was listed on those pages as specifically the version that was used for the OTA 4.4.3 upgrade for the Nexus 5.
  • Setup the environment as instructed and add the three proprietary driver sets listed for the Nexus 5 and 4.4.3 (see "Building for devices" on the Google pages).
  • There is no need to use the full patch. You can make the two small modifications to the bta_ag_sdp.c file using any text editor. Find the file first (find . -name "bta_ag_sdp.c") and commend out the two lines with the minus signs given in wulu's the first post (or Markus Schmidt's patch) by putting a # in front of both lines: #if (p_scb->peer_features == 0), #p_scb->peer_features = p_attr->attr_value.v.u16;.
  • Select the "aosp_hammerhead-userdebug" (=Nexus 5) option with the lunch command, and compile using the make command. I was able to follow the instructions pretty much to the letter without any problems.
After the compilation I had two version of the file, in four locations. They are easily found using the find command (find . -name "bluetooth.default.so" -exec ls -la {} \. The bigger one (in the symbols subdirectory) is for debugging. The smaller one is the one I used (and which is linked in this message). It was located at "./out/target/product/hammerhead/system/lib/hw/bluetooth.default.so" in my source tree.

After this, it was pretty straightforward. I rooted my Nexus 5, re-installed FX (with paid-for Root add-on, but the free ES File Explorer should also work), uploaded the file via Dropbox and its Save to SD, transferred it to the R/W mounted system directory to replace /system/lib/hw/bluetooth.default.so with it, and restarted my phone. I also modified the config file (/system/etc/bluetooth/auto_pair_devlist.conf) that blacklists BMW components by commenting out most lines, but I am not sure if this is helpful or not.

RESULTS: It seems a little bit less stable than the Bluetooth connection I had with my Blackberry, but it definitely works. I was able to transfer my contacts and to make and receive calls. For anybody with stock KitKat 4.4.3 on the Nexus 5, here is the bluetooth.default.so kernel module: http_s000_tinyupload_com/index.php?file_id=07750725920558658087

DISCUSSION: The compilation procedure can undoubtedly be optimized. I compiled the entire source tree over several hours, just to be sure I didn't miss out on things. Feel free to give tips, but I'm happy that it worked at all.

CONCLUSION: Thanks to wulu's advice in the CM forum thread I was able to compile a patched Bluetooth module for stock Android with KitKat 4.4.3 that works with my BMW 318 (E46, 2004) ULF car kit.

21st November 2014, 10:15 PM   |  #10  
Senior Member
Thanks Meter: 30
 
222 posts
Join Date:Joined: Jun 2005
FYI, had similar issue with 2009 E61 5 series. Solution was third party app (Bluetooth Phone book) and a full software update for the car from the dealer. The app cost a few quid, the dealer software update much more!

That said, it works perfectly with stock Lollipop and I consider it money well spent.

---------- Post added at 09:15 PM ---------- Previous post was at 09:13 PM ----------

FYI, it was this app: https://play.google.com/store/apps/d...roid_rsap.irmc

Post Reply Subscribe to Thread
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes