GAPSERVER_MODE中的中央扫描停止工作

5个帖子/ 0新
最后一篇
Vadym.
离线
最后一次露面:1年4个月前
加入:2015-08-13 08:28
GAPSERVER_MODE中的中央扫描停止工作

嗨对话支持。

我使用SDK 5.0.3对于DA14580设备。设备在中央扫描模式下工作,应报告所有广告消息。设备始终处于运行模式,不会以任何睡眠模式进入。

经过一段时间,应用程序停止接收广告报告。
我使用IO切换为每份报告来确定这种情况。我并不成功地找到麻烦的原因,因为任何断点或调试暂停原因会恢复正常操作。
这个问题的重要原因 - 当前任务的缺失中断。
当我使用空手柄计时器-这修复了问题。
我发现了同样的事情我想:
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。

你能帮我了解情况吗?

报告函数是:
Void app_adv_report_ind_func(struct gapm_adv_report_ind const *param)
{
gpio_setactive(Orange_led_port,Orange_led_pin);

__nop();
__nop();
__nop();
__nop();
gpio_setinactive(Orange_led_port,Orange_led_pin);
返回;
}

扫描参数是:

static const struct scan_configuration user_scan_conf = {
///操作代码。
.code = gapm_scan_passive,
///自己的BD地址源
.ddr_src = gapm_public_addr,
//扫描间隔
.Interval = app_scan_time_window_ms,
//扫描窗口大小
.window = APP_SCAN_TIME_WINDOW_MS,
///扫描模式
.mode = gap_observer_mode,
///扫描过滤策略
.filt_policy = scan_allow_adv_all,
///扫描重复过滤策略
.filter_duplic = SCAN_FILT_DUPLIC_DIS
};

设备:
mt_dialog.
离线
最后一次露面:3个月4周前
职员
加入:2015-06-08 11:34
嗨Vadym,

嗨Vadym,

首先,您不必从Void函数返回,除非您在观察者模式下扫描,否则除非您取消操作扫描不会停止(所以检查您是否正在取消扫描)。如果您获得广告报告,请您确定这一点,用于检查LED切换吗?我问因为眨眼会发生得太快,因为看到任何东西,你可以检查你是否通过打印指示来检查广告迹象(确保它非常短,因为自打印太多的数据可能导致由于过多的内存而导致复位分配,因为您也使用滤波器进行了打印禁用复制品),如果您有Pro Dev套件,则可以检查设备是否扫描,并且您可以将Arch_set_pxact_gpio()函数放在.app_on_adv_report_ind回调中并检查光标是否检查出现在电力分析器上。还要确保您尝试跟踪的任何设备都确实是广告。

我不知道你用的是哪种定时器,这个问题已经解决了,如果你能给我一些额外的细节,也许我就能明白是怎么回事了。

谢谢mt_dialog.

Vadym.
离线
最后一次露面:1年4个月前
加入:2015-08-13 08:28
亲爱的支持你好。

亲爱的支持你好。

根据空白的回报:你绝对是正确的。它仍然来自真实的项目代码,它不应干扰函数执行。
2.根据LED眨眼,您也不眨眼。我不使用真实的LED,但是连接到引脚的范围。如果您注意到,我不抱怨它根本不起作用。
我没有一个专业的开发套件。
我在我的空间中绝对有至少5-10个BLE设备,每个〜100ms都会广告。
5.我没有看到我使用gapm_reset_cmd或gapm_cancel_cmd。添加定时器后,设备不会停止操作。
6.我用了空的定时器。有了计时器,设备就不会停下来接收广告报告。
我还注意到,当接收挂起时,我在UART中询问一些东西(在实际项目中,我有UART通信,例如keepalive命令),设备返回正常操作。添加任何断点代码也返回设备的正常操作-这是非常困难的调试,这是一个原因,我使用IO来理解发生了什么。

我用了空的定时器。当我使用计时器时,设备不会停止接收广告报告。
使用的计时器:
int app_led_indication_handler(ke_msg_id_t const msgid,
const struct app_led_indication_evt * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
ke_timer_set (APP_LED_INDICATION_TIMER TASK_APP 1000);
return(ke_msg_consumed);
}

关于,Vadym。

Vadym.
离线
最后一次露面:1年4个月前
加入:2015-08-13 08:28
另外,我错了

在额外时,我错误地按下网站按钮“接受此答案。如果您发现答案有用,请单击此链接”。
现在,我无法取消此操作。通常,有办法取消操作或确认问题。
谢谢。

mt_dialog.
离线
最后一次露面:3个月4周前
职员
加入:2015-06-08 11:34
嗨Vadym,

嗨Vadym,

对不起,无法撤消接受答案。

关于你的问题,我无法找到任何关系的事实,你有一个空的计时器,这可以防止设备停止报告广告字符串扫描,似乎有点奇怪,即使设备停止扫描在某种程度上和定时器达到唤醒它,它应该触发一个功能,以启动设备重新开始扫描,你有其他设备要测试吗?至少在我这边,我可以测试观察者模式,我没有看到它停止(当你看到设备不再报告时有时间限制吗?例如特定的秒、分钟甚至小时?)如果你看到弗兰克-威廉姆斯停止报告广告字符串,我会怀疑设备由于某种原因停止扫描,因为你没有专业工具为了附加智能片段(这将帮助很多调试这样的),我将检查该设备是否扫描,为了做到这一点,你可以切换GPIO每次你有一个RX中断,所以通过应用下面的代码片段,你将能够跟踪BLE扫描的每个结束:

uint8_t app_last_ble_event;

枚举arch_main_loop_callback_ret user_on_ble_powered(void)
{
uint8_t temp_last_ble_event;

temp_last_ble_event = arch_last_rwble_evt_get();

if(app_last_ble_event!= temp_last_ble_event)
{

app_last_ble_event = temp_last_ble_event;
if(app_last_ble_event == ble_evt_end)
arch_set_pxact_gpio ();
}

返回GOTO_SLEEP;
}

还跟踪app_on_scanning_complete回调并检查是否有某些点调用。

谢谢mt_dialog.