1/******************************************************************************
2 *
3 *  Copyright (C) 2009-2012 Broadcom Corporation
4 *
5 *  Licensed under the Apache License, Version 2.0 (the "License");
6 *  you may not use this file except in compliance with the License.
7 *  You may obtain a copy of the License at:
8 *
9 *  http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 *
17 ******************************************************************************/
18
19/******************************************************************************
20 *
21 *  Filename:      bt_hci_bdroid.h
22 *
23 *  Description:   A wrapper header file of bt_hci_lib.h
24 *
25 *                 Contains definitions specific for interfacing with Bluedroid
26 *                 Bluetooth stack
27 *
28 ******************************************************************************/
29
30#pragma once
31
32#ifdef HAS_BDROID_BUILDCFG
33#include "bdroid_buildcfg.h"
34#endif
35
36/******************************************************************************
37**  Constants & Macros
38******************************************************************************/
39
40#if __STDC_VERSION__ < 199901L
41#  ifndef FALSE
42#    define FALSE 0
43#  endif
44#  ifndef TRUE
45#    define TRUE (!FALSE)
46#  endif
47#else
48#  include <stdbool.h>
49#  ifndef FALSE
50#    define FALSE  false
51#  endif
52#  ifndef TRUE
53#    define TRUE   true
54#  endif
55#endif
56
57#define HCI_ACL_MAX_SIZE 1024
58#define HCI_MAX_FRAME_SIZE (HCI_ACL_MAX_SIZE + 4)
59
60/* Host/Controller lib internal event ID */
61typedef enum {
62  HC_EVENT_LPM_IDLE_TIMEOUT,
63} bthc_event_t;
64
65/* Message event mask across Host/Controller lib and stack */
66#define MSG_EVT_MASK                    0xFF00 /* eq. BT_EVT_MASK */
67#define MSG_SUB_EVT_MASK                0x00FF /* eq. BT_SUB_EVT_MASK */
68
69/* Message event ID passed from Host/Controller lib to stack */
70#define MSG_HC_TO_STACK_HCI_ERR        0x1300 /* eq. BT_EVT_TO_BTU_HCIT_ERR */
71#define MSG_HC_TO_STACK_HCI_ACL        0x1100 /* eq. BT_EVT_TO_BTU_HCI_ACL */
72#define MSG_HC_TO_STACK_HCI_SCO        0x1200 /* eq. BT_EVT_TO_BTU_HCI_SCO */
73#define MSG_HC_TO_STACK_HCI_EVT        0x1000 /* eq. BT_EVT_TO_BTU_HCI_EVT */
74#define MSG_HC_TO_STACK_L2C_SEG_XMIT   0x1900 /* eq. BT_EVT_TO_BTU_L2C_SEG_XMIT */
75
76/* Message event ID passed from stack to vendor lib */
77#define MSG_STACK_TO_HC_HCI_ACL        0x2100 /* eq. BT_EVT_TO_LM_HCI_ACL */
78#define MSG_STACK_TO_HC_HCI_SCO        0x2200 /* eq. BT_EVT_TO_LM_HCI_SCO */
79#define MSG_STACK_TO_HC_HCI_CMD        0x2000 /* eq. BT_EVT_TO_LM_HCI_CMD */
80
81/* Local Bluetooth Controller ID for BR/EDR */
82#define LOCAL_BR_EDR_CONTROLLER_ID      0
83
84/******************************************************************************
85**  Type definitions and return values
86******************************************************************************/
87
88typedef struct
89{
90    uint16_t          event;
91    uint16_t          len;
92    uint16_t          offset;
93    uint16_t          layer_specific;
94    uint8_t           data[];
95} HC_BT_HDR;
96
97#define BT_HC_HDR_SIZE (sizeof(HC_BT_HDR))
98
99typedef struct _hc_buffer_hdr
100{
101    struct _hc_buffer_hdr *p_next;   /* next buffer in the queue */
102    uint8_t   reserved1;
103    uint8_t   reserved2;
104    uint8_t   reserved3;
105    uint8_t   reserved4;
106} HC_BUFFER_HDR_T;
107
108#define BT_HC_BUFFER_HDR_SIZE (sizeof(HC_BUFFER_HDR_T))
109
110/******************************************************************************
111**  Extern variables and functions
112******************************************************************************/
113
114/******************************************************************************
115**  Functions
116******************************************************************************/
117
118// Called when a buffer has been produced by the serial layer and should be
119// processed by the HCI layer.
120void bthc_rx_ready(void);
121void bthc_tx(HC_BT_HDR *buf);
122void bthc_idle_timeout(void);
123