Linux BlueZ 4.101允许GATT连接但不在Ubuntu上公开GATT服务

时间:2017-09-18 17:16:30

标签: linux ubuntu bluetooth bluetooth-lowenergy bluez

我的目标是使用BlueZ 4.101(不是BlueZ 5.X)在Ubuntu 14.04上通过USB BLE Dongle(Cambridge Silicon Radio CSR8510 A10)公开GATT服务器。 BlueZ 4.101附带一个 gatt-example 插件,有几个人确认这些插件适用于他们。例如,帖子中的最后一个答案声称它有效:Bluez: advertise service / gatt server example?

最终,我想在BlueZ 4.101中实现我自己的GATT服务器,类似于这篇文章: http://gaiger-programming.blogspot.tw/2015/01/bluetooth-low-energy-customizing-gatt.html

我已经能够使用我的iPhone查看BLE广告并连接到BLE服务器,但我看不到BlueZ 4.101附带的GATT Server示例的任何特性或服务。手机上的多个BLE扫描仪应用程序显示BLE服务器广告并允许连接,但他们都说该设备没有服务。

我已经设法在Ubuntu 14.04上完全删除了包管理器的BlueZ 4.101版本,并使用以下一组说明自行编译:

sudo apt-get remove --purge bluez* -y
sudo apt-get install bison byacc flex -y
wget http://www.kernel.org/pub/linux/bluetooth/bluez-4.101.tar.gz
tar xvf bluez-4.101.tar.gz
cd bluez-4.101
sudo service bluetooth stop
sudo make clean
sudo make distclean
sudo ./configure CFLAGS='-Wall -Wextra -O2 -Wno-error' --prefix=/usr --enable-maintainer-mode
sudo make all
sudo make install
sudo vim /etc/bluetooth/main.conf

# Enable the GATT functionality. Default is false
EnableGatt = true

# Enable the GATT Attribute Server. Default is false, because it is only
# useful for testing. Attribute server is not enabled over LE if EnableLE
# is false.
AttributeServer = true

然后我像这样(以root身份)启动GATT服务器:

#!/bin/sh

killall bluetoothd 2>/dev/null
bluez-4.101/tools/hciconfig hci1 down
bluez-4.101/mgmt/btmgmt -i hci1 power off
bluez-4.101/mgmt/btmgmt -i hci1 le on
bluez-4.101/tools/hciconfig hci1 up
bluez-4.101/tools/hciconfig hci1 sspmode 1
bluez-4.101/tools/hcitool -i hci1 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44
bluez-4.101/mgmt/btmgmt -i hci1 bondable off
bluez-4.101/mgmt/btmgmt -i hci1 connectable on
bluez-4.101/mgmt/btmgmt -i hci1 bredr off
bluez-4.101/mgmt/btmgmt -i hci1 advertising on
bluez-4.101/mgmt/btmgmt -i hci1 power on
#tools/hcitool -i hci1 cmd 0x08 0x0008 15 02 01 06 11 06 fe f8 46 3e 16 00 0d b5 e2 11 62 75 10 18 98 b6
#src/bluetoothd -d -n --noplugin=time,audio,input,serial,network,alert,proximity,thermometer &
#src/bluetoothd -d -n --plugin=thermometer &
#src/bluetoothd -d -n --plugin=gatt_example &
bluez-4.101/src/bluetoothd -d -n &
sleep 3
bluez-4.101/mgmt/btmgmt -i hci1 name "MyCustomBLETest"
bluez-4.101/tools/hciconfig hci1 leadv

如果我尝试启用1个插件"时间" - 我收到以下错误,设备无法被发现:

bluetoothd[6373]: Bluetooth daemon 4.101
bluetoothd[6373]: src/main.c:parse_config() parsing main.conf
bluetoothd[6373]: src/main.c:parse_config() discovto=0
bluetoothd[6373]: src/main.c:parse_config() pairto=0
bluetoothd[6373]: src/main.c:parse_config() pageto=8192
bluetoothd[6373]: src/main.c:parse_config() auto_to=60
bluetoothd[6373]: src/main.c:parse_config() name=%h-%d
bluetoothd[6373]: src/main.c:parse_config() class=0x000100
bluetoothd[6373]: src/main.c:parse_config() Key file does not have key 'DeviceID' in group 'General'
bluetoothd[6373]: Starting SDP server
bluetoothd[6373]: src/plugin.c:plugin_init() Loading builtin plugins
bluetoothd[6373]: Ignoring (cli) audio
bluetoothd[6373]: Ignoring (cli) input
bluetoothd[6373]: Ignoring (cli) serial
bluetoothd[6373]: Ignoring (cli) network
bluetoothd[6373]: Ignoring (cli) service
bluetoothd[6373]: Ignoring (cli) thermometer
bluetoothd[6373]: Ignoring (cli) alert
bluetoothd[6373]: src/plugin.c:add_plugin() Loading time plugin
bluetoothd[6373]: Ignoring (cli) gatt_example
bluetoothd[6373]: Ignoring (cli) proximity
bluetoothd[6373]: Ignoring (cli) deviceinfo
bluetoothd[6373]: Ignoring (cli) hciops
bluetoothd[6373]: Ignoring (cli) mgmtops
bluetoothd[6373]: Ignoring (cli) formfactor
bluetoothd[6373]: Ignoring (cli) storage
bluetoothd[6373]: Ignoring (cli) adaptername
bluetoothd[6373]: src/plugin.c:plugin_init() Loading plugins /home/pi/Desktop/bluez-4.101/plugins/.libs
bluetoothd[6373]: Ignoring (cli) external_dummy
bluetoothd[6373]: Not enough free handles to register service
bluetoothd[6373]: adapter_ops_setup failed

现在手机可以看到并连接到加密狗,但是看不到任何服务或读取任何特征:

enter image description here enter image description here

如何使GATT服务器完全正常工作并正确宣传并允许其与服务和特征进行互动?

1 个答案:

答案 0 :(得分:0)

显然这与使用的无线电有关。 CSR BLE Dongle无法作为GATT服务器运行。我在德州仪器WL1271的另一块电路板上做了这些准确的步骤,它可以工作! iPhone可以看到GATT服务/特征。