mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
component/bt: transport bludroid bta/av and bta/ar modules to stack
note: callout functions defined in bta_av_co.c are temporarily removed;
This commit is contained in:
parent
e3a4f23c9d
commit
2d21f3c501
340
components/bt/bluedroid/bta/ar/bta_ar.c
Executable file
340
components/bt/bluedroid/bta/ar/bta_ar.c
Executable file
@ -0,0 +1,340 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2008-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 is the implementation for the audio/video registration module.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
#include "bta_ar_api.h"
|
||||
#include "bta_ar_int.h"
|
||||
|
||||
|
||||
/* AV control block */
|
||||
#if BTA_DYNAMIC_MEMORY == FALSE
|
||||
tBTA_AR_CB bta_ar_cb;
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_id
|
||||
**
|
||||
** Description This function maps sys_id to ar id mask.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
static UINT8 bta_ar_id(tBTA_SYS_ID sys_id)
|
||||
{
|
||||
UINT8 mask = 0;
|
||||
if (sys_id == BTA_ID_AV)
|
||||
{
|
||||
mask = BTA_AR_AV_MASK;
|
||||
}
|
||||
else if (sys_id == BTA_ID_AVK)
|
||||
{
|
||||
mask = BTA_AR_AVK_MASK;
|
||||
}
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_init
|
||||
**
|
||||
** Description This function is called to register to AVDTP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_ar_init(void)
|
||||
{
|
||||
/* initialize control block */
|
||||
memset(&bta_ar_cb, 0, sizeof(tBTA_AR_CB));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_reg_avdt
|
||||
**
|
||||
** Description This function is called to register to AVDTP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
static void bta_ar_avdt_cback(UINT8 handle, BD_ADDR bd_addr, UINT8 event, tAVDT_CTRL *p_data)
|
||||
{
|
||||
/* route the AVDT registration callback to av or avk */
|
||||
if (bta_ar_cb.p_av_conn_cback)
|
||||
(*bta_ar_cb.p_av_conn_cback)(handle, bd_addr, event, p_data);
|
||||
if (bta_ar_cb.p_avk_conn_cback)
|
||||
(*bta_ar_cb.p_avk_conn_cback)(handle, bd_addr, event, p_data);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_reg_avdt
|
||||
**
|
||||
** Description AR module registration to AVDT.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_ar_reg_avdt(tAVDT_REG *p_reg, tAVDT_CTRL_CBACK *p_cback, tBTA_SYS_ID sys_id)
|
||||
{
|
||||
UINT8 mask = 0;
|
||||
|
||||
if (sys_id == BTA_ID_AV)
|
||||
{
|
||||
bta_ar_cb.p_av_conn_cback = p_cback;
|
||||
mask = BTA_AR_AV_MASK;
|
||||
}
|
||||
else if (sys_id == BTA_ID_AVK)
|
||||
{
|
||||
bta_ar_cb.p_avk_conn_cback = p_cback;
|
||||
mask = BTA_AR_AVK_MASK;
|
||||
}
|
||||
#if (BTA_AR_DEBUG == TRUE)
|
||||
else
|
||||
{
|
||||
APPL_TRACE_ERROR("bta_ar_reg_avdt: the registration is from wrong sys_id:%d", sys_id);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (mask)
|
||||
{
|
||||
if (bta_ar_cb.avdt_registered == 0)
|
||||
{
|
||||
AVDT_Register(p_reg, bta_ar_avdt_cback);
|
||||
}
|
||||
bta_ar_cb.avdt_registered |= mask;
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_dereg_avdt
|
||||
**
|
||||
** Description This function is called to de-register from AVDTP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_ar_dereg_avdt(tBTA_SYS_ID sys_id)
|
||||
{
|
||||
UINT8 mask = 0;
|
||||
|
||||
if (sys_id == BTA_ID_AV)
|
||||
{
|
||||
bta_ar_cb.p_av_conn_cback = NULL;
|
||||
mask = BTA_AR_AV_MASK;
|
||||
}
|
||||
else if (sys_id == BTA_ID_AVK)
|
||||
{
|
||||
bta_ar_cb.p_avk_conn_cback = NULL;
|
||||
mask = BTA_AR_AVK_MASK;
|
||||
}
|
||||
bta_ar_cb.avdt_registered &= ~mask;
|
||||
|
||||
if (bta_ar_cb.avdt_registered == 0)
|
||||
AVDT_Deregister();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_avdt_conn
|
||||
**
|
||||
** Description This function is called to let ar know that some AVDTP profile
|
||||
** is connected for this sys_id.
|
||||
** If the other sys modules started a timer for PENDING_EVT,
|
||||
** the timer can be stopped now.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_ar_avdt_conn(tBTA_SYS_ID sys_id, BD_ADDR bd_addr)
|
||||
{
|
||||
UINT8 event = BTA_AR_AVDT_CONN_EVT;
|
||||
tAVDT_CTRL data;
|
||||
|
||||
if (sys_id == BTA_ID_AV)
|
||||
{
|
||||
if (bta_ar_cb.p_avk_conn_cback)
|
||||
{
|
||||
(*bta_ar_cb.p_avk_conn_cback)(0, bd_addr, event, &data);
|
||||
}
|
||||
}
|
||||
else if (sys_id == BTA_ID_AVK)
|
||||
{
|
||||
if (bta_ar_cb.p_av_conn_cback)
|
||||
{
|
||||
(*bta_ar_cb.p_av_conn_cback)(0, bd_addr, event, &data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_reg_avct
|
||||
**
|
||||
** Description This function is called to register to AVCTP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_ar_reg_avct(UINT16 mtu, UINT16 mtu_br, UINT8 sec_mask, tBTA_SYS_ID sys_id)
|
||||
{
|
||||
UINT8 mask = bta_ar_id (sys_id);
|
||||
|
||||
if (mask)
|
||||
{
|
||||
if (bta_ar_cb.avct_registered == 0)
|
||||
{
|
||||
AVCT_Register(mtu, mtu_br, sec_mask);
|
||||
}
|
||||
bta_ar_cb.avct_registered |= mask;
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_dereg_avct
|
||||
**
|
||||
** Description This function is called to deregister from AVCTP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_ar_dereg_avct(tBTA_SYS_ID sys_id)
|
||||
{
|
||||
UINT8 mask = bta_ar_id (sys_id);
|
||||
|
||||
bta_ar_cb.avct_registered &= ~mask;
|
||||
|
||||
if (bta_ar_cb.avct_registered == 0)
|
||||
AVCT_Deregister();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
**
|
||||
** Function bta_ar_reg_avrc
|
||||
**
|
||||
** Description This function is called to register an SDP record for AVRCP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
******************************************************************************/
|
||||
void bta_ar_reg_avrc(UINT16 service_uuid, char *service_name, char *provider_name,
|
||||
UINT16 categories, tBTA_SYS_ID sys_id)
|
||||
{
|
||||
UINT8 mask = bta_ar_id (sys_id);
|
||||
UINT8 temp[8], *p;
|
||||
|
||||
if (!mask || !categories)
|
||||
return;
|
||||
|
||||
if (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_TARGET)
|
||||
{
|
||||
if (bta_ar_cb.sdp_tg_handle == 0)
|
||||
{
|
||||
bta_ar_cb.tg_registered = mask;
|
||||
bta_ar_cb.sdp_tg_handle = SDP_CreateRecord();
|
||||
AVRC_AddRecord(service_uuid, service_name, provider_name, categories, bta_ar_cb.sdp_tg_handle);
|
||||
bta_sys_add_uuid(service_uuid);
|
||||
}
|
||||
/* only one TG is allowed (first-come, first-served).
|
||||
* If sdp_tg_handle is non-0, ignore this request */
|
||||
}
|
||||
else if ((service_uuid == UUID_SERVCLASS_AV_REMOTE_CONTROL) || (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_CONTROL))
|
||||
{
|
||||
bta_ar_cb.ct_categories [mask - 1] = categories;
|
||||
categories = bta_ar_cb.ct_categories[0]|bta_ar_cb.ct_categories[1];
|
||||
if (bta_ar_cb.sdp_ct_handle == 0)
|
||||
{
|
||||
bta_ar_cb.sdp_ct_handle = SDP_CreateRecord();
|
||||
AVRC_AddRecord(service_uuid, service_name, provider_name, categories, bta_ar_cb.sdp_ct_handle);
|
||||
bta_sys_add_uuid(service_uuid);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* multiple CTs are allowed.
|
||||
* Change supported categories on the second one */
|
||||
p = temp;
|
||||
UINT16_TO_BE_STREAM(p, categories);
|
||||
SDP_AddAttribute(bta_ar_cb.sdp_ct_handle, ATTR_ID_SUPPORTED_FEATURES, UINT_DESC_TYPE,
|
||||
(UINT32)2, (UINT8*)temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
**
|
||||
** Function bta_ar_dereg_avrc
|
||||
**
|
||||
** Description This function is called to de-register/delete an SDP record for AVRCP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
******************************************************************************/
|
||||
void bta_ar_dereg_avrc(UINT16 service_uuid, tBTA_SYS_ID sys_id)
|
||||
{
|
||||
UINT8 mask = bta_ar_id (sys_id);
|
||||
UINT16 categories = 0;
|
||||
UINT8 temp[8], *p;
|
||||
|
||||
if (!mask)
|
||||
return;
|
||||
|
||||
if (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_TARGET)
|
||||
{
|
||||
if (bta_ar_cb.sdp_tg_handle && mask == bta_ar_cb.tg_registered)
|
||||
{
|
||||
bta_ar_cb.tg_registered = 0;
|
||||
SDP_DeleteRecord(bta_ar_cb.sdp_tg_handle);
|
||||
bta_ar_cb.sdp_tg_handle = 0;
|
||||
bta_sys_remove_uuid(service_uuid);
|
||||
}
|
||||
}
|
||||
else if (service_uuid == UUID_SERVCLASS_AV_REMOTE_CONTROL)
|
||||
{
|
||||
if (bta_ar_cb.sdp_ct_handle)
|
||||
{
|
||||
bta_ar_cb.ct_categories [mask - 1] = 0;
|
||||
categories = bta_ar_cb.ct_categories[0]|bta_ar_cb.ct_categories[1];
|
||||
if (!categories)
|
||||
{
|
||||
/* no CT is still registered - cleaup */
|
||||
SDP_DeleteRecord(bta_ar_cb.sdp_ct_handle);
|
||||
bta_ar_cb.sdp_ct_handle = 0;
|
||||
bta_sys_remove_uuid(service_uuid);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* change supported categories to the remaning one */
|
||||
p = temp;
|
||||
UINT16_TO_BE_STREAM(p, categories);
|
||||
SDP_AddAttribute(bta_ar_cb.sdp_ct_handle, ATTR_ID_SUPPORTED_FEATURES, UINT_DESC_TYPE,
|
||||
(UINT32)2, (UINT8*)temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
64
components/bt/bluedroid/bta/ar/bta_ar_int.h
Executable file
64
components/bt/bluedroid/bta/ar/bta_ar_int.h
Executable file
@ -0,0 +1,64 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2008-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 is the private interface file for the BTA audio/video registration
|
||||
* module.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef BTA_AR_INT_H
|
||||
#define BTA_AR_INT_H
|
||||
|
||||
#include "bta_av_api.h"
|
||||
|
||||
|
||||
#ifndef BTA_AR_DEBUG
|
||||
#define BTA_AR_DEBUG FALSE
|
||||
#endif
|
||||
|
||||
#define BTA_AR_AV_MASK 0x01
|
||||
#define BTA_AR_AVK_MASK 0x02
|
||||
|
||||
/* data associated with BTA_AR */
|
||||
typedef struct
|
||||
{
|
||||
tAVDT_CTRL_CBACK *p_av_conn_cback; /* av connection callback function */
|
||||
tAVDT_CTRL_CBACK *p_avk_conn_cback; /* avk connection callback function */
|
||||
UINT8 avdt_registered;
|
||||
UINT8 avct_registered;
|
||||
UINT32 sdp_tg_handle;
|
||||
UINT32 sdp_ct_handle;
|
||||
UINT16 ct_categories[2];
|
||||
UINT8 tg_registered;
|
||||
tBTA_AV_HNDL hndl; /* Handle associated with the stream that rejected the connection. */
|
||||
} tBTA_AR_CB;
|
||||
|
||||
/*****************************************************************************
|
||||
** Global data
|
||||
*****************************************************************************/
|
||||
|
||||
/* control block declaration */
|
||||
#if BTA_DYNAMIC_MEMORY == FALSE
|
||||
extern tBTA_AR_CB bta_ar_cb;
|
||||
#else
|
||||
extern tBTA_AR_CB *bta_ar_cb_ptr;
|
||||
#define bta_ar_cb (*bta_ar_cb_ptr)
|
||||
#endif
|
||||
|
||||
#endif /* BTA_AR_INT_H */
|
3107
components/bt/bluedroid/bta/av/bta_av_aact.c
Executable file
3107
components/bt/bluedroid/bta/av/bta_av_aact.c
Executable file
File diff suppressed because it is too large
Load Diff
2067
components/bt/bluedroid/bta/av/bta_av_act.c
Executable file
2067
components/bt/bluedroid/bta/av/bta_av_act.c
Executable file
File diff suppressed because it is too large
Load Diff
607
components/bt/bluedroid/bta/av/bta_av_api.c
Executable file
607
components/bt/bluedroid/bta/av/bta_av_api.c
Executable file
@ -0,0 +1,607 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2011-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 is the implementation of the API for the advanced audio/video (AV)
|
||||
* subsystem of BTA, Broadcom's Bluetooth application layer for mobile
|
||||
* phones.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include "bt_target.h"
|
||||
#if defined(BTA_AV_INCLUDED) && (BTA_AV_INCLUDED == TRUE)
|
||||
|
||||
#include "bta_api.h"
|
||||
#include "bta_sys.h"
|
||||
#include "bta_av_api.h"
|
||||
#include "bta_av_int.h"
|
||||
#include "gki.h"
|
||||
#include <string.h>
|
||||
|
||||
/*****************************************************************************
|
||||
** Constants
|
||||
*****************************************************************************/
|
||||
|
||||
static const tBTA_SYS_REG bta_av_reg =
|
||||
{
|
||||
bta_av_hdl_event,
|
||||
BTA_AvDisable
|
||||
};
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvEnable
|
||||
**
|
||||
** Description Enable the advanced audio/video service. When the enable
|
||||
** operation is complete the callback function will be
|
||||
** called with a BTA_AV_ENABLE_EVT. This function must
|
||||
** be called before other function in the AV API are
|
||||
** called.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvEnable(tBTA_SEC sec_mask, tBTA_AV_FEAT features, tBTA_AV_CBACK *p_cback)
|
||||
{
|
||||
tBTA_AV_API_ENABLE *p_buf;
|
||||
|
||||
/* register with BTA system manager */
|
||||
bta_sys_register(BTA_ID_AV, &bta_av_reg);
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_ENABLE *) GKI_getbuf(sizeof(tBTA_AV_API_ENABLE))) != NULL)
|
||||
{
|
||||
p_buf->hdr.event = BTA_AV_API_ENABLE_EVT;
|
||||
p_buf->p_cback = p_cback;
|
||||
p_buf->features = features;
|
||||
p_buf->sec_mask = sec_mask;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvDisable
|
||||
**
|
||||
** Description Disable the advanced audio/video service.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvDisable(void)
|
||||
{
|
||||
BT_HDR *p_buf;
|
||||
|
||||
bta_sys_deregister(BTA_ID_AV);
|
||||
if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
|
||||
{
|
||||
p_buf->event = BTA_AV_API_DISABLE_EVT;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvRegister
|
||||
**
|
||||
** Description Register the audio or video service to stack. When the
|
||||
** operation is complete the callback function will be
|
||||
** called with a BTA_AV_REGISTER_EVT. This function must
|
||||
** be called before AVDT stream is open.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvRegister(tBTA_AV_CHNL chnl, const char *p_service_name, UINT8 app_id, tBTA_AV_DATA_CBACK *p_data_cback)
|
||||
{
|
||||
tBTA_AV_API_REG *p_buf;
|
||||
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_REG *) GKI_getbuf(sizeof(tBTA_AV_API_REG))) != NULL)
|
||||
{
|
||||
p_buf->hdr.layer_specific = chnl;
|
||||
p_buf->hdr.event = BTA_AV_API_REGISTER_EVT;
|
||||
if(p_service_name)
|
||||
{
|
||||
BCM_STRNCPY_S(p_buf->p_service_name, sizeof(p_buf->p_service_name), p_service_name, BTA_SERVICE_NAME_LEN);
|
||||
p_buf->p_service_name[BTA_SERVICE_NAME_LEN-1] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
p_buf->p_service_name[0] = 0;
|
||||
}
|
||||
p_buf->app_id = app_id;
|
||||
p_buf->p_app_data_cback = p_data_cback;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvDeregister
|
||||
**
|
||||
** Description Deregister the audio or video service
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvDeregister(tBTA_AV_HNDL hndl)
|
||||
{
|
||||
BT_HDR *p_buf;
|
||||
|
||||
if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
|
||||
{
|
||||
p_buf->layer_specific = hndl;
|
||||
p_buf->event = BTA_AV_API_DEREGISTER_EVT;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvOpen
|
||||
**
|
||||
** Description Opens an advanced audio/video connection to a peer device.
|
||||
** When connection is open callback function is called
|
||||
** with a BTA_AV_OPEN_EVT.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvOpen(BD_ADDR bd_addr, tBTA_AV_HNDL handle, BOOLEAN use_rc, tBTA_SEC sec_mask,
|
||||
UINT16 uuid)
|
||||
{
|
||||
tBTA_AV_API_OPEN *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_OPEN *) GKI_getbuf(sizeof(tBTA_AV_API_OPEN))) != NULL)
|
||||
{
|
||||
p_buf->hdr.event = BTA_AV_API_OPEN_EVT;
|
||||
p_buf->hdr.layer_specific = handle;
|
||||
bdcpy(p_buf->bd_addr, bd_addr);
|
||||
p_buf->use_rc = use_rc;
|
||||
p_buf->sec_mask = sec_mask;
|
||||
p_buf->switch_res = BTA_AV_RS_NONE;
|
||||
p_buf->uuid = uuid;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvClose
|
||||
**
|
||||
** Description Close the current streams.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvClose(tBTA_AV_HNDL handle)
|
||||
{
|
||||
BT_HDR *p_buf;
|
||||
|
||||
if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
|
||||
{
|
||||
p_buf->event = BTA_AV_API_CLOSE_EVT;
|
||||
p_buf->layer_specific = handle;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvDisconnect
|
||||
**
|
||||
** Description Close the connection to the address.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvDisconnect(BD_ADDR bd_addr)
|
||||
{
|
||||
tBTA_AV_API_DISCNT *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_DISCNT *) GKI_getbuf(sizeof(tBTA_AV_API_DISCNT))) != NULL)
|
||||
{
|
||||
p_buf->hdr.event = BTA_AV_API_DISCONNECT_EVT;
|
||||
bdcpy(p_buf->bd_addr, bd_addr);
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvStart
|
||||
**
|
||||
** Description Start audio/video stream data transfer.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvStart(void)
|
||||
{
|
||||
BT_HDR *p_buf;
|
||||
|
||||
if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
|
||||
{
|
||||
p_buf->event = BTA_AV_API_START_EVT;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvEnable_Sink
|
||||
**
|
||||
** Description Enable/Disable A2DP Sink..
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvEnable_Sink(int enable)
|
||||
{
|
||||
#if (BTA_AV_SINK_INCLUDED == TRUE)
|
||||
BT_HDR *p_buf;
|
||||
if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
|
||||
{
|
||||
p_buf->event = BTA_AV_API_SINK_ENABLE_EVT;
|
||||
p_buf->layer_specific = enable;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
#else
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvStop
|
||||
**
|
||||
** Description Stop audio/video stream data transfer.
|
||||
** If suspend is TRUE, this function sends AVDT suspend signal
|
||||
** to the connected peer(s).
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvStop(BOOLEAN suspend)
|
||||
{
|
||||
tBTA_AV_API_STOP *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_STOP *) GKI_getbuf(sizeof(tBTA_AV_API_STOP))) != NULL)
|
||||
{
|
||||
p_buf->hdr.event = BTA_AV_API_STOP_EVT;
|
||||
p_buf->flush = TRUE;
|
||||
p_buf->suspend = suspend;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvReconfig
|
||||
**
|
||||
** Description Reconfigure the audio/video stream.
|
||||
** If suspend is TRUE, this function tries the suspend/reconfigure
|
||||
** procedure first.
|
||||
** If suspend is FALSE or when suspend/reconfigure fails,
|
||||
** this function closes and re-opens the AVDT connection.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvReconfig(tBTA_AV_HNDL hndl, BOOLEAN suspend, UINT8 sep_info_idx,
|
||||
UINT8 *p_codec_info, UINT8 num_protect, UINT8 *p_protect_info)
|
||||
{
|
||||
tBTA_AV_API_RCFG *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_RCFG *) GKI_getbuf((UINT16) (sizeof(tBTA_AV_API_RCFG) + num_protect))) != NULL)
|
||||
{
|
||||
p_buf->hdr.layer_specific = hndl;
|
||||
p_buf->hdr.event = BTA_AV_API_RECONFIG_EVT;
|
||||
p_buf->num_protect = num_protect;
|
||||
p_buf->suspend = suspend;
|
||||
p_buf->sep_info_idx = sep_info_idx;
|
||||
p_buf->p_protect_info = (UINT8 *)(p_buf + 1);
|
||||
memcpy(p_buf->codec_info, p_codec_info, AVDT_CODEC_SIZE);
|
||||
memcpy(p_buf->p_protect_info, p_protect_info, num_protect);
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvProtectReq
|
||||
**
|
||||
** Description Send a content protection request. This function can only
|
||||
** be used if AV is enabled with feature BTA_AV_FEAT_PROTECT.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvProtectReq(tBTA_AV_HNDL hndl, UINT8 *p_data, UINT16 len)
|
||||
{
|
||||
tBTA_AV_API_PROTECT_REQ *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_PROTECT_REQ *) GKI_getbuf((UINT16) (sizeof(tBTA_AV_API_PROTECT_REQ) + len))) != NULL)
|
||||
{
|
||||
p_buf->hdr.layer_specific = hndl;
|
||||
p_buf->hdr.event = BTA_AV_API_PROTECT_REQ_EVT;
|
||||
p_buf->len = len;
|
||||
if (p_data == NULL)
|
||||
{
|
||||
p_buf->p_data = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
p_buf->p_data = (UINT8 *) (p_buf + 1);
|
||||
memcpy(p_buf->p_data, p_data, len);
|
||||
}
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvProtectRsp
|
||||
**
|
||||
** Description Send a content protection response. This function must
|
||||
** be called if a BTA_AV_PROTECT_REQ_EVT is received.
|
||||
** This function can only be used if AV is enabled with
|
||||
** feature BTA_AV_FEAT_PROTECT.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvProtectRsp(tBTA_AV_HNDL hndl, UINT8 error_code, UINT8 *p_data, UINT16 len)
|
||||
{
|
||||
tBTA_AV_API_PROTECT_RSP *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_PROTECT_RSP *) GKI_getbuf((UINT16) (sizeof(tBTA_AV_API_PROTECT_RSP) + len))) != NULL)
|
||||
{
|
||||
p_buf->hdr.layer_specific = hndl;
|
||||
p_buf->hdr.event = BTA_AV_API_PROTECT_RSP_EVT;
|
||||
p_buf->len = len;
|
||||
p_buf->error_code = error_code;
|
||||
if (p_data == NULL)
|
||||
{
|
||||
p_buf->p_data = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
p_buf->p_data = (UINT8 *) (p_buf + 1);
|
||||
memcpy(p_buf->p_data, p_data, len);
|
||||
}
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvRemoteCmd
|
||||
**
|
||||
** Description Send a remote control command. This function can only
|
||||
** be used if AV is enabled with feature BTA_AV_FEAT_RCCT.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvRemoteCmd(UINT8 rc_handle, UINT8 label, tBTA_AV_RC rc_id, tBTA_AV_STATE key_state)
|
||||
{
|
||||
tBTA_AV_API_REMOTE_CMD *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_REMOTE_CMD *) GKI_getbuf(sizeof(tBTA_AV_API_REMOTE_CMD))) != NULL)
|
||||
{
|
||||
p_buf->hdr.event = BTA_AV_API_REMOTE_CMD_EVT;
|
||||
p_buf->hdr.layer_specific = rc_handle;
|
||||
p_buf->msg.op_id = rc_id;
|
||||
p_buf->msg.state = key_state;
|
||||
p_buf->msg.p_pass_data = NULL;
|
||||
p_buf->msg.pass_len = 0;
|
||||
p_buf->label = label;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvVendorCmd
|
||||
**
|
||||
** Description Send a vendor dependent remote control command. This
|
||||
** function can only be used if AV is enabled with feature
|
||||
** BTA_AV_FEAT_VENDOR.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvVendorCmd(UINT8 rc_handle, UINT8 label, tBTA_AV_CODE cmd_code, UINT8 *p_data, UINT16 len)
|
||||
{
|
||||
tBTA_AV_API_VENDOR *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_VENDOR *) GKI_getbuf((UINT16) (sizeof(tBTA_AV_API_VENDOR) + len))) != NULL)
|
||||
{
|
||||
p_buf->hdr.event = BTA_AV_API_VENDOR_CMD_EVT;
|
||||
p_buf->hdr.layer_specific = rc_handle;
|
||||
p_buf->msg.hdr.ctype = cmd_code;
|
||||
p_buf->msg.hdr.subunit_type = AVRC_SUB_PANEL;
|
||||
p_buf->msg.hdr.subunit_id = 0;
|
||||
p_buf->msg.company_id = p_bta_av_cfg->company_id;
|
||||
p_buf->label = label;
|
||||
p_buf->msg.vendor_len = len;
|
||||
if (p_data == NULL)
|
||||
{
|
||||
p_buf->msg.p_vendor_data = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
p_buf->msg.p_vendor_data = (UINT8 *) (p_buf + 1);
|
||||
memcpy(p_buf->msg.p_vendor_data, p_data, len);
|
||||
}
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvVendorRsp
|
||||
**
|
||||
** Description Send a vendor dependent remote control response.
|
||||
** This function must be called if a BTA_AV_VENDOR_CMD_EVT
|
||||
** is received. This function can only be used if AV is
|
||||
** enabled with feature BTA_AV_FEAT_VENDOR.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvVendorRsp(UINT8 rc_handle, UINT8 label, tBTA_AV_CODE rsp_code, UINT8 *p_data, UINT16 len, UINT32 company_id)
|
||||
{
|
||||
tBTA_AV_API_VENDOR *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_VENDOR *) GKI_getbuf((UINT16) (sizeof(tBTA_AV_API_VENDOR) + len))) != NULL)
|
||||
{
|
||||
p_buf->hdr.event = BTA_AV_API_VENDOR_RSP_EVT;
|
||||
p_buf->hdr.layer_specific = rc_handle;
|
||||
p_buf->msg.hdr.ctype = rsp_code;
|
||||
p_buf->msg.hdr.subunit_type = AVRC_SUB_PANEL;
|
||||
p_buf->msg.hdr.subunit_id = 0;
|
||||
if(company_id)
|
||||
p_buf->msg.company_id = company_id;
|
||||
else
|
||||
p_buf->msg.company_id = p_bta_av_cfg->company_id;
|
||||
p_buf->label = label;
|
||||
p_buf->msg.vendor_len = len;
|
||||
if (p_data == NULL)
|
||||
{
|
||||
p_buf->msg.p_vendor_data = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
p_buf->msg.p_vendor_data = (UINT8 *) (p_buf + 1);
|
||||
memcpy(p_buf->msg.p_vendor_data, p_data, len);
|
||||
}
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvOpenRc
|
||||
**
|
||||
** Description Open an AVRCP connection toward the device with the
|
||||
** specified handle
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvOpenRc(tBTA_AV_HNDL handle)
|
||||
{
|
||||
tBTA_AV_API_OPEN_RC *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_OPEN_RC *) GKI_getbuf(sizeof(tBTA_AV_API_OPEN_RC))) != NULL)
|
||||
{
|
||||
p_buf->hdr.event = BTA_AV_API_RC_OPEN_EVT;
|
||||
p_buf->hdr.layer_specific = handle;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvCloseRc
|
||||
**
|
||||
** Description Close an AVRCP connection
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvCloseRc(UINT8 rc_handle)
|
||||
{
|
||||
tBTA_AV_API_CLOSE_RC *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_CLOSE_RC *) GKI_getbuf(sizeof(tBTA_AV_API_CLOSE_RC))) != NULL)
|
||||
{
|
||||
p_buf->hdr.event = BTA_AV_API_RC_CLOSE_EVT;
|
||||
p_buf->hdr.layer_specific = rc_handle;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvMetaRsp
|
||||
**
|
||||
** Description Send a Metadata/Advanced Control response. The message contained
|
||||
** in p_pkt can be composed with AVRC utility functions.
|
||||
** This function can only be used if AV is enabled with feature
|
||||
** BTA_AV_FEAT_METADATA.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvMetaRsp(UINT8 rc_handle, UINT8 label, tBTA_AV_CODE rsp_code,
|
||||
BT_HDR *p_pkt)
|
||||
{
|
||||
tBTA_AV_API_META_RSP *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_META_RSP *) GKI_getbuf((UINT16) (sizeof(tBTA_AV_API_META_RSP)))) != NULL)
|
||||
{
|
||||
p_buf->hdr.event = BTA_AV_API_META_RSP_EVT;
|
||||
p_buf->hdr.layer_specific = rc_handle;
|
||||
p_buf->rsp_code = rsp_code;
|
||||
p_buf->p_pkt = p_pkt;
|
||||
p_buf->is_rsp = TRUE;
|
||||
p_buf->label = label;
|
||||
|
||||
bta_sys_sendmsg(p_buf);
|
||||
} else if (p_pkt) {
|
||||
GKI_freebuf(p_pkt);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvMetaCmd
|
||||
**
|
||||
** Description Send a Metadata/Advanced Control command. The message contained
|
||||
** in p_pkt can be composed with AVRC utility functions.
|
||||
** This function can only be used if AV is enabled with feature
|
||||
** BTA_AV_FEAT_METADATA.
|
||||
** This message is sent only when the peer supports the TG role.
|
||||
*8 The only command makes sense right now is the absolute volume command.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvMetaCmd(UINT8 rc_handle, UINT8 label, tBTA_AV_CMD cmd_code, BT_HDR *p_pkt)
|
||||
{
|
||||
tBTA_AV_API_META_RSP *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_API_META_RSP *) GKI_getbuf((UINT16) (sizeof(tBTA_AV_API_META_RSP)))) != NULL)
|
||||
{
|
||||
p_buf->hdr.event = BTA_AV_API_META_RSP_EVT;
|
||||
p_buf->hdr.layer_specific = rc_handle;
|
||||
p_buf->p_pkt = p_pkt;
|
||||
p_buf->rsp_code = cmd_code;
|
||||
p_buf->is_rsp = FALSE;
|
||||
p_buf->label = label;
|
||||
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* BTA_AV_INCLUDED */
|
207
components/bt/bluedroid/bta/av/bta_av_cfg.c
Executable file
207
components/bt/bluedroid/bta/av/bta_av_cfg.c
Executable file
@ -0,0 +1,207 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2005-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 compile-time configurable constants for advanced
|
||||
* audio/video
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include "bt_target.h"
|
||||
#include "gki.h"
|
||||
#include "bta_api.h"
|
||||
#include "bta_av_int.h"
|
||||
|
||||
#ifndef BTA_AV_RC_PASS_RSP_CODE
|
||||
#define BTA_AV_RC_PASS_RSP_CODE BTA_AV_RSP_NOT_IMPL
|
||||
#endif
|
||||
|
||||
const UINT32 bta_av_meta_caps_co_ids[] = {
|
||||
AVRC_CO_METADATA,
|
||||
AVRC_CO_BROADCOM
|
||||
};
|
||||
|
||||
/* AVRCP cupported categories */
|
||||
#define BTA_AV_RC_SUPF_CT (AVRC_SUPF_CT_CAT2)
|
||||
|
||||
/* Added to modify
|
||||
** 1. flush timeout
|
||||
** 2. Remove Group navigation support in SupportedFeatures
|
||||
** 3. GetCapabilities supported event_ids list
|
||||
** 4. GetCapabilities supported event_ids count
|
||||
*/
|
||||
/* Flushing partial avdtp packets can cause some headsets to disconnect the link
|
||||
if receiving partial a2dp frames */
|
||||
const UINT16 bta_av_audio_flush_to[] = {
|
||||
0, /* 1 stream */
|
||||
0, /* 2 streams */
|
||||
0, /* 3 streams */
|
||||
0, /* 4 streams */
|
||||
0 /* 5 streams */
|
||||
}; /* AVDTP audio transport channel flush timeout */
|
||||
|
||||
/* Note: Android doesnt support AVRC_SUPF_TG_GROUP_NAVI */
|
||||
/* Note: if AVRC_SUPF_TG_GROUP_NAVI is set, bta_av_cfg.avrc_group should be TRUE */
|
||||
#if AVRC_METADATA_INCLUDED == TRUE
|
||||
#define BTA_AV_RC_SUPF_TG (AVRC_SUPF_TG_CAT1) /* TODO: | AVRC_SUPF_TG_APP_SETTINGS) */
|
||||
#else
|
||||
#define BTA_AV_RC_SUPF_TG (AVRC_SUPF_TG_CAT1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If the number of event IDs is changed in this array, BTA_AV_ NUM_RC_EVT_IDS also needs to be changed.
|
||||
*/
|
||||
const UINT8 bta_av_meta_caps_evt_ids[] = {
|
||||
AVRC_EVT_PLAY_STATUS_CHANGE,
|
||||
AVRC_EVT_TRACK_CHANGE,
|
||||
AVRC_EVT_PLAY_POS_CHANGED,
|
||||
/* TODO: Add support for these events
|
||||
AVRC_EVT_APP_SETTING_CHANGE,
|
||||
*/
|
||||
};
|
||||
#ifndef BTA_AV_NUM_RC_EVT_IDS
|
||||
#define BTA_AV_NUM_RC_EVT_IDS (sizeof(bta_av_meta_caps_evt_ids) / sizeof(bta_av_meta_caps_evt_ids[0]))
|
||||
#endif /* BTA_AV_NUM_RC_EVT_IDS */
|
||||
|
||||
/* the MTU for the AVRCP browsing channel */
|
||||
#ifndef BTA_AV_MAX_RC_BR_MTU
|
||||
#define BTA_AV_MAX_RC_BR_MTU 1008
|
||||
#endif
|
||||
|
||||
const tBTA_AV_CFG bta_av_cfg =
|
||||
{
|
||||
AVRC_CO_BROADCOM, /* AVRCP Company ID */
|
||||
#if AVRC_METADATA_INCLUDED == TRUE
|
||||
512, /* AVRCP MTU at L2CAP for control channel */
|
||||
#else
|
||||
48, /* AVRCP MTU at L2CAP for control channel */
|
||||
#endif
|
||||
BTA_AV_MAX_RC_BR_MTU, /* AVRCP MTU at L2CAP for browsing channel */
|
||||
BTA_AV_RC_SUPF_CT, /* AVRCP controller categories */
|
||||
BTA_AV_RC_SUPF_TG, /* AVRCP target categories */
|
||||
672, /* AVDTP signaling channel MTU at L2CAP */
|
||||
BTA_AV_MAX_A2DP_MTU, /* AVDTP audio transport channel MTU at L2CAP */
|
||||
bta_av_audio_flush_to, /* AVDTP audio transport channel flush timeout */
|
||||
6, /* AVDTP audio channel max data queue size */
|
||||
BTA_AV_MAX_VDP_MTU, /* AVDTP video transport channel MTU at L2CAP */
|
||||
600, /* AVDTP video transport channel flush timeout */
|
||||
FALSE, /* TRUE, to accept AVRC 1.3 group nevigation command */
|
||||
2, /* company id count in p_meta_co_ids */
|
||||
BTA_AV_NUM_RC_EVT_IDS, /* event id count in p_meta_evt_ids */
|
||||
BTA_AV_RC_PASS_RSP_CODE,/* the default response code for pass through commands */
|
||||
bta_av_meta_caps_co_ids,/* the metadata Get Capabilities response for company id */
|
||||
bta_av_meta_caps_evt_ids,/* the the metadata Get Capabilities response for event id */
|
||||
NULL, /* the action function table for VDP stream */
|
||||
NULL, /* action function to register VDP */
|
||||
{0}, /* Default AVRCP controller name */
|
||||
{0}, /* Default AVRCP target name */
|
||||
};
|
||||
|
||||
tBTA_AV_CFG *p_bta_av_cfg = (tBTA_AV_CFG *) &bta_av_cfg;
|
||||
|
||||
const UINT16 bta_av_rc_id[] =
|
||||
{
|
||||
0x0000, /* bit mask: 0=SELECT, 1=UP, 2=DOWN, 3=LEFT,
|
||||
4=RIGHT, 5=RIGHT_UP, 6=RIGHT_DOWN, 7=LEFT_UP,
|
||||
8=LEFT_DOWN, 9=ROOT_MENU, 10=SETUP_MENU, 11=CONT_MENU,
|
||||
12=FAV_MENU, 13=EXIT */
|
||||
|
||||
0, /* not used */
|
||||
|
||||
0x0000, /* bit mask: 0=0, 1=1, 2=2, 3=3,
|
||||
4=4, 5=5, 6=6, 7=7,
|
||||
8=8, 9=9, 10=DOT, 11=ENTER,
|
||||
12=CLEAR */
|
||||
|
||||
0x0000, /* bit mask: 0=CHAN_UP, 1=CHAN_DOWN, 2=PREV_CHAN, 3=SOUND_SEL,
|
||||
4=INPUT_SEL, 5=DISP_INFO, 6=HELP, 7=PAGE_UP,
|
||||
8=PAGE_DOWN */
|
||||
|
||||
#if (BTA_AV_RC_PASS_RSP_CODE == BTA_AV_RSP_INTERIM)
|
||||
/* btui_app provides an example of how to leave the decision of rejecting a command or not
|
||||
* based on which media player is currently addressed (this is only applicable for AVRCP 1.4 or later)
|
||||
* If the decision is per player for a particular rc_id, the related bit is clear (not set) */
|
||||
0x0070, /* bit mask: 0=POWER, 1=VOL_UP, 2=VOL_DOWN, 3=MUTE,
|
||||
4=PLAY, 5=STOP, 6=PAUSE, 7=RECORD,
|
||||
8=REWIND, 9=FAST_FOR, 10=EJECT, 11=FORWARD,
|
||||
12=BACKWARD */
|
||||
#else
|
||||
#if (defined BTA_AVRCP_FF_RW_SUPPORT) && (BTA_AVRCP_FF_RW_SUPPORT == TRUE)
|
||||
0x1b70, /* bit mask: 0=POWER, 1=VOL_UP, 2=VOL_DOWN, 3=MUTE,
|
||||
4=PLAY, 5=STOP, 6=PAUSE, 7=RECORD,
|
||||
8=REWIND, 9=FAST_FOR, 10=EJECT, 11=FORWARD,
|
||||
12=BACKWARD */
|
||||
#else
|
||||
0x1870, /* bit mask: 0=POWER, 1=VOL_UP, 2=VOL_DOWN, 3=MUTE,
|
||||
4=PLAY, 5=STOP, 6=PAUSE, 7=RECORD,
|
||||
8=REWIND, 9=FAST_FOR, 10=EJECT, 11=FORWARD,
|
||||
12=BACKWARD */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
0x0000, /* bit mask: 0=ANGLE, 1=SUBPICT */
|
||||
|
||||
0, /* not used */
|
||||
|
||||
0x0000 /* bit mask: 0=not used, 1=F1, 2=F2, 3=F3,
|
||||
4=F4, 5=F5 */
|
||||
};
|
||||
|
||||
#if (BTA_AV_RC_PASS_RSP_CODE == BTA_AV_RSP_INTERIM)
|
||||
const UINT16 bta_av_rc_id_ac[] =
|
||||
{
|
||||
0x0000, /* bit mask: 0=SELECT, 1=UP, 2=DOWN, 3=LEFT,
|
||||
4=RIGHT, 5=RIGHT_UP, 6=RIGHT_DOWN, 7=LEFT_UP,
|
||||
8=LEFT_DOWN, 9=ROOT_MENU, 10=SETUP_MENU, 11=CONT_MENU,
|
||||
12=FAV_MENU, 13=EXIT */
|
||||
|
||||
0, /* not used */
|
||||
|
||||
0x0000, /* bit mask: 0=0, 1=1, 2=2, 3=3,
|
||||
4=4, 5=5, 6=6, 7=7,
|
||||
8=8, 9=9, 10=DOT, 11=ENTER,
|
||||
12=CLEAR */
|
||||
|
||||
0x0000, /* bit mask: 0=CHAN_UP, 1=CHAN_DOWN, 2=PREV_CHAN, 3=SOUND_SEL,
|
||||
4=INPUT_SEL, 5=DISP_INFO, 6=HELP, 7=PAGE_UP,
|
||||
8=PAGE_DOWN */
|
||||
|
||||
/* btui_app provides an example of how to leave the decision of rejecting a command or not
|
||||
* based on which media player is currently addressed (this is only applicable for AVRCP 1.4 or later)
|
||||
* If the decision is per player for a particular rc_id, the related bit is set */
|
||||
0x1800, /* bit mask: 0=POWER, 1=VOL_UP, 2=VOL_DOWN, 3=MUTE,
|
||||
4=PLAY, 5=STOP, 6=PAUSE, 7=RECORD,
|
||||
8=REWIND, 9=FAST_FOR, 10=EJECT, 11=FORWARD,
|
||||
12=BACKWARD */
|
||||
|
||||
0x0000, /* bit mask: 0=ANGLE, 1=SUBPICT */
|
||||
|
||||
0, /* not used */
|
||||
|
||||
0x0000 /* bit mask: 0=not used, 1=F1, 2=F2, 3=F3,
|
||||
4=F4, 5=F5 */
|
||||
};
|
||||
UINT16 *p_bta_av_rc_id_ac = (UINT16 *) bta_av_rc_id_ac;
|
||||
#else
|
||||
UINT16 *p_bta_av_rc_id_ac = NULL;
|
||||
#endif
|
||||
|
||||
UINT16 *p_bta_av_rc_id = (UINT16 *) bta_av_rc_id;
|
99
components/bt/bluedroid/bta/av/bta_av_ci.c
Executable file
99
components/bt/bluedroid/bta/av/bta_av_ci.c
Executable file
@ -0,0 +1,99 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2005-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 is the implementation file for advanced audio/video call-in
|
||||
* functions.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include "bta_api.h"
|
||||
#include "bta_sys.h"
|
||||
#include "bta_av_int.h"
|
||||
#include "bta_av_ci.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_ci_src_data_ready
|
||||
**
|
||||
** Description This function sends an event to the AV indicating that
|
||||
** the phone has audio stream data ready to send and AV
|
||||
** should call bta_av_co_audio_src_data_path() or
|
||||
** bta_av_co_video_src_data_path().
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_av_ci_src_data_ready(tBTA_AV_CHNL chnl)
|
||||
{
|
||||
BT_HDR *p_buf;
|
||||
|
||||
if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
|
||||
{
|
||||
p_buf->layer_specific = chnl;
|
||||
p_buf->event = BTA_AV_CI_SRC_DATA_READY_EVT;
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_ci_setconfig
|
||||
**
|
||||
** Description This function must be called in response to function
|
||||
** bta_av_co_audio_setconfig() or bta_av_co_video_setconfig.
|
||||
** Parameter err_code is set to an AVDTP status value;
|
||||
** AVDT_SUCCESS if the codec configuration is ok,
|
||||
** otherwise error.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_av_ci_setconfig(tBTA_AV_HNDL hndl, UINT8 err_code, UINT8 category,
|
||||
UINT8 num_seid, UINT8 *p_seid, BOOLEAN recfg_needed, UINT8 avdt_handle)
|
||||
{
|
||||
tBTA_AV_CI_SETCONFIG *p_buf;
|
||||
|
||||
if ((p_buf = (tBTA_AV_CI_SETCONFIG *) GKI_getbuf(sizeof(tBTA_AV_CI_SETCONFIG))) != NULL)
|
||||
{
|
||||
p_buf->hdr.layer_specific = hndl;
|
||||
p_buf->hdr.event = (err_code == AVDT_SUCCESS) ?
|
||||
BTA_AV_CI_SETCONFIG_OK_EVT : BTA_AV_CI_SETCONFIG_FAIL_EVT;
|
||||
p_buf->err_code = err_code;
|
||||
p_buf->category = category;
|
||||
p_buf->recfg_needed = recfg_needed;
|
||||
p_buf->num_seid = num_seid;
|
||||
p_buf->avdt_handle= avdt_handle;
|
||||
if(p_seid && num_seid)
|
||||
{
|
||||
p_buf->p_seid = (UINT8 *)(p_buf + 1);
|
||||
memcpy(p_buf->p_seid, p_seid, num_seid);
|
||||
}
|
||||
else
|
||||
{
|
||||
p_buf->p_seid = NULL;
|
||||
p_buf->num_seid = 0;
|
||||
}
|
||||
|
||||
bta_sys_sendmsg(p_buf);
|
||||
}
|
||||
}
|
||||
|
732
components/bt/bluedroid/bta/av/bta_av_int.h
Executable file
732
components/bt/bluedroid/bta/av/bta_av_int.h
Executable file
@ -0,0 +1,732 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2004-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 is the private interface file for the BTA advanced audio/video.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef BTA_AV_INT_H
|
||||
#define BTA_AV_INT_H
|
||||
|
||||
#include "bta_sys.h"
|
||||
#include "bta_api.h"
|
||||
#include "bta_av_api.h"
|
||||
#include "avdt_api.h"
|
||||
#include "bta_av_co.h"
|
||||
#include "list.h"
|
||||
|
||||
#define BTA_AV_DEBUG TRUE
|
||||
/*****************************************************************************
|
||||
** Constants
|
||||
*****************************************************************************/
|
||||
|
||||
enum
|
||||
{
|
||||
/* these events are handled by the AV main state machine */
|
||||
BTA_AV_API_DISABLE_EVT = BTA_SYS_EVT_START(BTA_ID_AV),
|
||||
BTA_AV_API_REMOTE_CMD_EVT,
|
||||
BTA_AV_API_VENDOR_CMD_EVT,
|
||||
BTA_AV_API_VENDOR_RSP_EVT,
|
||||
BTA_AV_API_META_RSP_EVT,
|
||||
BTA_AV_API_RC_CLOSE_EVT,
|
||||
BTA_AV_AVRC_OPEN_EVT,
|
||||
BTA_AV_AVRC_MSG_EVT,
|
||||
BTA_AV_AVRC_NONE_EVT,
|
||||
|
||||
/* these events are handled by the AV stream state machine */
|
||||
BTA_AV_API_OPEN_EVT,
|
||||
BTA_AV_API_CLOSE_EVT,
|
||||
BTA_AV_AP_START_EVT, /* the following 2 events must be in the same order as the *API_*EVT */
|
||||
BTA_AV_AP_STOP_EVT,
|
||||
BTA_AV_API_RECONFIG_EVT,
|
||||
BTA_AV_API_PROTECT_REQ_EVT,
|
||||
BTA_AV_API_PROTECT_RSP_EVT,
|
||||
BTA_AV_API_RC_OPEN_EVT,
|
||||
BTA_AV_SRC_DATA_READY_EVT,
|
||||
BTA_AV_CI_SETCONFIG_OK_EVT,
|
||||
BTA_AV_CI_SETCONFIG_FAIL_EVT,
|
||||
BTA_AV_SDP_DISC_OK_EVT,
|
||||
BTA_AV_SDP_DISC_FAIL_EVT,
|
||||
BTA_AV_STR_DISC_OK_EVT,
|
||||
BTA_AV_STR_DISC_FAIL_EVT,
|
||||
BTA_AV_STR_GETCAP_OK_EVT,
|
||||
BTA_AV_STR_GETCAP_FAIL_EVT,
|
||||
BTA_AV_STR_OPEN_OK_EVT,
|
||||
BTA_AV_STR_OPEN_FAIL_EVT,
|
||||
BTA_AV_STR_START_OK_EVT,
|
||||
BTA_AV_STR_START_FAIL_EVT,
|
||||
BTA_AV_STR_CLOSE_EVT,
|
||||
BTA_AV_STR_CONFIG_IND_EVT,
|
||||
BTA_AV_STR_SECURITY_IND_EVT,
|
||||
BTA_AV_STR_SECURITY_CFM_EVT,
|
||||
BTA_AV_STR_WRITE_CFM_EVT,
|
||||
BTA_AV_STR_SUSPEND_CFM_EVT,
|
||||
BTA_AV_STR_RECONFIG_CFM_EVT,
|
||||
BTA_AV_AVRC_TIMER_EVT,
|
||||
BTA_AV_AVDT_CONNECT_EVT,
|
||||
BTA_AV_AVDT_DISCONNECT_EVT,
|
||||
BTA_AV_ROLE_CHANGE_EVT,
|
||||
BTA_AV_AVDT_DELAY_RPT_EVT,
|
||||
BTA_AV_ACP_CONNECT_EVT,
|
||||
|
||||
/* these events are handled outside of the state machine */
|
||||
BTA_AV_API_ENABLE_EVT,
|
||||
BTA_AV_API_REGISTER_EVT,
|
||||
BTA_AV_API_DEREGISTER_EVT,
|
||||
BTA_AV_API_DISCONNECT_EVT,
|
||||
BTA_AV_CI_SRC_DATA_READY_EVT,
|
||||
BTA_AV_SIG_CHG_EVT,
|
||||
BTA_AV_SIG_TIMER_EVT,
|
||||
BTA_AV_SDP_AVRC_DISC_EVT,
|
||||
BTA_AV_AVRC_CLOSE_EVT,
|
||||
BTA_AV_CONN_CHG_EVT,
|
||||
BTA_AV_DEREG_COMP_EVT,
|
||||
#if (BTA_AV_SINK_INCLUDED == TRUE)
|
||||
BTA_AV_API_SINK_ENABLE_EVT,
|
||||
#endif
|
||||
#if (AVDT_REPORTING == TRUE)
|
||||
BTA_AV_AVDT_RPT_CONN_EVT,
|
||||
#endif
|
||||
BTA_AV_API_START_EVT, /* the following 2 events must be in the same order as the *AP_*EVT */
|
||||
BTA_AV_API_STOP_EVT
|
||||
};
|
||||
|
||||
/* events for AV control block state machine */
|
||||
#define BTA_AV_FIRST_SM_EVT BTA_AV_API_DISABLE_EVT
|
||||
#define BTA_AV_LAST_SM_EVT BTA_AV_AVRC_NONE_EVT
|
||||
|
||||
/* events for AV stream control block state machine */
|
||||
#define BTA_AV_FIRST_SSM_EVT BTA_AV_API_OPEN_EVT
|
||||
|
||||
/* events that do not go through state machine */
|
||||
#define BTA_AV_FIRST_NSM_EVT BTA_AV_API_ENABLE_EVT
|
||||
#define BTA_AV_LAST_NSM_EVT BTA_AV_API_STOP_EVT
|
||||
|
||||
/* API events passed to both SSMs (by bta_av_api_to_ssm) */
|
||||
#define BTA_AV_FIRST_A2S_API_EVT BTA_AV_API_START_EVT
|
||||
#define BTA_AV_FIRST_A2S_SSM_EVT BTA_AV_AP_START_EVT
|
||||
|
||||
#define BTA_AV_LAST_EVT BTA_AV_API_STOP_EVT
|
||||
|
||||
/* maximum number of SEPS in stream discovery results */
|
||||
#define BTA_AV_NUM_SEPS 32
|
||||
|
||||
/* initialization value for AVRC handle */
|
||||
#define BTA_AV_RC_HANDLE_NONE 0xFF
|
||||
|
||||
/* size of database for service discovery */
|
||||
#define BTA_AV_DISC_BUF_SIZE 1000
|
||||
|
||||
/* offset of media type in codec info byte array */
|
||||
#define BTA_AV_MEDIA_TYPE_IDX 1
|
||||
|
||||
/* maximum length of AVDTP security data */
|
||||
#define BTA_AV_SECURITY_MAX_LEN 400
|
||||
|
||||
/* check number of buffers queued at L2CAP when this amount of buffers are queued to L2CAP */
|
||||
#define BTA_AV_QUEUE_DATA_CHK_NUM L2CAP_HIGH_PRI_MIN_XMIT_QUOTA
|
||||
|
||||
/* the number of ACL links with AVDT */
|
||||
#define BTA_AV_NUM_LINKS AVDT_NUM_LINKS
|
||||
|
||||
#define BTA_AV_CO_ID_TO_BE_STREAM(p, u32) {*(p)++ = (UINT8)((u32) >> 16); *(p)++ = (UINT8)((u32) >> 8); *(p)++ = (UINT8)(u32); }
|
||||
#define BTA_AV_BE_STREAM_TO_CO_ID(u32, p) {u32 = (((UINT32)(*((p) + 2))) + (((UINT32)(*((p) + 1))) << 8) + (((UINT32)(*(p))) << 16)); (p) += 3;}
|
||||
|
||||
/* these bits are defined for bta_av_cb.multi_av */
|
||||
#define BTA_AV_MULTI_AV_SUPPORTED 0x01
|
||||
#define BTA_AV_MULTI_AV_IN_USE 0x02
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
** Data types
|
||||
*****************************************************************************/
|
||||
|
||||
/* function types for call-out functions */
|
||||
typedef BOOLEAN (*tBTA_AV_CO_INIT) (UINT8 *p_codec_type, UINT8 *p_codec_info,
|
||||
UINT8 *p_num_protect, UINT8 *p_protect_info, UINT8 index);
|
||||
typedef void (*tBTA_AV_CO_DISC_RES) (tBTA_AV_HNDL hndl, UINT8 num_seps,
|
||||
UINT8 num_snk, UINT8 num_src, BD_ADDR addr, UINT16 uuid_local);
|
||||
typedef UINT8 (*tBTA_AV_CO_GETCFG) (tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
|
||||
UINT8 *p_codec_info, UINT8 *p_sep_info_idx, UINT8 seid,
|
||||
UINT8 *p_num_protect, UINT8 *p_protect_info);
|
||||
typedef void (*tBTA_AV_CO_SETCFG) (tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
|
||||
UINT8 *p_codec_info, UINT8 seid, BD_ADDR addr,
|
||||
UINT8 num_protect, UINT8 *p_protect_info,
|
||||
UINT8 t_local_sep, UINT8 avdt_handle);
|
||||
typedef void (*tBTA_AV_CO_OPEN) (tBTA_AV_HNDL hndl,
|
||||
tBTA_AV_CODEC codec_type, UINT8 *p_codec_info,
|
||||
UINT16 mtu);
|
||||
typedef void (*tBTA_AV_CO_CLOSE) (tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type, UINT16 mtu);
|
||||
typedef void (*tBTA_AV_CO_START) (tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,UINT8 *p_codec_info, BOOLEAN *p_no_rtp_hdr);
|
||||
typedef void (*tBTA_AV_CO_STOP) (tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type);
|
||||
typedef void * (*tBTA_AV_CO_DATAPATH) (tBTA_AV_CODEC codec_type,
|
||||
UINT32 *p_len, UINT32 *p_timestamp);
|
||||
typedef void (*tBTA_AV_CO_DELAY) (tBTA_AV_HNDL hndl, UINT16 delay);
|
||||
|
||||
/* the call-out functions for one stream */
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_CO_INIT init;
|
||||
tBTA_AV_CO_DISC_RES disc_res;
|
||||
tBTA_AV_CO_GETCFG getcfg;
|
||||
tBTA_AV_CO_SETCFG setcfg;
|
||||
tBTA_AV_CO_OPEN open;
|
||||
tBTA_AV_CO_CLOSE close;
|
||||
tBTA_AV_CO_START start;
|
||||
tBTA_AV_CO_STOP stop;
|
||||
tBTA_AV_CO_DATAPATH data;
|
||||
tBTA_AV_CO_DELAY delay;
|
||||
} tBTA_AV_CO_FUNCTS;
|
||||
|
||||
/* data type for BTA_AV_API_ENABLE_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
tBTA_AV_CBACK *p_cback;
|
||||
tBTA_AV_FEAT features;
|
||||
tBTA_SEC sec_mask;
|
||||
} tBTA_AV_API_ENABLE;
|
||||
|
||||
/* data type for BTA_AV_API_REG_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
char p_service_name[BTA_SERVICE_NAME_LEN+1];
|
||||
UINT8 app_id;
|
||||
tBTA_AV_DATA_CBACK *p_app_data_cback;
|
||||
} tBTA_AV_API_REG;
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
BTA_AV_RS_NONE, /* straight API call */
|
||||
BTA_AV_RS_OK, /* the role switch result - successful */
|
||||
BTA_AV_RS_FAIL, /* the role switch result - failed */
|
||||
BTA_AV_RS_DONE /* the role switch is done - continue */
|
||||
};
|
||||
typedef UINT8 tBTA_AV_RS_RES;
|
||||
/* data type for BTA_AV_API_OPEN_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
BD_ADDR bd_addr;
|
||||
BOOLEAN use_rc;
|
||||
tBTA_SEC sec_mask;
|
||||
tBTA_AV_RS_RES switch_res;
|
||||
UINT16 uuid; /* uuid of initiator */
|
||||
} tBTA_AV_API_OPEN;
|
||||
|
||||
/* data type for BTA_AV_API_STOP_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
BOOLEAN suspend;
|
||||
BOOLEAN flush;
|
||||
} tBTA_AV_API_STOP;
|
||||
|
||||
/* data type for BTA_AV_API_DISCONNECT_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
BD_ADDR bd_addr;
|
||||
} tBTA_AV_API_DISCNT;
|
||||
|
||||
/* data type for BTA_AV_API_PROTECT_REQ_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
UINT8 *p_data;
|
||||
UINT16 len;
|
||||
} tBTA_AV_API_PROTECT_REQ;
|
||||
|
||||
/* data type for BTA_AV_API_PROTECT_RSP_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
UINT8 *p_data;
|
||||
UINT16 len;
|
||||
UINT8 error_code;
|
||||
} tBTA_AV_API_PROTECT_RSP;
|
||||
|
||||
/* data type for BTA_AV_API_REMOTE_CMD_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
tAVRC_MSG_PASS msg;
|
||||
UINT8 label;
|
||||
} tBTA_AV_API_REMOTE_CMD;
|
||||
|
||||
/* data type for BTA_AV_API_VENDOR_CMD_EVT and RSP */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
tAVRC_MSG_VENDOR msg;
|
||||
UINT8 label;
|
||||
} tBTA_AV_API_VENDOR;
|
||||
|
||||
/* data type for BTA_AV_API_RC_OPEN_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
} tBTA_AV_API_OPEN_RC;
|
||||
|
||||
/* data type for BTA_AV_API_RC_CLOSE_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
} tBTA_AV_API_CLOSE_RC;
|
||||
|
||||
/* data type for BTA_AV_API_META_RSP_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
BOOLEAN is_rsp;
|
||||
UINT8 label;
|
||||
tBTA_AV_CODE rsp_code;
|
||||
BT_HDR *p_pkt;
|
||||
} tBTA_AV_API_META_RSP;
|
||||
|
||||
|
||||
/* data type for BTA_AV_API_RECONFIG_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
UINT8 codec_info[AVDT_CODEC_SIZE]; /* codec configuration */
|
||||
UINT8 *p_protect_info;
|
||||
UINT8 num_protect;
|
||||
BOOLEAN suspend;
|
||||
UINT8 sep_info_idx;
|
||||
} tBTA_AV_API_RCFG;
|
||||
|
||||
/* data type for BTA_AV_CI_SETCONFIG_OK_EVT and BTA_AV_CI_SETCONFIG_FAIL_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
tBTA_AV_HNDL hndl;
|
||||
UINT8 err_code;
|
||||
UINT8 category;
|
||||
UINT8 num_seid;
|
||||
UINT8 *p_seid;
|
||||
BOOLEAN recfg_needed;
|
||||
UINT8 avdt_handle; /* local sep type for which this stream will be set up */
|
||||
} tBTA_AV_CI_SETCONFIG;
|
||||
|
||||
/* data type for all stream events from AVDTP */
|
||||
typedef struct {
|
||||
BT_HDR hdr;
|
||||
tAVDT_CFG cfg; /* configuration/capabilities parameters */
|
||||
tAVDT_CTRL msg; /* AVDTP callback message parameters */
|
||||
BD_ADDR bd_addr; /* bd address */
|
||||
UINT8 handle;
|
||||
UINT8 avdt_event;
|
||||
BOOLEAN initiator; /* TRUE, if local device initiates the SUSPEND */
|
||||
} tBTA_AV_STR_MSG;
|
||||
|
||||
/* data type for BTA_AV_AVRC_MSG_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
tAVRC_MSG msg;
|
||||
UINT8 handle;
|
||||
UINT8 label;
|
||||
UINT8 opcode;
|
||||
} tBTA_AV_RC_MSG;
|
||||
|
||||
/* data type for BTA_AV_AVRC_OPEN_EVT, BTA_AV_AVRC_CLOSE_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
BD_ADDR peer_addr;
|
||||
UINT8 handle;
|
||||
} tBTA_AV_RC_CONN_CHG;
|
||||
|
||||
/* data type for BTA_AV_CONN_CHG_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
BD_ADDR peer_addr;
|
||||
BOOLEAN is_up;
|
||||
} tBTA_AV_CONN_CHG;
|
||||
|
||||
/* data type for BTA_AV_ROLE_CHANGE_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
UINT8 new_role;
|
||||
UINT8 hci_status;
|
||||
} tBTA_AV_ROLE_RES;
|
||||
|
||||
/* data type for BTA_AV_SDP_DISC_OK_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BT_HDR hdr;
|
||||
UINT16 avdt_version; /* AVDTP protocol version */
|
||||
} tBTA_AV_SDP_RES;
|
||||
|
||||
/* type for SEP control block */
|
||||
typedef struct
|
||||
{
|
||||
UINT8 av_handle; /* AVDTP handle */
|
||||
tBTA_AV_CODEC codec_type; /* codec type */
|
||||
UINT8 tsep; /* SEP type of local SEP */
|
||||
tBTA_AV_DATA_CBACK *p_app_data_cback; /* Application callback for media packets */
|
||||
} tBTA_AV_SEP;
|
||||
|
||||
|
||||
/* initiator/acceptor role for adaption */
|
||||
#define BTA_AV_ROLE_AD_INT 0x00 /* initiator */
|
||||
#define BTA_AV_ROLE_AD_ACP 0x01 /* acceptor */
|
||||
|
||||
/* initiator/acceptor signaling roles */
|
||||
#define BTA_AV_ROLE_START_ACP 0x00
|
||||
#define BTA_AV_ROLE_START_INT 0x10 /* do not change this value */
|
||||
|
||||
#define BTA_AV_ROLE_SUSPEND 0x20 /* suspending on start */
|
||||
#define BTA_AV_ROLE_SUSPEND_OPT 0x40 /* Suspend on Start option is set */
|
||||
|
||||
/* union of all event datatypes */
|
||||
typedef union
|
||||
{
|
||||
BT_HDR hdr;
|
||||
tBTA_AV_API_ENABLE api_enable;
|
||||
tBTA_AV_API_REG api_reg;
|
||||
tBTA_AV_API_OPEN api_open;
|
||||
tBTA_AV_API_STOP api_stop;
|
||||
tBTA_AV_API_DISCNT api_discnt;
|
||||
tBTA_AV_API_PROTECT_REQ api_protect_req;
|
||||
tBTA_AV_API_PROTECT_RSP api_protect_rsp;
|
||||
tBTA_AV_API_REMOTE_CMD api_remote_cmd;
|
||||
tBTA_AV_API_VENDOR api_vendor;
|
||||
tBTA_AV_API_RCFG api_reconfig;
|
||||
tBTA_AV_CI_SETCONFIG ci_setconfig;
|
||||
tBTA_AV_STR_MSG str_msg;
|
||||
tBTA_AV_RC_MSG rc_msg;
|
||||
tBTA_AV_RC_CONN_CHG rc_conn_chg;
|
||||
tBTA_AV_CONN_CHG conn_chg;
|
||||
tBTA_AV_ROLE_RES role_res;
|
||||
tBTA_AV_SDP_RES sdp_res;
|
||||
tBTA_AV_API_META_RSP api_meta_rsp;
|
||||
} tBTA_AV_DATA;
|
||||
|
||||
typedef void (tBTA_AV_VDP_DATA_ACT)(void *p_scb);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_VDP_DATA_ACT *p_act;
|
||||
UINT8 *p_frame;
|
||||
UINT16 buf_size;
|
||||
UINT32 len;
|
||||
UINT32 offset;
|
||||
UINT32 timestamp;
|
||||
} tBTA_AV_VF_INFO;
|
||||
|
||||
typedef union
|
||||
{
|
||||
tBTA_AV_VF_INFO vdp; /* used for video channels only */
|
||||
tBTA_AV_API_OPEN open; /* used only before open and role switch
|
||||
is needed on another AV channel */
|
||||
} tBTA_AV_Q_INFO;
|
||||
|
||||
#define BTA_AV_Q_TAG_OPEN 0x01 /* after API_OPEN, before STR_OPENED */
|
||||
#define BTA_AV_Q_TAG_START 0x02 /* before start sending media packets */
|
||||
#define BTA_AV_Q_TAG_STREAM 0x03 /* during streaming */
|
||||
|
||||
#define BTA_AV_WAIT_ACP_CAPS_ON 0x01 /* retriving the peer capabilities */
|
||||
#define BTA_AV_WAIT_ACP_CAPS_STARTED 0x02 /* started while retriving peer capabilities */
|
||||
#define BTA_AV_WAIT_ROLE_SW_RES_OPEN 0x04 /* waiting for role switch result after API_OPEN, before STR_OPENED */
|
||||
#define BTA_AV_WAIT_ROLE_SW_RES_START 0x08 /* waiting for role switch result before streaming */
|
||||
#define BTA_AV_WAIT_ROLE_SW_STARTED 0x10 /* started while waiting for role switch result */
|
||||
#define BTA_AV_WAIT_ROLE_SW_RETRY 0x20 /* set when retry on timeout */
|
||||
#define BTA_AV_WAIT_CHECK_RC 0x40 /* set when the timer is used by role switch */
|
||||
#define BTA_AV_WAIT_ROLE_SW_FAILED 0x80 /* role switch failed */
|
||||
|
||||
#define BTA_AV_WAIT_ROLE_SW_BITS (BTA_AV_WAIT_ROLE_SW_RES_OPEN|BTA_AV_WAIT_ROLE_SW_RES_START|BTA_AV_WAIT_ROLE_SW_STARTED|BTA_AV_WAIT_ROLE_SW_RETRY)
|
||||
|
||||
/* Bitmap for collision, coll_mask */
|
||||
#define BTA_AV_COLL_INC_TMR 0x01 /* Timer is running for incoming L2C connection */
|
||||
#define BTA_AV_COLL_API_CALLED 0x02 /* API open was called while incoming timer is running */
|
||||
|
||||
/* type for AV stream control block */
|
||||
typedef struct
|
||||
{
|
||||
const tBTA_AV_ACT *p_act_tbl; /* the action table for stream state machine */
|
||||
const tBTA_AV_CO_FUNCTS *p_cos; /* the associated callout functions */
|
||||
tSDP_DISCOVERY_DB *p_disc_db; /* pointer to discovery database */
|
||||
tBTA_AV_SEP seps[BTA_AV_MAX_SEPS];
|
||||
tAVDT_CFG *p_cap; /* buffer used for get capabilities */
|
||||
list_t *a2d_list; /* used for audio channels only */
|
||||
tBTA_AV_Q_INFO q_info;
|
||||
tAVDT_SEP_INFO sep_info[BTA_AV_NUM_SEPS]; /* stream discovery results */
|
||||
tAVDT_CFG cfg; /* local SEP configuration */
|
||||
TIMER_LIST_ENT timer; /* delay timer for AVRC CT */
|
||||
BD_ADDR peer_addr; /* peer BD address */
|
||||
UINT16 l2c_cid; /* L2CAP channel ID */
|
||||
UINT16 stream_mtu; /* MTU of stream */
|
||||
UINT16 avdt_version; /* the avdt version of peer device */
|
||||
tBTA_SEC sec_mask; /* security mask */
|
||||
tBTA_AV_CODEC codec_type; /* codec type */
|
||||
UINT8 media_type; /* Media type */
|
||||
BOOLEAN cong; /* TRUE if AVDTP congested */
|
||||
tBTA_AV_STATUS open_status; /* open failure status */
|
||||
tBTA_AV_CHNL chnl; /* the channel: audio/video */
|
||||
tBTA_AV_HNDL hndl; /* the handle: ((hdi + 1)|chnl) */
|
||||
UINT16 cur_psc_mask; /* Protocol service capabilities mask for current connection */
|
||||
UINT8 avdt_handle; /* AVDTP handle */
|
||||
UINT8 hdi; /* the index to SCB[] */
|
||||
UINT8 num_seps; /* number of seps returned by stream discovery */
|
||||
UINT8 num_disc_snks; /* number of discovered snks */
|
||||
UINT8 num_disc_srcs; /* number of discovered srcs */
|
||||
UINT8 sep_info_idx; /* current index into sep_info */
|
||||
UINT8 sep_idx; /* current index into local seps[] */
|
||||
UINT8 rcfg_idx; /* reconfig requested index into sep_info */
|
||||
UINT8 state; /* state machine state */
|
||||
UINT8 avdt_label; /* AVDTP label */
|
||||
UINT8 app_id; /* application id */
|
||||
UINT8 num_recfg; /* number of reconfigure sent */
|
||||
UINT8 role;
|
||||
UINT8 l2c_bufs; /* the number of buffers queued to L2CAP */
|
||||
UINT8 rc_handle; /* connected AVRCP handle */
|
||||
BOOLEAN use_rc; /* TRUE if AVRCP is allowed */
|
||||
BOOLEAN started; /* TRUE if stream started */
|
||||
UINT8 co_started; /* non-zero, if stream started from call-out perspective */
|
||||
BOOLEAN recfg_sup; /* TRUE if the first attempt to reconfigure the stream was successfull, else False if command fails */
|
||||
BOOLEAN suspend_sup; /* TRUE if Suspend stream is supported, else FALSE if suspend command fails */
|
||||
BOOLEAN deregistring; /* TRUE if deregistering */
|
||||
BOOLEAN sco_suspend; /* TRUE if SUSPEND is issued automatically for SCO */
|
||||
UINT8 coll_mask; /* Mask to check incoming and outgoing collision */
|
||||
tBTA_AV_API_OPEN open_api; /* Saved OPEN api message */
|
||||
UINT8 wait; /* set 0x1, when getting Caps as ACP, set 0x2, when started */
|
||||
UINT8 q_tag; /* identify the associated q_info union member */
|
||||
BOOLEAN no_rtp_hdr; /* TRUE if add no RTP header*/
|
||||
UINT16 uuid_int; /*intended UUID of Initiator to connect to */
|
||||
} tBTA_AV_SCB;
|
||||
|
||||
#define BTA_AV_RC_ROLE_MASK 0x10
|
||||
#define BTA_AV_RC_ROLE_INT 0x00
|
||||
#define BTA_AV_RC_ROLE_ACP 0x10
|
||||
|
||||
#define BTA_AV_RC_CONN_MASK 0x20
|
||||
|
||||
/* type for AV RCP control block */
|
||||
/* index to this control block is the rc handle */
|
||||
typedef struct
|
||||
{
|
||||
UINT8 status;
|
||||
UINT8 handle;
|
||||
UINT8 shdl; /* stream handle (hdi + 1) */
|
||||
UINT8 lidx; /* (index+1) to LCB */
|
||||
tBTA_AV_FEAT peer_features; /* peer features mask */
|
||||
} tBTA_AV_RCB;
|
||||
#define BTA_AV_NUM_RCB (BTA_AV_NUM_STRS + 2)
|
||||
|
||||
enum
|
||||
{
|
||||
BTA_AV_LCB_FREE,
|
||||
BTA_AV_LCB_FIND
|
||||
};
|
||||
|
||||
/* type for AV ACL Link control block */
|
||||
typedef struct
|
||||
{
|
||||
BD_ADDR addr; /* peer BD address */
|
||||
UINT8 conn_msk; /* handle mask of connected stream handle */
|
||||
UINT8 lidx; /* index + 1 */
|
||||
} tBTA_AV_LCB;
|
||||
|
||||
/* type for stream state machine action functions */
|
||||
typedef void (*tBTA_AV_SACT)(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
|
||||
|
||||
/* type for AV control block */
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_SCB *p_scb[BTA_AV_NUM_STRS]; /* stream control block */
|
||||
tSDP_DISCOVERY_DB *p_disc_db; /* pointer to discovery database */
|
||||
tBTA_AV_CBACK *p_cback; /* application callback function */
|
||||
tBTA_AV_RCB rcb[BTA_AV_NUM_RCB]; /* RCB control block */
|
||||
tBTA_AV_LCB lcb[BTA_AV_NUM_LINKS+1]; /* link control block */
|
||||
TIMER_LIST_ENT sig_tmr; /* link timer */
|
||||
TIMER_LIST_ENT acp_sig_tmr; /* timer to monitor signalling when accepting */
|
||||
UINT32 sdp_a2d_handle; /* SDP record handle for audio src */
|
||||
#if (BTA_AV_SINK_INCLUDED == TRUE)
|
||||
UINT32 sdp_a2d_snk_handle; /* SDP record handle for audio snk */
|
||||
#endif
|
||||
UINT32 sdp_vdp_handle; /* SDP record handle for video src */
|
||||
tBTA_AV_FEAT features; /* features mask */
|
||||
tBTA_SEC sec_mask; /* security mask */
|
||||
tBTA_AV_HNDL handle; /* the handle for SDP activity */
|
||||
BOOLEAN disabling; /* TRUE if api disabled called */
|
||||
UINT8 disc; /* (hdi+1) or (rc_handle|BTA_AV_CHNL_MSK) if p_disc_db is in use */
|
||||
UINT8 state; /* state machine state */
|
||||
UINT8 conn_rc; /* handle mask of connected RCP channels */
|
||||
UINT8 conn_audio; /* handle mask of connected audio channels */
|
||||
UINT8 conn_video; /* handle mask of connected video channels */
|
||||
UINT8 conn_lcb; /* index mask of used LCBs */
|
||||
UINT8 audio_open_cnt; /* number of connected audio channels */
|
||||
UINT8 reg_audio; /* handle mask of registered audio channels */
|
||||
UINT8 reg_video; /* handle mask of registered video channels */
|
||||
UINT8 rc_acp_handle;
|
||||
UINT8 rc_acp_idx; /* (index + 1) to RCB */
|
||||
UINT8 rs_idx; /* (index + 1) to SCB for the one waiting for RS on open */
|
||||
BOOLEAN sco_occupied; /* TRUE if SCO is being used or call is in progress */
|
||||
UINT8 audio_streams; /* handle mask of streaming audio channels */
|
||||
UINT8 video_streams; /* handle mask of streaming video channels */
|
||||
} tBTA_AV_CB;
|
||||
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
** Global data
|
||||
*****************************************************************************/
|
||||
|
||||
/* control block declaration */
|
||||
#if BTA_DYNAMIC_MEMORY == FALSE
|
||||
extern tBTA_AV_CB bta_av_cb;
|
||||
#else
|
||||
extern tBTA_AV_CB *bta_av_cb_ptr;
|
||||
#define bta_av_cb (*bta_av_cb_ptr)
|
||||
#endif
|
||||
|
||||
/* config struct */
|
||||
extern tBTA_AV_CFG *p_bta_av_cfg;
|
||||
|
||||
/* rc id config struct */
|
||||
extern UINT16 *p_bta_av_rc_id;
|
||||
extern UINT16 *p_bta_av_rc_id_ac;
|
||||
|
||||
extern const tBTA_AV_SACT bta_av_a2d_action[];
|
||||
extern const tBTA_AV_CO_FUNCTS bta_av_a2d_cos;
|
||||
extern const tBTA_AV_SACT bta_av_vdp_action[];
|
||||
extern tAVDT_CTRL_CBACK * const bta_av_dt_cback[];
|
||||
extern void bta_av_stream_data_cback(UINT8 handle, BT_HDR *p_pkt, UINT32 time_stamp, UINT8 m_pt);
|
||||
|
||||
/*****************************************************************************
|
||||
** Function prototypes
|
||||
*****************************************************************************/
|
||||
/* utility functions */
|
||||
extern tBTA_AV_SCB *bta_av_hndl_to_scb(UINT16 handle);
|
||||
extern BOOLEAN bta_av_chk_start(tBTA_AV_SCB *p_scb);
|
||||
extern void bta_av_restore_switch (void);
|
||||
extern UINT16 bta_av_chk_mtu(tBTA_AV_SCB *p_scb, UINT16 mtu);
|
||||
extern void bta_av_conn_cback(UINT8 handle, BD_ADDR bd_addr, UINT8 event, tAVDT_CTRL *p_data);
|
||||
extern UINT8 bta_av_rc_create(tBTA_AV_CB *p_cb, UINT8 role, UINT8 shdl, UINT8 lidx);
|
||||
extern void bta_av_stream_chg(tBTA_AV_SCB *p_scb, BOOLEAN started);
|
||||
extern BOOLEAN bta_av_is_scb_opening (tBTA_AV_SCB *p_scb);
|
||||
extern BOOLEAN bta_av_is_scb_incoming (tBTA_AV_SCB *p_scb);
|
||||
extern void bta_av_set_scb_sst_init (tBTA_AV_SCB *p_scb);
|
||||
extern BOOLEAN bta_av_is_scb_init (tBTA_AV_SCB *p_scb);
|
||||
extern void bta_av_set_scb_sst_incoming (tBTA_AV_SCB *p_scb);
|
||||
extern tBTA_AV_LCB * bta_av_find_lcb(BD_ADDR addr, UINT8 op);
|
||||
|
||||
|
||||
/* main functions */
|
||||
extern void bta_av_api_deregister(tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_dup_audio_buf(tBTA_AV_SCB *p_scb, BT_HDR *p_buf);
|
||||
extern void bta_av_sm_execute(tBTA_AV_CB *p_cb, UINT16 event, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_ssm_execute(tBTA_AV_SCB *p_scb, UINT16 event, tBTA_AV_DATA *p_data);
|
||||
extern BOOLEAN bta_av_hdl_event(BT_HDR *p_msg);
|
||||
#if (defined(BTA_AV_DEBUG) && BTA_AV_DEBUG == TRUE)
|
||||
extern char *bta_av_evt_code(UINT16 evt_code);
|
||||
#endif
|
||||
extern BOOLEAN bta_av_switch_if_needed(tBTA_AV_SCB *p_scb);
|
||||
extern BOOLEAN bta_av_link_role_ok(tBTA_AV_SCB *p_scb, UINT8 bits);
|
||||
extern BOOLEAN bta_av_is_rcfg_sst(tBTA_AV_SCB *p_scb);
|
||||
|
||||
/* nsm action functions */
|
||||
extern void bta_av_api_disconnect(tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_sig_chg(tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_sig_timer(tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_disc_done(tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_closed(tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_disc(UINT8 disc);
|
||||
extern void bta_av_conn_chg(tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_dereg_comp(tBTA_AV_DATA *p_data);
|
||||
|
||||
/* sm action functions */
|
||||
extern void bta_av_disable (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_opened (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_remote_cmd (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_vendor_cmd (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_vendor_rsp (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_msg (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_close (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_meta_rsp (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_free_rsp (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rc_free_msg (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data);
|
||||
|
||||
extern tBTA_AV_RCB * bta_av_get_rcb_by_shdl(UINT8 shdl);
|
||||
extern void bta_av_del_rc(tBTA_AV_RCB *p_rcb);
|
||||
|
||||
/* ssm action functions */
|
||||
extern void bta_av_do_disc_a2d (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_cleanup (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_free_sdb (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_config_ind (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_disconnect_req (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_security_req (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_security_rsp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_setconfig_rsp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_str_opened (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_security_ind (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_security_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_do_close (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_connect_req (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_sdp_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_disc_results (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_disc_res_as_acp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_open_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_getcap_results (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_setconfig_rej (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_discover_req (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_conn_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_do_start (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_str_stopped (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_reconfig (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_data_path (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_start_ok (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_start_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_str_closed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_clr_cong (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_suspend_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rcfg_str_ok (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rcfg_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rcfg_connect (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rcfg_discntd (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_suspend_cont (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rcfg_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rcfg_open (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_security_rej (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_open_rc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_chk_2nd_start (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_save_caps (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rej_conn (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_rej_conn (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_set_use_rc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_cco_close (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_switch_role (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_role_res (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_delay_co (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_open_at_inc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
|
||||
/* ssm action functions - vdp specific */
|
||||
extern void bta_av_do_disc_vdp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_vdp_str_opened (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||
extern void bta_av_reg_vdp (tAVDT_CS *p_cs, char *p_service_name, void *p_data);
|
||||
|
||||
#endif /* BTA_AV_INT_H */
|
1441
components/bt/bluedroid/bta/av/bta_av_main.c
Executable file
1441
components/bt/bluedroid/bta/av/bta_av_main.c
Executable file
File diff suppressed because it is too large
Load Diff
666
components/bt/bluedroid/bta/av/bta_av_sbc.c
Executable file
666
components/bt/bluedroid/bta/av/bta_av_sbc.c
Executable file
@ -0,0 +1,666 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2004-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 module contains utility functions for dealing with SBC data frames
|
||||
* and codec capabilities.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include "a2d_api.h"
|
||||
#include "a2d_sbc.h"
|
||||
#include "bta_av_sbc.h"
|
||||
#include "utl.h"
|
||||
#include "bt_utils.h"
|
||||
|
||||
typedef int (tBTA_AV_SBC_ACT)(void *p_src, void *p_dst,
|
||||
UINT32 src_samples, UINT32 dst_samples,
|
||||
UINT32 *p_ret);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
INT32 cur_pos; /* current position */
|
||||
UINT32 src_sps; /* samples per second (source audio data) */
|
||||
UINT32 dst_sps; /* samples per second (converted audio data) */
|
||||
tBTA_AV_SBC_ACT *p_act; /* the action function to do the conversion */
|
||||
UINT16 bits; /* number of bits per pcm sample */
|
||||
UINT16 n_channels; /* number of channels (i.e. mono(1), stereo(2)...) */
|
||||
INT16 worker1;
|
||||
INT16 worker2;
|
||||
UINT8 div;
|
||||
} tBTA_AV_SBC_UPS_CB;
|
||||
|
||||
tBTA_AV_SBC_UPS_CB bta_av_sbc_ups_cb;
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_init_up_sample
|
||||
**
|
||||
** Description initialize the up sample
|
||||
**
|
||||
** src_sps: samples per second (source audio data)
|
||||
** dst_sps: samples per second (converted audio data)
|
||||
** bits: number of bits per pcm sample
|
||||
** n_channels: number of channels (i.e. mono(1), stereo(2)...)
|
||||
**
|
||||
** Returns none
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_av_sbc_init_up_sample (UINT32 src_sps, UINT32 dst_sps, UINT16 bits, UINT16 n_channels)
|
||||
{
|
||||
bta_av_sbc_ups_cb.cur_pos = -1;
|
||||
bta_av_sbc_ups_cb.src_sps = src_sps;
|
||||
bta_av_sbc_ups_cb.dst_sps = dst_sps;
|
||||
bta_av_sbc_ups_cb.bits = bits;
|
||||
bta_av_sbc_ups_cb.n_channels= n_channels;
|
||||
|
||||
if(n_channels == 1)
|
||||
{
|
||||
/* mono */
|
||||
if(bits == 8)
|
||||
{
|
||||
bta_av_sbc_ups_cb.p_act = bta_av_sbc_up_sample_8m;
|
||||
bta_av_sbc_ups_cb.div = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
bta_av_sbc_ups_cb.p_act = bta_av_sbc_up_sample_16m;
|
||||
bta_av_sbc_ups_cb.div = 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* stereo */
|
||||
if(bits == 8)
|
||||
{
|
||||
bta_av_sbc_ups_cb.p_act = bta_av_sbc_up_sample_8s;
|
||||
bta_av_sbc_ups_cb.div = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
bta_av_sbc_ups_cb.p_act = bta_av_sbc_up_sample_16s;
|
||||
bta_av_sbc_ups_cb.div = 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_up_sample
|
||||
**
|
||||
** Description Given the source (p_src) audio data and
|
||||
** source speed (src_sps, samples per second),
|
||||
** This function converts it to audio data in the desired format
|
||||
**
|
||||
** p_src: the data buffer that holds the source audio data
|
||||
** p_dst: the data buffer to hold the converted audio data
|
||||
** src_samples: The number of source samples (number of bytes)
|
||||
** dst_samples: The size of p_dst (number of bytes)
|
||||
**
|
||||
** Note: An AE reported an issue with this function.
|
||||
** When called with bta_av_sbc_up_sample(src, uint8_array_dst..)
|
||||
** the byte before uint8_array_dst may get overwritten.
|
||||
** Using uint16_array_dst avoids the problem.
|
||||
** This issue is related to endian-ness and is hard to resolve
|
||||
** in a generic manner.
|
||||
** **************** Please use uint16 array as dst.
|
||||
**
|
||||
** Returns The number of bytes used in p_dst
|
||||
** The number of bytes used in p_src (in *p_ret)
|
||||
**
|
||||
*******************************************************************************/
|
||||
int bta_av_sbc_up_sample (void *p_src, void *p_dst,
|
||||
UINT32 src_samples, UINT32 dst_samples,
|
||||
UINT32 *p_ret)
|
||||
{
|
||||
UINT32 src;
|
||||
UINT32 dst;
|
||||
|
||||
if(bta_av_sbc_ups_cb.p_act)
|
||||
{
|
||||
src = src_samples/bta_av_sbc_ups_cb.div;
|
||||
dst = dst_samples/bta_av_sbc_ups_cb.div;
|
||||
return (*bta_av_sbc_ups_cb.p_act)(p_src, p_dst, src, dst, p_ret);
|
||||
}
|
||||
else
|
||||
{
|
||||
*p_ret = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_up_sample_16s (16bits-stereo)
|
||||
**
|
||||
** Description Given the source (p_src) audio data and
|
||||
** source speed (src_sps, samples per second),
|
||||
** This function converts it to audio data in the desired format
|
||||
**
|
||||
** p_src: the data buffer that holds the source audio data
|
||||
** p_dst: the data buffer to hold the converted audio data
|
||||
** src_samples: The number of source samples (in uint of 4 bytes)
|
||||
** dst_samples: The size of p_dst (in uint of 4 bytes)
|
||||
**
|
||||
** Returns The number of bytes used in p_dst
|
||||
** The number of bytes used in p_src (in *p_ret)
|
||||
**
|
||||
*******************************************************************************/
|
||||
int bta_av_sbc_up_sample_16s (void *p_src, void *p_dst,
|
||||
UINT32 src_samples, UINT32 dst_samples,
|
||||
UINT32 *p_ret)
|
||||
{
|
||||
INT16 *p_src_tmp = (INT16 *)p_src;
|
||||
INT16 *p_dst_tmp = (INT16 *)p_dst;
|
||||
INT16 *p_worker1 = &bta_av_sbc_ups_cb.worker1;
|
||||
INT16 *p_worker2 = &bta_av_sbc_ups_cb.worker2;
|
||||
UINT32 src_sps = bta_av_sbc_ups_cb.src_sps;
|
||||
UINT32 dst_sps = bta_av_sbc_ups_cb.dst_sps;
|
||||
|
||||
while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples)
|
||||
{
|
||||
*p_dst_tmp++ = *p_worker1;
|
||||
*p_dst_tmp++ = *p_worker2;
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos -= src_sps;
|
||||
dst_samples--;
|
||||
}
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos = dst_sps;
|
||||
|
||||
while (src_samples-- && dst_samples)
|
||||
{
|
||||
*p_worker1 = *p_src_tmp++;
|
||||
*p_worker2 = *p_src_tmp++;
|
||||
|
||||
do
|
||||
{
|
||||
*p_dst_tmp++ = *p_worker1;
|
||||
*p_dst_tmp++ = *p_worker2;
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos -= src_sps;
|
||||
dst_samples--;
|
||||
} while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples);
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos += dst_sps;
|
||||
}
|
||||
|
||||
if (bta_av_sbc_ups_cb.cur_pos == (INT32)dst_sps)
|
||||
bta_av_sbc_ups_cb.cur_pos = 0;
|
||||
|
||||
*p_ret = ((char *)p_src_tmp - (char *)p_src);
|
||||
return ((char *)p_dst_tmp - (char *)p_dst);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_up_sample_16m (16bits-mono)
|
||||
**
|
||||
** Description Given the source (p_src) audio data and
|
||||
** source speed (src_sps, samples per second),
|
||||
** This function converts it to audio data in the desired format
|
||||
**
|
||||
** p_src: the data buffer that holds the source audio data
|
||||
** p_dst: the data buffer to hold the converted audio data
|
||||
** src_samples: The number of source samples (in uint of 2 bytes)
|
||||
** dst_samples: The size of p_dst (in uint of 2 bytes)
|
||||
**
|
||||
** Returns The number of bytes used in p_dst
|
||||
** The number of bytes used in p_src (in *p_ret)
|
||||
**
|
||||
*******************************************************************************/
|
||||
int bta_av_sbc_up_sample_16m (void *p_src, void *p_dst,
|
||||
UINT32 src_samples, UINT32 dst_samples,
|
||||
UINT32 *p_ret)
|
||||
{
|
||||
INT16 *p_src_tmp = (INT16 *)p_src;
|
||||
INT16 *p_dst_tmp = (INT16 *)p_dst;
|
||||
INT16 *p_worker = &bta_av_sbc_ups_cb.worker1;
|
||||
UINT32 src_sps = bta_av_sbc_ups_cb.src_sps;
|
||||
UINT32 dst_sps = bta_av_sbc_ups_cb.dst_sps;
|
||||
|
||||
while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples)
|
||||
{
|
||||
*p_dst_tmp++ = *p_worker;
|
||||
*p_dst_tmp++ = *p_worker;
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos -= src_sps;
|
||||
dst_samples--;
|
||||
dst_samples--;
|
||||
}
|
||||
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos = dst_sps;
|
||||
|
||||
while (src_samples-- && dst_samples)
|
||||
{
|
||||
*p_worker = *p_src_tmp++;
|
||||
|
||||
do
|
||||
{
|
||||
*p_dst_tmp++ = *p_worker;
|
||||
*p_dst_tmp++ = *p_worker;
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos -= src_sps;
|
||||
dst_samples--;
|
||||
dst_samples--;
|
||||
|
||||
} while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples);
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos += dst_sps;
|
||||
}
|
||||
|
||||
if (bta_av_sbc_ups_cb.cur_pos == (INT32)dst_sps)
|
||||
bta_av_sbc_ups_cb.cur_pos = 0;
|
||||
|
||||
*p_ret = ((char *)p_src_tmp - (char *)p_src);
|
||||
return ((char *)p_dst_tmp - (char *)p_dst);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_up_sample_8s (8bits-stereo)
|
||||
**
|
||||
** Description Given the source (p_src) audio data and
|
||||
** source speed (src_sps, samples per second),
|
||||
** This function converts it to audio data in the desired format
|
||||
**
|
||||
** p_src: the data buffer that holds the source audio data
|
||||
** p_dst: the data buffer to hold the converted audio data
|
||||
** src_samples: The number of source samples (in uint of 2 bytes)
|
||||
** dst_samples: The size of p_dst (in uint of 2 bytes)
|
||||
**
|
||||
** Returns The number of bytes used in p_dst
|
||||
** The number of bytes used in p_src (in *p_ret)
|
||||
**
|
||||
*******************************************************************************/
|
||||
int bta_av_sbc_up_sample_8s (void *p_src, void *p_dst,
|
||||
UINT32 src_samples, UINT32 dst_samples,
|
||||
UINT32 *p_ret)
|
||||
{
|
||||
UINT8 *p_src_tmp = (UINT8 *)p_src;
|
||||
INT16 *p_dst_tmp = (INT16 *)p_dst;
|
||||
INT16 *p_worker1 = &bta_av_sbc_ups_cb.worker1;
|
||||
INT16 *p_worker2 = &bta_av_sbc_ups_cb.worker2;
|
||||
UINT32 src_sps = bta_av_sbc_ups_cb.src_sps;
|
||||
UINT32 dst_sps = bta_av_sbc_ups_cb.dst_sps;
|
||||
|
||||
while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples)
|
||||
{
|
||||
*p_dst_tmp++ = *p_worker1;
|
||||
*p_dst_tmp++ = *p_worker2;
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos -= src_sps;
|
||||
dst_samples--;
|
||||
dst_samples--;
|
||||
}
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos = dst_sps;
|
||||
|
||||
while (src_samples -- && dst_samples)
|
||||
{
|
||||
*p_worker1 = *(UINT8 *)p_src_tmp++;
|
||||
*p_worker1 -= 0x80;
|
||||
*p_worker1 <<= 8;
|
||||
*p_worker2 = *(UINT8 *)p_src_tmp++;
|
||||
*p_worker2 -= 0x80;
|
||||
*p_worker2 <<= 8;
|
||||
|
||||
do
|
||||
{
|
||||
*p_dst_tmp++ = *p_worker1;
|
||||
*p_dst_tmp++ = *p_worker2;
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos -= src_sps;
|
||||
dst_samples--;
|
||||
dst_samples--;
|
||||
} while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples);
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos += dst_sps;
|
||||
}
|
||||
|
||||
if (bta_av_sbc_ups_cb.cur_pos == (INT32)dst_sps)
|
||||
bta_av_sbc_ups_cb.cur_pos = 0;
|
||||
|
||||
*p_ret = ((char *)p_src_tmp - (char *)p_src);
|
||||
return ((char *)p_dst_tmp - (char *)p_dst);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_up_sample_8m (8bits-mono)
|
||||
**
|
||||
** Description Given the source (p_src) audio data and
|
||||
** source speed (src_sps, samples per second),
|
||||
** This function converts it to audio data in the desired format
|
||||
**
|
||||
** p_src: the data buffer that holds the source audio data
|
||||
** p_dst: the data buffer to hold the converted audio data
|
||||
** src_samples: The number of source samples (number of bytes)
|
||||
** dst_samples: The size of p_dst (number of bytes)
|
||||
**
|
||||
** Returns The number of bytes used in p_dst
|
||||
** The number of bytes used in p_src (in *p_ret)
|
||||
**
|
||||
*******************************************************************************/
|
||||
int bta_av_sbc_up_sample_8m (void *p_src, void *p_dst,
|
||||
UINT32 src_samples, UINT32 dst_samples,
|
||||
UINT32 *p_ret)
|
||||
{
|
||||
UINT8 *p_src_tmp = (UINT8 *)p_src;
|
||||
INT16 *p_dst_tmp = (INT16 *)p_dst;
|
||||
INT16 *p_worker = &bta_av_sbc_ups_cb.worker1;
|
||||
UINT32 src_sps = bta_av_sbc_ups_cb.src_sps;
|
||||
UINT32 dst_sps = bta_av_sbc_ups_cb.dst_sps;
|
||||
|
||||
while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples)
|
||||
{
|
||||
*p_dst_tmp++ = *p_worker;
|
||||
*p_dst_tmp++ = *p_worker;
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos -= src_sps;
|
||||
dst_samples -= 4;
|
||||
}
|
||||
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos = dst_sps;
|
||||
|
||||
while (src_samples-- && dst_samples)
|
||||
{
|
||||
*p_worker = *(UINT8 *)p_src_tmp++;
|
||||
*p_worker -= 0x80;
|
||||
*p_worker <<= 8;
|
||||
|
||||
do
|
||||
{
|
||||
*p_dst_tmp++ = *p_worker;
|
||||
*p_dst_tmp++ = *p_worker;
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos -= src_sps;
|
||||
dst_samples -= 4;
|
||||
|
||||
} while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples);
|
||||
|
||||
bta_av_sbc_ups_cb.cur_pos += dst_sps;
|
||||
}
|
||||
|
||||
if (bta_av_sbc_ups_cb.cur_pos == (INT32)dst_sps)
|
||||
bta_av_sbc_ups_cb.cur_pos = 0;
|
||||
|
||||
*p_ret = ((char *)p_src_tmp - (char *)p_src);
|
||||
return ((char *)p_dst_tmp - (char *)p_dst);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_cfg_for_cap
|
||||
**
|
||||
** Description Determine the preferred SBC codec configuration for the
|
||||
** given codec capabilities. The function is passed the
|
||||
** preferred codec configuration and the peer codec
|
||||
** capabilities for the stream. The function attempts to
|
||||
** match the preferred capabilities with the configuration
|
||||
** as best it can. The resulting codec configuration is
|
||||
** returned in the same memory used for the capabilities.
|
||||
**
|
||||
** Returns 0 if ok, nonzero if error.
|
||||
** Codec configuration in p_cap.
|
||||
**
|
||||
*******************************************************************************/
|
||||
UINT8 bta_av_sbc_cfg_for_cap(UINT8 *p_peer, tA2D_SBC_CIE *p_cap, tA2D_SBC_CIE *p_pref)
|
||||
{
|
||||
UINT8 status = A2D_SUCCESS;
|
||||
tA2D_SBC_CIE peer_cie;
|
||||
UNUSED(p_cap);
|
||||
|
||||
/* parse peer capabilities */
|
||||
if ((status = A2D_ParsSbcInfo(&peer_cie, p_peer, TRUE)) != 0)
|
||||
{
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Check if the peer supports our channel mode */
|
||||
if (peer_cie.ch_mode & p_pref->ch_mode)
|
||||
{
|
||||
peer_cie.ch_mode = p_pref->ch_mode;
|
||||
}
|
||||
else
|
||||
{
|
||||
APPL_TRACE_ERROR("bta_av_sbc_cfg_for_cap: ch_mode(0x%02X) not supported", p_pref->ch_mode);
|
||||
return A2D_FAIL;
|
||||
}
|
||||
|
||||
/* Check if the peer supports our sampling freq */
|
||||
if (peer_cie.samp_freq & p_pref->samp_freq)
|
||||
{
|
||||
peer_cie.samp_freq = p_pref->samp_freq;
|
||||
}
|
||||
else
|
||||
{
|
||||
APPL_TRACE_ERROR("bta_av_sbc_cfg_for_cap: samp_freq(0x%02X) not supported", p_pref->samp_freq);
|
||||
return A2D_FAIL;
|
||||
}
|
||||
|
||||
/* Check if the peer supports our block len */
|
||||
if (peer_cie.block_len & p_pref->block_len)
|
||||
{
|
||||
peer_cie.block_len = p_pref->block_len;
|
||||
}
|
||||
else
|
||||
{
|
||||
APPL_TRACE_ERROR("bta_av_sbc_cfg_for_cap: block_len(0x%02X) not supported", p_pref->block_len);
|
||||
return A2D_FAIL;
|
||||
}
|
||||
|
||||
/* Check if the peer supports our num subbands */
|
||||
if (peer_cie.num_subbands & p_pref->num_subbands)
|
||||
{
|
||||
peer_cie.num_subbands = p_pref->num_subbands;
|
||||
}
|
||||
else
|
||||
{
|
||||
APPL_TRACE_ERROR("bta_av_sbc_cfg_for_cap: num_subbands(0x%02X) not supported", p_pref->num_subbands);
|
||||
return A2D_FAIL;
|
||||
}
|
||||
|
||||
/* Check if the peer supports our alloc method */
|
||||
if (peer_cie.alloc_mthd & p_pref->alloc_mthd)
|
||||
{
|
||||
peer_cie.alloc_mthd = p_pref->alloc_mthd;
|
||||
}
|
||||
else
|
||||
{
|
||||
APPL_TRACE_ERROR("bta_av_sbc_cfg_for_cap: alloc_mthd(0x%02X) not supported", p_pref->alloc_mthd);
|
||||
return A2D_FAIL;
|
||||
}
|
||||
|
||||
/* max bitpool */
|
||||
if (p_pref->max_bitpool != 0 && p_pref->max_bitpool < peer_cie.max_bitpool)
|
||||
{
|
||||
peer_cie.max_bitpool = p_pref->max_bitpool;
|
||||
}
|
||||
|
||||
/* min bitpool */
|
||||
if (p_pref->min_bitpool != 0 && p_pref->min_bitpool > peer_cie.min_bitpool)
|
||||
{
|
||||
peer_cie.min_bitpool = p_pref->min_bitpool;
|
||||
}
|
||||
|
||||
if (status == A2D_SUCCESS)
|
||||
{
|
||||
/* build configuration */
|
||||
A2D_BldSbcInfo(A2D_MEDIA_TYPE_AUDIO, &peer_cie, p_peer);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_cfg_matches_cap
|
||||
**
|
||||
** Description This function checks whether an SBC codec configuration
|
||||
** matched with capabilities. Here we check subset.
|
||||
**
|
||||
** Returns 0 if ok, nonzero if error.
|
||||
**
|
||||
*******************************************************************************/
|
||||
UINT8 bta_av_sbc_cfg_matches_cap(UINT8 *p_cfg, tA2D_SBC_CIE *p_cap)
|
||||
{
|
||||
UINT8 status = 0;
|
||||
tA2D_SBC_CIE cfg_cie;
|
||||
|
||||
/* parse configuration */
|
||||
if ((status = A2D_ParsSbcInfo(&cfg_cie, p_cfg, TRUE)) != 0)
|
||||
{
|
||||
APPL_TRACE_ERROR(" bta_av_sbc_cfg_matches_cap Parsing Failed %d", status);
|
||||
return status;
|
||||
}
|
||||
|
||||
/* verify that each parameter is in range */
|
||||
|
||||
APPL_TRACE_DEBUG(" FREQ peer: 0%x, capability 0%x", cfg_cie.samp_freq, p_cap->samp_freq);
|
||||
APPL_TRACE_DEBUG(" CH_MODE peer: 0%x, capability 0%x", cfg_cie.ch_mode, p_cap->ch_mode);
|
||||
APPL_TRACE_DEBUG(" BLOCK_LEN peer: 0%x, capability 0%x", cfg_cie.block_len, p_cap->block_len);
|
||||
APPL_TRACE_DEBUG(" SUB_BAND peer: 0%x, capability 0%x", cfg_cie.num_subbands, p_cap->num_subbands);
|
||||
APPL_TRACE_DEBUG(" ALLOC_MTHD peer: 0%x, capability 0%x", cfg_cie.alloc_mthd, p_cap->alloc_mthd);
|
||||
APPL_TRACE_DEBUG(" MAX_BitPool peer: 0%x, capability 0%x", cfg_cie.max_bitpool, p_cap->max_bitpool);
|
||||
APPL_TRACE_DEBUG(" Min_bitpool peer: 0%x, capability 0%x", cfg_cie.min_bitpool, p_cap->min_bitpool);
|
||||
|
||||
/* sampling frequency */
|
||||
if ((cfg_cie.samp_freq & p_cap->samp_freq) == 0)
|
||||
{
|
||||
status = A2D_NS_SAMP_FREQ;
|
||||
}
|
||||
/* channel mode */
|
||||
else if ((cfg_cie.ch_mode & p_cap->ch_mode) == 0)
|
||||
{
|
||||
status = A2D_NS_CH_MODE;
|
||||
}
|
||||
/* block length */
|
||||
else if ((cfg_cie.block_len & p_cap->block_len) == 0)
|
||||
{
|
||||
status = A2D_BAD_BLOCK_LEN;
|
||||
}
|
||||
/* subbands */
|
||||
else if ((cfg_cie.num_subbands & p_cap->num_subbands) == 0)
|
||||
{
|
||||
status = A2D_NS_SUBBANDS;
|
||||
}
|
||||
/* allocation method */
|
||||
else if ((cfg_cie.alloc_mthd & p_cap->alloc_mthd) == 0)
|
||||
{
|
||||
status = A2D_NS_ALLOC_MTHD;
|
||||
}
|
||||
/* max bitpool */
|
||||
else if (cfg_cie.max_bitpool > p_cap->max_bitpool)
|
||||
{
|
||||
status = A2D_NS_MAX_BITPOOL;
|
||||
}
|
||||
/* min bitpool */
|
||||
else if (cfg_cie.min_bitpool < p_cap->min_bitpool)
|
||||
{
|
||||
status = A2D_NS_MIN_BITPOOL;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_cfg_in_cap
|
||||
**
|
||||
** Description This function checks whether an SBC codec configuration
|
||||
** is allowable for the given codec capabilities.
|
||||
**
|
||||
** Returns 0 if ok, nonzero if error.
|
||||
**
|
||||
*******************************************************************************/
|
||||
UINT8 bta_av_sbc_cfg_in_cap(UINT8 *p_cfg, tA2D_SBC_CIE *p_cap)
|
||||
{
|
||||
UINT8 status = 0;
|
||||
tA2D_SBC_CIE cfg_cie;
|
||||
|
||||
/* parse configuration */
|
||||
if ((status = A2D_ParsSbcInfo(&cfg_cie, p_cfg, FALSE)) != 0)
|
||||
{
|
||||
return status;
|
||||
}
|
||||
|
||||
/* verify that each parameter is in range */
|
||||
|
||||
|
||||
/* sampling frequency */
|
||||
if ((cfg_cie.samp_freq & p_cap->samp_freq) == 0)
|
||||
{
|
||||
status = A2D_NS_SAMP_FREQ;
|
||||
}
|
||||
/* channel mode */
|
||||
else if ((cfg_cie.ch_mode & p_cap->ch_mode) == 0)
|
||||
{
|
||||
status = A2D_NS_CH_MODE;
|
||||
}
|
||||
/* block length */
|
||||
else if ((cfg_cie.block_len & p_cap->block_len) == 0)
|
||||
{
|
||||
status = A2D_BAD_BLOCK_LEN;
|
||||
}
|
||||
/* subbands */
|
||||
else if ((cfg_cie.num_subbands & p_cap->num_subbands) == 0)
|
||||
{
|
||||
status = A2D_NS_SUBBANDS;
|
||||
}
|
||||
/* allocation method */
|
||||
else if ((cfg_cie.alloc_mthd & p_cap->alloc_mthd) == 0)
|
||||
{
|
||||
status = A2D_NS_ALLOC_MTHD;
|
||||
}
|
||||
/* max bitpool */
|
||||
else if (cfg_cie.max_bitpool > p_cap->max_bitpool)
|
||||
{
|
||||
status = A2D_NS_MAX_BITPOOL;
|
||||
}
|
||||
/* min bitpool */
|
||||
else if (cfg_cie.min_bitpool < p_cap->min_bitpool)
|
||||
{
|
||||
status = A2D_NS_MIN_BITPOOL;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_bld_hdr
|
||||
**
|
||||
** Description This function builds the packet header for MPF1.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_av_sbc_bld_hdr(BT_HDR *p_buf, UINT16 fr_per_pkt)
|
||||
{
|
||||
UINT8 *p;
|
||||
|
||||
p_buf->offset -= BTA_AV_SBC_HDR_SIZE;
|
||||
p = (UINT8 *) (p_buf + 1) + p_buf->offset;
|
||||
p_buf->len += BTA_AV_SBC_HDR_SIZE;
|
||||
A2D_BldSbcMplHdr(p, FALSE, FALSE, FALSE, (UINT8) fr_per_pkt);
|
||||
}
|
||||
|
599
components/bt/bluedroid/bta/av/bta_av_ssm.c
Executable file
599
components/bt/bluedroid/bta/av/bta_av_ssm.c
Executable file
@ -0,0 +1,599 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2004-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 is the stream state machine for the BTA advanced audio/video.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include "bt_target.h"
|
||||
#if defined(BTA_AV_INCLUDED) && (BTA_AV_INCLUDED == TRUE)
|
||||
|
||||
#include <string.h>
|
||||
#include "bta_av_co.h"
|
||||
#include "bta_av_int.h"
|
||||
|
||||
/*****************************************************************************
|
||||
** Constants and types
|
||||
*****************************************************************************/
|
||||
|
||||
/* state machine states */
|
||||
enum
|
||||
{
|
||||
BTA_AV_INIT_SST,
|
||||
BTA_AV_INCOMING_SST,
|
||||
BTA_AV_OPENING_SST,
|
||||
BTA_AV_OPEN_SST,
|
||||
BTA_AV_RCFG_SST,
|
||||
BTA_AV_CLOSING_SST
|
||||
};
|
||||
|
||||
|
||||
/* state machine action enumeration list */
|
||||
enum
|
||||
{
|
||||
BTA_AV_DO_DISC,
|
||||
BTA_AV_CLEANUP,
|
||||
BTA_AV_FREE_SDB,
|
||||
BTA_AV_CONFIG_IND,
|
||||
BTA_AV_DISCONNECT_REQ,
|
||||
BTA_AV_SECURITY_REQ,
|
||||
BTA_AV_SECURITY_RSP,
|
||||
BTA_AV_SETCONFIG_RSP,
|
||||
BTA_AV_ST_RC_TIMER,
|
||||
BTA_AV_STR_OPENED,
|
||||
BTA_AV_SECURITY_IND,
|
||||
BTA_AV_SECURITY_CFM,
|
||||
BTA_AV_DO_CLOSE,
|
||||
BTA_AV_CONNECT_REQ,
|
||||
BTA_AV_SDP_FAILED,
|
||||
BTA_AV_DISC_RESULTS,
|
||||
BTA_AV_DISC_RES_AS_ACP,
|
||||
BTA_AV_OPEN_FAILED,
|
||||
BTA_AV_GETCAP_RESULTS,
|
||||
BTA_AV_SETCONFIG_REJ,
|
||||
BTA_AV_DISCOVER_REQ,
|
||||
BTA_AV_CONN_FAILED,
|
||||
BTA_AV_DO_START,
|
||||
BTA_AV_STR_STOPPED,
|
||||
BTA_AV_RECONFIG,
|
||||
BTA_AV_DATA_PATH,
|
||||
BTA_AV_START_OK,
|
||||
BTA_AV_START_FAILED,
|
||||
BTA_AV_STR_CLOSED,
|
||||
BTA_AV_CLR_CONG,
|
||||
BTA_AV_SUSPEND_CFM,
|
||||
BTA_AV_RCFG_STR_OK,
|
||||
BTA_AV_RCFG_FAILED,
|
||||
BTA_AV_RCFG_CONNECT,
|
||||
BTA_AV_RCFG_DISCNTD,
|
||||
BTA_AV_SUSPEND_CONT,
|
||||
BTA_AV_RCFG_CFM,
|
||||
BTA_AV_RCFG_OPEN,
|
||||
BTA_AV_SECURITY_REJ,
|
||||
BTA_AV_OPEN_RC,
|
||||
BTA_AV_CHK_2ND_START,
|
||||
BTA_AV_SAVE_CAPS,
|
||||
BTA_AV_SET_USE_RC,
|
||||
BTA_AV_CCO_CLOSE,
|
||||
BTA_AV_SWITCH_ROLE,
|
||||
BTA_AV_ROLE_RES,
|
||||
BTA_AV_DELAY_CO,
|
||||
BTA_AV_OPEN_AT_INC,
|
||||
BTA_AV_NUM_SACTIONS
|
||||
};
|
||||
|
||||
#define BTA_AV_SIGNORE BTA_AV_NUM_SACTIONS
|
||||
|
||||
|
||||
/* state table information */
|
||||
/* #define BTA_AV_SACTION_COL 0 position of actions */
|
||||
#define BTA_AV_SACTIONS 2 /* number of actions */
|
||||
#define BTA_AV_SNEXT_STATE 2 /* position of next state */
|
||||
#define BTA_AV_NUM_COLS 3 /* number of columns in state tables */
|
||||
|
||||
/* state table for init state */
|
||||
static const UINT8 bta_av_sst_init[][BTA_AV_NUM_COLS] =
|
||||
{
|
||||
/* Event Action 1 Action 2 Next state */
|
||||
/* AP_OPEN_EVT */ {BTA_AV_DO_DISC, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* AP_CLOSE_EVT */ {BTA_AV_CLEANUP, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_GETCAP_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_OPEN_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_CLOSE_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_SECURITY_IND_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* AVDT_DISCONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* AVDT_DELAY_RPT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }
|
||||
};
|
||||
|
||||
/* state table for incoming state */
|
||||
static const UINT8 bta_av_sst_incoming[][BTA_AV_NUM_COLS] =
|
||||
{
|
||||
/* Event Action 1 Action 2 Next state */
|
||||
/* AP_OPEN_EVT */ {BTA_AV_OPEN_AT_INC, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* AP_CLOSE_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_DISCONNECT_REQ, BTA_AV_CLOSING_SST },
|
||||
/* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SETCONFIG_RSP, BTA_AV_ST_RC_TIMER, BTA_AV_INCOMING_SST },
|
||||
/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_CLEANUP, BTA_AV_INIT_SST },
|
||||
/* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_DISC_OK_EVT */ {BTA_AV_DISC_RES_AS_ACP,BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_GETCAP_OK_EVT */ {BTA_AV_SAVE_CAPS, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_OPEN_OK_EVT */ {BTA_AV_STR_OPENED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_CLOSE_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_CLEANUP, BTA_AV_INIT_SST },
|
||||
/* STR_CONFIG_IND_EVT */ {BTA_AV_CONFIG_IND, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* AVDT_DISCONNECT_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_CLEANUP, BTA_AV_INIT_SST },
|
||||
/* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }
|
||||
};
|
||||
|
||||
/* state table for opening state */
|
||||
static const UINT8 bta_av_sst_opening[][BTA_AV_NUM_COLS] =
|
||||
{
|
||||
/* Event Action 1 Action 2 Next state */
|
||||
/* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* AP_CLOSE_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* SDP_DISC_OK_EVT */ {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* SDP_DISC_FAIL_EVT */ {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* STR_DISC_OK_EVT */ {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* STR_DISC_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_GETCAP_OK_EVT */ {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* STR_GETCAP_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_OPEN_OK_EVT */ {BTA_AV_ST_RC_TIMER, BTA_AV_STR_OPENED, BTA_AV_OPEN_SST },
|
||||
/* STR_OPEN_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* STR_CLOSE_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* STR_CONFIG_IND_EVT */ {BTA_AV_CONFIG_IND, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST },
|
||||
/* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* AVRC_TIMER_EVT */ {BTA_AV_SWITCH_ROLE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* AVDT_CONNECT_EVT */ {BTA_AV_DISCOVER_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* AVDT_DISCONNECT_EVT */ {BTA_AV_CONN_FAILED, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* ROLE_CHANGE_EVT*/ {BTA_AV_ROLE_RES, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||
/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }
|
||||
};
|
||||
|
||||
/* state table for open state */
|
||||
static const UINT8 bta_av_sst_open[][BTA_AV_NUM_COLS] =
|
||||
{
|
||||
/* Event Action 1 Action 2 Next state */
|
||||
/* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* AP_CLOSE_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* AP_START_EVT */ {BTA_AV_DO_START, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* AP_STOP_EVT */ {BTA_AV_STR_STOPPED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* API_RECONFIG_EVT */ {BTA_AV_RECONFIG, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* API_RC_OPEN_EVT */ {BTA_AV_SET_USE_RC, BTA_AV_OPEN_RC, BTA_AV_OPEN_SST },
|
||||
/* SRC_DATA_READY_EVT */ {BTA_AV_DATA_PATH, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_GETCAP_OK_EVT */ {BTA_AV_SAVE_CAPS, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_OPEN_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_START_OK_EVT */ {BTA_AV_START_OK, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_START_FAIL_EVT */ {BTA_AV_START_FAILED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_CLOSE_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_WRITE_CFM_EVT */ {BTA_AV_CLR_CONG, BTA_AV_DATA_PATH, BTA_AV_OPEN_SST },
|
||||
/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SUSPEND_CFM, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* AVRC_TIMER_EVT */ {BTA_AV_OPEN_RC, BTA_AV_CHK_2ND_START, BTA_AV_OPEN_SST },
|
||||
/* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* AVDT_DISCONNECT_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* ROLE_CHANGE_EVT*/ {BTA_AV_ROLE_RES, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }
|
||||
};
|
||||
|
||||
/* state table for reconfig state */
|
||||
static const UINT8 bta_av_sst_rcfg[][BTA_AV_NUM_COLS] =
|
||||
{
|
||||
/* Event Action 1 Action 2 Next state */
|
||||
/* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* AP_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_DISC_OK_EVT */ {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_DISC_FAIL_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_GETCAP_OK_EVT */ {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_GETCAP_FAIL_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_OPEN_OK_EVT */ {BTA_AV_RCFG_STR_OK, BTA_AV_SIGNORE, BTA_AV_OPEN_SST },
|
||||
/* STR_OPEN_FAIL_EVT */ {BTA_AV_RCFG_FAILED, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_CLOSE_EVT */ {BTA_AV_RCFG_CONNECT, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_SECURITY_IND_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SUSPEND_CONT, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* STR_RECONFIG_CFM_EVT */ {BTA_AV_RCFG_CFM, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* AVDT_CONNECT_EVT */ {BTA_AV_RCFG_OPEN, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* AVDT_DISCONNECT_EVT */ {BTA_AV_RCFG_DISCNTD, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_RCFG_SST },
|
||||
/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }
|
||||
};
|
||||
|
||||
/* state table for closing state */
|
||||
static const UINT8 bta_av_sst_closing[][BTA_AV_NUM_COLS] =
|
||||
{
|
||||
/* Event Action 1 Action 2 Next state */
|
||||
/* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* AP_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* SDP_DISC_OK_EVT */ {BTA_AV_SDP_FAILED, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* SDP_DISC_FAIL_EVT */ {BTA_AV_SDP_FAILED, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_GETCAP_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_OPEN_OK_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_OPEN_FAIL_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_REJ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* AVDT_DISCONNECT_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST },
|
||||
/* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* AVDT_DELAY_RPT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||
/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }
|
||||
};
|
||||
|
||||
/* type for state table */
|
||||
typedef const UINT8 (*tBTA_AV_SST_TBL)[BTA_AV_NUM_COLS];
|
||||
|
||||
/* state table */
|
||||
static const tBTA_AV_SST_TBL bta_av_sst_tbl[] =
|
||||
{
|
||||
bta_av_sst_init,
|
||||
bta_av_sst_incoming,
|
||||
bta_av_sst_opening,
|
||||
bta_av_sst_open,
|
||||
bta_av_sst_rcfg,
|
||||
bta_av_sst_closing
|
||||
};
|
||||
|
||||
|
||||
|
||||
#if (defined(BTA_AV_DEBUG) && BTA_AV_DEBUG == TRUE)
|
||||
static char *bta_av_sst_code(UINT8 state);
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_is_rcfg_sst
|
||||
**
|
||||
** Description Check if stream state machine is in reconfig state.
|
||||
**
|
||||
**
|
||||
** Returns TRUE if stream state machine is in reconfig state.
|
||||
**
|
||||
*******************************************************************************/
|
||||
BOOLEAN bta_av_is_rcfg_sst (tBTA_AV_SCB *p_scb)
|
||||
{
|
||||
BOOLEAN is_rcfg_sst = FALSE;
|
||||
|
||||
if (p_scb != NULL)
|
||||
{
|
||||
if (p_scb->state == BTA_AV_RCFG_SST)
|
||||
is_rcfg_sst = TRUE;
|
||||
}
|
||||
|
||||
return is_rcfg_sst;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_ssm_execute
|
||||
**
|
||||
** Description Stream state machine event handling function for AV
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_av_ssm_execute(tBTA_AV_SCB *p_scb, UINT16 event, tBTA_AV_DATA *p_data)
|
||||
{
|
||||
tBTA_AV_SST_TBL state_table;
|
||||
UINT8 action;
|
||||
int i, xx;
|
||||
|
||||
if(p_scb == NULL)
|
||||
{
|
||||
/* this stream is not registered */
|
||||
APPL_TRACE_EVENT("AV channel not registered");
|
||||
return;
|
||||
}
|
||||
|
||||
/* In case incoming connection is for VDP, we need to swap scb. */
|
||||
/* When ACP_CONNECT_EVT was received, we put first available scb to */
|
||||
/* to Incoming state. Later, when STR_CONFIG_IND_EVT is coming, we */
|
||||
/* know if it is A2DP or VDP. */
|
||||
if ((p_scb->state == BTA_AV_INIT_SST) && (event == BTA_AV_STR_CONFIG_IND_EVT))
|
||||
{
|
||||
for (xx = 0; xx < BTA_AV_NUM_STRS; xx++)
|
||||
{
|
||||
if (bta_av_cb.p_scb[xx])
|
||||
{
|
||||
if (bta_av_cb.p_scb[xx]->state == BTA_AV_INCOMING_SST)
|
||||
{
|
||||
bta_av_cb.p_scb[xx]->state = BTA_AV_INIT_SST;
|
||||
bta_av_cb.p_scb[xx]->coll_mask = 0;
|
||||
p_scb->state = BTA_AV_INCOMING_SST;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if (defined(BTA_AV_DEBUG) && BTA_AV_DEBUG == TRUE)
|
||||
APPL_TRACE_VERBOSE("AV Sevent(0x%x)=0x%x(%s) state=%d(%s)",
|
||||
p_scb->hndl, event, bta_av_evt_code(event), p_scb->state, bta_av_sst_code(p_scb->state));
|
||||
#else
|
||||
APPL_TRACE_VERBOSE("AV Sevent=0x%x state=%d", event, p_scb->state);
|
||||
#endif
|
||||
|
||||
/* look up the state table for the current state */
|
||||
state_table = bta_av_sst_tbl[p_scb->state];
|
||||
|
||||
event -= BTA_AV_FIRST_SSM_EVT;
|
||||
|
||||
/* set next state */
|
||||
p_scb->state = state_table[event][BTA_AV_SNEXT_STATE];
|
||||
|
||||
/* execute action functions */
|
||||
for(i=0; i< BTA_AV_SACTIONS; i++)
|
||||
{
|
||||
if ((action = state_table[event][i]) != BTA_AV_SIGNORE)
|
||||
{
|
||||
(*p_scb->p_act_tbl[action])(p_scb, p_data);
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_is_scb_opening
|
||||
**
|
||||
** Description Returns TRUE is scb is in opening state.
|
||||
**
|
||||
**
|
||||
** Returns TRUE if scb is in opening state.
|
||||
**
|
||||
*******************************************************************************/
|
||||
BOOLEAN bta_av_is_scb_opening (tBTA_AV_SCB *p_scb)
|
||||
{
|
||||
BOOLEAN is_opening = FALSE;
|
||||
|
||||
if (p_scb)
|
||||
{
|
||||
if (p_scb->state == BTA_AV_OPENING_SST)
|
||||
is_opening = TRUE;
|
||||
}
|
||||
|
||||
return is_opening;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_is_scb_incoming
|
||||
**
|
||||
** Description Returns TRUE is scb is in incoming state.
|
||||
**
|
||||
**
|
||||
** Returns TRUE if scb is in incoming state.
|
||||
**
|
||||
*******************************************************************************/
|
||||
BOOLEAN bta_av_is_scb_incoming (tBTA_AV_SCB *p_scb)
|
||||
{
|
||||
BOOLEAN is_incoming = FALSE;
|
||||
|
||||
if (p_scb)
|
||||
{
|
||||
if (p_scb->state == BTA_AV_INCOMING_SST)
|
||||
is_incoming = TRUE;
|
||||
}
|
||||
|
||||
return is_incoming;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_set_scb_sst_init
|
||||
**
|
||||
** Description Set SST state to INIT.
|
||||
** Use this function to change SST outside of state machine.
|
||||
**
|
||||
** Returns None
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_av_set_scb_sst_init (tBTA_AV_SCB *p_scb)
|
||||
{
|
||||
if (p_scb)
|
||||
{
|
||||
p_scb->state = BTA_AV_INIT_SST;
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_is_scb_init
|
||||
**
|
||||
** Description Returns TRUE is scb is in init state.
|
||||
**
|
||||
**
|
||||
** Returns TRUE if scb is in incoming state.
|
||||
**
|
||||
*******************************************************************************/
|
||||
BOOLEAN bta_av_is_scb_init (tBTA_AV_SCB *p_scb)
|
||||
{
|
||||
BOOLEAN is_init = FALSE;
|
||||
|
||||
if (p_scb)
|
||||
{
|
||||
if (p_scb->state == BTA_AV_INIT_SST)
|
||||
is_init = TRUE;
|
||||
}
|
||||
|
||||
return is_init;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_set_scb_sst_incoming
|
||||
**
|
||||
** Description Set SST state to incoming.
|
||||
** Use this function to change SST outside of state machine.
|
||||
**
|
||||
** Returns None
|
||||
**
|
||||
*******************************************************************************/
|
||||
void bta_av_set_scb_sst_incoming (tBTA_AV_SCB *p_scb)
|
||||
{
|
||||
if (p_scb)
|
||||
{
|
||||
p_scb->state = BTA_AV_INCOMING_SST;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
** Debug Functions
|
||||
*****************************************************************************/
|
||||
#if (defined(BTA_AV_DEBUG) && BTA_AV_DEBUG == TRUE)
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sst_code
|
||||
**
|
||||
** Description
|
||||
**
|
||||
** Returns char *
|
||||
**
|
||||
*******************************************************************************/
|
||||
static char *bta_av_sst_code(UINT8 state)
|
||||
{
|
||||
switch(state)
|
||||
{
|
||||
case BTA_AV_INIT_SST: return "INIT";
|
||||
case BTA_AV_INCOMING_SST: return "INCOMING";
|
||||
case BTA_AV_OPENING_SST: return "OPENING";
|
||||
case BTA_AV_OPEN_SST: return "OPEN";
|
||||
case BTA_AV_RCFG_SST: return "RCFG";
|
||||
case BTA_AV_CLOSING_SST: return "CLOSING";
|
||||
default: return "unknown";
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* BTA_AV_INCLUDED */
|
140
components/bt/bluedroid/bta/include/bta_ar_api.h
Executable file
140
components/bt/bluedroid/bta/include/bta_ar_api.h
Executable file
@ -0,0 +1,140 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2004-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 is the public interface file for the simulatenous advanced
|
||||
* audio/video streaming (AV) source and sink of BTA, Broadcom's Bluetooth
|
||||
* application layer for mobile phones.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef BTA_AR_API_H
|
||||
#define BTA_AR_API_H
|
||||
|
||||
#include "avdt_api.h"
|
||||
#include "avct_api.h"
|
||||
#include "avrc_api.h"
|
||||
#include "sdp_api.h"
|
||||
#include "bta_av_api.h"
|
||||
#include "bta_sys.h"
|
||||
|
||||
/*****************************************************************************
|
||||
** Constants and data types
|
||||
*****************************************************************************/
|
||||
/* This event signal to AR user that other profile is connected */
|
||||
#define BTA_AR_AVDT_CONN_EVT (AVDT_MAX_EVT + 1)
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_init
|
||||
**
|
||||
** Description This function is called from bta_sys_init().
|
||||
** to initialize the control block
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_ar_init(void);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_reg_avdt
|
||||
**
|
||||
** Description This function is called to register to AVDTP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_ar_reg_avdt(tAVDT_REG *p_reg, tAVDT_CTRL_CBACK *p_cback, tBTA_SYS_ID sys_id);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_dereg_avdt
|
||||
**
|
||||
** Description This function is called to de-register from AVDTP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_ar_dereg_avdt(tBTA_SYS_ID sys_id);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_avdt_conn
|
||||
**
|
||||
** Description This function is called to let ar know that some AVDTP profile
|
||||
** is connected for this sys_id.
|
||||
** If the other sys modules started a timer for PENDING_EVT,
|
||||
** the timer can be stopped now.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_ar_avdt_conn(tBTA_SYS_ID sys_id, BD_ADDR bd_addr);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_reg_avct
|
||||
**
|
||||
** Description This function is called to register to AVCTP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_ar_reg_avct(UINT16 mtu, UINT16 mtu_br, UINT8 sec_mask, tBTA_SYS_ID sys_id);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_ar_dereg_avct
|
||||
**
|
||||
** Description This function is called to deregister from AVCTP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_ar_dereg_avct(tBTA_SYS_ID sys_id);
|
||||
|
||||
/******************************************************************************
|
||||
**
|
||||
** Function bta_ar_reg_avrc
|
||||
**
|
||||
** Description This function is called to register an SDP record for AVRCP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
******************************************************************************/
|
||||
extern void bta_ar_reg_avrc(UINT16 service_uuid, char *p_service_name,
|
||||
char *p_provider_name, UINT16 categories, tBTA_SYS_ID sys_id);
|
||||
|
||||
/******************************************************************************
|
||||
**
|
||||
** Function bta_ar_dereg_avrc
|
||||
**
|
||||
** Description This function is called to de-register/delete an SDP record for AVRCP.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
******************************************************************************/
|
||||
extern void bta_ar_dereg_avrc(UINT16 service_uuid, tBTA_SYS_ID sys_id);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* BTA_AR_API_H */
|
791
components/bt/bluedroid/bta/include/bta_av_api.h
Executable file
791
components/bt/bluedroid/bta/include/bta_av_api.h
Executable file
@ -0,0 +1,791 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2004-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 is the public interface file for the advanced audio/video streaming
|
||||
* (AV) subsystem of BTA, Broadcom's Bluetooth application layer for mobile
|
||||
* phones.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef BTA_AV_API_H
|
||||
#define BTA_AV_API_H
|
||||
|
||||
#include "avrc_api.h"
|
||||
#include "avdt_api.h"
|
||||
#include "a2d_api.h"
|
||||
#include "bta_api.h"
|
||||
|
||||
/*****************************************************************************
|
||||
** Constants and data types
|
||||
*****************************************************************************/
|
||||
/* Set to TRUE if seperate authorization prompt desired for AVCTP besides A2DP authorization */
|
||||
/* Typically FALSE when AVRCP is used in conjunction with A2DP */
|
||||
#ifndef BTA_AV_WITH_AVCTP_AUTHORIZATION
|
||||
#define BTA_AV_WITH_AVCTP_AUTHORIZATION FALSE
|
||||
#endif
|
||||
|
||||
/* AV status values */
|
||||
#define BTA_AV_SUCCESS 0 /* successful operation */
|
||||
#define BTA_AV_FAIL 1 /* generic failure */
|
||||
#define BTA_AV_FAIL_SDP 2 /* service not found */
|
||||
#define BTA_AV_FAIL_STREAM 3 /* stream connection failed */
|
||||
#define BTA_AV_FAIL_RESOURCES 4 /* no resources */
|
||||
#define BTA_AV_FAIL_ROLE 5 /* failed due to role management related issues */
|
||||
#define BTA_AV_FAIL_GET_CAP 6 /* get capability failed due to no SEP availale on the peer */
|
||||
|
||||
typedef UINT8 tBTA_AV_STATUS;
|
||||
|
||||
/* AV features masks */
|
||||
#define BTA_AV_FEAT_RCTG 0x0001 /* remote control target */
|
||||
#define BTA_AV_FEAT_RCCT 0x0002 /* remote control controller */
|
||||
#define BTA_AV_FEAT_PROTECT 0x0004 /* streaming media contect protection */
|
||||
#define BTA_AV_FEAT_VENDOR 0x0008 /* remote control vendor dependent commands */
|
||||
#define BTA_AV_FEAT_REPORT 0x0020 /* use reporting service for VDP */
|
||||
#define BTA_AV_FEAT_METADATA 0x0040 /* remote control Metadata Transfer command/response */
|
||||
#define BTA_AV_FEAT_MULTI_AV 0x0080 /* use multi-av, if controller supports it */
|
||||
#define BTA_AV_FEAT_BROWSE 0x0010 /* use browsing channel */
|
||||
#define BTA_AV_FEAT_MASTER 0x0100 /* stream only as master role */
|
||||
#define BTA_AV_FEAT_ADV_CTRL 0x0200 /* remote control Advanced Control command/response */
|
||||
#define BTA_AV_FEAT_DELAY_RPT 0x0400 /* allow delay reporting */
|
||||
#define BTA_AV_FEAT_ACP_START 0x0800 /* start stream when 2nd SNK was accepted */
|
||||
|
||||
/* Internal features */
|
||||
#define BTA_AV_FEAT_NO_SCO_SSPD 0x8000 /* Do not suspend av streaming as to AG events(SCO or Call) */
|
||||
|
||||
typedef UINT16 tBTA_AV_FEAT;
|
||||
|
||||
/* AV channel values */
|
||||
#define BTA_AV_CHNL_MSK 0xC0
|
||||
#define BTA_AV_CHNL_AUDIO 0x40 /* audio channel */
|
||||
#define BTA_AV_CHNL_VIDEO 0x80 /* video channel */
|
||||
typedef UINT8 tBTA_AV_CHNL;
|
||||
|
||||
|
||||
#define BTA_AV_HNDL_MSK 0x3F
|
||||
typedef UINT8 tBTA_AV_HNDL;
|
||||
/* handle index to mask */
|
||||
#define BTA_AV_HNDL_TO_MSK(h) ((UINT8)(1 << (h)))
|
||||
|
||||
/* tBTA_AV_HNDL to mask */
|
||||
#define BTA_AV_HNDL_TYPE_TO_MSK(h) ((UINT8)(1 << (h&BTA_AV_HNDL_MSK)))
|
||||
|
||||
/* offset of codec type in codec info byte array */
|
||||
#define BTA_AV_CODEC_TYPE_IDX AVDT_CODEC_TYPE_INDEX /* 2 */
|
||||
|
||||
|
||||
|
||||
/* maximum number of streams created: 1 for audio, 1 for video */
|
||||
#ifndef BTA_AV_NUM_STRS
|
||||
#define BTA_AV_NUM_STRS 2
|
||||
#endif
|
||||
|
||||
#ifndef BTA_AV_MAX_SEPS
|
||||
#define BTA_AV_MAX_SEPS 2
|
||||
#endif
|
||||
|
||||
#ifndef BTA_AV_MAX_A2DP_MTU
|
||||
/*#define BTA_AV_MAX_A2DP_MTU 668 //224 (DM5) * 3 - 4(L2CAP header) */
|
||||
#define BTA_AV_MAX_A2DP_MTU 1008
|
||||
#endif
|
||||
|
||||
#ifndef BTA_AV_MAX_VDP_MTU
|
||||
#define BTA_AV_MAX_VDP_MTU 1008
|
||||
#endif
|
||||
|
||||
|
||||
/* codec type */
|
||||
#define BTA_AV_CODEC_SBC A2D_MEDIA_CT_SBC /* SBC media codec type */
|
||||
#define BTA_AV_CODEC_M12 A2D_MEDIA_CT_M12 /* MPEG-1, 2 Audio media codec type */
|
||||
#define BTA_AV_CODEC_M24 A2D_MEDIA_CT_M24 /* MPEG-2, 4 AAC media codec type */
|
||||
#define BTA_AV_CODEC_ATRAC A2D_MEDIA_CT_ATRAC /* ATRAC family media codec type */
|
||||
#define BTA_AV_CODEC_H263_P0 VDP_MEDIA_CT_H263_P0 /* H.263 baseline (profile 0) */
|
||||
#define BTA_AV_CODEC_MPEG4 VDP_MEDIA_CT_MPEG4 /* MPEG-4 Visual Simple Profile */
|
||||
#define BTA_AV_CODEC_H263_P3 VDP_MEDIA_CT_H263_P3 /* H.263 profile 3 */
|
||||
#define BTA_AV_CODEC_H263_P8 VDP_MEDIA_CT_H263_P8 /* H.263 profile 8 */
|
||||
#define BTA_AV_CODEC_VEND VDP_MEDIA_CT_VEND /* Non-VDP */
|
||||
|
||||
typedef UINT8 tBTA_AV_CODEC;
|
||||
|
||||
/* Company ID in BT assigned numbers */
|
||||
#define BTA_AV_BT_VENDOR_ID VDP_BT_VENDOR_ID /* Broadcom Corporation */
|
||||
|
||||
/* vendor specific codec ID */
|
||||
#define BTA_AV_CODEC_ID_H264 VDP_CODEC_ID_H264 /* Non-VDP codec ID - H.264 */
|
||||
#define BTA_AV_CODEC_ID_IMG VDP_CODEC_ID_IMG /* Non-VDP codec ID - images/slideshow */
|
||||
|
||||
/* operation id list for BTA_AvRemoteCmd */
|
||||
#define BTA_AV_RC_SELECT AVRC_ID_SELECT /* select */
|
||||
#define BTA_AV_RC_UP AVRC_ID_UP /* up */
|
||||
#define BTA_AV_RC_DOWN AVRC_ID_DOWN /* down */
|
||||
#define BTA_AV_RC_LEFT AVRC_ID_LEFT /* left */
|
||||
#define BTA_AV_RC_RIGHT AVRC_ID_RIGHT /* right */
|
||||
#define BTA_AV_RC_RIGHT_UP AVRC_ID_RIGHT_UP /* right-up */
|
||||
#define BTA_AV_RC_RIGHT_DOWN AVRC_ID_RIGHT_DOWN /* right-down */
|
||||
#define BTA_AV_RC_LEFT_UP AVRC_ID_LEFT_UP /* left-up */
|
||||
#define BTA_AV_RC_LEFT_DOWN AVRC_ID_LEFT_DOWN /* left-down */
|
||||
#define BTA_AV_RC_ROOT_MENU AVRC_ID_ROOT_MENU /* root menu */
|
||||
#define BTA_AV_RC_SETUP_MENU AVRC_ID_SETUP_MENU /* setup menu */
|
||||
#define BTA_AV_RC_CONT_MENU AVRC_ID_CONT_MENU /* contents menu */
|
||||
#define BTA_AV_RC_FAV_MENU AVRC_ID_FAV_MENU /* favorite menu */
|
||||
#define BTA_AV_RC_EXIT AVRC_ID_EXIT /* exit */
|
||||
#define BTA_AV_RC_0 AVRC_ID_0 /* 0 */
|
||||
#define BTA_AV_RC_1 AVRC_ID_1 /* 1 */
|
||||
#define BTA_AV_RC_2 AVRC_ID_2 /* 2 */
|
||||
#define BTA_AV_RC_3 AVRC_ID_3 /* 3 */
|
||||
#define BTA_AV_RC_4 AVRC_ID_4 /* 4 */
|
||||
#define BTA_AV_RC_5 AVRC_ID_5 /* 5 */
|
||||
#define BTA_AV_RC_6 AVRC_ID_6 /* 6 */
|
||||
#define BTA_AV_RC_7 AVRC_ID_7 /* 7 */
|
||||
#define BTA_AV_RC_8 AVRC_ID_8 /* 8 */
|
||||
#define BTA_AV_RC_9 AVRC_ID_9 /* 9 */
|
||||
#define BTA_AV_RC_DOT AVRC_ID_DOT /* dot */
|
||||
#define BTA_AV_RC_ENTER AVRC_ID_ENTER /* enter */
|
||||
#define BTA_AV_RC_CLEAR AVRC_ID_CLEAR /* clear */
|
||||
#define BTA_AV_RC_CHAN_UP AVRC_ID_CHAN_UP /* channel up */
|
||||
#define BTA_AV_RC_CHAN_DOWN AVRC_ID_CHAN_DOWN /* channel down */
|
||||
#define BTA_AV_RC_PREV_CHAN AVRC_ID_PREV_CHAN /* previous channel */
|
||||
#define BTA_AV_RC_SOUND_SEL AVRC_ID_SOUND_SEL /* sound select */
|
||||
#define BTA_AV_RC_INPUT_SEL AVRC_ID_INPUT_SEL /* input select */
|
||||
#define BTA_AV_RC_DISP_INFO AVRC_ID_DISP_INFO /* display information */
|
||||
#define BTA_AV_RC_HELP AVRC_ID_HELP /* help */
|
||||
#define BTA_AV_RC_PAGE_UP AVRC_ID_PAGE_UP /* page up */
|
||||
#define BTA_AV_RC_PAGE_DOWN AVRC_ID_PAGE_DOWN /* page down */
|
||||
#define BTA_AV_RC_POWER AVRC_ID_POWER /* power */
|
||||
#define BTA_AV_RC_VOL_UP AVRC_ID_VOL_UP /* volume up */
|
||||
#define BTA_AV_RC_VOL_DOWN AVRC_ID_VOL_DOWN /* volume down */
|
||||
#define BTA_AV_RC_MUTE AVRC_ID_MUTE /* mute */
|
||||
#define BTA_AV_RC_PLAY AVRC_ID_PLAY /* play */
|
||||
#define BTA_AV_RC_STOP AVRC_ID_STOP /* stop */
|
||||
#define BTA_AV_RC_PAUSE AVRC_ID_PAUSE /* pause */
|
||||
#define BTA_AV_RC_RECORD AVRC_ID_RECORD /* record */
|
||||
#define BTA_AV_RC_REWIND AVRC_ID_REWIND /* rewind */
|
||||
#define BTA_AV_RC_FAST_FOR AVRC_ID_FAST_FOR /* fast forward */
|
||||
#define BTA_AV_RC_EJECT AVRC_ID_EJECT /* eject */
|
||||
#define BTA_AV_RC_FORWARD AVRC_ID_FORWARD /* forward */
|
||||
#define BTA_AV_RC_BACKWARD AVRC_ID_BACKWARD /* backward */
|
||||
#define BTA_AV_RC_ANGLE AVRC_ID_ANGLE /* angle */
|
||||
#define BTA_AV_RC_SUBPICT AVRC_ID_SUBPICT /* subpicture */
|
||||
#define BTA_AV_RC_F1 AVRC_ID_F1 /* F1 */
|
||||
#define BTA_AV_RC_F2 AVRC_ID_F2 /* F2 */
|
||||
#define BTA_AV_RC_F3 AVRC_ID_F3 /* F3 */
|
||||
#define BTA_AV_RC_F4 AVRC_ID_F4 /* F4 */
|
||||
#define BTA_AV_RC_F5 AVRC_ID_F5 /* F5 */
|
||||
#define BTA_AV_VENDOR AVRC_ID_VENDOR /* vendor unique */
|
||||
|
||||
typedef UINT8 tBTA_AV_RC;
|
||||
|
||||
/* state flag for pass through command */
|
||||
#define BTA_AV_STATE_PRESS AVRC_STATE_PRESS /* key pressed */
|
||||
#define BTA_AV_STATE_RELEASE AVRC_STATE_RELEASE /* key released */
|
||||
|
||||
typedef UINT8 tBTA_AV_STATE;
|
||||
|
||||
/* command codes for BTA_AvVendorCmd */
|
||||
#define BTA_AV_CMD_CTRL AVRC_CMD_CTRL
|
||||
#define BTA_AV_CMD_STATUS AVRC_CMD_STATUS
|
||||
#define BTA_AV_CMD_SPEC_INQ AVRC_CMD_SPEC_INQ
|
||||
#define BTA_AV_CMD_NOTIF AVRC_CMD_NOTIF
|
||||
#define BTA_AV_CMD_GEN_INQ AVRC_CMD_GEN_INQ
|
||||
|
||||
typedef UINT8 tBTA_AV_CMD;
|
||||
|
||||
/* response codes for BTA_AvVendorRsp */
|
||||
#define BTA_AV_RSP_NOT_IMPL AVRC_RSP_NOT_IMPL
|
||||
#define BTA_AV_RSP_ACCEPT AVRC_RSP_ACCEPT
|
||||
#define BTA_AV_RSP_REJ AVRC_RSP_REJ
|
||||
#define BTA_AV_RSP_IN_TRANS AVRC_RSP_IN_TRANS
|
||||
#define BTA_AV_RSP_IMPL_STBL AVRC_RSP_IMPL_STBL
|
||||
#define BTA_AV_RSP_CHANGED AVRC_RSP_CHANGED
|
||||
#define BTA_AV_RSP_INTERIM AVRC_RSP_INTERIM
|
||||
|
||||
typedef UINT8 tBTA_AV_CODE;
|
||||
|
||||
/* error codes for BTA_AvProtectRsp */
|
||||
#define BTA_AV_ERR_NONE A2D_SUCCESS /* Success, no error */
|
||||
#define BTA_AV_ERR_BAD_STATE AVDT_ERR_BAD_STATE /* Message cannot be processed in this state */
|
||||
#define BTA_AV_ERR_RESOURCE AVDT_ERR_RESOURCE /* Insufficient resources */
|
||||
#define BTA_AV_ERR_BAD_CP_TYPE A2D_BAD_CP_TYPE /* The requested Content Protection Type is not supported */
|
||||
#define BTA_AV_ERR_BAD_CP_FORMAT A2D_BAD_CP_FORMAT /* The format of Content Protection Data is not correct */
|
||||
|
||||
typedef UINT8 tBTA_AV_ERR;
|
||||
|
||||
|
||||
/* AV callback events */
|
||||
#define BTA_AV_ENABLE_EVT 0 /* AV enabled */
|
||||
#define BTA_AV_REGISTER_EVT 1 /* registered to AVDT */
|
||||
#define BTA_AV_OPEN_EVT 2 /* connection opened */
|
||||
#define BTA_AV_CLOSE_EVT 3 /* connection closed */
|
||||
#define BTA_AV_START_EVT 4 /* stream data transfer started */
|
||||
#define BTA_AV_STOP_EVT 5 /* stream data transfer stopped */
|
||||
#define BTA_AV_PROTECT_REQ_EVT 6 /* content protection request */
|
||||
#define BTA_AV_PROTECT_RSP_EVT 7 /* content protection response */
|
||||
#define BTA_AV_RC_OPEN_EVT 8 /* remote control channel open */
|
||||
#define BTA_AV_RC_CLOSE_EVT 9 /* remote control channel closed */
|
||||
#define BTA_AV_REMOTE_CMD_EVT 10 /* remote control command */
|
||||
#define BTA_AV_REMOTE_RSP_EVT 11 /* remote control response */
|
||||
#define BTA_AV_VENDOR_CMD_EVT 12 /* vendor dependent remote control command */
|
||||
#define BTA_AV_VENDOR_RSP_EVT 13 /* vendor dependent remote control response */
|
||||
#define BTA_AV_RECONFIG_EVT 14 /* reconfigure response */
|
||||
#define BTA_AV_SUSPEND_EVT 15 /* suspend response */
|
||||
#define BTA_AV_PENDING_EVT 16 /* incoming connection pending:
|
||||
* signal channel is open and stream is not open
|
||||
* after BTA_AV_SIG_TIME_VAL ms */
|
||||
#define BTA_AV_META_MSG_EVT 17 /* metadata messages */
|
||||
#define BTA_AV_REJECT_EVT 18 /* incoming connection rejected */
|
||||
#define BTA_AV_RC_FEAT_EVT 19 /* remote control channel peer supported features update */
|
||||
#define BTA_AV_MEDIA_SINK_CFG_EVT 20 /* command to configure codec */
|
||||
#define BTA_AV_MEDIA_DATA_EVT 21 /* sending data to Media Task */
|
||||
/* Max BTA event */
|
||||
#define BTA_AV_MAX_EVT 22
|
||||
|
||||
|
||||
typedef UINT8 tBTA_AV_EVT;
|
||||
|
||||
/* Event associated with BTA_AV_ENABLE_EVT */
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_FEAT features;
|
||||
} tBTA_AV_ENABLE;
|
||||
|
||||
/* Event associated with BTA_AV_REGISTER_EVT */
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_CHNL chnl; /* audio/video */
|
||||
tBTA_AV_HNDL hndl; /* Handle associated with the stream. */
|
||||
UINT8 app_id; /* ID associated with call to BTA_AvRegister() */
|
||||
tBTA_AV_STATUS status;
|
||||
} tBTA_AV_REGISTER;
|
||||
|
||||
/* data associated with BTA_AV_OPEN_EVT */
|
||||
#define BTA_AV_EDR_2MBPS 0x01
|
||||
#define BTA_AV_EDR_3MBPS 0x02
|
||||
typedef UINT8 tBTA_AV_EDR;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_CHNL chnl;
|
||||
tBTA_AV_HNDL hndl;
|
||||
BD_ADDR bd_addr;
|
||||
tBTA_AV_STATUS status;
|
||||
BOOLEAN starting;
|
||||
tBTA_AV_EDR edr; /* 0, if peer device does not support EDR */
|
||||
UINT8 sep; /* sep type of peer device */
|
||||
} tBTA_AV_OPEN;
|
||||
|
||||
/* data associated with BTA_AV_CLOSE_EVT */
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_CHNL chnl;
|
||||
tBTA_AV_HNDL hndl;
|
||||
} tBTA_AV_CLOSE;
|
||||
|
||||
/* data associated with BTA_AV_START_EVT */
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_CHNL chnl;
|
||||
tBTA_AV_HNDL hndl;
|
||||
tBTA_AV_STATUS status;
|
||||
BOOLEAN initiator; /* TRUE, if local device initiates the START */
|
||||
BOOLEAN suspending;
|
||||
} tBTA_AV_START;
|
||||
|
||||
/* data associated with BTA_AV_SUSPEND_EVT */
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_CHNL chnl;
|
||||
tBTA_AV_HNDL hndl;
|
||||
BOOLEAN initiator; /* TRUE, if local device initiates the SUSPEND */
|
||||
tBTA_AV_STATUS status;
|
||||
} tBTA_AV_SUSPEND;
|
||||
|
||||
/* data associated with BTA_AV_RECONFIG_EVT */
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_CHNL chnl;
|
||||
tBTA_AV_HNDL hndl;
|
||||
tBTA_AV_STATUS status;
|
||||
} tBTA_AV_RECONFIG;
|
||||
|
||||
/* data associated with BTA_AV_PROTECT_REQ_EVT */
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_CHNL chnl;
|
||||
tBTA_AV_HNDL hndl;
|
||||
UINT8 *p_data;
|
||||
UINT16 len;
|
||||
} tBTA_AV_PROTECT_REQ;
|
||||
|
||||
/* data associated with BTA_AV_PROTECT_RSP_EVT */
|
||||
typedef struct
|
||||
{
|
||||
tBTA_AV_CHNL chnl;
|
||||
tBTA_AV_HNDL hndl;
|
||||
UINT8 *p_data;
|
||||
UINT16 len;
|
||||
tBTA_AV_ERR err_code;
|
||||
} tBTA_AV_PROTECT_RSP;
|
||||
|
||||
/* data associated with BTA_AV_RC_OPEN_EVT */
|
||||
typedef struct
|
||||
{
|
||||
UINT8 rc_handle;
|
||||
tBTA_AV_FEAT peer_features;
|
||||
BD_ADDR peer_addr;
|
||||
tBTA_AV_STATUS status;
|
||||
} tBTA_AV_RC_OPEN;
|
||||
|
||||
/* data associated with BTA_AV_RC_CLOSE_EVT */
|
||||
typedef struct
|
||||
{
|
||||
UINT8 rc_handle;
|
||||
BD_ADDR peer_addr;
|
||||
} tBTA_AV_RC_CLOSE;
|
||||
|
||||
/* data associated with BTA_AV_RC_FEAT_EVT */
|
||||
typedef struct
|
||||
{
|
||||
UINT8 rc_handle;
|
||||
tBTA_AV_FEAT peer_features;
|
||||
} tBTA_AV_RC_FEAT;
|
||||
|
||||
/* data associated with BTA_AV_REMOTE_CMD_EVT */
|
||||
typedef struct
|
||||
{
|
||||
UINT8 rc_handle;
|
||||
tBTA_AV_RC rc_id;
|
||||
tBTA_AV_STATE key_state;
|
||||
UINT8 len;
|
||||
UINT8 *p_data;
|
||||
tAVRC_HDR hdr; /* Message header. */
|
||||
UINT8 label;
|
||||
} tBTA_AV_REMOTE_CMD;
|
||||
|
||||
/* data associated with BTA_AV_REMOTE_RSP_EVT */
|
||||
typedef struct
|
||||
{
|
||||
UINT8 rc_handle;
|
||||
tBTA_AV_RC rc_id;
|
||||
tBTA_AV_STATE key_state;
|
||||
UINT8 len;
|
||||
UINT8 *p_data;
|
||||
tBTA_AV_CODE rsp_code;
|
||||
UINT8 label;
|
||||
} tBTA_AV_REMOTE_RSP;
|
||||
|
||||
/* data associated with BTA_AV_VENDOR_CMD_EVT, BTA_AV_VENDOR_RSP_EVT */
|
||||
typedef struct
|
||||
{
|
||||
UINT8 rc_handle;
|
||||
UINT16 len; /* Max vendor dependent message is 512 */
|
||||
UINT8 label;
|
||||
tBTA_AV_CODE code;
|
||||
UINT32 company_id;
|
||||
UINT8 *p_data;
|
||||
} tBTA_AV_VENDOR;
|
||||
|
||||
/* data associated with BTA_AV_META_MSG_EVT */
|
||||
typedef struct
|
||||
{
|
||||
UINT8 rc_handle;
|
||||
UINT16 len;
|
||||
UINT8 label;
|
||||
tBTA_AV_CODE code;
|
||||
UINT32 company_id;
|
||||
UINT8 *p_data;
|
||||
tAVRC_MSG *p_msg;
|
||||
} tBTA_AV_META_MSG;
|
||||
|
||||
/* data associated with BTA_AV_PENDING_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BD_ADDR bd_addr;
|
||||
} tBTA_AV_PEND;
|
||||
|
||||
/* data associated with BTA_AV_REJECT_EVT */
|
||||
typedef struct
|
||||
{
|
||||
BD_ADDR bd_addr;
|
||||
tBTA_AV_HNDL hndl; /* Handle associated with the stream that rejected the connection. */
|
||||
} tBTA_AV_REJECT;
|
||||
|
||||
|
||||
/* union of data associated with AV callback */
|
||||
typedef union
|
||||
{
|
||||
tBTA_AV_CHNL chnl;
|
||||
tBTA_AV_ENABLE enable;
|
||||
tBTA_AV_REGISTER registr;
|
||||
tBTA_AV_OPEN open;
|
||||
tBTA_AV_CLOSE close;
|
||||
tBTA_AV_START start;
|
||||
tBTA_AV_PROTECT_REQ protect_req;
|
||||
tBTA_AV_PROTECT_RSP protect_rsp;
|
||||
tBTA_AV_RC_OPEN rc_open;
|
||||
tBTA_AV_RC_CLOSE rc_close;
|
||||
tBTA_AV_REMOTE_CMD remote_cmd;
|
||||
tBTA_AV_REMOTE_RSP remote_rsp;
|
||||
tBTA_AV_VENDOR vendor_cmd;
|
||||
tBTA_AV_VENDOR vendor_rsp;
|
||||
tBTA_AV_RECONFIG reconfig;
|
||||
tBTA_AV_SUSPEND suspend;
|
||||
tBTA_AV_PEND pend;
|
||||
tBTA_AV_META_MSG meta_msg;
|
||||
tBTA_AV_REJECT reject;
|
||||
tBTA_AV_RC_FEAT rc_feat;
|
||||
} tBTA_AV;
|
||||
|
||||
/* union of data associated with AV Media callback */
|
||||
typedef union
|
||||
{
|
||||
BT_HDR *p_data;
|
||||
UINT8 *codec_info;
|
||||
} tBTA_AV_MEDIA;
|
||||
|
||||
|
||||
#define BTA_AVC_PACKET_LEN AVRC_PACKET_LEN
|
||||
#define BTA_VENDOR_DATA_OFFSET 6
|
||||
#define BTA_VENDOR_HEADER_LEN 4
|
||||
#define BTA_MAX_VENDOR_DEPENDENT_DATA_LEN (BTA_AVC_PACKET_LEN-BTA_VENDOR_DATA_OFFSET-BTA_VENDOR_HEADER_LEN)
|
||||
#define BTA_GROUP_NAVI_MSG_OP_DATA_LEN 5
|
||||
|
||||
#define BTA_ERROR_INVALID_CMD AVRC_STS_BAD_CMD
|
||||
#define BTA_ERROR_INVALID_PARAM AVRC_STS_BAD_PARAM
|
||||
#define BTA_ERROR_BAD_CONTENTS AVRC_STS_NOT_FOUND
|
||||
#define BTA_ERROR_INTERNAL AVRC_STS_INTERNAL_ERR
|
||||
|
||||
#define BTA_AV_META_SINGLE_PACKET AVRC_PKT_SINGLE
|
||||
|
||||
#define BTA_AV_CO_METADATA AVRC_CO_METADATA
|
||||
|
||||
/* AV callback */
|
||||
typedef void (tBTA_AV_CBACK)(tBTA_AV_EVT event, tBTA_AV *p_data);
|
||||
typedef void (tBTA_AV_DATA_CBACK)(tBTA_AV_EVT event, tBTA_AV_MEDIA *p_data);
|
||||
|
||||
/* type for stream state machine action functions */
|
||||
typedef void (*tBTA_AV_ACT)(void *p_cb, void *p_data);
|
||||
|
||||
/* type for registering VDP */
|
||||
typedef void (tBTA_AV_REG) (tAVDT_CS *p_cs, char *p_service_name, void *p_data);
|
||||
|
||||
/* AV configuration structure */
|
||||
typedef struct
|
||||
{
|
||||
UINT32 company_id; /* AVRCP Company ID */
|
||||
UINT16 avrc_mtu; /* AVRCP MTU at L2CAP for control channel */
|
||||
UINT16 avrc_br_mtu; /* AVRCP MTU at L2CAP for browsing channel */
|
||||
UINT16 avrc_ct_cat; /* AVRCP controller categories */
|
||||
UINT16 avrc_tg_cat; /* AVRCP target categories */
|
||||
UINT16 sig_mtu; /* AVDTP signaling channel MTU at L2CAP */
|
||||
UINT16 audio_mtu; /* AVDTP audio transport channel MTU at L2CAP */
|
||||
const UINT16 *p_audio_flush_to;/* AVDTP audio transport channel flush timeout */
|
||||
UINT16 audio_mqs; /* AVDTP audio channel max data queue size */
|
||||
UINT16 video_mtu; /* AVDTP video transport channel MTU at L2CAP */
|
||||
UINT16 video_flush_to; /* AVDTP video transport channel flush timeout */
|
||||
BOOLEAN avrc_group; /* TRUE, to accept AVRC 1.3 group nevigation command */
|
||||
UINT8 num_co_ids; /* company id count in p_meta_co_ids */
|
||||
UINT8 num_evt_ids; /* event id count in p_meta_evt_ids */
|
||||
tBTA_AV_CODE rc_pass_rsp; /* the default response code for pass through commands */
|
||||
const UINT32 *p_meta_co_ids;/* the metadata Get Capabilities response for company id */
|
||||
const UINT8 *p_meta_evt_ids;/* the the metadata Get Capabilities response for event id */
|
||||
const tBTA_AV_ACT *p_act_tbl;/* the action function table for VDP stream */
|
||||
tBTA_AV_REG *p_reg; /* action function to register VDP */
|
||||
char avrc_controller_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP controller name */
|
||||
char avrc_target_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP target name*/
|
||||
} tBTA_AV_CFG;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/*****************************************************************************
|
||||
** External Function Declarations
|
||||
*****************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvEnable
|
||||
**
|
||||
** Description Enable the advanced audio/video service. When the enable
|
||||
** operation is complete the callback function will be
|
||||
** called with a BTA_AV_ENABLE_EVT. This function must
|
||||
** be called before other function in the AV API are
|
||||
** called.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvEnable(tBTA_SEC sec_mask, tBTA_AV_FEAT features,
|
||||
tBTA_AV_CBACK *p_cback);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvDisable
|
||||
**
|
||||
** Description Disable the advanced audio/video service.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvDisable(void);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvRegister
|
||||
**
|
||||
** Description Register the audio or video service to stack. When the
|
||||
** operation is complete the callback function will be
|
||||
** called with a BTA_AV_REGISTER_EVT. This function must
|
||||
** be called before AVDT stream is open.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvRegister(tBTA_AV_CHNL chnl, const char *p_service_name,
|
||||
UINT8 app_id, tBTA_AV_DATA_CBACK *p_data_cback);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvDeregister
|
||||
**
|
||||
** Description Deregister the audio or video service
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvDeregister(tBTA_AV_HNDL hndl);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvOpen
|
||||
**
|
||||
** Description Opens an advanced audio/video connection to a peer device.
|
||||
** When connection is open callback function is called
|
||||
** with a BTA_AV_OPEN_EVT.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvOpen(BD_ADDR bd_addr, tBTA_AV_HNDL handle,
|
||||
BOOLEAN use_rc, tBTA_SEC sec_mask, UINT16 uuid);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvClose
|
||||
**
|
||||
** Description Close the current streams.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvClose(tBTA_AV_HNDL handle);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvDisconnect
|
||||
**
|
||||
** Description Close the connection to the address.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvDisconnect(BD_ADDR bd_addr);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvEnable_Sink
|
||||
**
|
||||
** Description Enable/Disable A2DP Sink.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvEnable_Sink(int enable);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvStart
|
||||
**
|
||||
** Description Start audio/video stream data transfer.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvStart(void);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvStop
|
||||
**
|
||||
** Description Stop audio/video stream data transfer.
|
||||
** If suspend is TRUE, this function sends AVDT suspend signal
|
||||
** to the connected peer(s).
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvStop(BOOLEAN suspend);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvReconfig
|
||||
**
|
||||
** Description Reconfigure the audio/video stream.
|
||||
** If suspend is TRUE, this function tries the suspend/reconfigure
|
||||
** procedure first.
|
||||
** If suspend is FALSE or when suspend/reconfigure fails,
|
||||
** this function closes and re-opens the AVDT connection.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvReconfig(tBTA_AV_HNDL hndl, BOOLEAN suspend, UINT8 sep_info_idx,
|
||||
UINT8 *p_codec_info, UINT8 num_protect, UINT8 *p_protect_info);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvProtectReq
|
||||
**
|
||||
** Description Send a content protection request. This function can only
|
||||
** be used if AV is enabled with feature BTA_AV_FEAT_PROTECT.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvProtectReq(tBTA_AV_HNDL hndl, UINT8 *p_data, UINT16 len);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvProtectRsp
|
||||
**
|
||||
** Description Send a content protection response. This function must
|
||||
** be called if a BTA_AV_PROTECT_REQ_EVT is received.
|
||||
** This function can only be used if AV is enabled with
|
||||
** feature BTA_AV_FEAT_PROTECT.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvProtectRsp(tBTA_AV_HNDL hndl, UINT8 error_code, UINT8 *p_data,
|
||||
UINT16 len);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvRemoteCmd
|
||||
**
|
||||
** Description Send a remote control command. This function can only
|
||||
** be used if AV is enabled with feature BTA_AV_FEAT_RCCT.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvRemoteCmd(UINT8 rc_handle, UINT8 label, tBTA_AV_RC rc_id,
|
||||
tBTA_AV_STATE key_state);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvVendorCmd
|
||||
**
|
||||
** Description Send a vendor dependent remote control command. This
|
||||
** function can only be used if AV is enabled with feature
|
||||
** BTA_AV_FEAT_VENDOR.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvVendorCmd(UINT8 rc_handle, UINT8 label, tBTA_AV_CODE cmd_code,
|
||||
UINT8 *p_data, UINT16 len);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvVendorRsp
|
||||
**
|
||||
** Description Send a vendor dependent remote control response.
|
||||
** This function must be called if a BTA_AV_VENDOR_CMD_EVT
|
||||
** is received. This function can only be used if AV is
|
||||
** enabled with feature BTA_AV_FEAT_VENDOR.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvVendorRsp(UINT8 rc_handle, UINT8 label, tBTA_AV_CODE rsp_code,
|
||||
UINT8 *p_data, UINT16 len, UINT32 company_id);
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvOpenRc
|
||||
**
|
||||
** Description Open an AVRCP connection toward the device with the
|
||||
** specified handle
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvOpenRc(tBTA_AV_HNDL handle);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvCloseRc
|
||||
**
|
||||
** Description Close an AVRCP connection
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvCloseRc(UINT8 rc_handle);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvMetaRsp
|
||||
**
|
||||
** Description Send a Metadata command/response. The message contained
|
||||
** in p_pkt can be composed with AVRC utility functions.
|
||||
** This function can only be used if AV is enabled with feature
|
||||
** BTA_AV_FEAT_METADATA.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvMetaRsp(UINT8 rc_handle, UINT8 label, tBTA_AV_CODE rsp_code,
|
||||
BT_HDR *p_pkt);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_AvMetaCmd
|
||||
**
|
||||
** Description Send a Metadata/Advanced Control command. The message contained
|
||||
** in p_pkt can be composed with AVRC utility functions.
|
||||
** This function can only be used if AV is enabled with feature
|
||||
** BTA_AV_FEAT_METADATA.
|
||||
** This message is sent only when the peer supports the TG role.
|
||||
*8 The only command makes sense right now is the absolute volume command.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTA_AvMetaCmd(UINT8 rc_handle, UINT8 label, tBTA_AV_CMD cmd_code, BT_HDR *p_pkt);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* BTA_AV_API_H */
|
73
components/bt/bluedroid/bta/include/bta_av_ci.h
Executable file
73
components/bt/bluedroid/bta/include/bta_av_ci.h
Executable file
@ -0,0 +1,73 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2005-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 is the interface file for advanced audio/video call-in functions.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef BTA_AV_CI_H
|
||||
#define BTA_AV_CI_H
|
||||
|
||||
#include "bta_av_api.h"
|
||||
|
||||
/*****************************************************************************
|
||||
** Function Declarations
|
||||
*****************************************************************************/
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_ci_src_data_ready
|
||||
**
|
||||
** Description This function sends an event to the AV indicating that
|
||||
** the phone has audio stream data ready to send and AV
|
||||
** should call bta_av_co_audio_src_data_path() or
|
||||
** bta_av_co_video_src_data_path().
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_ci_src_data_ready(tBTA_AV_CHNL chnl);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_ci_setconfig
|
||||
**
|
||||
** Description This function must be called in response to function
|
||||
** bta_av_co_audio_setconfig() or bta_av_co_video_setconfig.
|
||||
** Parameter err_code is set to an AVDTP status value;
|
||||
** AVDT_SUCCESS if the codec configuration is ok,
|
||||
** otherwise error.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_ci_setconfig(tBTA_AV_HNDL hndl, UINT8 err_code,
|
||||
UINT8 category, UINT8 num_seid, UINT8 *p_seid,
|
||||
BOOLEAN recfg_needed, UINT8 avdt_handle);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* BTA_AV_CI_H */
|
391
components/bt/bluedroid/bta/include/bta_av_co.h
Executable file
391
components/bt/bluedroid/bta/include/bta_av_co.h
Executable file
@ -0,0 +1,391 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2003-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 is the interface file for advanced audio/video call-out functions.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef BTA_AV_CO_H
|
||||
#define BTA_AV_CO_H
|
||||
|
||||
#include "l2c_api.h"
|
||||
#include "bta_av_api.h"
|
||||
|
||||
/*****************************************************************************
|
||||
** Constants and data types
|
||||
*****************************************************************************/
|
||||
|
||||
/* TRUE to use SCMS-T content protection */
|
||||
#ifndef BTA_AV_CO_CP_SCMS_T
|
||||
#define BTA_AV_CO_CP_SCMS_T FALSE
|
||||
#endif
|
||||
|
||||
/* the content protection IDs assigned by BT SIG */
|
||||
#define BTA_AV_CP_SCMS_T_ID 0x0002
|
||||
#define BTA_AV_CP_DTCP_ID 0x0001
|
||||
|
||||
#define BTA_AV_CP_LOSC 2
|
||||
#define BTA_AV_CP_INFO_LEN 3
|
||||
|
||||
#define BTA_AV_CP_SCMS_COPY_MASK 3
|
||||
#define BTA_AV_CP_SCMS_COPY_FREE 2
|
||||
#define BTA_AV_CP_SCMS_COPY_ONCE 1
|
||||
#define BTA_AV_CP_SCMS_COPY_NEVER 0
|
||||
|
||||
#define BTA_AV_CO_DEFAULT_AUDIO_OFFSET AVDT_MEDIA_OFFSET
|
||||
|
||||
enum
|
||||
{
|
||||
BTA_AV_CO_ST_INIT,
|
||||
BTA_AV_CO_ST_IN,
|
||||
BTA_AV_CO_ST_OUT,
|
||||
BTA_AV_CO_ST_OPEN,
|
||||
BTA_AV_CO_ST_STREAM
|
||||
};
|
||||
|
||||
|
||||
/* data type for the Audio Codec Information*/
|
||||
typedef struct
|
||||
{
|
||||
UINT16 bit_rate; /* SBC encoder bit rate in kbps */
|
||||
UINT16 bit_rate_busy; /* SBC encoder bit rate in kbps */
|
||||
UINT16 bit_rate_swampd;/* SBC encoder bit rate in kbps */
|
||||
UINT8 busy_level; /* Busy level indicating the bit-rate to be used */
|
||||
UINT8 codec_info[AVDT_CODEC_SIZE];
|
||||
UINT8 codec_type; /* Codec type */
|
||||
} tBTA_AV_AUDIO_CODEC_INFO;
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_audio_init
|
||||
**
|
||||
** Description This callout function is executed by AV when it is
|
||||
** started by calling BTA_AvEnable(). This function can be
|
||||
** used by the phone to initialize audio paths or for other
|
||||
** initialization purposes.
|
||||
**
|
||||
**
|
||||
** Returns Stream codec and content protection capabilities info.
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern BOOLEAN bta_av_co_audio_init(UINT8 *p_codec_type, UINT8 *p_codec_info,
|
||||
UINT8 *p_num_protect, UINT8 *p_protect_info, UINT8 index);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_audio_disc_res
|
||||
**
|
||||
** Description This callout function is executed by AV to report the
|
||||
** number of stream end points (SEP) were found during the
|
||||
** AVDT stream discovery process.
|
||||
**
|
||||
**
|
||||
** Returns void.
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_audio_disc_res(tBTA_AV_HNDL hndl, UINT8 num_seps,
|
||||
UINT8 num_snk, UINT8 num_src, BD_ADDR addr, UINT16 uuid_local);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_video_disc_res
|
||||
**
|
||||
** Description This callout function is executed by AV to report the
|
||||
** number of stream end points (SEP) were found during the
|
||||
** AVDT stream discovery process.
|
||||
**
|
||||
**
|
||||
** Returns void.
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_video_disc_res(tBTA_AV_HNDL hndl, UINT8 num_seps,
|
||||
UINT8 num_snk, BD_ADDR addr);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_audio_getconfig
|
||||
**
|
||||
** Description This callout function is executed by AV to retrieve the
|
||||
** desired codec and content protection configuration for the
|
||||
** audio stream.
|
||||
**
|
||||
**
|
||||
** Returns Stream codec and content protection configuration info.
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern UINT8 bta_av_co_audio_getconfig(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
|
||||
UINT8 *p_codec_info, UINT8 *p_sep_info_idx, UINT8 seid,
|
||||
UINT8 *p_num_protect, UINT8 *p_protect_info);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_video_getconfig
|
||||
**
|
||||
** Description This callout function is executed by AV to retrieve the
|
||||
** desired codec and content protection configuration for the
|
||||
** video stream.
|
||||
**
|
||||
**
|
||||
** Returns Stream codec and content protection configuration info.
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern UINT8 bta_av_co_video_getconfig(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
|
||||
UINT8 *p_codec_info, UINT8 *p_sep_info_idx, UINT8 seid,
|
||||
UINT8 *p_num_protect, UINT8 *p_protect_info);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_audio_setconfig
|
||||
**
|
||||
** Description This callout function is executed by AV to set the
|
||||
** codec and content protection configuration of the audio stream.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_audio_setconfig(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
|
||||
UINT8 *p_codec_info, UINT8 seid, BD_ADDR addr,
|
||||
UINT8 num_protect, UINT8 *p_protect_info,UINT8 t_local_sep, UINT8 avdt_handle);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_video_setconfig
|
||||
**
|
||||
** Description This callout function is executed by AV to set the
|
||||
** codec and content protection configuration of the video stream.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_video_setconfig(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
|
||||
UINT8 *p_codec_info, UINT8 seid, BD_ADDR addr,
|
||||
UINT8 num_protect, UINT8 *p_protect_info);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_audio_open
|
||||
**
|
||||
** Description This function is called by AV when the audio stream connection
|
||||
** is opened.
|
||||
** BTA-AV maintains the MTU of A2DP streams.
|
||||
** If this is the 2nd audio stream, mtu is the smaller of the 2
|
||||
** streams.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_audio_open(tBTA_AV_HNDL hndl,
|
||||
tBTA_AV_CODEC codec_type, UINT8 *p_codec_info,
|
||||
UINT16 mtu);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_video_open
|
||||
**
|
||||
** Description This function is called by AV when the video stream connection
|
||||
** is opened.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_video_open(tBTA_AV_HNDL hndl,
|
||||
tBTA_AV_CODEC codec_type, UINT8 *p_codec_info,
|
||||
UINT16 mtu);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_audio_close
|
||||
**
|
||||
** Description This function is called by AV when the audio stream connection
|
||||
** is closed.
|
||||
** BTA-AV maintains the MTU of A2DP streams.
|
||||
** When one stream is closed and no other audio stream is open,
|
||||
** mtu is reported as 0.
|
||||
** Otherwise, the MTU remains open is reported.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_audio_close(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
|
||||
UINT16 mtu);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_video_close
|
||||
**
|
||||
** Description This function is called by AV when the video stream connection
|
||||
** is closed.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_video_close(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
|
||||
UINT16 mtu);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_audio_start
|
||||
**
|
||||
** Description This function is called by AV when the audio streaming data
|
||||
** transfer is started.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_audio_start(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
|
||||
UINT8 *p_codec_info, BOOLEAN *p_no_rtp_hdr);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_video_start
|
||||
**
|
||||
** Description This function is called by AV when the video streaming data
|
||||
** transfer is started.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_video_start(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
|
||||
UINT8 *p_codec_info, BOOLEAN *p_no_rtp_hdr);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_audio_stop
|
||||
**
|
||||
** Description This function is called by AV when the audio streaming data
|
||||
** transfer is stopped.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_audio_stop(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_video_stop
|
||||
**
|
||||
** Description This function is called by AV when the video streaming data
|
||||
** transfer is stopped.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_video_stop(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_audio_src_data_path
|
||||
**
|
||||
** Description This function is called to get the next data buffer from
|
||||
** the audio codec
|
||||
**
|
||||
** Returns NULL if data is not ready.
|
||||
** Otherwise, a GKI buffer (BT_HDR*) containing the audio data.
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void * bta_av_co_audio_src_data_path(tBTA_AV_CODEC codec_type,
|
||||
UINT32 *p_len, UINT32 *p_timestamp);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_video_src_data_path
|
||||
**
|
||||
** Description This function is called to get the next data buffer from
|
||||
** the video codec.
|
||||
**
|
||||
** Returns NULL if data is not ready.
|
||||
** Otherwise, a video data buffer (UINT8*).
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void * bta_av_co_video_src_data_path(tBTA_AV_CODEC codec_type,
|
||||
UINT32 *p_len, UINT32 *p_timestamp);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_audio_drop
|
||||
**
|
||||
** Description An Audio packet is dropped. .
|
||||
** It's very likely that the connected headset with this handle
|
||||
** is moved far away. The implementation may want to reduce
|
||||
** the encoder bit rate setting to reduce the packet size.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_audio_drop(tBTA_AV_HNDL hndl);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_video_report_conn
|
||||
**
|
||||
** Description This function is called by AV when the reporting channel is
|
||||
** opened (open=TRUE) or closed (open=FALSE).
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_video_report_conn (BOOLEAN open, UINT8 avdt_handle);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_video_report_rr
|
||||
**
|
||||
** Description This function is called by AV when a Receiver Report is
|
||||
** received
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_video_report_rr (UINT32 packet_lost);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_audio_delay
|
||||
**
|
||||
** Description This function is called by AV when the audio stream connection
|
||||
** needs to send the initial delay report to the connected SRC.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_audio_delay(tBTA_AV_HNDL hndl, UINT16 delay);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_co_video_delay
|
||||
**
|
||||
** Description This function is called by AV when the video stream connection
|
||||
** needs to send the initial delay report to the connected SRC.
|
||||
**
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_co_video_delay(tBTA_AV_HNDL hndl, UINT16 delay);
|
||||
|
||||
#endif /* BTA_AV_CO_H */
|
219
components/bt/bluedroid/bta/include/bta_av_sbc.h
Executable file
219
components/bt/bluedroid/bta/include/bta_av_sbc.h
Executable file
@ -0,0 +1,219 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2004-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 is the interface to utility functions for dealing with SBC data
|
||||
* frames and codec capabilities.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef BTA_AV_SBC_H
|
||||
#define BTA_AV_SBC_H
|
||||
|
||||
/*****************************************************************************
|
||||
** constants
|
||||
*****************************************************************************/
|
||||
|
||||
/* SBC packet header size */
|
||||
#define BTA_AV_SBC_HDR_SIZE A2D_SBC_MPL_HDR_LEN
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_init_up_sample
|
||||
**
|
||||
** Description initialize the up sample
|
||||
**
|
||||
** src_sps: samples per second (source audio data)
|
||||
** dst_sps: samples per second (converted audio data)
|
||||
** bits: number of bits per pcm sample
|
||||
** n_channels: number of channels (i.e. mono(1), stereo(2)...)
|
||||
**
|
||||
** Returns none
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_sbc_init_up_sample (UINT32 src_sps, UINT32 dst_sps,
|
||||
UINT16 bits, UINT16 n_channels);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_up_sample
|
||||
**
|
||||
** Description Given the source (p_src) audio data and
|
||||
** source speed (src_sps, samples per second),
|
||||
** This function converts it to audio data in the desired format
|
||||
**
|
||||
** p_src: the data buffer that holds the source audio data
|
||||
** p_dst: the data buffer to hold the converted audio data
|
||||
** src_samples: The number of source samples (number of bytes)
|
||||
** dst_samples: The size of p_dst (number of bytes)
|
||||
**
|
||||
** Note: An AE reported an issue with this function.
|
||||
** When called with bta_av_sbc_up_sample(src, uint8_array_dst..)
|
||||
** the byte before uint8_array_dst may get overwritten.
|
||||
** Using uint16_array_dst avoids the problem.
|
||||
** This issue is related to endian-ness and is hard to resolve
|
||||
** in a generic manner.
|
||||
** **************** Please use uint16 array as dst.
|
||||
**
|
||||
** Returns The number of bytes used in p_dst
|
||||
** The number of bytes used in p_src (in *p_ret)
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern int bta_av_sbc_up_sample (void *p_src, void *p_dst,
|
||||
UINT32 src_samples, UINT32 dst_samples,
|
||||
UINT32 *p_ret);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_up_sample_16s (16bits-stereo)
|
||||
**
|
||||
** Description Given the source (p_src) audio data and
|
||||
** source speed (src_sps, samples per second),
|
||||
** This function converts it to audio data in the desired format
|
||||
**
|
||||
** p_src: the data buffer that holds the source audio data
|
||||
** p_dst: the data buffer to hold the converted audio data
|
||||
** src_samples: The number of source samples (in uint of 4 bytes)
|
||||
** dst_samples: The size of p_dst (in uint of 4 bytes)
|
||||
**
|
||||
** Returns The number of bytes used in p_dst
|
||||
** The number of bytes used in p_src (in *p_ret)
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern int bta_av_sbc_up_sample_16s (void *p_src, void *p_dst,
|
||||
UINT32 src_samples, UINT32 dst_samples,
|
||||
UINT32 *p_ret);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_up_sample_16m (16bits-mono)
|
||||
**
|
||||
** Description Given the source (p_src) audio data and
|
||||
** source speed (src_sps, samples per second),
|
||||
** This function converts it to audio data in the desired format
|
||||
**
|
||||
** p_src: the data buffer that holds the source audio data
|
||||
** p_dst: the data buffer to hold the converted audio data
|
||||
** src_samples: The number of source samples (in uint of 2 bytes)
|
||||
** dst_samples: The size of p_dst (in uint of 2 bytes)
|
||||
**
|
||||
** Returns The number of bytes used in p_dst
|
||||
** The number of bytes used in p_src (in *p_ret)
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern int bta_av_sbc_up_sample_16m (void *p_src, void *p_dst,
|
||||
UINT32 src_samples, UINT32 dst_samples,
|
||||
UINT32 *p_ret);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_up_sample_8s (8bits-stereo)
|
||||
**
|
||||
** Description Given the source (p_src) audio data and
|
||||
** source speed (src_sps, samples per second),
|
||||
** This function converts it to audio data in the desired format
|
||||
**
|
||||
** p_src: the data buffer that holds the source audio data
|
||||
** p_dst: the data buffer to hold the converted audio data
|
||||
** src_samples: The number of source samples (in uint of 2 bytes)
|
||||
** dst_samples: The size of p_dst (in uint of 2 bytes)
|
||||
**
|
||||
** Returns The number of bytes used in p_dst
|
||||
** The number of bytes used in p_src (in *p_ret)
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern int bta_av_sbc_up_sample_8s (void *p_src, void *p_dst,
|
||||
UINT32 src_samples, UINT32 dst_samples,
|
||||
UINT32 *p_ret);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_up_sample_8m (8bits-mono)
|
||||
**
|
||||
** Description Given the source (p_src) audio data and
|
||||
** source speed (src_sps, samples per second),
|
||||
** This function converts it to audio data in the desired format
|
||||
**
|
||||
** p_src: the data buffer that holds the source audio data
|
||||
** p_dst: the data buffer to hold the converted audio data
|
||||
** src_samples: The number of source samples (number of bytes)
|
||||
** dst_samples: The size of p_dst (number of bytes)
|
||||
**
|
||||
** Returns The number of bytes used in p_dst
|
||||
** The number of bytes used in p_src (in *p_ret)
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern int bta_av_sbc_up_sample_8m (void *p_src, void *p_dst,
|
||||
UINT32 src_samples, UINT32 dst_samples,
|
||||
UINT32 *p_ret);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_cfg_for_cap
|
||||
**
|
||||
** Description Determine the preferred SBC codec configuration for the
|
||||
** given codec capabilities. The function is passed the
|
||||
** preferred codec configuration and the peer codec
|
||||
** capabilities for the stream. The function attempts to
|
||||
** match the preferred capabilities with the configuration
|
||||
** as best it can. The resulting codec configuration is
|
||||
** returned in the same memory used for the capabilities.
|
||||
**
|
||||
** Returns 0 if ok, nonzero if error.
|
||||
** Codec configuration in p_cap.
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern UINT8 bta_av_sbc_cfg_for_cap(UINT8 *p_peer, tA2D_SBC_CIE *p_cap, tA2D_SBC_CIE *p_pref);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_cfg_in_cap
|
||||
**
|
||||
** Description This function checks whether an SBC codec configuration
|
||||
** is allowable for the given codec capabilities.
|
||||
**
|
||||
** Returns 0 if ok, nonzero if error.
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern UINT8 bta_av_sbc_cfg_in_cap(UINT8 *p_cfg, tA2D_SBC_CIE *p_cap);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_cfg_matches_cap
|
||||
**
|
||||
** Description This function checks whether an SBC codec configuration
|
||||
** matched with capabilities. Here we check subset.
|
||||
**
|
||||
** Returns 0 if ok, nonzero if error.
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern UINT8 bta_av_sbc_cfg_matches_cap(UINT8 *p_cfg, tA2D_SBC_CIE *p_cap);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function bta_av_sbc_bld_hdr
|
||||
**
|
||||
** Description This function builds the packet header for MPF1.
|
||||
**
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void bta_av_sbc_bld_hdr(BT_HDR *p_buf, UINT16 fr_per_pkt);
|
||||
|
||||
#endif /* BTA_AV_SBC_H */
|
||||
|
1977
components/bt/bluedroid/btif/bta_av_co.c
Executable file
1977
components/bt/bluedroid/btif/bta_av_co.c
Executable file
File diff suppressed because it is too large
Load Diff
@ -47,6 +47,8 @@ COMPONENT_SRCDIRS := bluedroid/bta/dm \
|
||||
bluedroid/bta/gatt \
|
||||
bluedroid/bta/hh \
|
||||
bluedroid/bta/sdp \
|
||||
bluedroid/bta/av \
|
||||
bluedroid/bta/ar \
|
||||
bluedroid/bta/sys \
|
||||
bluedroid/bta \
|
||||
bluedroid/btcore \
|
||||
|
Loading…
x
Reference in New Issue
Block a user