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

我想知道是否有办法从Linux命令行设置gatt服务器。 我知道BlueZ的gatttool命令允许你充当gatt客户端并询问远程gatt服务器,但是,我不认为这个工具可以用来build立一个服务器。

我想实现的是一个从命令行创build的gatt服务器,可以通过任何中央设备(例如iOS或Android设备)来连接到GATT服务器,发现服务和特性,以及处理特点。

例:

Gatt服务器有1个包含3个特征的服务。

  • 服务uuid​​ = 0xFFFF
  • 字符1 uuid = 0xAAAA,值= 01,属性=可读
  • 字符2 uuid = 0xBBBB,值= 00,属性=可读写
  • 字符3 uuid = 0xCCCC,值= 02,属性=通知

我正在使用内核版本3.11.0和BlueZ 5.19

我也遇到了同样的问题,但是可以找到任何合适的解决方案,在Ubuntu机器上使用bluez堆栈最好使用一些hci命令来通告LE数据包。 这些数据包将不断的被广告,因为这是LE服务器。如果你使用GATT客户端进行扫描,你会在扫描列表中得到你的bluez设备的名字。

使用下面的命令:

通过以下命令设置LE通告数据包:

sudo hcitool -i hcix cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00 

·现在通过以下命令通告LE数据包:

 sudo hciconfig hcix leadv 

我相信从CLI设置Gattserver是不可能的。 主要是因为它是上层功能,所以没有可用的工具来完成它(因为大多数工具提供了较低层功能)。

但是您可以使用模拟蓝牙使用dbus创建服务的方式。

我们需要一个具有两个特征(R,W,N)

我们最终做的是如下 – 1.使用libgdbus(来自bluez源代码)它拥有所有的dbus包装器来将服务注册到bluez。

  1. 创建了一个翻译器(socket IPC)来分离许可问题(GPL)

  2. 发送命令到服务注册器创建一个服务e,g – op_code = create_service,uuid ='service_uuid'

op_code = create_charac,uuid ='charac_uuid'flags ='rwn'

希望这可以帮助。