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