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 */
61 typedef 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 
88 typedef 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 
99 typedef 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.
120 void bthc_rx_ready(void);
121 void bthc_tx(HC_BT_HDR *buf);
122 void bthc_idle_timeout(void);
123