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#include <stdlib.h>
22c7503db23f91676b2df732becb9579d5ccdcc7a7Ian Coolidge#include <string.h>
23258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h"
24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_gatts_co.h"
255cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "btif_util.h"
26d7ffd64accbd50a27289a388856e56244ccbb5daMyles Watson#include "osi/include/osi.h"
27ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
28ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************
296bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *  Local type definitions
306bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ****************************************************************************/
31ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
32ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE 50
33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
356bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool enable;
366bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t num_clients;
376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_GATTS_SRV_CHG srv_chg[BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE];
38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} __attribute__((packed)) btif_gatts_srv_chg_cb_t;
39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************
416bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *  Static variables
426bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ****************************************************************************/
43ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
44ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gatts_srv_chg_cb_t btif_gatts_srv_chg_cb;
45ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
46ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************
476bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *  Static functions
486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ****************************************************************************/
49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
506bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonstatic void btif_gatts_check_init(void) {
516bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_gatts_srv_chg_cb_t* p_cb = &btif_gatts_srv_chg_cb;
52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
536bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  if (!p_cb->enable) {
546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    memset(p_cb, 0, sizeof(btif_gatts_srv_chg_cb_t));
556bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    p_cb->enable = true;
566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  }
57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
59ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************
606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *  Externally called functions
616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ****************************************************************************/
626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
636bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid btif_gatts_add_bonded_dev_from_nv(BD_ADDR bda) {
646bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_gatts_srv_chg_cb_t* p_cb = &btif_gatts_srv_chg_cb;
656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool found = false;
666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t i;
676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_gatts_check_init();
696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  for (i = 0; i != p_cb->num_clients; ++i) {
716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    if (!memcmp(p_cb->srv_chg[i].bda, bda, sizeof(BD_ADDR))) {
726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      found = true;
736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      break;
74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  }
76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  if (!found) {
786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    if (p_cb->num_clients < BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE) {
796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      bdcpy(p_cb->srv_chg[p_cb->num_clients].bda, bda);
806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      p_cb->srv_chg[p_cb->num_clients].srv_changed = false;
816bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      p_cb->num_clients++;
82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  }
84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************
876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *  Call-out functions
886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ****************************************************************************/
89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function         bta_gatts_co_update_handle_range
936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description      This callout function is executed by GATTS when a GATT
95f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                  server handle range ios to be added or removed.
966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameter        is_add: true is to add a handle range; otherwise is to
98f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                          delete.
996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                  p_hndl_range: handle range.
1006bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1016bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns          void.
1026bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1036bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
1049008888d24407541aa383aa4bd363a40abbf954bMyles Watsonvoid bta_gatts_co_update_handle_range(
1059008888d24407541aa383aa4bd363a40abbf954bMyles Watson    UNUSED_ATTR bool is_add, UNUSED_ATTR tBTA_GATTS_HNDL_RANGE* p_hndl_range) {}
106ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
107ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
1086bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1096bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function         bta_gatts_co_srv_chg
1106bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1116bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description      This call-out is to read/write/remove service change related
1126bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                  informaiton. The request consists of the cmd and p_req and
113f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                  the response is returned in p_rsp
1146bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1156bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameter        cmd - request command
1166bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                  p_req - request paramters
1176bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                  p_rsp - response data for the request
1186bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1196bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns          true - if the request is processed successfully and
1206bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                         the response is returned in p_rsp.
1216bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                  false - if the request can not be processed
1226bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1236bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
124d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonbool bta_gatts_co_srv_chg(UNUSED_ATTR tBTA_GATTS_SRV_CHG_CMD cmd,
1259008888d24407541aa383aa4bd363a40abbf954bMyles Watson                          UNUSED_ATTR tBTA_GATTS_SRV_CHG_REQ* p_req,
1269008888d24407541aa383aa4bd363a40abbf954bMyles Watson                          UNUSED_ATTR tBTA_GATTS_SRV_CHG_RSP* p_rsp) {
1276bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  return false;
128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
129ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
130ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
1316bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1326bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function         bta_gatts_co_load_handle_range
1336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description      This callout function is executed by GATTS when a GATT
135f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                  server handle range is requested to be loaded from NV.
1366bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameter
1386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1396bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns          void.
1406bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1416bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
1429008888d24407541aa383aa4bd363a40abbf954bMyles Watsonbool bta_gatts_co_load_handle_range(
1439008888d24407541aa383aa4bd363a40abbf954bMyles Watson    UNUSED_ATTR uint8_t index,
1449008888d24407541aa383aa4bd363a40abbf954bMyles Watson    UNUSED_ATTR tBTA_GATTS_HNDL_RANGE* p_handle_range) {
1456bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  return false;
146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
147