扫描随机停止

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
4个帖子/ 0新
最后一篇
andrzej richert
离线
最后一次露面:12个月4天前
加入:2017-04-21 12:12
扫描随机停止

你好,
我使用DA14583作为中央(SDK 5.0.4),可以与多个外围设备同时连接,
所以扫描应该不断打开。
我通过使用参数发送消息“开始扫描”来开始扫描:

cmd-> op.code = gapm_scan_active;
cmd-> op.addr_src = gapm_public_addr;
cmd-> op.state = 0;
cmd-> op.renew_dur = 0;
cmd-> interval = user_central_conf.scan_interval;
cmd-> window = user_central_conf.scan_window;
cmd-> mode = 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分钟后......)。
HyaR由DA14583的UART一些数据阅读,具有轮询。
当主机调查更频繁时,我注意到停止扫描更频繁地更频繁。
如果我连续发送两条消息“开始扫描”(没有GAPM_CANCEL_CMD),则DA在大约2秒后重置自身(看门狗?),
所以它似乎周期性发送'开始扫描'不合适......

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

请帮忙。

设备:
PM_DIALOG.
离线
最后一次露面:1天12小时前
职员
加入:2018-02-08 11:03
嗨Andrzej Richert,

嗨Andrzej Richert,

您可以澄清您想要配置设备的模式吗?在中央或观察者模式中?从您的帖子中提到的内容,DA14583在中央模式中采用,可以同时与多个外设连接,但在“提供的代码片段中”在Observer模式下设置。请注意观察者模式永远不会超时。由于扫描程序偶尔停止,我建议您热连接调试器并在调试模式下运行它,以检查手表到期或我发生的NMI。扫描停止后,代码是否会在某个地方被粘在一起?您可以使用SmartSnippets Toolbox的Power Profiler来检查设备是否扫描。

谢谢,PM_DIALOG.

andrzej richert
离线
最后一次露面:12个月4天前
加入:2017-04-21 12:12
你好,

你好,
谢谢您的答复。
完全,我使用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,有时扫描恢复工作和PERIPHARAL可以连接。
我不想发送周期性的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-> mode = gap_gen_discovery;并重新启动扫描user_on_scanning_completed() - 扫描后停止
几个小时(3 ... 8),UART工作(我可以备注。获取绑定设备列表),但要恢复扫描我必须软复位,发送消息
(通过UART命令)GAPM_CANCEL_CMD和GAPM_START_SCAN_CMD不会还原扫描。

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

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

PM_DIALOG.
离线
最后一次露面:1天12小时前
职员
加入:2018-02-08 11:03
嗨Andrzej Richert,

嗨Andrzej Richert,

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

  • 使用cmd-> mode = 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.