6621X复位协议栈

yangzh · 102次点击 · 3个月前

      随着应用增加越来越多,功能越来越复杂,经常开蓝牙、关蓝牙的操作,会出现没有广播的异常情况,针对此情况,可以使用复位协议栈的方式,这里介绍复位协议栈的方式。

1)app.c文件函数做修改

void appm_reg_svc_itf(void)
{
    static bool registered = false;
   
    if(registered)     //只调用1次
        return;

    struct prf_itf_pair itf_pair[] = {
        #if BLE_APP_SIMPLE_SERVER
        { TASK_ID_SIMPLE_SERVER, simple_server_prf_itf_get() },
        #endif
        #if BLE_APP_WECHAT
        { TASK_ID_WECHAT, wechat_prf_itf_get() },
        #endif // BLE_APP_WECHAT
        #if (BLE_APP_DIS)
        { TASK_ID_DISS, diss_prf_itf_get() },
        #endif //(BLE_APP_DIS)
        #if (BLE_APP_BATT)
        { TASK_ID_BASS, bass_prf_itf_get() },
        #endif //(BLE_APP_BATT)
        #if (BLE_APP_HID)
        { TASK_ID_HOGPD, hogpd_prf_itf_get() },
        #endif //(BLE_APP_HID)
        #if (BLE_TSPP_SERVER)
        { TASK_ID_TSPPS, tspp_server_prf_itf_get() },
        #endif //(BLE_TSPP_SERVER)
        #if (BLE_APP_ANCSC)
        { TASK_ID_ANCSC, ancsc_prf_itf_get() },
        #endif //(BLE_APP_ANCSC)
        #if (BLE_APP_NORDIC_DFU)
        { TASK_ID_NORDIC_DFU, nordic_dfu_prf_itf_get() },
        #endif //(BLE_APP_NORDIC_DFU)
               
                { TASK_ID_ONMICRO_DFU, onmicro_dfu_prf_itf_get() },
    };
    prf_itf_register(itf_pair, sizeof(itf_pair)/sizeof(itf_pair[0]));
       
    registered = true;
   
}


2)定时测试复位协议栈

static void simple_timer_handler(co_timer_t *timer, void *param)
{
    //sysdump();                 
   appm_init();          

   log_debug("ble reset complete\n");

}


3)如果是增加了dfu的功能,在app_onmicro_dfu.c修改如下:

void app_onmicro_dfu_add_service(void)
{
//    struct onmicro_dfu_db_cfg* db_cfg;

//    struct prf_itf_pair itf_pair = {
//        TASK_ID_ONMICRO_DFU, onmicro_dfu_prf_itf_get(),
//    };
//    prf_itf_register(&itf_pair, 1);
   
    // Allocate the CREATE_DB_REQ
    struct gapm_profile_task_add_cmd *req = KE_MSG_ALLOC_DYN(GAPM_PROFILE_TASK_ADD_CMD,
                                                  TASK_GAPM, TASK_APP,
                                                  gapm_profile_task_add_cmd, 0);
    // Fill message
    req->operation   = GAPM_PROFILE_TASK_ADD;
    req->sec_lvl     = PERM(SVC_AUTH, NO_AUTH);
    req->prf_task_id = TASK_ID_ONMICRO_DFU;
    req->app_task    = TASK_APP;
    req->start_hdl   = 0;

    // Send the message
    ke_msg_send(req);
}


按照此方式,可以让协议栈复位,蓝牙状态恢复到广播状态

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

请先登录网站