【发布时间】:2018-02-27 07:43:28
【问题描述】:
我的目标是在 Ubuntu 14.04 上使用 BlueZ 4.101(不是 BlueZ 5.X)通过 USB BLE 加密狗(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 服务器示例的任何特征或服务。手机上的多个 BLE 扫描仪应用程序显示 BLE Server 广告并允许连接,但都说此设备没有服务。
我已经设法在 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
现在手机可以看到并连接到加密狗,但永远看不到任何服务或读取任何特征:
如何让 GATT 服务器完全正常工作并正确发布广告,并允许与之交互的服务和特性?
【问题讨论】:
标签: linux ubuntu bluetooth bluetooth-lowenergy bluez