在搜索蓝牙设备时,显示的是用户可以自定义的名称,不同于蓝牙设备地址是固定的48bit。

通过这个设备名,可以在一堆蓝牙设备列表中,更快的发现你想要连接的设备。

而更改蓝牙设备名称,也是在蓝牙开发中的一个基本功能。

蓝牙Spec 5.0,在Vol 3:Core System Package [Host volume]中,Part C: Generic Access Profile里有说明。

BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part C page 1988

3.2.2 蓝牙设备名称(方便用户使用的名称)/ Bluetooth Device Name (the user-friendly name)

3.2.2.1 定义

蓝牙设备名称是一个蓝牙设备向远程设备公开的用户友好名称。

对于一个支持BR/EDR设备类型的设备来说,名称是响应LMP_name_req而在LMP_name_res中返回的一个字符串。

对于支持LE-only设备类型的设备,名称是在第12.1节中定义的设备名称特性中持有的一个字符串。

3.2.2.1.1 具有BR/EDR/LE设备类型的设备的蓝牙设备名称

一个BR/EDR/LE设备类型应具有一个单一的蓝牙设备名称,无论用哪个物理信道来寻找蓝牙设备,该名称都应是相同的。

对于BR/EDR物理通道,该名称在LMP_name_res中接收。

对于LE物理信道,名称可以从第12.1节定义的设备名称特性中读取。

注意:如果本地设备支持 ATT over BR/EDR,则本地设备的设备名称特征可由远程设备使用 ATT over BR/EDR来读取。

3.2.2.2 用户界面层面的术语

当蓝牙设备名称在用户界面层面被提及时,应使用术语 "蓝牙设备名称"。

3.2.2.3 表示法

蓝牙设备名称最多可以有248个字节(见[Vol 2] C部分,第4.3.5节)。它应根据UTF-8编码(因此,如果使用U+0000至U+007F范围以外的代码点,在用户界面层面上输入的名称可能被限制在多达62个字符)。

一个设备不能指望一般的远程设备能够处理超过蓝牙设备名称的前40个字符。如果一个远程设备的显示能力有限,它可能只使用前20个字符。

12.1 设备名称特性

设备名称特征应包含设备的名称,如第3.2.2节中定义的UTF-8字符串。当设备可被发现时,设备名称特征值应无需认证或授权即可读取。当设备不可被发现时,设备名称特征值不应未经认证或授权而被读取。

设备名称特征值可以是可写的。如果是可写的(应该是由认证或授权的远程设备可修改本地设备名称),认证和授权可以由更高一层的规范来定义,也可以是具体实施。

Attribute Handle

Attribute  Type

Attribute  Value

Attribute Permissions

0xMMMM

0x2A00 – UUID for «Device Name»

Device Name

Readable without authentication or authorization

when discoverable.

Optionally writable, authentication and authorization

may be defined by a higher layer specification or be

implementation specific.

设备名称特征值的长度应为0至248个字节。

一个设备只能有一个设备名称特性的实例。

ATT是Attribute protocol,a protocol for discovering, reading, and writing attributes on a peer device。

详见Vol 3,Part F: Attribute Protocol(ATT)。

Attribute Handle是有ATT服务器指定的一个16bit的值,可由远程客户端来引用此属性,是非0的唯一值。

API接口

在Bluetopia SDK中,设置device name的接口如下:

经典蓝牙 - Generic Access Profile API

GAP_Set_Local_Device_Name

BLE - Generic Access Profile Service (GATT based) API

GAPS_Set_Device_Name

通过以上接口更改蓝牙名称后,会立即生效,这时在搜索蓝牙设备时,显示出的名字就是更改后的名字。