As per AVRCP specification 1.4 page 32 the command type of
SetBrowsedPlayer is Browsing, so move it to browsing channel.
In addition to that pass the avctp header to avrcp_dump as it is
required to identify if the frame is a command or response.
Adds decoding Assoc data:
...
> ACL data: handle 11 flags 0x02 dlen 53
A2MP: Get AMP Assoc rsp: id 1 status (0) Success
Assoc data [len 39]:
MAC: <address>
Preferred Chan List number of triplets 4
Country code: XXX
Reg ext id 201 reg class 254 coverage class 0
Channel 1 max power 20
Channels 2 - 12 max power 20
Channels 4 - 8 max power 0
PAL CAP: 00 00 00 00
PAL VER: 01 Comp ID: <id> SubVer: 0001
...
Only the first EIR data structure from the LE advertising report
event is dumped. This patch fix this, so all EIR data structure
present in that event is dumped.
Adds support for parsing extended control field. Extended control field
may be used for ERTM and streaming mode (if EWS specified). ext_ctrl
flag resides in cid table. This also fixes P-bit decoding.
If packet_type is not START or SINGLE, we have to continue where we
stopped from previous packet. Therefore we must store where we left on
previous packet due to packet size limit. We store both the number of
attributes missing and the lenght of the last attribute that is missing.
An example interaction for this implementation, obtained with PTS test
TC_TG_MDI_BV_04_C (I reduced the MTU in order to reproduce it here and
values between brackets I added now):
> AVCTP: Command : pt 0x00 transaction 2 pid 0x110e
AV/C: Status: address 0x48 opcode 0x00
Subunit: Panel
Opcode: Vendor Dependent
Company ID: 0x001958
AVRCP: GetElementAttributes: pt Single len 0x0009
Identifier: 0x0 (PLAYING)
AttributeCount: 0x00
< AVCTP: Response : pt 0x00 transaction 2 pid 0x110e
AV/C: Stable: address 0x48 opcode 0x00
Subunit: Panel
Opcode: Vendor Dependent
Company ID: 0x001958
AVRCP: GetElementAttributes: pt Start len 0x0118
AttributeCount: 0x04
Attribute: 0x00000001 (Title)
CharsetID: 0x006a (UTF-8)
AttributeValueLength: 0x001b
AttributeValue: isso eh um titulo mei longo
Attribute: 0x00000003 (Album)
CharsetID: 0x006a (UTF-8)
AttributeValueLength: 0x00fe
AttributeValue: super-long-album-name super-long-album-name
super-long-album-name super-long-album-name super-long-album
super-long-album-name [... snip... ] super-long-album-name-1234
> AVCTP: Command : pt 0x00 transaction 2 pid 0x110e
AV/C: Control: address 0x48 opcode 0x00
Subunit: Panel
Opcode: Vendor Dependent
Company ID: 0x001958
AVRCP: RequestContinuingResponse: pt Single len 0x0001
< AVCTP: Response : pt 0x00 transaction 2 pid 0x110e
AV/C: Stable: address 0x48 opcode 0x00
Subunit: Panel
Opcode: Vendor Dependent
Company ID: 0x001958
AVRCP: GetElementAttributes: pt End len 0x002a
ContinuingAttributeValue: 678900000000000000
Attribute: 0x00000005 (Track Total)
CharsetID: 0x006a (UTF-8)
AttributeValueLength: 0x0002
AttributeValue: 30
Attribute: 0x00000006 (Genre)
CharsetID: 0x006a (UTF-8)
AttributeValueLength: 0x0006
AttributeValue: Gospel
If multiple ACL connections are using identical cid values, the L2CAP
parser will match the first avail cid found in the cid table. This
error often leads to incorrect psm determination, and thus incorrect
parsing of higher-layer frames.
When searching the cid table, a matching cid value must match by
ACL handle as well.