6626 BLE活动事件监听处理(adv/connect)

wen sir · 211次点击 · 6个月前

/*-------------------------------*/

uint32_t rf_inActive_timeout = 0;
evt_timer_t rf_monitor_timer;
#define RF_inactive_timeout_Limit   (30*1000) //ms
#define T_INTERVAL  (5000)  //ms
/**
 * 每次蓝牙活动,都会调用此函数。 如果长时间未调用,除非是用户主动 停止广播或者 RF出现了异常
 *
 */
static void bb_frame_ongoing_handler(void)
{
    rf_inActive_timeout = 0; //每次RF活动,都清0此值
}
/**
 * BLE初始化后,在RF中调用
 *
 */
static void rf_monitor_timer_handle(evt_timer_t *timer, void *param)
{
    rf_inActive_timeout += T_INTERVAL; //每次+5秒
    if (rf_inActive_timeout >= RF_inactive_timeout_Limit)
    {
        //
        OM_LOG_DEBUG("!!! RF Inactive over %s second", RF_inactive_timeout_Limit / 1000);
        //此处可添加异常处理,要根据不同工作状态,做不同的策略。如睡眠/关机,就不要处理
    }
    else
    {
        OM_LOG_DEBUG("RF active ok");
        //这里可以添加用户操作
        //如闪一下灯,
    }
}
/**
 * @brief rf_monitor_init() 在main函数中调用
 *
 */
void rf_monitor_init(void)
{
    obc_bb_frame_ongoing_callback_register(bb_frame_ongoing_handler, true); //使能bb_frame_ongoing_handler事件
    evt_timer_set(&rf_monitor_timer, T_INTERVAL, EVT_TIMER_REPEAT, rf_monitor_timer_handle, NULL);
}

void main(void)
{
    ....
    ....
    ....
    omble_init(&param);
    ....
    rf_monitor_init();
    while (1)
    {
    }
}

/* 测试 Log
[10:52:52.312]Rx:
[10:52:53.320]Rx:RF active ok
[10:52:54.312]Rx:
[10:52:56.311]Rx:
[10:52:58.312]Rx:RF active ok
[10:53:00.312]Rx:
[10:53:02.311]Rx:
[10:53:03.320]Rx:RF active ok
[10:53:04.312]Rx:
[10:53:06.312]Rx:
[10:53:08.312]Rx:RF active ok
[10:53:10.312]Rx:
[10:53:12.313]Rx:
[10:53:13.321]Rx:RF active ok
[10:53:14.312]Rx:
[10:53:16.313]Rx:
[10:53:18.312]Rx:!!! RF Inactive over second
[10:53:20.312]Rx:
[10:53:22.312]Rx:
[10:53:23.320]Rx:!!! RF Inactive over second
[10:53:24.312]Rx:
*/


RF 活动监测代码-202405175636.c
被收藏 0  ∙  0 赞  
加入收藏
点赞
0 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站