嗨对话框支持。
我使用SDK 5.0.3的DA14580设备..设备工作在中央扫描模式,应该报告所有的广告消息。设备始终处于运行模式,不进入任何睡眠模式。
一段时间后,申请停止接收广告报告。
我对每个报告使用IO toggle来确定这种情况。我没有成功找到故障的原因,因为任何断点或调试暂停都会导致恢复正常运行。
导致此问题的重要原因是当前任务没有中断。
当我使用带有空句柄的计时器时 - 这会修复问题。
我也发现了同样的东西
https://support.dialog-semicondiondiondum/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地址源
.addr_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.
};
嗨Vadym,
首先,你不需要从一个void函数返回,因为你在观察者模式下扫描,除非你取消了操作,否则扫描不会停止(所以检查你是否在某些点取消了扫描)。如果你得到的广告报告或没有,你决定这检查led开关?我问是因为闪烁会发生太快看到任何东西,然而,你可以检查你是否得到广告指示,无论是通过打印指示(确保它相当短,因为打印太多的数据可能会导致重置,由于过多的内存分配,因为你也印刷的过滤重复禁用),如果你有一个专业开发工具可以检查该设备是否扫描,你可以把arch_set_pxact_gpio .app_on_adv_report_ind回调()函数,检查如果光标出现在电源分析器。另外,无论你试图追踪什么设备,都要确保它们确实是广告。
我不明白你使用了什么样的计时器,问题是固定的,如果你能提供一些额外的细节,我将能够理解发生了什么。
由于MT_dialog
你好亲爱的支持。
1.从虚空归来:你是完全正确的。它仍然来自实际的项目代码,它不应该干涉函数的执行。
2.根据LED的闪烁你也绝对正确。我不使用真正的LED,而是一个连接到引脚的scope。如果你注意到,我并没有抱怨它根本不起作用。
3.我没有专业开发工具包。
4.我的空间里至少有5-10台BLE设备每100毫秒做一次广告。
5.我没有看到我使用GAPM_RESET_CMD或GAPM_CANCEL_CMD。添加定时器后,设备不停止运行。
我用空体使用计时器。使用计时器,设备不会停止接收广告报告。
我还注意到,当接收挂起时,我在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);
返回(KE_MSG_CONSUMED);
}
问候,Vadym。
另外,我错误地按下了网站按钮“接受这个答案”。如果你觉得答案有用,请点击这个链接。
现在,我不能取消这次手术。通常,有办法取消操作或确认问题。
谢谢。
嗨Vadym,
抱歉,没有办法撤销接受的答案。
关于您的问题,我无法找到您有一个空计时器的事实之间的任何关系,这可以防止设备从停止报告被扫描的广告字符串,这似乎有点奇怪,即使设备停止扫描一些点和计时器当它命中时醒来,它应该触发一个函数才能启动设备再次启动扫描,您是否有任何其他设备进行测试?至少在我的一边,我可以测试观察者模式,我没有看到它停止(当您看到设备未重新报告时是否有时间限制?例如,秒或几分钟甚至几小时?)。如果您发现FW停止报告广告字符串,我会怀疑设备出于某种原因它停止扫描,因为您没有Pro套件,以便连接智能片段(这将有助于调试这样的事情),我会检查设备是否扫描,以便每次都有一个Rx中断时可以切换GPIO,所以通过应用下面的片段,您将能够跟踪BLE扫描的每个结束:
uint8_t app_last_ble_event;
enum arch_main_loop_callback_ret user_on_ble_powered(空白)
{
uint8_t temp_last_ble_event;
temp_last_ble_event = arch_last_rwble_evt_get ();
如果(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