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