avdtp.c revision e5e4f00bb96381f8971b9b1ca674902e9771626c
1d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann/* 2d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * 3aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann * BlueZ - Bluetooth protocol stack for Linux 4d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * 5e5e4f00bb96381f8971b9b1ca674902e9771626cMarcel Holtmann * Copyright (C) 2004-2011 Marcel Holtmann <marcel@holtmann.org> 6d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * 7d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * 8d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * This program is free software; you can redistribute it and/or modify 9d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * it under the terms of the GNU General Public License as published by 10d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * the Free Software Foundation; either version 2 of the License, or 11d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * (at your option) any later version. 12d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * 13d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * This program is distributed in the hope that it will be useful, 14d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * but WITHOUT ANY WARRANTY; without even the implied warranty of 15d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * GNU General Public License for more details. 17d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * 18d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * You should have received a copy of the GNU General Public License 19d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * along with this program; if not, write to the Free Software 20aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 21d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann * 22d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann */ 23d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann 24aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#ifdef HAVE_CONFIG_H 25aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#include <config.h> 26aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#endif 27aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann 28d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann#include <stdio.h> 29d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann#include <errno.h> 30aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#include <unistd.h> 31aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#include <stdlib.h> 32d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann#include <string.h> 33d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann 34d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann#include <sys/types.h> 35d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann#include <netinet/in.h> 36d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann 37d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann#include "parser.h" 38d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann 39d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmannstatic char *si2str(uint8_t si) 40d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann{ 41d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann switch (si & 0x7f) { 42d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x01: 43d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Discover"; 44d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x02: 45d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Capabilities"; 46d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x03: 47d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Set config"; 48d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x04: 49d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Get config"; 50d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x05: 51d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Reconfigure"; 52d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x06: 53d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Open"; 54d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x07: 55d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Start"; 56d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x08: 57d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Close"; 58d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x09: 59d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Suspend"; 60d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x0a: 61d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Abort"; 62d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x0b: 63d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Security"; 64d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg case 0x0c: 65d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg return "All Capabilities"; 66d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg case 0x0d: 67d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg return "Delay Report"; 68d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann default: 69d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Unknown"; 70d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann } 71d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann} 72d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann 73d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmannstatic char *pt2str(uint8_t hdr) 74d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann{ 75d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann switch (hdr & 0x0c) { 76d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x00: 77d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Single"; 78d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x04: 79d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Start"; 80d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x08: 81d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Cont"; 82d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x0c: 83d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "End"; 84d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann default: 85d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "Unk"; 86d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann } 87d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann} 88d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann 89d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmannstatic char *mt2str(uint8_t hdr) 90d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann{ 91d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann switch (hdr & 0x03) { 92d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann case 0x00: 93d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "cmd"; 94312106553ff029c8970f23011085a0fe8bf25c66Marcel Holtmann case 0x02: 95d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "rsp"; 96312106553ff029c8970f23011085a0fe8bf25c66Marcel Holtmann case 0x03: 97d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann return "rej"; 98d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann default: 9916dddb442a1e249eea3cce08fbac926d1fd19e1eMarcel Holtmann return "rfd"; 100d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann } 101d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann} 102d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann 103563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic char *media2str(uint8_t type) 104563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 105563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (type) { 106563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0: 107563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Audio"; 108563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 1: 109563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Video"; 110563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 2: 111563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Multimedia"; 112563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann default: 113563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Reserved"; 114563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 115563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 116563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 117563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic char *codec2str(uint8_t type, uint8_t codec) 118563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 119563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (type) { 120563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0: 121563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (codec) { 122563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0: 123563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "SBC"; 124563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 1: 125563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "MPEG-1,2 Audio"; 126563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 2: 127563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "MPEG-2,4 AAC"; 128563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 4: 129563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "ATRAC family"; 130563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 255: 131563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "non-A2DP"; 132563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann default: 133563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Reserved"; 134563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 135563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 136563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 1: 137563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (codec) { 138563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 1: 139563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "H.263 baseline"; 140563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 2: 141563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "MPEG-4 Visual Simple Profile"; 142563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 3: 143563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "H.263 profile 3"; 144563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 4: 145563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "H.263 profile 8"; 146563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 255: 147563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Non-VDP"; 148563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann default: 149563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Reserved"; 150563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 151563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 152563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 153452bca1bde500b8a6d830d232c2e3fe27cbe72b6Marcel Holtmann return "Unknown"; 154563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 155563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 156563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic char *cat2str(uint8_t cat) 157563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 158563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (cat) { 159563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 1: 160563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Media Transport"; 161563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 2: 162563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Reporting"; 163563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 3: 164563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Recovery"; 165563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 4: 166563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Content Protection"; 167563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 5: 168563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Header Compression"; 169563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 6: 170563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Multiplexing"; 171563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 7: 172563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Media Codec"; 173d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg case 8: 174d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg return "Delay Reporting"; 175563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann default: 176563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann return "Reserved"; 177563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 178563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 179563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 180563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic void errorcode(int level, struct frame *frm) 181563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 182563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann uint8_t code; 183563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 184563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level, frm); 185563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann code = get_u8(frm); 186563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("Error code %d\n", code); 187563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 188563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 189563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic void acp_seid(int level, struct frame *frm) 190563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 191563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann uint8_t seid; 192563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 193563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level, frm); 194563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann seid = get_u8(frm); 195563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("ACP SEID %d\n", seid >> 2); 196563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 197563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 198563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic void acp_int_seid(int level, struct frame *frm) 199563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 200563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann uint8_t acp_seid, int_seid; 201563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 202563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level, frm); 203563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann acp_seid = get_u8(frm); 204563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann int_seid = get_u8(frm); 205563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("ACP SEID %d - INT SEID %d\n", acp_seid >> 2, int_seid >> 2); 206563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 207563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 208563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic void capabilities(int level, struct frame *frm) 209563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 210563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann uint8_t cat, len; 211563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 212563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann while (frm->len > 1) { 213563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level, frm); 214563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann cat = get_u8(frm); 215563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann len = get_u8(frm); 216563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 217563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann if (cat == 7) { 218563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann uint8_t type, codec, tmp; 219563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 220563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann type = get_u8(frm); 221563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann codec = get_u8(frm); 222563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 223563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("%s - %s\n", cat2str(cat), codec2str(type, codec)); 224563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 225563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (codec) { 226563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0: 227563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann tmp = get_u8(frm); 228563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level + 1, frm); 229500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann if (tmp & 0x80) 230563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("16kHz "); 2317593b7efd60a4efc23515ebc72a2e83a78d474a3Marcel Holtmann if (tmp & 0x40) 232500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann printf("32kHz "); 233500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann if (tmp & 0x20) 234563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("44.1kHz "); 235500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann if (tmp & 0x10) 236563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("48kHz "); 237563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("\n"); 238563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level + 1, frm); 239500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann if (tmp & 0x08) 240563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("Mono "); 2417593b7efd60a4efc23515ebc72a2e83a78d474a3Marcel Holtmann if (tmp & 0x04) 242500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann printf("DualChannel "); 243500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann if (tmp & 0x02) 244563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("Stereo "); 245500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann if (tmp & 0x01) 246563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("JointStereo "); 247563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("\n"); 248563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann tmp = get_u8(frm); 249563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level + 1, frm); 250500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann if (tmp & 0x80) 251563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("4 "); 2527593b7efd60a4efc23515ebc72a2e83a78d474a3Marcel Holtmann if (tmp & 0x40) 253500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann printf("8 "); 254500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann if (tmp & 0x20) 255563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("12 "); 256500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann if (tmp & 0x10) 257563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("16 "); 258563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("Blocks\n"); 259563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level + 1, frm); 2607593b7efd60a4efc23515ebc72a2e83a78d474a3Marcel Holtmann if (tmp & 0x08) 261500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann printf("4 "); 262500ad88a5c71b0c93d2fd93edfd5995f34683f2dMarcel Holtmann if (tmp & 0x04) 263563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("8 "); 264563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("Subbands\n"); 265563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level + 1, frm); 266563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann if (tmp & 0x02) 267563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("SNR "); 268563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann if (tmp & 0x01) 269563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("Loudness "); 270563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("\n"); 271563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann tmp = get_u8(frm); 272563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level + 1, frm); 273563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("Bitpool Range %d-%d\n", tmp, get_u8(frm)); 274563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 275563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann default: 276563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann hex_dump(level + 1, frm, len - 2); 277563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann frm->ptr += (len - 2); 278563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann frm->len -= (len - 2); 279563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 280563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 281563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } else { 282563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("%s\n", cat2str(cat)); 283563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann hex_dump(level + 1, frm, len); 284563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 285563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann frm->ptr += len; 286563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann frm->len -= len; 287563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 288563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 289563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 290563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 291563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic inline void discover(int level, uint8_t hdr, struct frame *frm) 292563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 293563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann uint8_t seid, type; 294563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 295563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (hdr & 0x03) { 296563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x02: 297563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann while (frm->len > 1) { 298563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level, frm); 299563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann seid = get_u8(frm); 300563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann type = get_u8(frm); 301563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("ACP SEID %d - %s %s%s\n", 302563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann seid >> 2, media2str(type >> 4), 303563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann type & 0x08 ? "Sink" : "Source", 304563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann seid & 0x02 ? " (InUse)" : ""); 305563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 306563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 307563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x03: 308563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann errorcode(level, frm); 309563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 310563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 311563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 312563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 313563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic inline void get_capabilities(int level, uint8_t hdr, struct frame *frm) 314563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 315563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (hdr & 0x03) { 316563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x00: 317563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann acp_seid(level, frm); 318563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 319563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x02: 320563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann capabilities(level, frm); 321563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 322563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x03: 323563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann errorcode(level, frm); 324563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 325563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 326563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 327563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 328563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic inline void set_configuration(int level, uint8_t hdr, struct frame *frm) 329563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 330563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann uint8_t cat; 331563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 332563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (hdr & 0x03) { 333563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x00: 334563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann acp_int_seid(level, frm); 335563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann capabilities(level, frm); 336563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 337563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x03: 338563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level, frm); 339563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann cat = get_u8(frm); 340563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("%s\n", cat2str(cat)); 341563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann errorcode(level, frm); 342563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 343563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 344563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 345563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 346563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic inline void get_configuration(int level, uint8_t hdr, struct frame *frm) 347563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 348563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (hdr & 0x03) { 349563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x00: 350563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann acp_seid(level, frm); 351563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x02: 352563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann capabilities(level, frm); 353563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 354563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x03: 355563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann errorcode(level, frm); 356563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 357563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 358563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 359563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 360563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic inline void reconfigure(int level, uint8_t hdr, struct frame *frm) 361563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 362563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann uint8_t cat; 363563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 364563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (hdr & 0x03) { 365563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x00: 366563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann acp_seid(level, frm); 367563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann capabilities(level, frm); 368563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 369563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x03: 370563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann p_indent(level, frm); 371563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann cat = get_u8(frm); 372563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann printf("%s\n", cat2str(cat)); 373563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann errorcode(level, frm); 374563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 375563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 376563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 377563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 378563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic inline void open_close_stream(int level, uint8_t hdr, struct frame *frm) 379563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 380563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (hdr & 0x03) { 381563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x00: 382563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann acp_seid(level, frm); 383563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 384563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x03: 385563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann errorcode(level, frm); 386563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 387563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 388563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 389563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 390563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic inline void start_suspend_stream(int level, uint8_t hdr, struct frame *frm) 391563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 392563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (hdr & 0x03) { 393563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x00: 394563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann while (frm->len > 0) 395563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann acp_seid(level, frm); 396563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 397563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x03: 398563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann acp_seid(level, frm); 399563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann errorcode(level, frm); 400563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 401563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 402563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 403563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 404563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic inline void abort_streaming(int level, uint8_t hdr, struct frame *frm) 405563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 406563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (hdr & 0x03) { 407563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x00: 408563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann acp_seid(level, frm); 409563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 410563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 411563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 412563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 413563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmannstatic inline void security(int level, uint8_t hdr, struct frame *frm) 414563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann{ 415563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (hdr & 0x03) { 416563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x00: 417563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann acp_seid(level, frm); 418563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x02: 419563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann hex_dump(level + 1, frm, frm->len); 420563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann frm->ptr += frm->len; 421563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann frm->len = 0; 422563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 423563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x03: 424563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann errorcode(level, frm); 425563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 426563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 427563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann} 428563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 429d11f7c72ed713424ca8c9548c282954551293550Johan Hedbergstatic inline void delay_report(int level, uint8_t hdr, struct frame *frm) 430d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg{ 431d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg uint8_t seid; 432d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg uint16_t delay; 433d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg 434d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg switch (hdr & 0x03) { 435d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg case 0x00: 436d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg p_indent(level, frm); 437d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg seid = get_u8(frm); 438d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg delay = get_u16(frm); 439d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg printf("ACP SEID %d delay %u.%ums\n", seid >> 2, 440d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg delay / 10, delay % 10); 441d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg break; 442d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg case 0x03: 443d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg errorcode(level, frm); 444d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg break; 445d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg } 446d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg} 447d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg 448d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmannvoid avdtp_dump(int level, struct frame *frm) 449d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann{ 450d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann uint8_t hdr, sid, nsp, type; 451d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann uint16_t seqn; 452d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann uint32_t time, ssrc; 453d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann 4541f2ab27c77f01e4aa213844bc3409634eea24d4aMarcel Holtmann switch (frm->num) { 4551f2ab27c77f01e4aa213844bc3409634eea24d4aMarcel Holtmann case 1: 4561f2ab27c77f01e4aa213844bc3409634eea24d4aMarcel Holtmann p_indent(level, frm); 457c8958756bc90521ac900ebfeb650bc4d7a8c0a45Marcel Holtmann hdr = get_u8(frm); 458d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann 459c8958756bc90521ac900ebfeb650bc4d7a8c0a45Marcel Holtmann nsp = (hdr & 0x0c) == 0x04 ? get_u8(frm) : 0; 460c8958756bc90521ac900ebfeb650bc4d7a8c0a45Marcel Holtmann sid = hdr & 0x08 ? 0x00 : get_u8(frm); 461d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann 462c8958756bc90521ac900ebfeb650bc4d7a8c0a45Marcel Holtmann printf("AVDTP(s): %s %s: transaction %d\n", 463e4218197fc794d7e03d48f644338129ceb9d1e07Marcel Holtmann hdr & 0x08 ? pt2str(hdr) : si2str(sid), mt2str(hdr), hdr >> 4); 464563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann 465563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann switch (sid & 0x7f) { 466563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x01: 467563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann discover(level + 1, hdr, frm); 468563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 469563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x02: 470d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg case 0x0c: 471563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann get_capabilities(level + 1, hdr, frm); 472563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 473563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x03: 474563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann set_configuration(level + 1, hdr, frm); 475563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 476563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x04: 477563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann get_configuration(level + 1, hdr, frm); 478563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 479563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x05: 480563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann reconfigure(level + 1, hdr, frm); 481563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 482563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x06: 483563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann open_close_stream(level + 1, hdr, frm); 484563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 485563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x07: 486563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann start_suspend_stream(level + 1, hdr, frm); 487563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 488563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x08: 489563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann open_close_stream(level + 1, hdr, frm); 490563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 491563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x09: 492563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann start_suspend_stream(level + 1, hdr, frm); 493563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 494563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x0a: 495563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann abort_streaming(level + 1, hdr, frm); 496563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 497563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann case 0x0b: 498563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann security(level + 1, hdr, frm); 499563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann break; 500d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg case 0x0d: 501d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg delay_report(level + 1, hdr, frm); 502d11f7c72ed713424ca8c9548c282954551293550Johan Hedberg break; 503563423c8e0de4403baed6b642fca585634de3c0aMarcel Holtmann } 5041f2ab27c77f01e4aa213844bc3409634eea24d4aMarcel Holtmann 5051f2ab27c77f01e4aa213844bc3409634eea24d4aMarcel Holtmann break; 5061f2ab27c77f01e4aa213844bc3409634eea24d4aMarcel Holtmann 5071f2ab27c77f01e4aa213844bc3409634eea24d4aMarcel Holtmann case 2: 5081f2ab27c77f01e4aa213844bc3409634eea24d4aMarcel Holtmann p_indent(level, frm); 509d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann hdr = get_u8(frm); 510d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann type = get_u8(frm); 511d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann seqn = get_u16(frm); 512d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann time = get_u32(frm); 513d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann ssrc = get_u32(frm); 514d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann 515d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann printf("AVDTP(m): ver %d %s%scc %d %spt %d seqn %d time %d ssrc %d\n", 516d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann hdr >> 6, hdr & 0x20 ? "pad " : "", hdr & 0x10 ? "ext " : "", 517d901b9f0e12271ee0a0baa4a9636d058af92ee1dMarcel Holtmann hdr & 0xf, type & 0x80 ? "mark " : "", type & 0x7f, seqn, time, ssrc); 5181f2ab27c77f01e4aa213844bc3409634eea24d4aMarcel Holtmann break; 519c8958756bc90521ac900ebfeb650bc4d7a8c0a45Marcel Holtmann } 520d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann 521d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann raw_dump(level, frm); 522d12491e536bff28ee5c3895c6de55eefd052c93dMarcel Holtmann} 523