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) \
146    lbl = *(p) >> 4; \
147    pkt = (*(p) >> 2) & 0x03; \
148    msg = *(p)++ & 0x03;
149
150#define AVDT_MSG_PRS_DISC(p, seid, in_use, type, tsep) \
151    seid = *(p) >> 2; \
152    in_use = (*(p)++ >> 1) & 0x01; \
153    type = *(p) >> 4; \
154    tsep = (*(p)++ >> 3) & 0x01;
155
156#define AVDT_MSG_PRS_SIG(p, sig) \
157    sig = *(p)++ & 0x3F;
158
159#define AVDT_MSG_PRS_SEID(p, seid) \
160    seid = *(p)++ >> 2;
161
162#define AVDT_MSG_PRS_PKT_TYPE(p, pkt) \
163    pkt = (*(p) >> 2) & 0x03;
164
165#define AVDT_MSG_PRS_OCTET1(p, o_v, o_p, o_x, o_cc) \
166    o_v = *(p) >> 6; \
167    o_p = (*(p) >> 5) & 0x01; \
168    o_x = (*(p) >> 4) & 0x01; \
169    o_cc = *(p)++ & 0x0F;
170
171#define AVDT_MSG_PRS_RPT_OCTET1(p, o_v, o_p, o_cc) \
172    o_v = *(p) >> 6; \
173    o_p = (*(p) >> 5) & 0x01; \
174    o_cc = *(p)++ & 0x1F;
175
176#define AVDT_MSG_PRS_M_PT(p, m_pt, marker) \
177    marker = *(p) >> 7; \
178    m_pt = *(p)++ & 0x7F;
179
180#define AVDT_MSG_BLD_HDR(p, lbl, pkt, msg) \
181    *(p)++ = (UINT8) ((lbl) << 4) | ((pkt) << 2) | (msg);
182
183#define AVDT_MSG_BLD_DISC(p, seid, in_use, type, tsep) \
184    *(p)++ = (UINT8) (((seid) << 2) | ((in_use) << 1)); \
185    *(p)++ = (UINT8) (((type) << 4) | ((tsep) << 3));
186
187#define AVDT_MSG_BLD_SIG(p, sig) \
188    *(p)++ = (UINT8) (sig);
189
190#define AVDT_MSG_BLD_SEID(p, seid) \
191    *(p)++ = (UINT8) ((seid) << 2);
192
193#define AVDT_MSG_BLD_ERR(p, err) \
194    *(p)++ = (UINT8) (err);
195
196#define AVDT_MSG_BLD_PARAM(p, param) \
197    *(p)++ = (UINT8) (param);
198
199#define AVDT_MSG_BLD_NOSP(p, nosp) \
200    *(p)++ = (UINT8) (nosp);
201
202#endif /* AVDT_DEFS_H */
203
204