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:      btif_api.h
22  *
23  *  Description:   Main API header file for all BTIF functions accessed
24  *                 from main bluetooth HAL. All HAL extensions will not
25  *                 require headerfiles as they would be accessed through
26  *                 callout/callins.
27  *
28  ******************************************************************************/
29 
30 #ifndef BTIF_API_H
31 #define BTIF_API_H
32 
33 #include <hardware/bluetooth.h>
34 
35 #include "btif_common.h"
36 #include "btif_dm.h"
37 
38 /*******************************************************************************
39  *  BTIF CORE API
40  ******************************************************************************/
41 
42 /*******************************************************************************
43  *
44  * Function         btif_init_bluetooth
45  *
46  * Description      Creates BTIF task and prepares BT scheduler for startup
47  *
48  * Returns          bt_status_t
49  *
50  ******************************************************************************/
51 bt_status_t btif_init_bluetooth(void);
52 
53 /*******************************************************************************
54  *
55  * Function         btif_enable_bluetooth
56  *
57  * Description      Performs chip power on and kickstarts OS scheduler
58  *
59  * Returns          bt_status_t
60  *
61  ******************************************************************************/
62 bt_status_t btif_enable_bluetooth(void);
63 
64 /*******************************************************************************
65  *
66  * Function         btif_disable_bluetooth
67  *
68  * Description      Inititates shutdown of Bluetooth system.
69  *                  Any active links will be dropped and device entering
70  *                  non connectable/discoverable mode
71  *
72  * Returns          void
73  *
74  ******************************************************************************/
75 bt_status_t btif_disable_bluetooth(void);
76 
77 /*******************************************************************************
78  *
79  * Function         btif_cleanup_bluetooth
80  *
81  * Description      Cleanup BTIF state.
82  *
83  *
84  * Returns          void
85  *
86  ******************************************************************************/
87 bt_status_t btif_cleanup_bluetooth(void);
88 
89 /*******************************************************************************
90  *
91  * Function         is_restricted_mode
92  *
93  * Description      Checks if BT was enabled in restriced mode. In restricted
94  *                  mode, bonds that are created are marked as temporary.
95  *                  These bonds persist until we leave restricted mode, at
96  *                  which point they will be deleted from the config. Also
97  *                  while in restricted mode, the user can access devices
98  *                  that are already paired before entering restricted mode,
99  *                  but they cannot remove any of these devices.
100  *
101  * Returns          bool
102  *
103  ******************************************************************************/
104 bool is_restricted_mode(void);
105 
106 /*******************************************************************************
107  *
108  * Function         btif_get_adapter_properties
109  *
110  * Description      Fetches all local adapter properties
111  *
112  * Returns          bt_status_t
113  *
114  ******************************************************************************/
115 bt_status_t btif_get_adapter_properties(void);
116 
117 /*******************************************************************************
118  *
119  * Function         btif_get_adapter_property
120  *
121  * Description      Fetches property value from local cache
122  *
123  * Returns          bt_status_t
124  *
125  ******************************************************************************/
126 bt_status_t btif_get_adapter_property(bt_property_type_t type);
127 
128 /*******************************************************************************
129  *
130  * Function         btif_set_adapter_property
131  *
132  * Description      Updates core stack with property value and stores it in
133  *                  local cache
134  *
135  * Returns          bt_status_t
136  *
137  ******************************************************************************/
138 bt_status_t btif_set_adapter_property(const bt_property_t* property);
139 
140 /*******************************************************************************
141  *
142  * Function         btif_get_remote_device_property
143  *
144  * Description      Fetches the remote device property from the NVRAM
145  *
146  * Returns          bt_status_t
147  *
148  ******************************************************************************/
149 bt_status_t btif_get_remote_device_property(bt_bdaddr_t* remote_addr,
150                                             bt_property_type_t type);
151 
152 /*******************************************************************************
153  *
154  * Function         btif_get_remote_device_properties
155  *
156  * Description      Fetches all the remote device properties from NVRAM
157  *
158  * Returns          bt_status_t
159  *
160  ******************************************************************************/
161 bt_status_t btif_get_remote_device_properties(bt_bdaddr_t* remote_addr);
162 
163 /*******************************************************************************
164  *
165  * Function         btif_set_remote_device_property
166  *
167  * Description      Writes the remote device property to NVRAM.
168  *                  Currently, BT_PROPERTY_REMOTE_FRIENDLY_NAME is the only
169  *                  remote device property that can be set
170  *
171  * Returns          bt_status_t
172  *
173  ******************************************************************************/
174 bt_status_t btif_set_remote_device_property(bt_bdaddr_t* remote_addr,
175                                             const bt_property_t* property);
176 
177 /*******************************************************************************
178  *
179  * Function         btif_get_remote_service_record
180  *
181  * Description      Looks up the service matching uuid on the remote device
182  *                  and fetches the SCN and service_name if the UUID is found
183  *
184  * Returns          bt_status_t
185  *
186  ******************************************************************************/
187 bt_status_t btif_get_remote_service_record(bt_bdaddr_t* remote_addr,
188                                            bt_uuid_t* uuid);
189 
190 /*******************************************************************************
191  *  BTIF DM API
192  ******************************************************************************/
193 
194 /*******************************************************************************
195  *
196  * Function         btif_dm_start_discovery
197  *
198  * Description      Start device discovery/inquiry
199  *
200  *
201  * Returns          bt_status_t
202  *
203  ******************************************************************************/
204 bt_status_t btif_dm_start_discovery(void);
205 
206 /*******************************************************************************
207  *
208  * Function         btif_dm_cancel_discovery
209  *
210  * Description      Cancels search
211  *
212  * Returns          bt_status_t
213  *
214  ******************************************************************************/
215 bt_status_t btif_dm_cancel_discovery(void);
216 
217 /*******************************************************************************
218  *
219  * Function         btif_dm_create_bond
220  *
221  * Description      Initiate bonding with the specified device
222  *
223  * Returns          bt_status_t
224  *
225  ******************************************************************************/
226 bt_status_t btif_dm_create_bond(const bt_bdaddr_t* bd_addr, int transport);
227 
228 /*******************************************************************************
229  *
230  * Function         btif_dm_create_bond_out_of_band
231  *
232  * Description      Initiate bonding with the specified device using OOB data.
233  *
234  * Returns          bt_status_t
235  *
236  ******************************************************************************/
237 bt_status_t btif_dm_create_bond_out_of_band(
238     const bt_bdaddr_t* bd_addr, int transport,
239     const bt_out_of_band_data_t* oob_data);
240 
241 /*******************************************************************************
242  *
243  * Function         btif_dm_cancel_bond
244  *
245  * Description      Initiate bonding with the specified device
246  *
247  * Returns          bt_status_t
248  *
249  ******************************************************************************/
250 bt_status_t btif_dm_cancel_bond(const bt_bdaddr_t* bd_addr);
251 
252 /*******************************************************************************
253  *
254  * Function         btif_dm_remove_bond
255  *
256  * Description      Removes bonding with the specified device
257  *
258  * Returns          bt_status_t
259  *
260  ******************************************************************************/
261 bt_status_t btif_dm_remove_bond(const bt_bdaddr_t* bd_addr);
262 
263 /*******************************************************************************
264  *
265  * Function         btif_dm_get_connection_state
266  *
267  * Description      Returns whether the remote device is currently connected
268  *
269  * Returns          0 if not connected
270  *
271  ******************************************************************************/
272 uint16_t btif_dm_get_connection_state(const bt_bdaddr_t* bd_addr);
273 
274 /*******************************************************************************
275  *
276  * Function         btif_dm_pin_reply
277  *
278  * Description      BT legacy pairing - PIN code reply
279  *
280  * Returns          bt_status_t
281  *
282  ******************************************************************************/
283 bt_status_t btif_dm_pin_reply(const bt_bdaddr_t* bd_addr, uint8_t accept,
284                               uint8_t pin_len, bt_pin_code_t* pin_code);
285 
286 /*******************************************************************************
287  *
288  * Function         btif_dm_passkey_reply
289  *
290  * Description      BT SSP passkey reply
291  *
292  * Returns          bt_status_t
293  *
294  ******************************************************************************/
295 bt_status_t btif_dm_passkey_reply(const bt_bdaddr_t* bd_addr, uint8_t accept,
296                                   uint32_t passkey);
297 
298 /*******************************************************************************
299  *
300  * Function         btif_dm_ssp_reply
301  *
302  * Description      BT SSP Reply - Just Works, Numeric Comparison & Passkey
303  *                  Entry
304  *
305  * Returns          bt_status_t
306  *
307  ******************************************************************************/
308 bt_status_t btif_dm_ssp_reply(const bt_bdaddr_t* bd_addr,
309                               bt_ssp_variant_t variant, uint8_t accept,
310                               uint32_t passkey);
311 
312 /*******************************************************************************
313  *
314  * Function         btif_dm_get_adapter_property
315  *
316  * Description      Queries the BTA for the adapter property
317  *
318  * Returns          bt_status_t
319  *
320  ******************************************************************************/
321 bt_status_t btif_dm_get_adapter_property(bt_property_t* prop);
322 
323 /*******************************************************************************
324  *
325  * Function         btif_dm_get_remote_services
326  *
327  * Description      Start SDP to get remote services
328  *
329  * Returns          bt_status_t
330  *
331  ******************************************************************************/
332 bt_status_t btif_dm_get_remote_service_record(bt_bdaddr_t* remote_addr,
333                                               bt_uuid_t* uuid);
334 
335 /*******************************************************************************
336  *
337  * Function         btif_dm_get_remote_services
338  *
339  * Description      Start SDP to get remote services
340  *
341  * Returns          bt_status_t
342  *
343  ******************************************************************************/
344 bt_status_t btif_dm_get_remote_services(bt_bdaddr_t* remote_addr);
345 
346 /*******************************************************************************
347  *
348  * Function         btif_dm_get_remote_services_by_transport
349  *
350  * Description      Start SDP to get remote services by transport
351  *
352  * Returns          bt_status_t
353  *
354  ******************************************************************************/
355 bt_status_t btif_dm_get_remote_services_by_transport(bt_bdaddr_t* remote_addr,
356                                                      int transport);
357 
358 /*******************************************************************************
359  *
360  * Function         btif_dut_mode_configure
361  *
362  * Description      Configure Test Mode - 'enable' to 1 puts the device in test
363  *                  mode and 0 exits test mode
364  *
365  * Returns          BT_STATUS_SUCCESS on success
366  *
367  ******************************************************************************/
368 bt_status_t btif_dut_mode_configure(uint8_t enable);
369 
370 /*******************************************************************************
371  *
372  * Function         btif_dut_mode_send
373  *
374  * Description     Sends a HCI Vendor specific command to the controller
375  *
376  * Returns          BT_STATUS_SUCCESS on success
377  *
378  ******************************************************************************/
379 bt_status_t btif_dut_mode_send(uint16_t opcode, uint8_t* buf, uint8_t len);
380 
381 /*******************************************************************************
382  *
383  * Function         btif_le_test_mode
384  *
385  * Description     Sends a HCI BLE Test command to the Controller
386  *
387  * Returns          BT_STATUS_SUCCESS on success
388  *
389  ******************************************************************************/
390 bt_status_t btif_le_test_mode(uint16_t opcode, uint8_t* buf, uint8_t len);
391 
392 /*******************************************************************************
393  *
394  * Function         btif_dm_read_energy_info
395  *
396  * Description     Reads the energy info from controller
397  *
398  * Returns          void
399  *
400  ******************************************************************************/
401 void btif_dm_read_energy_info();
402 
403 /*******************************************************************************
404  *
405  * Function         btif_config_hci_snoop_log
406  *
407  * Description     enable or disable HCI snoop log
408  *
409  * Returns          BT_STATUS_SUCCESS on success
410  *
411  ******************************************************************************/
412 bt_status_t btif_config_hci_snoop_log(uint8_t enable);
413 
414 /*******************************************************************************
415  *
416  * Function         btif_debug_bond_event_dump
417  *
418  * Description     Dump bond event information
419  *
420  * Returns          void
421  *
422  ******************************************************************************/
423 void btif_debug_bond_event_dump(int fd);
424 
425 #endif /* BTIF_API_H */
426