1dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie/******************************************************************************
2dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *
3dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  Copyright (C) 2009-2013 Broadcom Corporation
4dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *
5dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  Licensed under the Apache License, Version 2.0 (the "License");
6dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  you may not use this file except in compliance with the License.
7dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  You may obtain a copy of the License at:
8dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *
9dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  http://www.apache.org/licenses/LICENSE-2.0
10dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *
11dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  Unless required by applicable law or agreed to in writing, software
12dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  distributed under the License is distributed on an "AS IS" BASIS,
13dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  See the License for the specific language governing permissions and
15dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  limitations under the License.
16dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *
17dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie ******************************************************************************/
18ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
19ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_api.h"
20ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
21ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if( defined BLE_INCLUDED ) && (BLE_INCLUDED == TRUE)
22ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if( defined BTA_GATT_INCLUDED ) && (BTA_GATT_INCLUDED == TRUE)
23ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdlib.h>
25ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "gki.h"
26ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bd.h"
27ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_gatts_co.h"
285cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "btif_util.h"
29ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
30ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************
31ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Local type definitions
32ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*****************************************************************************/
33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
34ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE 50
35ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
36ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
37ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BOOLEAN             enable;
39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8               num_clients;
40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTS_SRV_CHG  srv_chg[BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE];
41ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} __attribute__((packed)) btif_gatts_srv_chg_cb_t;
42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
43ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************
44ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Static variables
45ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*****************************************************************************/
46ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
47ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gatts_srv_chg_cb_t btif_gatts_srv_chg_cb;
48ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************
50ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Static functions
51ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*****************************************************************************/
52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
53ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gatts_check_init(void)
54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gatts_srv_chg_cb_t *p_cb= &btif_gatts_srv_chg_cb;
56ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (!p_cb->enable)
58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
59ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta       memset(p_cb, 0, sizeof(btif_gatts_srv_chg_cb_t));
60ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta       p_cb->enable = TRUE;
61ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
62ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
63ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************
65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Externally called functions
66ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*****************************************************************************/
67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid btif_gatts_add_bonded_dev_from_nv(BD_ADDR bda)
69ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
70ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gatts_srv_chg_cb_t *p_cb= &btif_gatts_srv_chg_cb;
71ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BOOLEAN                 found = FALSE;
72ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8                   i;
73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gatts_check_init();
75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    for (i=0; i != p_cb->num_clients; ++i)
77ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
78ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (!memcmp(p_cb->srv_chg[i].bda,  bda, sizeof(BD_ADDR)))
79ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
80ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            found = TRUE;
81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
83ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (!found)
86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (p_cb->num_clients < BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE)
88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(p_cb->srv_chg[p_cb->num_clients].bda, bda);
90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_cb->srv_chg[p_cb->num_clients].srv_changed = FALSE;
91ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_cb->num_clients++;
92ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
93ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
94ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
95ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
96ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************
97ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Call-out functions
98ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*****************************************************************************/
99ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
100ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
101ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
102ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_gatts_co_update_handle_range
103ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
104ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This callout function is executed by GATTS when a GATT server
105ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  handle range ios to be added or removed.
106ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
107ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameter        is_add: true is to add a handle range; otherwise is to delete.
108ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  p_hndl_range: handle range.
109ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void.
111ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_gatts_co_update_handle_range(BOOLEAN is_add, tBTA_GATTS_HNDL_RANGE *p_hndl_range)
114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1155cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(is_add);
1165cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_hndl_range);
117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_gatts_co_srv_chg
122ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
123ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This call-out is to read/write/remove service change related
124ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  informaiton. The request consists of the cmd and p_req and the
125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  response is returned in p_rsp
126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameter        cmd - request command
128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  p_req - request paramters
129ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  p_rsp - response data for the request
130ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
131ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          TRUE - if the request is processed successfully and
132ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                         the response is returned in p_rsp.
133ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  FASLE - if the request can not be processed
134ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
135ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
136ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN bta_gatts_co_srv_chg(tBTA_GATTS_SRV_CHG_CMD cmd,
137ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                             tBTA_GATTS_SRV_CHG_REQ *p_req,
138ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                             tBTA_GATTS_SRV_CHG_RSP *p_rsp)
139ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1405cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(cmd);
1415cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_req);
1425cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_rsp);
1435cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen
144ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return FALSE;
145ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
147ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
148ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
149ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_gatts_co_load_handle_range
150ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
151ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This callout function is executed by GATTS when a GATT server
152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  handle range is requested to be loaded from NV.
153ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameter
155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
156ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void.
157ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
158ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
159ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN bta_gatts_co_load_handle_range(UINT8 index,
160ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                       tBTA_GATTS_HNDL_RANGE *p_handle_range)
161ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1625cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(index);
1635cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_handle_range);
1645cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen
1655cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    return FALSE;
166ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
167ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
168ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
169