6.蓝牙®设备名称¶
正如我们在上一节中观察到,我们的设备目前通告名对话框的TMPL。很可能你想使用其他名称为您的产品,让我们改变它!
- 打开user_config.h文件
- 向下滚动并更改的定义
USER_DEVICE_NAME
从对话框的TMPL
至我的产品
:
/// 设备名称#定义USER_DEVICE_NAME“我的产品”
- 生成项目(F7)
- 启动和停止调试器(按按Ctrl + F5两次)和使用您的BLE资源管理器应用程序来验证设备名称已更改为预期
注意
如果您使用的是iOS设备上的BLE探险应用程序,然后该名称将不会出现已经改变了。这是因为iOS的已缓存的名称。要清除高速缓存和更新显示的名称,你需要连接再断开使用BLE资源管理器应用的设备。当您再次扫描应显示更新的名称。
设备名称可以包含Unicode表情符号。在设备名称中使用丰富多彩的表情符号,可以使它更容易快速识别您的设备扫描列表。你可以找一批表情符号在这里:https://apps.timwhitlock.info/emoji/tables/unicode
- 现在,将设备名称更改为
\ XF0 \ x9F \ X98 \ x8E
/// 设备名称#定义USER_DEVICE_NAME \ xF0 \ x9F \ x98 \ x8E”
- 生成项目并将其加载到目标。你应该可以看到如下所示的表情符号(如果你使用的是基于iOS的设备,记得如上所述清除缓存):
6.1。蓝牙运行时的设备名称¶
有时候,期望在运行时构建该装置名称。这将是情况下,如果例如我们想序列号添加到该广告的设备名称。序列号可能是一些生产过程中,我们编程到OTP。在下面的例子中,我们只是要硬编码了一些从OTP读超出本教程的范围。
在这个时候,一些关于广告数据的信息是合适的。广告数据由许多数据段组成,每个数据段包括:
- 包含在八比特组段包括类型的数A一个八位字节长度字段,但不包括长度本身
- 一个八字节类型字段,指定段中包含的数据类型。属性中列出类型选项gap.hSDK,因为枚举的文件
gap_ad_type
。BD名称类型我们使用前面的例子GAP_AD_TYPE_COMPLETE_NAME
或×09 - 任意数量的数据字节根据类型字段
该广告数据可以包含都必须遵循上述规则多个单独的数据段。该广告数据仅限于31个字节,必须[1]包含旗帜(GAP_AD_TYPE_FLAGS
)链段留下28个八位位组用于其它的使用。SDK6自动填充标记段。
的八位位组31的扫描响应可以用于提供附加信息到蓝牙扫描器。扫描的响应也必须遵守上面列出的规则。扫描响应在扫描请求的接收返回到扫描仪。
现在,回到在运行时改变BD的名字。首先,我们必须防止由SDK广告数据的默认构造,而是构建我们自己的。为此,我们重新路由回调从默认广告经营我们的用户空间:
- 在user_callback_config.h修改:
静态的常量结构default_app_operationsuser_default_app_operations={。default_operation_adv=default_advertise_operation,};
为此:
静态的常量结构default_app_operationsuser_default_app_operations={。default_operation_adv=user_advertise_operation,};
- 重新路由到用户空间,需要我们把原型此功能user_peripheral_template.h:
空虚user_advertise_operation(空虚);
我们现在准备实现自己的功能。我们将会从配置文件中的设置,这样我们只需要管理我们期望的改变。
- 在user_peripheral_template.c实现我们的功能,如下所示:
空虚user_advertise_operation(空虚){//复制在user_config.h指定当前默认的广告数据结构gapm_start_advertise_cmd*adv_cmd;/ /保留版本结构gapm_start_advertise_cmd*CMD;//版本我们发送CMD=app_advertise_start_msg_create();//创建一个空的广告开始命令//从app_easy功能的广告性质adv_cmd=app_easy_gap_undirected_advertise_get_active();//复制一份广告财产的memcpy(CMD,adv_cmd,的sizeof(结构gapm_start_advertise_cmd));//指定广告数据(我们只是改变了BD名)// advl . data segment,长度为0x05,类型为BD name, name为女士Bug表情uint8_tadv_data[]={0×05,GAP_AD_TYPE_COMPLETE_NAME,0 xf0,0x9F,的0x90,0x9E};CMD->信息。主办。adv_data_len=的sizeof(adv_data);的memcpy(&CMD->信息。主办。adv_data,&adv_data,的sizeof(adv_data));//发送消息GAP任务ke_msg_send(CMD);//我们现在连接ke_state_set(TASK_APP,APP_CONNECTABLE);}
- 构建项目并将其加载到目标上
- 使用BLE explorer应用程序,看看该设备现在是否将其蓝牙®设备的名称宣传为女士臭虫表情符号
新的名称不会在您的iOS设备上的扫描列表中显示出来。该LightBlue™应用程序仍显示“笑脸与阴影”的表情符号。这是因为蓝牙外设2分不同的情况下暴露自己的设备名称:
- 当地BD广告名称。这可以是全名,也可以是全名的缩写,BLE扫描程序将显示此名称
- 完整的本地BD名中可以访问蓝牙®连接。该名称字段的长度最多可达248个字符。这是浅蓝色™在扫描列表中显示的内容
我们上面所做的更改不仅影响了广告的设备名称。全名并没有受到影响。要更改姓名,我们需要做一些更多的工作:
- 在我们的底部新实现
user_advertise_operation
在功能empty_peripheral_template.c,添加以下代码,将相关数据复制到BD全名:
//从广告数据中复制BD名称(忽略大小和类型字段)device_info。dev_name。长度=的sizeof(adv_data)-2;的memcpy(device_info。dev_name。的名字,&adv_data[2]device_info。dev_name。长度);
- 生成项目并将其加载到目标。您应该看到瓢虫的表情符号在这个时候任何BLE探险的应用程序正确地显示出来。
注意
你会发现,各种BLE浏览器的应用程序有不同的问题,当涉及到广告的BD名和全名BD区分。在应用程序中没有说清楚什么BD名它们显示,它目前还不清楚所显示的姓名是否被高速缓存。
脚注:
[1] | 的旗帜,GAP_AD_TYPE_FLAGS ,仅在当一个BLE外围可连接所述广告数据是强制性的。这使得在非连接的实现提供31个字节 |