Hi Luiz, >> Here is the piece of the btmon trace. What should be the next step? >> >> < ACL Data TX: Handle 256 flags 0x00 dlen 6 >> Channel: 66 len 2 [PSM 25 mode Basic (0x00)] {chan 2} >> AVDTP: Discover (0x01) Command (0x00) type 0x00 label 3 nosp 0 >>> HCI Event: Number of Completed Packets (0x13) plen 5 >> Num handles: 1 >> Handle: 256 >> Count: 1 >>> HCI Event: Number of Completed Packets (0x13) plen 5 >> Num handles: 1 >> Handle: 256 >> Count: 1 >>> ACL Data RX: Handle 256 flags 0x02 dlen 8 >> Channel: 66 len 4 [PSM 25 mode Basic (0x00)] {chan 2} >> AVDTP: Discover (0x01) Response Accept (0x02) type 0x00 label 3 nosp 0 >> ACP SEID: 1 >> Media Type: Audio (0x00) >> SEP Type: SNK (0x01) >> In use: No >> < ACL Data TX: Handle 256 flags 0x00 dlen 18 >> Channel: 66 len 14 [PSM 25 mode Basic (0x00)] {chan 2} >> AVDTP: Set Configuration (0x03) Command (0x00) type 0x00 label 4 nosp 0 >> ACP SEID: 1 >> INT SEID: 1 >> Service Category: Media Transport (0x01) >> Service Category: Media Codec (0x07) >> Media Type: Audio (0x00) >> Media Codec: SBC (0x00) >> Frequency: 48000 (0x10) >> Channel Mode: Joint Stereo (0x01) >> Block Length: 16 (0x10) >> Subbands: 8 (0x04) >> Allocation Method: Loudness (0x01) >> Minimum Bitpool: 2 >> Maximum Bitpool: 64 >>> HCI Event: Number of Completed Packets (0x13) plen 5 >> Num handles: 1 >> Handle: 256 >> Count: 1 >>> ACL Data RX: Handle 256 flags 0x02 dlen 6 >> Channel: 66 len 2 [PSM 25 mode Basic (0x00)] {chan 2} >> AVDTP: Set Configuration (0x03) Response Accept (0x02) type 0x00 label 4 nosp 0 >> < ACL Data TX: Handle 256 flags 0x00 dlen 7 >> Channel: 66 len 3 [PSM 25 mode Basic (0x00)] {chan 2} >> AVDTP: Open (0x06) Command (0x00) type 0x00 label 5 nosp 0 >> ACP SEID: 1 >>> HCI Event: Number of Completed Packets (0x13) plen 5 >> Num handles: 1 >> Handle: 256 >> Count: 1 >>> ACL Data RX: Handle 256 flags 0x02 dlen 6 >> Channel: 66 len 2 [PSM 25 mode Basic (0x00)] {chan 2} >> AVDTP: Open (0x06) Response Accept (0x02) type 0x00 label 5 nosp 0 >> < ACL Data TX: Handle 256 flags 0x00 dlen 12 >> L2CAP: Connection Request (0x02) ident 6 len 4 >> PSM: 25 (0x0019) >> Source CID: 67 >>> HCI Event: Number of Completed Packets (0x13) plen 5 >> Num handles: 1 >> Handle: 256 >> Count: 1 >>> ACL Data RX: Handle 256 flags 0x02 dlen 16 >> L2CAP: Connection Response (0x03) ident 6 len 8 >> Destination CID: 67 >> Source CID: 67 >> Result: Connection pending (0x0001) >> Status: No further information available (0x0000) >>> ACL Data RX: Handle 256 flags 0x02 dlen 16 >> L2CAP: Connection Response (0x03) ident 6 len 8 >> Destination CID: 67 >> Source CID: 67 >> Result: Connection successful (0x0000) >> Status: No further information available (0x0000) >> < ACL Data TX: Handle 256 flags 0x00 dlen 23 >> L2CAP: Configure Request (0x04) ident 7 len 15 >> Destination CID: 67 >> Flags: 0x0000 >> Option: Retransmission and Flow Control (0x04) [mandatory] >> Mode: Basic (0x00) >> TX window size: 0 >> Max transmit: 0 >> Retransmission timeout: 0 >> Monitor timeout: 0 >> Maximum PDU size: 0 >>> ACL Data RX: Handle 256 flags 0x02 dlen 23 >> L2CAP: Configure Request (0x04) ident 222 len 15 >> Destination CID: 67 >> Flags: 0x0000 >> Option: Retransmission and Flow Control (0x04) [mandatory] >> Mode: Streaming (0x04) > > Looks like we should be using BT_IO_MODE_STREAMING with MPS then. > >> TX window size: 0 >> Max transmit: 0 >> Retransmission timeout: 0 >> Monitor timeout: 0 >> Maximum PDU size: 672 >> < ACL Data TX: Handle 256 flags 0x00 dlen 25 >> L2CAP: Configure Response (0x05) ident 222 len 17 >> Source CID: 67 >> Flags: 0x0000 >> Result: Failure - unacceptable parameters (0x0001) >> Option: Retransmission and Flow Control (0x04) [mandatory] >> Mode: Basic (0x00) >> TX window size: 0 >> Max transmit: 0 >> Retransmission timeout: 0 >> Monitor timeout: 0 >> Maximum PDU size: 672 >>> HCI Event: Number of Completed Packets (0x13) plen 5 >> Num handles: 1 >> Handle: 256 >> Count: 1 >>> HCI Event: Number of Completed Packets (0x13) plen 5 >> Num handles: 1 >> Handle: 256 >> Count: 1 >>> ACL Data RX: Handle 256 flags 0x02 dlen 29 >> L2CAP: Configure Response (0x05) ident 7 len 21 >> Source CID: 67 >> Flags: 0x0000 >> Result: Success (0x0000) >> Option: Maximum Transmission Unit (0x01) [mandatory] >> MTU: 672 >> Option: Retransmission and Flow Control (0x04) [mandatory] >> Mode: Basic (0x00) >> TX window size: 0 >> Max transmit: 0 >> Retransmission timeout: 0 >> Monitor timeout: 0 >> Maximum PDU size: 0 >>> ACL Data RX: Handle 256 flags 0x02 dlen 12 >> L2CAP: Configure Request (0x04) ident 223 len 4 >> Destination CID: 67 >> Flags: 0x0000 >> < ACL Data TX: Handle 256 flags 0x00 dlen 18 >> L2CAP: Configure Response (0x05) ident 223 len 10 >> Source CID: 67 >> Flags: 0x0000 >> Result: Success (0x0000) >> Option: Maximum Transmission Unit (0x01) [mandatory] >> MTU: 672 >> >> Thanks. >> >> On Mon, Jun 8, 2020 at 3:58 PM Marcel Holtmann <marcel@xxxxxxxxxxxx> wrote: >>> >>> Hi Yun-hao, >>> >>>> I think it is more likely to be the PTS's limitations. I realized the >>>> problem is in the media channel not in the signaling channel. PTS >>>> wants to use streaming mode, but bluez rejects it, and then PTS aborts >>>> the test. According to the MPS 1.0 Spec 6.2, L2CAP streaming mode is >>>> the recommendation for optimization when using MPS media control >>>> channels, so I think bluez doesn't do anything wrong during this test. >>> >>> do you have the btmon trace for this. I think we should accept ERTM on the media channel. The unfortunate part is that control and media channels both use PSM 25 and so we can’t be really selective when we are the acceptor. If MPS wants us to accept ERTM on the media channel we should allow. For all I care we can even accept it on the control channel, but it is just a waste of overhead on the L2CAP headers. Actually the new Enhanced Flow Control mode on BR/EDR would be more efficient for A2DP. > > Perhaps we can default to Streaming mode if MPS is enabled, we could > actually do use it only for the transport channel while initiating but > as a receiver I don't think it is possible to change after listen. yep, as acceptor we would have to enable streaming mode and allow to downgrade to basic mode. For initiator we can separate between control channel in basic mode and media channel in streaming mode. Regards Marcel