Re: [PATCH v2 22/22] monitor/a2dp: Decode LDAC capabilities

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

 



Hi Andrzej,

On Friday 20 November 2015 15:13:40 Andrzej Kaczmarek wrote:
> > ACL Data RX: Handle 12 flags 0x02 dlen 24
> 
>       Channel: 67 len 20 [PSM 25 mode 0] {chan 1}
>       AVDTP: Get Capabilities (0x02) Response Accept (0x02) type 0x00 label
> 2 nosp 0 Service Category: Media Transport (0x01)
>         Service Category: Media Codec (0x07)
>           Media Type: Audio (0x00)
>           Media Codec: Non-A2DP (0xff)
>             Vendor ID: Sony Corporation (0x0000012d)
>             Vendor Specific Codec ID: LDAC (0x00aa)
>               Unknown: 0x073c
>         Service Category: Content Protection (0x04)
>           Content Protection Type: SCMS-T (0x0002)
> 
> < ACL Data TX: Handle 12 flags 0x02 dlen 26
>       Channel: 2753 len 22 [PSM 25 mode 0] {chan 1}
>       AVDTP: Set Configuration (0x03) Command (0x00) type 0x00 label 5 nosp
> 0 ACP SEID: 5
>         INT SEID: 3
>         Service Category: Media Transport (0x01)
>         Service Category: Media Codec (0x07)
>           Media Type: Audio (0x00)
>           Media Codec: Non-A2DP (0xff)
>             Vendor ID: Sony Corporation (0x0000012d)
>             Vendor Specific Codec ID: LDAC (0x00aa0
>               Unknown: 0x0104
>         Service Category: Content Protection (0x04)
>           Content Protection Type: SCMS-T (0x0002)
> ---
>  monitor/a2dp.c | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
> 
> diff --git a/monitor/a2dp.c b/monitor/a2dp.c
> index d438db0..2077d70 100644
> --- a/monitor/a2dp.c
> +++ b/monitor/a2dp.c
> @@ -50,6 +50,8 @@
>  /* Vendor Specific A2DP Codecs */
>  #define APTX_VENDOR_ID		0x0000004f
>  #define APTX_CODEC_ID		0x0001
> +#define LDAC_VENDOR_ID		0x0000012d
> +#define LDAC_CODEC_ID		0x00aa
> 
>  struct bit_desc {
>  	uint8_t bit;
> @@ -212,6 +214,8 @@ static const char *vndcodec2str(uint32_t vendor_id,
> uint16_t codec_id) {
>  	if (vendor_id == APTX_VENDOR_ID && codec_id == APTX_CODEC_ID)
>  		return "aptX";
> +	else if (vendor_id == LDAC_VENDOR_ID && codec_id == LDAC_CODEC_ID)
> +		return "LDAC";
> 
>  	return "Unknown";
>  }
> @@ -503,6 +507,20 @@ static bool codec_vendor_aptx_cap(uint8_t losc, struct
> l2cap_frame *frame) return true;
>  }
> 
> +static bool codec_vendor_ldac(uint8_t losc, struct l2cap_frame *frame)
> +{
> +	uint16_t cap = 0;
> +
> +	if (losc != 2)
> +		return false;
> +
> +	l2cap_frame_get_le16(frame, &cap);
> +
> +	print_field("%*cUnknown: 0x%04x", BASE_INDENT + 2, ' ', cap);
> +
> +	return true;
> +}
> +
>  static bool codec_vendor_cap(uint8_t losc, struct l2cap_frame *frame)
>  {
>  	uint32_t vendor_id = 0;
> @@ -524,6 +542,8 @@ static bool codec_vendor_cap(uint8_t losc, struct
> l2cap_frame *frame)
> 
>  	if (vendor_id == APTX_VENDOR_ID && codec_id == APTX_CODEC_ID) {
>  		codec_vendor_aptx_cap(losc, frame);
> +	} else if (vendor_id == LDAC_VENDOR_ID && codec_id == LDAC_CODEC_ID) {
> +		codec_vendor_ldac(losc, frame);

Should this return value  from function? Otherwise you may silently ignore 
data if length doesn't match.

>  	} else {
>  		packet_hexdump(frame->data, losc);
>  		l2cap_frame_pull(frame, frame, losc);
> @@ -573,6 +593,8 @@ static bool codec_vendor_cfg(uint8_t losc, struct
> l2cap_frame *frame)
> 
>  	if (vendor_id == APTX_VENDOR_ID && codec_id == APTX_CODEC_ID) {
>  		codec_vendor_aptx_cfg(losc, frame);
> +	} else if (vendor_id == LDAC_VENDOR_ID && codec_id == LDAC_CODEC_ID) {
> +		codec_vendor_ldac(losc, frame);
>  	} else {
>  		packet_hexdump(frame->data, losc);
>  		l2cap_frame_pull(frame, frame, losc);

-- 
pozdrawiam
Szymon Janc
--
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