15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2008-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 for the audio/video registration module. 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_ar_api.h" 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_ar_int.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* AV control block */ 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_DYNAMIC_MEMORY == FALSE 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_AR_CB bta_ar_cb; 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ar_id 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function maps sys_id to ar id mask. 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_ar_id(tBTA_SYS_ID sys_id) 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 mask = 0; 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (sys_id == BTA_ID_AV) 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mask = BTA_AR_AV_MASK; 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (sys_id == BTA_ID_AVK) 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mask = BTA_AR_AVK_MASK; 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return mask; 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ar_init 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to register to AVDTP. 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ar_init(void) 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize control block */ 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&bta_ar_cb, 0, sizeof(tBTA_AR_CB)); 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ar_reg_avdt 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to register to AVDTP. 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_ar_avdt_cback(UINT8 handle, BD_ADDR bd_addr, UINT8 event, tAVDT_CTRL *p_data) 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* route the AVDT registration callback to av or avk */ 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.p_av_conn_cback) 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*bta_ar_cb.p_av_conn_cback)(handle, bd_addr, event, p_data); 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.p_avk_conn_cback) 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*bta_ar_cb.p_avk_conn_cback)(handle, bd_addr, event, p_data); 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ar_reg_avdt 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description AR module registration to AVDT. 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ar_reg_avdt(tAVDT_REG *p_reg, tAVDT_CTRL_CBACK *p_cback, tBTA_SYS_ID sys_id) 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 mask = 0; 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (sys_id == BTA_ID_AV) 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.p_av_conn_cback = p_cback; 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mask = BTA_AR_AV_MASK; 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (sys_id == BTA_ID_AVK) 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.p_avk_conn_cback = p_cback; 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mask = BTA_AR_AVK_MASK; 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_AR_DEBUG == TRUE) 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 118e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_ar_reg_avdt: the registration is from wrong sys_id:%d", sys_id); 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (mask) 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.avdt_registered == 0) 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_Register(p_reg, bta_ar_avdt_cback); 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.avdt_registered |= mask; 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ar_dereg_avdt 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to de-register from AVDTP. 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ar_dereg_avdt(tBTA_SYS_ID sys_id) 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 mask = 0; 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (sys_id == BTA_ID_AV) 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.p_av_conn_cback = NULL; 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mask = BTA_AR_AV_MASK; 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (sys_id == BTA_ID_AVK) 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.p_avk_conn_cback = NULL; 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mask = BTA_AR_AVK_MASK; 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.avdt_registered &= ~mask; 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.avdt_registered == 0) 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_Deregister(); 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ar_avdt_conn 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to let ar know that some AVDTP profile 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** is connected for this sys_id. 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** If the other sys modules started a timer for PENDING_EVT, 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the timer can be stopped now. 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ar_avdt_conn(tBTA_SYS_ID sys_id, BD_ADDR bd_addr) 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 event = BTA_AR_AVDT_CONN_EVT; 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_CTRL data; 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (sys_id == BTA_ID_AV) 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.p_avk_conn_cback) 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*bta_ar_cb.p_avk_conn_cback)(0, bd_addr, event, &data); 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (sys_id == BTA_ID_AVK) 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.p_av_conn_cback) 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*bta_ar_cb.p_av_conn_cback)(0, bd_addr, event, &data); 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ar_reg_avct 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to register to AVCTP. 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ar_reg_avct(UINT16 mtu, UINT16 mtu_br, UINT8 sec_mask, tBTA_SYS_ID sys_id) 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 mask = bta_ar_id (sys_id); 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (mask) 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.avct_registered == 0) 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVCT_Register(mtu, mtu_br, sec_mask); 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.avct_registered |= mask; 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ar_dereg_avct 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to deregister from AVCTP. 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ar_dereg_avct(tBTA_SYS_ID sys_id) 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 mask = bta_ar_id (sys_id); 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.avct_registered &= ~mask; 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.avct_registered == 0) 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVCT_Deregister(); 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ar_reg_avrc 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to register an SDP record for AVRCP. 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ar_reg_avrc(UINT16 service_uuid, char *service_name, char *provider_name, 24641a1dc21d9279406b90e333b60c44a55753617acAnubhavGupta UINT16 categories, tBTA_SYS_ID sys_id, BOOLEAN browse_supported, 24741a1dc21d9279406b90e333b60c44a55753617acAnubhavGupta UINT16 profile_version) 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 mask = bta_ar_id (sys_id); 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 temp[8], *p; 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!mask || !categories) 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_TARGET) 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.sdp_tg_handle == 0) 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.tg_registered = mask; 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.sdp_tg_handle = SDP_CreateRecord(); 261298d2a8b2e78bdca5a296243356b081b960a5ac0Anubhav Gupta AVRC_AddRecord(service_uuid, service_name, provider_name, categories, 26241a1dc21d9279406b90e333b60c44a55753617acAnubhavGupta bta_ar_cb.sdp_tg_handle, browse_supported, profile_version); 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_add_uuid(service_uuid); 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* only one TG is allowed (first-come, first-served). 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * If sdp_tg_handle is non-0, ignore this request */ 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 268298d2a8b2e78bdca5a296243356b081b960a5ac0Anubhav Gupta else if ((service_uuid == UUID_SERVCLASS_AV_REMOTE_CONTROL)|| 269298d2a8b2e78bdca5a296243356b081b960a5ac0Anubhav Gupta (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_CONTROL)) 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.ct_categories [mask - 1] = categories; 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project categories = bta_ar_cb.ct_categories[0]|bta_ar_cb.ct_categories[1]; 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.sdp_ct_handle == 0) 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.sdp_ct_handle = SDP_CreateRecord(); 276298d2a8b2e78bdca5a296243356b081b960a5ac0Anubhav Gupta AVRC_AddRecord(service_uuid, service_name, provider_name, categories, 27741a1dc21d9279406b90e333b60c44a55753617acAnubhavGupta bta_ar_cb.sdp_ct_handle, browse_supported, profile_version); 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_add_uuid(service_uuid); 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* multiple CTs are allowed. 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Change supported categories on the second one */ 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = temp; 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_BE_STREAM(p, categories); 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SDP_AddAttribute(bta_ar_cb.sdp_ct_handle, ATTR_ID_SUPPORTED_FEATURES, UINT_DESC_TYPE, 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT32)2, (UINT8*)temp); 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ar_dereg_avrc 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to de-register/delete an SDP record for AVRCP. 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ar_dereg_avrc(UINT16 service_uuid, tBTA_SYS_ID sys_id) 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 mask = bta_ar_id (sys_id); 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 categories = 0; 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 temp[8], *p; 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!mask) 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_TARGET) 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.sdp_tg_handle && mask == bta_ar_cb.tg_registered) 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.tg_registered = 0; 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SDP_DeleteRecord(bta_ar_cb.sdp_tg_handle); 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.sdp_tg_handle = 0; 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_remove_uuid(service_uuid); 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (service_uuid == UUID_SERVCLASS_AV_REMOTE_CONTROL) 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ar_cb.sdp_ct_handle) 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.ct_categories [mask - 1] = 0; 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project categories = bta_ar_cb.ct_categories[0]|bta_ar_cb.ct_categories[1]; 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!categories) 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no CT is still registered - cleaup */ 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SDP_DeleteRecord(bta_ar_cb.sdp_ct_handle); 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ar_cb.sdp_ct_handle = 0; 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_remove_uuid(service_uuid); 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* change supported categories to the remaning one */ 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = temp; 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_BE_STREAM(p, categories); 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SDP_AddAttribute(bta_ar_cb.sdp_ct_handle, ATTR_ID_SUPPORTED_FEATURES, UINT_DESC_TYPE, 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT32)2, (UINT8*)temp); 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 345