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