[Bug 60824] [PATCH][regression] Cambridge Silicon Radio, Ltd Bluetooth Dongle unusable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



https://bugzilla.kernel.org/show_bug.cgi?id=60824

--- Comment #91 from Sergey Kondakov (virtuousfox@xxxxxxxxx) ---
Created attachment 289883
  --> https://bugzilla.kernel.org/attachment.cgi?id=289883&action=edit
ISSC_ds4_pass.btsnoop

(In reply to Swyter from comment #90)
> Because it's what I know, plain and simple. It's what I have been using and
> it's what I've been comfortable recommending. As long as they are HCI logs
> and *they exist* it doesn't matter the format, doing `btmon -w my.log` is
> much nicer than `hcidump -X`, that's for sure, so thanks for that. I'm
> learning as I go, I figured that if no one was stepping up I might as well
> give it a try. Seems like a good way of submitting a first patch and
> learning a few things. ¯\_(ツ)_/¯

Sure, it's just that not only hcidump likely to not be installed by default or
even packaged, the fact that it's long time obsoleted means that it can also be
incorrect and no one is going to debug it. btmon's file dumps are binary
though, so you would need to use `tee` to dump text as it scrolls or use `btmon
-r`.

> I took a look at your DS4 logs. I would take similar captures on Windows to
> compare, maybe the role switch isn't really needed. If you could link your
> Windows drivers here it may also be useful, maybe the dongle needs to be
> configured with vendor commands before using it. **Update**: Tested DS4
> pairing myself with BlueZ and no, the `Accept Connection Request` packet
> doesn't show up and it connects normally, the spec says that this isn't
> non-fatal, and in this case the one erroring out due to timeout and
> disconnecting is the DS4, so that's something to keep in mind.
> 
> From what I see, HCI_OP_ACCEPT_CONN_REQ seems to be called by the SCO layer
> in sco_conn_defer_accept():
> https://github.com/torvalds/linux/blob/
> cb8e59cc87201af93dfbb6c3dccc8fcad72a09c2/net/bluetooth/sco.c#L741
> Or alternatively from here, I believe:
> https://github.com/torvalds/linux/blob/
> cb8e59cc87201af93dfbb6c3dccc8fcad72a09c2/net/bluetooth/hci_event.c#L2742
> 
> It's a wild guess, but it may be sound-related.
> 

I might have made that dump with '-S' option which adds SCO messages that
otherwise might be ignored, just for completeness.

DualShocks 3 and 4 are fiddly to connect, when connecting to "new" dongle you
need to:
1) Remove any OS entries of it.
2) Force DS4 into pairing mode by holding SELECT+PS until light flashes
rapidly, for DS3 you need to connect it to USB. It will write dongle's MAC/UID
into itself.
3) Now you can switch it on normally. I'm pretty sure DS wants to be the master
in that connection.

It works fine on my old 2.x ISSC dongle which I tried to replace with fancier
4.x dongles twice while having 2.x as backup. First 4.x dongle killed itself
for no reason a minute after plugging in, bastards didn't even refund me for
its corpse. And second one is this CSR. But timeouts seem irrelevant, sometimes
they just don't react properly fast enough during pairing and they also refuse
to connect to a dongle that's not in their memory.

On Windows I just use Windows' stock drivers and DS4Windows
https://github.com/Ryochan7/DS4Windows for polling rate / latency, lights
controls, battery state tracking and xinput emulation. On Linux there is no
control (polling/latency would be really nice for battery/responsiveness
balancing and parity with new generation of consoles that advertise 1ms
wireless latency which DS4 should be well capable of) but I'm trying out
https://github.com/TheDrHax/ds4drv-cemuhook now. 

I think that Windows' BT stack just not as picky. There is no way they would do
per-device workarounds for garbage bin dongles like that. They JUST recently
(like last year or something) added USB audio driver after years of relying on
crappy, often licensed separately, third-party per-device implementations.

> 
> Another thing to keep in mind is that the bluez-utils package has a nifty
> `bccmd` tool for CSR devices (a clone of a proprietary tool, actually) that
> is able to get and set most of the internal firmware properties and detect
> the chip type, in theory. It doesn't work for me, though. I'm guessing
> there's an alternative way of accessing the vendor commands via USB, or the
> interface has changed since then.
> 
> But at least worth a shot on your end. Maybe you guys have more luck doing
> `bccmd chiprev`.

Fails for me with "Can't execute command: No such device or address (6)"

-- 
You are receiving this mail because:
You are the assignee for the bug.



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux