6621Cx/Px/Ax BLE 活动事件监测未例

wen sir · 159次点击 · 11个月前

可以辅助实现以下

(1) 监测蓝牙收发事件,代码可以根据事件执行一些应用层处理,如计数,闪灯,评估连接活跃情况等。

(2) 可以监测是否出现长时间的没有蓝牙收发活动。 如因为莫名原因出现的异常情况。

  (3)    以下代码只是参考作用。 需要根据自己要求做一些修改。

步骤1-添加如下参考代码。

//(1)step 1

static uint32_t ble_rx_event_flag = 0;//BLE  Rx event 标志,有活动时清0,否则定时累加
/**
 * @brief  清0,ble_rx_event_flag 标志
 * @param ongoing2  也可以做其它,如闪灯,指示蓝牙活动情况
 */
void rwip_bb_frame_ongoing_new(uint32 t ongoing2)
{
    if (ongoing2)
    {
        //判断这个位置
        ble_rx_event_flag = 0; // Clear flag counter
    }
}

/**
 * @brief  定时检查 ble_rx_event_flag 标记,
 *
 */
void Second_timer_flag_checker(void)
{
    // TIMEOUT_N 的设置,需要结合Interval和Lanency来设置适合值,来判断多久才是未有收到数据。
    #define TIMEOUT_N  (7)
    /*
    ble_rx_event_flag 每隔1秒增加一下,
    如果超过 TIMEOUT_N  未被清0, 表示长时间未有接收到数据了。
    */
    if ((++ble_rx_event_flag) >= TIMEOUT_N) /* && (Power_state == 1) */)
    {
        // 这里用户可以选择做一些应对,如开启广播,断开连接,或者重启等
        pmu_force_reboot(); //此处示例重启
    }
}

/**
 * @brief 修改的蓝牙中断函数,需要替换启动文件中的 BT_IROHandler
 * 最好定义为RAM执行的代码
 */
void BT_IRQHandler_new(void)
{
    extern void BT_IRQHandler(void);
    uint32_t ongoing1, ongoing2;
    ongoing1 = rwip_env.prevent_sleep & RW_BB_FRAME_ONGOING;
    BT_IROHandler(); //默认的蓝牙中断处理函数
    ongoing2 = rwip_env.prevent_sleep & RW_BB_FRAME_ONGOING;
    if (ongoing1 != ongoing2) //表示蓝牙事件执行完,不再阻止睡眠,蓝牙Rx活动正常
    {
        rwip_bb_frame_ongoing_new(ongoing2);    //清标志,或者加闪灯等操作都行
    }
}


步骤2-在启动文件代码中修改


//(2)工程启动文件中, 所有和BT_IRQHandler 相关的,替换为 BT_IRQHandler_new
//如: startup_hs6621_flash.s

..........
; External Interrupts
DCD     BT_IRQHandler_new         ; 0 BT_IRQHandler
DCD     BT_OSCEN_IRQHandler       ; 1
DCD     DMA_IRQHandler            ; 2
..........


ble_rx_event_recap-202312057417.c
被收藏 0  ∙  0 赞  
加入收藏
点赞
0 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站