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 the HID host main functions and state machine.
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h"
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(BTA_HH_INCLUDED) && (BTA_HH_INCLUDED == TRUE)
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hh_api.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hh_int.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h"
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Constants and types
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state machine action enumeration list */
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_API_DISC_ACT,        /* HID host process API close action    */
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_OPEN_ACT,            /* HID host process BTA_HH_EVT_OPEN     */
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_CLOSE_ACT,           /* HID host process BTA_HH_EVT_CLOSE    */
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_DATA_ACT,            /* HID host receive data report         */
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_CTRL_DAT_ACT,
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_HANDSK_ACT,
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_START_SDP,           /* HID host inquery                     */
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_SDP_CMPL,
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_WRITE_DEV_ACT,
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_GET_DSCP_ACT,
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_MAINT_DEV_ACT,
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_OPEN_CMPL_ACT,
542e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_OPEN_FAILURE,
552e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
562e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_GATT_CLOSE,
572e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_LE_OPEN_FAIL,
582e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_GATT_OPEN,
592e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_W4_LE_READ_CHAR,
602e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_LE_READ_CHAR,
612e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_W4_LE_READ_DESCR,
622e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_LE_READ_DESCR,
632e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_W4_LE_WRITE,
642e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_LE_WRITE,
652e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_WRITE_DESCR,
662e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_START_SEC,
672e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_SEC_CMPL,
682e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTA_HH_LE_UPDATE_SCPP,
692e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
702e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_NUM_ACTIONS
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_IGNORE       BTA_HH_NUM_ACTIONS
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for action functions */
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*tBTA_HH_ACTION)(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* action functions */
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTA_HH_ACTION bta_hh_action[] =
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_api_disc_act,
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_open_act,
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_close_act,
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_data_act,
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_ctrl_dat_act,
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_handsk_act,
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_start_sdp,
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_sdp_cmpl,
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_write_dev_act,
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_get_dscp_act,
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_maint_dev_act,
932e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    bta_hh_open_cmpl_act,
942e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    bta_hh_open_failure
952e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
962e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_gatt_close
972e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_le_open_fail
982e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_gatt_open
992e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_w4_le_read_char_cmpl
1002e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_le_read_char_cmpl
1012e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_w4_le_read_descr_cmpl
1022e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_le_read_descr_cmpl
1032e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_w4_le_write_cmpl
1042e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_le_write_cmpl
1052e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_le_write_char_descr_cmpl
1062e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_start_security
1072e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_security_cmpl
1082e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_le_update_scpp
1092e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table information */
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_ACTION                   0       /* position of action */
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_NEXT_STATE               1       /* position of next state */
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_NUM_COLS                 2       /* number of columns */
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for idle state */
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_hh_st_idle[][BTA_HH_NUM_COLS] =
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event                          Action                    Next state */
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_OPEN_EVT      */    {BTA_HH_START_SDP,     BTA_HH_W4_CONN_ST },
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_CLOSE_EVT     */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_OPEN_EVT      */    {BTA_HH_OPEN_ACT,      BTA_HH_W4_CONN_ST },
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_CLOSE_EVT     */    {BTA_HH_CLOSE_ACT,     BTA_HH_IDLE_ST    },
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_DATA_EVT      */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_CTRL_DATA     */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_HANDSK_EVT    */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_SDP_CMPL_EVT      */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_WRITE_DEV_EVT */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_GET_DSCP_EVT  */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_MAINT_DEV_EVT */    {BTA_HH_MAINT_DEV_ACT, BTA_HH_IDLE_ST    },
132ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/* BTA_HH_OPEN_CMPL_EVT        */  {BTA_HH_OPEN_CMPL_ACT, BTA_HH_CONN_ST    }
1332e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
1342e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_GATT_CLOSE_EVT    */   ,{BTA_HH_IGNORE,         BTA_HH_IDLE_ST    }
1352e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_GATT_OPEN_EVT    */    ,{BTA_HH_GATT_OPEN,      BTA_HH_W4_CONN_ST }
1362e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_START_ENC_EVT    */    ,{BTA_HH_IGNORE,         BTA_HH_IDLE_ST    }
1372e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_ENC_CMPL_EVT     */    ,{BTA_HH_IGNORE,         BTA_HH_IDLE_ST    }
1382e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* READ_CHAR_CMPL_EVT */         ,{BTA_HH_IGNORE,       BTA_HH_IDLE_ST  }
1392e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_GATT_WRITE_CMPL_EVT*/    ,{BTA_HH_IGNORE,       BTA_HH_IDLE_ST  }
1402e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* READ_DESCR_CMPL_EVT */        ,{BTA_HH_IGNORE,           BTA_HH_IDLE_ST  }
1412e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* WRITE_DESCR_CMPL_EVT */       ,{BTA_HH_IGNORE,           BTA_HH_IDLE_ST   }
1422e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* SCPP_UPDATE_EVT */            ,{BTA_HH_IGNORE,           BTA_HH_IDLE_ST   }
1432e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
1442e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_hh_st_w4_conn[][BTA_HH_NUM_COLS] =
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event                          Action                 Next state */
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_OPEN_EVT      */    {BTA_HH_IGNORE,        BTA_HH_W4_CONN_ST },
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_CLOSE_EVT     */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_OPEN_EVT      */    {BTA_HH_OPEN_ACT,      BTA_HH_W4_CONN_ST },
1542e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_INT_CLOSE_EVT     */    {BTA_HH_OPEN_FAILURE,  BTA_HH_IDLE_ST    },
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_DATA_EVT      */    {BTA_HH_IGNORE,        BTA_HH_W4_CONN_ST },
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_CTRL_DATA     */    {BTA_HH_IGNORE,        BTA_HH_W4_CONN_ST },
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_HANDSK_EVT    */    {BTA_HH_IGNORE,        BTA_HH_W4_CONN_ST },
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_SDP_CMPL_EVT      */    {BTA_HH_SDP_CMPL,      BTA_HH_W4_CONN_ST },
1592e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_API_WRITE_DEV_EVT */    {BTA_HH_WRITE_DEV_ACT, BTA_HH_W4_CONN_ST },
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_GET_DSCP_EVT  */    {BTA_HH_IGNORE,        BTA_HH_W4_CONN_ST },
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_MAINT_DEV_EVT */    {BTA_HH_MAINT_DEV_ACT, BTA_HH_IDLE_ST    },
162ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/* BTA_HH_OPEN_CMPL_EVT     */    {BTA_HH_OPEN_CMPL_ACT, BTA_HH_CONN_ST    }
1632e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
1642e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_GATT_CLOSE_EVT    */   ,{BTA_HH_LE_OPEN_FAIL,  BTA_HH_IDLE_ST    }
1652e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_GATT_OPEN_EVT    */    ,{BTA_HH_GATT_OPEN,     BTA_HH_W4_CONN_ST }
1662e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_START_ENC_EVT    */    ,{BTA_HH_START_SEC,     BTA_HH_W4_SEC     }
1672e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_ENC_CMPL_EVT     */    ,{BTA_HH_IGNORE,        BTA_HH_W4_CONN_ST }
1682e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* READ_CHAR_CMPL_EVT */        ,{BTA_HH_W4_LE_READ_CHAR,    BTA_HH_W4_CONN_ST  }
1692e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_GATT_WRITE_CMPL_EVT*/  ,{BTA_HH_W4_LE_WRITE,    BTA_HH_W4_CONN_ST  }
1702e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* READ_DESCR_CMPL_EVT */        ,{BTA_HH_W4_LE_READ_DESCR, BTA_HH_W4_CONN_ST  }
1712e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* WRITE_DESCR_CMPL_EVT */       ,{BTA_HH_WRITE_DESCR,   BTA_HH_W4_CONN_ST   }
1722e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* SCPP_UPDATE_EVT */            ,{BTA_HH_IGNORE,           BTA_HH_W4_CONN_ST   }
1732e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_hh_st_connected[][BTA_HH_NUM_COLS] =
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event                          Action                 Next state */
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_OPEN_EVT      */    {BTA_HH_IGNORE,        BTA_HH_CONN_ST    },
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_CLOSE_EVT     */    {BTA_HH_API_DISC_ACT,  BTA_HH_CONN_ST    },
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_OPEN_EVT      */    {BTA_HH_OPEN_ACT,      BTA_HH_CONN_ST    },
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_CLOSE_EVT     */    {BTA_HH_CLOSE_ACT,     BTA_HH_IDLE_ST    },
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_DATA_EVT      */    {BTA_HH_DATA_ACT,      BTA_HH_CONN_ST    },
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_CTRL_DATA     */    {BTA_HH_CTRL_DAT_ACT,  BTA_HH_CONN_ST    },
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_HANDSK_EVT    */    {BTA_HH_HANDSK_ACT,    BTA_HH_CONN_ST    },
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_SDP_CMPL_EVT      */    {BTA_HH_IGNORE,         BTA_HH_CONN_ST       },
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_WRITE_DEV_EVT */    {BTA_HH_WRITE_DEV_ACT, BTA_HH_CONN_ST    },
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_GET_DSCP_EVT  */    {BTA_HH_GET_DSCP_ACT,  BTA_HH_CONN_ST    },
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_MAINT_DEV_EVT */    {BTA_HH_MAINT_DEV_ACT, BTA_HH_CONN_ST    },
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_OPEN_CMPL_EVT        */    {BTA_HH_IGNORE,         BTA_HH_CONN_ST    }
1922e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
1932e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_GATT_CLOSE_EVT    */    ,{BTA_HH_GATT_CLOSE,    BTA_HH_IDLE_ST    }
1942e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_GATT_OPEN_EVT    */    ,{BTA_HH_IGNORE,        BTA_HH_CONN_ST    }
1952e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_START_ENC_EVT    */    ,{BTA_HH_IGNORE,        BTA_HH_CONN_ST     }
1962e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_ENC_CMPL_EVT     */    ,{BTA_HH_IGNORE,        BTA_HH_CONN_ST     }
1972e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* READ_CHAR_CMPL_EVT */         ,{BTA_HH_LE_READ_CHAR,  BTA_HH_CONN_ST     }
1982e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* WRITE_CHAR_CMPL_EVT*/         ,{BTA_HH_LE_WRITE,      BTA_HH_CONN_ST     }
1992e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* READ_DESCR_CMPL_EVT */        ,{BTA_HH_LE_READ_DESCR, BTA_HH_CONN_ST     }   /* do not currently read any descr when connection up */
2002e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* WRITE_DESCR_CMPL_EVT */       ,{BTA_HH_WRITE_DESCR,   BTA_HH_CONN_ST     }   /* do not currently write any descr when connection up */
2012e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* SCPP_UPDATE_EVT */            ,{BTA_HH_LE_UPDATE_SCPP,  BTA_HH_CONN_ST   }
2022e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
2032e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach};
2042e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
2052e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbachconst UINT8 bta_hh_st_w4_sec[][BTA_HH_NUM_COLS] =
2062e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach{
2072e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* Event                          Action                 Next state */
2082e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_API_OPEN_EVT      */    {BTA_HH_IGNORE,        BTA_HH_W4_SEC  },
2092e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_API_CLOSE_EVT     */    {BTA_HH_API_DISC_ACT,  BTA_HH_W4_SEC  },
2102e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_INT_OPEN_EVT      */    {BTA_HH_IGNORE,        BTA_HH_W4_SEC  },
2112e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_INT_CLOSE_EVT     */    {BTA_HH_OPEN_FAILURE,  BTA_HH_IDLE_ST },
2122e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_INT_DATA_EVT      */    {BTA_HH_IGNORE,        BTA_HH_W4_SEC  },
2132e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_INT_CTRL_DATA     */    {BTA_HH_IGNORE,        BTA_HH_W4_SEC  },
2142e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_INT_HANDSK_EVT    */    {BTA_HH_IGNORE,        BTA_HH_W4_SEC  },
2152e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_SDP_CMPL_EVT      */    {BTA_HH_IGNORE,        BTA_HH_W4_SEC  },
2162e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_API_WRITE_DEV_EVT */    {BTA_HH_IGNORE  ,      BTA_HH_W4_SEC  },
2172e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_API_GET_DSCP_EVT  */    {BTA_HH_IGNORE,        BTA_HH_W4_SEC  },
2182e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_API_MAINT_DEV_EVT */    {BTA_HH_MAINT_DEV_ACT, BTA_HH_W4_SEC  },
2192e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_OPEN_CMPL_EVT     */    {BTA_HH_IGNORE,        BTA_HH_W4_SEC  },
2202e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_GATT_CLOSE_EVT    */    {BTA_HH_LE_OPEN_FAIL,  BTA_HH_IDLE_ST },
2212e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_GATT_OPEN_EVT    */     {BTA_HH_IGNORE,        BTA_HH_W4_SEC  },
2222e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_START_ENC_EVT    */     {BTA_HH_IGNORE,        BTA_HH_W4_SEC     },
2232e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_ENC_CMPL_EVT     */     {BTA_HH_SEC_CMPL,      BTA_HH_W4_CONN_ST },
2242e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* READ_CHAR_CMPL_EVT */          {BTA_HH_IGNORE,        BTA_HH_W4_SEC     },
2252e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* BTA_HH_GATT_WRITE_CMPL_EVT*/   {BTA_HH_IGNORE,        BTA_HH_W4_SEC     },
2262e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* READ_DESCR_CMPL_EVT */         {BTA_HH_IGNORE,        BTA_HH_W4_SEC   },
2272e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* WRITE_DESCR_CMPL_EVT */        {BTA_HH_IGNORE,        BTA_HH_W4_SEC   }
2282e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/* SCPP_UPDATE_EVT */            ,{BTA_HH_IGNORE,        BTA_HH_W4_SEC   }
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
2302e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for state table */
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef const UINT8 (*tBTA_HH_ST_TBL)[BTA_HH_NUM_COLS];
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table */
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTA_HH_ST_TBL bta_hh_st_tbl[] =
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_st_idle,
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_st_w4_conn,
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_st_connected
2412e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
2422e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    ,bta_hh_st_w4_sec
2432e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Global data
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_DYNAMIC_MEMORY == FALSE
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_HH_CB  bta_hh_cb;
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static functions
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG == TRUE
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_hh_evt_code(tBTA_HH_INT_EVT evt_code);
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_hh_state_code(tBTA_HH_STATE state_code);
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_hh_sm_execute
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      State machine event handling function for HID Host
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_hh_sm_execute(tBTA_HH_DEV_CB *p_cb, UINT16 event, tBTA_HH_DATA * p_data)
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_ST_TBL  state_table;
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           action;
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH         cback_data;
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_EVT     cback_event = 0;
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG == TRUE
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_STATE   in_state ;
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          debug_event = event;
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(&cback_data, 0, sizeof(tBTA_HH));
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* handle exception, no valid control block was found */
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_cb)
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* BTA HH enabled already? otherwise ignore the event although it's bad*/
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (bta_hh_cb.p_cback != NULL)
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            switch (event)
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* no control block available for new connection */
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTA_HH_API_OPEN_EVT:
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_event = BTA_HH_OPEN_EVT;
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* build cback data */
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bdcpy(cback_data.conn.bda, ((tBTA_HH_API_CONN *)p_data)->bd_addr);
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_data.conn.status  = BTA_HH_ERR_DB_FULL;
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_data.conn.handle  = BTA_HH_INVALID_HANDLE;
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* DB full, BTA_HhAddDev */
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTA_HH_API_MAINT_DEV_EVT:
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_event = p_data->api_maintdev.sub_event;
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_data->api_maintdev.sub_event == BTA_HH_ADD_DEV_EVT)
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bdcpy(cback_data.dev_info.bda, p_data->api_maintdev.bda);
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_info.status    = BTA_HH_ERR_DB_FULL;
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_info.handle    = BTA_HH_INVALID_HANDLE;
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_info.status    = BTA_HH_ERR_HDL;
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_info.handle    = (UINT8)p_data->api_maintdev.hdr.layer_specific;
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTA_HH_API_WRITE_DEV_EVT:
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_event = (p_data->api_sndcmd.t_type - BTA_HH_FST_BTE_TRANS_EVT) +
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTA_HH_FST_TRANS_CB_EVT;
3182e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach                if (p_data->api_sndcmd.p_data != NULL)
3192e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach                {
3202e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach                    GKI_freebuf(p_data->api_sndcmd.p_data);
3212e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach                }
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_data->api_sndcmd.t_type == HID_TRANS_SET_PROTOCOL ||
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data->api_sndcmd.t_type == HID_TRANS_SET_REPORT ||
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data->api_sndcmd.t_type == HID_TRANS_SET_IDLE)
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_status.status = BTA_HH_ERR_HDL;
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_status.handle = (UINT8)p_data->api_sndcmd.hdr.layer_specific;
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else if (p_data->api_sndcmd.t_type != HID_TRANS_DATA &&
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data->api_sndcmd.t_type != HID_TRANS_CONTROL)
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.hs_data.handle = (UINT8)p_data->api_sndcmd.hdr.layer_specific;
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.hs_data.status = BTA_HH_ERR_HDL;
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* hs_data.rsp_data will be all zero, which is not valid value */
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
336ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                else if (p_data->api_sndcmd.t_type == HID_TRANS_CONTROL &&
337ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                         p_data->api_sndcmd.param == BTA_HH_CTRL_VIRTUAL_CABLE_UNPLUG)
338ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                {
339ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    cback_data.status = BTA_HH_ERR_HDL;
340ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    cback_event = BTA_HH_VC_UNPLUG_EVT;
341ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                }
342ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                else
343ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    cback_event = 0;
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTA_HH_API_CLOSE_EVT:
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_event = BTA_HH_CLOSE_EVT;
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_data.dev_status.status = BTA_HH_ERR_HDL;
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_data.dev_status.handle = (UINT8)p_data->api_sndcmd.hdr.layer_specific;
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            default:
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* invalid handle, call bad API event */
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                APPL_TRACE_ERROR1("wrong device handle: [%d]", p_data->hdr.layer_specific);
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           if (cback_event)
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project               (* bta_hh_cb.p_cback)(cback_event, &cback_data);
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* corresponding CB is found, go to state machine */
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG == TRUE
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        in_state = p_cb->state;
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_EVENT3("bta_hh_sm_execute: State 0x%02x [%s], Event [%s]",
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          in_state, bta_hh_state_code(in_state),
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          bta_hh_evt_code(debug_event));
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
372da8b1f6ccc29e3ccdc07ccd3afd15b3671aa4c39Harish Paryani        if ((p_cb->state == BTA_HH_NULL_ST) || (p_cb->state >= BTA_HH_INVALID_ST))
3732e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach        {
3742e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach            APPL_TRACE_ERROR2("bta_hh_sm_execute: Invalid state State = 0x%x, Event = %d",
375da8b1f6ccc29e3ccdc07ccd3afd15b3671aa4c39Harish Paryani                              p_cb->state,event);
3762e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach            return;
3772e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach        }
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        state_table = bta_hh_st_tbl[p_cb->state - 1];
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        event &= 0xff;
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_cb->state = state_table[event][BTA_HH_NEXT_STATE] ;
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((action = state_table[event][BTA_HH_ACTION]) != BTA_HH_IGNORE)
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (*bta_hh_action[action])(p_cb, p_data);
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG == TRUE
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (in_state != p_cb->state)
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            APPL_TRACE_DEBUG3("HH State Change: [%s] -> [%s] after Event [%s]",
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          bta_hh_state_code(in_state),
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          bta_hh_state_code(p_cb->state),
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          bta_hh_evt_code(debug_event));
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_hh_hdl_event
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HID host main event handling function.
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN bta_hh_hdl_event(BT_HDR *p_msg)
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8           index = BTA_HH_IDX_INVALID;
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_DEV_CB *p_cb = NULL;
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (p_msg->event)
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HH_API_ENABLE_EVT:
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_hh_api_enable((tBTA_HH_DATA *) p_msg);
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HH_API_DISABLE_EVT:
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_hh_api_disable();
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HH_DISC_CMPL_EVT:          /* disable complete */
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_hh_disc_cmpl();
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* all events processed in state machine need to find corresponding
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                CB before proceed */
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_msg->event == BTA_HH_API_OPEN_EVT)
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                index = bta_hh_find_cb(((tBTA_HH_API_CONN *)p_msg)->bd_addr);
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_msg->event == BTA_HH_API_MAINT_DEV_EVT)
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* if add device */
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (((tBTA_HH_MAINT_DEV *)p_msg)->sub_event == BTA_HH_ADD_DEV_EVT)
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    index = bta_hh_find_cb(((tBTA_HH_MAINT_DEV *)p_msg)->bda);
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else /* else remove device by handle */
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    index = bta_hh_dev_handle_to_cb_idx((UINT8)p_msg->layer_specific);
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// btla-specific ++
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* If BT disable is done while the HID device is connected and Link_Key uses unauthenticated combination
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      * then we can get into a situation where remove_bonding is called with the index set to 0 (without getting
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      * cleaned up). Only when VIRTUAL_UNPLUG is called do we cleanup the index and make it MAX_KNOWN.
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      * So if REMOVE_DEVICE is called and in_use is FALSE then we should treat this as a NULL p_cb. Hence we
453ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      * force the index to be IDX_INVALID
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      */
455fac9fef507d23c68c6160bf4d43a7b40111ca985Zhihai Xu                    if ((index != BTA_HH_IDX_INVALID) &&
456fac9fef507d23c68c6160bf4d43a7b40111ca985Zhihai Xu                        (bta_hh_cb.kdev[index].in_use == FALSE)) {
457fac9fef507d23c68c6160bf4d43a7b40111ca985Zhihai Xu                        index = BTA_HH_IDX_INVALID;
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// btla-specific --
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
4622e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach            else if (p_msg->event == BTA_HH_INT_OPEN_EVT)
4632e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach            {
4642e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach                index = bta_hh_find_cb(((tBTA_HH_CBACK_DATA *)p_msg)->addr);
4652e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach            }
466ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            else
467ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                index = bta_hh_dev_handle_to_cb_idx((UINT8)p_msg->layer_specific);
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
469ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (index != BTA_HH_IDX_INVALID)
4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_cb = &bta_hh_cb.kdev[index];
4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            APPL_TRACE_DEBUG2("bta_hh_hdl_event:: handle = %d dev_cb[%d] ", p_msg->layer_specific, index);
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_hh_sm_execute(p_cb, p_msg->event, (tBTA_HH_DATA *) p_msg);
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Debug Functions
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_hh_evt_code
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_hh_evt_code(tBTA_HH_INT_EVT evt_code)
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  switch(evt_code)
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_DISABLE_EVT:
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_DISABLE_EVT";
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_ENABLE_EVT:
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_ENABLE_EVT";
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_OPEN_EVT:
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_OPEN_EVT";
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_CLOSE_EVT:
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_CLOSE_EVT";
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_INT_OPEN_EVT:
5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_INT_OPEN_EVT";
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_INT_CLOSE_EVT:
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_INT_CLOSE_EVT";
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_INT_HANDSK_EVT:
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_INT_HANDSK_EVT";
5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_INT_DATA_EVT:
5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_INT_DATA_EVT";
5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_INT_CTRL_DATA:
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_INT_CTRL_DATA";
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_WRITE_DEV_EVT:
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_WRITE_DEV_EVT";
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_SDP_CMPL_EVT:
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_SDP_CMPL_EVT";
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_DISC_CMPL_EVT:
5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_DISC_CMPL_EVT";
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_MAINT_DEV_EVT:
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_MAINT_DEV_EVT";
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_GET_DSCP_EVT:
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_GET_DSCP_EVT";
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_OPEN_CMPL_EVT:
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_OPEN_CMPL_EVT";
5272e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
5282e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    case BTA_HH_GATT_CLOSE_EVT:
5292e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach        return "BTA_HH_GATT_CLOSE_EVT";
5302e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    case BTA_HH_GATT_OPEN_EVT:
5312e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach        return "BTA_HH_GATT_OPEN_EVT";
5322e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    case BTA_HH_START_ENC_EVT:
5332e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach        return "BTA_HH_START_ENC_EVT";
5342e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    case BTA_HH_ENC_CMPL_EVT:
5352e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach        return "BTA_HH_ENC_CMPL_EVT";
5362e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    case BTA_HH_GATT_READ_CHAR_CMPL_EVT:
5372e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach        return "BTA_HH_GATT_READ_CHAR_CMPL_EVT";
5382e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    case BTA_HH_GATT_WRITE_CHAR_CMPL_EVT:
5392e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach        return "BTA_HH_GATT_WRITE_CHAR_CMPL_EVT";
5402e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    case BTA_HH_GATT_READ_DESCR_CMPL_EVT:
5412e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach        return "BTA_HH_GATT_READ_DESCR_CMPL_EVT";
5422e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    case BTA_HH_GATT_WRITE_DESCR_CMPL_EVT:
5432e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach        return "BTA_HH_GATT_WRITE_DESCR_CMPL_EVT";
5442e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    default:
5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "unknown HID Host event code";
5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_hh_state_code
5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      get string representation of HID host state code.
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_hh_state_code(tBTA_HH_STATE state_code)
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (state_code)
5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_NULL_ST:
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return"BTA_HH_NULL_ST";
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_IDLE_ST:
5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_IDLE_ST";
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_W4_CONN_ST:
5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_W4_CONN_ST";
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_CONN_ST:
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_CONN_ST";
5712e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
5722e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    case BTA_HH_W4_SEC:
5732e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach        return "BTA_HH_W4_SEC";
5742e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    default:
5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "unknown HID Host state";
5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif  /* Debug Functions */
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_HH_INCLUDED */
583