尊敬的工程师,你好。我在测试 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.
工程师,我可能发现你们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
1、你所说的增加一个字符又能显示是因为AD结构又变的完整了,挤掉了其他的完整的AD结构
2、在raw_data 中也可以配置超过20字符name的广播数据,你可以试下
2.1 raw_data 不超过 31 个字节
2.2 AD 结构的 length 与实际 AD_DATA 的长度一致
建议你还是使用raw_data 配置广播数据
工程师,你好。其实你回复我的问题,我会第一时间回复你的。因为我长时间在线,关注这个ESP32。先感谢你的回答。
1.你说的 建议你还是使用raw_data 配置广播数据 。意思是否就是 定义了 CONFIG_SET_RAW_ADV_DATA 。
2. 你说的配置只要不多于31个字符,就可以了。但是我测试了,在定义 CONFIG_SET_RAW_ADV_DATA 前提下,只要大于20个字符的广播名字,就不起重要了。21,和22 个的字符名字我都试过了。
3. 因为项目需要,我确实需要20个字符的广播名字,我不知道该如何可以让苹果手机检测到AD包完整。