15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2009-2012 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTIF_HH_H 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HH_H 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bluetooth.h> 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bt_hh.h> 24df3459935a4c12744a9a78812157890b60ccb77dIan Coolidge#include <pthread.h> 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdint.h> 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hh_api.h" 2733af35c49731bc8e305c862c8e9f3e42a1ab0dc9Ganesh Ganapathi Batta#include "btu.h" 2833af35c49731bc8e305c862c8e9f3e42a1ab0dc9Ganesh Ganapathi Batta 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 306bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Constants & Macros 31ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HH_MAX_HID 8 346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HH_MAX_ADDED_DEV 32 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 366bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HH_MAX_KEYSTATES 3 376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HH_KEYSTATE_MASK_NUMLOCK 0x01 386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HH_KEYSTATE_MASK_CAPSLOCK 0x02 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HH_KEYSTATE_MASK_SCROLLLOCK 0x04 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 416bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BTIF_HH_MAX_POLLING_ATTEMPTS 10 423f49fc7936c92c45215909c5fbed62ad3943b78fWarren Rehman#define BTIF_HH_POLLING_SLEEP_DURATION_US 5000 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 456bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Type definitions and return values 46ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 476bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef enum { 496bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTIF_HH_DISABLED = 0, 506bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTIF_HH_ENABLED, 516bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTIF_HH_DISABLING, 526bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTIF_HH_DEV_UNKNOWN, 536bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTIF_HH_DEV_CONNECTING, 546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTIF_HH_DEV_CONNECTED, 556bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTIF_HH_DEV_DISCONNECTED 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} BTIF_HH_STATUS; 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 586bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct { 596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bthh_connection_state_t dev_status; 606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t dev_handle; 619e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowski RawAddress bd_addr; 626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBTA_HH_ATTR_MASK attr_mask; 636bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t sub_class; 646bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t app_id; 656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int fd; 666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bool ready_for_data; 676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson pthread_t hh_poll_thread_id; 686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t hh_keep_polling; 696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson alarm_t* vup_timer; 706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bool local_vup; // Indicated locally initiated VUP 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hh_device_t; 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Control block to maintain properties of devices */ 746bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct { 756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t dev_handle; 769e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowski RawAddress bd_addr; 776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBTA_HH_ATTR_MASK attr_mask; 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hh_added_device_t; 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * BTIF-HH control block to maintain added devices and currently 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * connected hid devices 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct { 856bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTIF_HH_STATUS status; 866bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btif_hh_device_t devices[BTIF_HH_MAX_HID]; 876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint32_t device_num; 886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btif_hh_added_device_t added_devices[BTIF_HH_MAX_ADDED_DEV]; 896bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btif_hh_device_t* p_curr_dev; 908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bool service_dereg_active; 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_hh_cb_t; 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Functions 95ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern btif_hh_cb_t btif_hh_cb; 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern btif_hh_device_t* btif_hh_find_connected_dev_by_handle(uint8_t handle); 1009e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowskiextern void btif_hh_remove_device(RawAddress bd_addr); 1019e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowskiextern bool btif_hh_add_added_dev(const RawAddress& bda, 102011a61951975849b23a10d2be87e5268008d3407Jakub Pawlowski tBTA_HH_ATTR_MASK attr_mask); 1039e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowskiextern bt_status_t btif_hh_virtual_unplug(const RawAddress* bd_addr); 1049e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowskiextern void btif_hh_disconnect(RawAddress* bd_addr); 1056bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern void btif_hh_setreport(btif_hh_device_t* p_dev, 1066bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bthh_report_type_t r_type, uint16_t size, 1076bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t* report); 108f11e42b1c2a1c185bf83b1d08e033c4e5aec54c2Ajay Panickerextern void btif_hh_service_registration(bool enable); 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 111