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> 30cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach#include "btu.h" 31bf0e4b26d8f0748ff4f9522a2ac7001bfb9ca5ccWei Wang#include "bt_target.h" 32ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 33ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#define LOG_TAG "BtGatt.btif" 34ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#if (BLE_INCLUDED == TRUE) 35ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 36ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include "btif_gatt_multi_adv_util.h" 37ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include "btif_common.h" 38ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include <hardware/bt_gatt.h> 39ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include "bta_gatt_api.h" 40ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#include "btif_gatt_util.h" 41ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 42ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji/******************************************************************************* 43ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji** Static variables 44ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji********************************************************************************/ 45b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Callojistatic int user_app_count = 0; 46ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojistatic btgatt_multi_adv_common_data *p_multi_adv_com_data_cb = NULL; 47ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 48ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojibtgatt_multi_adv_common_data *btif_obtain_multi_adv_data_cb() 49ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 50cafed88eb2caeaece08da1110625f4567a16ddd1Satya Calloji int max_adv_inst = BTM_BleMaxMultiAdvInstanceCount(); 51cafed88eb2caeaece08da1110625f4567a16ddd1Satya Calloji if (0 == max_adv_inst) 52cafed88eb2caeaece08da1110625f4567a16ddd1Satya Calloji max_adv_inst = 1; 5316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 54cafed88eb2caeaece08da1110625f4567a16ddd1Satya Calloji BTIF_TRACE_DEBUG("%s, Count:%d", __FUNCTION__, max_adv_inst); 55b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji 5616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_com_data_cb) 5716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 5816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_com_data_cb = GKI_getbuf(sizeof(btgatt_multi_adv_common_data)); 5916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL != p_multi_adv_com_data_cb) 6016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 619dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach memset(p_multi_adv_com_data_cb, 0, sizeof(btgatt_multi_adv_common_data)); 6216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 639dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach /* Storing both client_if and inst_id details */ 649dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_com_data_cb->clntif_map = 65cafed88eb2caeaece08da1110625f4567a16ddd1Satya Calloji GKI_getbuf(( max_adv_inst * INST_ID_IDX_MAX)* sizeof(INT8)); 669dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach memset(p_multi_adv_com_data_cb->clntif_map, 0 , 67cafed88eb2caeaece08da1110625f4567a16ddd1Satya Calloji ( max_adv_inst * INST_ID_IDX_MAX)* sizeof(INT8)); 6816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 69cafed88eb2caeaece08da1110625f4567a16ddd1Satya Calloji p_multi_adv_com_data_cb->inst_cb = GKI_getbuf(( max_adv_inst + 1 ) 7016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham * sizeof(btgatt_multi_adv_inst_cb)); 719dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach memset(p_multi_adv_com_data_cb->inst_cb, 0 , 72cafed88eb2caeaece08da1110625f4567a16ddd1Satya Calloji ( max_adv_inst + 1) * sizeof(btgatt_multi_adv_inst_cb)); 739dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 74cafed88eb2caeaece08da1110625f4567a16ddd1Satya Calloji for (int i=0; i < max_adv_inst * 2; i += 2) 759dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach { 769dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_com_data_cb->clntif_map[i] = INVALID_ADV_INST; 779dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_com_data_cb->clntif_map[i+1] = INVALID_ADV_INST; 789dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } 7916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 8016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 8116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 82ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return p_multi_adv_com_data_cb; 83ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 84ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 85b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Callojivoid btif_gattc_incr_app_count(void) 86ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 879dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach // TODO: Instead of using a fragile reference counter here, one could 889dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach // simply track the client_if instances that are in the map. 89b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji ++user_app_count; 90ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 91ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 92b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Callojivoid btif_gattc_decr_app_count(void) 93ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 94b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji if (user_app_count > 0) 95b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji user_app_count --; 9616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 97b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji if(user_app_count == 0 && NULL != p_multi_adv_com_data_cb) 98ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 99b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji GKI_freebuf (p_multi_adv_com_data_cb->clntif_map); 100b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji GKI_freebuf (p_multi_adv_com_data_cb->inst_cb); 101b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji GKI_freebuf(p_multi_adv_com_data_cb); 102b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji p_multi_adv_com_data_cb = NULL; 103ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 104ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 105ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 106ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojiint btif_multi_adv_add_instid_map(int client_if, int inst_id, BOOLEAN gen_temp_instid) 107ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 10816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham int i=1; 109ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 110ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 11116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb) 112ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 113ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 11416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham for (i=1; i < BTM_BleMaxMultiAdvInstanceCount(); i++) 115ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 11616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (client_if == p_multi_adv_data_cb->clntif_map[i + i]) 117ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 11816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (!gen_temp_instid) 119ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 120ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Write the final inst_id value obtained from stack layer 12116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)] = inst_id; 122e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s -Index: %d, Found client_if: %d", __FUNCTION__, 12316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham i, p_multi_adv_data_cb->clntif_map[i + i]); 124ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji break; 125ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 126ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji else 127ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 128ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji //Store the passed in inst_id value 12916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (inst_id != INVALID_ADV_INST) 13016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)] = inst_id; 131ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji else 13216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)] = (i + 1); 13316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 134e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s - Index:%d,Found client_if: %d", __FUNCTION__, 13516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham i, p_multi_adv_data_cb->clntif_map[i + i]); 136ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji break; 137ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 138ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 139ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 140ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 14116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (i < BTM_BleMaxMultiAdvInstanceCount()) 142ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return i; 143ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 144ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // If client ID if is not found, then write both values 14516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham for (i=1; i < BTM_BleMaxMultiAdvInstanceCount(); i++) 146ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 14716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (INVALID_ADV_INST == p_multi_adv_data_cb->clntif_map[i + i]) 148ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 14916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + i] = client_if; 15016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (inst_id != INVALID_ADV_INST) 15116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)] = inst_id; 15216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham else 15316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)] = (i + 1); 15416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_DEBUG("%s -Not found - Index:%d, client_if: %d, Inst ID: %d", 155ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji __FUNCTION__,i, 15616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + i], 15716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)]); 15816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham break; 159ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 160ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 161ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 16216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (i < BTM_BleMaxMultiAdvInstanceCount()) 163ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return i; 164ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 165ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 166ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 167ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojiint btif_multi_adv_instid_for_clientif(int client_if) 168ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 16916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham int i=1, ret = INVALID_ADV_INST; 170ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 171ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 172ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 17316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb) 174ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 175ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 176ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Retrieve the existing inst_id for the client_if value 17716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham for (i=1; i < BTM_BleMaxMultiAdvInstanceCount(); i++) 178ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 17916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (client_if == p_multi_adv_data_cb->clntif_map[i + i]) 18016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 18116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_DEBUG("%s - Client if found", __FUNCTION__, client_if); 18216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham ret = p_multi_adv_data_cb->clntif_map[i + (i + 1)]; 18316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 184ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 185ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 18616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham return ret; 187ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 188ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 18916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadhamint btif_gattc_obtain_idx_for_datacb(int value, int clnt_inst_index) 190ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 19116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham int i=1; 192ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 193ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 194ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 19516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb) 196ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 197ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 198ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Retrieve the array index for the inst_id value 19916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham for (i=1; i < BTM_BleMaxMultiAdvInstanceCount(); i++) 200ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 20116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (value == p_multi_adv_data_cb->clntif_map[i + (i + clnt_inst_index)]) 202ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji break; 203ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 204ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 20516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (i < BTM_BleMaxMultiAdvInstanceCount()) 206ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 20716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_DEBUG("%s, %d",__FUNCTION__,i); 20816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham return i; 209ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 210ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 211e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s Invalid instance",__FUNCTION__); 212ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 213ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 214ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 215ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 216ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_adv_data_packager(int client_if, bool set_scan_rsp, 217ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji bool include_name, bool include_txpower, int min_interval, int max_interval, 2189dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int appearance, int manufacturer_len, char* manufacturer_data, 2199dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int service_data_len, char* service_data, int service_uuid_len, 220ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji char* service_uuid, btif_adv_data_t *p_multi_adv_inst) 221ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 222ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(p_multi_adv_inst, 0 , sizeof(btif_adv_data_t)); 223ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 224ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->client_if = (uint8_t) client_if; 225ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->set_scan_rsp = set_scan_rsp; 226ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->include_name = include_name; 227ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->include_txpower = include_txpower; 228ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->min_interval = min_interval; 229ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->max_interval = max_interval; 230ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->appearance = appearance; 231ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->manufacturer_len = manufacturer_len; 232ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 23316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (manufacturer_len > 0) 234ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 235ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->p_manufacturer_data = GKI_getbuf(manufacturer_len); 236ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_inst->p_manufacturer_data, manufacturer_data, manufacturer_len); 237ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 238ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 239ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->service_data_len = service_data_len; 24016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (service_data_len > 0) 241ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 242ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->p_service_data = GKI_getbuf(service_data_len); 243ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_inst->p_service_data, service_data, service_data_len); 244ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 245ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 246ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->service_uuid_len = service_uuid_len; 24716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (service_uuid_len > 0) 248ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 249ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->p_service_uuid = GKI_getbuf(service_uuid_len); 250ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_inst->p_service_uuid, service_uuid, service_uuid_len); 251ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 252ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 253ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 254ffb3960bb05f9acb0717d213612403487e9ad433Satya CallojiBOOLEAN btif_gattc_copy_datacb(int cbindex, btif_adv_data_t *p_adv_data, BOOLEAN bInstData) 255ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 256ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int i=0; 257ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 25816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb || cbindex < 0) 259ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return false; 260ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 261e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s", __FUNCTION__); 262ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(&p_multi_adv_data_cb->inst_cb[cbindex].data, 0, sizeof(tBTA_BLE_ADV_DATA)); 2637ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask = 0; 264ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 2653489ca9d44bbf0d3f00b1f5cd9675694774d48a8Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].is_scan_rsp = p_adv_data->set_scan_rsp ? 1 : 0; 266ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (!p_adv_data->set_scan_rsp) 267ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 268ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask = BTM_BLE_AD_BIT_FLAGS; 2699dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].data.flag = ADV_FLAGS_GENERAL; 2709dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].timeout_s) 2719dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].data.flag = ADV_FLAGS_LIMITED; 272962f1d1f9dc22d939bea4e9fb34a67028ff185fdAndre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].param.adv_type == BTA_BLE_NON_CONNECT_EVT) 273962f1d1f9dc22d939bea4e9fb34a67028ff185fdAndre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].data.flag &= 274962f1d1f9dc22d939bea4e9fb34a67028ff185fdAndre Eisenbach ~(BTA_DM_LIMITED_DISC | BTA_DM_GENERAL_DISC); 275962f1d1f9dc22d939bea4e9fb34a67028ff185fdAndre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].data.flag == 0) 276962f1d1f9dc22d939bea4e9fb34a67028ff185fdAndre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].mask = 0; 277ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 278ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 279ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->include_name) 280ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_DEV_NAME; 281ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 282ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->include_txpower) 283ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_TX_PWR; 284ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 285ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (false == bInstData && p_adv_data->min_interval > 0 && p_adv_data->max_interval > 0 && 286ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->max_interval > p_adv_data->min_interval) 287ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 288ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_INT_RANGE; 289ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.low = 290ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->min_interval; 291ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.hi = 292ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->max_interval; 293ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 294ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji else 29516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (true == bInstData) 296ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 297ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_min > 0 && 298ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_max > 0 && 299ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_max > 300ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_min) 301ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 302ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.low = 303ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_min; 304ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.hi = 305ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_max; 306ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 307ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 308ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->include_txpower) 309ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 310ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.tx_power = 311ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.tx_power; 312ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 313ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 314ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 315ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->appearance != 0) 316ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 317ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_APPEARANCE; 318ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.appearance = p_adv_data->appearance; 319ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 320ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 321ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->manufacturer_len > 0 && p_adv_data->p_manufacturer_data != NULL) 322ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 323ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu = 324ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(sizeof(tBTA_BLE_MANU)); 32516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu != NULL) 326ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 327ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val = 328ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(p_adv_data->manufacturer_len); 329ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val != NULL) 330ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 331ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_MANU; 332ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->len = 333ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->manufacturer_len; 334ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val, 335ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->p_manufacturer_data, p_adv_data->manufacturer_len); 336ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 337ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 3387ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 339ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 3407ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji tBTA_BLE_PROP_ELEM *p_elem_service_data = NULL; 3417ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji if (p_adv_data->service_data_len > 0 && p_adv_data->p_service_data != NULL) 3427ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 343e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s - In service_data", __FUNCTION__); 344ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM)); 345ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data != NULL) 346ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 347ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data->p_val = GKI_getbuf(p_adv_data->service_data_len); 348ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data->p_val != NULL) 349ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 350ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data->adv_type = BTM_BLE_AD_TYPE_SERVICE_DATA; 351ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data->len = p_adv_data->service_data_len; 352ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_elem_service_data->p_val, p_adv_data->p_service_data, 353ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->service_data_len); 354ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } else { 355ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_elem_service_data); 356ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data = NULL; 357ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 358ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 3597ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 360ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 3617ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji if (NULL != p_elem_service_data) 3627ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 3637ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary = 3647ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji GKI_getbuf(sizeof(tBTA_BLE_PROPRIETARY)); 3657ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary) 3667ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 3677ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji tBTA_BLE_PROP_ELEM *p_elem = NULL; 3687ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji tBTA_BLE_PROPRIETARY *p_prop = p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary; 3697ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_prop->num_elem = 0; 3707ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_PROPRIETARY; 3717ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_prop->num_elem = 1; 3727ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_prop->p_elem = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM) * p_prop->num_elem); 3737ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_elem = p_prop->p_elem; 3747ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji if (NULL != p_elem) 3757ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji memcpy(p_elem++, p_elem_service_data, sizeof(tBTA_BLE_PROP_ELEM)); 3767ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji GKI_freebuf(p_elem_service_data); 3777ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 3787ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 379ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 3807ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji if (p_adv_data->service_uuid_len > 0 && NULL != p_adv_data->p_service_uuid) 3817ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 3827ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji UINT16 *p_uuid_out16 = NULL; 3837ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji UINT32 *p_uuid_out32 = NULL; 3847ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji while (p_adv_data->service_uuid_len >= LEN_UUID_128) 3857ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 3867ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji bt_uuid_t uuid; 3877ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji memset(&uuid, 0, sizeof(bt_uuid_t)); 3887ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji memcpy(&uuid.uu, p_adv_data->p_service_uuid, LEN_UUID_128); 3897ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji 3907ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji tBT_UUID bt_uuid; 3917ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji memset(&bt_uuid, 0, sizeof(tBT_UUID)); 3927ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji btif_to_bta_uuid(&bt_uuid, &uuid); 3937ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji 3947ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji switch(bt_uuid.len) 395ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 3967ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji case (LEN_UUID_16): 3977ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 3987ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji if (NULL == p_multi_adv_data_cb->inst_cb[cbindex].data.p_services) 3997ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 4007ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services = 4017ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji GKI_getbuf(sizeof(tBTA_BLE_SERVICE)); 4027ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->list_cmpl = FALSE; 4037ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->num_service = 0; 4047ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid = 4057ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji GKI_getbuf(p_adv_data->service_uuid_len / LEN_UUID_128 * LEN_UUID_16); 4067ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_uuid_out16 = p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid; 4077ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 4087ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji 4097ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid) 4107ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 4117ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji BTIF_TRACE_DEBUG("%s - In 16-UUID_data", __FUNCTION__); 4127ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_SERVICE; 4137ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji ++p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->num_service; 4147ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji *p_uuid_out16++ = bt_uuid.uu.uuid16; 4157ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 4167ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji break; 4177ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 4187ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji 4197ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji case (LEN_UUID_32): 4207ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 4217ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji if (NULL == p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b) 4227ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 4237ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b = 4247ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji GKI_getbuf(sizeof(tBTA_BLE_32SERVICE)); 4257ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->list_cmpl = FALSE; 4267ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->num_service = 0; 4277ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->p_uuid = 4287ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji GKI_getbuf(p_adv_data->service_uuid_len / LEN_UUID_128 * LEN_UUID_32); 4297ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_uuid_out32 = p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->p_uuid; 4307ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 4317ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji 4327ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->p_uuid) 4337ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 4347ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji BTIF_TRACE_DEBUG("%s - In 32-UUID_data", __FUNCTION__); 4357ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_SERVICE_32; 4367ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji ++p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->num_service; 4377ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji *p_uuid_out32++ = bt_uuid.uu.uuid32; 4387ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 4397ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji break; 4407ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 4417ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji 4427ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji case (LEN_UUID_128): 4437ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 4447ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji /* Currently, only one 128-bit UUID is supported */ 4457ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji if (NULL == p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b) 4467ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 4477ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b = 4487ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji GKI_getbuf(sizeof(tBTA_BLE_128SERVICE)); 4497ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b) 4507ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji { 4517ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji BTIF_TRACE_DEBUG("%s - In 128-UUID_data", __FUNCTION__); 4527ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_SERVICE_128; 4537ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji memcpy(p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b->uuid128, 4547ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji bt_uuid.uu.uuid128, LEN_UUID_128); 4557ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji BTIF_TRACE_DEBUG("%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x", bt_uuid.uu.uuid128[0], 4567ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji bt_uuid.uu.uuid128[1],bt_uuid.uu.uuid128[2], bt_uuid.uu.uuid128[3], 4577ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji bt_uuid.uu.uuid128[4],bt_uuid.uu.uuid128[5],bt_uuid.uu.uuid128[6], 4587ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji bt_uuid.uu.uuid128[7],bt_uuid.uu.uuid128[8],bt_uuid.uu.uuid128[9], 4597ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji bt_uuid.uu.uuid128[10],bt_uuid.uu.uuid128[11],bt_uuid.uu.uuid128[12], 4607ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji bt_uuid.uu.uuid128[13],bt_uuid.uu.uuid128[14],bt_uuid.uu.uuid128[15]); 4617ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b->list_cmpl = TRUE; 4627ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 4637ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 4647ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji break; 4657ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 4667ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji 4677ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji default: 4687ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji break; 469ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 4707ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji 4717ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_adv_data->p_service_uuid += LEN_UUID_128; 4727ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji p_adv_data->service_uuid_len -= LEN_UUID_128; 4737ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 4747ddf2d88501a2dd17045fb2f126ec99dcac9b5d9Satya Calloji } 475ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 476ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#if (defined(BLE_PERIPHERAL_ADV_NAME) && (BLE_PERIPHERAL_ADV_NAME == TRUE)) 477ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_DEV_NAME; 478ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#endif 479ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return true; 480ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 481ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 4823770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Callojivoid btif_gattc_clear_clientif(int client_if, BOOLEAN stop_timer) 483ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 484ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 48516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb) 486ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 487ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 488ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Clear both the inst_id and client_if values 489169cd7a221a79474d36e5c1697e862c1d640c064Andre Eisenbach for (int i=0; i < BTM_BleMaxMultiAdvInstanceCount()*2; i+=2) 490ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 4919dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (client_if == p_multi_adv_data_cb->clntif_map[i]) 4929dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach { 4933770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup_inst_cb(p_multi_adv_data_cb->clntif_map[i+1], stop_timer); 4943770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji if (stop_timer) 4953770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji { 4963770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji p_multi_adv_data_cb->clntif_map[i] = INVALID_ADV_INST; 4973770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji p_multi_adv_data_cb->clntif_map[i+1] = INVALID_ADV_INST; 4983770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji BTIF_TRACE_DEBUG("Cleaning up index %d for clnt_if :%d,", i/2, client_if); 4993770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji } 5009dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach break; 5019dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } 502ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 503ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 504ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 5053770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Callojivoid btif_gattc_cleanup_inst_cb(int inst_id, BOOLEAN stop_timer) 506ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 507ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Check for invalid instance id 50816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (inst_id < 0 || inst_id >= BTM_BleMaxMultiAdvInstanceCount()) 509ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 510ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 511ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 51216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb) 513ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 514ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 5153770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji int cbindex = (STD_ADV_INSTID == inst_id) ? 5163770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji STD_ADV_INSTID : btif_gattc_obtain_idx_for_datacb(inst_id, INST_ID_IDX); 5173770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji if (cbindex < 0) return; 518ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 5193770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji BTIF_TRACE_DEBUG("Cleaning up multi_inst_cb for inst_id %d, cbindex %d", inst_id, cbindex); 5203770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup_multi_inst_cb(&p_multi_adv_data_cb->inst_cb[cbindex], stop_timer); 521ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 522ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 5233770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Callojivoid btif_gattc_cleanup_multi_inst_cb(btgatt_multi_adv_inst_cb *p_multi_inst_cb, 5243770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji BOOLEAN stop_timer) 525ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 526cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach if (p_multi_inst_cb == NULL) 527cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach return; 528cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach 5299dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach // Discoverability timer cleanup 5303770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji if (stop_timer) 5313770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji { 5323770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji if (p_multi_inst_cb->tle_limited_timer.in_use) 5333770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btu_stop_timer_oneshot(&p_multi_inst_cb->tle_limited_timer); 5343770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji p_multi_inst_cb->tle_limited_timer.in_use = 0; 5353770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji } 5369dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 537ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Manufacturer data cleanup 538ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_manu != NULL) 539ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 5403770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_manu->p_val); 5413770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_manu); 542ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 543ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 544ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Proprietary data cleanup 545ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_proprietary != NULL) 546ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 547ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int i = 0; 548ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBTA_BLE_PROP_ELEM *p_elem = p_multi_inst_cb->data.p_proprietary->p_elem; 549ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji while (i++ != p_multi_inst_cb->data.p_proprietary->num_elem 550ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji && p_elem) 551ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 5523770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_elem->p_val); 553ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji ++p_elem; 554ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 555ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 5563770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_proprietary->p_elem); 5573770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_proprietary); 558ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 559ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 560ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Service list cleanup 561ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_services != NULL) 562ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 5633770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_services->p_uuid); 5643770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_services); 565ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 566ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 567ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Service data cleanup 568ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_service_data != NULL) 569ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 5703770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_data->p_val); 5713770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_data); 572ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 573ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 5743770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_services_128b); 575ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 576ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_service_32b != NULL) 577ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 5783770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_32b->p_uuid); 5793770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_32b); 580ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 581ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 582ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_sol_services != NULL) 583ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 5843770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_services->p_uuid); 5853770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_services); 586ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 587ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 588ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_sol_service_32b != NULL) 589ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 5903770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_service_32b->p_uuid); 5913770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_service_32b); 592ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 593ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 5943770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_service_128b); 5953770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji} 5963770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji 5973770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Callojivoid btif_gattc_cleanup(void** buf) 5983770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji{ 5993770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji if (NULL == *buf) return; 6003770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji GKI_freebuf(*buf); 6013770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji *buf = NULL; 602ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 603ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 604cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbachvoid btif_multi_adv_timer_ctrl(int client_if, TIMER_CBACK cb) 6059dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach{ 6069dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int inst_id = btif_multi_adv_instid_for_clientif(client_if); 6079dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (inst_id == INVALID_ADV_INST) 6089dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach return; 6099dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 6109dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int cbindex = btif_gattc_obtain_idx_for_datacb(inst_id, INST_ID_IDX); 6119dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (cbindex == INVALID_ADV_INST) 6129dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach return; 6139dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 6149dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 6159dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (p_multi_adv_data_cb == NULL) 6169dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach return; 6179dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 6189dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (cb == NULL) 6199dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach { 620cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer.in_use) 621cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach btu_stop_timer_oneshot(&p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer); 6229dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } else { 6239dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].timeout_s != 0) 6249dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach { 625cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer.in_use) 626cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach btu_stop_timer_oneshot(&p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer); 627cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach 628cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach memset(&p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer, 0, sizeof(TIMER_LIST_ENT)); 629cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer.param = (UINT32)cb; 630cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer.data = (UINT32)client_if; 631cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach btu_start_timer_oneshot(&p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer, 632cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach BTU_TTYPE_USER_FUNC, p_multi_adv_data_cb->inst_cb[cbindex].timeout_s); 6339dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } 6349dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } 6359dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach} 6369dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 637ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#endif 638