你好,
当尝试修改BLE设备名称基础DSPS演示。我遇到一个问题,BLE设备的名称长度不超过7字节。
初步分析由以下代码引起:
device_name_avail_space = APP_ADV_DATA_MAX_SIZE - cmd->info.host. device_name_avail_space = APP_ADV_DATA_MAX_SIZE - cmd->信息。adv_data_len - 2;
我试图扩展ADV_DATA_LEN长度,但它导致了一个严重的问题,即BLE设备无法找到。我认为这可能是由于修改了一些关键参数,如ADV数据长度。
我想知道是否有限制BLE设备名的长度?如何修复?
谢谢!
马克赵
设备:
嗨mark.zhaofei,
限制广告定义的字符串是31个字节BLE规范,有效载荷和标志,你可以设置你的名字的大小超过7字节的大小只是通过改变NVDS_TAG_DEVICE_NAME DEVICE_NAME_TAG_LEN,事情是这样的,你必须适应名称空间有限的广告字符串。如果旗帜,广告服务的大小和有效载荷在字符串中得到房间你就没有足够的空间来匹配你的设备的名字在广告字符串中。固件检查可用空间,并连接您的设备名称,以适应。除此之外,您可以在GAP服务的设备名称属性中看到您的设备的整个名称。
由于MT_dialog
嗨MT_dialog,
谢谢你的回复。我听从了你的建议。将“NVDS_TAG_DEVICE_NAME”修改为“CNOGA_BLE01”,并替换默认值“DA1458x”。同时,长度DEVICE_NAME_TAG_LEN从原来的7增加到11。但是我的手机发现BLE设备的名字只是“CNOGA_B”。这意味着7个字节的限制在其他地方。
分析发现,limit位于以下代码中:
Device_name_length = co_min(Device_name_length, device_name_avail_space);在app_sps_device_project.c文件中
device_name_avail_space依赖于APP_ADV_DATA_MAX_SIZE和ADV_DATA_LEN。
下一步,我尝试将ADV_DATA_LEN的大小从0x1F扩展到0x23。但它造成了更严重的问题BLE设备不能被手机发现。
看来要更改设备名称并不是一件简单的事情。期待您的回复!谢谢!
嗨mark.zhaofei,
代码片段声明您的名字的长度将与广告字符串所能容纳的长度一样长。广告字符串被规范定义为总共31 (0x1F)字节(包括标志,有效载荷,大小等),你不能改变广告字符串的长度(如果你不回复规范,它会给你带来麻烦)。在DSPS应用程序中,广告字符串是这样的:
0x02,0x01,0x06 ->缺省发布数据
0x11、0x07、0xb7、0x5c、0x49、0xd2、0x04、0xa3、0x40、0x71、0xa0、0xb5、0x35、0x85、0x3e、0xb0、0x83、0x07 ->可用128位UUID完整列表(DSPS服务128bit UUID)
0x09是剩余空间的长度,0x09是设备名的标签,其余的是设备名。
您可以在app_sps_device_project.h文件中找到广告字符串。
在字符串中添加已经放置的字节,结果是23个字节,这意味着您的设备名称必须适合8个字节,否则将被您发布的代码片段减少。
这并不意味着你的设备的名字是减少,如果你连接到外围(用一个简单的应用程序,它显示了配置文件数据库)和进入服务和设备名称特点的差距你将能够阅读整个名字你在外围。
由于MT_dialog
嗨MT_dialog,
谢谢你的回复。我只是简单的总结一下我的理解,如果有错,请纠正我。
1.在广告数据中,只有8个字节用于放置设备名称。即使增加名称的长度也只能在广告数据中看到8个字节,其余的则会减少。
如果是,可能很多手机只是取了一个不完整的名字。因为只有在发现阶段才读取广告数据的名称。
2.我们可以通过GAP服务在设备名称特征中获取设备的全部名称。
如果是,在发现阶段如何获得全称?
谢谢!
嗨mark.zhaofei,
1.对于DSPS应用程序,应用程序名称只剩下8个字节。即使你增加了名字的长度,你发布的函数也会减少你在固件中声明的名字。我不确定,但似乎移动设备保留了名称的广告字符串。
2.如果减少广告字符串中已经放置的字节的长度,则可以放置设备的全名。DSPS是一个自定义配置文件,它需要16字节的广告字符串,这消耗了广告字符串中的大量空间。如果你想保持服务宣言,并把广告中设备名称字符串你所要做的就是将扫描响应数据的服务声明和免费广告为了把整个字符串名称(31个字节与强制性字段,旗帜,大小)。
由于MT_dialog