1
0
mirror of https://github.com/esphome/esphome.git synced 2025-11-16 06:45:48 +00:00
This commit is contained in:
J. Nick Koston
2025-10-30 17:49:20 -05:00
parent 59736f25e9
commit 1905bbd898

View File

@@ -31,6 +31,26 @@ namespace esphome::esp32_ble {
static const char *const TAG = "esp32_ble"; static const char *const TAG = "esp32_ble";
// GAP event groups for deduplication across gap_event_handler and dispatch_gap_event_
#define GAP_SCAN_COMPLETE_EVENTS \
case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT: \
case ESP_GAP_BLE_SCAN_START_COMPLETE_EVT: \
case ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT
#define GAP_ADV_COMPLETE_EVENTS \
case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT: \
case ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT: \
case ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT: \
case ESP_GAP_BLE_ADV_START_COMPLETE_EVT: \
case ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT
#define GAP_SECURITY_EVENTS \
case ESP_GAP_BLE_AUTH_CMPL_EVT: \
case ESP_GAP_BLE_SEC_REQ_EVT: \
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: \
case ESP_GAP_BLE_PASSKEY_REQ_EVT: \
case ESP_GAP_BLE_NC_REQ_EVT
void ESP32BLE::setup() { void ESP32BLE::setup() {
global_ble = this; global_ble = this;
if (!ble_pre_setup_()) { if (!ble_pre_setup_()) {
@@ -346,21 +366,15 @@ inline void ESP32BLE::dispatch_gap_event_(esp_gap_ble_cb_event_t gap_event, BLEE
esp_ble_gap_cb_param_t *param; esp_ble_gap_cb_param_t *param;
switch (gap_event) { switch (gap_event) {
// Scan complete events - all have same structure with just status // Scan complete events - all have same structure with just status
case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT: GAP_SCAN_COMPLETE_EVENTS:
case ESP_GAP_BLE_SCAN_START_COMPLETE_EVT: param = reinterpret_cast<esp_ble_gap_cb_param_t *>(&ble_event->event_.gap.scan_complete);
case ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT: break;
param = reinterpret_cast<esp_ble_gap_cb_param_t *>(&ble_event->event_.gap.scan_complete);
break;
// Advertising complete events - all have same structure with just status // Advertising complete events - all have same structure with just status
case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT: GAP_ADV_COMPLETE_EVENTS:
case ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT: param = reinterpret_cast<esp_ble_gap_cb_param_t *>(&ble_event->event_.gap.adv_complete);
case ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT: break;
case ESP_GAP_BLE_ADV_START_COMPLETE_EVT:
case ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT:
param = reinterpret_cast<esp_ble_gap_cb_param_t *>(&ble_event->event_.gap.adv_complete);
break;
// RSSI complete event // RSSI complete event
case ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT: case ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT:
@@ -368,11 +382,7 @@ inline void ESP32BLE::dispatch_gap_event_(esp_gap_ble_cb_event_t gap_event, BLEE
break; break;
// Security events // Security events
case ESP_GAP_BLE_AUTH_CMPL_EVT: GAP_SECURITY_EVENTS:
case ESP_GAP_BLE_SEC_REQ_EVT:
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT:
case ESP_GAP_BLE_PASSKEY_REQ_EVT:
case ESP_GAP_BLE_NC_REQ_EVT:
param = reinterpret_cast<esp_ble_gap_cb_param_t *>(&ble_event->event_.gap.security); param = reinterpret_cast<esp_ble_gap_cb_param_t *>(&ble_event->event_.gap.security);
break; break;
@@ -466,23 +476,13 @@ void ESP32BLE::loop() {
break; break;
// Scan complete events // Scan complete events
case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT: GAP_SCAN_COMPLETE_EVENTS:
case ESP_GAP_BLE_SCAN_START_COMPLETE_EVT:
case ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT:
// Advertising complete events // Advertising complete events
case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT: GAP_ADV_COMPLETE_EVENTS:
case ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT:
case ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT:
case ESP_GAP_BLE_ADV_START_COMPLETE_EVT:
case ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT:
// RSSI complete event // RSSI complete event
case ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT: case ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT:
// Security events // Security events
case ESP_GAP_BLE_AUTH_CMPL_EVT: GAP_SECURITY_EVENTS:
case ESP_GAP_BLE_SEC_REQ_EVT:
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT:
case ESP_GAP_BLE_PASSKEY_REQ_EVT:
case ESP_GAP_BLE_NC_REQ_EVT:
ESP_LOGV(TAG, "gap_event_handler - %d", gap_event); ESP_LOGV(TAG, "gap_event_handler - %d", gap_event);
#ifdef ESPHOME_ESP32_BLE_GAP_EVENT_HANDLER_COUNT #ifdef ESPHOME_ESP32_BLE_GAP_EVENT_HANDLER_COUNT
this->dispatch_gap_event_(gap_event, ble_event); this->dispatch_gap_event_(gap_event, ble_event);
@@ -564,23 +564,13 @@ void ESP32BLE::gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_pa
// Queue GAP events that components need to handle // Queue GAP events that components need to handle
// Scanning events - used by esp32_ble_tracker // Scanning events - used by esp32_ble_tracker
case ESP_GAP_BLE_SCAN_RESULT_EVT: case ESP_GAP_BLE_SCAN_RESULT_EVT:
case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT: GAP_SCAN_COMPLETE_EVENTS:
case ESP_GAP_BLE_SCAN_START_COMPLETE_EVT:
case ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT:
// Advertising events - used by esp32_ble_beacon and esp32_ble server // Advertising events - used by esp32_ble_beacon and esp32_ble server
case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT: GAP_ADV_COMPLETE_EVENTS:
case ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT:
case ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT:
case ESP_GAP_BLE_ADV_START_COMPLETE_EVT:
case ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT:
// Connection events - used by ble_client // Connection events - used by ble_client
case ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT: case ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT:
// Security events - used by ble_client and bluetooth_proxy // Security events - used by ble_client and bluetooth_proxy
case ESP_GAP_BLE_AUTH_CMPL_EVT: GAP_SECURITY_EVENTS:
case ESP_GAP_BLE_SEC_REQ_EVT:
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT:
case ESP_GAP_BLE_PASSKEY_REQ_EVT:
case ESP_GAP_BLE_NC_REQ_EVT:
enqueue_ble_event(event, param); enqueue_ble_event(event, param);
return; return;