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