随机扫描停止

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
4个职位/ 0个新
最后发表
Andrzej里歇尔
离线
最后看到:11个月,4个星期前
加入:2017-04-21个身子
随机扫描停止

你好,
我使用DA14583作为中心(SDK 5.0.4),可以同时连接多个外设,
所以扫描应该经常打开。
我通过发送一个带有参数的信息'start scan'开始扫描:

cmd - > op。代码= GAPM_SCAN_ACTIVE;
cmd-> op.addr_src = gapm_public_addr;
cmd-> op.state = 0;
cmd - > op。renew_dur = 0;
cmd - >间隔= user_central_conf.scan_interval;
cmd窗口- > = user_central_conf.scan_window;
cmd - >模式= GAP_OBSERVER_MODE;
cmd - > filt_policy = SCAN_ALLOW_ADV_ALL;
cmd - > filter_duplic = SCAN_FILT_DUPLIC_DIS;

ke_state_set (TASK_APP APP_CONNECTABLE);
ke_msg_send (cmd);

我的问题是在一段时间后停止扫描(没有adv。报告,当前消费滴)(有时在2分钟后,有时在20分钟后。,有时在40分钟后......)。
主机通过轮询从DA14583中读取一些数据。
我注意到,当主机轮询更频繁时,停止扫描在统计上更频繁。
如果我在一行中发送两个消息'start scan'(中间没有GAPM_CANCEL_CMD), DA会在大约2秒后重置自己(看门狗?)
所以,定期发送“开始扫描”似乎是不合适的……

停止扫描的原因可能是什么?
如何检查扫描是否开启?
我怎样才能解决这个问题?

请帮助。

设备:
PM_Dialog
离线
最后看到:19小时22分钟前
工作人员
加入:2018-02-08 11:03
嗨Andrzej里歇尔,

嗨Andrzej里歇尔,

请说明您想在哪种模式下配置您的设备?中央模式还是观察者模式?从你在博文中提到的,DA14583以中心模式工作,它可以同时与多个外设连接,但在提供的代码片段中设置为观察者模式。注意,观察者模式永远不会超时。由于扫描过程偶尔会停止,我建议您热连接调试器并在调试模式下运行它,以检查手表是否过期或出现NMI I。扫描一停止,代码就卡在什么地方了吗?您可以使用SmartSnippets工具箱的功率分析器来检查设备是否正在扫描。

谢谢,PM_Dialog

Andrzej里歇尔
离线
最后看到:11个月,4个星期前
加入:2017-04-21个身子
你好,

你好,
感谢您的回复。
正是,我使用SmartSnippets工具箱跟踪扫描在DA使用电流测量。
一旦扫描停止,代码似乎工作,例如,我可以通过UART命令(由ME写)发送)GAPM_CANCEL_CMD或GAPM_START_SCAN_CMD。
当扫描偶尔停止并且我发送GAPM_START_SCAN_CMD时,DA会在大约2秒后重置自己(看门狗?)
当我连续发送两次GAPM_START_SCAN_CMD时,DA也会在大约2秒后重置自己。
当扫描偶尔停止,我发送GAPM_CANCEL_CMD,下一个GAPM_START_SCAN_CMD,有时扫描恢复工作和外围设备可以连接。
我不想定期发送GAPM_CANCEL_CMD和GAPM_START_SCAN_CMD,因为这可能导致缺乏扫描。
在项目中,我无法缺乏超过数百毫秒的扫描。
当扫描偶尔停止时,不会调用回调函数(user_on_scanning_completed()或user_process_catch()…)。

设备作为中心(最多可以连接/断开几个外设。6连接,
可以保持一个外设连接期间,其他外设连接/断开,所以他应该不断扫描)。
我使用了GAP_OBSERVER_MODE,因为理论上它永远不会超时。
对于测试,我使用GAP_GEN_DISCOVERY并在每个回调user_on_scanning_completed()中重新开始扫描,但扫描仍然在一段时间后随机停止…

在调试器中,扫描随机停止后,看门狗不过期,NMI不发生。

使用cmd->模式= GAP_GEN_DISCOVERY;并在user_on_scanning_completed()中重新开始扫描-扫描在大约之后停止
几个小时(3…8),UART工作(我可以例如获得绑定设备列表),但恢复扫描我必须软重置,发送消息
(通过UART命令)GAPM_CANCEL_CMD和GAPM_START_SCAN_CMD不能恢复扫描。

目前我定期通过外部主机重置中央以恢复扫描,但它的临时解决方案,
因为在随机停止扫描的情况下会引入太长的连接延迟。
一种可行的解决方案似乎是在检测到停止后重置或重新启用扫描,
无论模式GAP_GEN_DISCOVERY还是GAP_OBSERVER_MODE。

是否有任何方法可以检查扫描是否已启用?

PM_Dialog
离线
最后看到:19小时22分钟前
工作人员
加入:2018-02-08 11:03
嗨Andrzej里歇尔,

嗨Andrzej里歇尔,

您提到,一旦扫描过程完成,就会触发任何回调函数。您是否在user_callback_config.h文件中注册了在app_on_canning_completed项目的app_on_canning_completed项目中的回调函数?当扫描停止时,代码会在哪里?

  • 使用cmd->模式= GAP_GEN_DISCOVERY;并在user_on_scanning_completed()中重新开始扫描-扫描在大约之后停止几个小时(3…8),UART工作(我可以例如获得绑定设备列表),但恢复扫描我必须软重置,发送消息(通过UART命令)GAPM_CANCEL_CMD和GAPM_START_SCAN_CMD不能恢复扫描。

如果我正确地理解,当触发user_on_scanning_completed()回调时,您重新启动扫描,但扫描永远不会启动?您是否在user_on_scanning_Completed()中添加了一个断点?

谢谢,PM_Dialog