Re: [pulseaudio-discuss] Bose QC35 HFP/HSP MTU size

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

 



On 14.09.2017 16:00, Luiz Augusto von Dentz wrote:
Hi Sebastian,

On Thu, Sep 14, 2017 at 2:44 PM, Sebastian Reichel <sre@xxxxxxxxxx> wrote:
Hi,

Bose QC35 are affected by the attached upgrade notice
from Pulseaudio 11. The workaround fixes the problem.
This doesn't make much sense when the problem below refer to the local
adapter not the remote device, so I suspect just about any device
would have similar problem when using an MTU not compatible with the
adapter. Or perhaps this does depend on the packet type the controller
end up negotiating since the spec say:


6.5.2.1 HV1 Packet
The HV1 packet has 10 information bytes. The bytes are protected with a rate
1/3 FEC. No MIC is present. No CRC is present. The payload length is fixed at
240 bits. There is no payload header present.
6.5.2.2 HV2 Packet
The HV2 packet has 20 information bytes. The bytes are protected with a rate
2/3 FEC. No MIC is present. No CRC is present. The payload length is fixed at
240 bits. There is no payload header present.
  can 6.5.2.3 HV3 Packet
The HV3 packet has 30 information bytes. The bytes are not protected by FEC.
No MIC is present. No CRC is present. The payload length is fixed at 240 bits.
There is no payload header present.

So HV1, HV2, HV3 packet size is 240bit = 48 bytes, but for EV and eSCO
the payload is not fixed. So far we had assumed the controller would
do the flow control so we just push data to its buffer but if it does
expect the exact payload depending on the packet type that would
explain why this doesn't work all the time. I have never seem a SCO
buffer over 96 bytes and since packets but packets such as 3-EV5 can
take up to 540 bytes of payload, well I guess we will need to ask the
controller folks how they are handling SCO over HCI because the spec
is not very clear about it.


Actually, the more I look into this, the less I understand. Taking the default
read/write block size of 48, why does it work at all?

According to the specs, HV1/2/3 contain 10/20/30 bytes of audio data. Why
is it then OK if PA writes audio in chunks of 48 bytes? And where does the 48 come from in the first place? Again according to the specs, bluetooth packets
start with a 72 bit access code followed by a 54 bit header, which gives
approximately 16 bytes. Adding the payload, I arrive at 46 bytes packet size
instead of 48 for HV1/2/3. Because EV3 has two additional bytes CRC, this is
the only case where the total packet size sums up to 48 bytes, but still the
payload is only 30 bytes.

The HV1/2/3 and EV3 packets have a maximum payload length of 30 bytes,
so where does the MTU come into this at all for those packet types? Packets
are always smaller than / equal to the minimum MTU.

For EV4/5, 2-EV3/5 and 3-EV3/5 the payload may be larger but is negotiated
during the LMP eSCO setup. So again, where does the MTU come into it?
Does it just limit the maximum possible packet size in these cases?

More questions: Looking at the kernel code for btusb, I see that some devices are known to report the wrong MTU size. For those devices, the kernel returns
64 as MTU. Why is it 64 and not the known working size of 48? Or should PA
subtract the 16 bytes header from the MTU? If yes, I guess for 2-EV and 3-EV
packets, a different value would need to be subtracted because of the
guard/sync/trailer fields. Unfortunately I could not figure out the size of
those fields.

Can somebody provide some insight?

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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