commit 80e7c3ae405939d748be1742af9c76c891895fba
| author | 斟酌 鵬兄 <tgckpg@gmail.com> |
| date | 2026-10-05T07:48:32Z |
| subject | Using BLE_GAP_EVENT_LINK_ESTAB instead of BLE_GAP_EVENT_CONNECT |
commit 80e7c3ae405939d748be1742af9c76c891895fba
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date: 2026-10-05T07:48:32Z
Using BLE_GAP_EVENT_LINK_ESTAB instead of BLE_GAP_EVENT_CONNECT
---
esp32/main/main.c | 54 +++++++++++++++++++++++++++++++-----------------------
1 file changed, 31 insertions(+), 23 deletions(-)
diff --git a/esp32/main/main.c b/esp32/main/main.c
index df2c8c0..9e896a6 100644
--- a/esp32/main/main.c
+++ b/esp32/main/main.c
@@ -118,32 +118,40 @@ static int gap_event(struct ble_gap_event *event, void *arg)
{
(void)arg;
ESP_LOGI(TAG, "GAP event=%d (CONNECT=%d DISCONNECT=%d)",
- event->type,
- BLE_GAP_EVENT_CONNECT,
- BLE_GAP_EVENT_DISCONNECT);
+ event->type,
+ BLE_GAP_EVENT_CONNECT,
+ BLE_GAP_EVENT_DISCONNECT);
switch (event->type) {
- case BLE_GAP_EVENT_CONNECT:
- if (event->connect.status == 0) {
- connection = event->connect.conn_handle;
- relay_connected(true);
+ case BLE_GAP_EVENT_LINK_ESTAB:
+ struct ble_gap_conn_desc desc;
+ uint16_t handle = event->link_estab.conn_handle;
+ int rc = ble_gap_conn_find(handle, &desc);
+
+ ESP_LOGI(TAG, "LINK_ESTAB status=%d handle=%u lookup=%d",
+ event->link_estab.status, (unsigned)handle, rc);
+
+ if (rc == 0) {
+ connection = handle;
+ relay_connected(true);
+ have_reply = false;
+ ESP_LOGI(TAG, "BLE gateway connected");
+ } else {
+ advertise();
+ }
+ break;
+ case BLE_GAP_EVENT_DISCONNECT:
+ relay_connected(false);
+ connection = BLE_HS_CONN_HANDLE_NONE;
have_reply = false;
- ESP_LOGI(TAG, "BLE gateway connected");
- } else
- advertise();
- break;
- case BLE_GAP_EVENT_DISCONNECT:
- relay_connected(false);
- connection = BLE_HS_CONN_HANDLE_NONE;
- have_reply = false;
- ESP_LOGI(TAG, "BLE gateway disconnected: %d", event->disconnect.reason);
- advertise();
- break;
- case BLE_GAP_EVENT_ADV_COMPLETE:
- if (connection == BLE_HS_CONN_HANDLE_NONE)
+ ESP_LOGI(TAG, "BLE gateway disconnected: %d", event->disconnect.reason);
advertise();
- break;
- default:
- break;
+ break;
+ case BLE_GAP_EVENT_ADV_COMPLETE:
+ if (connection == BLE_HS_CONN_HANDLE_NONE)
+ advertise();
+ break;
+ default:
+ break;
}
return 0;
}