I have developed a product using the BLE113-256k using UART to an ATMEGA32U4 arduino type processor.
I created an android app based on Android's BluetoothLeGatt source code.
I can easily & flawlessly connect to the BLE113 using Samsung phones (Galaxy S7, and many others)
I cannot connect using LG or Droid phones (LG-G4 is what I am currently debugging on)
Even when I use the Heart-Rate bgscript demo ble113 firmware, I can't get this LG-G4 to connect to the ble113. Although, the app works on the LG-G4 when I connect to other random devices.
The app on the LG-G4 can scan and see the BLE113 device advertising, but cannot connect. When attempting to connect it often just times out and goes back to the scanning screen. Is there some setting in the firmware that might cause this issue? I've tried many firmwares, I'm starting to think it the BLE113 might not be compatible with some android devices.
Please help me, I have this product out to beta-testers, and they are wanting a fix.
What android versions are on those phones which are having connection issues? There are occasional issues with smartphone connectivity but he majority of those is from the mobile device side.
Are you able to take a over-the-air logs showing the connection process?
I too am having problems with OTA to my Android device. I have been developing with a Galaxy S4 (Android 4.4.4) on which I modified the Blue Gecko demo code to operate with Android api 19 on the device. Upon trying the OTA with a Galaxy S8 (Android 7.0, api24), but targeting api22, the OTA hangs at the 'OTA Progress' dialog. Eventually it terminates with 'GATT CONN' and 'GATT CONN TERMINATE LOCAL HOST' Toast messages.Thinking the problem was with my code, I reloaded my BGM111 with the 'Empty Example' and uninstalled and reinstalled from Google a fresh 'Blue Gecko'. I have the same problem with what appears to be a "stock" example configuration. The .ebl files I'm loading are functioning files that I know operate correctly on the BGM111 as they are the same ones that I can successfully load and run using the OTA from the S4.
Thinking the problem was with my code, I reloaded my BGM111 with the 'Empty Example' and uninstalled and reinstalled a fresh 'Blue Gecko' from Google. I still see the same problem - even with what should be a "stock" example configuration. The .ebl files I'm loading are functioning files that I know operate correctly on the BGM111 as they are the same ones that I can successfully load and run using the OTA from the S4.
Any help or guidance is, of course, greatly appreciated as I'm not sure what steps to take next.
I am able to read the Gatt information and have used my code to successfully read and write characteristics and bond to the S8. There is no change to the OTA behavior on the S8 whether the phone and BGM111 are paired or not.
I was unable to respond to your email - I received a kickback from the Silabs Postmaster: "not on the same community list". My reply is here below:
Thanks for the response. The other thread was helpful in getting me going with the whole OTA process back in June. However the problem I’m having now seems to be more specific.
I am trying to update two different devices provided to me by my client. They are both running the BGM111 and I am able to simulate the operation of one of them using my dev kit. The other is running standalone as a separate device. I can successfully OTA the dev kit device using my Galaxy S4 and code adapted from the Blue Gecko app, using the BLE service. When trying to perform OTA to the other device I receive a status error 0x85 from the onCharacteristicWrite callback. If I ignore this error, the OTA proceeds as expected (!). Not good practice, however, …
When I test the app using a Galaxy S8 (Android 7.0) I receive the same 0x85 error upon trying to write to the dev kit or the device. And ignoring the error leads to a hang for both. So I’m still stuck.
As mentioned in the original post, I tried this weekend to OTA Silicon Labs’ “Empty Example” on my dev kit using a fresh download of the Blue Gecko app and was unable to get the update to work. After reading various posts on StackOverflow I see that many are trying different delays between connecting and writing… I was about to try that…
Any insight you can provide would be great! Is there a functioning OTA for an Android 7.0 device with your standard “Empty Example” and your BG app?
Thanks again for the help,
Have you been able to give this problem any thought? This morning the OTA from my S8 to the BGM111 worked after I reloaded the BGM with a "new" SOC-Empty demo and re-installed the SL Blue Gecko app. I was then also able to successfully OTA the BGM111 using the updated .ebl files and my own modified Blue Gecko app code. However, when I used my actual app code (ported from the BG app code), the OTA process hung. Since then I have been working for a number of hours trying to re-establish the original OTA conditions. I have unloaded/reloaded the BGM, have uninstalled/reinstalled the SL Blue Gecko app, disconnected/reconnected all the hardware (including power down/up the laptop!)... Basically every permutation I could think of I've tried in the past 3 hours without any success in getting the "original condition" OTA to work. I don't know - can't figure out - what was different about last night/ this morning/ this afternoon that caused the OTA to work that first time! Can you (or anybody) offer some suggestions!
I found the bug that was causing my problem. I had too many characteristics set as "Notify" in my gatt.xml. Different phones (and different android versions) will vary on how many Notification characteristics can be set. I believe the standard was 4, then it got increased to 7. Some may go up to 15.
I had 25 notifications! Not sure why this worked on the Samsung line of phones, but all the other phone brands would not connect to my ble113. I reduced my gatt.xml to have only 2 notification characteristics, problem solved, now all the phones connect just fine.
Sorry for the very delayed response.
My last post, where I "found the bug"...boy was I wrong. My problem came back in a big way. But I found another solution.
I had the dreaded Error #133. After months of research and pulling my hair out, I have found a solution that is not normally talked about.
Your normal connect request looks something like this:
cGatt.connectGatt(this, false, gattCallback);
There is another version of the connectGatt command, with a 4th parameter. This parameter specifies what type of bluetooth device you are connecting to. I added a “2” to specify that I am connecting via Bluetooth LE. (it’s called “transport”, forgive me if my explanation is incorrect, but it solved all my problems)
cGatt.connectGatt(this, false, gattCallback, 2);
And BAM, now my #133 nightmare is over (I pray)!