Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2001-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 file contains codec definitions from Widcomm's Universal Embedded
     22  *  Drivers API.
     23  *
     24  ******************************************************************************/
     25 
     26 #ifndef UCODEC_H
     27 #define UCODEC_H
     28 
     29 #include "bt_target.h"
     30 #ifdef __cplusplus
     31 extern "C" {
     32 #endif
     33 
     34 
     35 /*******************************************************************************
     36 ** Codec APIs
     37 *******************************************************************************/
     38 
     39 /**** Codec IDs ****/
     40 #define UCODEC_ID_1             0
     41 #define UCODEC_ID_2             1
     42 #define UCODEC_ID_3             2
     43 #define UCODEC_ID_4             3
     44 #define UCODEC_NUMBER           4
     45 
     46 typedef UINT8 tUCODEC_ID;
     47 
     48 /**** Status ****/
     49 #define UCODEC_SUCCESS              0x00
     50 #define UCODEC_TX_DONE              0x01
     51 #define UCODEC_RX_READY             0x02
     52 #define UCODEC_FLOW_CTRL_ON         0x03
     53 #define UCODEC_FLOW_CTRL_OFF        0x04
     54 #define UCODEC_OVERFLOW             0x05
     55 #define UCODEC_UNSUPORTED_CNF       0x06
     56 #define UCODEC_WRONG_PARAM          0x07
     57 #define UCODEC_NOT_CONFIGURED       0x08
     58 #define UCODEC_OUT_OF_MEMORY        0x09
     59 #define UCODEC_GENERIC_ERROR        0x0a
     60 #define UCODEC_RECOVERABLE_ERROR    0x0b
     61 #define UCODEC_UNRECOVERABLE_ERROR  0x0c
     62 #define UCODEC_LOW_LEVEL_DRIVER_ERROR   (0x0d)
     63 
     64 typedef UINT8 tUCODEC_STATUS;
     65 
     66 /**** Media type ****/
     67 #define UCODEC_MEDIA_TYPE_AUDIO 0
     68 #define UCODEC_MEDIA_TYPE_VIDEO 1
     69 #define UCODEC_MEDIA_TYPE_MULTI 2
     70 
     71 typedef UINT8 tUCODEC_MEDIA_TYPE;
     72 
     73 /**** Audio Codec type ****/
     74 #define UCODEC_AUDIO_SBC        0
     75 #define UCODEC_AUDIO_M12_LAYER1 1   /* layer1 (mp1) */
     76 #define UCODEC_AUDIO_M12_LAYER2 2   /* layer2 (mp2) */
     77 #define UCODEC_AUDIO_M12_LAYER3 3   /* layer3 (mp3) */
     78 #define UCODEC_AUDIO_M24_2LC    4   /* MPEG-2 AAC LC */
     79 #define UCODEC_AUDIO_M24_4LC    5   /* MPEG-4 AAC LC */
     80 #define UCODEC_AUDIO_M24_4LTP   6   /* MPEG-4 AAC LTP */
     81 #define UCODEC_AUDIO_M24_4S     7   /* MPEG-4 AAC scalable */
     82 #define UCODEC_AUDIO_VOLUME     8   /* Volume settings */
     83 #define UCODEC_AUDIO_BALANCE    9   /* Balance settings */
     84 
     85 typedef UINT8 tUCODEC_AUDIO_FEAT_TYPE;
     86 
     87 /**** Video Codec type -> TODO ****/
     88 /*TBD*/
     89 
     90 typedef UINT8 tUCODEC_VIDEO_FEAT_TYPE;
     91 
     92 /**** SBC sample frequency ****/
     93 #define UCODEC_SBC_SMP_FREQ_16    0  /* 16 */
     94 #define UCODEC_SBC_SMP_FREQ_32    1  /* 23 */
     95 #define UCODEC_SBC_SMP_FREQ_44    2  /* 44.1 */
     96 #define UCODEC_SBC_SMP_FREQ_48    3  /* 48 */
     97 
     98 typedef UINT8 tUCODEC_SBC_SMP_FREQ;
     99 
    100 /**** SBC sample frequency ****/
    101 #define UCODEC_SBC_SUBBAND_4    4
    102 #define UCODEC_SBC_SUBBAND_8    8
    103 
    104 typedef UINT8 tUCODEC_SBC_SUBBAND;
    105 /**** Allocation method ****/
    106 #define UCODEC_SBC_ALLOC_MD_S   0   /* SNR */
    107 #define UCODEC_SBC_ALLOC_MD_L   1   /* loundess */
    108 
    109 typedef UINT8 tUCODEC_SBC_ALLOC_MD;
    110 
    111 /**** MPEG sample frequency ****/
    112 #define UCODEC_M12_SMP_FREQ_16    0   /* 16 */
    113 #define UCODEC_M12_SMP_FREQ_22    1   /* 22 */
    114 #define UCODEC_M12_SMP_FREQ_24    2  /* 24 */
    115 #define UCODEC_M12_SMP_FREQ_32    3  /* 32 */
    116 #define UCODEC_M12_SMP_FREQ_44    4  /* 44 */
    117 #define UCODEC_M12_SMP_FREQ_48    5  /* 48 */
    118 
    119 typedef UINT8 tUCODEC_M12_SMP_FREQ;
    120 
    121 /**** Channel mode ****/
    122 #define UCODEC_CHN_MONO            0
    123 #define UCODEC_CHN_DUAL            1
    124 #define UCODEC_CHN_STEREO          2
    125 #define UCODEC_CHN_JOINT_STEREO    3
    126 
    127 typedef UINT8 tUCODEC_CH_MODE;
    128 /**** Audio Codec type ****/
    129 #define UCODEC_M24_SMP_FREQ_8     0   /*  8 */
    130 #define UCODEC_M24_SMP_FREQ_11    1   /* 11 */
    131 #define UCODEC_M24_SMP_FREQ_12    2   /* 12 */
    132 #define UCODEC_M24_SMP_FREQ_16    3   /* 16 */
    133 #define UCODEC_M24_SMP_FREQ_22    4   /* 22.05 */
    134 #define UCODEC_M24_SMP_FREQ_24    5   /* 24 */
    135 #define UCODEC_M24_SMP_FREQ_32    6   /* 32 */
    136 #define UCODEC_M24_SMP_FREQ_44    7   /* 44.1 */
    137 #define UCODEC_M24_SMP_FREQ_48    8   /* 48 */
    138 #define UCODEC_M24_SMP_FREQ_64    9   /* 64 */
    139 #define UCODEC_M24_SMP_FREQ_88    10  /* 88 */
    140 #define UCODEC_M24_SMP_FREQ_96    11  /* 96 */
    141 
    142 typedef UINT8 tUCODEC_M24_SMP_FREQ;
    143 
    144 /**** Codec configuration structure ****/
    145 typedef struct tUCODEC_CNF_SBC_TAG
    146 {
    147     tUCODEC_SBC_SMP_FREQ    SampleFreq;
    148     tUCODEC_CH_MODE         ChannelMode;
    149     UINT16                  Offset;     /* GKI buffer based offset for UCODEC_ReadBuf */
    150     UINT16                  MtuSize;    /* Max buffer len for UCODEC_ReadBuf*/
    151     UINT8                   PoolId;     /* GKI pool ID for UCODEC_ReadBuf */
    152     UINT8                   NumBlock;   /* Number of block in block unit : 4 blocks 8 blocks 12 blocks 16 blocks are the possible value */
    153     UINT8                   Subband;
    154     tUCODEC_SBC_ALLOC_MD    AllocMthd;
    155     UINT8                   MinBitPool;
    156     UINT8                   MaxBitPool;
    157 } tUCODEC_CNF_SBC;
    158 
    159 typedef struct tUCODEC_CNF_M12_TAG
    160 {
    161     tUCODEC_CH_MODE         ChannelMode; /* Mono, Dual, stereo, joint stereo */
    162     tUCODEC_M12_SMP_FREQ    SampleFreq; /* Sample freq: 16, 22, 24, 32, 44, 48 */
    163     UINT16                  BitRate;    /* Bit rate in bit per sec */
    164     UINT16                  Offset;     /* GKI buffer based offset for UCODEC_ReadBuf */
    165     UINT16                  MtuSize;    /* Max buffer len for UCODEC_ReadBuf*/
    166     UINT8                   PoolId;     /* GKI pool ID for UCODEC_ReadBuf */
    167     BOOLEAN                 VBR;        /* Variable Bit Rate */
    168     BOOLEAN                 CRC_On;     /* CRC error detection */
    169     BOOLEAN                 MPF;        /* Media payload format */
    170 } tUCODEC_CNF_M12;
    171 
    172 typedef struct tUCODEC_CNF_M24_TAG
    173 {
    174     tUCODEC_M24_SMP_FREQ    SampleFreq; /* Sample freq: 8, 11, 12, 16, 22.05, 24, 32, 44.1, 48, 64, 88, 96 */
    175     UINT32                  BitRate;    /* Bit rate */
    176     UINT16                  Offset;     /* GKI buffer based offset for UCODEC_ReadBuf */
    177     UINT16                  MtuSize;    /* Max buffer len for UCODEC_ReadBuf*/
    178     UINT8                   PoolId;     /* GKI pool ID for UCODEC_ReadBuf */
    179     UINT8                   Chanels;    /* 1 or 2 chanels */
    180 } tUCODEC_CNF_M24;
    181 
    182 
    183 typedef union tUCODEC_CODEC_TYPE_TAG
    184 {
    185     tUCODEC_AUDIO_FEAT_TYPE AudioType;
    186     tUCODEC_VIDEO_FEAT_TYPE VideoType;
    187 } tUCODEC_CODEC_TYPE;
    188 
    189 typedef union tUCODEC_FEATURE_TAG
    190 {
    191     /* Add here the audio feature structure */
    192     tUCODEC_CNF_SBC SBCConfig;
    193     tUCODEC_CNF_M12 M12Config;
    194     tUCODEC_CNF_M24 M24Config;
    195     UINT8           Volume;     /* 0 to mute. 0xFF for the max volume */
    196     UINT8           Balance;    /* 0->100% right, 255->100% left */
    197     /* Add here the video feature structure */
    198     /* TBD */
    199 } tUCODEC_FEATURE;
    200 
    201 typedef struct tUCODEC_CNF_TAG
    202 {
    203     tUCODEC_MEDIA_TYPE  MediaType;
    204     tUCODEC_CODEC_TYPE  Type;
    205     tUCODEC_FEATURE     Feature;
    206 } tUCODEC_CNF;
    207 
    208 typedef struct tUCODEC_BUF_INFO_TAG
    209 {
    210     UINT8       NumOfFrames;
    211     UINT32      TimesStamp;
    212 } tUCODEC_BUF_INFO;
    213 
    214 
    215 /******************************************************************************
    216 **
    217 ** Function         tUCODEC_CBACK_PTR
    218 **
    219 ** Description      This call back report CODEC indication.
    220 **                  It report codec error as well as flow onfrol indication.
    221 **
    222 **                  Input : CodecId: Id of the codec that calls this call back.
    223 **                          Status: ->UCODEC_FLOW_CTRL_OFF if the Tx Q just
    224 **                                  went below the low watermark
    225 **                                  ->UCODEC_RX_READY if data are ready to be
    226 **                                  read. This olny hapens when the Rx Q was
    227 **                                  empty before receiving data.
    228 **                                  ->UCODEC_INTERNAL_ERROR if something went
    229 **                                  wrong with the driver
    230 **
    231 **                  Output Parameters : None
    232 **
    233 ** Returns          None.
    234 **
    235 ******************************************************************************/
    236 typedef void (* tUCODEC_CBACK_PTR)(tUCODEC_ID, tUCODEC_STATUS);
    237 
    238 /*******************************************************************************
    239 ** Function Prototypes
    240 *******************************************************************************/
    241 
    242 /******************************************************************************
    243 **
    244 ** Function         UCODEC_Init
    245 **
    246 ** Description      Startup initialisation function. This function is called
    247 **                  before any orther function of UCODEC it initialize UCODEC
    248 **                  internal structure an the external codec.
    249 **
    250 **                  Input : CodecId: Id of the codec to perform the operation on.
    251 **
    252 **                  Output Parameters : None
    253 **
    254 ** Returns          UCODEC_SUCCESS if The action was performed with sucess.
    255 **                  Error code else.
    256 **
    257 ******************************************************************************/
    258 BT_API extern tUCODEC_STATUS    UCODEC_Init       (void *);
    259 
    260 /******************************************************************************
    261 **
    262 ** Function         UCODEC_Configure
    263 **
    264 ** Description      Initialise the CODEC for a particular stream.
    265 **
    266 **
    267 **                  Input : CodecId: Id of the codec to perform the operation on.
    268 **                          CbackPrt: Call back pointer for codec feedback.
    269 **                          pConfig: Pointer on a codec configuration structure.
    270 **
    271 **                  Output Parameters : None
    272 **
    273 ** Returns          UCODEC_SUCCESS if The action was performed with sucess.
    274 **
    275 ******************************************************************************/
    276 BT_API extern tUCODEC_STATUS    UCODEC_Configure  (tUCODEC_ID, tUCODEC_CBACK_PTR, tUCODEC_CNF *);
    277 
    278 /******************************************************************************
    279 **
    280 ** Function         UCODEC_FlushTx
    281 **
    282 ** Description      Fluch Tx buffer Q.
    283 **
    284 **                  Input : CodecId: Id of the codec to perform the operation on.
    285 **
    286 **                  Output Parameters : None
    287 **
    288 ** Returns          UCODEC_SUCCESS if The action was performed with sucess.
    289 **                  Error code else.
    290 **
    291 ******************************************************************************/
    292 BT_API extern tUCODEC_STATUS    UCODEC_FlushTx      (tUCODEC_ID);
    293 
    294 /******************************************************************************
    295 **
    296 ** Function         UCODEC_FlushRx
    297 **
    298 ** Description      Fluch Rx buffer Q.
    299 **
    300 **                  Input : CodecId: Id of the codec to perform the operation on.
    301 **
    302 **                  Output Parameters : None
    303 **
    304 ** Returns          UCODEC_SUCCESS if The action was performed with sucess.
    305 **                  Error code else.
    306 **
    307 ******************************************************************************/
    308 BT_API extern tUCODEC_STATUS    UCODEC_FlushRx      (tUCODEC_ID);
    309 
    310 /******************************************************************************
    311 **
    312 ** Function         UCODEC_WriteBuf
    313 **
    314 ** Description      Send a buffer to the codec.
    315 **
    316 **                  Input : CodecId: Id of the codec to perform the operation on.
    317 **                          pBuf: Pointer onto the GKI buffer to be send to the CODEC.
    318 **
    319 **                  Output Parameters : None
    320 **
    321 ** Returns          UCODEC_SUCCESS if The action was performed with sucess.
    322 **                  UCODEC_FLOW_CTRL_ON if The codec buffer Q had reach a UCODEC_HIGH_WM
    323 **                                      watermark. The buffer is queued
    324 **                  UCODEC_OVERFLOW if The codec buffer Q had reach a critical
    325 **                                     watermark. The buffer is dropped.
    326 **
    327 ******************************************************************************/
    328 BT_API extern tUCODEC_STATUS    UCODEC_WriteBuf   (tUCODEC_ID, BT_HDR *);
    329 
    330 /******************************************************************************
    331 **
    332 ** Function         UCODEC_ReadBuf
    333 **
    334 ** Description      Get a buffer from the codec.
    335 **
    336 **                  Input : CodecId: Id of the codec to perform the operation on.
    337 **
    338 **                  Output Parameters : None
    339 **
    340 ** Returns          Pointer on the GKI buffer. NULL if the Rx Q is empty
    341 **
    342 ******************************************************************************/
    343 BT_API extern tUCODEC_STATUS  UCODEC_ReadBuf    (tUCODEC_ID, BT_HDR **, tUCODEC_BUF_INFO *);
    344 
    345 /******************************************************************************
    346 **
    347 ** Function         UCODEC_Close
    348 **
    349 ** Description      This function is called to put the codec in low power mode
    350 **
    351 **
    352 **                  Input : CodecId: Id of the codec to perform the operation on.
    353 **
    354 **                  Output Parameters : None
    355 **
    356 ** Returns          UCODEC_SUCCESS : The action was performed with sucess.
    357 **                  Error code else.
    358 **
    359 ******************************************************************************/
    360 BT_API extern tUCODEC_STATUS   UCODEC_Close   (tUCODEC_ID);
    361 
    362 /******************************************************************************
    363 **
    364 ** Function         UCODEC_Open
    365 **
    366 ** Description      This function is called to resume the codec from low power
    367 **                  mode after UCODEC_Close had been called. It will put the
    368 **                  codec in the state it was before UCODEC_Close being called.
    369 **
    370 **                  Input : CodecId: Id of the codec to perform the operation on.
    371 **
    372 **                  Output Parameters : None
    373 **
    374 ** Returns          UCODEC_SUCCESS : The action was performed with sucess.
    375 **                  Error code else.
    376 **
    377 ******************************************************************************/
    378 BT_API extern tUCODEC_STATUS   UCODEC_Open     (tUCODEC_ID);
    379 
    380 #ifdef __cplusplus
    381 };
    382 #endif
    383 
    384 
    385 #endif /* UCODEC_H */
    386