你好,
尝试修改BLE设备名称基础DSPS演示时。我遇到了一个问题,即设备名称长度不超过7个字节。
初步分析是由以下代码引起的:
device_name_avail_space = app_add_data_max_size - cmd-> info.host.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增加。但我的Mobilephnoe发现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_add_data_max_size和adv_data_len。
下一步,我尝试将Adv_Data_Len的大小从0x1f扩展到0x23.但是Mobilephone无法找到更严重的问题BLE设备。
它似乎想改变设备名称不是一个简单的事情。向前致以您的回复!谢谢!
嗨mark.zhaofei,
CodeSnippet指出,只要广告字符串可以适合,您的名称的长度将会很长。广告字符串由spec定义为31(0x1f)字节总数(包括标志,有效载荷,大小等),您无法更改广告字符串的长度(如果您没有,它会导致您的问题回复规格)。在DSP应用程序中,广告字符串就是这样的:
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,无论剩余地点如何适应 - > 0x09是剩余空间的长度,0x09是设备名称的标签,其余的是设备名称。
您可以在app_sps_device_project.h文件中找到广告字符串。
在字符串中添加已安置的字节会产生23个字节,这意味着您的设备名称必须适用于8个字节,否则将由您发布的CodeSnippet减少。
这并不意味着您的设备名称会减少,如果连接到外围设备(使用显示配置文件数据库的简单应用程序)并进入GAP服务和设备名称特征,您将能够读取整个名称你在你的外围说明了。
谢谢mt_dialog.
嗨mt_dialog,
谢谢你的回复。我简单地总结了我的理解,如果有错,请纠正我。
1.广告数据只有8个字节用于放置设备名称。even增加名称的长度只能在广告数据8字节中看到,其余的将减少。
如果是,可能是许多Mobilephone刚刚获得不完整的名字。因为只读取发现阶段的广告数据的名称。?
2.我们可以通过在设备名称特征中通过GAP服务获取整个名称。
如果是,如何在发现阶段获取全名?
谢谢!
嗨mark.zhaofei,
1.对于DSPS应用程序,仅为应用程序名称留下8个字节。即使您增加名称的长度,您发布的函数也会减少固件中所述的名称。我肯定不知道,但似乎移动设备保持名称表明广告字符串。
2.如果减少广告字符串中的已完整放置字节的长度,则可以放置设备的全名。DSP是因为自定义配置文件它需要16个字节的广告字符串,在广告字符串中消耗大量空间。如果要保留服务声明并将设备名称放在广告字符串中,您可以做的是要将服务声明放在扫描响应数据中,并释放广告字符串以放置整个名称(最多31个字节用强制性字段,标志,大小)。
谢谢mt_dialog.