我的目标是使用BlueZ 4.101(不是BlueZ 5.X)在Ubuntu 14.04上通过USB BLE Dongle(Cambridge Silicon Radio CSR8510 A10)公开GATT服务器。 BlueZ 4.101附带一个gatt-example插件,几个人已经确认为他们工作。 例如,文章中的最后一个答案声称它是有效的: Bluez:宣传服务/ gatt服务器示例?
最终,我想在BlueZ 4.101中实现我自己的GATT服务器,类似于这个post: 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上彻底删除了包pipe理器的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
现在手机可以看到并连接到encryption狗,但不能看到任何服务或读取任何特征:
我如何让GATT服务器完全正常工作和做广告,并允许它的服务和特性与之交互?
显然这与使用的无线电有关。 CSR BLE Dongle不能作为GATT服务器。 我在一个德州仪器WL1271的另一块电路板上做了这些确切的步骤,它的工作原理! iPhone可以看到GATT服务/特性。