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
- Clear all paired devices from the head unit's Bluetooth list; unpair the head unit on the phone
- Head unit: Telephone → Bluetooth → pair new device, choose a 4-digit passkey
- Phone: Settings → Connected devices → Pair new device → select the head unit
- Enter the same passkey in the dialog on the phone
- 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
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
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 stackOnConnectFail ... reason:TRANSACTION_RESPONSE_TIMEOUT(0x22)followed byBonding failed with failure reason:HCI_ERR_LMP_RESPONSE_TIMEOUTBOND_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) — theremote 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 readBTM_GetPeerDeviceTypeFromFeatures: Device features does not support BR/EDR and BLE— theremote 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
Reproducible on every attempt. Works on stock Android 16 on the same phone.
Relevant log (logcat/build log)
Screenshots or videos
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