GATT服务器无法使用Bluez 5.32,5.37

时间:2016-01-25 14:55:09

标签: linux bluez gatt bluetooth-lowenergy

当我尝试通过带有4.0加密狗的rpi上的手机连接时,蓝牙会出现这两个错误,是否有人偶然发现了这个错误?

bluetoothd [1776]:src / device.c:gatt_debug()MTU Exchange失败。 ATT ECODE:0x06 bluetoothd [1776]:src / device.c:gatt_client_ready_cb()状态:失败,错误:6

手机连接到rpi,当我运行example-gatt-server脚本时,服务在服务器中注册,但在我的手机上只有两个,通用属性和通用访问

1 个答案:

答案 0 :(得分:4)

问题实际上是由于BlueZ堆栈中的蓝牙4.0属性协议(ATT)实现不完整。从Android 5.0开始,它检索GATT特征和服务的方式有点不同。具体来说,它使用的是“按组读取类型请求”(Core_v4.1蓝牙规范,第3.4.4.9节),这似乎在BlueZ中没有正确实现。 IIRC特别是由于Android 5.0使用多个ACL数据包形成一个请求。 iOS和更早版本的Android版本为一个请求使用了一个ACL数据包。

UPDATE !!!

广告(第2位)中的“BR / EDR不支持”位应该专门设置,或者堆栈(在我的情况下使用broadcomm加密狗)将使用BR / EDR和BTLE。解决方法是将主要广告包从020102更改为020106

btmgmt le on
btmgmt bredr off

使用btmgmt配置adv hcix:

btmgmt -i hci0 power off 
btmgmt -i hci0 le on            # Enable LE
btmgmt -i hci0 connectable on
btmgmt -i hci0 bredr off        # Disable BR/EDR
btmgmt -i hci0 advertising on
btmgmt -i hci0 power on