我们测试了以下两种场景:
答:使用连接管理器+ (SDK)monitor_fe_usb进行测试
用根据smarttag设计代码开发的扫描代码进行测试
A和B都与对话BLE USB dongle分别运行,扫描一些一直保持广告的BLE节点…
测试结果:
A:通过点击连接管理器的“扫描”按钮,每次日志窗口可以快速(即在~1秒内打印在屏幕上)报告/通过BLE广告节点打印广告数据
B:我们在gapm_adv_report_ind_handler()的第一行设置断点;
然后点击Keil中的运行按钮。
每次点击“运行”,只需要1到10秒
发布扫描的数据,并在断点处停止。)
在我们的应用程序:
-我们有以下配置扫描模式配置:
空白app_scanning(空白)
{
//创建一个内核消息开始扫描
KE_MSG_ALLOC(gapm_start_scan_cmd, TASK_GAPM, TASK_APP, gapm_start_scan_cmd);
//最大对等体连接
味精- >模式= GAP_GEN_DISCOVERY;
// msg->mode = GAP_OBSERVER_MODE;
味精- > op。代码= GAPM_SCAN_ACTIVE;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
味精- > filter_duplic = SCAN_FILT_DUPLIC_EN;
味精- >间隔= 10;/ / APP_SCAN_INTERVAL;
味精- >窗口= 5;/ / APP_SCAN_WINDOW;
//发送消息
ke_msg_send(味精);
}
Void app_configuration_func(ke_task_id_t const task_id, struct gapm_set_dev_config_cmd *cmd)
{
/ /操作选择
cmd - >操作= GAPM_SET_DEV_CONFIG;
/ /设备的作用
cmd - >角色= GAP_CENTRAL_MST;
//定义最大传输单元
cmd - > max_mtu = 160;/ / APP_CFG_MAX_MTU
}
-在gapm_cmp_evt_handler()中,我们有下面几行代码来保持扫描。
案例GAPM_SCAN_PASSIVE:
案例GAPM_SCAN_ACTIVE:
{
app_scanning ();
}
我们不知道连接管理器“boot as Central”过程是怎么回事,但测试结果是如此不同(连接管理器快速扫描节点……但我们的代码扫描节点如此慢…),请建议什么是它的主要问题,我们应该如何修复它。
谢谢你!

你好,Alex,我已经把这个交给了我们中国的本地团队来跟进你。最好的问候,JE_DIalog
还没修好…
我们进一步测试如下:
连接管理器+ CM固件扫描快速获取广告数据(每次扫描1~2s);
主机app + Monitor_fe_usb扫描得到广告数据慢(从1s~10s每次扫描)
SPS_Host Scan得到广告数据慢(从1s~10s每次扫描)。
(在测试中,我们分别将发布节点adv_interval设置为20ms和100ms,但与测试结果没有区别)
所以它查找SDK或参考设计示例软件(Monitor、SPS),扫描速度慢。对于CM来说,它是快速的。
我们需要快速扫描在我们的应用程序,所以请帮助建议我们应该做什么。
谢谢你!
已经过去一个星期了……我们所做的would like get some help here.
换句话说,我们需要一个关于如何在短时间内(比如500ms?)扫描同行广播ADV_DATA的指导…或者它是否可行?
您可以尝试更改您的扫描窗口/间隔。
扫描窗口是它实际扫描的时间,而扫描间隔是在每次扫描窗口开始之间等待的时间,即扫描间隔减去扫描窗口是每次扫描之间的睡眠时间。如果将扫描窗口设置为扫描间隔,则表示扫描时丢失报文的可能性最小。当然,这会消耗更多的电流。
一个要求是扫描窗口<=扫描间隔。
尝试将扫描窗口设置为50而不是5。
此外,发现的时间还取决于你在外围设备上的广告间隔。较低的广告间隔意味着较低的发现时间,但会消耗更多外设电池的电流。
谢谢你Joacimwe……fixed after I set interval to 1362 and window to 1320. Pls close this ticket.
下面我们做了更多的测试parameters set in the test:
广告:
-: adv_interval = 0x20;//初始化后不改变0x20的值;我们也尝试了0x40, 0x100等等。
-: cmd - > op。代码= GAPM_ADV_UNDIRECT;
cmd - > op。addr_src = GAPM_PUBLIC_ADDR;
cmd - > intv_max = adv_interval;
cmd - > intv_min = adv_interval;
cmd - > channel_map = APP_ADV_CHMAP;/ / 0 x07;
cmd - > info.host。模式= GAP_GEN_DISCOVERABLE;
扫描:
-:我们尝试了不同的窗口/间隔设置:
// msg->interval = 10;/ / APP_SCAN_INTERVAL;
// msg->窗口= 10;/ / APP_SCAN_WINDOW;
// msg->interval = 1336;/ / APP_SCAN_INTERVAL;
// msg->窗口= 1320;/ / APP_SCAN_WINDOW;
味精- >间隔= 100;/ / APP_SCAN_INTERVAL;
味精- >窗口= 100;/ / APP_SCAN_WINDOW;
-:在gapm_adv_report_ind_handler()中,我们将取消扫描;在gapm_cmp_evt_handler()中,我们重启扫描;
在大多数测试案例中(比如10次测试中有8次,我们每次都会改变adv数据,因此读取扫描数据更新),扫描可以在1秒内得到adv,但仍然需要2秒或更多的时间才能成功扫描adv数据。
我们需要中心在1秒内扫描每个外设的adv数据更新(500ms会更好),请建议我们可以尝试改进的其他方法?谢谢你!
我将感激更多的指导以改进…谢谢!
请帮助…谢谢!
这个问题仍然悬而未决。只需要工厂指导/建议,请支持。谢谢!
你好Alex,我会安排当地的人联系。BR JE_Dialog