btif_gatt_multi_adv_util.c revision ffb3960bb05f9acb0717d213612403487e9ad433
1ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji/****************************************************************************** 2ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * 3ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * Copyright (C) 2014 Broadcom Corporation 4ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * 5ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * Licensed under the Apache License, Version 2.0 (the "License"); 6ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * you may not use this file except in compliance with the License. 7ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * You may obtain a copy of the License at: 8ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * 9ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * http://www.apache.org/licenses/LICENSE-2.0 10ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * 11ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * Unless required by applicable law or agreed to in writing, software 12ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * distributed under the License is distributed on an "AS IS" BASIS, 13ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * See the License for the specific language governing permissions and 15ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * limitations under the License. 16ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * 17ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji ******************************************************************************/ 18ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 19ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 20ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji/******************************************************************************* 21ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * 22ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * Filename: btif_gatt_multi_adv_util.c 23ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * 24ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * Description: Multi ADV helper implementation 25ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji * 26ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji *******************************************************************************/ 27ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 28ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include <stdio.h> 29ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include <stdlib.h> 30ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 31ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#define LOG_TAG "BtGatt.btif" 32ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#if (BLE_INCLUDED == TRUE) 33ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 34ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include "btif_gatt_multi_adv_util.h" 35ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include "btif_common.h" 36ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include <hardware/bt_gatt.h> 37ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include "bta_gatt_api.h" 38ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include "btif_gatt_util.h" 39ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 40ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji/******************************************************************************* 41ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji** Static variables 42ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji********************************************************************************/ 43ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojistatic int multi_adv_enable_count = 0; 44ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojistatic btgatt_multi_adv_common_data *p_multi_adv_com_data_cb = NULL; 45ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 46ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojibtgatt_multi_adv_common_data *btif_obtain_multi_adv_data_cb() 47ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 48ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(p_multi_adv_com_data_cb == NULL) 49ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_com_data_cb = GKI_getbuf(sizeof(btgatt_multi_adv_common_data)); 50ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return p_multi_adv_com_data_cb; 51ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 52ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 53ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_init_multi_adv_cb(void) 54ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 55ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int i; 56ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 57ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 58ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(NULL == p_multi_adv_data_cb) 59ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 60ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 61ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(multi_adv_enable_count == 0) 62ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 63ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(p_multi_adv_data_cb,0,sizeof(btgatt_multi_adv_common_data)); 64ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 65ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji for (i=0; i < BTM_BLE_MULTI_ADV_MAX; i++) 66ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 67ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][CLNT_IF_IDX] = INVALID_ADV_INST; 68ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][INST_ID_IDX] = INVALID_ADV_INST; 69ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 70ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 71ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji multi_adv_enable_count++; 72ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 73ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 74ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_destroy_multi_adv_cb() 75ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 76ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(multi_adv_enable_count > 0) 77ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji multi_adv_enable_count --; 78ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(multi_adv_enable_count == 0) 79ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 80ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_adv_com_data_cb); 81ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_com_data_cb = NULL; 82ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 83ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 84ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 85ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojiint btif_multi_adv_add_instid_map(int client_if, int inst_id, BOOLEAN gen_temp_instid) 86ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 87ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int i=0; 88ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 89ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 90ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 91ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(NULL == p_multi_adv_data_cb) 92ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 93ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 94ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji for(i=0; i < BTM_BLE_MULTI_ADV_MAX; i++) 95ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 96ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(client_if == p_multi_adv_data_cb->clntif_map[i][CLNT_IF_IDX]) 97ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 98ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(!gen_temp_instid) 99ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 100ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Write the final inst_id value obtained from stack layer 101ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][INST_ID_IDX] = inst_id; 102ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji BTIF_TRACE_DEBUG3("%s -Index: %d, Found client_if: %d", __FUNCTION__, 103ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji i, p_multi_adv_data_cb->clntif_map[i][CLNT_IF_IDX]); 104ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji break; 105ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 106ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji else 107ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 108ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji //Store the passed in inst_id value 109ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(inst_id != INVALID_ADV_INST) 110ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][INST_ID_IDX] = inst_id; 111ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji else 112ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][INST_ID_IDX] = (i + 1); 113ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji BTIF_TRACE_DEBUG3("%s - Index:%d,Found client_if: %d", __FUNCTION__, 114ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji i, p_multi_adv_data_cb->clntif_map[i][CLNT_IF_IDX]); 115ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji break; 116ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 117ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 118ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 119ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 120ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(i < BTM_BLE_MULTI_ADV_MAX) 121ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return i; 122ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 123ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // If client ID if is not found, then write both values 124ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji for(i=0; i < BTM_BLE_MULTI_ADV_MAX; i++) 125ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 126ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(INVALID_ADV_INST == p_multi_adv_data_cb->clntif_map[i][CLNT_IF_IDX]) 127ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 128ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][CLNT_IF_IDX] = client_if; 129ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(inst_id != INVALID_ADV_INST) 130ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][INST_ID_IDX] = inst_id; 131ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji else 132ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][INST_ID_IDX] = (i + 1); 133ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji BTIF_TRACE_DEBUG4("%s -Not found - Index:%d, client_if: %d, Inst ID: %d", 134ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji __FUNCTION__,i, 135ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][CLNT_IF_IDX], 136ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][INST_ID_IDX]); 137ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji break; 138ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 139ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 140ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 141ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(i < BTM_BLE_MULTI_ADV_MAX) 142ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return i; 143ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 144ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 145ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 146ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojiint btif_multi_adv_instid_for_clientif(int client_if) 147ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 148ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int i=0, ret = INVALID_ADV_INST; 149ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 150ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 151ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 152ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(NULL == p_multi_adv_data_cb) 153ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 154ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 155ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Retrieve the existing inst_id for the client_if value 156ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji for(i=0; i < BTM_BLE_MULTI_ADV_MAX; i++) 157ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 158ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(client_if == p_multi_adv_data_cb->clntif_map[i][CLNT_IF_IDX]) 159ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji ret = p_multi_adv_data_cb->clntif_map[i][INST_ID_IDX]; 160ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 161ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 162ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(ret != INVALID_ADV_INST) 163ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return ret; 164ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 165ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 166ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 167ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 168ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 169ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojiint btif_gattc_obtain_idx_for_datacb(int value, int arrindex) 170ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 171ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int i=0; 172ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 173ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 174ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 175ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(NULL == p_multi_adv_data_cb) 176ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 177ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 178ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Retrieve the array index for the inst_id value 179ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji for(i=0; i < BTM_BLE_MULTI_ADV_MAX; i++) 180ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 181ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(value == p_multi_adv_data_cb->clntif_map[i][arrindex]) 182ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji break; 183ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 184ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 185ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(i < BTM_BLE_MULTI_ADV_MAX) 186ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 187ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji BTIF_TRACE_DEBUG2("%s, %d",__FUNCTION__,i+1); 188ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return (i + 1); 189ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 190ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 191ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji BTIF_TRACE_DEBUG1("%s Invalid instance",__FUNCTION__); 192ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 193ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 194ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 195ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 196ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_adv_data_packager(int client_if, bool set_scan_rsp, 197ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji bool include_name, bool include_txpower, int min_interval, int max_interval, 198ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int appearance, uint16_t manufacturer_len, char* manufacturer_data, 199ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji uint16_t service_data_len, char* service_data, uint16_t service_uuid_len, 200ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji char* service_uuid, btif_adv_data_t *p_multi_adv_inst) 201ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 202ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(p_multi_adv_inst, 0 , sizeof(btif_adv_data_t)); 203ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 204ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->client_if = (uint8_t) client_if; 205ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->set_scan_rsp = set_scan_rsp; 206ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->include_name = include_name; 207ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->include_txpower = include_txpower; 208ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->min_interval = min_interval; 209ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->max_interval = max_interval; 210ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->appearance = appearance; 211ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->manufacturer_len = manufacturer_len; 212ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 213ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(manufacturer_len > 0) 214ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 215ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->p_manufacturer_data = GKI_getbuf(manufacturer_len); 216ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_inst->p_manufacturer_data, manufacturer_data, manufacturer_len); 217ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 218ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 219ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->service_data_len = service_data_len; 220ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(service_data_len > 0) 221ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 222ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->p_service_data = GKI_getbuf(service_data_len); 223ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_inst->p_service_data, service_data, service_data_len); 224ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 225ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 226ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->service_uuid_len = service_uuid_len; 227ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(service_uuid_len > 0) 228ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 229ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->p_service_uuid = GKI_getbuf(service_uuid_len); 230ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_inst->p_service_uuid, service_uuid, service_uuid_len); 231ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 232ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 233ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 234ffb3960bb05f9acb0717d213612403487e9ad433Satya CallojiBOOLEAN btif_gattc_copy_datacb(int cbindex, btif_adv_data_t *p_adv_data, BOOLEAN bInstData) 235ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 236ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int i=0; 237ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 238ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(NULL == p_multi_adv_data_cb || cbindex < 0) 239ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return false; 240ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 241ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji BTIF_TRACE_DEBUG1("%s", __FUNCTION__); 242ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(&p_multi_adv_data_cb->inst_cb[cbindex],0, sizeof(btgatt_multi_adv_inst_cb)); 243ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(&p_multi_adv_data_cb->inst_cb[cbindex].data, 0, sizeof(tBTA_BLE_ADV_DATA)); 244ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 245ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (!p_adv_data->set_scan_rsp) 246ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 247ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].is_scan_rsp = p_adv_data->set_scan_rsp ? 1 : 0; 248ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask = BTM_BLE_AD_BIT_FLAGS; 249ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.flag = ADV_FLAGS; 250ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 251ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 252ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->include_name) 253ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_DEV_NAME; 254ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 255ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->include_txpower) 256ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_TX_PWR; 257ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 258ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (false == bInstData && p_adv_data->min_interval > 0 && p_adv_data->max_interval > 0 && 259ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->max_interval > p_adv_data->min_interval) 260ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 261ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_INT_RANGE; 262ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.low = 263ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->min_interval; 264ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.hi = 265ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->max_interval; 266ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 267ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji else 268ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(true == bInstData) 269ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 270ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_min > 0 && 271ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_max > 0 && 272ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_max > 273ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_min) 274ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 275ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.low = 276ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_min; 277ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.hi = 278ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_max; 279ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 280ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 281ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->include_txpower) 282ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 283ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.tx_power = 284ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.tx_power; 285ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 286ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 287ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 288ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->appearance != 0) 289ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 290ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_APPEARANCE; 291ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.appearance = p_adv_data->appearance; 292ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 293ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 294ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->manufacturer_len > 0 && p_adv_data->p_manufacturer_data != NULL) 295ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 296ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu = 297ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(sizeof(tBTA_BLE_MANU)); 298ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu != NULL) 299ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 300ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val = 301ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(p_adv_data->manufacturer_len); 302ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val != NULL) 303ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 304ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_MANU; 305ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->len = 306ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->manufacturer_len; 307ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val, 308ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->p_manufacturer_data, p_adv_data->manufacturer_len); 309ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 310ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 311ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 312ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 313ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBTA_BLE_PROP_ELEM *p_elem_service_data = NULL; 314ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBTA_BLE_PROP_ELEM *p_elem_service_128 = NULL; 315ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 316ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->service_data_len > 0 && p_adv_data->p_service_data != NULL) 317ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 318ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji BTIF_TRACE_DEBUG1("%s - In service_data", __FUNCTION__); 319ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM)); 320ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data != NULL) 321ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 322ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data->p_val = GKI_getbuf(p_adv_data->service_data_len); 323ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data->p_val != NULL) 324ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 325ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data->adv_type = BTM_BLE_AD_TYPE_SERVICE_DATA; 326ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data->len = p_adv_data->service_data_len; 327ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_elem_service_data->p_val, p_adv_data->p_service_data, 328ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->service_data_len); 329ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } else { 330ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_elem_service_data); 331ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data = NULL; 332ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 333ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 334ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 335ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 336ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->service_uuid_len > 0 && p_adv_data->p_service_uuid != NULL) 337ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 338ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services = 339ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(sizeof(tBTA_BLE_SERVICE)); 340ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->list_cmpl = FALSE; 341ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->num_service = 0; 342ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid = 343ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(p_adv_data->service_uuid_len / LEN_UUID_128 * LEN_UUID_16); 344ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid != NULL) 345ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 346ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji UINT16 *p_uuid_out = p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid; 347ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji while (p_adv_data->service_uuid_len >= LEN_UUID_128) 348ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 349ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji bt_uuid_t uuid; 350ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(&uuid, 0, sizeof(bt_uuid_t)); 351ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(&uuid.uu, p_adv_data->p_service_uuid, LEN_UUID_128); 352ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBT_UUID bt_uuid; 353ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(&bt_uuid, 0, sizeof(tBT_UUID)); 354ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btif_to_bta_uuid(&bt_uuid, &uuid); 355ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 356ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (bt_uuid.len == LEN_UUID_16) 357ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 358ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_SERVICE; 359ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji ++p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->num_service; 360ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji *p_uuid_out++ = bt_uuid.uu.uuid16; 361ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } else if (bt_uuid.len == LEN_UUID_128 && p_elem_service_128 == NULL) { 362ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji /* Currently, only one 128-bit UUID is supported */ 363ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_128 = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM)); 364ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_128 != NULL) 365ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 366ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_128->p_val = GKI_getbuf(LEN_UUID_128); 367ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_128->p_val != NULL) 368ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 369ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_128->adv_type = BTM_BLE_AD_TYPE_128SRV_PART; 370ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_128->len = LEN_UUID_128; 371ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_elem_service_128->p_val, bt_uuid.uu.uuid128, LEN_UUID_128); 372ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } else { 373ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_elem_service_128); 374ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_128 = NULL; 375ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 376ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 377ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 378ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->p_service_uuid += LEN_UUID_128; 379ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->service_uuid_len -= LEN_UUID_128; 380ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 381ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 382ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 383ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 384ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data != NULL || p_elem_service_128 != NULL) 385ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 386ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary = 387ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(sizeof(tBTA_BLE_PROPRIETARY)); 388ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary != NULL) 389ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 390ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBTA_BLE_PROPRIETARY *p_prop = p_multi_adv_data_cb->inst_cb[cbindex]. 391ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji data.p_proprietary; 392ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBTA_BLE_PROP_ELEM *p_elem = NULL; 393ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_prop->num_elem = 0; 394ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_PROPRIETARY; 395ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_128 != NULL) 396ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji ++p_prop->num_elem; 397ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data != NULL) 398ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji ++p_prop->num_elem; 399ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_prop->p_elem = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM) * p_prop->num_elem); 400ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem = p_prop->p_elem; 401ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_128 != NULL) 402ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 403ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_elem++, p_elem_service_128, sizeof(tBTA_BLE_PROP_ELEM)); 404ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_elem_service_128); 405ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 406ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data != NULL) 407ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 408ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_elem++, p_elem_service_data, sizeof(tBTA_BLE_PROP_ELEM)); 409ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_elem_service_data); 410ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 411ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 412ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 413ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 414ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#if (defined(BLE_PERIPHERAL_ADV_NAME) && (BLE_PERIPHERAL_ADV_NAME == TRUE)) 415ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_DEV_NAME; 416ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#endif 417ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return true; 418ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 419ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 420ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_clear_clientif(int client_if) 421ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 422ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int i=0; 423ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 424ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 425ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 426ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(NULL == p_multi_adv_data_cb) 427ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 428ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 429ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Clear both the inst_id and client_if values 430ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji for(i=0; i < BTM_BLE_MULTI_ADV_MAX; i++) 431ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 432ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(client_if == p_multi_adv_data_cb->clntif_map[i][CLNT_IF_IDX]) 433ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 434ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][INST_ID_IDX] = INVALID_ADV_INST; 435ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->clntif_map[i][CLNT_IF_IDX] = INVALID_ADV_INST; 436ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji BTIF_TRACE_DEBUG2("Cleaning up index %d for clnt_if :%d,", i, client_if); 437ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji break; 438ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 439ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 440ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 441ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 442ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_cleanup_inst_cb(int inst_id) 443ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 444ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int cbindex = 0; 445ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Check for invalid instance id 446ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (inst_id < 0 || inst_id > BTM_BLE_MULTI_ADV_MAX) 447ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 448ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 449ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 450ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 451ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(NULL == p_multi_adv_data_cb) 452ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 453ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 454ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(inst_id > 0) 455ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 456ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji cbindex = btif_gattc_obtain_idx_for_datacb(inst_id, INST_ID_IDX); 457ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (cbindex < 0) 458ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 459ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 460ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji else 461ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(STD_ADV_INSTID == inst_id) 462ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji cbindex = STD_ADV_INSTID; 463ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 464ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji BTIF_TRACE_DEBUG2("Cleaning up multi_inst_cb for inst_id %d, cbindex %d", inst_id, cbindex); 465ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btif_gattc_cleanup_multi_inst_cb(&p_multi_adv_data_cb->inst_cb[cbindex]); 466ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 467ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 468ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_cleanup_multi_inst_cb(btgatt_multi_adv_inst_cb *p_multi_inst_cb) 469ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 470ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Manufacturer data cleanup 471ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_manu != NULL) 472ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 473ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_manu->p_val != NULL) 474ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_manu->p_val); 475ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_manu); 476ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 477ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 478ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Proprietary data cleanup 479ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_proprietary != NULL) 480ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 481ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int i = 0; 482ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBTA_BLE_PROP_ELEM *p_elem = p_multi_inst_cb->data.p_proprietary->p_elem; 483ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji while (i++ != p_multi_inst_cb->data.p_proprietary->num_elem 484ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji && p_elem) 485ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 486ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem->p_val != NULL) 487ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_elem->p_val); 488ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji ++p_elem; 489ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 490ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 491ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_proprietary->p_elem != NULL) 492ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_proprietary->p_elem); 493ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_proprietary); 494ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 495ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 496ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Service list cleanup 497ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_services != NULL) 498ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 499ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_services->p_uuid != NULL) 500ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_services->p_uuid); 501ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_services); 502ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 503ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 504ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Service data cleanup 505ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_service_data != NULL) 506ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 507ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_service_data->p_val != NULL) 508ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_service_data->p_val); 509ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_service_data); 510ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 511ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 512ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_services_128b != NULL) 513ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_services_128b); 514ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 515ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_service_32b != NULL) 516ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 517ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_service_32b->p_uuid != NULL) 518ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_service_32b->p_uuid); 519ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_service_32b); 520ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 521ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 522ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_sol_services != NULL) 523ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 524ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_sol_services->p_uuid != NULL) 525ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_sol_services->p_uuid); 526ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_sol_services); 527ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 528ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 529ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_sol_service_32b != NULL) 530ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 531ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_sol_service_32b->p_uuid != NULL) 532ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_sol_service_32b->p_uuid); 533ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_sol_service_32b); 534ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 535ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 536ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if(p_multi_inst_cb->data.p_sol_service_128b != NULL) 537ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_sol_service_128b); 538ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 539ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 540ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#endif 541