[已解决] 关于广播名字的长度困惑

ming191
Posts: 46
Joined: Mon May 31, 2021 6:27 am

[已解决] 关于广播名字的长度困惑

Postby ming191 » Thu Jul 01, 2021 9:27 am

尊敬的工程师,你好。我在测试 gatt_server_service_table 这个例程,我在测试广播名字,我发现一个奇怪的现象。因为你们的历程提供连两种广播方法,两种方法,各有一种问题。
1. 在没有定义CONFIG_SET_RAW_ADV_DATA这个宏变量的时候,名字可以广播长度为20,假设名字是 ABC_1122334455667788,一共20个长度,但是问题来了,安卓手机能搜索到了,但是苹果手机找不到。不知道为什么?但是少于20个字符,19个字符长度,安卓和苹果手机都能搜索到。
2.定义了CONFIG_SET_RAW_ADV_DATA,我利用raw_adv_data[]这个数据来构造函数,字符名字长度最大值是0x14,0x0f,后面是广播的名字。但是不能设定0x15的长度名字,就算编译成功,也没有广播包出来。
Last edited by ming191 on Mon Jul 05, 2021 3:54 am, edited 1 time in total.

ESP_XuLZ
Posts: 173
Joined: Fri Mar 26, 2021 6:04 am

Re: 关于广播名字的长度困惑

Postby ESP_XuLZ » Fri Jul 02, 2021 1:56 am

1、问题1原因是name 太长破坏了后面的AD结构,苹果手机判断是无效设备,你可以在安卓 NRF connect 中看到广播数据结构是不完整的,如附件中的图示
adv_data.jpg
adv_data.jpg (384.35 KiB) Viewed 8962 times
2、问题2原因可能也是这问题,你应当检查AD 结构是否完整,最后AD 结构是否超过 31 bytes, AD结构不完整出现手机扫描不到广播是正常的 ,如还有问题,你可以把 raw_adv_data[] 张贴出来

ming191
Posts: 46
Joined: Mon May 31, 2021 6:27 am

Re: 关于广播名字的长度困惑

Postby ming191 » Fri Jul 02, 2021 3:16 am

工程师,由于你的提醒,我确实发现了是由于广播包不完整导致了苹果手机无法识别。但是根据你的图,我也看了我手机的Raw data和你的图也一直,但是疑问来了,为什么这个广播包使重复的。好似两个重复的包一直发出去,能否只能发一个?

ESP_XuLZ
Posts: 173
Joined: Fri Mar 26, 2021 6:04 am

Re: 关于广播名字的长度困惑

Postby ESP_XuLZ » Fri Jul 02, 2021 3:35 am

这个广播包包括 adv_data 与scan_rsp_data, 这两个在demo 中是设置重复的,你也可以仅设置adv_data ,注释掉 scan_rsp_data及调用它的API 接口,但其他设备主动扫描时,此设备将不会返回扫描响应数据了;你可以使用手机或者两片esp32 来验证是否会有影响

ming191
Posts: 46
Joined: Mon May 31, 2021 6:27 am

Re: 关于广播名字的长度困惑

Postby ming191 » Fri Jul 02, 2021 7:54 am

工程师,我可能发现你们IDF的一个BUG,可以实验一下。因为工程师说的对,只要RAW DATA有缺失了,苹果手机就不能识别了。但是问题广播名字的长度,如果我定义一个广播名字是TRD_1122334455667788(一共20个字符),在没有定义CONFIG_SET_RAW_ADV_DATA前提下,模块发出来的RAW DATA 是有缺失的。但是如果我定义长度是TRD_11223344556677883,多一个字符3长度,发出来的包是正确的(从这点认为,和长度没有很大关系)。而且苹果手机能识别。第二,我顺便测试了一下,定义CONFIG_SET_RAW_ADV_DATA,无论20个字符,21个字符的长度也好,也是无法发出广播包的。(我额外添加了定义CONFIG_SET_RAW_ADV_DATA的RAW数组)
Attachments
4.png
4.png (25.07 KiB) Viewed 8936 times

ESP_XuLZ
Posts: 173
Joined: Fri Mar 26, 2021 6:04 am

Re: 关于广播名字的长度困惑

Postby ESP_XuLZ » Mon Jul 05, 2021 2:33 am

1、你所说的增加一个字符又能显示是因为AD结构又变的完整了,挤掉了其他的完整的AD结构
2、在raw_data 中也可以配置超过20字符name的广播数据,你可以试下
2.1 raw_data 不超过 31 个字节
2.2 AD 结构的 length 与实际 AD_DATA 的长度一致

建议你还是使用raw_data 配置广播数据

ming191
Posts: 46
Joined: Mon May 31, 2021 6:27 am

Re: 关于广播名字的长度困惑

Postby ming191 » Mon Jul 05, 2021 2:46 am

工程师,你好。其实你回复我的问题,我会第一时间回复你的。因为我长时间在线,关注这个ESP32。先感谢你的回答。
1.你说的 建议你还是使用raw_data 配置广播数据 。意思是否就是 定义了 CONFIG_SET_RAW_ADV_DATA 。
2. 你说的配置只要不多于31个字符,就可以了。但是我测试了,在定义 CONFIG_SET_RAW_ADV_DATA 前提下,只要大于20个字符的广播名字,就不起重要了。21,和22 个的字符名字我都试过了。
3. 因为项目需要,我确实需要20个字符的广播名字,我不知道该如何可以让苹果手机检测到AD包完整。

ESP_XuLZ
Posts: 173
Joined: Fri Mar 26, 2021 6:04 am

Re: 关于广播名字的长度困惑

Postby ESP_XuLZ » Mon Jul 05, 2021 2:59 am

1、是的, 最好是使用 CONFIG_SET_RAW_ADV_DATA 中配置的 广播数据
2、尝试下下面图中方法
ADV_DATA.png
ADV_DATA.png (31.34 KiB) Viewed 8843 times

ming191
Posts: 46
Joined: Mon May 31, 2021 6:27 am

Re: 关于广播名字的长度困惑

Postby ming191 » Mon Jul 05, 2021 3:53 am

非常感谢,问题已经解决,确实屏蔽这两句话之后,20个字符的广播包,苹果手机能识别而且可以连接了。

Who is online

Users browsing this forum: Google [Bot] and 53 guests