avdt_ccb_act.cc revision d7ffd64accbd50a27289a388856e56244ccbb5da
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2006-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 module contains the action functions associated with the channel 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * control block state machine. 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 2783e2c342e8b40009f3509425722d309c0b8189b9Chris Manton#include "bt_types.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 295cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "bt_utils.h" 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdt_api.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdtc_api.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdt_int.h" 33258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h" 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_api.h" 36d7ffd64accbd50a27289a388856e56244ccbb5daMyles Watson#include "osi/include/osi.h" 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovextern fixed_queue_t *btu_general_alarm_queue; 3978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_clear_ccb 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function clears out certain buffers, queues, and 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** other data elements of a ccb. 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_ccb_clear_ccb(tAVDT_CCB *p_ccb) 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_buf; 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear certain ccb variables */ 56d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p_ccb->cong = false; 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->ret_count = 0; 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* free message being fragmented */ 60cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov osi_free_and_reset((void **)&p_ccb->p_curr_msg); 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* free message being reassembled */ 63cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov osi_free_and_reset((void **)&p_ccb->p_rx_msg); 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear out response queue */ 661a3844f933bd63c8a381371dabfb35c6a0249e3ePavlin Radoslavov while ((p_buf = (BT_HDR *) fixed_queue_try_dequeue(p_ccb->rsp_q)) != NULL) 67cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov osi_free(p_buf); 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_chan_open 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function calls avdt_ad_open_req() to 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** initiate a signaling channel connection. 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 81d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_chan_open(tAVDT_CCB *p_ccb, 82d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetOutService(p_ccb->peer_addr, BTM_SEC_SERVICE_AVDTP, AVDT_CHAN_SIG); 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ad_open_req(AVDT_CHAN_SIG, p_ccb, NULL, AVDT_INT); 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_chan_close 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function calls avdt_ad_close_req() to close a 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** signaling channel connection. 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 99d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_chan_close(tAVDT_CCB *p_ccb, 100d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* close the transport channel used by this CCB */ 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ad_close_req(AVDT_CHAN_SIG, p_ccb, NULL); 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_chk_close 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function checks for active streams on this CCB. 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** If there are none, it starts an idle timer. 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 117d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_chk_close(tAVDT_CCB *p_ccb, 118d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb = &avdt_cb.scb[0]; 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* see if there are any active scbs associated with this ccb */ 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < AVDT_NUM_SEPS; i++, p_scb++) 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb->allocated) && (p_scb->p_ccb == p_ccb)) 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if no active scbs start idle timer */ 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (i == AVDT_NUM_SEPS) 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_cancel(p_ccb->ret_ccb_timer); 13678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_cancel(p_ccb->rsp_ccb_timer); 13778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov period_ms_t interval_ms = avdt_cb.rcb.idle_tout * 1000; 13878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_set_on_queue(p_ccb->idle_ccb_timer, interval_ms, 13978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov avdt_ccb_idle_ccb_timer_timeout, p_ccb, 14078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btu_general_alarm_queue); 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_hdl_discover_cmd 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when a discover command is 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** received from the peer. It gathers up the stream 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** information for all allocated streams and initiates 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** sending of a discover response. 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_hdl_discover_cmd(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SEP_INFO sep_info[AVDT_NUM_SEPS]; 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb = &avdt_cb.scb[0]; 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->msg.discover_rsp.p_sep_info = sep_info; 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->msg.discover_rsp.num_seps = 0; 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* for all allocated scbs */ 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < AVDT_NUM_SEPS; i++, p_scb++) 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb->allocated) 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* copy sep info */ 172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sep_info[p_data->msg.discover_rsp.num_seps].in_use = p_scb->in_use; 173ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sep_info[p_data->msg.discover_rsp.num_seps].seid = i + 1; 174ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sep_info[p_data->msg.discover_rsp.num_seps].media_type = p_scb->cs.media_type; 175ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sep_info[p_data->msg.discover_rsp.num_seps].tsep = p_scb->cs.tsep; 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->msg.discover_rsp.num_seps++; 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send response */ 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_event(p_ccb, AVDT_CCB_API_DISCOVER_RSP_EVT, p_data); 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_hdl_discover_rsp 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when a discover response or 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** reject is received from the peer. It calls the application 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** callback function with the results. 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_hdl_discover_rsp(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* we're done with procedure */ 200d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p_ccb->proc_busy = false; 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* call app callback with results */ 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_ccb->proc_cback)(0, p_ccb->peer_addr, AVDT_DISCOVER_CFM_EVT, 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tAVDT_CTRL *)(&p_data->msg.discover_rsp)); 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_hdl_getcap_cmd 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when a get capabilities command 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** is received from the peer. It retrieves the stream 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** configuration for the requested stream and initiates 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** sending of a get capabilities response. 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_hdl_getcap_cmd(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb; 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* look up scb for seid sent to us */ 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb = avdt_scb_by_hdl(p_data->msg.single.seid); 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->msg.svccap.p_cfg = &p_scb->cs.cfg; 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_event(p_ccb, AVDT_CCB_API_GETCAP_RSP_EVT, p_data); 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_hdl_getcap_rsp 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called with a get capabilities response 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** or reject is received from the peer. It calls the 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** application callback function with the results. 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_hdl_getcap_rsp(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* we're done with procedure */ 247d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p_ccb->proc_busy = false; 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* call app callback with results */ 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_ccb->proc_cback)(0, p_ccb->peer_addr, AVDT_GETCAP_CFM_EVT, 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tAVDT_CTRL *)(&p_data->msg.svccap)); 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_hdl_start_cmd 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when a start command is received 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the peer. It verifies that all requested streams 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** are in the proper state. If so, it initiates sending of 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** a start response. Otherwise it sends a start reject. 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_hdl_start_cmd(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 269d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t err_code = 0; 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify all streams in the right state */ 272d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t seid = avdt_scb_verify(p_ccb, AVDT_VERIFY_START, p_data->msg.multi.seid_list, 27319165cb562df83f29f7403b9a0f38b199a2edfb3Anubhav Gupta p_data->msg.multi.num_seps, &err_code); 27419165cb562df83f29f7403b9a0f38b199a2edfb3Anubhav Gupta if (seid == 0 && err_code == 0) 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* we're ok, send response */ 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_event(p_ccb, AVDT_CCB_API_START_RSP_EVT, p_data); 27819165cb562df83f29f7403b9a0f38b199a2edfb3Anubhav Gupta } else { 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* not ok, send reject */ 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->msg.hdr.err_code = err_code; 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->msg.hdr.err_param = seid; 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_rej(p_ccb, AVDT_SIG_START, &p_data->msg); 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_hdl_start_rsp 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when a start response or reject 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** is received from the peer. Using the SEIDs stored in the 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** current command message, it sends a start response or start 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** reject event to each SCB associated with the command. 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_hdl_start_rsp(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 301d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t event; 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 303d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t *p; 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb; 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* determine rsp or rej event */ 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = (p_data->msg.hdr.err_code == 0) ? 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_START_RSP_EVT : AVDT_SCB_MSG_START_REJ_EVT; 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get to where seid's are stashed in current cmd */ 311d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p = (uint8_t *)(p_ccb->p_curr_cmd + 1); 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* little trick here; length of current command equals number of streams */ 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < p_ccb->p_curr_cmd->len; i++) 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = avdt_scb_by_hdl(p[i])) != NULL) 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_scb_event(p_scb, event, (tAVDT_SCB_EVT *) &p_data->msg); 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_hdl_suspend_cmd 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when a suspend command is received 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the peer. It verifies that all requested streams are 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** in the proper state. If so, it initiates sending of a 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** suspend response. Otherwise it sends a suspend reject. 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_hdl_suspend_cmd(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 339d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t seid; 340d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t err_code = 0; 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify all streams in the right state */ 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((seid = avdt_scb_verify(p_ccb, AVDT_VERIFY_SUSPEND, p_data->msg.multi.seid_list, 34419165cb562df83f29f7403b9a0f38b199a2edfb3Anubhav Gupta p_data->msg.multi.num_seps, &err_code)) == 0 && 34519165cb562df83f29f7403b9a0f38b199a2edfb3Anubhav Gupta err_code == 0) 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* we're ok, send response */ 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_event(p_ccb, AVDT_CCB_API_SUSPEND_RSP_EVT, p_data); 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* not ok, send reject */ 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->msg.hdr.err_code = err_code; 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->msg.hdr.err_param = seid; 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_rej(p_ccb, AVDT_SIG_SUSPEND, &p_data->msg); 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_hdl_suspend_rsp 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when a suspend response or reject 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** is received from the peer. Using the SEIDs stored in the 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** current command message, it sends a suspend response or 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** suspend reject event to each SCB associated with the command. 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_hdl_suspend_rsp(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 375d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t event; 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 377d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t *p; 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb; 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* determine rsp or rej event */ 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = (p_data->msg.hdr.err_code == 0) ? 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_SUSPEND_RSP_EVT : AVDT_SCB_MSG_SUSPEND_REJ_EVT; 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get to where seid's are stashed in current cmd */ 385d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p = (uint8_t *)(p_ccb->p_curr_cmd + 1); 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* little trick here; length of current command equals number of streams */ 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < p_ccb->p_curr_cmd->len; i++) 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = avdt_scb_by_hdl(p[i])) != NULL) 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_scb_event(p_scb, event, (tAVDT_SCB_EVT *) &p_data->msg); 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_snd_discover_cmd 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a discover command to the 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** peer. It copies variables needed for the procedure from 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the event to the CCB. It marks the CCB as busy and then 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** sends a discover command. 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_snd_discover_cmd(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* store info in ccb struct */ 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_proc_data = p_data->discover.p_sep_info; 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->proc_cback = p_data->discover.p_cback; 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->proc_param = p_data->discover.num_seps; 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* we're busy */ 418d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p_ccb->proc_busy = true; 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* build and queue discover req */ 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_cmd(p_ccb, NULL, AVDT_SIG_DISCOVER, NULL); 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_snd_discover_rsp 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a discover response to 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the peer. It takes the stream information passed in the 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** event and sends a discover response. 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_snd_discover_rsp(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send response */ 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_rsp(p_ccb, AVDT_SIG_DISCOVER, &p_data->msg); 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_snd_getcap_cmd 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a get capabilities command 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to the peer. It copies variables needed for the procedure 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the event to the CCB. It marks the CCB as busy and 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** then sends a get capabilities command. 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_snd_getcap_cmd(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 457d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t sig_id = AVDT_SIG_GETCAP; 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* store info in ccb struct */ 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_proc_data = p_data->getcap.p_cfg; 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->proc_cback = p_data->getcap.p_cback; 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* we're busy */ 464d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p_ccb->proc_busy = true; 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* build and queue discover req */ 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->msg.hdr.sig_id == AVDT_SIG_GET_ALLCAP) 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sig_id = AVDT_SIG_GET_ALLCAP; 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_cmd(p_ccb, NULL, sig_id, (tAVDT_MSG *) &p_data->getcap.single); 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_snd_getcap_rsp 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a get capabilities response 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to the peer. It takes the stream information passed in the 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** event and sends a get capabilities response. 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_snd_getcap_rsp(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 487d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t sig_id = AVDT_SIG_GETCAP; 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->msg.hdr.sig_id == AVDT_SIG_GET_ALLCAP) 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sig_id = AVDT_SIG_GET_ALLCAP; 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send response */ 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_rsp(p_ccb, sig_id, &p_data->msg); 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_snd_start_cmd 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a start command to the 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** peer. It verifies that all requested streams are in the 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** proper state. If so, it sends a start command. Otherwise 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** send ourselves back a start reject. 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_snd_start_cmd(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb; 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_MSG avdt_msg; 514d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t seid_list[AVDT_NUM_SEPS]; 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make copy of our seid list */ 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(seid_list, p_data->msg.multi.seid_list, p_data->msg.multi.num_seps); 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify all streams in the right state */ 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((avdt_msg.hdr.err_param = avdt_scb_verify(p_ccb, AVDT_VERIFY_OPEN, p_data->msg.multi.seid_list, 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->msg.multi.num_seps, &avdt_msg.hdr.err_code)) == 0) 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set peer seid list in messsage */ 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_scb_peer_seid_list(&p_data->msg.multi); 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send command */ 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_cmd(p_ccb, seid_list, AVDT_SIG_START, &p_data->msg); 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* failed; send ourselves a reject for each stream */ 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < p_data->msg.multi.num_seps; i++) 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = avdt_scb_by_hdl(seid_list[i])) != NULL) 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_scb_event(p_scb, AVDT_SCB_MSG_START_REJ_EVT, (tAVDT_SCB_EVT *) &avdt_msg.hdr); 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_snd_start_rsp 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a start response to the 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** peer. It takes the stream information passed in the event 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** and sends a start response. Then it sends a start event 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to the SCB for each stream. 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_snd_start_rsp(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb; 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send response message */ 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_rsp(p_ccb, AVDT_SIG_START, &p_data->msg); 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send start event to each scb */ 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < p_data->msg.multi.num_seps; i++) 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = avdt_scb_by_hdl(p_data->msg.multi.seid_list[i])) != NULL) 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_scb_event(p_scb, AVDT_SCB_MSG_START_CMD_EVT, NULL); 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_snd_suspend_cmd 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a suspend command to the 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** peer. It verifies that all requested streams are in the 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** proper state. If so, it sends a suspend command. 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Otherwise it calls the callback function for each requested 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** stream and sends a suspend confirmation with failure. 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_snd_suspend_cmd(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb; 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_MSG avdt_msg; 592d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t seid_list[AVDT_NUM_SEPS]; 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make copy of our seid list */ 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(seid_list, p_data->msg.multi.seid_list, p_data->msg.multi.num_seps); 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify all streams in the right state */ 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((avdt_msg.hdr.err_param = avdt_scb_verify(p_ccb, AVDT_VERIFY_STREAMING, p_data->msg.multi.seid_list, 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->msg.multi.num_seps, &avdt_msg.hdr.err_code)) == 0) 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set peer seid list in messsage */ 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_scb_peer_seid_list(&p_data->msg.multi); 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send command */ 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_cmd(p_ccb, seid_list, AVDT_SIG_SUSPEND, &p_data->msg); 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* failed; send ourselves a reject for each stream */ 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < p_data->msg.multi.num_seps; i++) 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = avdt_scb_by_hdl(seid_list[i])) != NULL) 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_scb_event(p_scb, AVDT_SCB_MSG_SUSPEND_REJ_EVT, (tAVDT_SCB_EVT *) &avdt_msg.hdr); 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_snd_suspend_rsp 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a suspend response to the 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** peer. It takes the stream information passed in the event 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** and sends a suspend response. Then it sends a suspend event 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to the SCB for each stream. 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_snd_suspend_rsp(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb; 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send response message */ 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_rsp(p_ccb, AVDT_SIG_SUSPEND, &p_data->msg); 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send start event to each scb */ 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < p_data->msg.multi.num_seps; i++) 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = avdt_scb_by_hdl(p_data->msg.multi.seid_list[i])) != NULL) 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_scb_event(p_scb, AVDT_SCB_MSG_SUSPEND_CMD_EVT, NULL); 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_clear_cmds 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when the signaling channel is 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** closed to clean up any pending commands. For each pending 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** command in the command queue, it frees the command and 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** calls the application callback function indicating failure. 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Certain CCB variables are also initialized. 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 665d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_clear_cmds(tAVDT_CCB *p_ccb, 666d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb = &avdt_cb.scb[0]; 670d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t err_code = AVDT_ERR_CONNECT; 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear the ccb */ 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_clear_ccb(p_ccb); 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear out command queue; this is a little tricky here; we need 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ** to handle the case where there is a command on deck in p_curr_cmd, 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ** plus we need to clear out the queue 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* we know p_curr_cmd = NULL after this */ 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_cmd_fail(p_ccb, (tAVDT_CCB_EVT *) &err_code); 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set up next message */ 6851a3844f933bd63c8a381371dabfb35c6a0249e3ePavlin Radoslavov p_ccb->p_curr_cmd = (BT_HDR *) fixed_queue_try_dequeue(p_ccb->cmd_q); 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } while (p_ccb->p_curr_cmd != NULL); 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send a CC_CLOSE_EVT any active scbs associated with this ccb */ 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < AVDT_NUM_SEPS; i++, p_scb++) 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb->allocated) && (p_scb->p_ccb == p_ccb)) 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_scb_event(p_scb, AVDT_SCB_CC_CLOSE_EVT, NULL); 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_cmd_fail 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when there is a response timeout. 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The currently pending command is freed and we fake a 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** reject message back to ourselves. 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_cmd_fail(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_MSG msg; 714d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t evt; 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb; 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ccb->p_curr_cmd != NULL) 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set up data */ 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.hdr.err_code = p_data->err_code; 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.hdr.err_param = 0; 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.hdr.ccb_idx = avdt_ccb_to_idx(p_ccb); 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* pretend that we received a rej message */ 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt = avdt_msg_rej_2_evt[p_ccb->p_curr_cmd->event - 1]; 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (evt & AVDT_CCB_MKR) 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 729d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen avdt_ccb_event(p_ccb, (uint8_t) (evt & ~AVDT_CCB_MKR), (tAVDT_CCB_EVT *) &msg); 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* we get the scb out of the current cmd */ 734d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p_scb = avdt_scb_by_hdl(*((uint8_t *)(p_ccb->p_curr_cmd + 1))); 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb != NULL) 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_scb_event(p_scb, evt, (tAVDT_SCB_EVT *) &msg); 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 741cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov osi_free_and_reset((void **)&p_ccb->p_curr_cmd); 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_free_cmd 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when a response is received for a 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** currently pending command. The command is freed. 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 756d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_free_cmd(tAVDT_CCB *p_ccb, 757d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 759cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov osi_free_and_reset((void **)&p_ccb->p_curr_cmd); 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_cong_state 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set the congestion state for 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the CCB. 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_cong_state(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->cong = p_data->llcong; 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_ret_cmd 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to retransmit the currently 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** pending command. The retransmission count is incremented. 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** If the count reaches the maximum number of retransmissions, 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the event is treated as a response timeout. 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_ret_cmd(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 793d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t err_code = AVDT_ERR_TIMEOUT; 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->ret_count++; 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ccb->ret_count == AVDT_RET_MAX) 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* command failed */ 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->ret_count = 0; 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_cmd_fail(p_ccb, (tAVDT_CCB_EVT *) &err_code); 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* go to next queued command */ 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_snd_cmd(p_ccb, p_data); 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if command pending and we're not congested and not sending a fragment */ 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((!p_ccb->cong) && (p_ccb->p_curr_msg == NULL) && (p_ccb->p_curr_cmd != NULL)) 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make copy of message in p_curr_cmd and send it */ 811717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov BT_HDR *p_msg = (BT_HDR *)osi_malloc(AVDT_CMD_BUF_SIZE); 812717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov memcpy(p_msg, p_ccb->p_curr_cmd, 813717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov (sizeof(BT_HDR) + p_ccb->p_curr_cmd->offset + p_ccb->p_curr_cmd->len)); 814717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov avdt_msg_send(p_ccb, p_msg); 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 81778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov /* restart ret timer */ 81878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_cancel(p_ccb->idle_ccb_timer); 81978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_cancel(p_ccb->rsp_ccb_timer); 82078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov period_ms_t interval_ms = avdt_cb.rcb.ret_tout * 1000; 82178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_set_on_queue(p_ccb->ret_ccb_timer, interval_ms, 82278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov avdt_ccb_ret_ccb_timer_timeout, p_ccb, 82378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btu_general_alarm_queue); 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_snd_cmd 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called the send the next command, 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** if any, in the command queue. 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 838d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_snd_cmd(tAVDT_CCB *p_ccb, 839d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg; 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* do we have commands to send? send next command; make sure we're clear; 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ** not congested, not sending fragment, not waiting for response 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((!p_ccb->cong) && (p_ccb->p_curr_msg == NULL) && (p_ccb->p_curr_cmd == NULL)) 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8481a3844f933bd63c8a381371dabfb35c6a0249e3ePavlin Radoslavov if ((p_msg = (BT_HDR *) fixed_queue_try_dequeue(p_ccb->cmd_q)) != NULL) 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make a copy of buffer in p_curr_cmd */ 851717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov p_ccb->p_curr_cmd = (BT_HDR *)osi_malloc(AVDT_CMD_BUF_SIZE); 852717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov memcpy(p_ccb->p_curr_cmd, p_msg, 853717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov (sizeof(BT_HDR) + p_msg->offset + p_msg->len)); 854717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov avdt_msg_send(p_ccb, p_msg); 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_snd_msg 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 869d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_snd_msg(tAVDT_CCB *p_ccb, 870d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg; 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if not congested */ 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_ccb->cong) 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* are we sending a fragmented message? continue sending fragment */ 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ccb->p_curr_msg != NULL) 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send(p_ccb, NULL); 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* do we have responses to send? send them */ 8831a3844f933bd63c8a381371dabfb35c6a0249e3ePavlin Radoslavov else if (!fixed_queue_is_empty(p_ccb->rsp_q)) 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8851a3844f933bd63c8a381371dabfb35c6a0249e3ePavlin Radoslavov while ((p_msg = (BT_HDR *)fixed_queue_try_dequeue(p_ccb->rsp_q)) != NULL) 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 887d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen if (avdt_msg_send(p_ccb, p_msg) == true) 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* break out if congested */ 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* do we have commands to send? send next command */ 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_snd_cmd(p_ccb, NULL); 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_set_reconn 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to enable a reconnect attempt when 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** a channel transitions from closing to idle state. It sets 906d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen** the reconn variable to true. 9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 912d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_set_reconn(tAVDT_CCB *p_ccb, 913d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 915d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p_ccb->reconn = true; 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_clr_reconn 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to clear the reconn variable. 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 928d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_clr_reconn(tAVDT_CCB *p_ccb, 929d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 931d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p_ccb->reconn = false; 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_chk_reconn 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to check if a reconnect attempt 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** is enabled. If enabled, it sends an AVDT_CCB_UL_OPEN_EVT 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to the CCB. If disabled, the CCB is deallocated. 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 946d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_chk_reconn(tAVDT_CCB *p_ccb, 947d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 949d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t err_code = AVDT_ERR_CONNECT; 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ccb->reconn) 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 953d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p_ccb->reconn = false; 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear out ccb */ 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_clear_ccb(p_ccb); 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear out current command, if any */ 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_cmd_fail(p_ccb, (tAVDT_CCB_EVT *) &err_code); 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* reopen the signaling channel */ 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_event(p_ccb, AVDT_CCB_UL_OPEN_EVT, NULL); 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_ll_closed(p_ccb, NULL); 9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_chk_timer 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function stops the CCB timer if the idle timer is 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** running. 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 981d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_chk_timer(tAVDT_CCB *p_ccb, 982d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 98478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_cancel(p_ccb->idle_ccb_timer); 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_set_conn 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Set CCB variables associated with AVDT_ConnectReq(). 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_set_conn(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* save callback */ 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_conn_cback = p_data->connect.p_cback; 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set security level */ 1003d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen BTM_SetSecurityLevel(true, "", BTM_SEC_SERVICE_AVDTP, p_data->connect.sec_mask, 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_PSM, BTM_SEC_PROTO_AVDT, AVDT_CHAN_SIG); 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_set_disconn 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Set CCB variables associated with AVDT_DisconnectReq(). 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_set_disconn(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 1020158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_EVENT("avdt_ccb_set_disconn:conn:x%x, api:x%x", 10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_conn_cback, p_data->disconnect.p_cback); 10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* save callback */ 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->disconnect.p_cback) 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_conn_cback = p_data->disconnect.p_cback; 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_do_disconn 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Do action associated with AVDT_DisconnectReq(). 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1038d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_do_disconn(tAVDT_CCB *p_ccb, 1039d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear any pending commands */ 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_clear_cmds(p_ccb, NULL); 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* close channel */ 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_chan_close(p_ccb, NULL); 10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_ll_closed 10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Clear commands from and deallocate CCB. 10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1058d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid avdt_ccb_ll_closed(tAVDT_CCB *p_ccb, 1059d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR tAVDT_CCB_EVT *p_data) 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_CTRL_CBACK *p_cback; 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR bd_addr; 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_CTRL avdt_ctrl; 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear any pending commands */ 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_clear_cmds(p_ccb, NULL); 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* save callback pointer, bd addr */ 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cback = p_ccb->p_conn_cback; 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_cback) 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cback = avdt_cb.p_conn_cback; 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(bd_addr, p_ccb->peer_addr, BD_ADDR_LEN); 10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* dealloc ccb */ 10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_dealloc(p_ccb, NULL); 10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* call callback */ 10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cback) 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ctrl.hdr.err_code = 0; 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_cback)(0, bd_addr, AVDT_DISCONNECT_IND_EVT, &avdt_ctrl); 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_ccb_ll_opened 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Call callback on open. 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_ll_opened(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data) 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_CTRL avdt_ctrl; 10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1099d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p_ccb->ll_opened = true; 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_ccb->p_conn_cback) 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_conn_cback = avdt_cb.p_conn_cback; 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* call callback */ 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ccb->p_conn_cback) 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ctrl.hdr.err_code = 0; 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ctrl.hdr.err_param = p_data->msg.hdr.err_param; 11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_ccb->p_conn_cback)(0, p_ccb->peer_addr, AVDT_CONNECT_IND_EVT, &avdt_ctrl); 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1112