15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 2005-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/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This file contains BTA HID Host internal definitions
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTA_HH_INT_H
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_INT_H
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_sys.h"
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h"
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "utl.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hh_api.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
332e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if BTA_HH_LE_INCLUDED == TRUE
342e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#include "bta_gatt_api.h"
352e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
362e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* can be moved to bta_api.h */
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_MAX_RPT_CHARS    8
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
402e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (BTA_GATT_INCLUDED == FALSE || BLE_INCLUDED == FALSE)
412e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#undef BTA_HH_LE_INCLUDED
422e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_LE_INCLUDED      FALSE
432e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state machine events, these events are handled by the state machine */
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_API_OPEN_EVT     = BTA_SYS_EVT_START(BTA_ID_HH),
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_API_CLOSE_EVT,
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_INT_OPEN_EVT,
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_INT_CLOSE_EVT,
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_INT_DATA_EVT,
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_INT_CTRL_DATA,
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_INT_HANDSK_EVT,
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_SDP_CMPL_EVT,
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_API_WRITE_DEV_EVT,
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_API_GET_DSCP_EVT,
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_API_MAINT_DEV_EVT,
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_OPEN_CMPL_EVT,
602e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
612e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_GATT_CLOSE_EVT,
622e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_GATT_OPEN_EVT,
632e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_START_ENC_EVT,
642e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_ENC_CMPL_EVT,
652e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_GATT_READ_CHAR_CMPL_EVT,
662e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_GATT_WRITE_CHAR_CMPL_EVT,
672e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_GATT_READ_DESCR_CMPL_EVT,
682e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_GATT_WRITE_DESCR_CMPL_EVT,
692e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_API_SCPP_UPDATE_EVT,
707051db3a486aae771d9b5a81c3546790f86ede34Zhihai Xu    BTA_HH_GATT_ENC_CMPL_EVT,
712e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* not handled by execute state machine */
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_API_ENABLE_EVT,
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_API_DISABLE_EVT,
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_DISC_CMPL_EVT
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT16 tBTA_HH_INT_EVT;         /* HID host internal events */
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_INVALID_EVT      (BTA_HH_DISC_CMPL_EVT + 1)
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* event used to map between BTE event and BTA event */
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_FST_TRANS_CB_EVT         BTA_HH_GET_RPT_EVT
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_FST_BTE_TRANS_EVT        HID_TRANS_GET_REPORT
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* sub event code used for device maintainence API call */
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_ADD_DEV          0
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_REMOVE_DEV       1
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state machine states */
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_NULL_ST,
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_IDLE_ST,
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_W4_CONN_ST,
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_CONN_ST
972e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
982e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,BTA_HH_W4_SEC
992e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
1002e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,BTA_HH_INVALID_ST    /* Used to check invalid states before executing SM function */
1012e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tBTA_HH_STATE;
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* data structure used to send a command/data to HID device */
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR           hdr;
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8            t_type;
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8            param;
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8            rpt_id;
1122e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
1132e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8            srvc_id;
1142e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16           data;
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR           *p_data;
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}tBTA_HH_CMD_DATA;
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* data type for BTA_HH_API_ENABLE_EVT */
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR              hdr;
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               sec_mask;
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               service_name[BTA_SERVICE_NAME_LEN+1];
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_CBACK   *p_cback;
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_HH_API_ENABLE;
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR          hdr;
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR         bd_addr;
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           sec_mask;
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_PROTO_MODE  mode;
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}tBTA_HH_API_CONN;
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* internal event data from BTE HID callback */
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR          hdr;
1402e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BD_ADDR         addr;
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32          data;
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR          *p_data;
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}tBTA_HH_CBACK_DATA;
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR              hdr;
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR             bda;
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16              attr_mask;
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16              sub_event;
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               sub_class;
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               app_id;
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_DEV_DSCP_INFO      dscp_info;
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}tBTA_HH_MAINT_DEV;
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1562e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if BTA_HH_LE_INCLUDED == TRUE
1572e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachtypedef struct
1582e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach{
1592e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BT_HDR              hdr;
1602e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT16              conn_id;
1612e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    tBTA_GATT_REASON    reason;         /* disconnect reason code, not useful when connect event is reported */
1622e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
1632e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach}tBTA_HH_LE_CLOSE;
1642e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
1652e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachtypedef struct
1662e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach{
1672e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BT_HDR              hdr;
1682e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT16              scan_int;
1692e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT16              scan_win;
1702e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach}tBTA_HH_SCPP_UPDATE;
1712e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* union of all event data types */
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef union
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR                   hdr;
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_API_ENABLE       api_enable;
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_API_CONN         api_conn;
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_CMD_DATA         api_sndcmd;
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_CBACK_DATA       hid_cback;
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_STATUS           status;
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_MAINT_DEV        api_maintdev;
1822e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if BTA_HH_LE_INCLUDED == TRUE
1832e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    tBTA_HH_LE_CLOSE         le_close;
1842e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    tBTA_GATTC_OPEN          le_open;
1852e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    tBTA_HH_SCPP_UPDATE      le_scpp_update;
1867051db3a486aae771d9b5a81c3546790f86ede34Zhihai Xu    tBTA_GATTC_ENC_CMPL_CB   le_enc_cmpl;
1872e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_HH_DATA;
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1902e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
1912e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachtypedef struct
1922e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach{
1932e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8                   index;
1942e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BOOLEAN                 in_use;
1952e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8                   inst_id;    /* share service instance ID and report instance ID, as
1962e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach                                           hi 4 for service instance ID, low 4 as charatceristic instance ID */
197433fe016392c7ae003033530f1b3994f2ddad313Chaojing Sun    tBTA_HH_RPT_TYPE        rpt_type;
1982e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT16                  uuid;
199433fe016392c7ae003033530f1b3994f2ddad313Chaojing Sun    UINT8                   prop;
200433fe016392c7ae003033530f1b3994f2ddad313Chaojing Sun    UINT8                   rpt_id;
201433fe016392c7ae003033530f1b3994f2ddad313Chaojing Sun    BOOLEAN                 client_cfg_exist;
202433fe016392c7ae003033530f1b3994f2ddad313Chaojing Sun    UINT16                  client_cfg_value;
2032e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach}tBTA_HH_LE_RPT;
2042e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2052e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#ifndef BTA_HH_LE_RPT_MAX
206ac1d544eac1b849dd4105bd69e59ffeca00a43a6Zhihai Xu#define BTA_HH_LE_RPT_MAX       20
2072e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
2082e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2092e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachtypedef struct
2102e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach{
2112e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BOOLEAN                 in_use;
212433fe016392c7ae003033530f1b3994f2ddad313Chaojing Sun    tBTA_HH_LE_RPT          report[BTA_HH_LE_RPT_MAX];
2132e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2142e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_LE_PROTO_MODE_BIT        0x01
2152e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_LE_CP_BIT                0x02
216433fe016392c7ae003033530f1b3994f2ddad313Chaojing Sun    UINT8                   option_char; /* control point char exisit or not */
2172e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2182e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BOOLEAN                 expl_incl_srvc;
2192e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8                   incl_srvc_inst; /* assuming only one included service : battery service */
2202e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8                   cur_expl_char_idx; /* currently discovering service index */
2212e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8                   *rpt_map;
2222e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT16                  ext_rpt_ref;
2232e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    tBTA_HH_DEV_DESCR       descriptor;
2242e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2252e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach}tBTA_HH_LE_HID_SRVC;
2262e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2272e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#ifndef BTA_HH_LE_HID_SRVC_MAX
2282e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_LE_HID_SRVC_MAX      1
2292e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
2302e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2312e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* convert a HID handle to the LE CB index */
2322e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_GET_LE_CB_IDX(x)         (((x) >> 4) - 1)
2332e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* convert a GATT connection ID to HID device handle, it is the hi 4 bits of a UINT8 */
2342e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_GET_LE_DEV_HDL(x)        (UINT8)(((x)  + 1) << 4)
2352e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* check to see if th edevice handle is a LE device handle */
2362e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_IS_LE_DEV_HDL(x)        ((x) & 0xf0)
2372e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_IS_LE_DEV_HDL_VALID(x)  (((x)>>4) < BTA_HH_LE_MAX_KNOWN)
2382e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
2392e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* device control block */
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_DEV_DSCP_INFO  dscp_info;      /* report descriptor and DI information */
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR             addr;           /* BD-Addr of the HID device */
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16              attr_mask;      /* attribute mask */
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16              w4_evt;         /* W4_handshake event name */
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               index;          /* index number referenced to handle index */
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               sub_class;      /* Cod sub class */
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               sec_mask;       /* security mask */
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               app_id;         /* application ID for this connection */
2512e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8               hid_handle;     /* device handle : low 4 bits for regular HID: HID_HOST_MAX_DEVICES can not exceed 15;
2522e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach                                                            high 4 bits for LE HID: GATT_MAX_PHY_CHANNEL can not exceed 15 */
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             vp;             /* virtually unplug flag */
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             in_use;         /* control block currently in use */
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             incoming_conn;  /* is incoming connection? */
2562e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8               incoming_hid_handle;  /* temporary handle for incoming connection? */
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             opened;         /* TRUE if device successfully opened HID connection */
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_PROTO_MODE  mode;           /* protocol mode */
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_STATE       state;          /* CB state */
2602e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2612e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (BTA_HH_LE_INCLUDED == TRUE)
2622e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_LE_DISC_NONE     0x00
2632e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_LE_DISC_HIDS     0x01
2642e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_LE_DISC_DIS      0x02
2652e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_LE_DISC_SCPS     0x04
2662e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2672e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8               disc_active;
2682e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    tBTA_HH_STATUS      status;
269f37767a17b2d80828f7ac4fa170859cb9e2f0bc6Andre Eisenbach    tBTA_GATT_REASON    reason;
2702e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BOOLEAN             is_le_device;
2712e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    tBTA_HH_LE_HID_SRVC hid_srvc[BTA_HH_LE_HID_SRVC_MAX];
2722e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT16              conn_id;
2732e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BOOLEAN             in_bg_conn;
2742e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8               total_srvc;
2752e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8               clt_cfg_idx;
2762e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8               cur_srvc_index; /* currently discovering service index */
2772e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BOOLEAN             scps_supported;
2782e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2792e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_LE_SCPS_NOTIFY_NONE    0
2802e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_LE_SCPS_NOTIFY_SPT  0x01
2812e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define BTA_HH_LE_SCPS_NOTIFY_ENB  0x02
2822e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8               scps_notify;   /* scan refresh supported/notification enabled */
2832e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
2842e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
2857051db3a486aae771d9b5a81c3546790f86ede34Zhihai Xu    BOOLEAN             security_pending;
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_HH_DEV_CB;
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* key board parsing control block */
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             mod_key[4]; /* ctrl, shift(upper), Alt, GUI */
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             num_lock;
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             caps_lock;
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               last_report[BTA_HH_MAX_RPT_CHARS];
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_HH_KB_CB;
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Main Control Block
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_KB_CB           kb_cb;                  /* key board control block,
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                       suppose BTA will connect
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                       to only one keyboard at
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                        the same time */
306ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_HH_DEV_CB          kdev[BTA_HH_MAX_DEVICE]; /* device control block */
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_DEV_CB*         p_cur;              /* current device control
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                       block idx, used in sdp */
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   cb_index[BTA_HH_MAX_KNOWN]; /* maintain a CB index
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                        map to dev handle */
3112e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
3122e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    UINT8                   le_cb_index[BTA_HH_MAX_DEVICE]; /* maintain a CB index map to LE dev handle */
3132e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    tBTA_GATTC_IF           gatt_if;
3142e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_CBACK       *p_cback;               /* Application callbacks */
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSDP_DISCOVERY_DB*      p_disc_db;
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   trace_level;            /* tracing level */
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   cnt_num;                /* connected device number */
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 w4_disable;             /* w4 disable flag */
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_HH_CB;
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_DYNAMIC_MEMORY == FALSE
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tBTA_HH_CB  bta_hh_cb;
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tBTA_HH_CB *bta_hh_cb_ptr;
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define bta_hh_cb (*bta_hh_cb_ptr)
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* from bta_hh_cfg.c */
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tBTA_HH_CFG *p_bta_hh_cfg;
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Function prototypes
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern BOOLEAN bta_hh_hdl_event(BT_HDR *p_msg);
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_sm_execute(tBTA_HH_DEV_CB *p_cb, UINT16 event,
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              tBTA_HH_DATA *p_data);
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* action functions */
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_api_disc_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_open_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_close_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_data_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA * p_data);
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_ctrl_dat_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA * p_data);
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_start_sdp(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_sdp_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_write_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_get_dscp_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_handsk_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_maint_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_open_cmpl_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3532e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_open_failure(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* utility functions */
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern UINT8  bta_hh_find_cb(BD_ADDR bda);
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_parse_keybd_rpt(tBTA_HH_BOOT_RPT *p_kb_data,
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             UINT8 *p_report, UINT16 report_len);
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_parse_mice_rpt(tBTA_HH_BOOT_RPT *p_kb_data,
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  UINT8 *p_report, UINT16 report_len);
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern BOOLEAN bta_hh_tod_spt(tBTA_HH_DEV_CB *p_cb,UINT8 sub_class);
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_clean_up_kdev(tBTA_HH_DEV_CB *p_cb);
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_add_device_to_list(tBTA_HH_DEV_CB *p_cb, UINT8 handle,
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      UINT16 attr_mask,
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      tHID_DEV_DSCP_INFO *p_dscp_info,
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      UINT8 sub_class, UINT16 max_latency, UINT16 min_tout, UINT8 app_id);
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_update_di_info(tBTA_HH_DEV_CB *p_cb, UINT16 vendor_id, UINT16 product_id,
369ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                           UINT16 version, UINT8 flag);
370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern void bta_hh_cleanup_disable(tBTA_HH_STATUS status);
371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern UINT8 bta_hh_dev_handle_to_cb_idx(UINT8 dev_handle);
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* action functions used outside state machine */
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_api_enable(tBTA_HH_DATA *p_data);
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_api_disable(void);
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_disc_cmpl(void);
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern tBTA_HH_STATUS bta_hh_read_ssr_param(BD_ADDR bd_addr, UINT16 *p_max_ssr_lat, UINT16 *p_min_ssr_tout);
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3812e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* functions for LE HID */
3822e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_enable(void);
38336b686527892172cb44091d160b7d2806d49fc76Zhihai Xuextern BOOLEAN bta_hh_le_is_hh_gatt_if(tBTA_GATTC_IF client_if);
3842e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_deregister(void);
3852e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern BOOLEAN bta_hh_is_le_device(tBTA_HH_DEV_CB *p_cb, BD_ADDR remote_bda);
3862e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_open_conn(tBTA_HH_DEV_CB *p_cb, BD_ADDR remote_bda);
3872e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_api_disc_act(tBTA_HH_DEV_CB *p_cb);
3882e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_get_dscp_act(tBTA_HH_DEV_CB *p_cb);
3892e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_write_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3902e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern UINT8 bta_hh_le_add_device(tBTA_HH_DEV_CB *p_cb, tBTA_HH_MAINT_DEV *p_dev_info);
3912e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_remove_dev_bg_conn(tBTA_HH_DEV_CB *p_cb);
3922e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_open_fail(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3932e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_gatt_open(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3942e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_gatt_close(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
3952e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_start_security(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
3962e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_start_srvc_discovery(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
3972e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_w4_le_read_char_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
3982e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_read_char_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
3992e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_w4_le_read_descr_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
4002e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_read_descr_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
4012e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_w4_le_write_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
4022e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_write_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
4032e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_write_char_descr_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
4042e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_start_security(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
4052e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_security_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
4062e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachextern void bta_hh_le_update_scpp(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
4077051db3a486aae771d9b5a81c3546790f86ede34Zhihai Xuextern void bta_hh_le_notify_enc_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
408433fe016392c7ae003033530f1b3994f2ddad313Chaojing Sunextern void bta_hh_ci_load_rpt (tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf);
4092e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bta_hh_trace_dev_db(void);
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
416