你好,
我使用DA14583作为中央(SDK 5.0.4),可以与多个外围设备同时连接,
所以扫描应该不断打开。
我通过使用参数发送消息“开始扫描”来开始扫描:
cmd-> op.code = gapm_scan_active;
cmd - > op。addr_src = GAPM_PUBLIC_ADDR;
cmd - > op。国家= 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);
我的问题是停止扫描(没有ad .报告,当前消费下降)在中心后一段时间(有时2分钟后,有时20分钟后,有时40分钟....)。
HyaR由DA14583的UART一些数据阅读,具有轮询。
当主机调查更频繁时,我注意到停止扫描更频繁地更频繁。
如果我连续发送两条消息“开始扫描”(没有GAPM_CANCEL_CMD),则DA在大约2秒后重置自身(看门狗?),
所以它似乎周期性发送'开始扫描'不合适......
什么可能是停止扫描的原因?
如何检查扫描是否已接听?
我该如何解决这个问题?
请帮忙。
设备:
嗨Andrzej Richert,
您可以澄清您想要配置设备的模式吗?在中央或观察者模式中?从您的帖子中提到的内容,DA14583在中央模式中采用,可以同时与多个外设连接,但在“提供的代码片段中”在Observer模式下设置。请注意观察者模式永远不会超时。由于扫描程序偶尔停止,我建议您热连接调试器并在调试模式下运行它,以检查手表到期或我发生的NMI。扫描停止后,代码是否会在某个地方被粘在一起?您可以使用SmartSnippets Toolbox的Power Profiler来检查设备是否扫描。
谢谢,PM_DIALOG.
你好,
谢谢您的答复。
完全,我使用SmartSnippets工具箱来跟踪DA中的扫描,使用当前测量。
一旦扫描停止,代码似乎工作,例如,我可以通过UART命令(由我写)发送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->模式= 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。
是否有办法检查是否启用了扫描?
嗨Andrzej Richert,
您提到,扫描过程一完成,就不会触发回调函数。您是否在user_callback_config.h文件中的user_app_on_scanning_completed结构中的app_on_scanning_completed项中注册了回调函数?扫描停止后,代码去了哪里?
如果我理解正确,当在user_on_scanning_completed()回调被触发时,您重新开始扫描,但是扫描从来没有开始?您是否在user_on_scanning_completed()中添加了一个断点?
谢谢,PM_DIALOG.