15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 2009-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#ifndef BTIF_HL_H
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_H
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
228f247258317bfd015806badce0cc41df901fa6e7Marie Janssen#include <hardware/bluetooth.h>
238f247258317bfd015806badce0cc41df901fa6e7Marie Janssen
24258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h"
256bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#include "bta_hl_api.h"
2678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#include "osi/include/alarm.h"
2749a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
296bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *  Constants & Macros
30ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
326bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_DATA_TYPE_NONE 0x0000
336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_DATA_TYPE_PULSE_OXIMETER 0x1004 /* from BT assigned number */
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_DATA_TYPE_BLOOD_PRESSURE_MON 0x1007
356bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_DATA_TYPE_BODY_THERMOMETER 0x1008
366bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_DATA_TYPE_BODY_WEIGHT_SCALE 0x100F
376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_DATA_TYPE_GLUCOSE_METER 0x1011
386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_DATA_TYPE_STEP_COUNTER 0x1068
396bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_DATA_TYPE_BCA 0x1014
406bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_DATA_TYPE_PEAK_FLOW 0x1015
416bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_DATA_TYPE_CARDIO 0x1029
426bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_DATA_TYPE_ACTIVITY_HUB 0x1047
436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_DATA_TYPE_AMM 0x1048
446bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
456bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_CCH_NUM_FILTER_ELEMS 3
466bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_APPLICATION_NAME_LEN 512
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
496bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *  Type definitions and return values
50ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
516bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
526bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef enum {
536bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_SOC_STATE_IDLE,
546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_SOC_STATE_W4_ADD,
556bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_SOC_STATE_W4_CONN,
566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_SOC_STATE_W4_READ,
576bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_SOC_STATE_W4_REL
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_soc_state_t;
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef enum {
616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_STATE_DISABLED,
626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_STATE_DISABLING,
636bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_STATE_ENABLED,
646bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_STATE_ENABLING,
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_state_t;
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef enum {
686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CCH_OP_NONE,
696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CCH_OP_MDEP_FILTERING,
706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CCH_OP_MATCHED_CTRL_PSM,
716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CCH_OP_DCH_OPEN,
726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CCH_OP_DCH_RECONNECT,
736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CCH_OP_DCH_ECHO_TEST
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_cch_op_t;
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
766bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef enum {
776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_PEND_DCH_OP_NONE,
786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_PEND_DCH_OP_DELETE_MDL,
796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_PEND_DCH_OP_OPEN,
806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_PEND_DCH_OP_RECONNECT
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_pend_dch_op_t;
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef enum { BTIF_HL_DCH_OP_NONE, BTIF_HL_DCH_OP_DISC } btif_hl_dch_op_t;
846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
856bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef enum {
866bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CHAN_CB_STATE_NONE,
876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING,
886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING,
896bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
906bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CHAN_CB_STATE_DISCONNECTING_PENDING,
916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CHAN_CB_STATE_DISCONNECTED_PENDING,
926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_CHAN_CB_STATE_DESTROYED_PENDING,
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_chan_cb_state_t;
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
956bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonenum {
966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_SEND_CONNECTED_CB,
976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_SEND_DISCONNECTED_CB,
986bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_REG_APP,
996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_UNREG_APP,
1006bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_HL_UPDATE_MDL,
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1036bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
1046bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t mdep_cfg_idx;
1056bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int data_type;
1066bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_MDEP_ID peer_mdep_id;
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_extra_mdl_cfg_t;
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1096bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
1106bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_MDL_CFG base;
1116bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_extra_mdl_cfg_t extra;
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_mdl_cfg_t;
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1146bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
1156bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool active;
1166bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t app_idx;
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_app_data_t;
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1196bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
1206bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int channel_id;
1219e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowski  RawAddress bd_addr;
1226bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t mdep_cfg_idx;
1236bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int max_s;
1246bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int socket_id[2];
1256bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t app_idx;
1266bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t mcl_idx;
1276bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t mdl_idx;
1286bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_soc_state_t state;
1296bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson} btif_hl_soc_cb_t;
1306bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
1316bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
1326bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t data_type;
1336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t max_tx_apdu_size;
1346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t max_rx_apdu_size;
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_data_type_cfg_t;
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
1386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t data_type;
1396bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_MDEP_ROLE peer_mdep_role;
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_filter_elem_t;
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1426bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
1436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t num_elems;
1446bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_filter_elem_t elem[BTIF_HL_CCH_NUM_FILTER_ELEMS];
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_cch_filter_t;
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1476bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
1486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool in_use;
1496bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t mdl_id;
1506bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_MDL_HANDLE mdl_handle;
1516bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_dch_op_t dch_oper;
1526bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_MDEP_ID local_mdep_id;
1536bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t local_mdep_cfg_idx;
1546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_DCH_CFG local_cfg;
1556bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_MDEP_ID peer_mdep_id;
1566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t peer_data_type;
1576bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_MDEP_ROLE peer_mdep_role;
1586bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_DCH_MODE dch_mode;
1596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_SEC sec_mask;
1606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool is_the_first_reliable;
1616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool delete_mdl;
1626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t mtu;
1636bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tMCA_CHNL_CFG chnl_cfg;
1646bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t tx_size;
1656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t* p_tx_pkt;
1666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t* p_rx_pkt;
1676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool cong;
1686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_soc_cb_t* p_scb;
1696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int channel_id;
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_mdl_cb_t;
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
1736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int channel_id;
1746bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int mdep_cfg_idx;
1756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool in_use;
1766bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_chan_cb_state_t cb_state;
1776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_pend_dch_op_t op;
1789e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowski  RawAddress bd_addr;
1796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool abort_pending;
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_pending_chan_cb_t;
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
1836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_mdl_cb_t mdl[BTA_HL_NUM_MDLS_PER_MCL];
1846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool in_use;
1856bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool is_connected;
1866bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t req_ctrl_psm;
1876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t ctrl_psm;
1886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t data_psm;
1899e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowski  RawAddress bd_addr;
1906bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t cch_mtu;
1916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_SEC sec_mask;
1926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_MCL_HANDLE mcl_handle;
1936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_pending_chan_cb_t pcb;
1946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool valid_sdp_idx;
1956bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t sdp_idx;
1966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_SDP sdp;
1976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_cch_op_t cch_oper;
1986bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  alarm_t* cch_timer;
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_mcl_cb_t;
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2016bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
2026bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool active;
2036bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t mdl_id;
2046bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t mdep_cfg_idx;
2059e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowski  RawAddress bd_addr;
2066bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int channel_id;
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_delete_mdl_t;
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2096bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
2106bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_mcl_cb_t mcb[BTA_HL_NUM_MCLS]; /* application Control Blocks */
2116bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool in_use;                           /* this CB is in use*/
2126bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool reg_pending;
2136bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t app_id;
2146bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
2156bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_SUP_FEATURE sup_feature;
2166bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_DCH_CFG channel_type[BTA_HL_NUM_MDEPS];
2176bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_SDP_INFO_IND sdp_info_ind;
2186bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_cch_filter_t filter;
2196bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
2206bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_mdl_cfg_t mdl_cfg[BTA_HL_NUM_MDL_CFGS];
2216bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int mdl_cfg_channel_id[BTA_HL_NUM_MDL_CFGS];
2226bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
2236bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_delete_mdl_t delete_mdl;
2246bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_DEVICE_TYPE dev_type;
2256bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_APP_HANDLE app_handle;
2266bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t sec_mask; /* Security mask for BTM_SetSecurityLevel() */
2276bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  char srv_name[BTA_SERVICE_NAME_LEN +
2286bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                1]; /* service name to be used in the SDP; null terminated*/
229f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson  char srv_desp[BTA_SERVICE_DESP_LEN + 1]; /* service description to be used in
230f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson                                              the SDP; null terminated */
2316bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  char provider_name[BTA_PROVIDER_NAME_LEN + 1]; /* provide name to be used in
2326bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                                    the SDP; null terminated */
2336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  char
2346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      application_name[BTIF_HL_APPLICATION_NAME_LEN + 1]; /* applicaiton name */
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_app_cb_t;
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
2386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool in_use;
2396bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t app_idx;
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_pending_reg_cb_t;
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTIF-HL control block  */
2436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
2446bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_app_cb_t acb[BTA_HL_NUM_APPS]; /* HL Control Blocks */
2456bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_CTRL_CBACK* p_ctrl_cback; /* pointer to control callback function */
2466bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t next_app_id;
2476bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint16_t next_channel_id;
2486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_state_t state;
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_cb_t;
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
251b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssentypedef uint8_t btif_hl_evt_t;
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2536bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct {
2546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int app_id;
2559e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowski  RawAddress bd_addr;
2566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int mdep_cfg_index;
2576bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int channel_id;
2586bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_chan_cb_state_t cb_state;
2596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  int fd;
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_send_chan_state_cb_t;
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct { uint8_t app_idx; } btif_hl_reg_t;
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef btif_hl_reg_t btif_hl_unreg_t;
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef btif_hl_reg_t btif_hl_update_mdl_t;
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef union {
2686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_send_chan_state_cb_t chan_cb;
2696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_reg_t reg;
2706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_unreg_t unreg;
2716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_update_mdl_t update_mdl;
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hl_evt_cb_t;
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *  Functions
276ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_GET_CB_PTR() &(btif_hl_cb)
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_GET_APP_CB_PTR(app_idx) &(btif_hl_cb.acb[(app_idx)])
2806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx) \
2816bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  &(btif_hl_cb.acb[(app_idx)].mcb[(mcl_idx)])
2826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx) \
2836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  &(btif_hl_cb.acb[(app_idx)].mcb[(mcl_idx)].mdl[mdl_idx])
2846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx) \
2856bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  &(btif_hl_cb.acb[app_idx].mcb[mcl_idx].pcb)
2866bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_GET_MDL_CFG_PTR(app_idx, item_idx) \
2876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  &(btif_hl_cb.acb[(app_idx)].mdl_cfg[(item_idx)])
2886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HL_GET_MDL_CFG_CHANNEL_ID_PTR(app_idx, item_idx) \
2896bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  &(btif_hl_cb.acb[(app_idx)].mdl_cfg_channel_id[(item_idx)])
2906bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
2916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern btif_hl_cb_t btif_hl_cb;
2926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern btif_hl_cb_t* p_btif_hl_cb;
2936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
2949e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowskiextern bool btif_hl_find_mcl_idx(uint8_t app_idx, const RawAddress& p_bd_addr,
2956bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                 uint8_t* p_mcl_idx);
2966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern bool btif_hl_find_app_idx(uint8_t app_id, uint8_t* p_app_idx);
2976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern bool btif_hl_find_avail_mcl_idx(uint8_t app_idx, uint8_t* p_mcl_idx);
298b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssenextern bool btif_hl_find_avail_mdl_idx(uint8_t app_idx, uint8_t mcl_idx,
2996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                       uint8_t* p_mdl_idx);
3006bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern bool btif_hl_find_mcl_idx_using_handle(tBTA_HL_MCL_HANDLE mcl_handle,
3016bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                              uint8_t* p_app_idx,
3026bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                              uint8_t* p_mcl_idx);
3036bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern bool btif_hl_save_mdl_cfg(uint8_t app_id, uint8_t item_idx,
3046bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                 tBTA_HL_MDL_CFG* p_mdl_cfg);
3056bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern bool btif_hl_delete_mdl_cfg(uint8_t app_id, uint8_t item_idx);
306b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssenextern bool btif_hl_find_mdl_idx_using_handle(tBTA_HL_MDL_HANDLE mdl_handle,
3076bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                              uint8_t* p_app_idx,
3086bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                              uint8_t* p_mcl_idx,
3096bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                              uint8_t* p_mdl_idx);
310b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssenextern void btif_hl_abort_pending_chan_setup(uint8_t app_idx, uint8_t mcl_idx);
311b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssenextern bool btif_hl_proc_pending_op(uint8_t app_idx, uint8_t mcl_idx);
3126bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern bool btif_hl_load_mdl_config(uint8_t app_id, uint8_t buffer_size,
3136bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                    tBTA_HL_MDL_CFG* p_mdl_buf);
314713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
316