bta_hh_main.c revision 5738f83aeb59361a0a2eda2460113f6dc919427
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,
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_HH_NUM_ACTIONS
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_IGNORE       BTA_HH_NUM_ACTIONS
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for action functions */
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*tBTA_HH_ACTION)(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data);
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* action functions */
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTA_HH_ACTION bta_hh_action[] =
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_api_disc_act,
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_open_act,
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_close_act,
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_data_act,
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_ctrl_dat_act,
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_handsk_act,
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_start_sdp,
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_sdp_cmpl,
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_write_dev_act,
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_get_dscp_act,
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_maint_dev_act,
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_open_cmpl_act
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table information */
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_ACTION                   0       /* position of action */
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_NEXT_STATE               1       /* position of next state */
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_HH_NUM_COLS                 2       /* number of columns */
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for idle state */
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_hh_st_idle[][BTA_HH_NUM_COLS] =
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event                          Action                    Next state */
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_OPEN_EVT      */    {BTA_HH_START_SDP,     BTA_HH_W4_CONN_ST },
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_CLOSE_EVT     */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_OPEN_EVT      */    {BTA_HH_OPEN_ACT,      BTA_HH_W4_CONN_ST },
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_CLOSE_EVT     */    {BTA_HH_CLOSE_ACT,     BTA_HH_IDLE_ST    },
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_DATA_EVT      */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_CTRL_DATA     */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_HANDSK_EVT    */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_SDP_CMPL_EVT      */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_WRITE_DEV_EVT */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_GET_DSCP_EVT  */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_MAINT_DEV_EVT */    {BTA_HH_MAINT_DEV_ACT, BTA_HH_IDLE_ST    },
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_OPEN_CMPL_EVT        */    {BTA_HH_IGNORE,         BTA_HH_IDLE_ST    }
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_hh_st_w4_conn[][BTA_HH_NUM_COLS] =
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event                          Action                 Next state */
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_OPEN_EVT      */    {BTA_HH_IGNORE,        BTA_HH_W4_CONN_ST },
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_CLOSE_EVT     */    {BTA_HH_IGNORE,        BTA_HH_IDLE_ST    },
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_OPEN_EVT      */    {BTA_HH_OPEN_ACT,      BTA_HH_W4_CONN_ST },
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_CLOSE_EVT     */    {BTA_HH_CLOSE_ACT,     BTA_HH_IDLE_ST    },
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_DATA_EVT      */    {BTA_HH_IGNORE,        BTA_HH_W4_CONN_ST },
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_CTRL_DATA     */    {BTA_HH_IGNORE,        BTA_HH_W4_CONN_ST },
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_HANDSK_EVT    */    {BTA_HH_IGNORE,        BTA_HH_W4_CONN_ST },
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_SDP_CMPL_EVT      */    {BTA_HH_SDP_CMPL,      BTA_HH_W4_CONN_ST },
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_WRITE_DEV_EVT */    {BTA_HH_IGNORE  ,      BTA_HH_W4_CONN_ST },
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_GET_DSCP_EVT  */    {BTA_HH_IGNORE,        BTA_HH_W4_CONN_ST },
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_MAINT_DEV_EVT */    {BTA_HH_MAINT_DEV_ACT, BTA_HH_IDLE_ST    },
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_OPEN_CMPL_EVT        */    {BTA_HH_OPEN_CMPL_ACT, BTA_HH_CONN_ST    }
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_hh_st_connected[][BTA_HH_NUM_COLS] =
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event                          Action                 Next state */
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_OPEN_EVT      */    {BTA_HH_IGNORE,        BTA_HH_CONN_ST    },
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_CLOSE_EVT     */    {BTA_HH_API_DISC_ACT,  BTA_HH_CONN_ST    },
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_OPEN_EVT      */    {BTA_HH_OPEN_ACT,      BTA_HH_CONN_ST    },
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_CLOSE_EVT     */    {BTA_HH_CLOSE_ACT,     BTA_HH_IDLE_ST    },
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_DATA_EVT      */    {BTA_HH_DATA_ACT,      BTA_HH_CONN_ST    },
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_CTRL_DATA     */    {BTA_HH_CTRL_DAT_ACT,  BTA_HH_CONN_ST    },
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_INT_HANDSK_EVT    */    {BTA_HH_HANDSK_ACT,    BTA_HH_CONN_ST    },
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_SDP_CMPL_EVT      */    {BTA_HH_IGNORE,         BTA_HH_CONN_ST       },
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_WRITE_DEV_EVT */    {BTA_HH_WRITE_DEV_ACT, BTA_HH_CONN_ST    },
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_GET_DSCP_EVT  */    {BTA_HH_GET_DSCP_ACT,  BTA_HH_CONN_ST    },
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_API_MAINT_DEV_EVT */    {BTA_HH_MAINT_DEV_ACT, BTA_HH_CONN_ST    },
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTA_HH_OPEN_CMPL_EVT        */    {BTA_HH_IGNORE,         BTA_HH_CONN_ST    }
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for state table */
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef const UINT8 (*tBTA_HH_ST_TBL)[BTA_HH_NUM_COLS];
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table */
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTA_HH_ST_TBL bta_hh_st_tbl[] =
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_st_idle,
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_st_w4_conn,
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_hh_st_connected
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Global data
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_DYNAMIC_MEMORY == FALSE
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_HH_CB  bta_hh_cb;
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static functions
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG == TRUE
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_hh_evt_code(tBTA_HH_INT_EVT evt_code);
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_hh_state_code(tBTA_HH_STATE state_code);
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_hh_sm_execute
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      State machine event handling function for HID Host
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_hh_sm_execute(tBTA_HH_DEV_CB *p_cb, UINT16 event, tBTA_HH_DATA * p_data)
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_ST_TBL  state_table;
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           action;
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH         cback_data;
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_EVT     cback_event = 0;
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG == TRUE
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_STATE   in_state ;
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          debug_event = event;
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(&cback_data, 0, sizeof(tBTA_HH));
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* handle exception, no valid control block was found */
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_cb)
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* BTA HH enabled already? otherwise ignore the event although it's bad*/
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (bta_hh_cb.p_cback != NULL)
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            switch (event)
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* no control block available for new connection */
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTA_HH_API_OPEN_EVT:
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_event = BTA_HH_OPEN_EVT;
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* build cback data */
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bdcpy(cback_data.conn.bda, ((tBTA_HH_API_CONN *)p_data)->bd_addr);
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_data.conn.status  = BTA_HH_ERR_DB_FULL;
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_data.conn.handle  = BTA_HH_INVALID_HANDLE;
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* DB full, BTA_HhAddDev */
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTA_HH_API_MAINT_DEV_EVT:
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_event = p_data->api_maintdev.sub_event;
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_data->api_maintdev.sub_event == BTA_HH_ADD_DEV_EVT)
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bdcpy(cback_data.dev_info.bda, p_data->api_maintdev.bda);
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_info.status    = BTA_HH_ERR_DB_FULL;
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_info.handle    = BTA_HH_INVALID_HANDLE;
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_info.status    = BTA_HH_ERR_HDL;
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_info.handle    = (UINT8)p_data->api_maintdev.hdr.layer_specific;
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTA_HH_API_WRITE_DEV_EVT:
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_event = (p_data->api_sndcmd.t_type - BTA_HH_FST_BTE_TRANS_EVT) +
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTA_HH_FST_TRANS_CB_EVT;
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_data->api_sndcmd.t_type == HID_TRANS_SET_PROTOCOL ||
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data->api_sndcmd.t_type == HID_TRANS_SET_REPORT ||
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data->api_sndcmd.t_type == HID_TRANS_SET_IDLE)
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_status.status = BTA_HH_ERR_HDL;
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.dev_status.handle = (UINT8)p_data->api_sndcmd.hdr.layer_specific;
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else if (p_data->api_sndcmd.t_type != HID_TRANS_DATA &&
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data->api_sndcmd.t_type != HID_TRANS_CONTROL)
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.hs_data.handle = (UINT8)p_data->api_sndcmd.hdr.layer_specific;
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cback_data.hs_data.status = BTA_HH_ERR_HDL;
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* hs_data.rsp_data will be all zero, which is not valid value */
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTA_HH_API_CLOSE_EVT:
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_event = BTA_HH_CLOSE_EVT;
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_data.dev_status.status = BTA_HH_ERR_HDL;
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                cback_data.dev_status.handle = (UINT8)p_data->api_sndcmd.hdr.layer_specific;
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            default:
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* invalid handle, call bad API event */
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                APPL_TRACE_ERROR1("wrong device handle: [%d]", p_data->hdr.layer_specific);
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           if (cback_event)
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project               (* bta_hh_cb.p_cback)(cback_event, &cback_data);
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* corresponding CB is found, go to state machine */
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG == TRUE
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        in_state = p_cb->state;
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_EVENT3("bta_hh_sm_execute: State 0x%02x [%s], Event [%s]",
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          in_state, bta_hh_state_code(in_state),
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          bta_hh_evt_code(debug_event));
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        state_table = bta_hh_st_tbl[p_cb->state - 1];
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        event &= 0xff;
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_cb->state = state_table[event][BTA_HH_NEXT_STATE] ;
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((action = state_table[event][BTA_HH_ACTION]) != BTA_HH_IGNORE)
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (*bta_hh_action[action])(p_cb, p_data);
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG == TRUE
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (in_state != p_cb->state)
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            APPL_TRACE_DEBUG3("HH State Change: [%s] -> [%s] after Event [%s]",
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          bta_hh_state_code(in_state),
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          bta_hh_state_code(p_cb->state),
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          bta_hh_evt_code(debug_event));
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_hh_hdl_event
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HID host main event handling function.
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN bta_hh_hdl_event(BT_HDR *p_msg)
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           index = BTA_HH_MAX_KNOWN;
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HH_DEV_CB *p_cb = NULL;
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (p_msg->event)
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HH_API_ENABLE_EVT:
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_hh_api_enable((tBTA_HH_DATA *) p_msg);
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HH_API_DISABLE_EVT:
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_hh_api_disable();
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HH_DISC_CMPL_EVT:          /* disable complete */
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_hh_disc_cmpl();
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* all events processed in state machine need to find corresponding
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                CB before proceed */
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_msg->event == BTA_HH_API_OPEN_EVT)
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                index = bta_hh_find_cb(((tBTA_HH_API_CONN *)p_msg)->bd_addr);
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_msg->event == BTA_HH_API_MAINT_DEV_EVT)
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* if add device */
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (((tBTA_HH_MAINT_DEV *)p_msg)->sub_event == BTA_HH_ADD_DEV_EVT)
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    index = bta_hh_find_cb(((tBTA_HH_MAINT_DEV *)p_msg)->bda);
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else /* else remove device by handle */
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    index = bta_hh_cb.cb_index[p_msg->layer_specific];
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// btla-specific ++
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* If BT disable is done while the HID device is connected and Link_Key uses unauthenticated combination
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      * then we can get into a situation where remove_bonding is called with the index set to 0 (without getting
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      * cleaned up). Only when VIRTUAL_UNPLUG is called do we cleanup the index and make it MAX_KNOWN.
3385738f83aeb59361a0a2eda2460113f6dc919427The 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
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      * force the index to be MAX_KNOWN
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      */
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (bta_hh_cb.kdev[index].in_use == FALSE) {
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           index = BTA_HH_MAX_KNOWN;
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// btla-specific --
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_msg->layer_specific < BTA_HH_MAX_KNOWN )
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                index = bta_hh_cb.cb_index[p_msg->layer_specific];
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (index != BTA_HH_MAX_KNOWN)
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_cb = &bta_hh_cb.kdev[index];
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            APPL_TRACE_DEBUG2("bta_hh_hdl_event:: handle = %d dev_cb[%d] ", p_msg->layer_specific, index);
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_hh_sm_execute(p_cb, p_msg->event, (tBTA_HH_DATA *) p_msg);
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Debug Functions
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_HH_DEBUG
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_hh_evt_code
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_hh_evt_code(tBTA_HH_INT_EVT evt_code)
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  switch(evt_code)
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_DISABLE_EVT:
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_DISABLE_EVT";
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_ENABLE_EVT:
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_ENABLE_EVT";
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_OPEN_EVT:
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_OPEN_EVT";
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_CLOSE_EVT:
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_CLOSE_EVT";
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_INT_OPEN_EVT:
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_INT_OPEN_EVT";
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_INT_CLOSE_EVT:
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_INT_CLOSE_EVT";
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_INT_HANDSK_EVT:
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_INT_HANDSK_EVT";
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_INT_DATA_EVT:
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_INT_DATA_EVT";
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_INT_CTRL_DATA:
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_INT_CTRL_DATA";
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_WRITE_DEV_EVT:
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_WRITE_DEV_EVT";
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_SDP_CMPL_EVT:
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_SDP_CMPL_EVT";
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_DISC_CMPL_EVT:
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_DISC_CMPL_EVT";
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_MAINT_DEV_EVT:
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_MAINT_DEV_EVT";
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_API_GET_DSCP_EVT:
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_API_GET_DSCP_EVT";
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_OPEN_CMPL_EVT:
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_OPEN_CMPL_EVT";
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    default:
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "unknown HID Host event code";
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_hh_state_code
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      get string representation of HID host state code.
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_hh_state_code(tBTA_HH_STATE state_code)
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (state_code)
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_NULL_ST:
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return"BTA_HH_NULL_ST";
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_IDLE_ST:
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_IDLE_ST";
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_W4_CONN_ST:
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_W4_CONN_ST";
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_HH_CONN_ST:
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "BTA_HH_CONN_ST";
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    default:
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return "unknown HID Host state";
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif  /* Debug Functions */
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_HH_INCLUDED */
442