15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2002-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 functions for parsing and building AVDTP signaling 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * messages. It also contains functions called by the SCB or CCB state 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * machines for sending command, response, and reject messages. It also 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * contains a function that processes incoming messages and dispatches them 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * to the appropriate SCB or CCB. 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "data_types.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 325cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "bt_utils.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdt_api.h" 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdtc_api.h" 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdt_int.h" 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** constants 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* mask of all psc values */ 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define AVDT_MSG_PSC_MASK (AVDT_PSC_TRANS | AVDT_PSC_REPORT | AVDT_PSC_DELAY_RPT | \ 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_PSC_RECOV | AVDT_PSC_HDRCMP | AVDT_PSC_MUX) 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define AVDT_PSC_PROTECT (1<<4) /* Content Protection */ 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define AVDT_PSC_CODEC (1<<7) /* codec */ 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** type definitions 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for message building functions */ 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*tAVDT_MSG_BLD)(UINT8 **p, tAVDT_MSG *p_msg); 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for message parsing functions */ 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 (*tAVDT_MSG_PRS)(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** local function declarations 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_none(UINT8 **p, tAVDT_MSG *p_msg); 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_single(UINT8 **p, tAVDT_MSG *p_msg); 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_setconfig_cmd(UINT8 **p, tAVDT_MSG *p_msg); 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_reconfig_cmd(UINT8 **p, tAVDT_MSG *p_msg); 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_multi(UINT8 **p, tAVDT_MSG *p_msg); 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_security_cmd(UINT8 **p, tAVDT_MSG *p_msg); 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_discover_rsp(UINT8 **p, tAVDT_MSG *p_msg); 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_svccap(UINT8 **p, tAVDT_MSG *p_msg); 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_security_rsp(UINT8 **p, tAVDT_MSG *p_msg); 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_all_svccap(UINT8 **p, tAVDT_MSG *p_msg); 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_delay_rpt(UINT8 **p, tAVDT_MSG *p_msg); 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_none(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_single(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_setconfig_cmd(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_reconfig_cmd(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_multi(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_security_cmd(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_discover_rsp(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_svccap(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_all_svccap(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_security_rsp(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_delay_rpt (tAVDT_MSG *p_msg, UINT8 *p, UINT16 len); 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** constants 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* table of information element minimum lengths used for parsing */ 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 avdt_msg_ie_len_min[] = { 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 0, /* unused */ 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_TRANS_MIN, /* media transport */ 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_REPORT_MIN, /* reporting */ 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_RECOV_MIN, /* recovery */ 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_PROTECT_MIN, /* content protection */ 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_HDRCMP_MIN, /* header compression */ 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_MUX_MIN, /* multiplexing */ 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_CODEC_MIN, /* codec */ 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_DELAY_RPT_MIN /* delay report */ 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* table of information element minimum lengths used for parsing */ 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 avdt_msg_ie_len_max[] = { 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 0, /* unused */ 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_TRANS_MAX, /* media transport */ 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_REPORT_MAX, /* reporting */ 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_RECOV_MAX, /* recovery */ 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_PROTECT_MAX, /* content protection */ 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_HDRCMP_MAX, /* header compression */ 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_MUX_MAX, /* multiplexing */ 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_CODEC_MAX, /* codec */ 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_DELAY_RPT_MAX /* delay report */ 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* table of error codes used when decoding information elements */ 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 avdt_msg_ie_err[] = { 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 0, /* unused */ 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_ERR_MEDIA_TRANS, /* media transport */ 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_ERR_LENGTH, /* reporting */ 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_ERR_RECOV_FMT, /* recovery */ 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_ERR_CP_FMT, /* content protection */ 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_ERR_ROHC_FMT, /* header compression */ 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_ERR_MUX_FMT, /* multiplexing */ 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_ERR_SERVICE, /* codec */ 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_ERR_SERVICE /* delay report ?? */ 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* table of packet type minimum lengths */ 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const UINT8 avdt_msg_pkt_type_len[] = { 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_TYPE_SINGLE, 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_TYPE_START, 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_TYPE_CONT, 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_LEN_TYPE_END 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* function table for building command messages */ 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tAVDT_MSG_BLD avdt_msg_bld_cmd[] = { 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_none, /* discover */ 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_single, /* get capabilities */ 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_setconfig_cmd, /* set configuration */ 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_single, /* get configuration */ 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_reconfig_cmd, /* reconfigure */ 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_single, /* open */ 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_multi, /* start */ 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_single, /* close */ 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_multi, /* suspend */ 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_single, /* abort */ 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_security_cmd, /* security control */ 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_single, /* get all capabilities */ 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_delay_rpt /* delay report */ 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* function table for building response messages */ 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tAVDT_MSG_BLD avdt_msg_bld_rsp[] = { 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_discover_rsp, /* discover */ 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_svccap, /* get capabilities */ 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_none, /* set configuration */ 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_all_svccap, /* get configuration */ 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_none, /* reconfigure */ 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_none, /* open */ 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_none, /* start */ 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_none, /* close */ 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_none, /* suspend */ 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_none, /* abort */ 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_security_rsp, /* security control */ 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_all_svccap, /* get all capabilities */ 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_none /* delay report */ 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* function table for parsing command messages */ 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tAVDT_MSG_PRS avdt_msg_prs_cmd[] = { 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_none, /* discover */ 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_single, /* get capabilities */ 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_setconfig_cmd, /* set configuration */ 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_single, /* get configuration */ 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_reconfig_cmd, /* reconfigure */ 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_single, /* open */ 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_multi, /* start */ 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_single, /* close */ 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_multi, /* suspend */ 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_single, /* abort */ 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_security_cmd, /* security control */ 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_single, /* get all capabilities */ 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_delay_rpt /* delay report */ 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* function table for parsing response messages */ 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tAVDT_MSG_PRS avdt_msg_prs_rsp[] = { 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_discover_rsp, /* discover */ 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_svccap, /* get capabilities */ 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_none, /* set configuration */ 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_all_svccap, /* get configuration */ 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_none, /* reconfigure */ 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_none, /* open */ 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_none, /* start */ 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_none, /* close */ 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_none, /* suspend */ 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_none, /* abort */ 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_security_rsp, /* security control */ 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_all_svccap, /* get all capabilities */ 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_prs_none /* delay report */ 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* command message-to-event lookup table */ 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 avdt_msg_cmd_2_evt[] = { 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_DISCOVER_CMD_EVT + AVDT_CCB_MKR, /* discover */ 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_GETCAP_CMD_EVT + AVDT_CCB_MKR, /* get capabilities */ 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_SETCONFIG_CMD_EVT, /* set configuration */ 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_GETCONFIG_CMD_EVT, /* get configuration */ 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_RECONFIG_CMD_EVT, /* reconfigure */ 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_OPEN_CMD_EVT, /* open */ 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_START_CMD_EVT + AVDT_CCB_MKR, /* start */ 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_CLOSE_CMD_EVT, /* close */ 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_SUSPEND_CMD_EVT + AVDT_CCB_MKR, /* suspend */ 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_ABORT_CMD_EVT, /* abort */ 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_SECURITY_CMD_EVT, /* security control */ 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_GETCAP_CMD_EVT + AVDT_CCB_MKR, /* get all capabilities */ 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_DELAY_RPT_CMD_EVT /* delay report */ 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* response message-to-event lookup table */ 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 avdt_msg_rsp_2_evt[] = { 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_DISCOVER_RSP_EVT + AVDT_CCB_MKR, /* discover */ 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_GETCAP_RSP_EVT + AVDT_CCB_MKR, /* get capabilities */ 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_SETCONFIG_RSP_EVT, /* set configuration */ 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_GETCONFIG_RSP_EVT, /* get configuration */ 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_RECONFIG_RSP_EVT, /* reconfigure */ 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_OPEN_RSP_EVT, /* open */ 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_START_RSP_EVT + AVDT_CCB_MKR, /* start */ 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_CLOSE_RSP_EVT, /* close */ 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_SUSPEND_RSP_EVT + AVDT_CCB_MKR, /* suspend */ 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_ABORT_RSP_EVT, /* abort */ 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_SECURITY_RSP_EVT, /* security control */ 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_GETCAP_RSP_EVT + AVDT_CCB_MKR, /* get all capabilities */ 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_DELAY_RPT_RSP_EVT /* delay report */ 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* reject message-to-event lookup table */ 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 avdt_msg_rej_2_evt[] = { 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_DISCOVER_RSP_EVT + AVDT_CCB_MKR, /* discover */ 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_GETCAP_RSP_EVT + AVDT_CCB_MKR, /* get capabilities */ 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_SETCONFIG_REJ_EVT, /* set configuration */ 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_GETCONFIG_RSP_EVT, /* get configuration */ 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_RECONFIG_RSP_EVT, /* reconfigure */ 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_OPEN_REJ_EVT, /* open */ 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_START_RSP_EVT + AVDT_CCB_MKR, /* start */ 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_CLOSE_RSP_EVT, /* close */ 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_SUSPEND_RSP_EVT + AVDT_CCB_MKR, /* suspend */ 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_ABORT_RSP_EVT, /* abort */ 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_SCB_MSG_SECURITY_RSP_EVT, /* security control */ 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_CCB_MSG_GETCAP_RSP_EVT + AVDT_CCB_MKR, /* get all capabilities */ 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 0 /* delay report */ 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_cfg 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function builds the configuration parameters contained 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** in a command or response message. 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_cfg(UINT8 **p, tAVDT_CFG *p_cfg) 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 len; 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* for now, just build media transport, codec, and content protection, and multiplexing */ 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* media transport */ 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cfg->psc_mask & AVDT_PSC_TRANS) 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = AVDT_CAT_TRANS; 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = 0; /* length */ 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if AVDT_REPORTING == TRUE 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* reporting transport */ 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cfg->psc_mask & AVDT_PSC_REPORT) 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = AVDT_CAT_REPORT; 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = 0; /* length */ 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* codec */ 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cfg->num_codec != 0) 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = AVDT_CAT_CODEC; 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len = p_cfg->codec_info[0] + 1; 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( len > AVDT_CODEC_SIZE ) 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len = AVDT_CODEC_SIZE; 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(*p, p_cfg->codec_info, len); 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p += len; 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* content protection */ 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cfg->num_protect != 0) 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = AVDT_CAT_PROTECT; 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len = p_cfg->protect_info[0] + 1; 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( len > AVDT_PROTECT_SIZE ) 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len = AVDT_PROTECT_SIZE; 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(*p, p_cfg->protect_info, len); 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p += len; 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if AVDT_MULTIPLEXING == TRUE 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* multiplexing */ 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cfg->psc_mask & AVDT_PSC_MUX) 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = AVDT_CAT_MUX; 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* length */ 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cfg->psc_mask & AVDT_PSC_RECOV) 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = 7; /* frag (1) + media + report + recovery */ 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (p_cfg->psc_mask & AVDT_PSC_REPORT) 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = 5; /* frag (1) + media + report */ 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = 3; /* frag (1) + media */ 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* allow fragmentation */ 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_cfg->mux_mask & AVDT_MUX_FRAG) 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = 0x80; 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = 0; 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* media transport session */ 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = p_cfg->mux_tsid_media<<3; /* TSID */ 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = p_cfg->mux_tcid_media<<3; /* TCID */ 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cfg->psc_mask & AVDT_PSC_RECOV) 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* reporting transport session */ 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = p_cfg->mux_tsid_report<<3; /* TSID */ 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = p_cfg->mux_tcid_report<<3; /* TCID */ 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* recovery transport session */ 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = p_cfg->mux_tsid_recov<<3; /* TSID */ 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = p_cfg->mux_tcid_recov<<3; /* TCID */ 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (p_cfg->psc_mask & AVDT_PSC_REPORT) 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* reporting transport session */ 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = p_cfg->mux_tsid_report<<3; /* TSID */ 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = p_cfg->mux_tcid_report<<3; /* TCID */ 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* delay report */ 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cfg->psc_mask & AVDT_PSC_DELAY_RPT) 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = AVDT_CAT_DELAY_RPT; 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(*p)++ = 0; /* length */ 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_none 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message building function builds an empty message. 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_none(UINT8 **p, tAVDT_MSG *p_msg) 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3775cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p); 3785cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_msg); 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_single 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message building function builds a message containing 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** a single SEID. 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_single(UINT8 **p, tAVDT_MSG *p_msg) 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_SEID(*p, p_msg->single.seid); 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_setconfig_cmd 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message building function builds a set configuration 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** command message. 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_setconfig_cmd(UINT8 **p, tAVDT_MSG *p_msg) 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_SEID(*p, p_msg->config_cmd.hdr.seid); 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_SEID(*p, p_msg->config_cmd.int_seid); 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_cfg(p, p_msg->config_cmd.p_cfg); 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_reconfig_cmd 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message building function builds a reconfiguration 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** command message. 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_reconfig_cmd(UINT8 **p, tAVDT_MSG *p_msg) 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_SEID(*p, p_msg->reconfig_cmd.hdr.seid); 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* force psc mask zero to build only codec and security */ 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->reconfig_cmd.p_cfg->psc_mask = 0; 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_cfg(p, p_msg->reconfig_cmd.p_cfg); 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_multi 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message building function builds a message containing 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** multiple SEID's. 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_multi(UINT8 **p, tAVDT_MSG *p_msg) 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < p_msg->multi.num_seps; i++) 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_SEID(*p, p_msg->multi.seid_list[i]); 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_security_cmd 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message building function builds a security 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** command message. 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_security_cmd(UINT8 **p, tAVDT_MSG *p_msg) 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_SEID(*p, p_msg->security_cmd.hdr.seid); 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(*p, p_msg->security_cmd.p_data, p_msg->security_cmd.len); 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p += p_msg->security_cmd.len; 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_delay_rpt 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message building function builds a delay report 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** command message. 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_delay_rpt(UINT8 **p, tAVDT_MSG *p_msg) 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_SEID(*p, p_msg->delay_rpt_cmd.hdr.seid); 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_BE_STREAM(*p, p_msg->delay_rpt_cmd.delay); 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_discover_rsp 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message building function builds a discover 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** response message. 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_discover_rsp(UINT8 **p, tAVDT_MSG *p_msg) 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < p_msg->discover_rsp.num_seps; i++) 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* build discover rsp info */ 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_DISC(*p, p_msg->discover_rsp.p_sep_info[i].seid, 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->discover_rsp.p_sep_info[i].in_use, 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->discover_rsp.p_sep_info[i].media_type, 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->discover_rsp.p_sep_info[i].tsep); 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_svccap 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message building function builds a message containing 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** service capabilities parameters. 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_svccap(UINT8 **p, tAVDT_MSG *p_msg) 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_CFG cfg; 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make sure the delay report category is not reported */ 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy (&cfg, p_msg->svccap.p_cfg, sizeof(tAVDT_CFG)); 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cfg.psc_mask &= ~AVDT_PSC_DELAY_RPT; 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_cfg(p, &cfg); 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_all_svccap 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message building function builds a message containing 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** service capabilities parameters. 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_all_svccap(UINT8 **p, tAVDT_MSG *p_msg) 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_bld_cfg(p, p_msg->svccap.p_cfg); 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_bld_security_rsp 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message building function builds a security 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** response message. 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void. 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void avdt_msg_bld_security_rsp(UINT8 **p, tAVDT_MSG *p_msg) 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(*p, p_msg->security_rsp.p_data, p_msg->security_rsp.len); 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p += p_msg->security_rsp.len; 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_cfg 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parses the configuration 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** parameters field of a message. 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error, and element that failed 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** in p_elem. 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_cfg(tAVDT_CFG *p_cfg, UINT8 *p, UINT16 len, UINT8* p_elem, UINT8 sig_id) 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_end; 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 elem = 0; 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 elem_len; 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 tmp; 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 err = 0; 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 protect_offset = 0; 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_cfg) 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 592158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_ERROR ("not expecting this cfg"); 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return AVDT_ERR_BAD_STATE; 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->psc_mask = 0; 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->num_codec = 0; 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->num_protect = 0; 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if AVDT_MULTIPLEXING == TRUE 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->mux_mask = 0; 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* while there is still data to parse */ 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_end = p + len; 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ((p < p_end) && (err == 0)) 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify overall length */ 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_end - p) < AVDT_LEN_CFG_MIN) 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_PAYLOAD; 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get and verify info elem id, length */ 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project elem = *p++; 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project elem_len = *p++; 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((elem == 0) || (elem > AVDT_CAT_MAX_CUR)) 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* this may not be really bad. 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * It may be a service category that is too new for us. 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * allow these to be parsed without reporting an error. 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * If this is a "capability" (as in GetCapRsp & GetConfigRsp), this is filtered out. 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * If this is a Configuration (as in SetConfigCmd & ReconfigCmd), 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * this will be marked as an error in the caller of this function */ 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((sig_id == AVDT_SIG_SETCONFIG) || (sig_id == AVDT_SIG_RECONFIG)) 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Cannot accept unknown category. */ 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_CATEGORY; 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* GETCAP or GET_ALLCAP */ 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Skip unknown categories. */ 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p += elem_len; 636158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_DEBUG("skipping unknown service category=%d len: %d", elem, elem_len); 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project continue; 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((elem_len > avdt_msg_ie_len_max[elem]) || 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (elem_len < avdt_msg_ie_len_min[elem])) 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = avdt_msg_ie_err[elem]; 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* add element to psc mask, but mask out codec or protect */ 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->psc_mask |= (1 << elem); 650158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_DEBUG("elem=%d elem_len: %d psc_mask=0x%x", elem, elem_len, p_cfg->psc_mask); 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse individual information elements with additional parameters */ 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (elem) 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case AVDT_CAT_RECOV: 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->recov_type = *p++; 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->recov_mrws = *p++; 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->recov_mnmp = *p++; 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cfg->recov_type != AVDT_RECOV_RFC2733) 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_RECOV_TYPE; 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((p_cfg->recov_mrws < AVDT_RECOV_MRWS_MIN) || 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_cfg->recov_mrws > AVDT_RECOV_MRWS_MAX) || 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_cfg->recov_mnmp < AVDT_RECOV_MNMP_MIN) || 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_cfg->recov_mnmp > AVDT_RECOV_MNMP_MAX)) 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_RECOV_FMT; 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case AVDT_CAT_PROTECT: 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->psc_mask &= ~AVDT_PSC_PROTECT; 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((elem_len + protect_offset) < AVDT_PROTECT_SIZE) 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->num_protect++; 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->protect_info[protect_offset] = elem_len; 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project protect_offset++; 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&p_cfg->protect_info[protect_offset], p, elem_len); 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project protect_offset += elem_len; 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p += elem_len; 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case AVDT_CAT_HDRCMP: 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->hdrcmp_mask = *p++; 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if AVDT_MULTIPLEXING == TRUE 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case AVDT_CAT_MUX: 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify length */ 692158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_WARNING("psc_mask=0x%x elem_len=%d", p_cfg->psc_mask, elem_len); 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( ((0 == (p_cfg->psc_mask & (AVDT_PSC_RECOV|AVDT_PSC_REPORT))) && (elem_len != 3)) 6942fc1a9aa23e50db07aafcff3c9f5efd509e04336Kim Schulz || (((p_cfg->psc_mask & AVDT_PSC_REPORT) && !(p_cfg->psc_mask & AVDT_PSC_RECOV)) 6952fc1a9aa23e50db07aafcff3c9f5efd509e04336Kim Schulz && (elem_len != 5)) 6962fc1a9aa23e50db07aafcff3c9f5efd509e04336Kim Schulz || ((!(p_cfg->psc_mask & AVDT_PSC_REPORT) && (p_cfg->psc_mask & AVDT_PSC_RECOV)) 6972fc1a9aa23e50db07aafcff3c9f5efd509e04336Kim Schulz && (elem_len != 5)) 6982fc1a9aa23e50db07aafcff3c9f5efd509e04336Kim Schulz || (((p_cfg->psc_mask & AVDT_PSC_REPORT) && (p_cfg->psc_mask & AVDT_PSC_RECOV)) 6992fc1a9aa23e50db07aafcff3c9f5efd509e04336Kim Schulz && (elem_len != 7)) ) 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_MUX_FMT; 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse fragmentation */ 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->mux_mask = *p++ & (UINT8)AVDT_MUX_FRAG; 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse TSIDs and TCIDs */ 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(--elem_len) 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->mux_tsid_media = (*p++)>>3; 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(--elem_len) 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->mux_tcid_media = (*p++)>>3; 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(--elem_len) 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->mux_tsid_report = (*p++)>>3; 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(--elem_len) 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->mux_tcid_report = (*p++)>>3; 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(--elem_len) 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->mux_tsid_recov = (*p++)>>3; 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(--elem_len) 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->mux_tcid_recov = (*p++)>>3; 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case AVDT_CAT_CODEC: 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->psc_mask &= ~AVDT_PSC_CODEC; 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tmp = elem_len; 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (elem_len >= AVDT_CODEC_SIZE) 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tmp = AVDT_CODEC_SIZE - 1; 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->num_codec++; 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cfg->codec_info[0] = elem_len; 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&p_cfg->codec_info[1], p, tmp); 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p += elem_len; 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case AVDT_CAT_DELAY_RPT: 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p += elem_len; 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } /* switch */ 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } /* while ! err, !end*/ 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_elem = elem; 763158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_DEBUG("err=0x%x, elem:0x%x psc_mask=0x%x", err, elem, p_cfg->psc_mask); 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return err; 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_none 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parses a message with no parameters. 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_none(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len) 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7815cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_msg); 7825cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p); 7835cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(len); 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0; 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_single 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parses a message with a 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** single SEID. 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_single(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len) 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 err = 0; 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify len */ 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len != AVDT_LEN_SINGLE) 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_LENGTH; 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_SEID(p, p_msg->single.seid); 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (avdt_scb_by_hdl(p_msg->single.seid) == NULL) 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_SEID; 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return err; 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_setconfig_cmd 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parses a set configuration 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** command message. 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_setconfig_cmd(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len) 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 err = 0; 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.err_param = 0; 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify len */ 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len < AVDT_LEN_SETCONFIG_MIN) 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_LENGTH; 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get seids */ 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_SEID(p, p_msg->config_cmd.hdr.seid); 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (avdt_scb_by_hdl(p_msg->config_cmd.hdr.seid) == NULL) 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_SEID; 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_SEID(p, p_msg->config_cmd.int_seid); 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg->config_cmd.int_seid < AVDT_SEID_MIN) || 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_msg->config_cmd.int_seid > AVDT_SEID_MAX)) 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_SEID; 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!err) 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse configuration parameters */ 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len -= 2; 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = avdt_msg_prs_cfg(p_msg->config_cmd.p_cfg, p, len, &p_msg->hdr.err_param, AVDT_SIG_SETCONFIG); 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!err) 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify protocol service capabilities are supported */ 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (((p_msg->config_cmd.p_cfg->psc_mask & (~AVDT_PSC)) != 0) || 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_msg->config_cmd.p_cfg->num_codec == 0)) 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_INVALID_CAP; 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return err; 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_reconfig_cmd 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parses a reconfiguration 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** command message. 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_reconfig_cmd(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len) 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 err = 0; 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.err_param = 0; 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify len */ 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len < AVDT_LEN_RECONFIG_MIN) 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_LENGTH; 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get seid */ 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_SEID(p, p_msg->reconfig_cmd.hdr.seid); 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (avdt_scb_by_hdl(p_msg->reconfig_cmd.hdr.seid) == NULL) 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_SEID; 9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse config parameters */ 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len--; 9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = avdt_msg_prs_cfg(p_msg->config_cmd.p_cfg, p, len, &p_msg->hdr.err_param, AVDT_SIG_RECONFIG); 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify no protocol service capabilities in parameters */ 9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!err) 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 917158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_DEBUG("avdt_msg_prs_reconfig_cmd psc_mask=0x%x/0x%x", p_msg->config_cmd.p_cfg->psc_mask, AVDT_MSG_PSC_MASK); 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg->config_cmd.p_cfg->psc_mask != 0) || 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_msg->config_cmd.p_cfg->num_codec == 0 && p_msg->config_cmd.p_cfg->num_protect == 0)) 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_INVALID_CAP; 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return err; 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_multi 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parses a message containing 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** multiple SEID's. 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_multi(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len) 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 err = 0; 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.err_param = 0; 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify len */ 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len < AVDT_LEN_MULTI_MIN || (len > AVDT_NUM_SEPS)) 9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_LENGTH; 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get and verify all seps */ 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < len; i++) 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_SEID(p, p_msg->multi.seid_list[i]); 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (avdt_scb_by_hdl(p_msg->multi.seid_list[i]) == NULL) 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_SEID; 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.err_param = p_msg->multi.seid_list[i]; 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->multi.num_seps = (UINT8)i; 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return err; 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_security_cmd 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parses a security 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** command message. 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_security_cmd(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len) 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 err = 0; 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify len */ 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len < AVDT_LEN_SECURITY_MIN) 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_LENGTH; 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get seid */ 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_SEID(p, p_msg->security_cmd.hdr.seid); 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (avdt_scb_by_hdl(p_msg->security_cmd.hdr.seid) == NULL) 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_SEID; 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->security_cmd.p_data = p; 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->security_cmd.len = len - 1; 10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return err; 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_discover_rsp 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parses a discover 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** response message. 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_discover_rsp(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len) 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 err = 0; 10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* determine number of seps; seps in msg is len/2, but set to minimum 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ** of seps app has supplied memory for and seps in msg 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_msg->discover_rsp.num_seps > (len / 2)) 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->discover_rsp.num_seps = (len / 2); 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse out sep info */ 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < p_msg->discover_rsp.num_seps; i++) 10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse discover rsp info */ 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_DISC(p, p_msg->discover_rsp.p_sep_info[i].seid, 10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->discover_rsp.p_sep_info[i].in_use, 10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->discover_rsp.p_sep_info[i].media_type, 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->discover_rsp.p_sep_info[i].tsep); 10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify that seid is valid */ 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg->discover_rsp.p_sep_info[i].seid < AVDT_SEID_MIN) || 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_msg->discover_rsp.p_sep_info[i].seid > AVDT_SEID_MAX)) 10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_SEID; 10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return err; 10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_svccap 10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parses a message containing 10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** service capabilities parameters. 10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_svccap(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len) 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse parameters */ 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 err = avdt_msg_prs_cfg(p_msg->svccap.p_cfg, p, len, &p_msg->hdr.err_param, AVDT_SIG_GETCAP); 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_msg->svccap.p_cfg) 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->svccap.p_cfg->psc_mask &= AVDT_LEG_PSC; 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (err); 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_all_svccap 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parses a message containing 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** service capabilities parameters. 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_all_svccap(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len) 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 err = avdt_msg_prs_cfg(p_msg->svccap.p_cfg, p, len, &p_msg->hdr.err_param, AVDT_SIG_GET_ALLCAP); 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_msg->svccap.p_cfg) 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->svccap.p_cfg->psc_mask &= AVDT_MSG_PSC_MASK; 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (err); 10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_security_rsp 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parsing a security 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** response message. 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_security_rsp(tAVDT_MSG *p_msg, UINT8 *p, UINT16 len) 11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->security_rsp.p_data = p; 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->security_rsp.len = len; 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0; 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_rej 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description 11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_rej(tAVDT_MSG *p_msg, UINT8 *p, UINT8 sig) 11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((sig == AVDT_SIG_SETCONFIG) || (sig == AVDT_SIG_RECONFIG)) 11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.err_param = *p++; 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.err_code = *p; 11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((sig == AVDT_SIG_START) || (sig == AVDT_SIG_SUSPEND)) 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_SEID(p, p_msg->hdr.err_param); 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.err_code = *p; 11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.err_code = *p; 11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0; 11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_prs_delay_rpt 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This message parsing function parses a security 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** command message. 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Error code or zero if no error. 11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 avdt_msg_prs_delay_rpt (tAVDT_MSG *p_msg, UINT8 *p, UINT16 len) 11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 err = 0; 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify len */ 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (len != AVDT_LEN_DELAY_RPT) 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1164158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_WARNING("avdt_msg_prs_delay_rpt expected len: %u got: %u", AVDT_LEN_DELAY_RPT, len); 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_LENGTH; 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get seid */ 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_SEID (p, p_msg->delay_rpt_cmd.hdr.seid); 11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (avdt_scb_by_hdl(p_msg->delay_rpt_cmd.hdr.seid) == NULL) 11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = AVDT_ERR_SEID; 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BE_STREAM_TO_UINT16 (p_msg->delay_rpt_cmd.delay, p); 1179158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_DEBUG("avdt_msg_prs_delay_rpt delay: %u", p_msg->delay_rpt_cmd.delay); 11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return err; 11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_send 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Send, and if necessary fragment the next message. 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Congested state; TRUE if CCB congested, FALSE if not. 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN avdt_msg_send(tAVDT_CCB *p_ccb, BT_HDR *p_msg) 11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 curr_msg_len; 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 pkt_type; 12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 hdr_len; 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_TC_TBL *p_tbl; 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_buf; 12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 label; 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 msg; 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 sig; 12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 nosp = 0; /* number of subsequent packets */ 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* look up transport channel table entry to get peer mtu */ 12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tbl = avdt_ad_tc_tbl_by_type(AVDT_CHAN_SIG, p_ccb, NULL); 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set the current message if there is a message passed in */ 12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_msg != NULL) 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_curr_msg = p_msg; 12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* store copy of curr_msg->len */ 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project curr_msg_len = p_ccb->p_curr_msg->len; 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* while not congested and we haven't sent it all */ 12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ((!p_ccb->cong) && (p_ccb->p_curr_msg != NULL)) 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* check what kind of message we've got here; we are using the offset 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ** to indicate that a message is being fragmented 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if message isn't being fragmented and it fits in mtu */ 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_ccb->p_curr_msg->offset == AVDT_MSG_OFFSET) && 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_ccb->p_curr_msg->len <= p_tbl->peer_mtu - AVDT_LEN_TYPE_SINGLE)) 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pkt_type = AVDT_PKT_TYPE_SINGLE; 12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project hdr_len = AVDT_LEN_TYPE_SINGLE; 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf = p_ccb->p_curr_msg; 12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if message isn't being fragmented and it doesn't fit in mtu */ 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((p_ccb->p_curr_msg->offset == AVDT_MSG_OFFSET) && 12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_ccb->p_curr_msg->len > p_tbl->peer_mtu - AVDT_LEN_TYPE_SINGLE)) 12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pkt_type = AVDT_PKT_TYPE_START; 12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project hdr_len = AVDT_LEN_TYPE_START; 12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project nosp = (p_ccb->p_curr_msg->len + AVDT_LEN_TYPE_START - p_tbl->peer_mtu) / 12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_tbl->peer_mtu - 1) + 2; 12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get a new buffer for fragment we are sending */ 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_buf = (BT_HDR *) GKI_getpoolbuf(AVDT_CMD_POOL_ID)) == NULL) 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* do we even want to try and recover from this? could do so 12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project by setting retransmission timer */ 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* copy portion of data from current message to new buffer */ 12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->offset = L2CAP_MIN_OFFSET + hdr_len; 12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->len = p_tbl->peer_mtu - hdr_len; 12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy((UINT8 *)(p_buf + 1) + p_buf->offset, 12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT8 *)(p_ccb->p_curr_msg + 1) + p_ccb->p_curr_msg->offset, p_buf->len); 12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if message is being fragmented and remaining bytes don't fit in mtu */ 12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((p_ccb->p_curr_msg->offset > AVDT_MSG_OFFSET) && 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_ccb->p_curr_msg->len > (p_tbl->peer_mtu - AVDT_LEN_TYPE_CONT))) 12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pkt_type = AVDT_PKT_TYPE_CONT; 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project hdr_len = AVDT_LEN_TYPE_CONT; 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get a new buffer for fragment we are sending */ 12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_buf = (BT_HDR *) GKI_getpoolbuf(AVDT_CMD_POOL_ID)) == NULL) 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* do we even want to try and recover from this? could do so 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project by setting retransmission timer */ 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* copy portion of data from current message to new buffer */ 12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->offset = L2CAP_MIN_OFFSET + hdr_len; 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->len = p_tbl->peer_mtu - hdr_len; 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy((UINT8 *)(p_buf + 1) + p_buf->offset, 12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT8 *)(p_ccb->p_curr_msg + 1) + p_ccb->p_curr_msg->offset, p_buf->len); 12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if message is being fragmented and remaining bytes do fit in mtu */ 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pkt_type = AVDT_PKT_TYPE_END; 12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project hdr_len = AVDT_LEN_TYPE_END; 12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf = p_ccb->p_curr_msg; 12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* label, sig id, msg type are in hdr of p_curr_msg */ 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project label = AVDT_LAYERSPEC_LABEL(p_ccb->p_curr_msg->layer_specific); 12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg = AVDT_LAYERSPEC_MSG(p_ccb->p_curr_msg->layer_specific); 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sig = (UINT8) p_ccb->p_curr_msg->event; 1292158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_DEBUG("avdt_msg_send label:%d, msg:%d, sig:%d", label, msg, sig); 12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* keep track of how much of msg we've sent */ 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project curr_msg_len -= p_buf->len; 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (curr_msg_len == 0) 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* entire message sent; mark as finished */ 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_curr_msg = NULL; 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start timer here for commands */ 13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (msg == AVDT_MSG_TYPE_CMD) 13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if retransmit timeout set to zero, sig doesn't use retransmit */ 13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((sig == AVDT_SIG_DISCOVER) || (sig == AVDT_SIG_GETCAP) || 13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (sig == AVDT_SIG_SECURITY) || (avdt_cb.rcb.ret_tout == 0)) 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_start_timer(&p_ccb->timer_entry, BTU_TTYPE_AVDT_CCB_RSP, avdt_cb.rcb.sig_tout); 13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (sig != AVDT_SIG_DELAY_RPT) 13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_start_timer(&p_ccb->timer_entry, BTU_TTYPE_AVDT_CCB_RET, avdt_cb.rcb.ret_tout); 13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* message being fragmented and not completely sent */ 13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_curr_msg->len -= p_buf->len; 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_curr_msg->offset += p_buf->len; 13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set up to build header */ 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->len += hdr_len; 13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->offset -= hdr_len; 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = (UINT8 *)(p_buf + 1) + p_buf->offset; 13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* build header */ 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_HDR(p, label, pkt_type, msg); 13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (pkt_type == AVDT_PKT_TYPE_START) 13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_NOSP(p, nosp); 13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((pkt_type == AVDT_PKT_TYPE_START) || (pkt_type == AVDT_PKT_TYPE_SINGLE)) 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_SIG(p, sig); 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send msg buffer down */ 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ad_write_req(AVDT_CHAN_SIG, p_ccb, NULL, p_buf); 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (p_ccb->cong); 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_asmbl 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Reassemble incoming message. 13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Pointer to reassembled message; NULL if no message 13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** available. 13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBT_HDR *avdt_msg_asmbl(tAVDT_CCB *p_ccb, BT_HDR *p_buf) 13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 pkt_type; 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_ret; 13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 buf_len; 13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse the message header */ 13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = (UINT8 *)(p_buf + 1) + p_buf->offset; 13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_PKT_TYPE(p, pkt_type); 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* quick sanity check on length */ 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_buf->len < avdt_msg_pkt_type_len[pkt_type]) 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_buf); 1371158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_WARNING("Bad length during reassembly"); 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ret = NULL; 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* single packet */ 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (pkt_type == AVDT_PKT_TYPE_SINGLE) 13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if reassembly in progress drop message and process new single */ 13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ccb->p_rx_msg != NULL) 13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_ccb->p_rx_msg); 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_rx_msg = NULL; 1382158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_WARNING("Got single during reassembly"); 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ret = p_buf; 13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start packet */ 13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (pkt_type == AVDT_PKT_TYPE_START) 13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if reassembly in progress drop message and process new single */ 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ccb->p_rx_msg != NULL) 13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_ccb->p_rx_msg); 1393158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_WARNING("Got start during reassembly"); 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_rx_msg = p_buf; 13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* copy first header byte over nosp */ 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *(p + 1) = *p; 13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set offset to point to where to copy next */ 14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_rx_msg->offset += p_ccb->p_rx_msg->len; 14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* adjust length for packet header */ 14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_rx_msg->len -= 1; 14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ret = NULL; 14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* continue or end */ 14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if no reassembly in progress drop message */ 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ccb->p_rx_msg == NULL) 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_buf); 1415158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_WARNING("Pkt type=%d out of order", pkt_type); 14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ret = NULL; 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get size of buffer holding assembled message */ 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project buf_len = GKI_get_buf_size(p_ccb->p_rx_msg) - sizeof(BT_HDR); 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* adjust offset and len of fragment for header byte */ 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->offset += AVDT_LEN_TYPE_CONT; 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->len -= AVDT_LEN_TYPE_CONT; 14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify length */ 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_ccb->p_rx_msg->offset + p_buf->len) > buf_len) 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* won't fit; free everything */ 14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_ccb->p_rx_msg); 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_rx_msg = NULL; 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_buf); 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ret = NULL; 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* copy contents of p_buf to p_rx_msg */ 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy((UINT8 *)(p_ccb->p_rx_msg + 1) + p_ccb->p_rx_msg->offset, 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT8 *)(p_buf + 1) + p_buf->offset, p_buf->len); 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (pkt_type == AVDT_PKT_TYPE_END) 14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_rx_msg->offset -= p_ccb->p_rx_msg->len; 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_rx_msg->len += p_buf->len; 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ret = p_ccb->p_rx_msg; 14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_rx_msg = NULL; 14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_rx_msg->offset += p_buf->len; 14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->p_rx_msg->len += p_buf->len; 14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ret = NULL; 14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_buf); 14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_ret; 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_send_cmd 14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a command message. The 14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** sig_id parameter indicates the message type, p_params 14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** points to the message parameters, if any. It gets a buffer 14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the AVDTP command pool, executes the message building 14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** function for this message type. It then queues the message 14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** in the command queue for this CCB. 14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Nothing. 14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_msg_send_cmd(tAVDT_CCB *p_ccb, void *p_scb, UINT8 sig_id, tAVDT_MSG *p_params) 14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_buf; 14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_start; 14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get a buffer */ 14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf = (BT_HDR *) GKI_getpoolbuf(AVDT_CMD_POOL_ID); 14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_buf == NULL) 14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1487158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_ERROR("avdt_msg_send_cmd out of buffer!!"); 14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set up gki buf pointer and offset */ 14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->offset = AVDT_MSG_OFFSET; 14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_start = p = (UINT8 *)(p_buf + 1) + p_buf->offset; 14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* execute parameter building function to build message */ 14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*avdt_msg_bld_cmd[sig_id - 1])(&p, p_params); 14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set len */ 14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->len = (UINT16) (p - p_start); 15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* now store scb hdls, if any, in buf */ 15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb != NULL) 15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = (UINT8 *)(p_buf + 1); 15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* for start and suspend, p_scb points to array of handles */ 15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((sig_id == AVDT_SIG_START) || (sig_id == AVDT_SIG_SUSPEND)) 15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p, (UINT8 *) p_scb, p_buf->len); 15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* for all others, p_scb points to scb as usual */ 15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p = avdt_scb_to_hdl((tAVDT_SCB *) p_scb); 15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* stash sig, label, and message type in buf */ 15195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->event = sig_id; 15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_BLD_LAYERSPEC(p_buf->layer_specific, AVDT_MSG_TYPE_CMD, p_ccb->label); 15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* increment label */ 15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->label = (p_ccb->label + 1) % 16; 15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* queue message and trigger ccb to send it */ 15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_enqueue(&p_ccb->cmd_q, p_buf); 15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_event(p_ccb, AVDT_CCB_SENDMSG_EVT, NULL); 15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_send_rsp 15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a response message. The 15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** sig_id parameter indicates the message type, p_params 15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** points to the message parameters, if any. It gets a buffer 15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the AVDTP command pool, executes the message building 15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** function for this message type. It then queues the message 15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** in the response queue for this CCB. 15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Nothing. 15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_msg_send_rsp(tAVDT_CCB *p_ccb, UINT8 sig_id, tAVDT_MSG *p_params) 15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_buf; 15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_start; 15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get a buffer */ 15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf = (BT_HDR *) GKI_getpoolbuf(AVDT_CMD_POOL_ID); 15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_buf == NULL) return; 15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set up gki buf pointer and offset */ 15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->offset = AVDT_MSG_OFFSET; 15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_start = p = (UINT8 *)(p_buf + 1) + p_buf->offset; 15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* execute parameter building function to build message */ 15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*avdt_msg_bld_rsp[sig_id - 1])(&p, p_params); 15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set length */ 15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->len = (UINT16) (p - p_start); 15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* stash sig, label, and message type in buf */ 15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->event = sig_id; 15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_BLD_LAYERSPEC(p_buf->layer_specific, AVDT_MSG_TYPE_RSP, p_params->hdr.label); 15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* queue message and trigger ccb to send it */ 15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_enqueue(&p_ccb->rsp_q, p_buf); 15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_event(p_ccb, AVDT_CCB_SENDMSG_EVT, NULL); 15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_send_rej 15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a reject message. The 15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** sig_id parameter indicates the message type. It gets 15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** a buffer from the AVDTP command pool and builds the 15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** message based on the message type and the error code. 15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** It then queues the message in the response queue for 15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** this CCB. 15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Nothing. 15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_msg_send_rej(tAVDT_CCB *p_ccb, UINT8 sig_id, tAVDT_MSG *p_params) 15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_buf; 15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_start; 15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get a buffer */ 15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf = (BT_HDR *) GKI_getpoolbuf(AVDT_CMD_POOL_ID); 15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_buf == NULL) return; 16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set up gki buf pointer and offset */ 16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->offset = AVDT_MSG_OFFSET; 16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_start = p = (UINT8 *)(p_buf + 1) + p_buf->offset; 16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if sig id included, build into message */ 16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (sig_id != AVDT_SIG_NONE) 16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if this sig has a parameter, add the parameter */ 16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((sig_id == AVDT_SIG_SETCONFIG) || 16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (sig_id == AVDT_SIG_RECONFIG)) 16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_PARAM(p, p_params->hdr.err_param); 16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((sig_id == AVDT_SIG_START) || 16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (sig_id == AVDT_SIG_SUSPEND)) 16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_SEID(p, p_params->hdr.err_param); 16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* add the error code */ 16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_BLD_ERR(p, p_params->hdr.err_code); 16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1623158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_DEBUG("avdt_msg_send_rej"); 16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* calculate length */ 16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->len = (UINT16) (p - p_start); 16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* stash sig, label, and message type in buf */ 16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->event = sig_id; 16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_BLD_LAYERSPEC(p_buf->layer_specific, AVDT_MSG_TYPE_REJ, p_params->hdr.label); 16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* queue message and trigger ccb to send it */ 16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_enqueue(&p_ccb->rsp_q, p_buf); 16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_event(p_ccb, AVDT_CCB_SENDMSG_EVT, NULL); 16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_send_grej 16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to send a general reject message. The 16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** sig_id parameter indicates the message type. It gets 16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** a buffer from the AVDTP command pool and builds the 16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** message based on the message type and the error code. 16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** It then queues the message in the response queue for 16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** this CCB. 16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Nothing. 16505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_msg_send_grej(tAVDT_CCB *p_ccb, UINT8 sig_id, tAVDT_MSG *p_params) 16535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_buf; 16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_start; 16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get a buffer */ 16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf = (BT_HDR *) GKI_getpoolbuf(AVDT_CMD_POOL_ID); 16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_buf == NULL) return; 16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set up gki buf pointer and offset */ 16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->offset = AVDT_MSG_OFFSET; 16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_start = p = (UINT8 *)(p_buf + 1) + p_buf->offset; 16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* calculate length */ 16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->len = (UINT16) (p - p_start); 16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* stash sig, label, and message type in buf */ 16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->event = sig_id; 16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_BLD_LAYERSPEC(p_buf->layer_specific, AVDT_MSG_TYPE_GRJ, p_params->hdr.label); 16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //p_buf->event = 0; 16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //AVDT_BLD_LAYERSPEC(p_buf->layer_specific, 0, p_params->hdr.label); 1674158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_DEBUG("avdt_msg_send_grej"); 16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* queue message and trigger ccb to send it */ 16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_enqueue(&p_ccb->rsp_q, p_buf); 16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_event(p_ccb, AVDT_CCB_SENDMSG_EVT, NULL); 16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function avdt_msg_ind 16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called by the adaption layer when an 16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** incoming message is received on the signaling channel. 16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** It parses the message and sends an event to the appropriate 16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** SCB or CCB for the message. 16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Nothing. 16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_msg_ind(tAVDT_CCB *p_ccb, BT_HDR *p_buf) 16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_SCB *p_scb; 16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN ok = TRUE; 16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN handle_rsp = FALSE; 17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN gen_rej = FALSE; 17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 label; 17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 pkt_type; 17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 msg_type; 17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 sig = 0; 17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_MSG msg; 17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tAVDT_CFG cfg; 17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 err; 17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 evt = 0; 17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 scb_hdl; 17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* reassemble message; if no message available (we received a fragment) return */ 17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_buf = avdt_msg_asmbl(p_ccb, p_buf)) == NULL) 17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = (UINT8 *)(p_buf + 1) + p_buf->offset; 17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse the message header */ 17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_HDR(p, label, pkt_type, msg_type); 17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1722158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati /* AVDT_TRACE_DEBUG("msg_type=%d", msg_type); */ 17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set up label and ccb_idx in message hdr */ 17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.hdr.label = label; 17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.hdr.ccb_idx = avdt_ccb_to_idx(p_ccb); 17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify msg type */ 17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (msg_type == AVDT_MSG_TYPE_GRJ) 17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1730158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_WARNING("Dropping msg msg_type=%d", msg_type); 17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ok = FALSE; 17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* check for general reject */ 17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((msg_type == AVDT_MSG_TYPE_REJ) && (p_buf->len == AVDT_LEN_GEN_REJ)) 17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gen_rej = TRUE; 17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ccb->p_curr_cmd != NULL) 17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.hdr.sig_id = sig = (UINT8) p_ccb->p_curr_cmd->event; 17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt = avdt_msg_rej_2_evt[sig - 1]; 17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.hdr.err_code = AVDT_ERR_NSC; 17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.hdr.err_param = 0; 17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* not a general reject */ 17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get and verify signal */ 17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AVDT_MSG_PRS_SIG(p, sig); 17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.hdr.sig_id = sig; 17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((sig == 0) || (sig > AVDT_SIG_MAX)) 17515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1752158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_WARNING("Dropping msg sig=%d msg_type:%d", sig, msg_type); 17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ok = FALSE; 17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send a general reject */ 17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (msg_type == AVDT_MSG_TYPE_CMD) 17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_grej(p_ccb, sig, &msg); 17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (ok && !gen_rej) 17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* skip over header (msg length already verified during reassembly) */ 17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->len -= AVDT_LEN_TYPE_SINGLE; 17675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set up to parse message */ 17695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((msg_type == AVDT_MSG_TYPE_RSP) && (sig == AVDT_SIG_DISCOVER)) 17705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse discover rsp message to struct supplied by app */ 17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.discover_rsp.p_sep_info = (tAVDT_SEP_INFO *) p_ccb->p_proc_data; 17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.discover_rsp.num_seps = p_ccb->proc_param; 17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((msg_type == AVDT_MSG_TYPE_RSP) && 17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((sig == AVDT_SIG_GETCAP) || (sig == AVDT_SIG_GET_ALLCAP))) 17775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse discover rsp message to struct supplied by app */ 17795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.svccap.p_cfg = (tAVDT_CFG *) p_ccb->p_proc_data; 17805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((msg_type == AVDT_MSG_TYPE_RSP) && (sig == AVDT_SIG_GETCONFIG)) 17825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse get config rsp message to struct allocated locally */ 17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.svccap.p_cfg = &cfg; 17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((msg_type == AVDT_MSG_TYPE_CMD) && (sig == AVDT_SIG_SETCONFIG)) 17875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse config cmd message to struct allocated locally */ 17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.config_cmd.p_cfg = &cfg; 17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((msg_type == AVDT_MSG_TYPE_CMD) && (sig == AVDT_SIG_RECONFIG)) 17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse reconfig cmd message to struct allocated locally */ 17945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.reconfig_cmd.p_cfg = &cfg; 17955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse message; while we're at it map message sig to event */ 17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (msg_type == AVDT_MSG_TYPE_CMD) 17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.hdr.err_code = err = (*avdt_msg_prs_cmd[sig - 1])(&msg, p, p_buf->len); 18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt = avdt_msg_cmd_2_evt[sig - 1]; 18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (msg_type == AVDT_MSG_TYPE_RSP) 18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project msg.hdr.err_code = err = (*avdt_msg_prs_rsp[sig - 1])(&msg, p, p_buf->len); 18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt = avdt_msg_rsp_2_evt[sig - 1]; 18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* msg_type == AVDT_MSG_TYPE_REJ */ 18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project err = avdt_msg_prs_rej(&msg, p, sig); 18115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt = avdt_msg_rej_2_evt[sig - 1]; 18125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if parsing failed */ 18155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (err != 0) 18165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1817158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_WARNING("Parsing failed sig=%d err=0x%x", sig, err); 18185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if its a rsp or rej, drop it; if its a cmd, send a rej; 18205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ** note special case for abort; never send abort reject 18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 18225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ok = FALSE; 18235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((msg_type == AVDT_MSG_TYPE_CMD) && (sig != AVDT_SIG_ABORT)) 18245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_msg_send_rej(p_ccb, sig, &msg); 18265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if its a rsp or rej, check sent cmd to see if we're waiting for 18315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ** the rsp or rej. If we didn't send a cmd for it, drop it. If 18325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ** it does match a cmd, stop timer for the cmd. 18335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 18345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (ok) 18355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((msg_type == AVDT_MSG_TYPE_RSP) || (msg_type == AVDT_MSG_TYPE_REJ)) 18375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_ccb->p_curr_cmd != NULL) && 18395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_ccb->p_curr_cmd->event == sig) && 18405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (AVDT_LAYERSPEC_LABEL(p_ccb->p_curr_cmd->layer_specific) == label)) 18415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* stop timer */ 18435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_stop_timer(&p_ccb->timer_entry); 18445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear retransmission count */ 18465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ccb->ret_count = 0; 18475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* later in this function handle ccb event */ 18495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handle_rsp = TRUE; 18505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 18525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ok = FALSE; 1854158084e065230a10ffeba6b24ab2fd22b422baedSharvil Nanavati AVDT_TRACE_WARNING("Cmd not found for rsp sig=%d label=%d", sig, label); 18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (ok) 18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if it's a ccb event send to ccb */ 18625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (evt & AVDT_CCB_MKR) 18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_event(p_ccb, (UINT8)(evt & ~AVDT_CCB_MKR), (tAVDT_CCB_EVT *) &msg); 18655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if it's a scb event */ 18675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 18685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Scb events always have a single seid. For cmd, get seid from 18705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ** message. For rej and rsp, get seid from p_curr_cmd. 18715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 18725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (msg_type == AVDT_MSG_TYPE_CMD) 18735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scb_hdl = msg.single.seid; 18755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 18775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scb_hdl = *((UINT8 *)(p_ccb->p_curr_cmd + 1)); 18795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Map seid to the scb and send it the event. For cmd, seid has 18825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ** already been verified by parsing function. 18835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 18845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (evt && (p_scb = avdt_scb_by_hdl(scb_hdl)) != NULL) 18855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_scb_event(p_scb, evt, (tAVDT_SCB_EVT *) &msg); 18875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* free message buffer */ 18925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_buf); 18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if its a rsp or rej, send event to ccb to free associated 18955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ** cmd msg buffer and handle cmd queue 18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (handle_rsp) 18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_ccb_event(p_ccb, AVDT_CCB_RCVRSP_EVT, NULL); 19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1902