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 BT_HCI_LIB_H 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BT_HCI_LIB_H 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdint.h> 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <sys/cdefs.h> 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <sys/types.h> 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** Struct types */ 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** Typedefs and defines */ 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Generic purpose transac returned upon request complete */ 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void* TRANSAC; 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** Bluetooth Power Control States */ 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef enum { 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_CHIP_PWR_OFF, 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_CHIP_PWR_ON, 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} bt_hc_chip_power_state_t; 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** Bluetooth Low Power Mode */ 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef enum { 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_LPM_DISABLE, 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_LPM_ENABLE, 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_LPM_WAKE_ASSERT, 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_LPM_WAKE_DEASSERT, 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} bt_hc_low_power_event_t; 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** Receive flow control */ 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef enum { 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_RXFLOW_OFF, /* add transport device fd to select set */ 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_RXFLOW_ON, /* remove transport device to from select set */ 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} bt_rx_flow_state_t; 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** HCI logging control */ 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef enum { 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_LOGGING_OFF, 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_LOGGING_ON, 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} bt_hc_logging_state_t; 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** Result of write request */ 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef enum { 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_TX_SUCCESS, /* a buffer is fully processed and can be released */ 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_TX_FAIL, /* transmit fail */ 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_TX_FRAGMENT, /* send split ACL pkt back to stack to reprocess */ 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} bt_hc_transmit_result_t; 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** Result of preload initialization */ 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef enum { 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_PRELOAD_SUCCESS, 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_PRELOAD_FAIL, 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} bt_hc_preload_result_t; 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** Result of postload initialization */ 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef enum { 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_POSTLOAD_SUCCESS, 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_POSTLOAD_FAIL, 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} bt_hc_postload_result_t; 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** Result of low power enable/disable request */ 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef enum { 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_LPM_DISABLED, 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_LPM_ENABLED, 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} bt_hc_lpm_request_result_t; 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** Host/Controller Library Return Status */ 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef enum { 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_STATUS_SUCCESS, 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_STATUS_FAIL, 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_STATUS_NOT_READY, 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_STATUS_NOMEM, 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_STATUS_BUSY, 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HC_STATUS_CORRUPTED_BUFFER 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} bt_hc_status_t; 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Section comment */ 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Bluetooth Host/Controller callback structure. 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* called upon bt host wake signal */ 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*hostwake_ind_cb)(bt_hc_low_power_event_t event); 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* preload initialization callback */ 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*preload_result_cb)(TRANSAC transac, bt_hc_preload_result_t result); 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* postload initialization callback */ 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*postload_result_cb)(TRANSAC transac, bt_hc_postload_result_t result); 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* lpm enable/disable callback */ 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*lpm_result_cb)(bt_hc_lpm_request_result_t result); 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* datapath buffer allocation callback (callout) */ 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef char* (*alloc_mem_cb)(int size); 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* datapath buffer deallocation callback (callout) */ 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef int (*dealloc_mem_cb)(TRANSAC transac, char *p_buf); 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* transmit result callback */ 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef int (*tx_result_cb)(TRANSAC transac, char *p_buf, bt_hc_transmit_result_t result); 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* a previously setup buffer is read and available for processing 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project buffer is deallocated in stack when processed */ 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef int (*data_ind_cb)(TRANSAC transac, char *p_buf, int len); 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct { 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** set to sizeof(bt_hc_callbacks_t) */ 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project size_t size; 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* notifies caller result of preload request */ 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project preload_result_cb preload_cb; 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* notifies caller result of postload request */ 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project postload_result_cb postload_cb; 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* notifies caller result of lpm enable/disable */ 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project lpm_result_cb lpm_cb; 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* notifies hardware on host wake state */ 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project hostwake_ind_cb hostwake_ind; 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* buffer allocation request */ 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project alloc_mem_cb alloc; 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* buffer deallocation request */ 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dealloc_mem_cb dealloc; 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* notifies stack data is available */ 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_ind_cb data_ind; 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* notifies caller when a buffer is transmitted (or failed) */ 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tx_result_cb tx_result; 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} bt_hc_callbacks_t; 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Bluetooth Host/Controller Interface 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct { 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** Set to sizeof(bt_hc_interface_t) */ 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project size_t size; 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Opens the interface and provides the callback routines 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * to the implemenation of this interface. 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int (*init)(const bt_hc_callbacks_t* p_cb, unsigned char *local_bdaddr); 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** Chip power control */ 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project void (*set_power)(bt_hc_chip_power_state_t state); 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** Set low power mode wake */ 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int (*lpm)(bt_hc_low_power_event_t event); 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** Called prior to stack initialization */ 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project void (*preload)(TRANSAC transac); 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** Called post stack initialization */ 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project void (*postload)(TRANSAC transac); 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** Transmit buffer */ 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int (*transmit_buf)(TRANSAC transac, char *p_buf, int len); 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** Controls receive flow */ 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int (*set_rxflow)(bt_rx_flow_state_t state); 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** Controls HCI logging on/off */ 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int (*logging)(bt_hc_logging_state_t state, char *p_path); 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** Closes the interface */ 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project void (*cleanup)( void ); 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} bt_hc_interface_t; 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * External shared lib functions 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern const bt_hc_interface_t* bt_hc_get_interface(void); 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BT_HCI_LIB_H */ 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 203