蓝牙低功耗:Android Gatt-Client连接到Linux Gatt服务器
作者:互联网
我尝试通过蓝牙低能量GATT模式将android连接到linux.
Bluez中有一个示例代码:btgatt-server.c,我用它作为服务器.
Android Side与Android official example:Connecting to a GATT Server一样.也就是说,使用函数BluetoothDevice :: connectGatt(Context context,boolean autoConnect,BluetoothGattCallback callback).
运行后,Android部分返回连接成功,(BluetoothGattCallback :: onConnectionStateChange的参数为STATE_CONNECTED),但linux(btgatt-server)中的程序没有得到任何响应,仍然阻止等待接受.
(第485行).
我还使用了另一个示例代码:l2cap-ble.c,结果完全相同.
有人可以帮帮我吗?我的目标是:连接后,linux gatt服务器会向Android发送数据.然后断开连接.
谢谢你.
解决方法:
我刚刚面临同样的问题.
这似乎是Android和Broadcom蓝牙模块发生的错误. Android以某种方式连接到错误的l2cap通道.
解决方法是明确禁用广告中的BR / EDR支持.
谷歌与#8中的解决方案的错误报告可以找到here,提示上的引用帮助了我:
I have obtained information from Broadcom regarding this bug and I don’t think its a bug on their part. If one does not specifically set the ‘BR/EDR not supported’ bit in the advertisement (bit 2), the Broadcom stack will use BR/EDR and BTLE.
Changing the leading advertisement package from 020102 to 020106 solved the problem.
使用bluez btmgmt在设备hci0上配置通告,我发出以下命令:
btmgmt -i hci0 power off
btmgmt -i hci0 le on
btmgmt -i hci0 connectable on
btmgmt -i hci0 bredr off # Disables BR/EDR !
btmgmt -i hci0 advertising on
btmgmt -i hci0 power on
启动bluez btgatt-server示例:
btgatt-server -i hci0 -s low -t public -r -v
标签:android-bluetooth,linux,bluetooth-lowenergy,bluez 来源: https://codeday.me/bug/20191007/1867666.html