高通 Linux 蓝牙指南(十九)

GATT 是一个服务框架,它使用 ATT 来发现服务,并读取和 在对等设备上写入 Characteristic 值。

要执行低功耗蓝牙 GATT 服务器或客户端功能,您必须首先 完成以下过程中的步骤。

为低功耗蓝牙 GATT 功能设置设备

先决条件

  • 启用 SSH 以访问您的主机设备。
  • 将 DUT 和远程设备放在蓝牙附近。

程序

  1. 使用以下命令在命令提示符中运行 SSH:

    ssh root@<device_IP_address>
    

    如果设备的 IP 地址为 ,则运行 以下命令:10.92.160.222

    ssh root@10.92.160.222
    
  2. 输入以下密码连接到 SSH:

    oelinux123
    
  3. 通过运行以下命令打开 Bluetooth 测试应用程序:

    btapp
    

    示例输出

    sh-5.1# btapp
     get\_ap\_interface
    :: get\_ap\_interface
    
    \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Menu \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
             gap\_menu
             test\_menu
             a2dp\_sink\_menu
             hfp\_client\_menu
             gattctest\_menu
             gattstest\_menu
             hogp\_menu
             hfp\_ag\_menu
             a2dp\_source\_menu
             spp\_client\_menu
             spp\_server\_menu
             eslap\_menu
             exit
     \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1. 按如下方式启用 Bluetooth:
    a. 通过运行以下命令转到 Gap 菜单 命令:

    ```
    gap_menu
    ```
    

    b. 通过运行以下命令启用 Bluetooth:

    ```
    enable
    ```
    

示例输出

        gap\_menu
        
        \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Menu \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
                 enable
                 disable
                 inquiry
                 cancel\_inquiry
                 get\_role\_req<space><bt\_address>     eg. get\_role\_req 00:11:22:33:44:55
                 pair<space><bt\_address><space><transport>     eg. pair 00:11:22:33:44:55 0(auto)/1(BREDR)/2(BLE)
                 unpair<space><bt\_address>     eg. unpair 00:11:22:33:44:55
                 inquiry\_list
                 bonded\_list
                 get\_state
                 get\_bt\_name
                 get\_bt\_address
                 set\_bt\_name<space><bt name>     eg. set\_bt\_name MDM\_Fluoride
                 set\_scan\_mode<space><scan mode value (range 0-2)>     eg. set\_scan\_mode 0 --0-BT\_SCAN\_MODE\_NONE,1- BT\_SCAN\_MODE\_CONNECTABLE,2-BT\_SCAN\_MODE\_CONNECTABLE\_DISCOVERABLE
                 set\_afh<space><AFH\_Host\_Channel\_Classification>     eg. set\_afh 112233445566778899f0
                 send\_hci\_cmd<space><hci\_cmd>     eg. send\_hci\_cmd 01,04,05,33,8b,9e,0a,00 - For Inquiry
                 read\_clock<space><which\_clock range(0-1)><space><bt\_address>     eg. read\_clock 0(local)/1(acl connection) 00:11:22:33:44:55
                 main\_menu
                 switch\_role\_req<bt\_address><space><new\_role>     eg. switch\_role\_req 00:11:22:33:44:55 0 or get\_role\_req 00:11:22:33:44:55 1
         \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
        enable
         current State = 0, new state = 1
         BT State is ON

c. 通过运行以下命令返回主菜单 命令:

    ```
    main_menu
    ```
  1. 根据需要转到 GATT 服务器或客户端菜单。
  • 要转到 GATT 服务器菜单,请运行以下命令:

    ```
    gattstest_menu
    ```
    

示例输出

        main\_menu
        \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Menu \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
                 gap\_menu
                 test\_menu
                 a2dp\_sink\_menu
                 hfp\_client\_menu
                 gattctest\_menu
                 gattstest\_menu
                 hogp\_menu
                 hfp\_ag\_menu
                 a2dp\_source\_menu
                 spp\_client\_menu
                 spp\_server\_menu
                 eslap\_menu
                 exit
         \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
        gattstest\_menu
        
        \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Menu \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
                 gattstest\_init\_server (only for Init time)
                 gattstest\_addservers
                 gattstest\_addservices<space><server instance><space><service instance>
                 gattstest\_init\_advertiser initialzes advertiser
                 gattstest\_start\_advertiser<space><server instance>
                 gattstest\_readphy<space><remote address><server instance>
                 gattstest\_set\_preferred\_phy<space><remote address><space><server instance><space><tx phy><space><rx phy><space><phy opt>
                 gattstest\_stop<space><server\_instance>
                 gattstest\_disable
                 gattstest\_cancel\_connection<space><remote address>
                 gattstest\_unregister\_server<space><server instance>
                 main\_menu
         \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

有关 GATT 服务器功能,请参阅执行低功耗蓝牙 GATT 服务器功能

  • 要转到 GATT 客户端菜单,请运行以下命令:

    gattctest_menu
    

    示例输出

        main\_menu
        
        \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Menu \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
                 gap\_menu
                 test\_menu
                 a2dp\_sink\_menu
                 hfp\_client\_menu
                 gattctest\_menu
                 gattstest\_menu
                 hogp\_menu
                 hfp\_ag\_menu
                 a2dp\_source\_menu
                 spp\_client\_menu
                 spp\_server\_menu
                 eslap\_menu
                 exit
         \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
        gattctest\_menu
        
        \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Menu \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
                 gattctest\_init (only for Init time)
                 gattctest\_scanset<space><scan\_type><space><value>         eg: scanType: 0-NO\_SET,1-SCAN\_MODE,2-CB\_Type,3-RESULT\_TYPE,4-PHY,5-LEGACY,6-REPORT\_DELAY,7-NUM\_RESPONSE
                 gattctest\_scanFilter<space><filter\_type><space><filter\_Value>         eg: filterType: 0-NO\_FILT,1-FILT\_BD\_ADDR,2-FILT\_DEV\_NAME,3-FILT\_SRVC\_UUID
                 gattctest\_scanFilter\_manData<space><manuId><space><ManuData><space><ManuMask>
                 gattctest\_start\_scan
                 gattctest\_stop\_scan
                 gattctest\_batch\_scan  0-FULL MODE 1- TRUNCATED MODE
                 main\_menu
                 gattctest\_conn\_params<space><isAuto><space><phy><space><isOppur>         eg: isAuto(0/1);phy (0-255 (0 bit:1M(1); 1bit:2M(2); 2bit:Coded(4); or any combination); isOppur(0/1))
                 gattctest\_connect<space><bt\_address><space><transport>         eg. gattctest\_connect 00:11:22:33:44:55 0(Auto)/1(BREDR)/2(LE)
                 gattctest\_disconnect<space><bt\_address>           eg.gattctest\_connect 00:11:22:33:44:55
                 gattctest\_discsrvc<space><bdaddr>  discovering services
                 gattctest\_rdchar\_uuid<space><bdaddr><space><uuid>         eg: reading char by uuid
                 gattctest\_readPhy<space><bt\_address>
                 gattctest\_readrssi<space><bt\_address>
                 gattctest\_reqMtu<space><bt\_address><space><value>
                 gattctest\_refresh<space><bt\_address>
                 gattctest\_setphy<space>          <TxValue(0-255,(0 bit:1M(1); 1bit:2M(2); 2bit:Coded(4); or any combination))><space><RxValue(0-255)><space><PhyOpt(0:no pref,1:s2,2:s8)><space><bt\_address>
                 gattctest\_getservices<space><bt\_address>
                 gattctest\_reqconn\_pri<space><bt\_address><space><priority 0/1/2>
                 gattctest\_getcharid<space><bt\_address><space><instanceid>
                 gattctest\_reliablewrite<space><bt\_address><space><instanceid>
                 gattctest\_getdescid<space><bt\_address><space><instanceid>
                 gattctest\_getsrvc<space><bt\_address><space><UUID><space><INSTANCEID>
                 gattctest\_RdWrDesc<space><bt\_address><space><R-2/W-1><space><value><space><INSTANCEID><space><value length>
                 gattctest\_RdWrchar<space><bt\_address><space><R-2/W-1><space><value><space><INSTANCEID><space><value length>
                 gattctest\_conn\_dev
                 gattctest\_register\_notifications<space><bt\_address><space><CHARINSTANCEID><space><DESCINSTANCEID><space><E-1/D-0>
         \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

执行低功耗蓝牙 GATT 服务器功能

您可以使用这些选项执行低功耗蓝牙 GATT 服务器功能。gattstest_menu

准备工作:

步骤

  1. 在命令提示符中将低功耗蓝牙 GATT 服务器配置为 遵循:
    a. 通过运行以下命令,ServerConfigFile.txt提取服务器配置文件 命令:
        scp -r root@<IP_address>:/etc/bluetooth/ServerConfigFile.txt <destination_file_path>

要将文件提取到当前文件路径,请在命令中输入 as。<destination_file_path>``.

注意出现提示时 对于密码,输入 以验证 通过安全复制协议 (SCP) 进行文件传输。oelinux123

设备的 IP 地址为 。自 从设备的 /etc/bluetooth/ 目录下拉取 ServerConfigFile.txt 文件, 运行以下命令:10.92.160.222

scp -r root@10.92.160.222:/etc/bluetooth/ServerConfigFile.txt .

b. 配置或添加 servers 中。
c. 通过运行 以下命令:

scp -r ServerConfigFile.txt root@<IP_address>:/etc/bluetooth/ServerConfigFile.txt

设备的 IP 地址为 。自 将文件推送回 device,执行以下命令:10.92.160.222``ServerConfigFile.txt

scp -r ServerConfigFile.txt root@10.92.160.222:/etc/bluetooth/ServerConfigFile.txt

此命令可确保新添加或修改的参数为 反映在设备中。

  1. 在命令提示符中将蓝牙低功耗 GATT 通告配置为 遵循:
    a. 通过运行AdvertiserConfigFile.txt 以下命令:

    ```
    scp -r root@<IP_address>:/etc/bluetooth/AdvertiserConfigFile.txt <destination_file_path>
    ```
    
    要将文件提取到当前文件路径,请在命令中输入 as。`<destination_file_path>``.`
    
    **例**
    
    设备的 IP 地址为 。自 从设备的 /etc/bluetooth/ 目录下拉取文件, 运行以下命令:`10.92.160.222``AdvertiserConfigFile.txt`
    
    ```
    scp -r root@10.92.160.222:/etc/bluetooth/AdvertiserConfigFile.txt .
    ```
    
    有关 advertiser 配置文件的更多信息,请参阅 [GATT 服务器配置参数](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-13/gatt_config_params.html#references_1__section_jsr_3lq_m1c)。
    

    b. 根据需要在文件中配置广告参数。
    c. 将修改后的广告主配置文件推送到设备 运行以下命令:

    ```
    scp -r AdvertiserConfigFile.txt root@<IP_address>:/etc/bluetooth/AdvertiserConfigFile.txt
    ```
    
    **例**
    
    设备的 IP 地址为 。自 将 AdvertiserConfigFile.txt 文件推回 设备中,运行以下命令:`10.92.160.222`
    
    ```
    scp -r AdvertiserConfigFile.txt root@10.92.160.222:/etc/bluetooth/AdvertiserConfigFile.txt
    ```
    
    此命令可确保修改后的参数反映在 设备。
    
  2. 设置设备并转到 GATT 服务器菜单。

启动低功耗蓝牙 GATT 服务器

要启动低功耗蓝牙 GATT 服务器,请执行以下作:

注意确保您配置了服务器配置文件和广告主配置文件。

步骤

  1. 通过运行ServerConfigFile.txt 以下命令:

    gattstest_init_server
    

    示例输出

    gattstest_menu
    
    ***************** Menu *******************
             gattstest_init_server (only for Init time)
             gattstest_addservers
             gattstest_addservices<space><server instance><space><service instance>
             gattstest_init_advertiser initialzes advertiser
             gattstest_start_advertiser<space><server instance>
             gattstest_readphy<space><remote address><server instance>
             gattstest_set_preferred_phy<space><remote address><space><server instance><space><tx phy><space><rx phy><space><phy opt>
             gattstest_stop<space><server_instance>
             gattstest_disable
             gattstest_cancel_connection<space><remote address>
             gattstest_unregister_server<space><server instance>
             main_menu
     ******************************************
    gattstest_init_server
    ENABLE GATTSTEST
    Initializing Gattstest
    Reading Server Configuration File ....
    File reading Done
    
  2. 通过运行以下命令添加服务器实例:

    gattstest_addservers
    
  3. 通过运行以下命令将服务添加到此服务器实例 命令:

    gattstest_addservices <server instance> <service instance>
    

    在此命令中,服务器实例后跟服务实例 这必须添加到它。服务编号在 中提到。

    将文件中记录的服务添加到新创建的 server 运行以下命令 命令:1``ServerConfigFile.txt``1

    gattstest_addservices 1 1
    

    示例输出

    gattstest_addservers
    Adding Server 1
    gattstest_addservices 1 1
    AddServices
    
  4. 通过运行以下命令初始化 GATT 广告主:

    gattstest_init_advertiser
    
  5. 通过运行以下命令通告添加和配置的服务器 命令:

    gattstest_start_advertiser <server instance>
    

    要公布已添加的服务器实例,并且 configured,运行以下命令:1

    gattstest_start_advertiser 1
    
  6. 设备开始广播后,从 Bluetooth Low 连接 Energy 应用程序。

    示例输出

    gattstest_start_advertiser 1
    StartAdvertisement
    onAdvertisingSetStarted - Success
    The device 22:22:85:3d:2e:50 got connected
     ACL state:0 change with reason 00 for device: 22:22:85:3d:2e:50
    

读取和设置 PHY 参数

要读取和设置 PHY 参数,请执行以下作:

步骤

  1. 通过运行以下命令读取当前连接的 PHY 参数 命令:

    gattstest_readphy <remote address> <server instance>
    

    为远程设备公布服务器实例 替换为地址 .读取 PHY parameters 中,执行以下命令:1``22:22:85:3d:2e:50

    gattstest_readphy 22:22:85:3d:2e:50 1
    

    示例输出

    gattstest_readphy 22:22:85:3d:2e:50 1
    Read Phy
    User input is 22:22:85:3d:2e:50
    
    onPhyRead deviceAddress: 22:22:85:3d:2e:50, txPhy: 1 rxPhy: 1 status: 0
    
  2. 通过运行以下命令来设置当前连接的首选 PHY 命令:

    gattstest_set_preferred_phy <remote address> <server instance> <tx Phy> <rx Phy> <Phy option>
    

    有关 PHY 参数的更多信息,请参阅 GATT 服务器配置参数

    地址为 已连接到 Server Instance 。要将 Tx PHY 设置为 ,将 Rx PHY 设置为 ,并将 PHY 选项设置为此连接,请运行以下命令 命令:22:22:85:3d:2e:50``1``1 M``1 M``0

    gattstest_set_preferred_phy 22:22:85:3d:2e:50 1 1 1 0
    

    样本 输出

    gattstest_set_preferred_phy 22:22:85:3d:2e:50 1 1 1 0
    Set Preferred Phy
    the user options are address: 22:22:85:3d:2e:50 server_instance: 1 txoption: 1 rxoption: 1 phyoption: 0
    

断开远程设备的连接

要断开远程设备的连接,请运行以下命令:

gattstest_cancel_connection <remote address>

要断开远程设备与地址 的连接,请运行以下命令:22:22:85:3d:2e:50

gattstest_cancel_connection 22:22:85:3d:2e:50

示例输出

gattstest_cancel_connection 22:22:85:3d:2e:50
Cancel Connection
The device 22:22:85:3d:2e:50 got disconnected
 ACL state:1 change with reason 16 for device: 22:22:85:3d:2e:50

停止蓝牙低功耗 GATT 服务器

要停止播发低功耗蓝牙 GATT 服务器实例,请运行 以下命令:

gattstest_stop <server_instance>

要停止服务器实例 ,请运行以下命令:1

gattstest_stop 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值