15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 2011-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This is the implementation of the API for the advanced audio/video (AV)
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  subsystem of BTA, Broadcom's Bluetooth application layer for mobile
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  phones.
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27f2af1c42ccb2f642b241c2261b42d0be61d45438Jack He#include <base/logging.h>
286b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h"
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include <string.h>
32cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "bt_common.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h"
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_av_api.h"
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_av_int.h"
36cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "bta_sys.h"
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
383f4fd5be6c5bcbbaefda62ffc66cafec9074220bChris Elliott#include "osi/include/allocator.h"
393f4fd5be6c5bcbbaefda62ffc66cafec9074220bChris Elliott
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *  Constants
428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic const tBTA_SYS_REG bta_av_reg = {bta_av_hdl_event, BTA_AvDisable};
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvEnable
498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Enable the advanced audio/video service. When the enable
518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  operation is complete the callback function will be
528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  called with a BTA_AV_ENABLE_EVT. This function must
538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  be called before other function in the AV API are
548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  called.
558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
59cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvEnable(tBTA_SEC sec_mask, tBTA_AV_FEAT features,
60cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                  tBTA_AV_CBACK* p_cback) {
61cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_ENABLE* p_buf =
62cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_ENABLE*)osi_malloc(sizeof(tBTA_AV_API_ENABLE));
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
64cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  /* register with BTA system manager */
65cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_register(BTA_ID_AV, &bta_av_reg);
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
67cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_ENABLE_EVT;
68cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->p_cback = p_cback;
69cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->features = features;
70cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->sec_mask = sec_mask;
71717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
72cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvDisable
788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Disable the advanced audio/video service.
808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
84cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvDisable(void) {
85cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR));
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
87cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_deregister(BTA_ID_AV);
88cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->event = BTA_AV_API_DISABLE_EVT;
89717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
90cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvRegister
968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Register the audio or video service to stack. When the
988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  operation is complete the callback function will be
998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  called with a BTA_AV_REGISTER_EVT. This function must
1008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  be called before AVDT stream is open.
1018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
1048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
106cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvRegister(tBTA_AV_CHNL chnl, const char* p_service_name,
107cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                    uint8_t app_id, tBTA_AV_SINK_DATA_CBACK* p_sink_data_cback,
108cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                    uint16_t service_uuid) {
109cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_REG* p_buf =
110cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_REG*)osi_malloc(sizeof(tBTA_AV_API_REG));
111cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
112cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = chnl;
113cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_REGISTER_EVT;
114cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  if (p_service_name)
115cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    strlcpy(p_buf->p_service_name, p_service_name, BTA_SERVICE_NAME_LEN);
116cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  else
117cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->p_service_name[0] = 0;
118cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->app_id = app_id;
119cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->p_app_sink_data_cback = p_sink_data_cback;
120cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->service_uuid = service_uuid;
121cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
122cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvDeregister
1288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Deregister the audio or video service
1308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
1328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
134cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvDeregister(tBTA_AV_HNDL hndl) {
135cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR));
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
137cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->layer_specific = hndl;
138cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->event = BTA_AV_API_DEREGISTER_EVT;
139717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
140cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvOpen
1468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Opens an advanced audio/video connection to a peer device.
1488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  When connection is open callback function is called
1498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  with a BTA_AV_OPEN_EVT.
1508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
1528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
1549e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowskivoid BTA_AvOpen(const RawAddress& bd_addr, tBTA_AV_HNDL handle, bool use_rc,
155cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                tBTA_SEC sec_mask, uint16_t uuid) {
156cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_OPEN* p_buf =
157cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_OPEN*)osi_malloc(sizeof(tBTA_AV_API_OPEN));
158cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
159cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_OPEN_EVT;
160cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = handle;
161903c16685e62e7721d44460b9171e020f38609f5Jakub Pawlowski  p_buf->bd_addr = bd_addr;
162cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->use_rc = use_rc;
163cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->sec_mask = sec_mask;
164cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->switch_res = BTA_AV_RS_NONE;
165cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->uuid = uuid;
166cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
167cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvClose
1738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Close the current streams.
1758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
1778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
179cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvClose(tBTA_AV_HNDL handle) {
180cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR));
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
182cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->event = BTA_AV_API_CLOSE_EVT;
183cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->layer_specific = handle;
184717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
185cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvDisconnect
1918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Close the connection to the address.
1938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
1958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
1979e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowskivoid BTA_AvDisconnect(const RawAddress& bd_addr) {
198cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_DISCNT* p_buf =
199cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_DISCNT*)osi_malloc(sizeof(tBTA_AV_API_DISCNT));
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
201cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_DISCONNECT_EVT;
202903c16685e62e7721d44460b9171e020f38609f5Jakub Pawlowski  p_buf->bd_addr = bd_addr;
203717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
204cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvStart
2108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Start audio/video stream data transfer.
2128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
2148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
216cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvStart(void) {
217cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR));
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
219cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->event = BTA_AV_API_START_EVT;
220717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
221cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvOffloadStart
2278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Start a2dp audio offloading.
2298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
2318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
233cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvOffloadStart(tBTA_AV_HNDL hndl) {
234cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR));
235717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
236cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->event = BTA_AV_API_OFFLOAD_START_EVT;
237cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->layer_specific = hndl;
238717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
239cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
24047b4310e6aa9a508b47e6cd4631327c53b464440Abhijit Adsule}
24147b4310e6aa9a508b47e6cd4631327c53b464440Abhijit Adsule
24247b4310e6aa9a508b47e6cd4631327c53b464440Abhijit Adsule/*******************************************************************************
2438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvOffloadStartRsp
2458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Response from vendor lib for A2DP Offload Start request.
2478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
2498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
251cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvOffloadStartRsp(tBTA_AV_HNDL hndl, tBTA_AV_STATUS status) {
252cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_STATUS_RSP* p_buf =
253cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_STATUS_RSP*)osi_malloc(sizeof(tBTA_AV_API_STATUS_RSP));
254717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
255cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_OFFLOAD_START_RSP_EVT;
256cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = hndl;
257cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->status = status;
258717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
259cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
26047b4310e6aa9a508b47e6cd4631327c53b464440Abhijit Adsule}
26147b4310e6aa9a508b47e6cd4631327c53b464440Abhijit Adsule
26247b4310e6aa9a508b47e6cd4631327c53b464440Abhijit Adsule/*******************************************************************************
2638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvStop
2658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Stop audio/video stream data transfer.
2678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  If suspend is true, this function sends AVDT suspend signal
2688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  to the connected peer(s).
2698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
2718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
273cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvStop(bool suspend) {
274cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_STOP* p_buf =
275cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_STOP*)osi_malloc(sizeof(tBTA_AV_API_STOP));
276717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
277cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_STOP_EVT;
278cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->flush = true;
279cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->suspend = suspend;
2805ce0116fbf5b530d5b93f11312096eade1021c1ePavlin Radoslavov  p_buf->reconfig_stop = false;
281717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
282cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvReconfig
2888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Reconfigure the audio/video stream.
290cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson *                  If suspend is true, this function tries the
2911baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson *                  suspend/reconfigure procedure first.
2928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  If suspend is false or when suspend/reconfigure fails,
2938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  this function closes and re-opens the AVDT connection.
2948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
2968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
298e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid BTA_AvReconfig(tBTA_AV_HNDL hndl, bool suspend, uint8_t sep_info_idx,
299cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                    uint8_t* p_codec_info, uint8_t num_protect,
300cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                    const uint8_t* p_protect_info) {
301cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_RCFG* p_buf =
302cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_RCFG*)osi_malloc(sizeof(tBTA_AV_API_RCFG) + num_protect);
303cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
304cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = hndl;
305cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_RECONFIG_EVT;
306cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->num_protect = num_protect;
307cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->suspend = suspend;
308cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->sep_info_idx = sep_info_idx;
309cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->p_protect_info = (uint8_t*)(p_buf + 1);
310cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  memcpy(p_buf->codec_info, p_codec_info, AVDT_CODEC_SIZE);
311cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  memcpy(p_buf->p_protect_info, p_protect_info, num_protect);
312cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
313cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvProtectReq
3198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Send a content protection request.  This function can only
3218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  be used if AV is enabled with feature BTA_AV_FEAT_PROTECT.
3228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
3248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
326cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvProtectReq(tBTA_AV_HNDL hndl, uint8_t* p_data, uint16_t len) {
327cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_PROTECT_REQ* p_buf = (tBTA_AV_API_PROTECT_REQ*)osi_malloc(
328cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      sizeof(tBTA_AV_API_PROTECT_REQ) + len);
329cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
330cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = hndl;
331cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_PROTECT_REQ_EVT;
332cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->len = len;
333cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  if (p_data == NULL) {
334cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->p_data = NULL;
335cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  } else {
336cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->p_data = (uint8_t*)(p_buf + 1);
337cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    memcpy(p_buf->p_data, p_data, len);
338cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
339cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
340cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvProtectRsp
3468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Send a content protection response.  This function must
3488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  be called if a BTA_AV_PROTECT_REQ_EVT is received.
3498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  This function can only be used if AV is enabled with
3508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  feature BTA_AV_FEAT_PROTECT.
3518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
3538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
355cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvProtectRsp(tBTA_AV_HNDL hndl, uint8_t error_code, uint8_t* p_data,
356cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                      uint16_t len) {
357cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_PROTECT_RSP* p_buf = (tBTA_AV_API_PROTECT_RSP*)osi_malloc(
358cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      sizeof(tBTA_AV_API_PROTECT_RSP) + len);
359cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
360cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = hndl;
361cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_PROTECT_RSP_EVT;
362cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->len = len;
363cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->error_code = error_code;
364cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  if (p_data == NULL) {
365cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->p_data = NULL;
366cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  } else {
367cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->p_data = (uint8_t*)(p_buf + 1);
368cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    memcpy(p_buf->p_data, p_data, len);
369cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
370cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
371cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvRemoteCmd
3778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Send a remote control command.  This function can only
3798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  be used if AV is enabled with feature BTA_AV_FEAT_RCCT.
3808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
3828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
3838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
384cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvRemoteCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_RC rc_id,
385cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                     tBTA_AV_STATE key_state) {
386cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_REMOTE_CMD* p_buf =
387cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_REMOTE_CMD*)osi_malloc(sizeof(tBTA_AV_API_REMOTE_CMD));
388cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
389cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_REMOTE_CMD_EVT;
390cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = rc_handle;
391cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.op_id = rc_id;
392cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.state = key_state;
393cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.p_pass_data = NULL;
394cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.pass_len = 0;
395cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->label = label;
396cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
397cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvRemoteVendorUniqueCmd
4038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Send a remote control command with Vendor Unique rc_id.
4058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  This function can only be used if AV is enabled with
4068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  feature BTA_AV_FEAT_RCCT.
4078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
4098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
411e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid BTA_AvRemoteVendorUniqueCmd(uint8_t rc_handle, uint8_t label,
412e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen                                 tBTA_AV_STATE key_state, uint8_t* p_msg,
413cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                                 uint8_t buf_len) {
414cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_REMOTE_CMD* p_buf = (tBTA_AV_API_REMOTE_CMD*)osi_malloc(
415cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      sizeof(tBTA_AV_API_REMOTE_CMD) + buf_len);
416cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
417cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->label = label;
418cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_REMOTE_CMD_EVT;
419cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = rc_handle;
420cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.op_id = AVRC_ID_VENDOR;
421cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.state = key_state;
422cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.pass_len = buf_len;
423cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  if (p_msg == NULL) {
424cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->msg.p_pass_data = NULL;
425cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  } else {
426cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->msg.p_pass_data = (uint8_t*)(p_buf + 1);
427cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    memcpy(p_buf->msg.p_pass_data, p_msg, buf_len);
428cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
429cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
4306b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta}
4316b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta
4326b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta/*******************************************************************************
4338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvVendorCmd
4358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Send a vendor dependent remote control command.  This
4378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  function can only be used if AV is enabled with feature
4388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  BTA_AV_FEAT_VENDOR.
4398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
4418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
443cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvVendorCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE cmd_code,
444cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                     uint8_t* p_data, uint16_t len) {
445cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_VENDOR* p_buf =
446cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_VENDOR*)osi_malloc(sizeof(tBTA_AV_API_VENDOR) + len);
447cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
448cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_VENDOR_CMD_EVT;
449cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = rc_handle;
450cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.hdr.ctype = cmd_code;
451cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.hdr.subunit_type = AVRC_SUB_PANEL;
452cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.hdr.subunit_id = 0;
453cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.company_id = p_bta_av_cfg->company_id;
454cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->label = label;
455cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.vendor_len = len;
456cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  if (p_data == NULL) {
457cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->msg.p_vendor_data = NULL;
458cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  } else {
459cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->msg.p_vendor_data = (uint8_t*)(p_buf + 1);
460cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    memcpy(p_buf->msg.p_vendor_data, p_data, len);
461cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
462cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
463cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvVendorRsp
4698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Send a vendor dependent remote control response.
4718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  This function must be called if a BTA_AV_VENDOR_CMD_EVT
4728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  is received. This function can only be used if AV is
4738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  enabled with feature BTA_AV_FEAT_VENDOR.
4748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
4768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
4778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
478cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvVendorRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code,
479cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                     uint8_t* p_data, uint16_t len, uint32_t company_id) {
480cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_VENDOR* p_buf =
481cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_VENDOR*)osi_malloc(sizeof(tBTA_AV_API_VENDOR) + len);
482cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
483cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_VENDOR_RSP_EVT;
484cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = rc_handle;
485cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.hdr.ctype = rsp_code;
486cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.hdr.subunit_type = AVRC_SUB_PANEL;
487cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.hdr.subunit_id = 0;
488cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  if (company_id)
489cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->msg.company_id = company_id;
490cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  else
491cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->msg.company_id = p_bta_av_cfg->company_id;
492cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->label = label;
493cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->msg.vendor_len = len;
494cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  if (p_data == NULL) {
495cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->msg.p_vendor_data = NULL;
496cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  } else {
497cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    p_buf->msg.p_vendor_data = (uint8_t*)(p_buf + 1);
498cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    memcpy(p_buf->msg.p_vendor_data, p_data, len);
499cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
500cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
501cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvOpenRc
5078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Open an AVRCP connection toward the device with the
5098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  specified handle
5108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
5128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
514cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvOpenRc(tBTA_AV_HNDL handle) {
515cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_OPEN_RC* p_buf =
516cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_OPEN_RC*)osi_malloc(sizeof(tBTA_AV_API_OPEN_RC));
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
518cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_RC_OPEN_EVT;
519cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = handle;
520717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
521cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvCloseRc
5278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      Close an AVRCP connection
5298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
5318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
533cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvCloseRc(uint8_t rc_handle) {
534cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_CLOSE_RC* p_buf =
535cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_CLOSE_RC*)osi_malloc(sizeof(tBTA_AV_API_CLOSE_RC));
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
537cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_RC_CLOSE_EVT;
538cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = rc_handle;
539717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
540cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvMetaRsp
5468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
547cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description      Send a Metadata/Advanced Control response. The message
5481baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson *                  contained in p_pkt can be composed with AVRC utility
5491baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson *                  functions.
5508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  This function can only be used if AV is enabled with feature
5518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  BTA_AV_FEAT_METADATA.
5528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
5548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
556e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid BTA_AvMetaRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code,
557cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                   BT_HDR* p_pkt) {
558cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_META_RSP* p_buf =
559cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_META_RSP*)osi_malloc(sizeof(tBTA_AV_API_META_RSP));
560cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
561cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_META_RSP_EVT;
562cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = rc_handle;
563cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->rsp_code = rsp_code;
564cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->p_pkt = p_pkt;
565cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->is_rsp = true;
566cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->label = label;
567cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
568cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         BTA_AvMetaCmd
5748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
575cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description      Send a Metadata/Advanced Control command. The message
576cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson*contained
5778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  in p_pkt can be composed with AVRC utility functions.
5788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  This function can only be used if AV is enabled with feature
5798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  BTA_AV_FEAT_METADATA.
580cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson *                  This message is sent only when the peer supports the TG
581cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson*role.
582cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson*8                  The only command makes sense right now is the absolute
583cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson*volume command.
5848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          void
5868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
5878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
588cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_AvMetaCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CMD cmd_code,
589cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                   BT_HDR* p_pkt) {
590cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_AV_API_META_RSP* p_buf =
591cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      (tBTA_AV_API_META_RSP*)osi_malloc(sizeof(tBTA_AV_API_META_RSP));
592cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
593cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.event = BTA_AV_API_META_RSP_EVT;
594cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->hdr.layer_specific = rc_handle;
595cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->p_pkt = p_pkt;
596cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->rsp_code = cmd_code;
597cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->is_rsp = false;
598cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  p_buf->label = label;
599cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
600cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bta_sys_sendmsg(p_buf);
6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
602