1/******************************************************************************
2 *
3 *  Copyright (C) 2009-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 *  Filename:      audio_a2dp_hw.h
22 *
23 *  Description:
24 *
25 *****************************************************************************/
26
27#ifndef AUDIO_A2DP_HW_H
28#define AUDIO_A2DP_HW_H
29
30/*****************************************************************************
31**  Constants & Macros
32******************************************************************************/
33
34#define A2DP_AUDIO_HARDWARE_INTERFACE "audio.a2dp"
35#define A2DP_CTRL_PATH "/data/misc/bluedroid/.a2dp_ctrl"
36#define A2DP_DATA_PATH "/data/misc/bluedroid/.a2dp_data"
37
38#define AUDIO_STREAM_DEFAULT_RATE          44100
39#define AUDIO_STREAM_DEFAULT_FORMAT        AUDIO_FORMAT_PCM_16_BIT
40#define AUDIO_STREAM_DEFAULT_CHANNEL_FLAG  AUDIO_CHANNEL_OUT_STEREO
41
42// AUDIO_STREAM_OUTPUT_BUFFER_SZ controls the size of the audio socket buffer.
43// If one assumes the write buffer is always full during normal BT playback,
44// then increasing this value increases our playback latency.
45//
46// FIXME: AUDIO_STREAM_OUTPUT_BUFFER_SZ should be controlled by the actual audio
47// sample rate rather than being constant.
48//
49// FIXME: The BT HAL should consume data at a constant rate.
50// AudioFlinger assumes that the HAL draws data at a constant rate, which is true
51// for most audio devices; however, the BT engine reads data at a variable rate
52// (over the short term), which confuses both AudioFlinger as well as applications
53// which deliver data at a (generally) fixed rate.
54//
55// 20 * 512 is not sufficient size to smooth the variability for some BT devices,
56// resulting in mixer sleep and throttling. We increase this to 28 * 512 to help
57// reduce the effect of variable data consumption.
58#define AUDIO_STREAM_OUTPUT_BUFFER_SZ      (28*512)
59
60// AUDIO_STREAM_OUTPUT_BUFFER_PERIODS controls how the socket buffer is divided
61// for AudioFlinger data delivery. The AudioFlinger mixer delivers data in chunks
62// of AUDIO_STREAM_OUTPUT_BUFFER_SZ / AUDIO_STREAM_OUTPUT_BUFFER_PERIODS. If
63// the number of periods is 2, the socket buffer represents "double buffering"
64// of the AudioFlinger mixer buffer.
65//
66// In general, AUDIO_STREAM_OUTPUT_BUFFER_PERIODS * 16 * 4 should be a divisor of
67// AUDIO_STREAM_OUTPUT_BUFFER_SZ.
68//
69// These values should be chosen such that
70//
71// AUDIO_STREAM_BUFFER_SIZE * 1000 / (AUDIO_STREAM_OUTPUT_BUFFER_PERIODS
72//         * AUDIO_STREAM_DEFAULT_RATE * 4) > 20 (ms)
73//
74// to avoid introducing the FastMixer in AudioFlinger. Using the FastMixer results in
75// unnecessary latency and CPU overhead for Bluetooth.
76#define AUDIO_STREAM_OUTPUT_BUFFER_PERIODS 4
77
78#define AUDIO_SKT_DISCONNECTED             (-1)
79
80typedef enum {
81    A2DP_CTRL_CMD_NONE,
82    A2DP_CTRL_CMD_CHECK_READY,
83    A2DP_CTRL_CMD_START,
84    A2DP_CTRL_CMD_STOP,
85    A2DP_CTRL_CMD_SUSPEND,
86    A2DP_CTRL_GET_AUDIO_CONFIG,
87    A2DP_CTRL_CMD_OFFLOAD_START,
88} tA2DP_CTRL_CMD;
89
90typedef enum {
91    A2DP_CTRL_ACK_SUCCESS,
92    A2DP_CTRL_ACK_FAILURE,
93    A2DP_CTRL_ACK_INCALL_FAILURE, /* Failure when in Call*/
94    A2DP_CTRL_ACK_UNSUPPORTED
95} tA2DP_CTRL_ACK;
96
97
98/*****************************************************************************
99**  Type definitions for callback functions
100******************************************************************************/
101
102/*****************************************************************************
103**  Type definitions and return values
104******************************************************************************/
105
106/*****************************************************************************
107**  Extern variables and functions
108******************************************************************************/
109
110/*****************************************************************************
111**  Functions
112******************************************************************************/
113
114
115/*****************************************************************************
116**
117** Function
118**
119** Description
120**
121** Returns
122**
123******************************************************************************/
124
125#endif /* A2DP_AUDIO_HW_H */
126
127