15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 2003-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This file contains the GATT client utility function.
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h"
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE)
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "utl.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_sys.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gatts_int.h"
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h"
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const UINT8  base_uuid[LEN_UUID_128] = {0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80,
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_gatt_convert_uuid16_to_uuid128
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Convert a 16 bits UUID to be an standard 128 bits one.
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          TRUE if two uuid match; FALSE otherwise.
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_gatt_convert_uuid16_to_uuid128(UINT8 uuid_128[LEN_UUID_128], UINT16 uuid_16)
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   *p = &uuid_128[LEN_UUID_128 - 4];
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memcpy (uuid_128, base_uuid, LEN_UUID_128);
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM(p, uuid_16);
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_gatts_alloc_srvc_cb
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      allocate a service control block.
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          pointer to the control block, or otherwise NULL when failed.
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB *p_cb, UINT8 rcb_idx)
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < BTA_GATTS_MAX_SRVC_NUM; i ++)
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!p_cb->srvc_cb[i].in_use)
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_cb->srvc_cb[i].in_use = TRUE;
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_cb->srvc_cb[i].rcb_idx = rcb_idx;
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return i;
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BTA_GATTS_INVALID_APP;
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_gatts_find_app_rcb_by_app_if
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      find the index of the application control block by app ID.
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          pointer to the control block if success, otherwise NULL
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATTS_RCB *bta_gatts_find_app_rcb_by_app_if(tBTA_GATTS_IF server_if)
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_RCB *p_reg;
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0, p_reg = bta_gatts_cb.rcb; i < BTA_GATTS_MAX_APP_NUM; i ++, p_reg++)
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_reg->in_use && p_reg->gatt_if == server_if)
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return p_reg;
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return NULL;
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_gatts_find_app_rcb_idx_by_app_if
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      find the index of the application control block by app ID.
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          index of the control block, or BTA_GATTS_INVALID_APP if failed.
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_IF server_if)
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < BTA_GATTS_MAX_APP_NUM; i ++)
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_cb->rcb[i].in_use && p_cb->rcb[i].gatt_if == server_if)
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return i;
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BTA_GATTS_INVALID_APP;
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_gatts_find_srvc_cb_by_srvc_id
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      find the service control block by service ID.
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          pointer to the rcb.
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_srvc_id(tBTA_GATTS_CB *p_cb, UINT16 service_id)
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
136e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_gatts_find_srvc_cb_by_srvc_id  service_id=%d", service_id);
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < BTA_GATTS_MAX_SRVC_NUM; i ++)
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_cb->srvc_cb[i].in_use &&
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_cb->srvc_cb[i].service_id == service_id)
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
142e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_DEBUG("bta_gatts_find_srvc_cb_by_srvc_id  found service cb index =%d", i);
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return &p_cb->srvc_cb[i];
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return NULL;
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_gatts_find_srvc_cb_by_attr_id
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      find the service control block by attribute ID.
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          pointer to the rcb.
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_attr_id(tBTA_GATTS_CB *p_cb, UINT16 attr_id)
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < (BTA_GATTS_MAX_SRVC_NUM); i ++)
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (/* middle service */
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (i < (BTA_GATTS_MAX_SRVC_NUM - 1) &&
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             p_cb->srvc_cb[i].in_use &&
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             p_cb->srvc_cb[i + 1].in_use &&
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             attr_id >= p_cb->srvc_cb[i].service_id &&
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             attr_id < p_cb->srvc_cb[i + 1].service_id) ||
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* last active service */
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (i < (BTA_GATTS_MAX_SRVC_NUM - 1) &&
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             p_cb->srvc_cb[i].in_use &&
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             !p_cb->srvc_cb[i + 1].in_use &&
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             attr_id >= p_cb->srvc_cb[i].service_id)    ||
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* last service incb */
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (i == (BTA_GATTS_MAX_SRVC_NUM - 1) &&
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             attr_id >= p_cb->srvc_cb[i].service_id)
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           )
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return &p_cb->srvc_cb[i];
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return NULL;
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_gatts_uuid_compare
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Compare two UUID to see if they are the same.
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          TRUE if two uuid match; FALSE otherwise.
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN bta_gatts_uuid_compare(tBT_UUID tar, tBT_UUID src)
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  su[LEN_UUID_128], tu[LEN_UUID_128];
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  *ps, *pt;
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* any of the UUID is unspecified */
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (src.len == 0 || tar.len == 0)
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return TRUE;
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If both are 16-bit, we can do a simple compare */
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (src.len == 2 && tar.len == 2)
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return src.uu.uuid16 == tar.uu.uuid16;
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* One or both of the UUIDs is 128-bit */
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (src.len == LEN_UUID_16)
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* convert a 16 bits UUID to 128 bits value */
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_gatt_convert_uuid16_to_uuid128(su, src.uu.uuid16);
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ps = su;
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ps = src.uu.uuid128;
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (tar.len == LEN_UUID_16)
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* convert a 16 bits UUID to 128 bits value */
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_gatt_convert_uuid16_to_uuid128(tu, tar.uu.uuid16);
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        pt = tu;
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        pt = tar.uu.uuid128;
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return(memcmp(ps, pt, LEN_UUID_128) == 0);
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
236