Skip to content

nimble/host: L2CAP fallback for LL conn param rejection#4

Closed
gmarull wants to merge 1 commit intocoredevices:pebbleosfrom
pebble-dev:param-update-fix
Closed

nimble/host: L2CAP fallback for LL conn param rejection#4
gmarull wants to merge 1 commit intocoredevices:pebbleosfrom
pebble-dev:param-update-fix

Conversation

@gmarull
Copy link
Copy Markdown
Member

@gmarull gmarull commented Mar 30, 2026

When the peripheral calls ble_gap_update_params() and the peer's supported features indicate CONN_PARAM_REQUEST support, NimBLE sends the LE Connection Update HCI command. However, if the local controller does not support the BLE 4.1 LL Connection Parameters Request procedure (e.g. an external controller with limited feature set), the HCI command is rejected synchronously with BLE_ERR_UNSUPP_REM_FEATURE (0x1a).

NimBLE already handles this error asynchronously in ble_gap_rx_update_complete() by falling back to L2CAP signaling, but the synchronous rejection path had no such fallback, causing the update to fail and be retried futilely by upper layers.

Add a synchronous fallback: when ble_gap_update_tx() returns BLE_ERR_UNSUPP_REM_FEATURE and the local device is the slave, switch to the L2CAP Connection Parameter Update Request procedure.

When the peripheral calls ble_gap_update_params() and the peer's
supported features indicate CONN_PARAM_REQUEST support, NimBLE sends
the LE Connection Update HCI command. However, if the local controller
does not support the BLE 4.1 LL Connection Parameters Request procedure
(e.g. an external controller with limited feature set), the HCI command
is rejected synchronously with BLE_ERR_UNSUPP_REM_FEATURE (0x1a).

NimBLE already handles this error asynchronously in
ble_gap_rx_update_complete() by falling back to L2CAP signaling, but
the synchronous rejection path had no such fallback, causing the update
to fail and be retried futilely by upper layers.

Add a synchronous fallback: when ble_gap_update_tx() returns
BLE_ERR_UNSUPP_REM_FEATURE and the local device is the slave, switch to
the L2CAP Connection Parameter Update Request procedure.

Signed-Off-By: Gerard Marull-Paretas <gerard@pebble.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant