GATT 是一个服务框架,它使用 ATT 来发现服务,并读取和 在对等设备上写入 Characteristic 值。
要执行低功耗蓝牙 GATT 服务器或客户端功能,您必须首先 完成以下过程中的步骤。
为低功耗蓝牙 GATT 功能设置设备
先决条件
- 启用 SSH 以访问您的主机设备。
- 将 DUT 和远程设备放在蓝牙附近。
程序
-
使用以下命令在命令提示符中运行 SSH:
ssh root@<device_IP_address>
例
如果设备的 IP 地址为 ,则运行 以下命令:
10.92.160.222
ssh root@10.92.160.222
-
输入以下密码连接到 SSH:
oelinux123
-
通过运行以下命令打开 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
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
-
按如下方式启用 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
```
- 根据需要转到 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
准备工作:
步骤
- 在命令提示符中将低功耗蓝牙 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
此命令可确保新添加或修改的参数为 反映在设备中。
-
在命令提示符中将蓝牙低功耗 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 ``` 此命令可确保修改后的参数反映在 设备。
-
设置设备并转到 GATT 服务器菜单。
启动低功耗蓝牙 GATT 服务器
要启动低功耗蓝牙 GATT 服务器,请执行以下作:
注意确保您配置了服务器配置文件和广告主配置文件。
步骤
-
通过运行
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
-
通过运行以下命令添加服务器实例:
gattstest_addservers
-
通过运行以下命令将服务添加到此服务器实例 命令:
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
-
通过运行以下命令初始化 GATT 广告主:
gattstest_init_advertiser
-
通过运行以下命令通告添加和配置的服务器 命令:
gattstest_start_advertiser <server instance>
例
要公布已添加的服务器实例,并且 configured,运行以下命令:
1
gattstest_start_advertiser 1
-
设备开始广播后,从 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 参数,请执行以下作:
步骤
-
通过运行以下命令读取当前连接的 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
-
通过运行以下命令来设置当前连接的首选 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