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