diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index e3e8f69..f1dbfbc 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -354,10 +354,9 @@ menu "蓝牙配网 (Bluetooth Provisioning)" default y select BT_ENABLED select BLUEDROID_ENABLED - select BT_BLUFI_ENABLE help 启用蓝牙配网功能,允许通过蓝牙BLE连接配置WiFi网络。 - 需要ESP-IDF的蓝牙和BLUFI组件支持。 + 使用自定义 GATT Server 实现,不依赖 BluFi 组件。 config BLUETOOTH_PROVISIONING_SECURITY bool "启用安全模式" diff --git a/main/bluetooth_provisioning_config.h b/main/bluetooth_provisioning_config.h index 941ac6e..053712b 100644 --- a/main/bluetooth_provisioning_config.h +++ b/main/bluetooth_provisioning_config.h @@ -196,9 +196,7 @@ extern "C" { #warning "蓝牙配网需要启用CONFIG_BLUEDROID_ENABLED" #endif -#ifndef CONFIG_BT_BLUFI_ENABLE -#warning "蓝牙配网需要启用CONFIG_BT_BLUFI_ENABLE" -#endif +// BluFi 组件未使用 — 配网采用自定义 GATT Server 实现 #ifndef CONFIG_ESP32_WIFI_ENABLED #warning "蓝牙配网需要启用WiFi功能" diff --git a/main/dzbj/dzbj_ble.c b/main/dzbj/dzbj_ble.c index 7086e41..1b79f30 100644 --- a/main/dzbj/dzbj_ble.c +++ b/main/dzbj/dzbj_ble.c @@ -267,6 +267,13 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par param->update_conn_params.latency, param->update_conn_params.timeout); break; + case ESP_GAP_BLE_PHY_UPDATE_COMPLETE_EVT: + ESP_LOGI(CONN_TAG, "PHY update, status %d, tx_phy %d, rx_phy %d", + param->phy_update.status, + param->phy_update.tx_phy, + param->phy_update.rx_phy); + // tx_phy/rx_phy: 1=1M, 2=2M, 3=Coded + break; default: break; } @@ -397,11 +404,27 @@ static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_ ESP_LOGI(CONN_TAG, "Connected, conn_id %u, remote "ESP_BD_ADDR_STR"", param->connect.conn_id, ESP_BD_ADDR_HEX(param->connect.remote_bda)); esp_ble_gap_update_conn_params(&conn_params); + // 请求 2M PHY 提升传输速度(对端不支持时自动回退 1M,不影响兼容性) + esp_ble_gap_set_preferred_phy(param->connect.remote_bda, + ESP_BLE_GAP_NO_PREFER_TRANSMIT_PHY | ESP_BLE_GAP_NO_PREFER_RECEIVE_PHY, + ESP_BLE_GAP_PHY_2M_PREF_MASK, + ESP_BLE_GAP_PHY_2M_PREF_MASK, + ESP_BLE_GAP_PHY_OPTIONS_NO_PREF); break; } case ESP_GATTS_DISCONNECT_EVT: ESP_LOGI(CONN_TAG, "Disconnected, remote "ESP_BD_ADDR_STR", reason 0x%02x", ESP_BD_ADDR_HEX(param->disconnect.remote_bda), param->disconnect.reason); + // 清理未完成的传输,防止内存泄漏 + if (SendStatus.isSend) { + ESP_LOGW(CONN_TAG, "传输中断,已接收 %d/%d 字节", + (int)SendStatus.port, (int)firstMeg.len); + SendStatus.isSend = false; + SendStatus.port = 0; + if (img_data) { free(img_data); img_data = NULL; } + if (filepath) { free(filepath); filepath = NULL; } + if (file_img) { fclose(file_img); file_img = NULL; } + } esp_ble_gap_start_advertising(&adv_params); break; default: diff --git a/sdkconfig b/sdkconfig index f575e23..7d4e97d 100644 --- a/sdkconfig +++ b/sdkconfig @@ -829,7 +829,7 @@ CONFIG_BT_BLUEDROID_ESP_COEX_VSC=y CONFIG_BT_BLE_ENABLED=y CONFIG_BT_GATTS_ENABLE=y # CONFIG_BT_GATTS_PPCP_CHAR_GAP is not set -CONFIG_BT_BLE_BLUFI_ENABLE=y +# CONFIG_BT_BLE_BLUFI_ENABLE is not set CONFIG_BT_GATT_MAX_SR_PROFILES=8 CONFIG_BT_GATT_MAX_SR_ATTRIBUTES=100 # CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set @@ -1032,7 +1032,12 @@ CONFIG_BT_SMP_MAX_BONDS=15 # CONFIG_BT_BLE_ACT_SCAN_REP_ADV_SCAN is not set CONFIG_BT_MAX_DEVICE_NAME_LEN=32 CONFIG_BT_BLE_RPA_TIMEOUT=900 -# CONFIG_BT_BLE_50_FEATURES_SUPPORTED is not set +CONFIG_BT_BLE_50_FEATURES_SUPPORTED=y +CONFIG_BT_BLE_50_EXTEND_ADV_EN=y +CONFIG_BT_BLE_50_PERIODIC_ADV_EN=y +CONFIG_BT_BLE_50_EXTEND_SCAN_EN=y +CONFIG_BT_BLE_50_EXTEND_SYNC_EN=y +CONFIG_BT_BLE_50_DTM_TEST_EN=y CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y CONFIG_BT_BLE_42_DTM_TEST_EN=y CONFIG_BT_BLE_42_ADV_EN=y diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 6ea1f6a..771eb17 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -163,12 +163,13 @@ CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=n CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY=n CONFIG_BT_RESERVE_DRAM=0x10000 -# BluFi Configuration -CONFIG_BT_BLUFI_ENABLED=y -CONFIG_BT_BLE_BLUFI_ENABLE=y -# Disable BLE 5.0 features for BluFi compatibility -CONFIG_BT_BLE_50_FEATURES_SUPPORTED=n -CONFIG_BT_BLUFI_MAX_CONN=1 +# BluFi 未被代码使用(两种模式均用自定义 GATT Server),关闭以兼容 BLE 5.0 +CONFIG_BT_BLUFI_ENABLED=n +CONFIG_BT_BLE_BLUFI_ENABLE=n +# BLE 5.0 启用 2M PHY 支持(图传速度翻倍) +CONFIG_BT_BLE_50_FEATURES_SUPPORTED=y +# 同时保留 BLE 4.2 legacy advertising(两种模式的广播和 GATT 都依赖) +CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y # Bluetooth and WiFi Coexistence CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y diff --git a/sdkconfig.defaults.prod生产环境 b/sdkconfig.defaults.prod生产环境 index 34e8e28..f197a88 100644 --- a/sdkconfig.defaults.prod生产环境 +++ b/sdkconfig.defaults.prod生产环境 @@ -151,12 +151,13 @@ CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=n CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY=n CONFIG_BT_RESERVE_DRAM=0x10000 -# BluFi Configuration -CONFIG_BT_BLUFI_ENABLED=y -CONFIG_BT_BLE_BLUFI_ENABLE=y -# Disable BLE 5.0 features for BluFi compatibility -CONFIG_BT_BLE_50_FEATURES_SUPPORTED=n -CONFIG_BT_BLUFI_MAX_CONN=1 +# BluFi 未被代码使用(两种模式均用自定义 GATT Server),关闭以兼容 BLE 5.0 +CONFIG_BT_BLUFI_ENABLED=n +CONFIG_BT_BLE_BLUFI_ENABLE=n +# BLE 5.0 启用 2M PHY 支持(图传速度翻倍) +CONFIG_BT_BLE_50_FEATURES_SUPPORTED=y +# 同时保留 BLE 4.2 legacy advertising(两种模式的广播和 GATT 都依赖) +CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y # Bluetooth and WiFi Coexistence CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y