蓝牙低功耗:Android Gatt-Client连接到Linux Gatt服务器

时间:2014-12-18 17:45:56

标签: linux bluetooth-lowenergy android-bluetooth bluez

我尝试通过蓝牙低能耗GATT模式将android连接到linux。

Bluez中有一个示例代码:btgatt-server.c,我将其用作服务器。

Android Side与Android official example:Connecting to a GATT Server一样。也就是说,使用函数BluetoothDevice :: connectGatt(Context context,boolean autoConnect,BluetoothGattCallback回调)。

运行后,Android部分返回连接成功,(BluetoothGattCallback :: onConnectionStateChange的参数为STATE_CONNECTED),但linux(btgatt-server)中的程序没有得到任何响应,仍然阻止等待接受。 (第485行)。

我还使用了另一个示例代码:l2cap-ble.c,结果完全相同。

有人可以帮助我吗?我的目标是:连接后,linux gatt服务器会向Android发送数据。然后断开连接。

非常感谢你。

1 个答案:

答案 0 :(得分:2)

我刚刚面临同样的问题。

这似乎是Android和Broadcom蓝牙模块发生的错误。 Android以某种方式连接到错误的l2cap通道。

解决方法是在广告中明确禁用BR / EDR 支持。

谷歌上#8解决方案的错误报告可以找到here,这个提示的引用帮助了我:

  

我已从Broadcom获取有关此错误的信息,我不认为它是一个错误。如果没有特别设置不支持BR / EDR'广告中的位(位2),Broadcom堆栈将使用BR / EDR和BTLE。   将主要广告包从020102更改为020106解决了该问题。

使用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