btif_gatt_multi_adv_util.c revision 962f1d1f9dc22d939bea4e9fb34a67028ff185fd
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********************************************************************************/ 45ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojistatic int multi_adv_enable_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{ 5016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if(0 == BTM_BleMaxMultiAdvInstanceCount()) 5116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 5216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_WARNING("%s - No instances found", __FUNCTION__); 5316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham return NULL; 5416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 5516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 5616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_DEBUG("%s, Count:%d", __FUNCTION__, BTM_BleMaxMultiAdvInstanceCount()); 5716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_com_data_cb) 5816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 5916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_DEBUG("Initializing in %s", __FUNCTION__); 6016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_com_data_cb = GKI_getbuf(sizeof(btgatt_multi_adv_common_data)); 6116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL != p_multi_adv_com_data_cb) 6216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 639dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach memset(p_multi_adv_com_data_cb, 0, sizeof(btgatt_multi_adv_common_data)); 6416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 659dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach /* Storing both client_if and inst_id details */ 669dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_com_data_cb->clntif_map = 6716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham GKI_getbuf(( BTM_BleMaxMultiAdvInstanceCount() * INST_ID_IDX_MAX)* sizeof(INT8)); 689dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach memset(p_multi_adv_com_data_cb->clntif_map, 0 , 6916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham ( BTM_BleMaxMultiAdvInstanceCount() * INST_ID_IDX_MAX)* sizeof(INT8)); 7016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 719dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_com_data_cb->inst_cb = GKI_getbuf(( BTM_BleMaxMultiAdvInstanceCount() + 1 ) 7216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham * sizeof(btgatt_multi_adv_inst_cb)); 739dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach memset(p_multi_adv_com_data_cb->inst_cb, 0 , 7416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham ( BTM_BleMaxMultiAdvInstanceCount() + 1) * sizeof(btgatt_multi_adv_inst_cb)); 759dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 76169cd7a221a79474d36e5c1697e862c1d640c064Andre Eisenbach for (int i=0; i < BTM_BleMaxMultiAdvInstanceCount()*2; i += 2) 779dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach { 789dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_com_data_cb->clntif_map[i] = INVALID_ADV_INST; 799dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_com_data_cb->clntif_map[i+1] = INVALID_ADV_INST; 809dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } 8116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 8216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 8316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 84ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return p_multi_adv_com_data_cb; 85ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 86ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 87ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_init_multi_adv_cb(void) 88ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 899dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach // TODO: Instead of using a fragile reference counter here, one could 909dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach // simply track the client_if instances that are in the map. 919dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach ++multi_adv_enable_count; 92ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 93ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 949dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbachvoid btif_gattc_destroy_multi_adv_cb(int client_if) 95ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 9616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (multi_adv_enable_count > 0) 97ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji multi_adv_enable_count --; 9816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 999dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if(multi_adv_enable_count == 0 && p_multi_adv_com_data_cb != 0) 100ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 10116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL != p_multi_adv_com_data_cb) 10216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 10316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham GKI_freebuf (p_multi_adv_com_data_cb->clntif_map); 10416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham GKI_freebuf (p_multi_adv_com_data_cb->inst_cb); 10516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham GKI_freebuf(p_multi_adv_com_data_cb); 10616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_com_data_cb = NULL; 10716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 108ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 109ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 110ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 111ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojiint btif_multi_adv_add_instid_map(int client_if, int inst_id, BOOLEAN gen_temp_instid) 112ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 11316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham int i=1; 114ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 115ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 11616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb) 117ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 118ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 11916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham for (i=1; i < BTM_BleMaxMultiAdvInstanceCount(); i++) 120ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 12116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (client_if == p_multi_adv_data_cb->clntif_map[i + i]) 122ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 12316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (!gen_temp_instid) 124ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 125ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Write the final inst_id value obtained from stack layer 12616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)] = inst_id; 127e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s -Index: %d, Found client_if: %d", __FUNCTION__, 12816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham i, p_multi_adv_data_cb->clntif_map[i + i]); 129ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji break; 130ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 131ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji else 132ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 133ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji //Store the passed in inst_id value 13416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (inst_id != INVALID_ADV_INST) 13516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)] = inst_id; 136ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji else 13716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)] = (i + 1); 13816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 139e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s - Index:%d,Found client_if: %d", __FUNCTION__, 14016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham i, p_multi_adv_data_cb->clntif_map[i + i]); 141ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji break; 142ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 143ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 144ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 145ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 14616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (i < BTM_BleMaxMultiAdvInstanceCount()) 147ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return i; 148ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 149ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // If client ID if is not found, then write both values 15016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham for (i=1; i < BTM_BleMaxMultiAdvInstanceCount(); i++) 151ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 15216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (INVALID_ADV_INST == p_multi_adv_data_cb->clntif_map[i + i]) 153ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 15416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + i] = client_if; 15516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (inst_id != INVALID_ADV_INST) 15616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)] = inst_id; 15716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham else 15816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)] = (i + 1); 15916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_DEBUG("%s -Not found - Index:%d, client_if: %d, Inst ID: %d", 160ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji __FUNCTION__,i, 16116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + i], 16216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[i + (i + 1)]); 16316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham break; 164ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 165ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 166ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 16716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (i < BTM_BleMaxMultiAdvInstanceCount()) 168ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return i; 169ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 170ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 171ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 172ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojiint btif_multi_adv_instid_for_clientif(int client_if) 173ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 17416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham int i=1, ret = INVALID_ADV_INST; 175ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 176ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 177ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 17816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb) 179ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 180ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 181ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Retrieve the existing inst_id for the client_if value 18216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham for (i=1; i < BTM_BleMaxMultiAdvInstanceCount(); i++) 183ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 18416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (client_if == p_multi_adv_data_cb->clntif_map[i + i]) 18516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 18616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_DEBUG("%s - Client if found", __FUNCTION__, client_if); 18716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham ret = p_multi_adv_data_cb->clntif_map[i + (i + 1)]; 18816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 189ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 190ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 19116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham return ret; 192ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 193ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 19416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadhamint btif_gattc_obtain_idx_for_datacb(int value, int clnt_inst_index) 195ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 19616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham int i=1; 197ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 198ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 199ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 20016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb) 201ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 202ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 203ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Retrieve the array index for the inst_id value 20416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham for (i=1; i < BTM_BleMaxMultiAdvInstanceCount(); i++) 205ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 20616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (value == p_multi_adv_data_cb->clntif_map[i + (i + clnt_inst_index)]) 207ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji break; 208ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 209ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 21016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (i < BTM_BleMaxMultiAdvInstanceCount()) 211ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 21216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_DEBUG("%s, %d",__FUNCTION__,i); 21316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham return i; 214ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 215ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 216e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s Invalid instance",__FUNCTION__); 217ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return INVALID_ADV_INST; 218ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 219ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 220ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 221ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_adv_data_packager(int client_if, bool set_scan_rsp, 222ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji bool include_name, bool include_txpower, int min_interval, int max_interval, 2239dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int appearance, int manufacturer_len, char* manufacturer_data, 2249dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int service_data_len, char* service_data, int service_uuid_len, 225ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji char* service_uuid, btif_adv_data_t *p_multi_adv_inst) 226ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 227ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(p_multi_adv_inst, 0 , sizeof(btif_adv_data_t)); 228ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 229ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->client_if = (uint8_t) client_if; 230ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->set_scan_rsp = set_scan_rsp; 231ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->include_name = include_name; 232ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->include_txpower = include_txpower; 233ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->min_interval = min_interval; 234ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->max_interval = max_interval; 235ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->appearance = appearance; 236ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->manufacturer_len = manufacturer_len; 237ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 23816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (manufacturer_len > 0) 239ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 240ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->p_manufacturer_data = GKI_getbuf(manufacturer_len); 241ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_inst->p_manufacturer_data, manufacturer_data, manufacturer_len); 242ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 243ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 244ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->service_data_len = service_data_len; 24516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (service_data_len > 0) 246ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 247ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->p_service_data = GKI_getbuf(service_data_len); 248ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_inst->p_service_data, service_data, service_data_len); 249ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 250ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 251ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->service_uuid_len = service_uuid_len; 25216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (service_uuid_len > 0) 253ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 254ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_inst->p_service_uuid = GKI_getbuf(service_uuid_len); 255ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_inst->p_service_uuid, service_uuid, service_uuid_len); 256ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 257ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 258ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 259ffb3960bb05f9acb0717d213612403487e9ad433Satya CallojiBOOLEAN btif_gattc_copy_datacb(int cbindex, btif_adv_data_t *p_adv_data, BOOLEAN bInstData) 260ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 261ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int i=0; 262ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 26316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb || cbindex < 0) 264ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return false; 265ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 266e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s", __FUNCTION__); 267ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(&p_multi_adv_data_cb->inst_cb[cbindex].data, 0, sizeof(tBTA_BLE_ADV_DATA)); 268ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 2693489ca9d44bbf0d3f00b1f5cd9675694774d48a8Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].is_scan_rsp = p_adv_data->set_scan_rsp ? 1 : 0; 270ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (!p_adv_data->set_scan_rsp) 271ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 272ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask = BTM_BLE_AD_BIT_FLAGS; 2739dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].data.flag = ADV_FLAGS_GENERAL; 2749dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].timeout_s) 2759dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].data.flag = ADV_FLAGS_LIMITED; 276962f1d1f9dc22d939bea4e9fb34a67028ff185fdAndre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].param.adv_type == BTA_BLE_NON_CONNECT_EVT) 277962f1d1f9dc22d939bea4e9fb34a67028ff185fdAndre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].data.flag &= 278962f1d1f9dc22d939bea4e9fb34a67028ff185fdAndre Eisenbach ~(BTA_DM_LIMITED_DISC | BTA_DM_GENERAL_DISC); 279962f1d1f9dc22d939bea4e9fb34a67028ff185fdAndre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].data.flag == 0) 280962f1d1f9dc22d939bea4e9fb34a67028ff185fdAndre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].mask = 0; 281ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 282ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 283ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->include_name) 284ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_DEV_NAME; 285ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 286ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->include_txpower) 287ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_TX_PWR; 288ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 289ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (false == bInstData && p_adv_data->min_interval > 0 && p_adv_data->max_interval > 0 && 290ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->max_interval > p_adv_data->min_interval) 291ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 292ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_INT_RANGE; 293ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.low = 294ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->min_interval; 295ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.hi = 296ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->max_interval; 297ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 298ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji else 29916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (true == bInstData) 300ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 301ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_min > 0 && 302ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_max > 0 && 303ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_max > 304ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_min) 305ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 306ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.low = 307ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_min; 308ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.int_range.hi = 309ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.adv_int_max; 310ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 311ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 312ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->include_txpower) 313ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 314ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.tx_power = 315ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].param.tx_power; 316ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 317ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 318ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 319ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->appearance != 0) 320ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 321ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_APPEARANCE; 322ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.appearance = p_adv_data->appearance; 323ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 324ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 325ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->manufacturer_len > 0 && p_adv_data->p_manufacturer_data != NULL) 326ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 327ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu = 328ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(sizeof(tBTA_BLE_MANU)); 32916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu != NULL) 330ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 331ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val = 332ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(p_adv_data->manufacturer_len); 333ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val != NULL) 334ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 335ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_MANU; 336ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->len = 337ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->manufacturer_len; 338ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val, 339ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->p_manufacturer_data, p_adv_data->manufacturer_len); 340ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 341ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 342ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 343ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 344ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBTA_BLE_PROP_ELEM *p_elem_service_data = NULL; 345ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBTA_BLE_PROP_ELEM *p_elem_service_128 = NULL; 346ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 347ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->service_data_len > 0 && p_adv_data->p_service_data != NULL) 348ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 349e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s - In service_data", __FUNCTION__); 350ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM)); 351ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data != NULL) 352ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 353ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data->p_val = GKI_getbuf(p_adv_data->service_data_len); 354ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data->p_val != NULL) 355ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 356ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data->adv_type = BTM_BLE_AD_TYPE_SERVICE_DATA; 357ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data->len = p_adv_data->service_data_len; 358ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_elem_service_data->p_val, p_adv_data->p_service_data, 359ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->service_data_len); 360ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } else { 361ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_elem_service_data); 362ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_data = NULL; 363ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 364ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 365ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 366ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 367ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_adv_data->service_uuid_len > 0 && p_adv_data->p_service_uuid != NULL) 368ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 369ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services = 370ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(sizeof(tBTA_BLE_SERVICE)); 371ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->list_cmpl = FALSE; 372ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->num_service = 0; 373ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid = 374ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(p_adv_data->service_uuid_len / LEN_UUID_128 * LEN_UUID_16); 375ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid != NULL) 376ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 377ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji UINT16 *p_uuid_out = p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid; 378ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji while (p_adv_data->service_uuid_len >= LEN_UUID_128) 379ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 380ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji bt_uuid_t uuid; 381ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(&uuid, 0, sizeof(bt_uuid_t)); 382ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(&uuid.uu, p_adv_data->p_service_uuid, LEN_UUID_128); 383ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBT_UUID bt_uuid; 384ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memset(&bt_uuid, 0, sizeof(tBT_UUID)); 385ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btif_to_bta_uuid(&bt_uuid, &uuid); 386ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 387ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (bt_uuid.len == LEN_UUID_16) 388ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 389ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_SERVICE; 390ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji ++p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->num_service; 391ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji *p_uuid_out++ = bt_uuid.uu.uuid16; 392ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } else if (bt_uuid.len == LEN_UUID_128 && p_elem_service_128 == NULL) { 393ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji /* Currently, only one 128-bit UUID is supported */ 394ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_128 = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM)); 395ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_128 != NULL) 396ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 397ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_128->p_val = GKI_getbuf(LEN_UUID_128); 398ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_128->p_val != NULL) 399ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 400ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_128->adv_type = BTM_BLE_AD_TYPE_128SRV_PART; 401ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_128->len = LEN_UUID_128; 402ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_elem_service_128->p_val, bt_uuid.uu.uuid128, LEN_UUID_128); 403ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } else { 404ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_elem_service_128); 405ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem_service_128 = NULL; 406ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 407ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 408ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 409ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->p_service_uuid += LEN_UUID_128; 410ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_adv_data->service_uuid_len -= LEN_UUID_128; 411ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 412ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 413ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 414ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 415ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data != NULL || p_elem_service_128 != NULL) 416ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 417ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary = 418ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_getbuf(sizeof(tBTA_BLE_PROPRIETARY)); 419ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary != NULL) 420ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 421ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBTA_BLE_PROPRIETARY *p_prop = p_multi_adv_data_cb->inst_cb[cbindex]. 422ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji data.p_proprietary; 423ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBTA_BLE_PROP_ELEM *p_elem = NULL; 424ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_prop->num_elem = 0; 425ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_PROPRIETARY; 426ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_128 != NULL) 427ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji ++p_prop->num_elem; 428ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data != NULL) 429ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji ++p_prop->num_elem; 430ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_prop->p_elem = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM) * p_prop->num_elem); 431ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_elem = p_prop->p_elem; 432ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_128 != NULL) 433ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 434ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_elem++, p_elem_service_128, sizeof(tBTA_BLE_PROP_ELEM)); 435ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_elem_service_128); 436ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 437ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem_service_data != NULL) 438ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 439ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji memcpy(p_elem++, p_elem_service_data, sizeof(tBTA_BLE_PROP_ELEM)); 440ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_elem_service_data); 441ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 442ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 443ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 444ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 445ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#if (defined(BLE_PERIPHERAL_ADV_NAME) && (BLE_PERIPHERAL_ADV_NAME == TRUE)) 446ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_DEV_NAME; 447ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#endif 448ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return true; 449ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 450ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 451ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_clear_clientif(int client_if) 452ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 453ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 45416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb) 455ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 456ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 457ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Clear both the inst_id and client_if values 458169cd7a221a79474d36e5c1697e862c1d640c064Andre Eisenbach for (int i=0; i < BTM_BleMaxMultiAdvInstanceCount()*2; i+=2) 459ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 4609dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (client_if == p_multi_adv_data_cb->clntif_map[i]) 4619dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach { 4629dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach btif_gattc_cleanup_inst_cb(p_multi_adv_data_cb->clntif_map[i+1]); 4639dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_data_cb->clntif_map[i] = INVALID_ADV_INST; 4649dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_data_cb->clntif_map[i+1] = INVALID_ADV_INST; 465169cd7a221a79474d36e5c1697e862c1d640c064Andre Eisenbach BTIF_TRACE_DEBUG("Cleaning up index %d for clnt_if :%d,", i/2, client_if); 4669dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach break; 4679dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } 468ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 469ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 470ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 471ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_cleanup_inst_cb(int inst_id) 472ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 473ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int cbindex = 0; 474ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Check for invalid instance id 47516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (inst_id < 0 || inst_id >= BTM_BleMaxMultiAdvInstanceCount()) 476ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 477ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 478ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 47916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_multi_adv_data_cb) 480ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 481ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 48216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (inst_id > 0) 483ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 484ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji cbindex = btif_gattc_obtain_idx_for_datacb(inst_id, INST_ID_IDX); 485ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (cbindex < 0) 486ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji return; 4879dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } else { 4889dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (STD_ADV_INSTID == inst_id) 4899dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach cbindex = STD_ADV_INSTID; 490ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 491ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 4929dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (inst_id != INVALID_ADV_INST) 4939dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach { 4949dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach BTIF_TRACE_DEBUG("Cleaning up multi_inst_cb for inst_id %d, cbindex %d", inst_id, cbindex); 4959dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach btif_gattc_cleanup_multi_inst_cb(&p_multi_adv_data_cb->inst_cb[cbindex]); 4969dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].inst_id = INVALID_ADV_INST; 4979dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } 498ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 499ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 500ffb3960bb05f9acb0717d213612403487e9ad433Satya Callojivoid btif_gattc_cleanup_multi_inst_cb(btgatt_multi_adv_inst_cb *p_multi_inst_cb) 501ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji{ 502cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach if (p_multi_inst_cb == NULL) 503cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach return; 504cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach 5059dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach // Discoverability timer cleanup 506cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach if (p_multi_inst_cb->tle_limited_timer.in_use) 507cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach btu_stop_timer_oneshot(&p_multi_inst_cb->tle_limited_timer); 5089dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 509ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Manufacturer data cleanup 510ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_manu != NULL) 511ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 512ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_manu->p_val != NULL) 513ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_manu->p_val); 514ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_manu); 515ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 516ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 517ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Proprietary data cleanup 518ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_proprietary != NULL) 519ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 520ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji int i = 0; 521ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji tBTA_BLE_PROP_ELEM *p_elem = p_multi_inst_cb->data.p_proprietary->p_elem; 522ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji while (i++ != p_multi_inst_cb->data.p_proprietary->num_elem 523ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji && p_elem) 524ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 525ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_elem->p_val != NULL) 526ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_elem->p_val); 527ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji ++p_elem; 528ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 529ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 530ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_proprietary->p_elem != NULL) 531ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_proprietary->p_elem); 532ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_proprietary); 533ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 534ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 535ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Service list cleanup 536ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_services != NULL) 537ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 538ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_services->p_uuid != NULL) 539ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_services->p_uuid); 540ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_services); 541ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 542ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 543ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji // Service data cleanup 544ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_service_data != NULL) 545ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 546ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_service_data->p_val != NULL) 547ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_service_data->p_val); 548ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_service_data); 549ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 550ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 551ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_services_128b != NULL) 552ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_services_128b); 553ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 554ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_service_32b != NULL) 555ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 556ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_service_32b->p_uuid != NULL) 557ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_service_32b->p_uuid); 558ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_service_32b); 559ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 560ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 561ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_sol_services != NULL) 562ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 563ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_sol_services->p_uuid != NULL) 564ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_sol_services->p_uuid); 565ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_sol_services); 566ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 567ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 568ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_sol_service_32b != NULL) 569ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji { 570ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji if (p_multi_inst_cb->data.p_sol_service_32b->p_uuid != NULL) 571ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_sol_service_32b->p_uuid); 572ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_sol_service_32b); 573ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji } 574ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 57516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (p_multi_inst_cb->data.p_sol_service_128b != NULL) 576ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji GKI_freebuf(p_multi_inst_cb->data.p_sol_service_128b); 577ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji} 578ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji 579cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbachvoid btif_multi_adv_timer_ctrl(int client_if, TIMER_CBACK cb) 5809dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach{ 5819dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int inst_id = btif_multi_adv_instid_for_clientif(client_if); 5829dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (inst_id == INVALID_ADV_INST) 5839dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach return; 5849dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 5859dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int cbindex = btif_gattc_obtain_idx_for_datacb(inst_id, INST_ID_IDX); 5869dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (cbindex == INVALID_ADV_INST) 5879dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach return; 5889dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 5899dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 5909dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (p_multi_adv_data_cb == NULL) 5919dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach return; 5929dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 5939dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (cb == NULL) 5949dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach { 595cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer.in_use) 596cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach btu_stop_timer_oneshot(&p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer); 5979dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } else { 5989dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].timeout_s != 0) 5999dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach { 600cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach if (p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer.in_use) 601cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach btu_stop_timer_oneshot(&p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer); 602cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach 603cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach memset(&p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer, 0, sizeof(TIMER_LIST_ENT)); 604cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer.param = (UINT32)cb; 605cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer.data = (UINT32)client_if; 606cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach btu_start_timer_oneshot(&p_multi_adv_data_cb->inst_cb[cbindex].tle_limited_timer, 607cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach BTU_TTYPE_USER_FUNC, p_multi_adv_data_cb->inst_cb[cbindex].timeout_s); 6089dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } 6099dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach } 6109dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach} 6119dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 612ffb3960bb05f9acb0717d213612403487e9ad433Satya Calloji#endif 613