ESP32 BT-Classic: Reconnect-Verzögerung mit FireTV Remote (HID over L2CAP)

OP #8001765
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.