现在该部分代码正常运行,可以正常打开蓝牙进行blufi的wifi配对流程
但我发现该部分初始化操作仅可以进行一次,我如果再次调用该部分代码则会提示已经进行过初始化
我现在想要实现的目标是
1. 触发blufi配对的操作可以多次进行(我保证第一次配对结束后再调用第二次,希望第二次配对依然可以正常初始化并执行blufi的回调函数)
2. 配对完成后能完全关闭蓝牙
我想要知道:
1. 是不是下列代码中有部分初始化函数是启动后只能进行一次的(查阅文档确实发现一部分函数仅可运行一次
2. 启动后仅可进行一次的操作是否会消耗较多资源/电力
3. 完全关闭蓝牙以及重新打开蓝牙并进入blufi配对状态分别需要哪些函数
我用到的函数包括
esp_bt_controller_mem_release
esp_bt_controller_init
esp_bt_controller_enable
esp_bluedroid_init
esp_bluedroid_enable
esp_ble_gap_register_callback
esp_blufi_register_callbacks
esp_blufi_profile_init
esp_blufi_profile_deinit
是否还需要其他函数才能完成我的目标
Code: Select all
ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT));
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
ret = esp_bt_controller_init(&bt_cfg);
if (ret) {
BLUFI_ERROR("%s 初始化蓝牙控制器失败: %s\n", __func__, esp_err_to_name(ret));
return false;
}
ret = esp_bt_controller_enable(ESP_BT_MODE_BLE);
if (ret) {
BLUFI_ERROR("%s 启动蓝牙控制器失败: %s\n", __func__, esp_err_to_name(ret));
return false;
}
ret = esp_bluedroid_init();
if (ret) {
BLUFI_ERROR("%s 初始化 bluedroid 失败: %s\n", __func__, esp_err_to_name(ret));
return false;
}
ret = esp_bluedroid_enable();
if (ret) {
BLUFI_ERROR("%s 启动 bluedroid 失败: %s\n", __func__, esp_err_to_name(ret));
return false;
}
BLUFI_INFO("BD 地址: " ESP_BD_ADDR_STR "\n", ESP_BD_ADDR_HEX(esp_bt_dev_get_address()));
BLUFI_INFO("BLUFI 版本 %04x\n", esp_blufi_get_version());
ret = esp_ble_gap_register_callback(example_gap_event_handler);
if (ret) {
BLUFI_ERROR("%s gap 注册失败, error code = %x\n", __func__, ret);
return false;
}
ret = esp_blufi_register_callbacks(&example_callbacks);
if (ret) {
BLUFI_ERROR("%s blufi 注册失败, error code = %x\n", __func__, ret);
return false;
}
esp_blufi_profile_init();
EventBits_t bits = xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, pdFALSE, pdFALSE, portMAX_DELAY);
if (bits & CONNECTED_BIT) {
ESP_LOGI("BLUFI", "BluFi连接到Wi-Fi");
return true;
} else {
ESP_LOGE("BLUFI", "未知Wi-Fi连接结果");
}
esp_blufi_profile_deinit();