avdt_defs.h revision d7ff47cc64838ecd9d5a8366b75815aab97b6f7d
1/****************************************************************************** 2 * 3 * Copyright (C) 2002-2012 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19/****************************************************************************** 20 * 21 * This contains constants definitions and other information from the AVDTP 22 * specification. This file is intended for use internal to AVDT only. 23 * 24 ******************************************************************************/ 25#ifndef AVDT_DEFS_H 26#define AVDT_DEFS_H 27 28/***************************************************************************** 29** constants 30*****************************************************************************/ 31 32/* signalling packet type */ 33#define AVDT_PKT_TYPE_SINGLE 0 /* single packet */ 34#define AVDT_PKT_TYPE_START 1 /* start packet */ 35#define AVDT_PKT_TYPE_CONT 2 /* continue packet */ 36#define AVDT_PKT_TYPE_END 3 /* end packet */ 37 38/* signalling message type */ 39#define AVDT_MSG_TYPE_CMD 0 /* command */ 40#define AVDT_MSG_TYPE_GRJ 1 /* general reject */ 41#define AVDT_MSG_TYPE_RSP 2 /* response accept */ 42#define AVDT_MSG_TYPE_REJ 3 /* response reject */ 43 44/* signalling messages */ 45#define AVDT_SIG_DISCOVER 1 /* discover */ 46#define AVDT_SIG_GETCAP 2 /* get capabilities */ 47#define AVDT_SIG_SETCONFIG 3 /* set configuration */ 48#define AVDT_SIG_GETCONFIG 4 /* get configuration */ 49#define AVDT_SIG_RECONFIG 5 /* reconfigure */ 50#define AVDT_SIG_OPEN 6 /* open */ 51#define AVDT_SIG_START 7 /* start */ 52#define AVDT_SIG_CLOSE 8 /* close */ 53#define AVDT_SIG_SUSPEND 9 /* suspend */ 54#define AVDT_SIG_ABORT 10 /* abort */ 55#define AVDT_SIG_SECURITY 11 /* security control */ 56#define AVDT_SIG_GET_ALLCAP 12 /* get all capabilities */ 57#define AVDT_SIG_DELAY_RPT 13 /* delay report */ 58 59/* maximum signal value */ 60#define AVDT_SIG_MAX AVDT_SIG_DELAY_RPT 61 62/* used for general reject */ 63#define AVDT_SIG_NONE 0 64 65/* some maximum and minimum sizes of signalling messages */ 66#define AVDT_DISCOVER_REQ_MIN 1 67#define AVDT_DISCOVER_REQ_MAX 124 68 69/* service category information element field values */ 70#define AVDT_CAT_TRANS 1 /* Media Transport */ 71#define AVDT_CAT_REPORT 2 /* Reporting */ 72#define AVDT_CAT_RECOV 3 /* Recovery */ 73#define AVDT_CAT_PROTECT 4 /* Content Protection */ 74#define AVDT_CAT_HDRCMP 5 /* Header Compression */ 75#define AVDT_CAT_MUX 6 /* Multiplexing */ 76#define AVDT_CAT_CODEC 7 /* Media Codec */ 77#define AVDT_CAT_DELAY_RPT 8 /* Delay Reporting */ 78#define AVDT_CAT_MAX_CUR AVDT_CAT_DELAY_RPT 79 80/* min/max lengths of service category information elements */ 81#define AVDT_LEN_TRANS_MIN 0 82#define AVDT_LEN_REPORT_MIN 0 83#define AVDT_LEN_RECOV_MIN 3 84#define AVDT_LEN_PROTECT_MIN 2 85#define AVDT_LEN_HDRCMP_MIN 1 86#define AVDT_LEN_MUX_MIN 3 87#define AVDT_LEN_CODEC_MIN 2 88#define AVDT_LEN_DELAY_RPT_MIN 0 89 90#define AVDT_LEN_TRANS_MAX 0 91#define AVDT_LEN_REPORT_MAX 0 92#define AVDT_LEN_RECOV_MAX 3 93#define AVDT_LEN_PROTECT_MAX 255 94#define AVDT_LEN_HDRCMP_MAX 1 95#define AVDT_LEN_MUX_MAX 7 96#define AVDT_LEN_CODEC_MAX 255 97#define AVDT_LEN_DELAY_RPT_MAX 0 98 99/* minimum possible size of configuration or capabilities data */ 100#define AVDT_LEN_CFG_MIN 2 101 102/* minimum and maximum lengths for different message types */ 103#define AVDT_LEN_SINGLE 1 104#define AVDT_LEN_SETCONFIG_MIN 2 105#define AVDT_LEN_RECONFIG_MIN 1 106#define AVDT_LEN_MULTI_MIN 1 107#define AVDT_LEN_SECURITY_MIN 1 108#define AVDT_LEN_DELAY_RPT 3 109 110/* header lengths for different packet types */ 111#define AVDT_LEN_TYPE_SINGLE 2 /* single packet */ 112#define AVDT_LEN_TYPE_START 3 /* start packet */ 113#define AVDT_LEN_TYPE_CONT 1 /* continue packet */ 114#define AVDT_LEN_TYPE_END 1 /* end packet */ 115 116/* length of general reject message */ 117#define AVDT_LEN_GEN_REJ 2 118 119/* recovery service capabilities information elements */ 120#define AVDT_RECOV_MRWS_MIN 0x01 /* min value for maximum recovery window */ 121#define AVDT_RECOV_MRWS_MAX 0x18 /* max value for maximum recovery window */ 122#define AVDT_RECOV_MNMP_MIN 0x01 /* min value for maximum number of media packets */ 123#define AVDT_RECOV_MNMP_MAX 0x18 /* max value for maximum number of media packets */ 124 125/* SEID value range */ 126#define AVDT_SEID_MIN 0x01 127#define AVDT_SEID_MAX 0x3E 128 129/* first byte of media packet header */ 130#define AVDT_MEDIA_OCTET1 0x80 131 132/* for adaptation layer header */ 133#define AVDT_ALH_LCODE_MASK 0x03 /* coding of length field */ 134#define AVDT_ALH_LCODE_NONE 0x00 /* No length field present. Take length from l2cap */ 135#define AVDT_ALH_LCODE_16BIT 0x01 /* 16bit length field */ 136#define AVDT_ALH_LCODE_9BITM0 0x02 /* 9 bit length field, MSB = 0, 8 LSBs in 1 octet following */ 137#define AVDT_ALH_LCODE_9BITM1 0x03 /* 9 bit length field, MSB = 1, 8 LSBs in 1 octet following */ 138 139#define AVDT_ALH_FRAG_MASK 0x04 /* set this for continuation packet */ 140 141/***************************************************************************** 142** message parsing and building macros 143*****************************************************************************/ 144 145#define AVDT_MSG_PRS_HDR(p, lbl, pkt, msg) \ 146do { \ 147 (lbl) = (*(p) >> 4) & 0x0F; \ 148 (pkt) = (*(p) >> 2) & 0x03; \ 149 (msg) = *(p)++ & 0x03; \ 150} while (0) 151 152#define AVDT_MSG_PRS_DISC(p, seid, in_use, type, tsep) \ 153do { \ 154 (seid) = *(p) >> 2; \ 155 (in_use) = (*(p)++ >> 1) & 0x01; \ 156 (type) = (*(p) >> 4) & 0x0F; \ 157 (tsep) = (*(p)++ >> 3) & 0x01; \ 158} while (0) 159 160#define AVDT_MSG_PRS_SIG(p, sig) \ 161do { \ 162 (sig) = (*(p)++) & 0x3F; \ 163} while (0) 164 165#define AVDT_MSG_PRS_SEID(p, seid) \ 166do { \ 167 (seid) = ((*(p)++) >> 2) & 0x3F; \ 168} while (0) 169 170#define AVDT_MSG_PRS_PKT_TYPE(p, pkt) \ 171do { \ 172 (pkt) = (*(p) >> 2) & 0x03; \ 173} while (0) 174 175#define AVDT_MSG_PRS_OCTET1(p, o_v, o_p, o_x, o_cc) \ 176do { \ 177 (o_v) = (*(p) >> 6) & 0x02; \ 178 (o_p) = (*(p) >> 5) & 0x01; \ 179 (o_x) = (*(p) >> 4) & 0x01; \ 180 (o_cc) = (*(p)++) & 0x0F; \ 181} while (0) 182 183#define AVDT_MSG_PRS_RPT_OCTET1(p, o_v, o_p, o_cc) \ 184do { \ 185 (o_v) = (*(p) >> 6) & 0x02; \ 186 (o_p) = (*(p) >> 5) & 0x01; \ 187 (o_cc) = (*(p)++) & 0x1F; \ 188} while (0) 189 190#define AVDT_MSG_PRS_M_PT(p, m_pt, marker) \ 191do { \ 192 (marker) = (*(p) >> 7) & 0x01; \ 193 (m_pt) = (*(p)++) & 0x7F; \ 194} while (0) 195 196#define AVDT_MSG_BLD_HDR(p, lbl, pkt, msg) \ 197do { \ 198 *(p)++ = (uint8_t) ((lbl) << 4) | ((pkt) << 2) | (msg); \ 199} while (0) 200 201#define AVDT_MSG_BLD_DISC(p, seid, in_use, type, tsep) \ 202do { \ 203 *(p)++ = (uint8_t) (((seid) << 2) | ((in_use) << 1)); \ 204 *(p)++ = (uint8_t) (((type) << 4) | ((tsep) << 3)); \ 205} while (0) 206 207#define AVDT_MSG_BLD_SIG(p, sig) \ 208do { \ 209 *(p)++ = (uint8_t) (sig); \ 210} while (0) 211 212#define AVDT_MSG_BLD_SEID(p, seid) \ 213do { \ 214 *(p)++ = (uint8_t) ((seid) << 2); \ 215} while (0) 216 217#define AVDT_MSG_BLD_ERR(p, err) \ 218do { \ 219 *(p)++ = (uint8_t) (err); \ 220} while (0) 221 222#define AVDT_MSG_BLD_PARAM(p, param) \ 223do { \ 224 *(p)++ = (uint8_t) (param); \ 225} while (0) 226 227#define AVDT_MSG_BLD_NOSP(p, nosp) \ 228do { \ 229 *(p)++ = (uint8_t) (nosp); \ 230} while (0) 231 232#endif /* AVDT_DEFS_H */ 233