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