通用属性配置文件
通用属性配置文件(GATT)是一个服务框架,它利用属性协议(ATT)来发现服务,并在对等设备上读写特征值。
要执行低功耗蓝牙 GATT 服务器或客户端功能,您必须首先完成以下步骤。
为低功耗蓝牙 GATT 功能设置设备
前提条件
- 启用 SSH 以访问您的主机设备。有关说明,请参阅 “使用 SSH 登录”。
- 将被测设备(DUT)和远程设备放置在蓝牙信号覆盖范围内。
操作步骤
-
在命令提示符中使用以下命令运行 SSH:
ssh root@<device_IP_address>
示例
如果设备的 IP 地址是 10.92.160.222,请运行以下命令:ssh root@10.92.160.222
-
输入以下密码以连接到 SSH:
oelinux123
-
运行以下命令打开蓝牙测试应用程序:
bluetoothctl
您可以通过 bluetoothctl 的主菜单选项执行一些 GATT 功能,如连接和扫描。
示例输出sh-5.1# bluetoothctl Agent registered uetoothd... [CHG] Controller 22:22:F1:C1:99:C0 Pairable: yes
-
运行以下命令启用蓝牙:
power on
示例输出
[bluetooth]# power on [CHG] Controller 22:22:F1:C1:99:C0 Class: 0x007c0000 Changing power on succeeded [CHG] Controller 22:22:F1:C1:99:C0 Powered: yes
-
运行以下命令进入 GATT 子菜单:
menu gatt
示例输出
[bluetooth]# menu gatt Menu gatt: Available commands: ------------------- list-attributes [dev/local] List attributes select-attribute <attribute/UUID/local> [attribute/UUID] Select attribute attribute-info [attribute/UUID] Select attribute read [offset] Read attribute value write <data=xx xx ...> [offset] [type] Write attribute value acquire-write Acquire Write file descriptor release-write Release Write file descriptor acquire-notify Acquire Notify file descriptor release-notify Release Notify file descriptor notify <on/off> Notify attribute value clone [dev/attribute/UUID] Clone a device or attribute register-application [UUID ...] Register profile to connect unregister-application Unregister profile register-service <UUID> [handle] Register application service. unregister-service <UUID/object> Unregister application service register-includes <UUID> [handle] Register as Included service in. unregister-includes <Service-UUID> <Inc-UUID> Unregister Included service. register-characteristic <UUID> <Flags=read,write,notify...> [handle] Register application characteristic unregister-characteristic <UUID/object> Unregister application characteristic register-descriptor <UUID> <Flags=read,write...> [handle] Register application descriptor unregister-descriptor <UUID/object> Unregister application descriptor back Return to main menu version Display version quit Quit program exit Quit program help Display help about this program export Print environment variables
- 若要使用 GATT 服务器功能,请参阅 “执行低功耗蓝牙 GATT 服务器功能”。
- 若要使用 GATT 客户端功能,请参阅 “执行低功耗蓝牙 GATT 客户端功能”。
执行低功耗蓝牙 GATT 服务器功能
您可以使用 GATT 子菜单选项和 bluetoothctl 命令执行低功耗蓝牙 GATT 服务器功能。
连接到远程设备
要连接到远程设备,请在 bluetoothctl 菜单中运行以下命令:
connect <bt_address>
参数
<bt_address> 是远程设备的蓝牙地址。
注意 要获取远程设备的蓝牙地址,请运行低功耗蓝牙 GATT 扫描。
示例
要连接到蓝牙地址为 6D:38:AF:C6:B5:62 的客户端,请运行以下命令:
connect 6D:38:AF:C6:B5:62
添加主服务
要向 GATT 服务器添加主服务,请在 menu gatt 菜单中运行以下命令:
register-service <UUID> [handle]
示例
如果服务的 UUID 是 FF01,句柄是 30,请运行以下命令:
register-service FF01 30
示例输出
[MyDeviceB:/service0001/char0008]# register-service FF01 30
[NEW] Primary Service (Handle 0x001e)
/org/bluez/app/service0
FF01
[/org/bluez/app/service0] Primary (yes/no): yes
添加特征
要向服务器的服务添加特征,请在 menu gatt 菜单中运行以下命令:
register-characteristic <UUID> <Flags=read,write,notify...> [handle]
参数
是特征的标志值。有关值,请参阅 “标志值”。
示例
服务的 UUID 是 FF02,标志是 读,写,通知,句柄是 31。要添加特征,请运行以下命令:
register-characteristic FF02 read,write,notify 31
示例输出
[MyDeviceB:/service0001/char0008]# register-service FF01 30
[NEW] Primary Service (Handle 0x001e)
/org/bluez/app/service0
FF01
[/org/bluez/app/service0] Primary (yes/no): yes
添加描述符
要向服务器中的特征添加描述符,请在 menu gatt 菜单中运行以下命令:
register-characteristic <UUID> <Flags=read,write,notify...> [handle]
参数
是描述符的标志值。有关值,请参阅 “标志值”。
示例
服务的 UUID 是 FF03,标志是 读,写,句柄是 33。要添加描述符,请运行以下命令:
register-descriptor FF03 read,write 33
示例输出
[MyDeviceB]# register-descriptor FF03 read,write 33
[NEW] Descriptor (Handle 0x0021)
/org/bluez/app/service0/chrc0/desc0
FF03
<egister-descriptor FF03 read,write 33[/org/bluez/app/service0/chrc0/desc0] Enter value: 21
添加包含服务
在开始之前,请将预期的服务添加为主服务。
要将一个服务作为包含服务添加到另一个服务中,请在 menu gatt 菜单中运行以下命令:
register-includes <UUID> <UUID>
示例
假设有两个主服务,其 UUID 分别为 FF01 和 1112。要将服务 1112 作为包含服务添加到服务 FF01 中,请运行以下命令:
register-includes FF01 1112
示例输出
[MyDeviceB]# register-includes FF01 1112
[NEW] Primary Service (Handle 0x001e)
/org/bluez/app/service0
FF01
[NEW] Primary Included Service (Handle 0x0000)
/org/bluez/app/service1
1112
Unknown
注册应用程序
要发布服务器上可用或已添加的服务,请在 menu gatt 菜单中运行以下命令:
register-application [UUID]
示例
服务的 UUID 是 FF01。要发布服务器上可用或已添加的服务,请运行以下命令:
register-application FF01
示例输出
[MyDeviceB]# register-application FF01
[CHG] Secondary Service (Handle 0x0015)
/org/bluez/app/service2
1112
Unknown
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Primary Service (Handle 0x0016)
/org/bluez/app/service1
FF01
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000ff01-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001112-0000-1000-8000-00805f9b34fb
Application registered
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000ff01-0000-1000-8000-00805f9b34fb
[CHG] Controller 22:22:9B:2C:79:1E UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
开始广播
要启动 GATT 广播,请在 bluetoothctl 菜单中运行以下命令:
advertise on
示例输出
[MyDeviceB]# advertise on
[CHG] Controller 22:22:9B:2C:79:1E SupportedInstances: 0x0f (15)
[CHG] Controller 22:22:9B:2C:79:1E ActiveInstances: 0x01 (1)
Advertising object registered
Tx Power: off
Name: off
Appearance: off
Discoverable: on
断开与远程设备的连接
要断开与远程设备的连接,请在 bluetoothctl 菜单中运行以下命令:
disconnect <bt_address>
参数
<bt_address> 是远程设备的蓝牙地址。
示例
要断开与蓝牙地址为 <bt_address> 6D:38:AF:C6:B5:62 的客户端的连接,请运行以下命令:
disconnect 6D:38:AF:C6:B5:62
标志值
的值可以为: