A Bluetooth Low Energy mouse shows up in the device list. Windows tries to connect. “Try connecting your device again.” Repeat forever.
This is the full diagnostic arc — from phantom devices to kernel event logs to a driver version two years out of date — and the CLI tools that cut through it.
The symptom
Mouse appears in Settings → Bluetooth & devices → Add a device. Windows even says it connected once. But the cursor doesn’t move, and the device shows a driver error in Device Manager. Removing and re-adding loops back to the same failure.
Layer 1: Phantom devices
Before blaming the driver, check whether Windows has ghost device records from previous connection attempts or USB dongle sessions.
# List all phantoms for a specific device by VID/PID
Get-PnpDevice | Where-Object {
($_.Problem -eq 'CM_PROB_PHANTOM') -and
($_.InstanceId -match 'VID_046D') # Logitech VID
} | Select-Object FriendlyName, Class, InstanceId | Format-Table -AutoSize
CM_PROB_PHANTOM means Windows registered the device at some point but it is no longer present. These ghosts prevent clean re-enumeration — the HID stack sees the old records and thinks the device is already handled.
Remove them with pnputil:
Get-PnpDevice | Where-Object {
($_.Problem -eq 'CM_PROB_PHANTOM') -and
($_.InstanceId -match 'VID_046D')
} | ForEach-Object {
pnputil /remove-device "$($_.InstanceId)"
}
Also remove the paired BLE device itself so Windows starts a fresh pairing:
# Get the BTHLE instance ID first
Get-PnpDevice | Where-Object InstanceId -match 'BTHLE' | Format-List FriendlyName, InstanceId
# Then remove it
pnputil /remove-device "BTHLE\DEV_<mac>\<instance>"
Restart Bluetooth services to flush in-memory pairing state:
Stop-Service bthserv -Force
Start-Sleep 2
Start-Service bthserv
If pairing still fails after this, the problem is deeper.
Layer 2: Reading the BLE device tree
Even after phantoms are gone and the device re-pairs, “Try connecting your device again” can persist. Check the full PnP tree:
Get-PnpDevice | Where-Object InstanceId -match 'BTHLE' |
Select-Object FriendlyName, Status, Class, Problem, InstanceId |
Format-Table -AutoSize
A working BLE mouse should look like this:
LOGI M240 OK Bluetooth CM_PROB_NONE BTHLE\DEV_...
BLE GATT HID device OK Bluetooth CM_PROB_NONE BTHLEDEVICE\...
HID-compliant mouse OK Mouse CM_PROB_NONE HID\{00001812...}&COL01\...
If the top two nodes are OK but the HID children are CM_PROB_PHANTOM, the BLE pairing succeeded and GATT enumerated — but the HID class driver never completed enumeration. This points to a driver-level failure during the BLE HID profile negotiation.
Layer 3: Kernel event log
The Windows Bluetooth-specific logs (Microsoft-Windows-Bluetooth-BthLEPrepairing/Operational) are usually empty. The signal is in the System log:
Get-WinEvent -LogName System -MaxEvents 500 |
Where-Object {
$_.TimeCreated -gt (Get-Date).AddMinutes(-15) -and
$_.Message -match 'Bluetooth'
} |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Format-List
The smoking gun looks like this:
Id : 5
LevelDisplayName: Error
Message : The Bluetooth driver expected an HCI event with a certain
size but did not receive it.
Event ID 5, repeated during a pairing attempt = HCI protocol mismatch between the BT controller firmware and the driver. The driver is misreading the BLE advertisement/event packets from the mouse.
Layer 4: Driver version
Check what’s actually installed on the Bluetooth adapter:
Get-PnpDevice | Where-Object { $_.Class -eq 'Bluetooth' -and $_.Status -eq 'OK' } |
ForEach-Object {
$props = Get-PnpDeviceProperty -InstanceId $_.InstanceId `
-KeyName DEVPKEY_Device_DriverVersion, DEVPKEY_Device_DriverDate, DEVPKEY_Device_Manufacturer
[PSCustomObject]@{
Name = $_.FriendlyName
Driver = ($props | Where-Object KeyName -eq DEVPKEY_Device_DriverVersion).Data
Date = ($props | Where-Object KeyName -eq DEVPKEY_Device_DriverDate).Data
Mfr = ($props | Where-Object KeyName -eq DEVPKEY_Device_Manufacturer).Data
}
} | Format-List
Also get the hardware ID to identify the exact chip:
Get-PnpDeviceProperty -InstanceId (
Get-PnpDevice | Where-Object FriendlyName -match 'Realtek.*Bluetooth'
).InstanceId -KeyName DEVPKEY_Device_HardwareIds | Select-Object -ExpandProperty Data
In this case: USB\VID_0BDA&PID_B85C — Realtek RTL8852BE, driver dated November 2023. The HCI event size parsing bug in this driver series is fixed in 18.4017.xxxx (January 2025).
The Windows Update Catalog does not have the newer BT driver. AMD’s driver page redirects to OEM. The right path is the OEM’s driver management tool.
Fix: HP CMSL (for HP machines)
HP ships a PowerShell module — HP Client Management Script Library — that queries HP’s SoftPaq catalog for the exact machine model and finds applicable updates by category.
Install-Module -Name HPCMSL -Force -AcceptLicense -Scope CurrentUser
Import-Module HPCMSL
# Find all Bluetooth/network driver updates for this machine
Get-SoftpaqList -Category 'Driver - Network' |
Where-Object { $_.Name -match 'Bluetooth|RTL885' } |
Select-Object Id, Name, Version, ReleaseDate |
Format-Table -AutoSize
Output:
Id Name Version ReleaseDate
-- ---- ------- -----------
sp157134 Realtek RTL8xxx Series Bluetooth Driver 1.0.0.166 21-Feb-25
Download and install silently:
Get-Softpaq -Number sp157134 -DestinationPath "$env:TEMP\sp157134" -Overwrite Yes
Start-Process "$env:TEMP\sp157134\sp157134.exe" -ArgumentList '/s' -Wait
After install, verify the driver version changed:
Get-PnpDeviceProperty -InstanceId 'USB\VID_0BDA&PID_B85C\<serial>' `
-KeyName DEVPKEY_Device_DriverVersion, DEVPKEY_Device_DriverDate |
Select-Object KeyName, Data | Format-Table -AutoSize
Before: 1.10.1061.3014 (Nov 2023). After: 18.4017.2412.2303 (Jan 2025).
Put the mouse in pairing mode → pair fresh → done.
Bonus: Full driver audit
While you have HPCMSL loaded, run a full audit of what else is stale:
Import-Module HPCMSL
Get-SoftpaqList -Category 'Driver - Network','Driver - Chipset','Driver - Audio',
'Driver - Storage','Driver - Keyboard, Mouse and Input Devices','Firmware','BIOS' |
Select-Object Id, Name, Version, ReleaseDate |
Format-Table -AutoSize
Compare against installed versions:
$categories = @(
@{Name='Realtek WiFi'; Pattern='Realtek.*Wireless|Realtek.*802'},
@{Name='AMD Chipset'; Pattern='AMD.*Chipset|AMD.*GPIO|AMD.*SMBus'},
@{Name='Realtek Audio';Pattern='Realtek.*Audio|Realtek.*HD'}
)
foreach ($d in $categories) {
$dev = Get-PnpDevice |
Where-Object { $_.FriendlyName -match $d.Pattern -and $_.Status -eq 'OK' } |
Select-Object -First 1
if ($dev) {
$ver = (Get-PnpDeviceProperty -InstanceId $dev.InstanceId -KeyName DEVPKEY_Device_DriverVersion -EA SilentlyContinue).Data
$date = (Get-PnpDeviceProperty -InstanceId $dev.InstanceId -KeyName DEVPKEY_Device_DriverDate -EA SilentlyContinue).Data
"$($d.Name): $ver [$($date.ToString('MMM yyyy'))]"
}
}
Skip SSD firmware and BIOS from bulk updates — those deserve individual review.
Summary
| Step | Tool | What it told us |
|---|---|---|
| List phantom devices | Get-PnpDevice + CM_PROB_PHANTOM |
11 ghost HID records blocking re-enumeration |
| Remove phantoms | pnputil /remove-device |
Clean PnP tree |
| Read BLE device tree | Get-PnpDevice on BTHLE |
BLE paired OK, HID children phantom |
| Kernel event log | Get-WinEvent -LogName System |
Event ID 5: HCI size mismatch |
| Identify adapter | DEVPKEY_Device_HardwareIds |
RTL8852BE, driver Nov 2023 |
| Find updated driver | HP CMSL Get-SoftpaqList |
sp157134 (Feb 2025) |
| Install | Get-Softpaq + silent exe |
Driver: 18.4017.2412.2303 |
The diagnostic order matters: phantom cleanup is necessary but not sufficient. The kernel event log is the only signal that points to the actual failure layer.