You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
5.6 KiB
171 lines
5.6 KiB
/****************************************************************************** |
|
* |
|
* Copyright (C) 2009-2013 Broadcom Corporation |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at: |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
* |
|
******************************************************************************/ |
|
|
|
#include "mediatek/bta/include/bta_gatts_co.h" |
|
|
|
#include <stdlib.h> |
|
#include <string.h> |
|
|
|
#include "bt_common.h" |
|
#include "osi/include/osi.h" |
|
#include "bta_api.h" |
|
#include "gatts_mtk.h" |
|
|
|
namespace vendor { |
|
namespace mediatek { |
|
namespace bluetooth { |
|
namespace stack { |
|
|
|
/***************************************************************************** |
|
* Local type definitions |
|
****************************************************************************/ |
|
|
|
#define BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE 50 |
|
|
|
typedef struct { |
|
bool enable; |
|
uint8_t num_clients; |
|
tBTA_GATTS_SRV_CHG srv_chg[BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE]; |
|
} __attribute__((packed)) btif_gatts_srv_chg_cb_t; |
|
|
|
/***************************************************************************** |
|
* Static variables |
|
****************************************************************************/ |
|
|
|
static btif_gatts_srv_chg_cb_t btif_gatts_srv_chg_cb; |
|
|
|
/***************************************************************************** |
|
* Static functions |
|
****************************************************************************/ |
|
|
|
static void btif_gatts_check_init(void) { |
|
btif_gatts_srv_chg_cb_t* p_cb = &btif_gatts_srv_chg_cb; |
|
|
|
if (!p_cb->enable) { |
|
memset(p_cb, 0, sizeof(btif_gatts_srv_chg_cb_t)); |
|
p_cb->enable = true; |
|
} |
|
} |
|
|
|
/***************************************************************************** |
|
* Externally called functions |
|
****************************************************************************/ |
|
|
|
void btif_gatts_add_bonded_dev_from_nv(const RawAddress& bda) { |
|
btif_gatts_srv_chg_cb_t* p_cb = &btif_gatts_srv_chg_cb; |
|
bool found = false; |
|
uint8_t i; |
|
|
|
btif_gatts_check_init(); |
|
|
|
if (false == gatts_srv_chg_ind_get(bda)) |
|
return; |
|
|
|
for (i = 0; i != p_cb->num_clients; ++i) { |
|
if (p_cb->srv_chg[i].bda == bda) { |
|
found = true; |
|
break; |
|
} |
|
} |
|
|
|
if (!found) { |
|
if (p_cb->num_clients < BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE) { |
|
p_cb->srv_chg[p_cb->num_clients].bda = bda; |
|
p_cb->srv_chg[p_cb->num_clients].srv_changed = false; |
|
p_cb->num_clients++; |
|
} |
|
} |
|
} |
|
|
|
/***************************************************************************** |
|
* Call-out functions |
|
****************************************************************************/ |
|
|
|
/******************************************************************************* |
|
* |
|
* Function bta_gatts_co_update_handle_range |
|
* |
|
* Description This callout function is executed by GATTS when a GATT |
|
* server handle range ios to be added or removed. |
|
* |
|
* Parameter is_add: true is to add a handle range; otherwise is to |
|
* delete. |
|
* p_hndl_range: handle range. |
|
* |
|
* Returns void. |
|
* |
|
******************************************************************************/ |
|
void bta_gatts_co_update_handle_range( |
|
UNUSED_ATTR bool is_add, UNUSED_ATTR tBTA_GATTS_HNDL_RANGE* p_hndl_range) {} |
|
|
|
/******************************************************************************* |
|
* |
|
* Function bta_gatts_co_srv_chg |
|
* |
|
* Description This call-out is to read/write/remove service change related |
|
* informaiton. The request consists of the cmd and p_req and |
|
* the response is returned in p_rsp |
|
* |
|
* Parameter cmd - request command |
|
* p_req - request paramters |
|
* p_rsp - response data for the request |
|
* |
|
* Returns true - if the request is processed successfully and |
|
* the response is returned in p_rsp. |
|
* false - if the request can not be processed |
|
* |
|
******************************************************************************/ |
|
bool bta_gatts_co_srv_chg(tBTA_GATTS_SRV_CHG_CMD cmd, |
|
tBTA_GATTS_SRV_CHG_REQ* p_req, |
|
tBTA_GATTS_SRV_CHG_RSP* p_rsp) { |
|
btif_gatts_srv_chg_cb_t* p_cb = &btif_gatts_srv_chg_cb; |
|
switch (cmd) { |
|
case GATTS_SRV_CHG_CMD_READ_NUM_CLENTS: |
|
p_rsp->num_clients = p_cb->num_clients; |
|
return true; |
|
case GATTS_SRV_CHG_CMD_READ_CLENT: |
|
if (p_req->client_read_index > p_cb->num_clients) return true; |
|
memcpy(&p_rsp->srv_chg, &p_cb->srv_chg[p_req->client_read_index - 1], |
|
sizeof(tGATTS_SRV_CHG)); |
|
return true; |
|
} |
|
return false; |
|
} |
|
|
|
/******************************************************************************* |
|
* |
|
* Function bta_gatts_co_load_handle_range |
|
* |
|
* Description This callout function is executed by GATTS when a GATT |
|
* server handle range is requested to be loaded from NV. |
|
* |
|
* Parameter |
|
* |
|
* Returns void. |
|
* |
|
******************************************************************************/ |
|
bool bta_gatts_co_load_handle_range( |
|
UNUSED_ATTR uint8_t index, |
|
UNUSED_ATTR tBTA_GATTS_HNDL_RANGE* p_handle_range) { |
|
return false; |
|
} |
|
|
|
} //namespace stack |
|
} //namespace bluetooth |
|
} //namespace mediatek |
|
} //namespace vendor
|
|
|