avdt_defs.h revision 911d1ae03efec2d54c3b1b605589d790d1745488
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/* min value for maximum recovery window */
121#define AVDT_RECOV_MRWS_MIN 0x01
122/* max value for maximum recovery window */
123#define AVDT_RECOV_MRWS_MAX 0x18
124/* min value for maximum number of media packets */
125#define AVDT_RECOV_MNMP_MIN 0x01
126/* max value for maximum number of media packets */
127#define AVDT_RECOV_MNMP_MAX 0x18
128
129/* SEID value range */
130#define AVDT_SEID_MIN 0x01
131#define AVDT_SEID_MAX 0x3E
132
133/* first byte of media packet header */
134#define AVDT_MEDIA_OCTET1 0x80
135
136/* for adaptation layer header */
137/* coding of length field */
138#define AVDT_ALH_LCODE_MASK 0x03
139/* No length field present. Take length from l2cap */
140#define AVDT_ALH_LCODE_NONE 0x00
141/* 16bit length field */
142#define AVDT_ALH_LCODE_16BIT 0x01
143/* 9 bit length field, MSB = 0, 8 LSBs in 1 octet following */
144#define AVDT_ALH_LCODE_9BITM0 0x02
145/* 9 bit length field, MSB = 1, 8 LSBs in 1 octet following */
146#define AVDT_ALH_LCODE_9BITM1 0x03
147
148/* set this for continuation packet */
149#define AVDT_ALH_FRAG_MASK 0x04
150
151/*****************************************************************************
152 * message parsing and building macros
153 ****************************************************************************/
154
155#define AVDT_MSG_PRS_HDR(p, lbl, pkt, msg) \
156  do {                                     \
157    (lbl) = (*(p) >> 4) & 0x0F;            \
158    (pkt) = (*(p) >> 2) & 0x03;            \
159    (msg) = *(p)++ & 0x03;                 \
160  } while (0)
161
162#define AVDT_MSG_PRS_DISC(p, seid, in_use, type, tsep) \
163  do {                                                 \
164    (seid) = *(p) >> 2;                                \
165    (in_use) = (*(p)++ >> 1) & 0x01;                   \
166    (type) = (*(p) >> 4) & 0x0F;                       \
167    (tsep) = (*(p)++ >> 3) & 0x01;                     \
168  } while (0)
169
170#define AVDT_MSG_PRS_SIG(p, sig) \
171  do {                           \
172    (sig) = (*(p)++) & 0x3F;     \
173  } while (0)
174
175#define AVDT_MSG_PRS_SEID(p, seid)   \
176  do {                               \
177    (seid) = ((*(p)++) >> 2) & 0x3F; \
178  } while (0)
179
180#define AVDT_MSG_PRS_PKT_TYPE(p, pkt) \
181  do {                                \
182    (pkt) = (*(p) >> 2) & 0x03;       \
183  } while (0)
184
185#define AVDT_MSG_PRS_OCTET1(p, o_v, o_p, o_x, o_cc) \
186  do {                                              \
187    (o_v) = (*(p) >> 6) & 0x02;                     \
188    (o_p) = (*(p) >> 5) & 0x01;                     \
189    (o_x) = (*(p) >> 4) & 0x01;                     \
190    (o_cc) = (*(p)++) & 0x0F;                       \
191  } while (0)
192
193#define AVDT_MSG_PRS_RPT_OCTET1(p, o_v, o_p, o_cc) \
194  do {                                             \
195    (o_v) = (*(p) >> 6) & 0x02;                    \
196    (o_p) = (*(p) >> 5) & 0x01;                    \
197    (o_cc) = (*(p)++) & 0x1F;                      \
198  } while (0)
199
200#define AVDT_MSG_PRS_M_PT(p, m_pt, marker) \
201  do {                                     \
202    (marker) = (*(p) >> 7) & 0x01;         \
203    (m_pt) = (*(p)++) & 0x7F;              \
204  } while (0)
205
206#define AVDT_MSG_BLD_HDR(p, lbl, pkt, msg)                 \
207  do {                                                     \
208    *(p)++ = (uint8_t)((lbl) << 4) | ((pkt) << 2) | (msg); \
209  } while (0)
210
211#define AVDT_MSG_BLD_DISC(p, seid, in_use, type, tsep)   \
212  do {                                                   \
213    *(p)++ = (uint8_t)(((seid) << 2) | ((in_use) << 1)); \
214    *(p)++ = (uint8_t)(((type) << 4) | ((tsep) << 3));   \
215  } while (0)
216
217#define AVDT_MSG_BLD_SIG(p, sig) \
218  do {                           \
219    *(p)++ = (uint8_t)(sig);     \
220  } while (0)
221
222#define AVDT_MSG_BLD_SEID(p, seid)   \
223  do {                               \
224    *(p)++ = (uint8_t)((seid) << 2); \
225  } while (0)
226
227#define AVDT_MSG_BLD_ERR(p, err) \
228  do {                           \
229    *(p)++ = (uint8_t)(err);     \
230  } while (0)
231
232#define AVDT_MSG_BLD_PARAM(p, param) \
233  do {                               \
234    *(p)++ = (uint8_t)(param);       \
235  } while (0)
236
237#define AVDT_MSG_BLD_NOSP(p, nosp) \
238  do {                             \
239    *(p)++ = (uint8_t)(nosp);      \
240  } while (0)
241
242#endif /* AVDT_DEFS_H */
243