105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/*
205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * Copyright (C) 2012 The Android Open Source Project
305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach *
405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * Licensed under the Apache License, Version 2.0 (the "License");
505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * you may not use this file except in compliance with the License.
605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * You may obtain a copy of the License at
705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach *
805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach *      http://www.apache.org/licenses/LICENSE-2.0
905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach *
1005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * Unless required by applicable law or agreed to in writing, software
1105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * distributed under the License is distributed on an "AS IS" BASIS,
1205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * See the License for the specific language governing permissions and
1405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * limitations under the License.
1505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach */
1605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
1705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach#ifndef ANDROID_INCLUDE_BT_AV_H
1805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach#define ANDROID_INCLUDE_BT_AV_H
1905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
2005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach__BEGIN_DECLS
2105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
2205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/* Bluetooth AV connection states */
2305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef enum {
2405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTAV_CONNECTION_STATE_DISCONNECTED = 0,
2505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTAV_CONNECTION_STATE_CONNECTING,
2605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTAV_CONNECTION_STATE_CONNECTED,
2705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTAV_CONNECTION_STATE_DISCONNECTING
2805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} btav_connection_state_t;
2905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
3005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/* Bluetooth AV datapath states */
3105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef enum {
3205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTAV_AUDIO_STATE_REMOTE_SUSPEND = 0,
3305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTAV_AUDIO_STATE_STOPPED,
3405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTAV_AUDIO_STATE_STARTED,
3505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} btav_audio_state_t;
3605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
3705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
3805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/** Callback for connection state change.
3905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach *  state will have one of the values from btav_connection_state_t
4005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach */
4105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef void (* btav_connection_state_callback)(btav_connection_state_t state,
4205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach                                                    bt_bdaddr_t *bd_addr);
4305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
4405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/** Callback for audiopath state change.
4505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach *  state will have one of the values from btav_audio_state_t
4605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach */
4705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef void (* btav_audio_state_callback)(btav_audio_state_t state,
4805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach                                               bt_bdaddr_t *bd_addr);
4905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
5005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/** BT-AV callback structure. */
5105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef struct {
5205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /** set to sizeof(btav_callbacks_t) */
5305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    size_t      size;
5405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    btav_connection_state_callback  connection_state_cb;
5505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    btav_audio_state_callback audio_state_cb;
5605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} btav_callbacks_t;
5705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
5805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/**
5905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * NOTE:
6005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach *
6105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * 1. AVRCP 1.0 shall be supported initially. AVRCP passthrough commands
6205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach *    shall be handled internally via uinput
6305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach *
6405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * 2. A2DP data path shall be handled via a socket pipe between the AudioFlinger
6505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach *    android_audio_hw library and the Bluetooth stack.
6605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach *
6705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach */
6805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/** Represents the standard BT-AV interface. */
6905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef struct {
7005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
7105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /** set to sizeof(btav_interface_t) */
7205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    size_t          size;
7305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /**
7405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     * Register the BtAv callbacks
7505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     */
7605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    bt_status_t (*init)( btav_callbacks_t* callbacks );
7705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
7805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /** connect to headset */
7905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    bt_status_t (*connect)( bt_bdaddr_t *bd_addr );
8005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
8105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /** dis-connect from headset */
8205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    bt_status_t (*disconnect)( bt_bdaddr_t *bd_addr );
8305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
8405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /** Closes the interface. */
8505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    void  (*cleanup)( void );
8605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} btav_interface_t;
8705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
8805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach__END_DECLS
8905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
9005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach#endif /* ANDROID_INCLUDE_BT_AV_H */
91