13

我正在尝试在 Linux 机器上使用 BlueZ 堆栈来创建具有自定义服务和特性的 GATT 服务器。最终目标是使用任何中心设备(例如 iOS 或 Android 设备)连接到 GATT 服务器,发现服务和特征,并操作特征中的数据。

例子:

  • 具有 1 个服务的外设,其中包含 3 个特征。
  • 服务 uuid = 0xFFFF
  • 字符 1 uuid = 0xAAAA,属性 = 可读
  • Char 2 uuid = 0xBBBB,属性 = 可读和可写
  • 字符 3 uuid = 0xCCCC,属性 = 可通知

从中央设备,我应该看到外围设备,连接到它并发现一个具有三个特征(0xAAAA、0xBBBB、0xCCCC)的服务(0xFFFF)。然后我应该能够读取 0xAAAA 的值,读取和写入 0xBBBB 的值,并在 0xCCCC 上启用通知。

请注意,我知道存在类似的问题,但它仅说明了如何将外围设备用作广告商。另一个已解决的问题解释了如何创建 GATT 服务器,但没有解释如何使用特性的属性(例如可读性、可通知性等),或者我可能遗漏了一些东西。

先感谢您。

4

3 回答 3

9

您可以查看 gatt-example 实践,或在 profile/ 目录下定义配置文件,例如 alert/server.c。基本上,您只需按照现有代码使用 gatt_service_add() 函数注册您的服务。例如 :

 gatt_service_add(adapter, GATT_PRIM_SVC_UUID, 0xFFFF,
    /* Char 1 */
    GATT_OPT_CHR_UUID16, 0xAAAA,
    GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ,
    GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, read_func_callback,

    /* Char 2 Define here */
    ...
    /* Char 3 Define here */
    ...
    GATT_OPT_INVALID);
 }

另外,我忘记了细节,但是为了让警报服务器正常工作,您需要在配置期间通过添加“--enable-maintainer-mode”和“--enable-experimental”来启用实验(和维护者模式?)

要运行,请使用 -n 和 -d 选项运行已编译的“bluetoothd”以进行调试(也可以使用 -E 来启用实验服务)。您可能希望在运行 bluetoothd 后再次重置适配器。然后您可以使用 gatttool 从远程设备连接(也可以在远程设备上运行 bluetoothd)。

于 2014-01-29T11:34:05.867 回答
4

1) goto Bluez folder

2) sudo ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --disable-systemd --enable-experimental --enable-maintainer-mode

3) sudo make all

4) Advertise connectable packets

# activate bluetooth
sudo hciconfig hci0 up                                             
# set advertise data: "hello world"
sudo hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44
# start advertising as connectable
sudo hciconfig hci0 leadv 0

5) sudo service bluetooth stop

6) sudo src/bluetoothd -d -n

7) From other PC, type (Change MAC id gatt server mac)

gatttool -b  gatt_server_mac --interactive

step 6 is for in case you want to compile plugins/gatt-example.c

if you want to compile server.c from profile/time or profle/alert(replace with alert in place of time) or anyother file in profile folder replace step 6

sudo src/bluetoothd --plugin=time -n

于 2015-03-20T07:14:00.637 回答
2

Bluetoothctl 命令行工具现在存在另一种解决方案。可以在此处找到更多详细信息:-

BlueZ:如何从命令行设置 GATT 服务器

我不确定 Bluetoothctl 是什么时候引入的,但在撰写本文时它是相对较新的,因此它在以前的 BlueZ 版本中不存在。我正在使用 BlueZ v5.50,这是我测试过的版本。

于 2018-11-16T08:55:24.987 回答