CN / EN
CN / EN

ble_activity_start_notify_cb_register与ble_activity_end_notify_cb_register使用问题 GR551x

Mounch

2024-07-27 12:36

SDK版本:GR551x_SDK_V1.7.0

开发环境:gcc

问题描述:

这几天调试代码的时候,发现程序无线电相关的有且只有扫描的情况下, 在一个扫描窗口内会出现多个radio_event_active_start_handler、radio_event_active_end_handler 回调!

我为确保我代码的“干净”,直接去跑SDK的范例(有适当增加调试代码),但依旧会有这种情况。

但是,我今天调试,一样的代码,一样的硬件,结果却不一样了。一个扫描窗口有且只有一个radio_event_active_start_handler、radio_event_active_end_handler 回调! 这是结果是我期望的结果,我的应用也是依赖这个结果。

我想尝试复现“问题”,抓取日志找贵司咨询什么情况会出现,我好做适配,但现已无法复现了。

多补充一句:出问题的时候,并不是有且只有扫描的情况下才会出现问题,启动广播或者连接,也会出现。但是我观察广播和连接的事件优先级更高,有事件来时也会打断扫描,做完高优先级的事后恢复扫描,导致一个窗口有多个回调。但是出现问题的时候,在广播和连接事件没有来时,扫描一样会被打断,难道这里还存在其他的无线电事件在活跃?

我想得到的解答为:什么情况会出现,有且只有扫描的情况下, 在一个扫描窗口内会出现多个radio_event_active_start_handler、radio_event_active_end_handler 回调呢?


测试代码,剔除了相对应的测试代码,其中APP_LOG_INFO,是经我重新映射过的,打印数据是丢到缓存,在主循环一次性打印,确认不会占用回调时间。

void radio_event_active_start_handler(gap_activity_role_t role,uint8_t index)
{ 
 if(role == GAP_ACTIVITY_ROLE_SCAN_INIT)
 {
 APP_LOG_INFO("GAP_ACTIVITY_ROLE_SCAN_INIT - START");
 }
}

void radio_event_active_end_handler(gap_activity_role_t role,uint8_t index)
{
 if(role == GAP_ACTIVITY_ROLE_SCAN_INIT)
 {
 APP_LOG_INFO("GAP_ACTIVITY_ROLE_SCAN_INIT - END");
 }
}

ble_activity_start_notify_cb_register(radio_event_active_start_handler);
ble_activity_end_notify_cb_register(radio_event_active_end_handler);


0收藏

0赞成

zhongchengzhi

汇顶员工
2024-07-29 14:07

和客户沟通,问题暂未复现。

0条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注