--- tools/parser/avdtp.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/tools/parser/avdtp.c b/tools/parser/avdtp.c index 18569c895..a21410f5a 100644 --- a/tools/parser/avdtp.c +++ b/tools/parser/avdtp.c @@ -155,6 +155,12 @@ static char *vndcodec2str(uint32_t vendor, uint16_t vndcodec) { if (vendor == 0x0000004f && vndcodec == 0x0001) return "aptX"; + else if (vendor == 0x0000000a && vndcodec == 0x0001) + return "FastStream"; + else if (vendor == 0x0000000a && vndcodec == 0x0002) + return "aptX Low Latency"; + else if (vendor == 0x000000d7 && vndcodec == 0x0024) + return "aptX HD"; else if (vendor == 0x0000012d && vndcodec == 0x00aa) return "LDAC"; return "Unknown"; @@ -403,8 +409,10 @@ static void capabilities(int level, struct frame *frm) printf("%s\n", tmp & 0x80 ? "VBR" : ""); break; case 255: - if (vendor == 0x0000004f && - vndcodec == 0x0001) { + if ((vendor == 0x0000004f && vndcodec == 0x0001) || + (vendor == 0x0000000a && vndcodec == 0x0002) || + (vendor == 0x000000d7 && vndcodec == 0x0024)) { + /* aptX, aptX Low Latency, aptX HD */ tmp = p_get_u8(frm); p_indent(level + 1, frm); if (tmp & 0x80) @@ -422,7 +430,51 @@ static void capabilities(int level, struct frame *frm) if (tmp & 0x01) printf("Mono "); printf("\n"); - break; + } else if (vendor == 0x0000000a && vndcodec == 0x0001) { + /* FastStream */ + tmp = p_get_u8(frm); + freq = p_get_u8(frm); + if (tmp & 0x1) { + p_indent(level + 1, frm); + printf("Sink "); + if (freq & 0x2) + printf("44.1kHz "); + if (freq & 0x1) + printf("48kHz "); + printf("\n"); + } + if (tmp & 0x2) { + p_indent(level + 1, frm); + printf("Source "); + if (freq & 0x20) + printf("16kHz "); + printf("\n"); + } + } else if (vendor == 0x0000012d && vndcodec == 0x00aa) { + /* LDAC */ + tmp = p_get_u8(frm); + p_indent(level + 1, frm); + if (tmp & 0x20) + printf("44.1kHz "); + if (tmp & 0x10) + printf("48kHz "); + if (tmp & 0x08) + printf("88.2kHz "); + if (tmp & 0x04) + printf("96kHz "); + if (tmp & 0x02) + printf("176.4kHz "); + if (tmp & 0x01) + printf("192kHz "); + printf("\n"); + p_indent(level + 1, frm); + if (tmp & 0x01) + printf("Stereo "); + if (tmp & 0x02) + printf("Dual "); + if (tmp & 0x04) + printf("Mono "); + printf("\n"); } else { hex_dump(level + 1, frm, len - 8); frm->ptr += (len - 8); -- 2.11.0