/*-------------------------------*/ 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(¶m); .... 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: */ |