zoukankan      html  css  js  c++  java
  • android ble connect slowly

    Hi I'm writing an Android app to connect to a BLE peripheral device. Android 4.4.2, Galaxy Nexus.

    I have an LED on the device to indicate connection state.

    The issue is the duration from connectGatt() call to the point of receiving onConnectionStateChange STATE_CONNECTED are so inconsistent. Some time it is very quick but most of the time it takes 5s or more. Turning Bluetooth off/on does not have any effect.

    I tried TI BTool on PC with the TI BLE Dongle and it always establishes connection very fast.

    I also tried with an iPhone 5S and it is fast too.

    1. Any one has experienced this issue too?
    2. Is there any chance we can improve this?
    OK, I found the cause, I think I misused the APIs: Previously I call connectGatt with the 2nd param = true connectGatt(context, true, gattCallback); But now I change it to connectGatt(context, false, gattCallback); And the connecting time improved greatly –  user2810131 Mar 6 at 9:43
     
    I've experimented slow connection but only when attempting to reconnecting the remote device, connecting device at first time gets no problem but reconnecting remains the connection in the onClientRegistered() method
     

    Passing true to connectGatt() autoconnect argument requests a background connection, while passing false requests a direct connection. BluetoothGatt#connect() always requests a background connection.

    Background connection (according to Bluedroid sources from 4.4.2 AOSP) has scan interval of 1280ms and a window of 11.25ms. This corresponds to about 0.9% duty cycle which explains why connections, when not scanning, can take a long time to complete.

    Direct connection has interval of 60ms and window of 30ms so connections complete much faster. Additionally there can only be one direct connection request pending at a time and it times out after 30 seconds. onConnectionStateChange() gets called with state=2, status=133 to indicate this timeout.

    I have verified this behavior on Nexus5 but obviously YMMV.

    I should mention that there is a race condition in BluetoothGatt.java that can cause a direct connection request even if autoconnect=true is passed into BluetoothDevice#connectGatt().

    http://stackoverflow.com/questions/22214254/android-ble-connect-slowly

  • 相关阅读:
    传奇衣服、翅膀、武器、怪物、NPC等外观代码计算方法与公式
    传奇添加地图与配置参数
    传奇中如何加入衣服的翅膀效果
    传奇添加地图与配置参数详解
    NPC脚本界面自定义美化参数说明
    传奇物品叠加设置方法
    四级技能修炼NPC脚本参考
    传奇怎么设置沙巴克自动攻城
    HeroM2连击技能设置和DB完整数据
    python常用软件包
  • 原文地址:https://www.cnblogs.com/savagemorgan/p/3783810.html
Copyright © 2011-2022 走看看