• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright (C) 2002-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  *  This is the interface file for the bte application task
22  *
23  ******************************************************************************/
24 
25 #ifndef BTE_APPL_H
26 #define BTE_APPL_H
27 
28 #include "btm_int.h"
29 #include "bta_api.h"
30 #include "bta_sys.h"
31 #include "bte.h"
32 
33 /* Maximum length for serial port device name */
34 #ifndef BTE_APPL_MAX_USERIAL_DEV_NAME
35 #define BTE_APPL_MAX_USERIAL_DEV_NAME       (256)
36 #endif
37 #ifndef BTAPP_AHF_API_SUPPORT
38 #define BTAPP_AHF_API_SUPPORT FALSE
39 #endif
40 
41 /* BTA APP_IDs */
42 #define UI_DM_ID    1
43 #define UI_PRM_ID   20
44 /* this defines the enabled BTA modules. client may not be defined as those are enabled at run time.
45  * they are defined for completeness. please check with bta_sys.h for new modules.
46  * BTA_ID_DM serves as flag for BTA_EnableBluetooth()
47  * BTA_ID_RES can be used to fs ID in bte_appl.
48  */
49 
50 #define BTAPP_NUM_ID_BLOCKS ((BTA_ID_MAX/32)+1)        /* number of 32 bit required to store one bit per
51                                                             btapp id */
52 
53 #define BTAPP_APPL_MAIL_EVENT(x)  (x<<8)    /* define bte_appl task mail box event. LSB contains
54                                                 BTA_ID_xxx (see bta_sys.h) */
55 #define BTAPP_APPL_MAIL_EVT       0xff00    /* high byte contains bitmap of application module event */
56 
57 /* helper macro to copy BTA callack data y into message buffer x, for event data structure z */
58 #define MEMCPY_APPL_MSG(x, y, z)  memcpy( (void *)(((UINT8 *)x)+sizeof(BT_HDR)), (void *)y, sizeof(z) )
59 
60 /* Event masks for BTE_APPL_TASK */
61 #define BTE_APPL_STARTUP_EVT    EVENT_MASK(APPL_EVT_0)      /* Bluetooth has started */
62 #define BTE_APPL_SHUTDOWN_EVT   EVENT_MASK(APPL_EVT_1)      /* Bluetooth is shutting down */
63 #define BTE_APPL_SOCKET_RX_EVT  EVENT_MASK(APPL_EVT_2)      /* Socket data ready to be read */
64 #define BTE_APPL_DBUS_RX_EVT    EVENT_MASK(APPL_EVT_3)      /* DBUS message ready to be read */
65 #define BTE_APPL_BTA_ENABLE_EVT EVENT_MASK(APPL_EVT_4)      /* BTA Enabled event */
66 
67 
68 /* Application configuration */
69 #define BTE_APPL_PATCHRAM_PATH_MAXLEN   128
70 #define BTE_APPL_CONTACTS_DB_PATH       256
71 
72 typedef struct {
73 #if ((BLE_INCLUDED == TRUE) && (SMP_INCLUDED == TRUE))
74     UINT8   ble_auth_req;
75     UINT8   ble_io_cap;
76     UINT8   ble_init_key;
77     UINT8   ble_resp_key;
78     UINT8   ble_max_key_size;
79 #endif
80 } tBTE_APPL_CFG;
81 
82 extern tBTE_APPL_CFG bte_appl_cfg;
83 
84 typedef struct {
85     pthread_mutex_t     mutex;  /* mutex to protect below signal condition */
86     pthread_cond_t      cond;   /* signal event */
87 } tBTAPP_SEMAPHORE;
88 
89 /* helper functions to handle pthread conditions event from outside GKI */
90 extern void bte_create_semaphore( tBTAPP_SEMAPHORE * p_sema );
91 extern void bte_wait_semaphore( tBTAPP_SEMAPHORE * p_sema, unsigned msecs_to );
92 extern void bte_signal_semaphore( tBTAPP_SEMAPHORE * p_sema );
93 extern void bte_destroy_semaphore( tBTAPP_SEMAPHORE * p_sema );
94 
95 /* global application control block storing global application states and variables */
96 typedef struct tBTE_APPL_CB_tag {
97     sigset_t            signal_handler_set;        /* signal handler set used by signal handler thread */
98 #if ( TRUE == BTE_RESET_BAUD_ON_BT_DISABLE )
99     tBTAPP_SEMAPHORE    shutdown_semaphore;   /* used to sync with  terminate handler initated ops */
100 #endif
101     BOOLEAN amp_enabled;                        /* TRUE if AMP is in use */
102 } tBTE_APPL_CB;
103 
104 extern tBTE_APPL_CB bte_appl_cb;
105 
106 /* Exports the application task */
107 extern void BTE_appl_task(UINT32 params);
108 extern int BTAPP_enable_bta( const UINT32 bta_module_state[BTAPP_NUM_ID_BLOCKS], int includingFM );
109 extern int BTAPP_disable_bta( const UINT32 bta_module_state[BTAPP_NUM_ID_BLOCKS], int includingFM );
110 
111 extern UINT8 appl_trace_level;
112 #define BT_PCM_CLK_IDX 1
113 #ifndef BT_PCM_DEF_CLK
114 #define BT_PCM_DEF_CLK 4       /* defaults to 2048khz PCM clk */
115 #endif
116 #define BT_PCM_SYNC_MS_ROLE_IDX 3
117 #define BT_PCM_CLK_MS_ROLE_IDX  4
118 #ifndef BT_PCM_DEF_ROLE
119 #define BT_PCM_DEF_ROLE    0x00     /* assume slave as default */
120 #endif
121 
122 /* helper macros to set, clear and get current BTA module id in a 32bit ARRAY!! */
123 /* set bit id to 1 in UINT32 a[] NO RANGE CHECK!*/
124 #define BTAPP_SET_BTA_MOD(id, a)    { a[id/32] |= (UINT32)(1<<(id % 32)); }
125 
126 /* set bit id to 0 (cleared) in UINT32 a[] NO RANGE CHECK */
127 #define BTAPP_CLEAR_BTA_MOD(id, a)  { a[id/32] &= (UINT32)!(1<<(id % 32)); }
128 
129 /* tests if bit id is 1 in UINT32 a[] NO RANGE CHECK */
130 #define BTAPP_BTA_MOD_IS_SET(id, a) (a[id/32] & (UINT32)(1<<(id % 32)))
131 
132 /* update this list either via btld.txt or directly here by adding the new profiles as per bta_sys.h.
133  * each xxx_LISTx may only contain 32 bits */
134 #ifndef BTAPP_BTA_MODULES_LIST0
135 #define BTAPP_BTA_MODULES_LIST0 (\
136         ( 1<<BTA_ID_DM ) | \
137         ( 1<<BTA_ID_DG ) | \
138         ( 1<<BTA_ID_AG ) | \
139         ( 1<<BTA_ID_OPC )| \
140         ( 1<<BTA_ID_OPS )| \
141         ( 1<<BTA_ID_FTS )| \
142         ( 1<<BTA_ID_PAN )| \
143         ( 1<<BTA_ID_PR ) | \
144         ( 1<<BTA_ID_SC)  | \
145         ( 1<<BTA_ID_AV ) | \
146         ( 1<<BTA_ID_HH ) | \
147         ( 1<<BTA_ID_PBS) | \
148         ( 1<<BTA_ID_FMTX)| \
149         ( 1<<BTA_ID_JV) | \
150         ( 1<<BTA_ID_MSE) \
151         )
152 #endif
153 
154 #define BTAPP_LIST1_BLOCK 32    /* next 32 bit block */
155 #ifndef BTAPP_BTA_MODULES_LIST1
156 #define BTAPP_BTA_MODULES_LIST1 (\
157         ( 1<<(BTA_ID_MAX-BTAPP_LIST1_BLOCK) ) | \
158         ( 1<<(BTA_ID_MSE-BTAPP_LIST1_BLOCK) ) | \
159         0 \
160         )
161 #endif
162 /* for future GPS etc support. goes int LIST1 above */
163 #if 0
164     ( 1<<(BTA_ID_SSR-BTAPP_LIST1_BLOCK) ) \
165     ( 1<<(BTA_ID_MSE-BTAPP_LIST1_BLOCK) ) \
166     ( 1<<(BTA_ID_MCE-BTAPP_LIST1_BLOCK) )
167 #endif
168 
169 /* used application init default in bte_main.c, bte_appl_cfg */
170 #ifndef BTAPP_DEFAULT_MODULES
171 #if (1==BTAPP_NUM_ID_BLOCKS)
172 #define BTAPP_DEFAULT_MODULES {BTAPP_BTA_MODULES_LIST0} /* max 32 modules IDs */
173 #elif (2==BTAPP_NUM_ID_BLOCKS)
174 #define BTAPP_DEFAULT_MODULES {BTAPP_BTA_MODULES_LIST0, BTAPP_BTA_MODULES_LIST1} /* 64 module IDs max */
175 #else
176 #error "Define more BTAPP_BTA_MODULES_LISTx"
177 #endif
178 #endif
179 
180 #endif  /* BTE_APPL_H */
181