Skip to content

Pixel 9a: BT legacy pairing with BMW head unit fails with HCI_ERR_LMP_RESPONSE_TIMEOUT after PIN reply (works on stock Android 16) #1128

Description

@Bingo2023

Issue type

Feature not working as intended

Device

Google Pixel 9a (tegu)

crDroid version

crDroid 12

Exact version / Build date

crDroid 12.11 Built date: 2. July

Bug description

Bug description

Pairing with an older BMW head unit (BR/EDR legacy pairing, no Secure Simple Pairing) fails on
crDroid. The same phone running stock Android 16 pairs successfully with the same head unit,
so this appears to be ROM-specific rather than a hardware or head unit fault.

The PIN dialog appears and the PIN is handed to the stack correctly. The failure occurs
afterwards, at link level:

  • Remote sm4: 0x0 — legacy pairing, remote has no SSP (expected for this head unit generation)
  • BTM_PINCodeReply: PinLen:4 Result:0 — PIN accepted and sent by the stack
  • ~18 s later: OnConnectFail ... reason:TRANSACTION_RESPONSE_TIMEOUT(0x22) followed by
    Bonding failed with failure reason:HCI_ERR_LMP_RESPONSE_TIMEOUT
  • Bond state goes BOND_BONDING => BOND_NONE, hciReason: 34 (0x22)

The head unit displays "wrong passkey", but that is simply how it reports any incomplete pairing
attempt. The stack never reports an authentication failure (HCI_ERR_AUTH_FAILURE / 0x05) — the
remote just stops responding after the PIN is supplied.

Two further observations that may be relevant:

  • btif_dm_pin_req_evt: cod is 0, set as unclassified — Class of Device was not read
  • BTM_GetPeerDeviceTypeFromFeatures: Device features does not support BR/EDR and BLE — the
    remote feature read did not return usable data

This may point to a missing interop entry or different LMP feature handling compared to stock.

Possibly related to #988 (same device, same class of head unit, but a different failure point —
there the PIN dialog did not appear at all).

Steps to reproduce

  1. Clear all paired devices from the head unit's Bluetooth list; unpair the head unit on the phone
  2. Head unit: Telephone → Bluetooth → pair new device, choose a 4-digit passkey
  3. Phone: Settings → Connected devices → Pair new device → select the head unit
  4. Enter the same passkey in the dialog on the phone
  5. Pairing fails; the head unit reports a wrong passkey

Reproducible on every attempt. Works on stock Android 16 on the same phone.

Relevant log (logcat/build log)

09-02 13:22:03.643 bt_btif_dm: btif_dm_create_bond: bd_addr=xx:xx:xx:xx:1a:71, transport=0
09-02 13:22:03.643 bt_btif_dm: bond_state_changed: state=1[bonding], prev_state=0
09-02 13:22:03.645 bt_btm_sec: btm_sec_bond_by_transport: Remote sm4: 0x0  HCI Handle: 0xffff
09-02 13:22:03.646 bluetooth : btm_sec_bond_by_transport: sec mode: 4 sm4:x0
09-02 13:22:03.658 bt_btm_sec: change_pairing_state: IDLE => WAIT_PIN_REQ pairing_flags:0x5

09-02 13:22:11.055 bt_btm_sec: btm_sec_pin_code_request: Controller requests PIN code state:WAIT_PIN_REQ
09-02 13:22:11.055 bt_btm_sec: change_pairing_state: WAIT_PIN_REQ => WAIT_LOCAL_PIN pairing_flags:0x5
09-02 13:22:11.055 bt_btif_dm: btif_dm_sec_evt: ev:BTA_DM_PIN_REQ_EVT(0x2)
09-02 13:22:11.055 bt_btm_sec: BTM_GetPeerDeviceTypeFromFeatures: Device features does not support BR/EDR and BLE
09-02 13:22:11.056 bt_btif_dm: btif_dm_pin_req_evt: cod is 0, set as unclassified

09-02 13:22:17.274 BTPairingController: Pairing dialog accepted
09-02 13:22:17.281 bt_btm_sec: BTM_PINCodeReply: PairState: WAIT_LOCAL_PIN  PairFlags: 0x0d  PinLen:4  Result:0
09-02 13:22:17.282 bt_btm_sec: change_pairing_state: WAIT_LOCAL_PIN => WAIT_PIN_REQ pairing_flags:0xd

09-02 13:22:35.661 bluetooth : OnConnectFail: Connection failed classic remote:xx:xx:xx:xx:1a:71 reason:TRANSACTION_RESPONSE_TIMEOUT(0x22)
09-02 13:22:35.661 bt_btm_sec: btm_sec_connected: state:WAIT_PIN_REQ handle:0xffff status:HCI_ERR_LMP_RESPONSE_TIMEOUT RName:BMW 50235
09-02 13:22:35.661 bt_btm_sec: change_pairing_state: WAIT_PIN_REQ => IDLE pairing_flags:0xd
09-02 13:22:35.662 bt_btif_dm: btif_dm_auth_cmpl_evt: success=false, key_present=false
09-02 13:22:35.662 bt_btif_dm: btif_dm_auth_cmpl_evt: Bonding failed with failure reason:HCI_ERR_LMP_RESPONSE_TIMEOUT
09-02 13:22:35.676 bt_btm_sec: btm_sec_dev_rec_cback_event: btm_status=tBTM_STATUS::BTM_DEVICE_TIMEOUT
09-02 13:22:35.677 BluetoothBondStateMachine: bondStateChangeCallback: Status: 10 newState: 0 hciReason: 34
09-02 13:22:35.693 BluetoothBondStateMachine: Bond State Change Intent: BOND_BONDING => BOND_NONE


Full logcat attached. A btsnoop_hci capture can be provided if useful.

Screenshots or videos

Image

Solution

No response

Additional context

Already tried without success: clearing Bluetooth storage and cache, resetting network settings,
pairing in safe mode, disabling LE Audio, initiating pairing from both sides, and clearing the
head unit's paired device list.

logcat-excerpt.txt

Acknowledgements

  • I've checked device is officially supported and that no support is provided for unofficial devices (for device specific reports and not source related).
  • I'm running latest version available on crdroid.net for this device and that the device is still maintainer supported (not flagged unsupported on download page)
  • I have searched the existing issues and this is a new and no duplicate or related to another open issue.
  • I have written a short but informative title.
  • I filled out all of the requested information in this issue properly and understand that not doing so will automatically result in closing of ticket.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingneeds-triagelabled for new issues in order to confirm viewed and directed properly

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions