Home | History | Annotate | Download | only in avdt
      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