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 /* 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