高通 Linux 蓝牙指南(五)

通用属性配置文件

通用属性配置文件(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

标志值
的值可以为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值