15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 1998-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#include <string.h> 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(HL_INCLUDED) && (HL_INCLUDED == TRUE) 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "sdp_api.h" 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hl_int.h" 265cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "utl.h" 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_hl_fill_sup_feature_list 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fill the supported features from teh SDP record 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns TRUE if found, FALSE if not 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** If found, the passed protocol list element is filled in. 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN bta_hl_fill_sup_feature_list( const tSDP_DISC_ATTR *p_attr, 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_HL_SUP_FEATURE_LIST_ELEM *p_list) 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSDP_DISC_ATTR *p_sattr; 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 seq_len, item_cnt; 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 list_cnt=0; 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN status=TRUE; 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (p_attr = p_attr->attr_value.v.p_sub_attr; p_attr; p_attr = p_attr->p_next_attr) 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* mdep sequence */ 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) != DATA_ELE_SEQ_DESC_TYPE) 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(FALSE); 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project seq_len =SDP_DISC_ATTR_LEN(p_attr->attr_len_type); 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project item_cnt=0; 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (p_sattr = p_attr->attr_value.v.p_sub_attr; p_sattr && (item_cnt < 4) ; p_sattr = p_sattr->p_next_attr) 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* for each mdep list */ 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_list->list_elem[list_cnt].p_mdep_desp = NULL; 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (item_cnt) 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case 0: 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_list->list_elem[list_cnt].mdep_id = p_sattr->attr_value.v.u8; 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case 1: 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_list->list_elem[list_cnt].data_type = p_sattr->attr_value.v.u16; 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case 2: 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_list->list_elem[list_cnt].mdep_role = (tBTA_HL_MDEP_ROLE) p_sattr->attr_value.v.u8; 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case 3: 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_list->list_elem[list_cnt].p_mdep_desp = (char *) p_sattr->attr_value.v.array; 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project item_cnt++; 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project list_cnt++; 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_list->num_elems = list_cnt; 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(status); 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_hl_compose_supported_feature_list 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to compose a data sequence from 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the supported feature element list struct pointer 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns the length of the data sequence 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint bta_hl_compose_supported_feature_list( UINT8 *p, UINT16 num_elem, 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const tBTA_HL_SUP_FEATURE_ELEM *p_elem_list) 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 xx, str_len, seq_len; 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_head = p; 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (xx = 0; xx < num_elem; xx++, p_elem_list++) 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_BE_STREAM (p, (DATA_ELE_SEQ_DESC_TYPE << 3) | SIZE_IN_NEXT_BYTE); 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project seq_len=7; 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str_len=0; 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_elem_list->p_mdep_desp) 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str_len = strlen(p_elem_list->p_mdep_desp)+1; 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project seq_len += str_len+2; /* todo add a # symbol for 2 */ 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p++ = (UINT8) seq_len; 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_BE_STREAM (p, (UINT_DESC_TYPE << 3) | SIZE_ONE_BYTE); 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_BE_STREAM (p, p_elem_list->mdep_id); 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_BE_STREAM (p, (UINT_DESC_TYPE << 3) | SIZE_TWO_BYTES); 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_BE_STREAM (p, p_elem_list->data_type); 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_BE_STREAM (p, (UINT_DESC_TYPE << 3) | SIZE_ONE_BYTE); 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_BE_STREAM (p, p_elem_list->mdep_role); 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (str_len) 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_BE_STREAM (p, (TEXT_STR_DESC_TYPE << 3) | SIZE_IN_NEXT_BYTE); 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_BE_STREAM (p, str_len); 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_BE_STREAM(p, p_elem_list->p_mdep_desp, str_len); 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(p - p_head); 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_hl_add_sup_feature_list 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to add a protocol descriptor list to 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** a record. This would be through the SDP database maintenance API. 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** If the protocol list already exists in the record, it is replaced 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** with the new list. 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns TRUE if added OK, else FALSE 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN bta_hl_add_sup_feature_list (UINT32 handle, UINT16 num_elem, 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const tBTA_HL_SUP_FEATURE_ELEM *p_elem_list) 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_buf; 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int offset; 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN result = FALSE; 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_buf = (UINT8 *)GKI_getbuf(BTA_HL_SUP_FEATURE_SDP_BUF_SIZE)) != NULL) 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project offset = bta_hl_compose_supported_feature_list(p_buf, num_elem, p_elem_list); 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result = SDP_AddAttribute (handle, ATTR_ID_HDP_SUP_FEAT_LIST, 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DATA_ELE_SEQ_DESC_TYPE, (UINT32) offset, p_buf); 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_buf); 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return result; 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 160f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 161f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/***************************************************************************** 162f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** 163f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function: bta_hl_sdp_update 164f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** 165f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Purpose: Register an HDP application with SDP 166f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** 1675cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen** Parameters: 168f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** 169f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns: void 170f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** 171f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*****************************************************************************/ 172f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheratBTA_HL_STATUS bta_hl_sdp_update (UINT8 app_id) 173f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera{ 174f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera UINT16 svc_class_id_list[BTA_HL_NUM_SVC_ELEMS]; 175f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera tSDP_PROTOCOL_ELEM proto_elem_list[BTA_HL_NUM_PROTO_ELEMS]; 176f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera tSDP_PROTO_LIST_ELEM add_proto_list; 177f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera tBTA_HL_SUP_FEATURE_LIST_ELEM sup_feature_list; 178f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera UINT16 browse_list[] = {UUID_SERVCLASS_PUBLIC_BROWSE_GROUP}; 179f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera UINT8 i,j, cnt,mdep_id, mdep_role; 180f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera UINT8 data_exchange_spec = BTA_HL_SDP_IEEE_11073_20601; 181f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera UINT8 mcap_sup_proc = BTA_HL_MCAP_SUP_PROC_MASK; 182f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera UINT16 profile_uuid = UUID_SERVCLASS_HDP_PROFILE; 183f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera UINT16 version = BTA_HL_VERSION_01_00; 184f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera UINT8 num_services=1; 185f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera tBTA_HL_APP_CB *p_cb = BTA_HL_GET_APP_CB_PTR(0); 186f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera BOOLEAN result = TRUE; 187f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera tBTA_HL_STATUS status = BTA_HL_STATUS_OK; 1885cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(app_id); 189f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 190f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if ((p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SOURCE) && 191f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (!p_cb->sup_feature.advertize_source_sdp)) 192f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 193f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera return BTA_HL_STATUS_OK; 194f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 195f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 196f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera num_services=1; 197f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera svc_class_id_list[0]= UUID_SERVCLASS_HDP_SOURCE; 198f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SINK) 199f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 200f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera svc_class_id_list[0]= UUID_SERVCLASS_HDP_SINK; 201f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 202f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera else 203f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 204f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (p_cb->sup_feature.app_role_mask != BTA_HL_MDEP_ROLE_MASK_SOURCE) 205f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 206f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera /* dual role */ 207f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera num_services=2; 208f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera svc_class_id_list[1]= UUID_SERVCLASS_HDP_SINK; 209f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 210f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 211f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result &= SDP_AddServiceClassIdList(p_cb->sdp_handle, num_services, svc_class_id_list); 212f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 213f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (result) 214f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 215f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera /* add the protocol element sequence */ 216f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera proto_elem_list[0].protocol_uuid = UUID_PROTOCOL_L2CAP; 217f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera proto_elem_list[0].num_params = 1; 218f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera proto_elem_list[0].params[0] = p_cb->ctrl_psm; 219f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera proto_elem_list[1].protocol_uuid = UUID_PROTOCOL_MCAP_CTRL; 220f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera proto_elem_list[1].num_params = 1; 221f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera proto_elem_list[1].params[0] = version; 222f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result &= SDP_AddProtocolList(p_cb->sdp_handle, BTA_HL_NUM_PROTO_ELEMS, proto_elem_list); 223f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 224f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result &= SDP_AddProfileDescriptorList(p_cb->sdp_handle, profile_uuid, version); 225f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 226f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 227f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (result) 228f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 229f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera add_proto_list.num_elems = BTA_HL_NUM_ADD_PROTO_ELEMS; 230f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera add_proto_list.list_elem[0].protocol_uuid = UUID_PROTOCOL_L2CAP; 231f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera add_proto_list.list_elem[0].num_params = 1; 232f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera add_proto_list.list_elem[0].params[0] = p_cb->data_psm; 233f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera add_proto_list.list_elem[1].protocol_uuid = UUID_PROTOCOL_MCAP_DATA; 234f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera add_proto_list.list_elem[1].num_params = 0; 235f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result &= SDP_AddAdditionProtoLists(p_cb->sdp_handle, BTA_HL_NUM_ADD_PROTO_LISTS, 236f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (tSDP_PROTO_LIST_ELEM *)&add_proto_list); 237f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 238f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 239f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (result) 240f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 241f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (p_cb->srv_name[0] ) 242f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 243f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result &= SDP_AddAttribute(p_cb->sdp_handle, 244f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT16)ATTR_ID_SERVICE_NAME, 245f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT8)TEXT_STR_DESC_TYPE, 246f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT32)(strlen(p_cb->srv_name) + 1), 247f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT8 *)p_cb->srv_name); 248f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } /* end of setting optional service name */ 249f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 250f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 251f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (result) 252f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 253f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (p_cb->srv_desp[0] ) 254f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 255f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result &= SDP_AddAttribute(p_cb->sdp_handle, 256f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT16)ATTR_ID_SERVICE_DESCRIPTION, 257f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT8)TEXT_STR_DESC_TYPE, 258f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT32)(strlen(p_cb->srv_desp) + 1), 259f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT8 *)p_cb->srv_desp); 260f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 261f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } /* end of setting optional service description */ 262f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 263f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 264f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 265f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (result) 266f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 267f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (p_cb->provider_name[0] ) 268f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 269f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result &= SDP_AddAttribute(p_cb->sdp_handle, 270f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT16)ATTR_ID_PROVIDER_NAME, 271f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT8)TEXT_STR_DESC_TYPE, 272f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT32)(strlen(p_cb->provider_name) + 1), 273f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT8 *)p_cb->provider_name); 274f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } /* end of setting optional provider name */ 275f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 276f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 277f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera /* add supported feture list */ 278f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 279f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (result) 280f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 281f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera cnt=0; 282f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera for (i=1; i< BTA_HL_NUM_MDEPS; i++) 283f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 284f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (p_cb->sup_feature.mdep[i].mdep_id) 285f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 286f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera mdep_id = (UINT8)p_cb->sup_feature.mdep[i].mdep_id; 287f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera mdep_role = (UINT8)p_cb->sup_feature.mdep[i].mdep_cfg.mdep_role; 288f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 289e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("num_of_mdep_data_types %d ", p_cb->sup_feature.mdep[i].mdep_cfg.num_of_mdep_data_types); 290f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera for (j=0; j<p_cb->sup_feature.mdep[i].mdep_cfg.num_of_mdep_data_types; j++) 291f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 292f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera sup_feature_list.list_elem[cnt].mdep_id = mdep_id; 293f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera sup_feature_list.list_elem[cnt].mdep_role = mdep_role; 294f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera sup_feature_list.list_elem[cnt].data_type = p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].data_type; 295f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp[0] != '\0') 296f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 297f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera sup_feature_list.list_elem[cnt].p_mdep_desp = p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp; 298f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 299f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera else 300f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 301f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera sup_feature_list.list_elem[cnt].p_mdep_desp = NULL; 302f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 303f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 304f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera cnt++; 305f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (cnt==BTA_HL_NUM_SUP_FEATURE_ELEMS) 306f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 307f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result = FALSE; 308f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera break; 309f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 310f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 311f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 312f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 313f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera sup_feature_list.num_elems = cnt; 314f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result &= bta_hl_add_sup_feature_list (p_cb->sdp_handle, 315f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera sup_feature_list.num_elems, 316f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera sup_feature_list.list_elem); 317f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 318f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (result) 319f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 320f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result &= SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_DATA_EXCH_SPEC, UINT_DESC_TYPE, 321f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT32)1, (UINT8*)&data_exchange_spec); 322f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 323f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 324f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (result) 325f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 326f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 327f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result &= SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_MCAP_SUP_PROC, UINT_DESC_TYPE, 328f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera (UINT32)1, (UINT8*)&mcap_sup_proc); 329f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 330f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 331f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (result) 332f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 333f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera result &= SDP_AddUuidSequence(p_cb->sdp_handle, ATTR_ID_BROWSE_GROUP_LIST, 1, browse_list); 334f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 335f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 336f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (result) 337f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 338f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera for(i=0; i < num_services; i++) 339f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 340f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera bta_sys_add_uuid(svc_class_id_list[i]); 341e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("dbg bta_sys_add_uuid i=%d uuid=0x%x", i, svc_class_id_list[i]); //todo 342f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 343f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 344f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera else 345f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 346f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera if (p_cb->sdp_handle) 347f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera { 348f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera SDP_DeleteRecord(p_cb->sdp_handle); 349f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera p_cb->sdp_handle = 0; 350f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 351f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera status = BTA_HL_STATUS_SDP_FAIL; 352f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera } 353f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera#if BTA_HL_DEBUG == TRUE 354e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_hl_sdp_update status=%s", bta_hl_status_code(status)); 355f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera#endif 356f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera return status; 357f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera} 358f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 359f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function: bta_hl_sdp_register 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Purpose: Register an HDP application with SDP 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: p_cb - Pointer to MA instance control block 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_service_name - MA server name 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** inst_id - MAS instance ID 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** msg_type - Supported message type(s) 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 ProjecttBTA_HL_STATUS bta_hl_sdp_register (UINT8 app_idx) 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 svc_class_id_list[BTA_HL_NUM_SVC_ELEMS]; 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSDP_PROTOCOL_ELEM proto_elem_list[BTA_HL_NUM_PROTO_ELEMS]; 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSDP_PROTO_LIST_ELEM add_proto_list; 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_HL_SUP_FEATURE_LIST_ELEM sup_feature_list; 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 browse_list[] = {UUID_SERVCLASS_PUBLIC_BROWSE_GROUP}; 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i,j, cnt,mdep_id, mdep_role; 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 data_exchange_spec = BTA_HL_SDP_IEEE_11073_20601; 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 mcap_sup_proc = BTA_HL_MCAP_SUP_PROC_MASK; 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 profile_uuid = UUID_SERVCLASS_HDP_PROFILE; 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 version = BTA_HL_VERSION_01_00; 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 num_services=1; 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_HL_APP_CB *p_cb = BTA_HL_GET_APP_CB_PTR(app_idx); 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN result = TRUE; 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_HL_STATUS status = BTA_HL_STATUS_OK; 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HL_DEBUG == TRUE 393e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_hl_sdp_register app_idx=%d",app_idx); 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SOURCE) && 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (!p_cb->sup_feature.advertize_source_sdp)) 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTA_HL_STATUS_OK; 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_cb->sdp_handle = SDP_CreateRecord()) == 0) 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTA_HL_STATUS_SDP_NO_RESOURCE; 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_services=1; 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project svc_class_id_list[0]= UUID_SERVCLASS_HDP_SOURCE; 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SINK) 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project svc_class_id_list[0]= UUID_SERVCLASS_HDP_SINK; 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->sup_feature.app_role_mask != BTA_HL_MDEP_ROLE_MASK_SOURCE) 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* dual role */ 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_services=2; 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project svc_class_id_list[1]= UUID_SERVCLASS_HDP_SINK; 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result &= SDP_AddServiceClassIdList(p_cb->sdp_handle, num_services, svc_class_id_list); 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result) 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* add the protocol element sequence */ 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project proto_elem_list[0].protocol_uuid = UUID_PROTOCOL_L2CAP; 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project proto_elem_list[0].num_params = 1; 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project proto_elem_list[0].params[0] = p_cb->ctrl_psm; 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project proto_elem_list[1].protocol_uuid = UUID_PROTOCOL_MCAP_CTRL; 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project proto_elem_list[1].num_params = 1; 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project proto_elem_list[1].params[0] = version; 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result &= SDP_AddProtocolList(p_cb->sdp_handle, BTA_HL_NUM_PROTO_ELEMS, proto_elem_list); 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result &= SDP_AddProfileDescriptorList(p_cb->sdp_handle, profile_uuid, version); 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result) 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project add_proto_list.num_elems = BTA_HL_NUM_ADD_PROTO_ELEMS; 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project add_proto_list.list_elem[0].protocol_uuid = UUID_PROTOCOL_L2CAP; 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project add_proto_list.list_elem[0].num_params = 1; 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project add_proto_list.list_elem[0].params[0] = p_cb->data_psm; 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project add_proto_list.list_elem[1].protocol_uuid = UUID_PROTOCOL_MCAP_DATA; 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project add_proto_list.list_elem[1].num_params = 0; 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result &= SDP_AddAdditionProtoLists(p_cb->sdp_handle, BTA_HL_NUM_ADD_PROTO_LISTS, 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tSDP_PROTO_LIST_ELEM *)&add_proto_list); 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result) 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->srv_name[0] ) 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result &= SDP_AddAttribute(p_cb->sdp_handle, 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16)ATTR_ID_SERVICE_NAME, 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT8)TEXT_STR_DESC_TYPE, 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT32)(strlen(p_cb->srv_name) + 1), 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT8 *)p_cb->srv_name); 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } /* end of setting optional service name */ 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result) 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->srv_desp[0] ) 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result &= SDP_AddAttribute(p_cb->sdp_handle, 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16)ATTR_ID_SERVICE_DESCRIPTION, 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT8)TEXT_STR_DESC_TYPE, 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT32)(strlen(p_cb->srv_desp) + 1), 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT8 *)p_cb->srv_desp); 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } /* end of setting optional service description */ 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result) 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->provider_name[0] ) 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result &= SDP_AddAttribute(p_cb->sdp_handle, 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16)ATTR_ID_PROVIDER_NAME, 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT8)TEXT_STR_DESC_TYPE, 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT32)(strlen(p_cb->provider_name) + 1), 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT8 *)p_cb->provider_name); 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } /* end of setting optional provider name */ 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* add supported feture list */ 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result) 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cnt=0; 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i=1; i<= p_cb->sup_feature.num_of_mdeps; i++) 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mdep_id = (UINT8)p_cb->sup_feature.mdep[i].mdep_id; 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mdep_role = (UINT8)p_cb->sup_feature.mdep[i].mdep_cfg.mdep_role; 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (j=0; j<p_cb->sup_feature.mdep[i].mdep_cfg.num_of_mdep_data_types; j++) 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sup_feature_list.list_elem[cnt].mdep_id = mdep_id; 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sup_feature_list.list_elem[cnt].mdep_role = mdep_role; 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sup_feature_list.list_elem[cnt].data_type = p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].data_type; 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp[0] != '\0') 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sup_feature_list.list_elem[cnt].p_mdep_desp = p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp; 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sup_feature_list.list_elem[cnt].p_mdep_desp = NULL; 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cnt++; 513ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (cnt==BTA_HL_NUM_SUP_FEATURE_ELEMS) 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result = FALSE; 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sup_feature_list.num_elems = cnt; 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result &= bta_hl_add_sup_feature_list (p_cb->sdp_handle, 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sup_feature_list.num_elems, 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sup_feature_list.list_elem); 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result) 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result &= SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_DATA_EXCH_SPEC, UINT_DESC_TYPE, 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT32)1, (UINT8*)&data_exchange_spec); 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result) 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result &= SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_MCAP_SUP_PROC, UINT_DESC_TYPE, 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT32)1, (UINT8*)&mcap_sup_proc); 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result) 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result &= SDP_AddUuidSequence(p_cb->sdp_handle, ATTR_ID_BROWSE_GROUP_LIST, 1, browse_list); 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result) 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i < num_services; i++) 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_add_uuid(svc_class_id_list[i]); 548e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("dbg bta_sys_add_uuid i=%d uuid=0x%x", i, svc_class_id_list[i]); //todo 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->sdp_handle) 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SDP_DeleteRecord(p_cb->sdp_handle); 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->sdp_handle = 0; 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_HL_STATUS_SDP_FAIL; 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HL_DEBUG == TRUE 561e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_hl_sdp_register status=%s", bta_hl_status_code(status)); 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_hl_find_sink_or_src_srv_class_in_db 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function queries an SDP database for either a HDP Sink or 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Source service class ID. 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** If the p_start_rec pointer is NULL, it looks from the beginning 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** of the database, else it continues from the next record after 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_start_rec. 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Pointer to record containing service class, or NULL 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttSDP_DISC_REC *bta_hl_find_sink_or_src_srv_class_in_db (const tSDP_DISCOVERY_DB *p_db, 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const tSDP_DISC_REC *p_start_rec) 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SDP_CLIENT_ENABLED == TRUE 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSDP_DISC_REC *p_rec; 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSDP_DISC_ATTR *p_attr, *p_sattr; 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Must have a valid database */ 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_db == NULL) 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(NULL); 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_start_rec) 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_rec = p_db->p_first_rec; 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_rec = p_start_rec->p_next_rec; 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (p_rec) 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_attr = p_rec->p_first_attr; 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (p_attr) 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_attr->attr_id == ATTR_ID_SERVICE_CLASS_ID_LIST) 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project && (SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) == DATA_ELE_SEQ_DESC_TYPE)) 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (p_sattr = p_attr->attr_value.v.p_sub_attr; p_sattr; p_sattr = p_sattr->p_next_attr) 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((SDP_DISC_ATTR_TYPE(p_sattr->attr_len_type) == UUID_DESC_TYPE) 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project && (SDP_DISC_ATTR_LEN(p_sattr->attr_len_type) == 2) 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project && ( (p_sattr->attr_value.v.u16 == UUID_SERVCLASS_HDP_SINK) || 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_sattr->attr_value.v.u16 == UUID_SERVCLASS_HDP_SOURCE)) ) 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(p_rec); 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_attr = p_attr->p_next_attr; 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_rec = p_rec->p_next_rec; 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If here, no matching UUID found */ 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HL_DEBUG == TRUE 631e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_hl_find_sink_or_src_srv_class_in_db failed"); 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(NULL); 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* HL_INCLUDED */ 637