Forum: Mikrocontroller und Digitale Elektronik ESP32 BT-Classic: Reconnect-Verzögerung mit FireTV Remote (HID over L2CAP)


von Steffen H. (hokl3d)


Lesenswert?

Hallo zusammen,

ich arbeite an meinem ersten Projekt mit dem ESP32-D (ESP-IDF v5.5.2) 
und stecke beim Thema Bluetooth Classic Bonding fest.

Setup: Der ESP32 agiert als HID Host (Master). Ich verbinde eine Amazon 
Fire TV Remote direkt über L2CAP (PSM 0x11/0x13). Hinweis zur Wahl von 
L2CAP: Ich nutze bewusst nicht den Standard-HID-Host-Layer der IDF 
(esp_hidh.h), da der integrierte Parser sehr strikt ist und die 
speziellen Reports dieser Remote leider verwirft. Über L2CAP bekomme ich 
die Rohdaten, habe aber Probleme beim schnellen Reconnect.

Projekt-Link: https://github.com/Hokl3d/ESP32-FireTV-Remote-Bridge

Das Problem: Initiales Pairing und Bonding funktionieren. Nach einem 
Neustart des ESP32 dauert es jedoch ca. 15–40 Sekunden, bis die 
Verbindung wieder steht (Ich wünsche mir <5 Sekunden). Da ich nach einem 
idf.py erase_flash oft Probleme hatte, das Pairing erneut zu triggern, 
sieht meine aktuelle Loop in der app_main so aus:

C

while (1) {
    if (!connected) {
        // Triggert den Paging-Prozess
        L2CA_ConnectReq(HID_PSM_CONTROL, remote_bda);
        // Parallel dazu Suche, falls die Remote im Discovery-Mode ist
        esp_bt_gap_start_discovery(ESP_BT_INQ_MODE_GENERAL_INQUIRY, 5, 
0);
    }
    vTaskDelay(pdMS_TO_TICKS(5000));
}

Meine Vermutung: Das parallele Ausführen von Inquiry (Discovery) und 
ConnectReq (Paging) als Master scheint den Reconnect bei bereits 
gebondeten Geräten massiv zu verzögern. Der "Fast Reconnect" wird 
vermutlich durch den Scan-Vorgang blockiert.

Fragen an euch:

Wie sollte der ESP32 als Master idealerweise auf ein gebondetes, aber 
schlafendes Device warten? Sollte auf discovery komplett verzichten, 
sobald eine MAC im NVS bekannt ist?

Bonding-Check: Gibt es eine Möglichkeit, beim Booten zu prüfen, ob für 
die remote_bda bereits ein gültiger Link-Key im Stack/NVS vorhanden ist?

L2CAP & Security: Ich nutze BTM_SEC_NONE beim Registrieren des Services. 
Erzwingt die Remote bei Master-Reconnect evtl. deshalb ein neues 
Pairing, weil der Security-Level des Kanals nicht zum Bond passt?

Ich versteh leider nicht jedes Detail, da ich mich erst seit vier Wochen 
mit dem Thema beschäftige, aber ich möchte gerne eine saubere Lösung. 
Daher bin ich auf jede Art von Hinweisen die das Programm besser machen 
bzw. was ich falsch mache Dankbar!

Viele Grüße Steffen

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.