我正在使用Android BLE API在Nexus 4上开发BLE应用程序.我有几个疑问/疑惑:
1)有没有办法设置/覆盖BLE中央设备的连接或通知间隔.我发现对于Android,默认连接间隔固定为7.5毫秒.有没有办法更改此连接/通知延迟间隔设置.
资料来源:http://processors.wiki.ti.com/index.php/Bluetooth_SensorTag?DCMP = lprf-stdroid&HQS = lprf-stdroid-pr-wiki1 #Supported_Android_devices
2)在连接到远程设备时,我面临着在随机时间间隔之后断开连接的问题.有许多人面临连接丢弃问题,说明当Android使用Android 4.3 API进行BLE连接时,android是不稳定的.这有什么解决方案吗?
编辑
我在这里观察到的另一个问题是,当需要时间重新连接时,它会随着一些L2CAP日志而来......跟随日志
Trying to create a new connection laststate_ BOND_NONE
D/BluetoothGatt( 9620): connect() - device: 1C:BA:81:11:CA:36, auto: true
D/BluetoothGatt( 9620): registerApp()
D/BluetoothGatt( 9620): registerApp() - UUID=1a9a0911-4d5c-41dc-8ac0-0284ef550510
D/BtGatt.GattService( 3208): registerClient() - UUID=1adsds0911-4sdsc-41dc-8ac0-0sdsdf550510
D/BtGatt.btif( 3208): btif_gattc_register_app
D/BtGatt.btif( 3208): btgattc_handle_event: Event 1000
D/BtGatt.btif( 3208): btif_gattc_upstreams_evt: Event 0
D/BtGatt.GattService( 3208): onClientRegistered() - UUID=1a9a0911-4d5c-41dc-8ac0-0284ef550510, clientIf=5
D/BluetoothGatt( 9620): onClientRegistered() - status=0 clientIf=5
D/BtGatt.GattService( 3208): clientConnect() - address=1C:BA:8C:1E:CA:36, isDirect=true
D/BtGatt.btif( …Run Code Online (Sandbox Code Playgroud) 我们公司开发了一个具有蓝牙BLE的硬件单元,我们在Nexus 7(2013)中有一个服务应用程序,我们希望将固件文件发送到设备.文件可以大到500kb.
BT芯片是德州仪器CC2540.
我已经浏览了大量的页面,并扫描了堆栈溢出,以获取有关如何加速从Android设备到CC2540的数据传输的信息,但还没有找到任何非常好的示例.
在北欧半导体主页上,我找到了一个如何计算Android设备最大吞吐量的示例:(https://devzone.nordicsemi.com/index.php/how-do-i-calculate-throughput-for-a-ble - 链接)
Nexus 4 with nRF51822: 4 * 20 B * 1/0.0075 s = 10.6 kB/s = 84 kbps
Run Code Online (Sandbox Code Playgroud)
它说Android设备每个连接间隔可以发送4个20字节的数据包,Android可以处理7.5ms的连接间隔.
在我们的应用程序中,我们当前正在使用writeCharateristics发送数据,并在发送下一个数据块之前等待onWriteCharateristics回调.但是,由于回调大约需要2秒钟才能调用(!!),因此发送速度非常缓慢.这使得数据传输速率为10字节/秒,远离上述示例计算中的10.6kb/s.
我们尝试在两台iOS设备之间传输50kb数据(使用iOS版KeyFob演示版的修改版),传输速率为3.4kb/s.但那是使用CBPeripheralManager UpdateValue,我理解这是一种从外围设备向中心发送通知的方式.
我所看到的是,现在没有办法让Android设备作为外围设备工作.这是否意味着CC2540无法向Nexus 7发送通知?并且是通过通知发送数据最大化吞吐量的唯一方法吗?
TI设备中的堆栈是否会使速度变慢,或者是否有任何方法可以更改任何参数以使Nexus和CC-unit之间的数据传输更快?
我们想到了在Nexus 7设备中实施GATT服务器,并让CC2540订阅了它的通知.那可能吗?这意味着Nexus首先必须扫描CC2540并在找到服务时连接到它.建立连接后,CC2540开始订阅来自Nexus 7的通知.之后,从Nexus向CC2540发送通知,传输速率更高.
希望其他人一直试图做我们想做的事情!