tchebb / bose-dfu

Firmware updater for various Bose devices
MIT License
37 stars 4 forks source link

Bose Sport earbuds not recognized by `bose-dfu list` #9

Open ctag opened 2 weeks ago

ctag commented 2 weeks ago

Hi,

This is likely operator error somewhere, but I'm hoping to document my troubleshooting in case it happens to anyone else.

I used the cargo installation method on Archlinux.

Device: Bose Sport earbuds Model: 427929

Connected with USB-A cable (serial number edited out):

[ 8521.719375] usb 1-2: new full-speed USB device number 7 using xhci_hcd
[ 8521.865529] usb 1-2: New USB device found, idVendor=05a7, idProduct=40fc, bcdDevice= 1.01
[ 8521.865541] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 8521.865546] usb 1-2: Product: Bose Sport Earbuds
[ 8521.865550] usb 1-2: Manufacturer: Bose Corporation
[ 8521.865554] usb 1-2: SerialNumber: XXXXX
[ 8521.870700] cdc_acm 1-2:1.0: ttyACM0: USB ACM device
[ 8521.874509] input: Bose Corporation Bose Sport Earbuds Consumer Control as /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:05A7:40FC.0003/input/input22
[ 8521.929675] hid-generic 0003:05A7:40FC.0003: input,hiddev96,hidraw1: USB HID v1.11 Device [Bose Corporation Bose Sport Earbuds] on usb-0000:00:14.0-2/input2

Modified 70-bose-dfu.rules installed:

$ cat /etc/udev/rules.d/70-bose-dfu.rules 
# Bose PIDs

# All devices tested so far, normal mode
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="05a7", ATTRS{idProduct}=="40fe", TAG+="uaccess"

# SoundLink Color II, DFU mode
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="05a7", ATTRS{idProduct}=="400d", TAG+="uaccess"

# SoundLink Mini II, DFU mode
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="05a7", ATTRS{idProduct}=="4009", TAG+="uaccess"

# QuietComfort 35 II, DFU mode
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="05a7", ATTRS{idProduct}=="4020", TAG+="uaccess"

# QuietComfort and Sport, normal mode
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="05a7", ATTRS{idProduct}=="40fc", TAG+="uaccess"

Running bose-dfu:

[berocs@bns-kharselim ~]$ sudo /home/berocs/.cargo/bin/bose-dfu list
[berocs@bns-kharselim ~]$ 

The device's idVendor looks to be correct. I expect I need to do something to the hidraw driver.

I also see the device id is the same as an incompatible product: https://github.com/tchebb/bose-dfu/blob/fdf107269c8ddcaa391325c1113d0d65afe35ad4/src/device_ids.rs#L22

ctag commented 2 weeks ago

I know nothing about rust, but managed to get a text editor to recognize it, and learned that cargo can build locally.

The list function will return early if a device is incompatible. I removed the conflicting device ID, since my earbuds have the same one.

// Use UsbId instead of DeviceIds since some incompatible devices don't have a concept of DFU mode.
const INCOMPATIBLE_DEVICES: &[UsbId] = &[
    // Bose Noise Cancelling Headphones 700
    bose_pid(0x40ff),
    // bose_pid(0x40fc),
];

Output. I guess since these are out of warranty I don't care about hiding the serial number.

[berocs@bns-kharselim bose-dfu]$ cargo build
   Compiling bose-dfu v1.1.0 (/home/berocs/git/bose-dfu)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.22s
[berocs@bns-kharselim bose-dfu]$ ./target/debug/bose-dfu list
Device! 0x5A7, 0x40FC
05a7:40fc 081300m0253a713ae Bose Sport Earbuds [UNTESTED device in unknown mode]
Device! 0x5A7, 0x40FC
Device! 0x46D, 0xB01F
Device! 0x46D, 0xB01F
Device! 0x46D, 0xB01F
Device! 0x46D, 0xB01F
[berocs@bns-kharselim bose-dfu]$ ./target/debug/bose-dfu info -f
[WARN  bose_dfu] Device has not been tested with bose-dfu; by proceeding, you risk damaging it
[WARN  bose_dfu] Cannot determine device's mode; command may damage devices not in normal mode
USB serial: 081300m0253a713ae
HW serial: m024834830683763803b010
Device model: m024834830683763803b010
Current firmware: 2.0.0-ba77aca epdbuild.usvacepebldw05.2021-08-13T11:00:00
ctag commented 2 weeks ago

I tried using the btu.bose.com webpage from a Windows VM and capturing with wireshark, but wasn't able to make it work.

I did get the output from the webpage though: 2024-08-31_18-16

These earbuds are stuck in the "red and white flashing LED" mode, so I know now that the btu webpage doesn't fix the issue.