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