Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Windows Blocked Barrot Bluetooth Driver — Permanent Fix

A reproducible, end-to-end fix for Windows blocking the Barrot / BT60 Bluetooth USB dongle (and similar vendor-USB-Bluetooth-class devices) by re-binding the driver to the standard BTHUSB and disabling competing radios. The fix survives reboots, replugs, and Windows Update.

Tested on: Windows 10/11, old laptop with built-in Qualcomm Atheros QCA61x4 Bluetooth, a Qualcomm Atheros AR3012 USB dongle, and a Barrot BT60 USB dongle. Symptoms: BT60 enumerates as a generic USB device, no Bluetooth radio appears, pairing fails.


What's in this repository

File Purpose
README.md This file — overview, decision tree, and the one-command fix.
GUIDE.md Step-by-step human-readable walkthrough of what each phase does and why. Read this first if you're not a Windows driver developer.
QUICKSTART.md If you just want the fix without understanding it — run one script, reboot, done.
bt60_incident_report.md The original incident analysis with all registry paths, GUIDs, and event IDs. This is the technical deep-dive.
bt60_chat_export.txt Full chat transcript of the original diagnostic and fix session.
Total History.txt Full puku-cli shell history of every command run during the fix.
scripts/ All PowerShell scripts in the order they were run.
logs/ Output logs from each script execution.

Scripts (run in this order)

# Script What it does
1 scripts/bt60_diag.ps1 Capture initial state of all Bluetooth devices, services, drivers, policies.
2 scripts/bt60_recover.ps1 Remove ghost Barrot/BRTLink USB device instances, re-register driver.
3 scripts/bt60_check.ps1 Verify driver binding state.
4 scripts/bt60_force.ps1 Try enable/restart on stuck child devices.
5 scripts/bt60_radio.ps1 Inspect registry, force-clear ConfigFlags block bit.
6 scripts/bt60_fix.ps1 Uninstall brtlinkusb, force BTHUSB binding.
7 scripts/bt60_clean.ps1 Remove all Barrot oem*.inf driver packages.
8 scripts/bt60_force_bind.ps1 Force BTHUSB without replug.
9 scripts/bt60_make_primary.ps1 Disable AR3012/QCA61x4 so BARROT becomes the active radio.
10 scripts/bt60_permanent_v2.ps1 THE MAIN FIX. Hard-pin driver, blacklist Barrot INFs, disable competing radios, install lockdown scheduled task.
11 scripts/bt60_audio.ps1 Investigate Joyroom JR-X2 (or any) Bluetooth audio profile — Stereo vs Hands-Free.

Logs

Each *_log.txt is the output captured from running the matching *.ps1 script. They are useful for debugging, comparing your system state to the fixed state, and as evidence in bug reports.


What was actually wrong

There are two stacked root causes. Understanding them is important because the "fix" only works if you address both.

1. The Barrot vendor driver (brbtusb.sys) hijacks BTHUSB

When you plug the BT60 in, Windows finds a matching brbtusb.inf in its driver store (the Barrot vendor driver). That INF does two things:

  1. Installs a brtlinkusb service that binds the device as a generic USB device.
  2. Adds brbtusb as a LowerFilter on the standard BTHUSB driver for this device.

The result: the device enumerates as a USB device (Class GUID {36fc9e60-c465-11cf-8056-444553540000}) instead of a Bluetooth radio (Class GUID {e0cbf06c-cd8b-4647-bb8a-263b43f0f974}). Even worse, BTHUSB's AddDevice call fails with STATUS_UNSUCCESSFUL (0xC0000001) because the brbtusb lower filter cannot initialize. The device ends up in CM_PROB_FAILED_ADD (ProblemCode 31).

2. Multiple Bluetooth radios are not allowed

Windows Bluetooth stack allows only one active Bluetooth radio at a time. When a system has more than one Bluetooth adapter (in our case: built-in QCA61x4 + AR3012 USB dongle + BT60), only one becomes active. BTHUSB logs event ID 6 ("Only one active Bluetooth adapter is supported at a time") and refuses to start the others.

So even after you fix the Barrot driver issue, the BT60 will sit at Status=Error because the AR3012 (or QCA61x4) is holding the active-radio slot.


The one-command fix (most users)

If you are running this on a Windows PC where the same problem exists, you can apply the entire fix with one command — as Administrator.

Prerequisites

  • Windows 10 or 11
  • PowerShell 5.1+ (already built-in)
  • Run the shell as Administrator (right-click PowerShell → "Run as administrator")

Steps

# 1. Open PowerShell as Administrator
# 2. Allow running this script (one-time)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

# 3. Run the master fix
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/IroScript/windows-blocked-barrot-bluetooth-driver-solved/main/scripts/bt60_permanent_v2.ps1" -OutFile "$env:TEMP\bt60_fix.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\bt60_fix.ps1"

# 4. When prompted, unplug and replug the BT60 into a different USB port
# 5. Reboot
Restart-Computer

That's it. After reboot, the BT60 will be the only Bluetooth radio on the system, bound to the standard Microsoft BTHUSB driver.


Manual fix (from this repo, local files)

# 1. Open PowerShell as Administrator
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

# 2. Run the scripts in order
cd "C:\Users\Irak\Desktop\Bluetooth Connection Device Solved_Read_MD_File"
foreach ($s in 'bt60_diag.ps1','bt60_recover.ps1','bt60_check.ps1','bt60_force.ps1','bt60_radio.ps1','bt60_fix.ps1','bt60_clean.ps1','bt60_force_bind.ps1','bt60_make_primary.ps1','bt60_permanent_v2.ps1','bt60_audio.ps1') {
    Write-Host "=== Running $s ===" -ForegroundColor Cyan
    powershell -ExecutionPolicy Bypass -File ".\scripts\$s"
}

# 3. Reboot
Restart-Computer

The output of each script is captured in the matching *_log.txt file under logs/.


What the permanent fix changes (registry-level)

The bt60_permanent_v2.ps1 script makes the following persistent changes:

  1. Pins BT60 driver to BTHUSB at HKLM:\SYSTEM\CurrentControlSet\Enum\USB\VID_33FA&PID_0001\<instance>\Service.
  2. Re-sets HardwareID and CompatibleIDs to the standard Bluetooth HCI USB class so Windows classifies it correctly on every replug.
  3. Overrides DeviceClass GUID and DeviceType in Device Parameters to force Bluetooth radio classification.
  4. Blacklists brbtusb.inf and brtlinkusb.inf via HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching\SearchDisallowedDrivers.
  5. Marks cached Barrot oem*.inf packages as Deny in DriverDatabase\DriverPackages\*.
  6. Disables AR3012 and QCA61x4 and flags all historical instances in their enum trees with ConfigFlags=1 so they never reclaim the active-radio slot.
  7. Creates a scheduled task BT60 Lockdown that re-asserts everything at every boot and logon. Script: C:\Windows\System32\BT60_Lockdown.ps1.

Verification

After running the fix and rebooting:

# Should show ONE active Bluetooth radio (the BT60)
Get-PnpDevice -Class Bluetooth | Where-Object { $_.InstanceId -like 'BTH\MS_BTHBRB*' -and $_.Status -eq 'OK' }
# Expected: one Microsoft Bluetooth Enumerator with Status=OK

# BT60 device should be:
#   Status=OK, Service=BTHUSB, Class=Bluetooth
Get-PnpDevice -ErrorAction SilentlyContinue | Where-Object { $_.InstanceId -like 'USB\VID_33FA*' } | Format-List Status, Class, ClassGuid, FriendlyName

# Competing radios should be disabled (Status=Error or greyed)
Get-PnpDevice -InstanceId 'USB\VID_13D3&PID_3402\ALASKA_DAY_2006','USB\VID_0CF3&PID_3004\ALASKA_DAY_2006' | Format-Table Status, FriendlyName

# Lockdown task should be ready
Get-ScheduledTask -TaskName 'BT60 Lockdown' | Format-List State, @{N='Triggers';E={$_.Triggers.Count}}

Reversal (if you need to undo)

# Remove the scheduled task
Unregister-ScheduledTask -TaskName 'BT60 Lockdown' -Confirm:$false
Remove-Item 'C:\Windows\System32\BT60_Lockdown.ps1' -Force

# Remove policy entries
Remove-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching\SearchDisallowedDrivers' -Name 'brbtusb.inf' -ErrorAction SilentlyContinue
Remove-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching\SearchDisallowedDrivers' -Name 'brtlinkusb.inf' -ErrorAction SilentlyContinue

# Re-enable competing radios
pnputil /enable-device "USB\VID_13D3&PID_3402\ALASKA_DAY_2006"
pnputil /enable-device "USB\VID_0CF3&PID_3004\ALASKA_DAY_2006"

# Remove registry overrides on the BT60 device (so PnP can re-evaluate):
# (Run Device Manager → right-click BT60 → Uninstall device, then replug)

Troubleshooting

Symptom Likely cause Fix
BT60 still shows as "USB Composite Device" ConfigFlags=1 block bit is set on the device instance Run bt60_radio.ps1 to clear it
BT60 has red X, ProblemCode 31 brbtusb lower filter still active Run bt60_clean.ps1 to remove Barrot drivers
BT60 has red X, no ProblemCode Active-radio slot is held by another adapter Run bt60_make_primary.ps1 to disable others
After reboot, BT60 stops working Driver binding not pinned in registry Run bt60_permanent_v2.ps1
SetupAPI.dev.log shows Lower Filters = brbtusb Barrot INF re-applied Delete oem*.inf and run bt60_permanent_v2.ps1

Background reading

  • GUIDE.md — the friendly walkthrough, explains what each script does in plain English.
  • QUICKSTART.md — the no-fluff instructions.
  • bt60_incident_report.md — the full technical analysis with all registry paths, GUIDs, and event IDs.
  • bt60_chat_export.txt — original chat session, useful for context.
  • Total History.txt — every shell command run, in order.

Hardware identification quick reference

Device VID:PID
Barrot BT60 0x33FA:0x0001
Qualcomm Atheros AR3012 0x13D3:0x3402
Qualcomm Atheros QCA61x4 0x0CF3:0x3004

If your device has different VID/PID, edit the four *_VID / *_PID constants at the top of bt60_permanent_v2.ps1 and re-run.


License

MIT — do whatever you want with this. If it helps you, a star on the repo is appreciated.

Author

IroScript — issue reports and pull requests welcome.

About

Permanent fix for Windows blocking Barrot/BT60 Bluetooth USB dongle. Reproducible registry pinning + scheduled task lockdown for old Windows hardware.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages