Snapshot 7ddd630e136a035ba463c427285c5c3e9f199ee0
Change-Id: If08c7b905da667dd9e5110231e4592842b634006
diff --git a/src/udrv/include/ucodec.h b/src/udrv/include/ucodec.h
new file mode 100755
index 0000000..6178fdc
--- /dev/null
+++ b/src/udrv/include/ucodec.h
@@ -0,0 +1,385 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2001-2012 Broadcom Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * This file contains codec definitions from Widcomm's Universal Embedded
+ * Drivers API.
+ *
+ ******************************************************************************/
+
+#ifndef UCODEC_H
+#define UCODEC_H
+
+#include "bt_target.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*******************************************************************************
+** Codec APIs
+*******************************************************************************/
+
+/**** Codec IDs ****/
+#define UCODEC_ID_1 0
+#define UCODEC_ID_2 1
+#define UCODEC_ID_3 2
+#define UCODEC_ID_4 3
+#define UCODEC_NUMBER 4
+
+typedef UINT8 tUCODEC_ID;
+
+/**** Status ****/
+#define UCODEC_SUCCESS 0x00
+#define UCODEC_TX_DONE 0x01
+#define UCODEC_RX_READY 0x02
+#define UCODEC_FLOW_CTRL_ON 0x03
+#define UCODEC_FLOW_CTRL_OFF 0x04
+#define UCODEC_OVERFLOW 0x05
+#define UCODEC_UNSUPORTED_CNF 0x06
+#define UCODEC_WRONG_PARAM 0x07
+#define UCODEC_NOT_CONFIGURED 0x08
+#define UCODEC_OUT_OF_MEMORY 0x09
+#define UCODEC_GENERIC_ERROR 0x0a
+#define UCODEC_RECOVERABLE_ERROR 0x0b
+#define UCODEC_UNRECOVERABLE_ERROR 0x0c
+#define UCODEC_LOW_LEVEL_DRIVER_ERROR (0x0d)
+
+typedef UINT8 tUCODEC_STATUS;
+
+/**** Media type ****/
+#define UCODEC_MEDIA_TYPE_AUDIO 0
+#define UCODEC_MEDIA_TYPE_VIDEO 1
+#define UCODEC_MEDIA_TYPE_MULTI 2
+
+typedef UINT8 tUCODEC_MEDIA_TYPE;
+
+/**** Audio Codec type ****/
+#define UCODEC_AUDIO_SBC 0
+#define UCODEC_AUDIO_M12_LAYER1 1 /* layer1 (mp1) */
+#define UCODEC_AUDIO_M12_LAYER2 2 /* layer2 (mp2) */
+#define UCODEC_AUDIO_M12_LAYER3 3 /* layer3 (mp3) */
+#define UCODEC_AUDIO_M24_2LC 4 /* MPEG-2 AAC LC */
+#define UCODEC_AUDIO_M24_4LC 5 /* MPEG-4 AAC LC */
+#define UCODEC_AUDIO_M24_4LTP 6 /* MPEG-4 AAC LTP */
+#define UCODEC_AUDIO_M24_4S 7 /* MPEG-4 AAC scalable */
+#define UCODEC_AUDIO_VOLUME 8 /* Volume settings */
+#define UCODEC_AUDIO_BALANCE 9 /* Balance settings */
+
+typedef UINT8 tUCODEC_AUDIO_FEAT_TYPE;
+
+/**** Video Codec type -> TODO ****/
+/*TBD*/
+
+typedef UINT8 tUCODEC_VIDEO_FEAT_TYPE;
+
+/**** SBC sample frequency ****/
+#define UCODEC_SBC_SMP_FREQ_16 0 /* 16 */
+#define UCODEC_SBC_SMP_FREQ_32 1 /* 23 */
+#define UCODEC_SBC_SMP_FREQ_44 2 /* 44.1 */
+#define UCODEC_SBC_SMP_FREQ_48 3 /* 48 */
+
+typedef UINT8 tUCODEC_SBC_SMP_FREQ;
+
+/**** SBC sample frequency ****/
+#define UCODEC_SBC_SUBBAND_4 4
+#define UCODEC_SBC_SUBBAND_8 8
+
+typedef UINT8 tUCODEC_SBC_SUBBAND;
+/**** Allocation method ****/
+#define UCODEC_SBC_ALLOC_MD_S 0 /* SNR */
+#define UCODEC_SBC_ALLOC_MD_L 1 /* loundess */
+
+typedef UINT8 tUCODEC_SBC_ALLOC_MD;
+
+/**** MPEG sample frequency ****/
+#define UCODEC_M12_SMP_FREQ_16 0 /* 16 */
+#define UCODEC_M12_SMP_FREQ_22 1 /* 22 */
+#define UCODEC_M12_SMP_FREQ_24 2 /* 24 */
+#define UCODEC_M12_SMP_FREQ_32 3 /* 32 */
+#define UCODEC_M12_SMP_FREQ_44 4 /* 44 */
+#define UCODEC_M12_SMP_FREQ_48 5 /* 48 */
+
+typedef UINT8 tUCODEC_M12_SMP_FREQ;
+
+/**** Channel mode ****/
+#define UCODEC_CHN_MONO 0
+#define UCODEC_CHN_DUAL 1
+#define UCODEC_CHN_STEREO 2
+#define UCODEC_CHN_JOINT_STEREO 3
+
+typedef UINT8 tUCODEC_CH_MODE;
+/**** Audio Codec type ****/
+#define UCODEC_M24_SMP_FREQ_8 0 /* 8 */
+#define UCODEC_M24_SMP_FREQ_11 1 /* 11 */
+#define UCODEC_M24_SMP_FREQ_12 2 /* 12 */
+#define UCODEC_M24_SMP_FREQ_16 3 /* 16 */
+#define UCODEC_M24_SMP_FREQ_22 4 /* 22.05 */
+#define UCODEC_M24_SMP_FREQ_24 5 /* 24 */
+#define UCODEC_M24_SMP_FREQ_32 6 /* 32 */
+#define UCODEC_M24_SMP_FREQ_44 7 /* 44.1 */
+#define UCODEC_M24_SMP_FREQ_48 8 /* 48 */
+#define UCODEC_M24_SMP_FREQ_64 9 /* 64 */
+#define UCODEC_M24_SMP_FREQ_88 10 /* 88 */
+#define UCODEC_M24_SMP_FREQ_96 11 /* 96 */
+
+typedef UINT8 tUCODEC_M24_SMP_FREQ;
+
+/**** Codec configuration structure ****/
+typedef struct tUCODEC_CNF_SBC_TAG
+{
+ tUCODEC_SBC_SMP_FREQ SampleFreq;
+ tUCODEC_CH_MODE ChannelMode;
+ UINT16 Offset; /* GKI buffer based offset for UCODEC_ReadBuf */
+ UINT16 MtuSize; /* Max buffer len for UCODEC_ReadBuf*/
+ UINT8 PoolId; /* GKI pool ID for UCODEC_ReadBuf */
+ UINT8 NumBlock; /* Number of block in block unit : 4 blocks 8 blocks 12 blocks 16 blocks are the possible value */
+ UINT8 Subband;
+ tUCODEC_SBC_ALLOC_MD AllocMthd;
+ UINT8 MinBitPool;
+ UINT8 MaxBitPool;
+} tUCODEC_CNF_SBC;
+
+typedef struct tUCODEC_CNF_M12_TAG
+{
+ tUCODEC_CH_MODE ChannelMode; /* Mono, Dual, stereo, joint stereo */
+ tUCODEC_M12_SMP_FREQ SampleFreq; /* Sample freq: 16, 22, 24, 32, 44, 48 */
+ UINT16 BitRate; /* Bit rate in bit per sec */
+ UINT16 Offset; /* GKI buffer based offset for UCODEC_ReadBuf */
+ UINT16 MtuSize; /* Max buffer len for UCODEC_ReadBuf*/
+ UINT8 PoolId; /* GKI pool ID for UCODEC_ReadBuf */
+ BOOLEAN VBR; /* Variable Bit Rate */
+ BOOLEAN CRC_On; /* CRC error detection */
+ BOOLEAN MPF; /* Media payload format */
+} tUCODEC_CNF_M12;
+
+typedef struct tUCODEC_CNF_M24_TAG
+{
+ tUCODEC_M24_SMP_FREQ SampleFreq; /* Sample freq: 8, 11, 12, 16, 22.05, 24, 32, 44.1, 48, 64, 88, 96 */
+ UINT32 BitRate; /* Bit rate */
+ UINT16 Offset; /* GKI buffer based offset for UCODEC_ReadBuf */
+ UINT16 MtuSize; /* Max buffer len for UCODEC_ReadBuf*/
+ UINT8 PoolId; /* GKI pool ID for UCODEC_ReadBuf */
+ UINT8 Chanels; /* 1 or 2 chanels */
+} tUCODEC_CNF_M24;
+
+
+typedef union tUCODEC_CODEC_TYPE_TAG
+{
+ tUCODEC_AUDIO_FEAT_TYPE AudioType;
+ tUCODEC_VIDEO_FEAT_TYPE VideoType;
+} tUCODEC_CODEC_TYPE;
+
+typedef union tUCODEC_FEATURE_TAG
+{
+ /* Add here the audio feature structure */
+ tUCODEC_CNF_SBC SBCConfig;
+ tUCODEC_CNF_M12 M12Config;
+ tUCODEC_CNF_M24 M24Config;
+ UINT8 Volume; /* 0 to mute. 0xFF for the max volume */
+ UINT8 Balance; /* 0->100% right, 255->100% left */
+ /* Add here the video feature structure */
+ /* TBD */
+} tUCODEC_FEATURE;
+
+typedef struct tUCODEC_CNF_TAG
+{
+ tUCODEC_MEDIA_TYPE MediaType;
+ tUCODEC_CODEC_TYPE Type;
+ tUCODEC_FEATURE Feature;
+} tUCODEC_CNF;
+
+typedef struct tUCODEC_BUF_INFO_TAG
+{
+ UINT8 NumOfFrames;
+ UINT32 TimesStamp;
+} tUCODEC_BUF_INFO;
+
+
+/******************************************************************************
+**
+** Function tUCODEC_CBACK_PTR
+**
+** Description This call back report CODEC indication.
+** It report codec error as well as flow onfrol indication.
+**
+** Input : CodecId: Id of the codec that calls this call back.
+** Status: ->UCODEC_FLOW_CTRL_OFF if the Tx Q just
+** went below the low watermark
+** ->UCODEC_RX_READY if data are ready to be
+** read. This olny hapens when the Rx Q was
+** empty before receiving data.
+** ->UCODEC_INTERNAL_ERROR if something went
+** wrong with the driver
+**
+** Output Parameters : None
+**
+** Returns None.
+**
+******************************************************************************/
+typedef void (* tUCODEC_CBACK_PTR)(tUCODEC_ID, tUCODEC_STATUS);
+
+/*******************************************************************************
+** Function Prototypes
+*******************************************************************************/
+
+/******************************************************************************
+**
+** Function UCODEC_Init
+**
+** Description Startup initialisation function. This function is called
+** before any orther function of UCODEC it initialize UCODEC
+** internal structure an the external codec.
+**
+** Input : CodecId: Id of the codec to perform the operation on.
+**
+** Output Parameters : None
+**
+** Returns UCODEC_SUCCESS if The action was performed with sucess.
+** Error code else.
+**
+******************************************************************************/
+BT_API extern tUCODEC_STATUS UCODEC_Init (void *);
+
+/******************************************************************************
+**
+** Function UCODEC_Configure
+**
+** Description Initialise the CODEC for a particular stream.
+**
+**
+** Input : CodecId: Id of the codec to perform the operation on.
+** CbackPrt: Call back pointer for codec feedback.
+** pConfig: Pointer on a codec configuration structure.
+**
+** Output Parameters : None
+**
+** Returns UCODEC_SUCCESS if The action was performed with sucess.
+**
+******************************************************************************/
+BT_API extern tUCODEC_STATUS UCODEC_Configure (tUCODEC_ID, tUCODEC_CBACK_PTR, tUCODEC_CNF *);
+
+/******************************************************************************
+**
+** Function UCODEC_FlushTx
+**
+** Description Fluch Tx buffer Q.
+**
+** Input : CodecId: Id of the codec to perform the operation on.
+**
+** Output Parameters : None
+**
+** Returns UCODEC_SUCCESS if The action was performed with sucess.
+** Error code else.
+**
+******************************************************************************/
+BT_API extern tUCODEC_STATUS UCODEC_FlushTx (tUCODEC_ID);
+
+/******************************************************************************
+**
+** Function UCODEC_FlushRx
+**
+** Description Fluch Rx buffer Q.
+**
+** Input : CodecId: Id of the codec to perform the operation on.
+**
+** Output Parameters : None
+**
+** Returns UCODEC_SUCCESS if The action was performed with sucess.
+** Error code else.
+**
+******************************************************************************/
+BT_API extern tUCODEC_STATUS UCODEC_FlushRx (tUCODEC_ID);
+
+/******************************************************************************
+**
+** Function UCODEC_WriteBuf
+**
+** Description Send a buffer to the codec.
+**
+** Input : CodecId: Id of the codec to perform the operation on.
+** pBuf: Pointer onto the GKI buffer to be send to the CODEC.
+**
+** Output Parameters : None
+**
+** Returns UCODEC_SUCCESS if The action was performed with sucess.
+** UCODEC_FLOW_CTRL_ON if The codec buffer Q had reach a UCODEC_HIGH_WM
+** watermark. The buffer is queued
+** UCODEC_OVERFLOW if The codec buffer Q had reach a critical
+** watermark. The buffer is dropped.
+**
+******************************************************************************/
+BT_API extern tUCODEC_STATUS UCODEC_WriteBuf (tUCODEC_ID, BT_HDR *);
+
+/******************************************************************************
+**
+** Function UCODEC_ReadBuf
+**
+** Description Get a buffer from the codec.
+**
+** Input : CodecId: Id of the codec to perform the operation on.
+**
+** Output Parameters : None
+**
+** Returns Pointer on the GKI buffer. NULL if the Rx Q is empty
+**
+******************************************************************************/
+BT_API extern tUCODEC_STATUS UCODEC_ReadBuf (tUCODEC_ID, BT_HDR **, tUCODEC_BUF_INFO *);
+
+/******************************************************************************
+**
+** Function UCODEC_Close
+**
+** Description This function is called to put the codec in low power mode
+**
+**
+** Input : CodecId: Id of the codec to perform the operation on.
+**
+** Output Parameters : None
+**
+** Returns UCODEC_SUCCESS : The action was performed with sucess.
+** Error code else.
+**
+******************************************************************************/
+BT_API extern tUCODEC_STATUS UCODEC_Close (tUCODEC_ID);
+
+/******************************************************************************
+**
+** Function UCODEC_Open
+**
+** Description This function is called to resume the codec from low power
+** mode after UCODEC_Close had been called. It will put the
+** codec in the state it was before UCODEC_Close being called.
+**
+** Input : CodecId: Id of the codec to perform the operation on.
+**
+** Output Parameters : None
+**
+** Returns UCODEC_SUCCESS : The action was performed with sucess.
+** Error code else.
+**
+******************************************************************************/
+BT_API extern tUCODEC_STATUS UCODEC_Open (tUCODEC_ID);
+
+#ifdef __cplusplus
+};
+#endif
+
+
+#endif /* UCODEC_H */