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