蓝牙低能耗:Android Gatt客户端连接到Linux Gatt服务器

蓝牙低能耗:Android Gatt客户端连接到Linux Gatt服务器,linux,bluetooth-lowenergy,android-bluetooth,bluez,Linux,Bluetooth Lowenergy,Android Bluetooth,Bluez,我尝试通过蓝牙低能GATT模式将android连接到linux Bluez中有一个示例代码:,我将其用作服务器 Android端将被视为。也就是说,使用函数BluetoothDevice::connectGatt(上下文上下文、布尔自动连接、BluetoothGattCallback回调) 运行后,Android部分返回连接成功,(BluetoothGattCallback::onConnectionStateChange be STATE_CONNECTED的参数),但是linux(btgat

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

Bluez中有一个示例代码:,我将其用作服务器

Android端将被视为。也就是说,使用函数BluetoothDevice::connectGatt(上下文上下文、布尔自动连接、BluetoothGattCallback回调)

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

我还使用了另一个示例代码:,结果完全相同

有人能帮我吗?我的目标是:连接后,LinuxGatt服务器将向Android发送数据。然后断开连接


非常感谢。

我刚才也遇到了同样的问题

这似乎是Android和Broadcom蓝牙模块出现的一个bug。Android以某种方式连接到错误的l2cap通道

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

在第8页中可以找到关于谷歌的bug报告和解决方案,其中引用的提示帮助了我:

我已经从Broadcom获得了关于这个bug的信息,我不认为这是他们的bug。如果未在广告中明确设置“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服务器示例:

btgatt-server -i hci0 -s low -t public -r -v

当您尝试从Android应用程序中发现服务时会发生什么?另外,请尝试
btmon
查看是否确实通过蓝牙接口进行了数据包交换。在我的文章中,我已经完成了自定义gatt服务的工作,请参考。如果您想在设备上使用bluetooth classic和BLE,您该怎么办?因为BREDR off正在禁用BTC支持。我认为单用一个适配器不可能做到这一点。我们目前正在使用定制的嵌入式设备和BTC和BLE。它工作得很好。我们也在使用Broadcom硬件。当然,移动应用程序需要选择使用BLE还是BTC连接。但在嵌入式设备端两者都是可能的。设备总是在等待BTC或BLE连接。如果硬件支持,这似乎是可能的,请参阅stackexchange线程。我不知道如何配置和使用bluez。