1、新增了蓝牙连接成功后发送蓝牙的MAC地址
This commit is contained in:
parent
94067d4adc
commit
1a48e387a8
@ -133,7 +133,8 @@ BluetoothProvisioning::BluetoothProvisioning()
|
|||||||
, initialized_(false)
|
, initialized_(false)
|
||||||
, delayed_disconnect_(false)
|
, delayed_disconnect_(false)
|
||||||
, wifi_connecting_(false)
|
, wifi_connecting_(false)
|
||||||
, mac_address_sent_(false) {
|
, mac_address_sent_(false)
|
||||||
|
, ble_mac_sent_(false) {
|
||||||
|
|
||||||
wifi_credentials_.ssid.clear();
|
wifi_credentials_.ssid.clear();
|
||||||
wifi_credentials_.password.clear();
|
wifi_credentials_.password.clear();
|
||||||
@ -713,6 +714,11 @@ void BluetoothProvisioning::HandleGattsEvent(esp_gatts_cb_event_t event,
|
|||||||
uint16_t cccd_value = param->write.value[0] | (param->write.value[1] << 8);
|
uint16_t cccd_value = param->write.value[0] | (param->write.value[1] << 8);
|
||||||
notify_enabled_ = (cccd_value == 0x0001);
|
notify_enabled_ = (cccd_value == 0x0001);
|
||||||
ESP_LOGI(TAG, "NOTIFY %s", notify_enabled_ ? "已启用" : "已禁用");
|
ESP_LOGI(TAG, "NOTIFY %s", notify_enabled_ ? "已启用" : "已禁用");
|
||||||
|
|
||||||
|
// NOTIFY启用后立即发送BLE MAC地址,确保iOS/Android都能获取
|
||||||
|
if (notify_enabled_) {
|
||||||
|
SendBleMacAddress();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (param->write.need_rsp) {
|
if (param->write.need_rsp) {
|
||||||
@ -1092,9 +1098,54 @@ bool BluetoothProvisioning::SendMacAddressReliably() {
|
|||||||
|
|
||||||
void BluetoothProvisioning::ResetMacSendingState() {
|
void BluetoothProvisioning::ResetMacSendingState() {
|
||||||
mac_address_sent_ = false;
|
mac_address_sent_ = false;
|
||||||
|
ble_mac_sent_ = false;
|
||||||
ESP_LOGI(TAG, "MAC地址发送状态已重置");
|
ESP_LOGI(TAG, "MAC地址发送状态已重置");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// SendBleMacAddress — 通过 GATT NOTIFY 发送蓝牙MAC地址
|
||||||
|
// 在客户端启用NOTIFY后立即调用,确保iOS/Android都能获取BLE MAC
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
bool BluetoothProvisioning::SendBleMacAddress() {
|
||||||
|
if (!client_connected_ || !notify_enabled_) {
|
||||||
|
ESP_LOGW(TAG, "无法发送BLE MAC: connected=%d, notify=%d",
|
||||||
|
client_connected_, notify_enabled_);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ble_mac_sent_) {
|
||||||
|
ESP_LOGI(TAG, "BLE MAC已发送过,跳过");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint8_t* ble_addr = esp_bt_dev_get_address();
|
||||||
|
if (!ble_addr) {
|
||||||
|
ESP_LOGE(TAG, "获取BLE MAC地址失败");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建数据包: 0x84 + "BLE_MAC:xx:xx:xx:xx:xx:xx"
|
||||||
|
char mac_data[32];
|
||||||
|
snprintf(mac_data, sizeof(mac_data), "BLE_MAC:%02x:%02x:%02x:%02x:%02x:%02x",
|
||||||
|
ble_addr[0], ble_addr[1], ble_addr[2],
|
||||||
|
ble_addr[3], ble_addr[4], ble_addr[5]);
|
||||||
|
|
||||||
|
uint8_t buf[1 + 32];
|
||||||
|
buf[0] = PROV_RESP_CUSTOM_DATA;
|
||||||
|
uint8_t data_len = strlen(mac_data);
|
||||||
|
memcpy(&buf[1], mac_data, data_len);
|
||||||
|
|
||||||
|
if (SendNotify(buf, 1 + data_len)) {
|
||||||
|
ble_mac_sent_ = true;
|
||||||
|
ESP_LOGI(TAG, "✅ BLE MAC地址发送成功: %s", mac_data);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ESP_LOGW(TAG, "❌ BLE MAC地址发送失败");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// 状态管理
|
// 状态管理
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|||||||
@ -126,6 +126,7 @@ public:
|
|||||||
void ReportWiFiStatus(bool success, uint8_t reason = 0);
|
void ReportWiFiStatus(bool success, uint8_t reason = 0);
|
||||||
void SendWiFiList(const wifi_ap_record_t* ap_list, uint16_t ap_count);
|
void SendWiFiList(const wifi_ap_record_t* ap_list, uint16_t ap_count);
|
||||||
bool SendMacAddressReliably();
|
bool SendMacAddressReliably();
|
||||||
|
bool SendBleMacAddress();
|
||||||
void ResetMacSendingState();
|
void ResetMacSendingState();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -137,6 +138,7 @@ private:
|
|||||||
bool delayed_disconnect_;
|
bool delayed_disconnect_;
|
||||||
bool wifi_connecting_;
|
bool wifi_connecting_;
|
||||||
bool mac_address_sent_;
|
bool mac_address_sent_;
|
||||||
|
bool ble_mac_sent_;
|
||||||
|
|
||||||
static BluetoothProvisioning* instance_;
|
static BluetoothProvisioning* instance_;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user