如何打开蓝牙和关闭蓝牙、如可获取已经配对的蓝牙耳机设备列表

我根据example\bt\music_source 这个例子实现了连接蓝牙音箱播放SD卡里的音乐。
但是例子里只有 sifli_ble_enable(); 这样一名代码、启动蓝牙。

然后我参考bt_connection_manager.c 里的代码 调用 bt_open_bt_request(); bt_close_bt_request();
都会发生死机异常。请提供正常的开启和关闭蓝牙的接口

另外就是我想要实现菜单上显示已经配对的所有蓝牙耳机设备列表。然后选中删除设备这样的功能该用哪个API

bt_connection_manager.c 里的代码 调用 bt_open_bt_request(); bt_close_bt_request(); 麻烦贴一下你实现的代码,跟死机异常的log

我重新偿试调用 bt_open_bt_request(); 和 bt_close_bt_request(); 可以的没有死机。但是关闭蓝牙后重新打开。没有主动连上蓝牙音箱。但是关闭蓝牙音箱重新打开蓝牙音箱会自动连上。是否调用bt_open_bt_request(); 之后还需要调用什么接口才能连上。另外就是如何获取所有已经配对的设备列表。并且选中删除指定设备

int creat_bt_send_task(void)
{
    ...............................
    /// register events for bt interface
    bt_interface_register_bt_event_notify_callback(bt_app_interface_event_handle);

    // Start BT/BLE stack/profile.

    gBtStart = false;
    gBtOnOff = false;
}
void bt_on_off(bool mEn)
{
    //int err;
    if((gBtStart == false) && (mEn != false))
    {
    #ifdef ZBT
        bt_enable(NULL);
    #else
        sifli_ble_enable();
    #endif  
        gBtStart = true;
        gBtOnOff = true;
    }
    else if((gBtOnOff == false) && (mEn != false))
    {

        bt_open_bt_request();
      
        gBtOnOff = true;
    }
    else if((gBtOnOff != false) && (mEn == false))
    {

        bt_close_bt_request();

        gBtOnOff = false;
    }
}

bt_open_bt_request()和 bt_close_bt_request()这两个接口只是会关闭/打开蓝牙功能,控制本端设备能否被对端设备连接,并不会在调用bt_open_bt_request后主动发起连接
如果想要重新连接音箱要么重新搜索到在连接,要么如果本地有存储音响地址的话则可以直接调用bt_interface_conn_to_source_ext((unsigned char *)&mac, BT_PROFILE_A2DP);进行连接

1.对于要显示所有已配对的耳机,可以先挨个获取设备的配对信息,再判断是否是耳机设备,然后在菜单上显示

//添加以下接口,这个接口会返回指定idx的设备配对信息
bt_cm_dev_info_t *bt_cm_get_bonded_dev_by_idx(uint8_t idx)
{
    if (idx >= BT_CM_MAX_BOND)
    {
        LOG_I("Maximum number of pairings exceeded!!!\n");
        return NULL;
    }
    else
    {
        return &g_bt_bonded_dev.info[idx];
    }
}


//可以通过如下方式判断配对设备是否是耳机设备
bt_cm_dev_info_t *device_info = bt_cm_get_bonded_dev_by_idx(idx)
if (device_info ->link_type == BT_LINK_EARPHONE)
{
         LOG_I("Remote device is earphone type equipment\n");
}

2.删除选中设备可以调用以下接口:

  • bt_cm_delete_bonded_devs_and_linkkey(uint8_t *addr),根据地址删除指定设备的配对信息

获取到所有已配对的耳机设备后 通过
bt_addr_convert_to_general(&p_bonded_dev->info[i].bd_addr, &bd_addr_c);
得到设备的MAC址。
有接口可以通过MAC地址获取到这个设备地址对应的蓝牙广播名称吗?这样显示出来的时候才好识别

我们没有现成的接口根据地址获取搜索或者连接过的耳机的名字
可以在bt_interface_bt_event_notify(BT_NOTIFY_COMMON, BT_NOTIFY_COMMON_DISCOVER_IND, &remote_info, sizeof(bt_notify_remote_device_info_t))这个事件处理里面添加逻辑保存搜索到的耳机地址和名字等信息,后面在根据地址查找即可