Skip to content

espressif: report pair() failures - #11561

Open
dhalbert wants to merge 1 commit into
adafruit:mainfrom
dhalbert:espressif-pair-errors
Open

dhalbert wants to merge 1 commit into
adafruit:mainfrom
dhalbert:espressif-pair-errors

Conversation

@dhalbert

Copy link
Copy Markdown
Collaborator

Diagnosis and code by Claude, reviewed by @dhalbert.

Problem

  • When pairing failed, pair() waited until Ctrl-C or a disconnect, and then returned without raising an exception.
  • A failed BLE_GAP_EVENT_ENC_CHANGE only ended a numeric-comparison wait, so the status stayed PAIR_WAITING. The failure status was discarded.

Fix

  • The NimBLE status from BLE_GAP_EVENT_ENC_CHANGE is now stored, and a failure ends the wait.
  • pair() then raises:
    • ConnectionError: Not connected if the link dropped.
    • SecurityError with the same messages as nordic: "Unspecified issue. The pairing request on the other device may have been declined or ignored." for SM reason 0x08, otherwise "Unknown security error: 0x%04x" with the NimBLE status.
  • No new strings.

Testing

Metro ESP32-S3 with this PR as central:

Peer Result
nRF54LM20 DK (zephyr-cp) paired
Linux host (BlueZ), not pairable SecurityError: Unknown security error: 0x0505 (peer: Pairing Not Supported)
Linux host, pairing prompt left unanswered SecurityError: Unknown security error: 0x000d (SM timeout) after 30 s
Linux host, disconnects during pairing ConnectionError: Not connected

Reason 0x08 was not tested.

A failed BLE_GAP_EVENT_ENC_CHANGE only ended a numeric-comparison
wait, so after a failed pair() the status stayed PAIR_WAITING. pair()
then waited until Ctrl-C or a disconnect, and returned without raising.

Store the NimBLE status from ENC_CHANGE and end the wait on failure.
pair() now raises ConnectionError if the link dropped, and otherwise
SecurityError with the same messages as nordic.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant