1/******************************************************************************
2 *
3 *  Copyright (C) 1999-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 file contains the Bluetooth Manager (BTM) API function external
22 *  definitions.
23 *
24 ******************************************************************************/
25#ifndef BTM_API_H
26#define BTM_API_H
27
28#include "bt_target.h"
29#include "device/include/esco_parameters.h"
30#include "hcidefs.h"
31#include "sdp_api.h"
32
33#include "smp_api.h"
34
35#include "btm_api_types.h"
36
37/*****************************************************************************
38 *  DEVICE CONTROL and COMMON
39 ****************************************************************************/
40
41/*****************************************************************************
42 *  EXTERNAL FUNCTION DECLARATIONS
43 ****************************************************************************/
44
45/*****************************************************************************
46 *  DEVICE CONTROL and COMMON FUNCTIONS
47 ****************************************************************************/
48
49/*******************************************************************************
50 *
51 * Function         BTM_DeviceReset
52 *
53 * Description      This function is called to reset the controller.  The
54 *                  Callback function if provided is called when startup of the
55 *                  device has completed.
56 *
57 * Returns          void
58 *
59 ******************************************************************************/
60extern void BTM_DeviceReset(tBTM_CMPL_CB* p_cb);
61
62/*******************************************************************************
63 *
64 * Function         BTM_IsDeviceUp
65 *
66 * Description      This function is called to check if the device is up.
67 *
68 * Returns          true if device is up, else false
69 *
70 ******************************************************************************/
71extern bool BTM_IsDeviceUp(void);
72
73/*******************************************************************************
74 *
75 * Function         BTM_SetLocalDeviceName
76 *
77 * Description      This function is called to set the local device name.
78 *
79 * Returns          BTM_CMD_STARTED if successful, otherwise an error
80 *
81 ******************************************************************************/
82extern tBTM_STATUS BTM_SetLocalDeviceName(char* p_name);
83
84/*******************************************************************************
85 *
86 * Function         BTM_SetDeviceClass
87 *
88 * Description      This function is called to set the local device class
89 *
90 * Returns          BTM_SUCCESS if successful, otherwise an error
91 *
92 ******************************************************************************/
93extern tBTM_STATUS BTM_SetDeviceClass(DEV_CLASS dev_class);
94
95/*******************************************************************************
96 *
97 * Function         BTM_ReadLocalDeviceName
98 *
99 * Description      This function is called to read the local device name.
100 *
101 * Returns          status of the operation
102 *                  If success, BTM_SUCCESS is returned and p_name points stored
103 *                              local device name
104 *                  If BTM doesn't store local device name, BTM_NO_RESOURCES is
105 *                              is returned and p_name is set to NULL
106 *
107 ******************************************************************************/
108extern tBTM_STATUS BTM_ReadLocalDeviceName(char** p_name);
109
110/*******************************************************************************
111 *
112 * Function         BTM_ReadLocalDeviceNameFromController
113 *
114 * Description      Get local device name from controller. Do not use cached
115 *                  name (used to get chip-id prior to btm reset complete).
116 *
117 * Returns          BTM_CMD_STARTED if successful, otherwise an error
118 *
119 ******************************************************************************/
120extern tBTM_STATUS BTM_ReadLocalDeviceNameFromController(
121    tBTM_CMPL_CB* p_rln_cmpl_cback);
122
123/*******************************************************************************
124 *
125 * Function         BTM_ReadDeviceClass
126 *
127 * Description      This function is called to read the local device class
128 *
129 * Returns          pointer to the device class
130 *
131 ******************************************************************************/
132extern uint8_t* BTM_ReadDeviceClass(void);
133
134/*******************************************************************************
135 *
136 * Function         BTM_ReadLocalFeatures
137 *
138 * Description      This function is called to read the local features
139 *
140 * Returns          pointer to the local features string
141 *
142 ******************************************************************************/
143extern uint8_t* BTM_ReadLocalFeatures(void);
144
145/*******************************************************************************
146 *
147 * Function         BTM_RegisterForDeviceStatusNotif
148 *
149 * Description      This function is called to register for device status
150 *                  change notifications.
151 *
152 * Returns          pointer to previous caller's callback function or NULL if
153 *                  first registration.
154 *
155 ******************************************************************************/
156extern tBTM_DEV_STATUS_CB* BTM_RegisterForDeviceStatusNotif(
157    tBTM_DEV_STATUS_CB* p_cb);
158
159/*******************************************************************************
160 *
161 * Function         BTM_RegisterForVSEvents
162 *
163 * Description      This function is called to register/deregister for vendor
164 *                  specific HCI events.
165 *
166 *                  If is_register=true, then the function will be registered;
167 *                  otherwise the function will be deregistered.
168 *
169 * Returns          BTM_SUCCESS if successful,
170 *                  BTM_BUSY if maximum number of callbacks have already been
171 *                           registered.
172 *
173 ******************************************************************************/
174extern tBTM_STATUS BTM_RegisterForVSEvents(tBTM_VS_EVT_CB* p_cb,
175                                           bool is_register);
176
177/*******************************************************************************
178 *
179 * Function         BTM_VendorSpecificCommand
180 *
181 * Description      Send a vendor specific HCI command to the controller.
182 *
183 ******************************************************************************/
184extern void BTM_VendorSpecificCommand(uint16_t opcode, uint8_t param_len,
185                                      uint8_t* p_param_buf,
186                                      tBTM_VSC_CMPL_CB* p_cb);
187
188/*******************************************************************************
189 *
190 * Function         BTM_AllocateSCN
191 *
192 * Description      Look through the Server Channel Numbers for a free one to be
193 *                  used with an RFCOMM connection.
194 *
195 * Returns          Allocated SCN number or 0 if none.
196 *
197 ******************************************************************************/
198extern uint8_t BTM_AllocateSCN(void);
199
200/*******************************************************************************
201 *
202 * Function         BTM_TryAllocateSCN
203 *
204 * Description      Try to allocate a fixed server channel
205 *
206 * Returns          Returns true if server channel was available
207 *
208 ******************************************************************************/
209extern bool BTM_TryAllocateSCN(uint8_t scn);
210
211/*******************************************************************************
212 *
213 * Function         BTM_FreeSCN
214 *
215 * Description      Free the specified SCN.
216 *
217 * Returns          true if successful, false if SCN is not in use or invalid
218 *
219 ******************************************************************************/
220extern bool BTM_FreeSCN(uint8_t scn);
221
222/*******************************************************************************
223 *
224 * Function         BTM_SetTraceLevel
225 *
226 * Description      This function sets the trace level for BTM.  If called with
227 *                  a value of 0xFF, it simply returns the current trace level.
228 *
229 * Returns          The new or current trace level
230 *
231 ******************************************************************************/
232extern uint8_t BTM_SetTraceLevel(uint8_t new_level);
233
234/*******************************************************************************
235 *
236 * Function         BTM_WritePageTimeout
237 *
238 * Description      Send HCI Wite Page Timeout.
239 *
240 ******************************************************************************/
241extern void BTM_WritePageTimeout(uint16_t timeout);
242
243/*******************************************************************************
244 *
245 * Function         BTM_WriteVoiceSettings
246 *
247 * Description      Send HCI Write Voice Settings command.
248 *                  See hcidefs.h for settings bitmask values.
249 *
250 ******************************************************************************/
251extern void BTM_WriteVoiceSettings(uint16_t settings);
252
253/*******************************************************************************
254 *
255 * Function         BTM_EnableTestMode
256 *
257 * Description      Send HCI the enable device under test command.
258 *
259 *                  Note: Controller can only be taken out of this mode by
260 *                      resetting the controller.
261 *
262 * Returns
263 *      BTM_SUCCESS         Command sent.
264 *      BTM_NO_RESOURCES    If out of resources to send the command.
265 *
266 *
267 ******************************************************************************/
268extern tBTM_STATUS BTM_EnableTestMode(void);
269
270/*******************************************************************************
271 * DEVICE DISCOVERY FUNCTIONS - Inquiry, Remote Name, Discovery, Class of Device
272 ******************************************************************************/
273
274/*******************************************************************************
275 *
276 * Function         BTM_SetDiscoverability
277 *
278 * Description      This function is called to set the device into or out of
279 *                  discoverable mode. Discoverable mode means inquiry
280 *                  scans are enabled.  If a value of '0' is entered for window
281 *                  or interval, the default values are used.
282 *
283 * Returns          BTM_SUCCESS if successful
284 *                  BTM_BUSY if a setting of the filter is already in progress
285 *                  BTM_NO_RESOURCES if couldn't get a memory pool buffer
286 *                  BTM_ILLEGAL_VALUE if a bad parameter was detected
287 *                  BTM_WRONG_MODE if the device is not up.
288 *
289 ******************************************************************************/
290extern tBTM_STATUS BTM_SetDiscoverability(uint16_t inq_mode, uint16_t window,
291                                          uint16_t interval);
292
293/*******************************************************************************
294 *
295 * Function         BTM_ReadDiscoverability
296 *
297 * Description      This function is called to read the current discoverability
298 *                  mode of the device.
299 *
300 * Output Params:   p_window - current inquiry scan duration
301 *                  p_interval - current inquiry scan interval
302 *
303 * Returns          BTM_NON_DISCOVERABLE, BTM_LIMITED_DISCOVERABLE, or
304 *                  BTM_GENERAL_DISCOVERABLE
305 *
306 ******************************************************************************/
307extern uint16_t BTM_ReadDiscoverability(uint16_t* p_window,
308                                        uint16_t* p_interval);
309
310/*******************************************************************************
311 *
312 * Function         BTM_SetPeriodicInquiryMode
313 *
314 * Description      This function is called to set the device periodic inquiry
315 *                  mode. If the duration is zero, the periodic inquiry mode is
316 *                  cancelled.
317 *
318 * Parameters:      p_inqparms - pointer to the inquiry information
319 *                      mode - GENERAL or LIMITED inquiry
320 *                      duration - length in 1.28 sec intervals (If '0', the
321 *                                 inquiry is CANCELLED)
322 *                      max_resps - maximum amount of devices to search for
323 *                                  before ending the inquiry
324 *                      filter_cond_type - BTM_CLR_INQUIRY_FILTER,
325 *                                         BTM_FILTER_COND_DEVICE_CLASS, or
326 *                                         BTM_FILTER_COND_BD_ADDR
327 *                      filter_cond - value for the filter (based on
328 *                                                          filter_cond_type)
329 *
330 *                  max_delay - maximum amount of time between successive
331 *                              inquiries
332 *                  min_delay - minimum amount of time between successive
333 *                              inquiries
334 *                  p_results_cb - callback returning pointer to results
335 *                              (tBTM_INQ_RESULTS)
336 *
337 * Returns          BTM_CMD_STARTED if successfully started
338 *                  BTM_ILLEGAL_VALUE if a bad parameter is detected
339 *                  BTM_NO_RESOURCES if could not allocate a message buffer
340 *                  BTM_SUCCESS - if cancelling the periodic inquiry
341 *                  BTM_BUSY - if an inquiry is already active
342 *                  BTM_WRONG_MODE if the device is not up.
343 *
344 ******************************************************************************/
345extern tBTM_STATUS BTM_SetPeriodicInquiryMode(
346    tBTM_INQ_PARMS* p_inqparms, uint16_t max_delay, uint16_t min_delay,
347    tBTM_INQ_RESULTS_CB* p_results_cb);
348
349/*******************************************************************************
350 *
351 * Function         BTM_StartInquiry
352 *
353 * Description      This function is called to start an inquiry.
354 *
355 * Parameters:      p_inqparms - pointer to the inquiry information
356 *                      mode - GENERAL or LIMITED inquiry
357 *                      duration - length in 1.28 sec intervals (If '0', the
358 *                                 inquiry is CANCELLED)
359 *                      max_resps - maximum amount of devices to search for
360 *                                  before ending the inquiry
361 *                      filter_cond_type - BTM_CLR_INQUIRY_FILTER,
362 *                                         BTM_FILTER_COND_DEVICE_CLASS, or
363 *                                         BTM_FILTER_COND_BD_ADDR
364 *                      filter_cond - value for the filter (based on
365 *                                                          filter_cond_type)
366 *
367 *                  p_results_cb  - Pointer to the callback routine which gets
368 *                                called upon receipt of an inquiry result. If
369 *                                this field is NULL, the application is not
370 *                                notified.
371 *
372 *                  p_cmpl_cb   - Pointer to the callback routine which gets
373 *                                called upon completion.  If this field is
374 *                                NULL, the application is not notified when
375 *                                completed.
376 * Returns          tBTM_STATUS
377 *                  BTM_CMD_STARTED if successfully initiated
378 *                  BTM_BUSY if already in progress
379 *                  BTM_ILLEGAL_VALUE if parameter(s) are out of range
380 *                  BTM_NO_RESOURCES if could not allocate resources to start
381 *                                   the command
382 *                  BTM_WRONG_MODE if the device is not up.
383 *
384 ******************************************************************************/
385extern tBTM_STATUS BTM_StartInquiry(tBTM_INQ_PARMS* p_inqparms,
386                                    tBTM_INQ_RESULTS_CB* p_results_cb,
387                                    tBTM_CMPL_CB* p_cmpl_cb);
388
389/*******************************************************************************
390 *
391 * Function         BTM_IsInquiryActive
392 *
393 * Description      Return a bit mask of the current inquiry state
394 *
395 * Returns          BTM_INQUIRY_INACTIVE if inactive (0)
396 *                  BTM_LIMITED_INQUIRY_ACTIVE if a limted inquiry is active
397 *                  BTM_GENERAL_INQUIRY_ACTIVE if a general inquiry is active
398 *                  BTM_PERIODIC_INQUIRY_ACTIVE if a periodic inquiry is active
399 *
400 ******************************************************************************/
401extern uint16_t BTM_IsInquiryActive(void);
402
403/*******************************************************************************
404 *
405 * Function         BTM_CancelInquiry
406 *
407 * Description      This function cancels an inquiry if active
408 *
409 * Returns          BTM_SUCCESS if successful
410 *                  BTM_NO_RESOURCES if could not allocate a message buffer
411 *                  BTM_WRONG_MODE if the device is not up.
412 *
413 ******************************************************************************/
414extern tBTM_STATUS BTM_CancelInquiry(void);
415
416/*******************************************************************************
417 *
418 * Function         BTM_CancelPeriodicInquiry
419 *
420 * Description      This function cancels a periodic inquiry
421 *
422 * Returns
423 *                  BTM_NO_RESOURCES if could not allocate a message buffer
424 *                  BTM_SUCCESS - if cancelling the periodic inquiry
425 *                  BTM_WRONG_MODE if the device is not up.
426 *
427 ******************************************************************************/
428extern tBTM_STATUS BTM_CancelPeriodicInquiry(void);
429
430/*******************************************************************************
431 *
432 * Function         BTM_SetConnectability
433 *
434 * Description      This function is called to set the device into or out of
435 *                  connectable mode. Discoverable mode means page scans are
436 *                  enabled.
437 *
438 * Returns          BTM_SUCCESS if successful
439 *                  BTM_ILLEGAL_VALUE if a bad parameter is detected
440 *                  BTM_NO_RESOURCES if could not allocate a message buffer
441 *                  BTM_WRONG_MODE if the device is not up.
442 *
443 ******************************************************************************/
444extern tBTM_STATUS BTM_SetConnectability(uint16_t page_mode, uint16_t window,
445                                         uint16_t interval);
446
447/*******************************************************************************
448 *
449 * Function         BTM_ReadConnectability
450 *
451 * Description      This function is called to read the current discoverability
452 *                  mode of the device.
453 * Output Params    p_window - current page scan duration
454 *                  p_interval - current time between page scans
455 *
456 * Returns          BTM_NON_CONNECTABLE or BTM_CONNECTABLE
457 *
458 ******************************************************************************/
459extern uint16_t BTM_ReadConnectability(uint16_t* p_window,
460                                       uint16_t* p_interval);
461
462/*******************************************************************************
463 *
464 * Function         BTM_SetInquiryMode
465 *
466 * Description      This function is called to set standard, with RSSI
467 *                  mode or extended of the inquiry for local device.
468 *
469 * Input Params:    BTM_INQ_RESULT_STANDARD, BTM_INQ_RESULT_WITH_RSSI or
470 *                  BTM_INQ_RESULT_EXTENDED
471 *
472 * Returns          BTM_SUCCESS if successful
473 *                  BTM_NO_RESOURCES if couldn't get a memory pool buffer
474 *                  BTM_ILLEGAL_VALUE if a bad parameter was detected
475 *                  BTM_WRONG_MODE if the device is not up.
476 *
477 ******************************************************************************/
478extern tBTM_STATUS BTM_SetInquiryMode(uint8_t mode);
479
480/*******************************************************************************
481 *
482 * Function         BTM_SetInquiryScanType
483 *
484 * Description      This function is called to set the iquiry scan-type to
485 *                  standard or interlaced.
486 *
487 * Input Params:    BTM_SCAN_TYPE_STANDARD or BTM_SCAN_TYPE_INTERLACED
488 *
489 * Returns          BTM_SUCCESS if successful
490 *                  BTM_MODE_UNSUPPORTED if not a 1.2 device
491 *                  BTM_WRONG_MODE if the device is not up.
492 *
493 ******************************************************************************/
494extern tBTM_STATUS BTM_SetInquiryScanType(uint16_t scan_type);
495
496/*******************************************************************************
497 *
498 * Function         BTM_SetPageScanType
499 *
500 * Description      This function is called to set the page scan-type to
501 *                  standard or interlaced.
502 *
503 * Input Params:    BTM_SCAN_TYPE_STANDARD or BTM_SCAN_TYPE_INTERLACED
504 *
505 * Returns          BTM_SUCCESS if successful
506 *                  BTM_MODE_UNSUPPORTED if not a 1.2 device
507 *                  BTM_WRONG_MODE if the device is not up.
508 *
509 ******************************************************************************/
510
511extern tBTM_STATUS BTM_SetPageScanType(uint16_t scan_type);
512
513/*******************************************************************************
514 *
515 * Function         BTM_ReadRemoteDeviceName
516 *
517 * Description      This function initiates a remote device HCI command to the
518 *                  controller and calls the callback when the process has
519 *                  completed.
520 *
521 * Input Params:    remote_bda      - device address of name to retrieve
522 *                  p_cb            - callback function called when
523 *                                    BTM_CMD_STARTED is returned.
524 *                                    A pointer to tBTM_REMOTE_DEV_NAME is
525 *                                    passed to the callback.
526 *
527 * Returns
528 *                  BTM_CMD_STARTED is returned if the request was successfully
529 *                                  sent to HCI.
530 *                  BTM_BUSY if already in progress
531 *                  BTM_UNKNOWN_ADDR if device address is bad
532 *                  BTM_NO_RESOURCES if resources could not be allocated to
533 *                                   start the command
534 *                  BTM_WRONG_MODE if the device is not up.
535 *
536 ******************************************************************************/
537extern tBTM_STATUS BTM_ReadRemoteDeviceName(const RawAddress& remote_bda,
538                                            tBTM_CMPL_CB* p_cb,
539                                            tBT_TRANSPORT transport);
540
541/*******************************************************************************
542 *
543 * Function         BTM_CancelRemoteDeviceName
544 *
545 * Description      This function initiates the cancel request for the specified
546 *                  remote device.
547 *
548 * Input Params:    None
549 *
550 * Returns
551 *                  BTM_CMD_STARTED is returned if the request was successfully
552 *                                  sent to HCI.
553 *                  BTM_NO_RESOURCES if resources could not be allocated to
554 *                                   start the command
555 *                  BTM_WRONG_MODE if there is no active remote name request.
556 *
557 ******************************************************************************/
558extern tBTM_STATUS BTM_CancelRemoteDeviceName(void);
559
560/*******************************************************************************
561 *
562 * Function         BTM_ReadRemoteVersion
563 *
564 * Description      This function is called to read a remote device's version
565 *
566 * Returns          BTM_SUCCESS if successful, otherwise an error
567 *
568 ******************************************************************************/
569extern tBTM_STATUS BTM_ReadRemoteVersion(const RawAddress& addr,
570                                         uint8_t* lmp_version,
571                                         uint16_t* manufacturer,
572                                         uint16_t* lmp_sub_version);
573
574/*******************************************************************************
575 *
576 * Function         BTM_ReadRemoteFeatures
577 *
578 * Description      This function is called to read a remote device's
579 *                  supported features mask (features mask located at page 0)
580 *
581 *                  Note: The size of device features mask page is
582 *                  BTM_FEATURE_BYTES_PER_PAGE bytes.
583 *
584 * Returns          pointer to the remote supported features mask
585 *
586 ******************************************************************************/
587extern uint8_t* BTM_ReadRemoteFeatures(const RawAddress& addr);
588
589/*******************************************************************************
590 *
591 * Function         BTM_ReadRemoteExtendedFeatures
592 *
593 * Description      This function is called to read a specific extended features
594 *                  page of the remote device
595 *
596 *                  Note1: The size of device features mask page is
597 *                  BTM_FEATURE_BYTES_PER_PAGE bytes.
598 *                  Note2: The valid device features mask page number depends on
599 *                  the remote device capabilities. It is expected to be in the
600 *                  range [0 - BTM_EXT_FEATURES_PAGE_MAX].
601
602 * Returns          pointer to the remote extended features mask
603 *                  or NULL if page_number is not valid
604 *
605 ******************************************************************************/
606extern uint8_t* BTM_ReadRemoteExtendedFeatures(const RawAddress& addr,
607                                               uint8_t page_number);
608
609/*******************************************************************************
610 *
611 * Function         BTM_ReadNumberRemoteFeaturesPages
612 *
613 * Description      This function is called to retrieve the number of feature
614 *                  pages read from the remote device
615 *
616 * Returns          number of features pages read from the remote device
617 *
618 ******************************************************************************/
619extern uint8_t BTM_ReadNumberRemoteFeaturesPages(const RawAddress& addr);
620
621/*******************************************************************************
622 *
623 * Function         BTM_ReadAllRemoteFeatures
624 *
625 * Description      Read all the features of the remote device
626 *
627 * Returns          pointer to the byte[0] of the page[0] of the remote device
628 *                  feature mask.
629 *
630 * Note:            the function returns the pointer to the array of the size
631 *                  BTM_FEATURE_BYTES_PER_PAGE * (BTM_EXT_FEATURES_PAGE_MAX + 1)
632 *
633 ******************************************************************************/
634extern uint8_t* BTM_ReadAllRemoteFeatures(const RawAddress& addr);
635
636/*******************************************************************************
637 *
638 * Function         BTM_InqDbRead
639 *
640 * Description      This function looks through the inquiry database for a match
641 *                  based on Bluetooth Device Address. This is the application's
642 *                  interface to get the inquiry details of a specific BD
643 *                  address.
644 *
645 * Returns          pointer to entry, or NULL if not found
646 *
647 ******************************************************************************/
648extern tBTM_INQ_INFO* BTM_InqDbRead(const RawAddress& p_bda);
649
650/*******************************************************************************
651 *
652 * Function         BTM_InqDbFirst
653 *
654 * Description      This function looks through the inquiry database for the
655 *                  first used entry, and returns that. This is used in
656 *                  conjunction with BTM_InqDbNext by applications as a way to
657 *                  walk through the inquiry database.
658 *
659 * Returns          pointer to first in-use entry, or NULL if DB is empty
660 *
661 ******************************************************************************/
662extern tBTM_INQ_INFO* BTM_InqDbFirst(void);
663
664/*******************************************************************************
665 *
666 * Function         BTM_InqDbNext
667 *
668 * Description      This function looks through the inquiry database for the
669 *                  next used entry, and returns that.  If the input parameter
670 *                  is NULL, the first entry is returned.
671 *
672 * Returns          pointer to next in-use entry, or NULL if no more found.
673 *
674 ******************************************************************************/
675extern tBTM_INQ_INFO* BTM_InqDbNext(tBTM_INQ_INFO* p_cur);
676
677/*******************************************************************************
678 *
679 * Function         BTM_ClearInqDb
680 *
681 * Description      This function is called to clear out a device or all devices
682 *                  from the inquiry database.
683 *
684 * Parameter        p_bda - (input) BD_ADDR ->  Address of device to clear
685 *                                              (NULL clears all entries)
686 *
687 * Returns          BTM_BUSY if an inquiry, get remote name, or event filter
688 *                          is active, otherwise BTM_SUCCESS
689 *
690 ******************************************************************************/
691extern tBTM_STATUS BTM_ClearInqDb(const RawAddress* p_bda);
692
693/*******************************************************************************
694 *
695 * Function         BTM_ReadInquiryRspTxPower
696 *
697 * Description      This command will read the inquiry Transmit Power level used
698 *                  to transmit the FHS and EIR data packets.
699 *                  This can be used directly in the Tx Power Level EIR data
700 *                  type.
701 *
702 * Returns          BTM_SUCCESS if successful
703 *
704 ******************************************************************************/
705extern tBTM_STATUS BTM_ReadInquiryRspTxPower(tBTM_CMPL_CB* p_cb);
706
707/*****************************************************************************
708 *  ACL CHANNEL MANAGEMENT FUNCTIONS
709 ****************************************************************************/
710/*******************************************************************************
711 *
712 * Function         BTM_SetLinkPolicy
713 *
714 * Description      Create and send HCI "Write Policy Set" command
715 *
716 * Returns          BTM_CMD_STARTED if successfully initiated, otherwise error
717 *
718 ******************************************************************************/
719extern tBTM_STATUS BTM_SetLinkPolicy(const RawAddress& remote_bda,
720                                     uint16_t* settings);
721
722/*******************************************************************************
723 *
724 * Function         BTM_SetDefaultLinkPolicy
725 *
726 * Description      Set the default value for HCI "Write Policy Set" command
727 *                  to use when an ACL link is created.
728 *
729 * Returns          void
730 *
731 ******************************************************************************/
732extern void BTM_SetDefaultLinkPolicy(uint16_t settings);
733
734/*******************************************************************************
735 *
736 * Function         BTM_SetDefaultLinkSuperTout
737 *
738 * Description      Set the default value for HCI "Write Link Supervision
739 *                  Timeout" command to use when an ACL link is created.
740 *
741 * Returns          void
742 *
743 ******************************************************************************/
744extern void BTM_SetDefaultLinkSuperTout(uint16_t timeout);
745
746/*******************************************************************************
747 *
748 * Function         BTM_SetLinkSuperTout
749 *
750 * Description      Create and send HCI "Write Link Supervision Timeout" command
751 *
752 * Returns          BTM_CMD_STARTED if successfully initiated, otherwise error
753 *
754 ******************************************************************************/
755extern tBTM_STATUS BTM_SetLinkSuperTout(const RawAddress& remote_bda,
756                                        uint16_t timeout);
757/*******************************************************************************
758 *
759 * Function         BTM_GetLinkSuperTout
760 *
761 * Description      Read the link supervision timeout value of the connection
762 *
763 * Returns          status of the operation
764 *
765 ******************************************************************************/
766extern tBTM_STATUS BTM_GetLinkSuperTout(const RawAddress& remote_bda,
767                                        uint16_t* p_timeout);
768
769/*******************************************************************************
770 *
771 * Function         BTM_IsAclConnectionUp
772 *
773 * Description      This function is called to check if an ACL connection exists
774 *                  to a specific remote BD Address.
775 *
776 * Returns          true if connection is up, else false.
777 *
778 ******************************************************************************/
779extern bool BTM_IsAclConnectionUp(const RawAddress& remote_bda,
780                                  tBT_TRANSPORT transport);
781
782/*******************************************************************************
783 *
784 * Function         BTM_GetRole
785 *
786 * Description      This function is called to get the role of the local device
787 *                  for the ACL connection with the specified remote device
788 *
789 * Returns          BTM_SUCCESS if connection exists.
790 *                  BTM_UNKNOWN_ADDR if no active link with bd addr specified
791 *
792 ******************************************************************************/
793extern tBTM_STATUS BTM_GetRole(const RawAddress& remote_bd_addr,
794                               uint8_t* p_role);
795
796/*******************************************************************************
797 *
798 * Function         BTM_SwitchRole
799 *
800 * Description      This function is called to switch role between master and
801 *                  slave.  If role is already set it will do nothing.  If the
802 *                  command was initiated, the callback function is called upon
803 *                  completion.
804 *
805 * Returns          BTM_SUCCESS if already in specified role.
806 *                  BTM_CMD_STARTED if command issued to controller.
807 *                  BTM_NO_RESOURCES if memory couldn't be allocated to issue
808 *                                   the command
809 *                  BTM_UNKNOWN_ADDR if no active link with bd addr specified
810 *                  BTM_MODE_UNSUPPORTED if the local device does not support
811 *                                       role switching
812 *
813 ******************************************************************************/
814extern tBTM_STATUS BTM_SwitchRole(const RawAddress& remote_bd_addr,
815                                  uint8_t new_role, tBTM_CMPL_CB* p_cb);
816
817/*******************************************************************************
818 *
819 * Function         BTM_ReadRSSI
820 *
821 * Description      This function is called to read the link policy settings.
822 *                  The address of link policy results are returned in the
823 *                  callback. (tBTM_RSSI_RESULT)
824 *
825 * Returns          BTM_CMD_STARTED if command issued to controller.
826 *                  BTM_NO_RESOURCES if memory couldn't be allocated to issue
827 *                                   the command
828 *                  BTM_UNKNOWN_ADDR if no active link with bd addr specified
829 *                  BTM_BUSY if command is already in progress
830 *
831 ******************************************************************************/
832extern tBTM_STATUS BTM_ReadRSSI(const RawAddress& remote_bda,
833                                tBTM_CMPL_CB* p_cb);
834
835/*******************************************************************************
836 *
837 * Function         BTM_ReadFailedContactCounter
838 *
839 * Description      This function is called to read the failed contact counter.
840 *                  The result is returned in the callback.
841 *                  (tBTM_FAILED_CONTACT_COUNTER_RESULT)
842 *
843 * Returns          BTM_CMD_STARTED if command issued to controller.
844 *                  BTM_NO_RESOURCES if memory couldn't be allocated to issue
845 *                                   the command
846 *                  BTM_UNKNOWN_ADDR if no active link with bd addr specified
847 *                  BTM_BUSY if command is already in progress
848 *
849 ******************************************************************************/
850extern tBTM_STATUS BTM_ReadFailedContactCounter(const RawAddress& remote_bda,
851                                                tBTM_CMPL_CB* p_cb);
852
853/*******************************************************************************
854 *
855 * Function         BTM_ReadAutomaticFlushTimeout
856 *
857 * Description      This function is called to read the automatic flush timeout.
858 *                  The result is returned in the callback.
859 *                  (tBTM_AUTOMATIC_FLUSH_TIMEOUT_RESULT)
860 *
861 * Returns          BTM_CMD_STARTED if command issued to controller.
862 *                  BTM_NO_RESOURCES if memory couldn't be allocated to issue
863 *                                   the command
864 *                  BTM_UNKNOWN_ADDR if no active link with bd addr specified
865 *                  BTM_BUSY if command is already in progress
866 *
867 ******************************************************************************/
868extern tBTM_STATUS BTM_ReadAutomaticFlushTimeout(const RawAddress& remote_bda,
869                                                 tBTM_CMPL_CB* p_cb);
870
871/*******************************************************************************
872 *
873 * Function         BTM_ReadTxPower
874 *
875 * Description      This function is called to read the current connection
876 *                  TX power of the connection. The TX power level results
877 *                  are returned in the callback.
878 *                  (tBTM_RSSI_RESULT)
879 *
880 * Returns          BTM_CMD_STARTED if command issued to controller.
881 *                  BTM_NO_RESOURCES if memory couldn't be allocated to issue
882 *                                   the command
883 *                  BTM_UNKNOWN_ADDR if no active link with bd addr specified
884 *                  BTM_BUSY if command is already in progress
885 *
886 ******************************************************************************/
887extern tBTM_STATUS BTM_ReadTxPower(const RawAddress& remote_bda,
888                                   tBT_TRANSPORT transport, tBTM_CMPL_CB* p_cb);
889
890/*******************************************************************************
891 *
892 * Function         BTM_ReadLinkQuality
893 *
894 * Description      This function is called to read the link quality.
895 *                  The value of the link quality is returned in the callback.
896 *                  (tBTM_LINK_QUALITY_RESULT)
897 *
898 * Returns          BTM_CMD_STARTED if command issued to controller.
899 *                  BTM_NO_RESOURCES if memory couldn't be allocated to issue
900 *                                   the command
901 *                  BTM_UNKNOWN_ADDR if no active link with bd addr specified
902 *                  BTM_BUSY if command is already in progress
903 *
904 ******************************************************************************/
905extern tBTM_STATUS BTM_ReadLinkQuality(const RawAddress& remote_bda,
906                                       tBTM_CMPL_CB* p_cb);
907
908/*******************************************************************************
909 *
910 * Function         BTM_RegBusyLevelNotif
911 *
912 * Description      This function is called to register a callback to receive
913 *                  busy level change events.
914 *
915 * Returns          BTM_SUCCESS if successfully registered, otherwise error
916 *
917 ******************************************************************************/
918extern tBTM_STATUS BTM_RegBusyLevelNotif(tBTM_BL_CHANGE_CB* p_cb,
919                                         uint8_t* p_level,
920                                         tBTM_BL_EVENT_MASK evt_mask);
921
922/*******************************************************************************
923 *
924 * Function         BTM_AclRegisterForChanges
925 *
926 * Description      This function is called to register a callback to receive
927 *                  ACL database change events, i.e. new connection or removed.
928 *
929 * Returns          BTM_SUCCESS if successfully initiated, otherwise error
930 *
931 ******************************************************************************/
932extern tBTM_STATUS BTM_AclRegisterForChanges(tBTM_ACL_DB_CHANGE_CB* p_cb);
933
934/*******************************************************************************
935 *
936 * Function         BTM_GetNumAclLinks
937 *
938 * Description      This function is called to count the number of
939 *                  ACL links that are active.
940 *
941 * Returns          uint16_t Number of active ACL links
942 *
943 ******************************************************************************/
944extern uint16_t BTM_GetNumAclLinks(void);
945
946/*******************************************************************************
947 *
948 * Function         BTM_SetQoS
949 *
950 * Description      This function is called to setup QoS
951 *
952 * Returns          BTM_CMD_STARTED if successfully initiated, otherwise error
953 *
954 ******************************************************************************/
955extern tBTM_STATUS BTM_SetQoS(const RawAddress& bd, FLOW_SPEC* p_flow,
956                              tBTM_CMPL_CB* p_cb);
957
958/*****************************************************************************
959 *  (e)SCO CHANNEL MANAGEMENT FUNCTIONS
960 ****************************************************************************/
961/*******************************************************************************
962 *
963 * Function         BTM_CreateSco
964 *
965 * Description      This function is called to create an SCO connection. If the
966 *                  "is_orig" flag is true, the connection will be originated,
967 *                  otherwise BTM will wait for the other side to connect.
968 *
969 * Returns          BTM_UNKNOWN_ADDR if the ACL connection is not up
970 *                  BTM_BUSY         if another SCO being set up to
971 *                                   the same BD address
972 *                  BTM_NO_RESOURCES if the max SCO limit has been reached
973 *                  BTM_CMD_STARTED  if the connection establishment is started.
974 *                                   In this case, "*p_sco_inx" is filled in
975 *                                   with the sco index used for the connection.
976 *
977 ******************************************************************************/
978extern tBTM_STATUS BTM_CreateSco(const RawAddress* remote_bda, bool is_orig,
979                                 uint16_t pkt_types, uint16_t* p_sco_inx,
980                                 tBTM_SCO_CB* p_conn_cb,
981                                 tBTM_SCO_CB* p_disc_cb);
982
983/*******************************************************************************
984 *
985 * Function         BTM_RemoveSco
986 *
987 * Description      This function is called to remove a specific SCO connection.
988 *
989 * Returns          BTM_CMD_STARTED if successfully initiated, otherwise error
990 *
991 ******************************************************************************/
992extern tBTM_STATUS BTM_RemoveSco(uint16_t sco_inx);
993
994/*******************************************************************************
995 *
996 * Function         BTM_SetScoPacketTypes
997 *
998 * Description      This function is called to set the packet types used for
999 *                  a specific SCO connection,
1000 *
1001 * Parameters       pkt_types - One or more of the following
1002 *                  BTM_SCO_PKT_TYPES_MASK_HV1
1003 *                  BTM_SCO_PKT_TYPES_MASK_HV2
1004 *                  BTM_SCO_PKT_TYPES_MASK_HV3
1005 *                  BTM_SCO_PKT_TYPES_MASK_EV3
1006 *                  BTM_SCO_PKT_TYPES_MASK_EV4
1007 *                  BTM_SCO_PKT_TYPES_MASK_EV5
1008 *
1009 *                  BTM_SCO_LINK_ALL_MASK   - enables all supported types
1010 *
1011 * Returns          BTM_CMD_STARTED if successfully initiated, otherwise error
1012 *
1013 ******************************************************************************/
1014extern tBTM_STATUS BTM_SetScoPacketTypes(uint16_t sco_inx, uint16_t pkt_types);
1015
1016/*******************************************************************************
1017 *
1018 * Function         BTM_ReadScoPacketTypes
1019 *
1020 * Description      This function is read the packet types used for a specific
1021 *                  SCO connection.
1022 *
1023 * Returns       One or more of the following (bitmask)
1024 *                  BTM_SCO_PKT_TYPES_MASK_HV1
1025 *                  BTM_SCO_PKT_TYPES_MASK_HV2
1026 *                  BTM_SCO_PKT_TYPES_MASK_HV3
1027 *                  BTM_SCO_PKT_TYPES_MASK_EV3
1028 *                  BTM_SCO_PKT_TYPES_MASK_EV4
1029 *                  BTM_SCO_PKT_TYPES_MASK_EV5
1030 *
1031 * Returns          packet types supported for the connection
1032 *
1033 ******************************************************************************/
1034extern uint16_t BTM_ReadScoPacketTypes(uint16_t sco_inx);
1035
1036/*******************************************************************************
1037 *
1038 * Function         BTM_ReadDeviceScoPacketTypes
1039 *
1040 * Description      This function is read the SCO packet types that
1041 *                  the device supports.
1042 *
1043 * Returns          packet types supported by the device.
1044 *
1045 ******************************************************************************/
1046extern uint16_t BTM_ReadDeviceScoPacketTypes(void);
1047
1048/*******************************************************************************
1049 *
1050 * Function         BTM_ReadScoHandle
1051 *
1052 * Description      Reead the HCI handle used for a specific SCO connection,
1053 *
1054 * Returns          handle for the connection, or 0xFFFF if invalid SCO index.
1055 *
1056 ******************************************************************************/
1057extern uint16_t BTM_ReadScoHandle(uint16_t sco_inx);
1058
1059/*******************************************************************************
1060 *
1061 * Function         BTM_ReadScoBdAddr
1062 *
1063 * Description      This function is read the remote BD Address for a specific
1064 *                  SCO connection,
1065 *
1066 * Returns          pointer to BD address or NULL if not known
1067 *
1068 ******************************************************************************/
1069extern const RawAddress* BTM_ReadScoBdAddr(uint16_t sco_inx);
1070
1071/*******************************************************************************
1072 *
1073 * Function         BTM_ReadScoDiscReason
1074 *
1075 * Description      This function is returns the reason why an (e)SCO connection
1076 *                  has been removed. It contains the value until read, or until
1077 *                  another (e)SCO connection has disconnected.
1078 *
1079 * Returns          HCI reason or BTM_INVALID_SCO_DISC_REASON if not set.
1080 *
1081 ******************************************************************************/
1082extern uint16_t BTM_ReadScoDiscReason(void);
1083
1084/*******************************************************************************
1085 *
1086 * Function         BTM_SetEScoMode
1087 *
1088 * Description      This function sets up the negotiated parameters for SCO or
1089 *                  eSCO, and sets as the default mode used for calls to
1090 *                  BTM_CreateSco.  It can be called only when there are no
1091 *                  active (e)SCO links.
1092 *
1093 * Returns          BTM_SUCCESS if the successful.
1094 *                  BTM_BUSY if there are one or more active (e)SCO links.
1095 *
1096 ******************************************************************************/
1097extern tBTM_STATUS BTM_SetEScoMode(enh_esco_params_t* p_parms);
1098
1099/*******************************************************************************
1100 *
1101 * Function         BTM_SetWBSCodec
1102 *
1103 * Description      This function sends command to the controller to setup
1104 *                  WBS codec for the upcoming eSCO connection.
1105 *
1106 * Returns          BTM_SUCCESS.
1107 *
1108 *
1109 ******************************************************************************/
1110extern tBTM_STATUS BTM_SetWBSCodec(tBTM_SCO_CODEC_TYPE codec_type);
1111
1112/*******************************************************************************
1113 *
1114 * Function         BTM_RegForEScoEvts
1115 *
1116 * Description      This function registers a SCO event callback with the
1117 *                  specified instance.  It should be used to received
1118 *                  connection indication events and change of link parameter
1119 *                  events.
1120 *
1121 * Returns          BTM_SUCCESS if the successful.
1122 *                  BTM_ILLEGAL_VALUE if there is an illegal sco_inx
1123 *
1124 ******************************************************************************/
1125extern tBTM_STATUS BTM_RegForEScoEvts(uint16_t sco_inx,
1126                                      tBTM_ESCO_CBACK* p_esco_cback);
1127
1128/*******************************************************************************
1129 *
1130 * Function         BTM_ReadEScoLinkParms
1131 *
1132 * Description      This function returns the current eSCO link parameters for
1133 *                  the specified handle.  This can be called anytime a
1134 *                  connection is active, but is typically called after
1135 *                  receiving the SCO opened callback.
1136 *
1137 *                  Note: If called over a 1.1 controller, only the packet types
1138 *                        field has meaning.
1139 *                  Note: If the upper layer doesn't know the current sco index,
1140 *                  BTM_FIRST_ACTIVE_SCO_INDEX can be used as the first
1141 *                  parameter to find the first active SCO index
1142 *
1143 * Returns          BTM_SUCCESS if returned data is valid connection.
1144 *                  BTM_ILLEGAL_VALUE if no connection for specified sco_inx.
1145 *                  BTM_MODE_UNSUPPORTED if local controller does not support
1146 *                      1.2 specification.
1147 *
1148 ******************************************************************************/
1149extern tBTM_STATUS BTM_ReadEScoLinkParms(uint16_t sco_inx,
1150                                         tBTM_ESCO_DATA* p_parms);
1151
1152/*******************************************************************************
1153 *
1154 * Function         BTM_ChangeEScoLinkParms
1155 *
1156 * Description      This function requests renegotiation of the parameters on
1157 *                  the current eSCO Link.  If any of the changes are accepted
1158 *                  by the controllers, the BTM_ESCO_CHG_EVT event is sent in
1159 *                  the tBTM_ESCO_CBACK function with the current settings of
1160 *                  the link. The callback is registered through the call to
1161 *                  BTM_SetEScoMode.
1162 *
1163 *
1164 * Returns          BTM_CMD_STARTED if command is successfully initiated.
1165 *                  BTM_ILLEGAL_VALUE if no connection for specified sco_inx.
1166 *                  BTM_NO_RESOURCES - not enough resources to initiate command.
1167 *                  BTM_MODE_UNSUPPORTED if local controller does not support
1168 *                      1.2 specification.
1169 *
1170 ******************************************************************************/
1171extern tBTM_STATUS BTM_ChangeEScoLinkParms(uint16_t sco_inx,
1172                                           tBTM_CHG_ESCO_PARAMS* p_parms);
1173
1174/*******************************************************************************
1175 *
1176 * Function         BTM_EScoConnRsp
1177 *
1178 * Description      This function is called upon receipt of an (e)SCO connection
1179 *                  request event (BTM_ESCO_CONN_REQ_EVT) to accept or reject
1180 *                  the request. Parameters used to negotiate eSCO links.
1181 *                  If p_parms is NULL, then values set through BTM_SetEScoMode
1182 *                  are used.
1183 *                  If the link type of the incoming request is SCO, then only
1184 *                  the tx_bw, max_latency, content format, and packet_types are
1185 *                  valid.  The hci_status parameter should be
1186 *                  ([0x0] to accept, [0x0d..0x0f] to reject)
1187 *
1188 *
1189 * Returns          void
1190 *
1191 ******************************************************************************/
1192extern void BTM_EScoConnRsp(uint16_t sco_inx, uint8_t hci_status,
1193                            enh_esco_params_t* p_parms);
1194
1195/*******************************************************************************
1196 *
1197 * Function         BTM_GetNumScoLinks
1198 *
1199 * Description      This function returns the number of active SCO links.
1200 *
1201 * Returns          uint8_t
1202 *
1203 ******************************************************************************/
1204extern uint8_t BTM_GetNumScoLinks(void);
1205
1206/*****************************************************************************
1207 *  SECURITY MANAGEMENT FUNCTIONS
1208 ****************************************************************************/
1209/*******************************************************************************
1210 *
1211 * Function         BTM_SecRegister
1212 *
1213 * Description      Application manager calls this function to register for
1214 *                  security services.  There can be one and only one
1215 *                  application saving link keys.  BTM allows only first
1216 *                  registration.
1217 *
1218 * Returns          true if registered OK, else false
1219 *
1220 ******************************************************************************/
1221extern bool BTM_SecRegister(tBTM_APPL_INFO* p_cb_info);
1222
1223/*******************************************************************************
1224 *
1225 * Function         BTM_SecRegisterLinkKeyNotificationCallback
1226 *
1227 * Description      Profiles can register to be notified when a new Link Key
1228 *                  is generated per connection.
1229 *
1230 * Returns          true if registered OK, else false
1231 *
1232 ******************************************************************************/
1233extern bool BTM_SecRegisterLinkKeyNotificationCallback(
1234    tBTM_LINK_KEY_CALLBACK* p_callback);
1235
1236/*******************************************************************************
1237 *
1238 * Function         BTM_SecAddRmtNameNotifyCallback
1239 *
1240 * Description      Profiles can register to be notified when name of the
1241 *                  remote device is resolved (up to
1242 *                  BTM_SEC_MAX_RMT_NAME_CALLBACKS).
1243 *
1244 * Returns          true if registered OK, else false
1245 *
1246 ******************************************************************************/
1247extern bool BTM_SecAddRmtNameNotifyCallback(tBTM_RMT_NAME_CALLBACK* p_callback);
1248
1249/*******************************************************************************
1250 *
1251 * Function         BTM_SecDeleteRmtNameNotifyCallback
1252 *
1253 * Description      A profile can deregister notification when a new Link Key
1254 *                  is generated per connection.
1255 *
1256 * Returns          true if OK, else false
1257 *
1258 ******************************************************************************/
1259extern bool BTM_SecDeleteRmtNameNotifyCallback(
1260    tBTM_RMT_NAME_CALLBACK* p_callback);
1261
1262/*******************************************************************************
1263 *
1264 * Function         BTM_GetSecurityFlags
1265 *
1266 * Description      Get security flags for the device
1267 *
1268 * Returns          bool    true or false is device found
1269 *
1270 ******************************************************************************/
1271extern bool BTM_GetSecurityFlags(const RawAddress& bd_addr,
1272                                 uint8_t* p_sec_flags);
1273
1274/*******************************************************************************
1275 *
1276 * Function         BTM_GetSecurityFlagsByTransport
1277 *
1278 * Description      Get security flags for the device on a particular transport
1279 *
1280 * Parameters      bd_addr: BD address of remote device
1281 *                  p_sec_flags : Out parameter to be filled with security
1282 *                                flags for the connection
1283 *                  transport :  Physical transport of the connection
1284 *                               (BR/EDR or LE)
1285 *
1286 * Returns          bool    true or false is device found
1287 *
1288 ******************************************************************************/
1289extern bool BTM_GetSecurityFlagsByTransport(const RawAddress& bd_addr,
1290                                            uint8_t* p_sec_flags,
1291                                            tBT_TRANSPORT transport);
1292
1293/*******************************************************************************
1294 *
1295 * Function         BTM_ReadTrustedMask
1296 *
1297 * Description      Get trusted mask for the device
1298 *
1299 * Returns          NULL, if the device record is not found.
1300 *                  otherwise, the trusted mask
1301 *
1302 ******************************************************************************/
1303extern uint32_t* BTM_ReadTrustedMask(const RawAddress& bd_addr);
1304
1305/*******************************************************************************
1306 *
1307 * Function         BTM_SetPinType
1308 *
1309 * Description      Set PIN type for the device.
1310 *
1311 * Returns          void
1312 *
1313 ******************************************************************************/
1314extern void BTM_SetPinType(uint8_t pin_type, PIN_CODE pin_code,
1315                           uint8_t pin_code_len);
1316
1317/*******************************************************************************
1318 *
1319 * Function         BTM_SetPairableMode
1320 *
1321 * Description      Enable or disable pairing
1322 *
1323 * Parameters       allow_pairing - (true or false) whether or not the device
1324 *                      allows pairing.
1325 *                  connect_only_paired - (true or false) whether or not to
1326 *                      only allow paired devices to connect.
1327 *
1328 * Returns          void
1329 *
1330 ******************************************************************************/
1331extern void BTM_SetPairableMode(bool allow_pairing, bool connect_only_paired);
1332
1333/*******************************************************************************
1334 *
1335 * Function         BTM_SetSecureConnectionsOnly
1336 *
1337 * Description      Enable or disable default treatment for Mode 4 Level 0
1338 *                  services
1339 *
1340 * Parameter        secure_connections_only_mode - (true or false)
1341 *                  true means that the device should treat Mode 4 Level 0
1342 *                  services as services of other levels.
1343 *                  false means that the device should provide default
1344 *                  treatment for Mode 4 Level 0 services.
1345 *
1346 * Returns          void
1347 *
1348 ******************************************************************************/
1349extern void BTM_SetSecureConnectionsOnly(bool secure_connections_only_mode);
1350
1351/*******************************************************************************
1352 *
1353 * Function         BTM_SetSecurityLevel
1354 *
1355 * Description      Register service security level with Security Manager.  Each
1356 *                  service must register its requirements regardless of the
1357 *                  security level that is used.  This API is called once for
1358 *                  originators and again for acceptors of connections.
1359 *
1360 * Returns          true if registered OK, else false
1361 *
1362 ******************************************************************************/
1363extern bool BTM_SetSecurityLevel(bool is_originator, const char* p_name,
1364                                 uint8_t service_id, uint16_t sec_level,
1365                                 uint16_t psm, uint32_t mx_proto_id,
1366                                 uint32_t mx_chan_id);
1367
1368/*******************************************************************************
1369 *
1370 * Function         BTM_SetOutService
1371 *
1372 * Description      This function is called to set the service for
1373 *                  outgoing connection.
1374 *
1375 * Returns          void
1376 *
1377 ******************************************************************************/
1378extern void BTM_SetOutService(const RawAddress& bd_addr, uint8_t service_id,
1379                              uint32_t mx_chan_id);
1380
1381/*******************************************************************************
1382 *
1383 * Function         BTM_SecClrService
1384 *
1385 * Description      Removes specified service record(s) from the security
1386 *                  database. All service records with the specified name are
1387 *                  removed. Typically used only by devices with limited RAM
1388 *                  so that it can reuse an old security service record.
1389 *
1390 * Returns          Number of records that were freed.
1391 *
1392 ******************************************************************************/
1393extern uint8_t BTM_SecClrService(uint8_t service_id);
1394
1395/*******************************************************************************
1396 *
1397 * Function         BTM_SecAddDevice
1398 *
1399 * Description      Add/modify device.  This function will be normally called
1400 *                  during host startup to restore all required information
1401 *                  stored in the NVRAM.
1402 *                  dev_class, bd_name, link_key, and features are NULL if
1403 *                  unknown
1404 *
1405 * Returns          true if added OK, else false
1406 *
1407 ******************************************************************************/
1408extern bool BTM_SecAddDevice(const RawAddress& bd_addr, DEV_CLASS dev_class,
1409                             BD_NAME bd_name, uint8_t* features,
1410                             uint32_t trusted_mask[], LINK_KEY link_key,
1411                             uint8_t key_type, tBTM_IO_CAP io_cap,
1412                             uint8_t pin_length);
1413
1414/*******************************************************************************
1415 *
1416 * Function         BTM_SecDeleteDevice
1417 *
1418 * Description      Free resources associated with the device.
1419 *
1420 * Returns          true if rmoved OK, false if not found
1421 *
1422 ******************************************************************************/
1423extern bool BTM_SecDeleteDevice(const RawAddress& bd_addr);
1424
1425/*******************************************************************************
1426 *
1427 * Function         BTM_SecClearSecurityFlags
1428 *
1429 * Description      Reset the security flags (mark as not-paired) for a given
1430 *                  remove device.
1431 *
1432 ******************************************************************************/
1433extern void BTM_SecClearSecurityFlags(const RawAddress& bd_addr);
1434
1435/*******************************************************************************
1436 *
1437 * Function         BTM_SecGetDeviceLinkKey
1438 *
1439 * Description      This function is called to obtain link key for the device
1440 *                  it returns BTM_SUCCESS if link key is available, or
1441 *                  BTM_UNKNOWN_ADDR if Security Manager does not know about
1442 *                  the device or device record does not contain link key info
1443 *
1444 * Returns          BTM_SUCCESS if successful, otherwise error code
1445 *
1446 ******************************************************************************/
1447extern tBTM_STATUS BTM_SecGetDeviceLinkKey(const RawAddress& bd_addr,
1448                                           LINK_KEY link_key);
1449
1450/*******************************************************************************
1451 *
1452 * Function         BTM_SecGetDeviceLinkKeyType
1453 *
1454 * Description      This function is called to obtain link key type for the
1455 *                  device.
1456 *                  it returns BTM_SUCCESS if link key is available, or
1457 *                  BTM_UNKNOWN_ADDR if Security Manager does not know about
1458 *                  the device or device record does not contain link key info
1459 *
1460 * Returns          BTM_LKEY_TYPE_IGNORE if link key is unknown, link type
1461 *                  otherwise.
1462 *
1463 ******************************************************************************/
1464extern tBTM_LINK_KEY_TYPE BTM_SecGetDeviceLinkKeyType(
1465    const RawAddress& bd_addr);
1466
1467/*******************************************************************************
1468 *
1469 * Function         BTM_PINCodeReply
1470 *
1471 * Description      This function is called after Security Manager submitted
1472 *                  PIN code request to the UI.
1473 *
1474 * Parameters:      bd_addr      - Address of the device for which PIN was
1475 *                                 requested
1476 *                  res          - result of the operation BTM_SUCCESS if
1477 *                                 success
1478 *                  pin_len      - length in bytes of the PIN Code
1479 *                  p_pin        - pointer to array with the PIN Code
1480 *                  trusted_mask - bitwise OR of trusted services
1481 *                                 (array of uint32_t)
1482 *
1483 * Returns          void
1484 *
1485 ******************************************************************************/
1486extern void BTM_PINCodeReply(const RawAddress& bd_addr, uint8_t res,
1487                             uint8_t pin_len, uint8_t* p_pin,
1488                             uint32_t trusted_mask[]);
1489
1490/*******************************************************************************
1491 *
1492 * Function         BTM_SecBond
1493 *
1494 * Description      This function is called to perform bonding with peer device.
1495 *
1496 * Parameters:      bd_addr      - Address of the device to bond
1497 *                  pin_len      - length in bytes of the PIN Code
1498 *                  p_pin        - pointer to array with the PIN Code
1499 *                  trusted_mask - bitwise OR of trusted services
1500 *                                 (array of uint32_t)
1501 * Returns          BTM_CMD_STARTED if successfully initiated, otherwise error
1502 *
1503 ******************************************************************************/
1504extern tBTM_STATUS BTM_SecBond(const RawAddress& bd_addr, uint8_t pin_len,
1505                               uint8_t* p_pin, uint32_t trusted_mask[]);
1506
1507/*******************************************************************************
1508 *
1509 * Function         BTM_SecBondByTransport
1510 *
1511 * Description      Perform bonding by designated transport
1512 *
1513 * Parameters:      bd_addr      - Address of the device to bond
1514 *                  pin_len      - length in bytes of the PIN Code
1515 *                  p_pin        - pointer to array with the PIN Code
1516 *                  trusted_mask - bitwise OR of trusted services
1517 *                                 (array of uint32_t)
1518 *                  transport :  Physical transport to use for bonding
1519 *                               (BR/EDR or LE)
1520 *
1521 * Returns          BTM_CMD_STARTED if successfully initiated, otherwise error
1522 *
1523 ******************************************************************************/
1524extern tBTM_STATUS BTM_SecBondByTransport(const RawAddress& bd_addr,
1525                                          tBT_TRANSPORT transport,
1526                                          uint8_t pin_len, uint8_t* p_pin,
1527                                          uint32_t trusted_mask[]);
1528
1529/*******************************************************************************
1530 *
1531 * Function         BTM_SecBondCancel
1532 *
1533 * Description      This function is called to cancel ongoing bonding process
1534 *                  with peer device.
1535 *
1536 * Returns          BTM_CMD_STARTED if successfully initiated, otherwise error
1537 *
1538 ******************************************************************************/
1539extern tBTM_STATUS BTM_SecBondCancel(const RawAddress& bd_addr);
1540
1541/*******************************************************************************
1542 *
1543 * Function         BTM_SetEncryption
1544 *
1545 * Description      This function is called to ensure that connection is
1546 *                  encrypted.  Should be called only on an open connection.
1547 *                  Typically only needed for connections that first want to
1548 *                  bring up unencrypted links, then later encrypt them.
1549 *
1550 * Parameters:      bd_addr       - Address of the peer device
1551 *                  transport     - Link transport
1552 *                  p_callback    - Pointer to callback function called if
1553 *                                  this function returns PENDING after required
1554 *                                  procedures are completed.  Can be set to
1555 *                                  NULL if status is not desired.
1556 *                  p_ref_data    - pointer to any data the caller wishes to
1557 *                                  receive in the callback function upon
1558 *                                  completion.
1559 *                                  can be set to NULL if not used.
1560 *                  sec_act       - LE security action, unused for BR/EDR
1561 *
1562 * Returns          BTM_SUCCESS   - already encrypted
1563 *                  BTM_PENDING   - command will be returned in the callback
1564 *                  BTM_WRONG_MODE- connection not up.
1565 *                  BTM_BUSY      - security procedures are currently active
1566 *                  BTM_MODE_UNSUPPORTED - if security manager not linked in.
1567 *
1568 ******************************************************************************/
1569extern tBTM_STATUS BTM_SetEncryption(const RawAddress& bd_addr,
1570                                     tBT_TRANSPORT transport,
1571                                     tBTM_SEC_CBACK* p_callback,
1572                                     void* p_ref_data,
1573                                     tBTM_BLE_SEC_ACT sec_act);
1574
1575/*******************************************************************************
1576 *
1577 * Function         BTM_ConfirmReqReply
1578 *
1579 * Description      This function is called to confirm the numeric value for
1580 *                  Simple Pairing in response to BTM_SP_CFM_REQ_EVT
1581 *
1582 * Parameters:      res           - result of the operation BTM_SUCCESS if
1583 *                                  success
1584 *                  bd_addr       - Address of the peer device
1585 *
1586 ******************************************************************************/
1587extern void BTM_ConfirmReqReply(tBTM_STATUS res, const RawAddress& bd_addr);
1588
1589/*******************************************************************************
1590 *
1591 * Function         BTM_PasskeyReqReply
1592 *
1593 * Description      This function is called to provide the passkey for
1594 *                  Simple Pairing in response to BTM_SP_KEY_REQ_EVT
1595 *
1596 * Parameters:      res           - result of the operation BTM_SUCCESS if
1597 *                                  success
1598 *                  bd_addr       - Address of the peer device
1599 *                  passkey       - numeric value in the range of
1600 *                                  0 - 999999(0xF423F).
1601 *
1602 ******************************************************************************/
1603extern void BTM_PasskeyReqReply(tBTM_STATUS res, const RawAddress& bd_addr,
1604                                uint32_t passkey);
1605
1606/*******************************************************************************
1607 *
1608 * Function         BTM_SendKeypressNotif
1609 *
1610 * Description      This function is used during the passkey entry model
1611 *                  by a device with KeyboardOnly IO capabilities
1612 *                  (very likely to be a HID Device).
1613 *                  It is called by a HID Device to inform the remote device
1614 *                  when a key has been entered or erased.
1615 *
1616 * Parameters:      bd_addr - Address of the peer device
1617 *                  type - notification type
1618 *
1619 ******************************************************************************/
1620extern void BTM_SendKeypressNotif(const RawAddress& bd_addr,
1621                                  tBTM_SP_KEY_TYPE type);
1622
1623/*******************************************************************************
1624 *
1625 * Function         BTM_IoCapRsp
1626 *
1627 * Description      This function is called in response to BTM_SP_IO_REQ_EVT
1628 *                  When the event data io_req.oob_data is set to
1629 *                  BTM_OOB_UNKNOWN by the tBTM_SP_CALLBACK implementation, this
1630 *                  function is called to provide the actual response
1631 *
1632 * Parameters:      bd_addr - Address of the peer device
1633 *                  io_cap  - The IO capability of local device.
1634 *                  oob     - BTM_OOB_NONE or BTM_OOB_PRESENT.
1635 *                  auth_req- MITM protection required or not.
1636 *
1637 ******************************************************************************/
1638extern void BTM_IoCapRsp(const RawAddress& bd_addr, tBTM_IO_CAP io_cap,
1639                         tBTM_OOB_DATA oob, tBTM_AUTH_REQ auth_req);
1640
1641/*******************************************************************************
1642 *
1643 * Function         BTM_ReadLocalOobData
1644 *
1645 * Description      This function is called to read the local OOB data from
1646 *                  LM
1647 *
1648 ******************************************************************************/
1649extern void BTM_ReadLocalOobData(void);
1650
1651/*******************************************************************************
1652 *
1653 * Function         BTM_RemoteOobDataReply
1654 *
1655 * Description      This function is called to provide the remote OOB data for
1656 *                  Simple Pairing in response to BTM_SP_RMT_OOB_EVT
1657 *
1658 * Parameters:      bd_addr     - Address of the peer device
1659 *                  c           - simple pairing Hash C.
1660 *                  r           - simple pairing Randomizer  C.
1661 *
1662 ******************************************************************************/
1663extern void BTM_RemoteOobDataReply(tBTM_STATUS res, const RawAddress& bd_addr,
1664                                   BT_OCTET16 c, BT_OCTET16 r);
1665
1666/*******************************************************************************
1667 *
1668 * Function         BTM_BuildOobData
1669 *
1670 * Description      This function is called to build the OOB data payload to
1671 *                  be sent over OOB (non-Bluetooth) link
1672 *
1673 * Parameters:      p_data  - the location for OOB data
1674 *                  max_len - p_data size.
1675 *                  c       - simple pairing Hash C.
1676 *                  r       - simple pairing Randomizer  C.
1677 *                  name_len- 0, local device name would not be included.
1678 *                            otherwise, the local device name is included for
1679 *                            up to this specified length
1680 *
1681 * Returns          Number of bytes in p_data.
1682 *
1683 ******************************************************************************/
1684extern uint16_t BTM_BuildOobData(uint8_t* p_data, uint16_t max_len,
1685                                 BT_OCTET16 c, BT_OCTET16 r, uint8_t name_len);
1686
1687/*******************************************************************************
1688 *
1689 * Function         BTM_BothEndsSupportSecureConnections
1690 *
1691 * Description      This function is called to check if both the local device
1692 *                  and the peer device specified by bd_addr support BR/EDR
1693 *                  Secure Connections.
1694 *
1695 * Parameters:      bd_addr - address of the peer
1696 *
1697 * Returns          true if BR/EDR Secure Connections are supported by both
1698 *                  local and the remote device.
1699 *                  else false.
1700 *
1701 ******************************************************************************/
1702extern bool BTM_BothEndsSupportSecureConnections(const RawAddress& bd_addr);
1703
1704/*******************************************************************************
1705 *
1706 * Function         BTM_PeerSupportsSecureConnections
1707 *
1708 * Description      This function is called to check if the peer supports
1709 *                  BR/EDR Secure Connections.
1710 *
1711 * Parameters:      bd_addr - address of the peer
1712 *
1713 * Returns          true if BR/EDR Secure Connections are supported by the peer,
1714 *                  else false.
1715 *
1716 ******************************************************************************/
1717extern bool BTM_PeerSupportsSecureConnections(const RawAddress& bd_addr);
1718
1719/*******************************************************************************
1720 *
1721 * Function         BTM_ReadOobData
1722 *
1723 * Description      This function is called to parse the OOB data payload
1724 *                  received over OOB (non-Bluetooth) link
1725 *
1726 * Parameters:      p_data  - the location for OOB data
1727 *                  eir_tag - The associated EIR tag to read the data.
1728 *                  *p_len(output) - the length of the data with the given tag.
1729 *
1730 * Returns          the beginning of the data with the given tag.
1731 *                  NULL, if the tag is not found.
1732 *
1733 ******************************************************************************/
1734extern uint8_t* BTM_ReadOobData(uint8_t* p_data, uint8_t eir_tag,
1735                                uint8_t* p_len);
1736
1737/*******************************************************************************
1738 *
1739 * Function         BTM_SecReadDevName
1740 *
1741 * Description      Looks for the device name in the security database for the
1742 *                  specified BD address.
1743 *
1744 * Returns          Pointer to the name or NULL
1745 *
1746 ******************************************************************************/
1747extern char* BTM_SecReadDevName(const RawAddress& bd_addr);
1748
1749/*****************************************************************************
1750 *  POWER MANAGEMENT FUNCTIONS
1751 ****************************************************************************/
1752/*******************************************************************************
1753 *
1754 * Function         BTM_PmRegister
1755 *
1756 * Description      register or deregister with power manager
1757 *
1758 * Returns          BTM_SUCCESS if successful,
1759 *                  BTM_NO_RESOURCES if no room to hold registration
1760 *                  BTM_ILLEGAL_VALUE
1761 *
1762 ******************************************************************************/
1763extern tBTM_STATUS BTM_PmRegister(uint8_t mask, uint8_t* p_pm_id,
1764                                  tBTM_PM_STATUS_CBACK* p_cb);
1765
1766/*******************************************************************************
1767 *
1768 * Function         BTM_SetPowerMode
1769 *
1770 * Description      store the mode in control block or
1771 *                  alter ACL connection behavior.
1772 *
1773 * Returns          BTM_SUCCESS if successful,
1774 *                  BTM_UNKNOWN_ADDR if bd addr is not active or bad
1775 *
1776 ******************************************************************************/
1777extern tBTM_STATUS BTM_SetPowerMode(uint8_t pm_id, const RawAddress& remote_bda,
1778                                    tBTM_PM_PWR_MD* p_mode);
1779
1780/*******************************************************************************
1781 *
1782 * Function         BTM_ReadPowerMode
1783 *
1784 * Description      This returns the current mode for a specific
1785 *                  ACL connection.
1786 *
1787 * Input Param      remote_bda - device address of desired ACL connection
1788 *
1789 * Output Param     p_mode - address where the current mode is copied into.
1790 *                          BTM_ACL_MODE_NORMAL
1791 *                          BTM_ACL_MODE_HOLD
1792 *                          BTM_ACL_MODE_SNIFF
1793 *                          BTM_ACL_MODE_PARK
1794 *                          (valid only if return code is BTM_SUCCESS)
1795 *
1796 * Returns          BTM_SUCCESS if successful,
1797 *                  BTM_UNKNOWN_ADDR if bd addr is not active or bad
1798 *
1799 ******************************************************************************/
1800extern tBTM_STATUS BTM_ReadPowerMode(const RawAddress& remote_bda,
1801                                     tBTM_PM_MODE* p_mode);
1802
1803/*******************************************************************************
1804 *
1805 * Function         BTM_SetSsrParams
1806 *
1807 * Description      This sends the given SSR parameters for the given ACL
1808 *                  connection if it is in ACTIVE mode.
1809 *
1810 * Input Param      remote_bda - device address of desired ACL connection
1811 *                  max_lat    - maximum latency (in 0.625ms)(0-0xFFFE)
1812 *                  min_rmt_to - minimum remote timeout
1813 *                  min_loc_to - minimum local timeout
1814 *
1815 *
1816 * Returns          BTM_SUCCESS if the HCI command is issued successful,
1817 *                  BTM_UNKNOWN_ADDR if bd addr is not active or bad
1818 *                  BTM_CMD_STORED if the command is stored
1819 *
1820 ******************************************************************************/
1821extern tBTM_STATUS BTM_SetSsrParams(const RawAddress& remote_bda,
1822                                    uint16_t max_lat, uint16_t min_rmt_to,
1823                                    uint16_t min_loc_to);
1824
1825/*******************************************************************************
1826 *
1827 * Function         BTM_GetHCIConnHandle
1828 *
1829 * Description      This function is called to get the handle for an ACL
1830 *                  connection to a specific remote BD Address.
1831 *
1832 * Returns          the handle of the connection, or 0xFFFF if none.
1833 *
1834 ******************************************************************************/
1835extern uint16_t BTM_GetHCIConnHandle(const RawAddress& remote_bda,
1836                                     tBT_TRANSPORT transport);
1837
1838/*******************************************************************************
1839 *
1840 * Function         BTM_DeleteStoredLinkKey
1841 *
1842 * Description      This function is called to delete link key for the specified
1843 *                  device addresses from the NVRAM storage attached to the
1844 *                  Bluetooth controller.
1845 *
1846 * Parameters:      bd_addr      - Addresses of the devices
1847 *                  p_cb         - Call back function to be called to return
1848 *                                 the results
1849 *
1850 ******************************************************************************/
1851extern tBTM_STATUS BTM_DeleteStoredLinkKey(const RawAddress* bd_addr,
1852                                           tBTM_CMPL_CB* p_cb);
1853
1854/*******************************************************************************
1855 *
1856 * Function         BTM_WriteEIR
1857 *
1858 * Description      This function is called to write EIR data to controller.
1859 *
1860 * Parameters       p_buff - allocated HCI command buffer including extended
1861 *                           inquriry response
1862 *
1863 * Returns          BTM_SUCCESS  - if successful
1864 *                  BTM_MODE_UNSUPPORTED - if local device cannot support it
1865 *
1866 ******************************************************************************/
1867extern tBTM_STATUS BTM_WriteEIR(BT_HDR* p_buff);
1868
1869/*******************************************************************************
1870 *
1871 * Function         BTM_HasEirService
1872 *
1873 * Description      This function is called to know if UUID in bit map of UUID.
1874 *
1875 * Parameters       p_eir_uuid - bit map of UUID list
1876 *                  uuid16 - UUID 16-bit
1877 *
1878 * Returns          true - if found
1879 *                  false - if not found
1880 *
1881 ******************************************************************************/
1882extern bool BTM_HasEirService(uint32_t* p_eir_uuid, uint16_t uuid16);
1883
1884/*******************************************************************************
1885 *
1886 * Function         BTM_HasInquiryEirService
1887 *
1888 * Description      Return if a UUID is in the bit map of a UUID list.
1889 *
1890 * Parameters       p_results - inquiry results
1891 *                  uuid16 - UUID 16-bit
1892 *
1893 * Returns          BTM_EIR_FOUND - if found
1894 *                  BTM_EIR_NOT_FOUND - if not found and it is a complete list
1895 *                  BTM_EIR_UNKNOWN - if not found and it is not complete list
1896 *
1897 ******************************************************************************/
1898extern tBTM_EIR_SEARCH_RESULT BTM_HasInquiryEirService(
1899    tBTM_INQ_RESULTS* p_results, uint16_t uuid16);
1900
1901/*******************************************************************************
1902 *
1903 * Function         BTM_AddEirService
1904 *
1905 * Description      This function is called to add a service in the bit map UUID
1906 *                  list.
1907 *
1908 * Parameters       p_eir_uuid - bit mask of UUID list for EIR
1909 *                  uuid16 - UUID 16-bit
1910 *
1911 * Returns          None
1912 *
1913 ******************************************************************************/
1914extern void BTM_AddEirService(uint32_t* p_eir_uuid, uint16_t uuid16);
1915
1916/*******************************************************************************
1917 *
1918 * Function         BTM_RemoveEirService
1919 *
1920 * Description      This function is called to remove a service from the bit map
1921 *                  UUID list.
1922 *
1923 * Parameters       p_eir_uuid - bit mask of UUID list for EIR
1924 *                  uuid16 - UUID 16-bit
1925 *
1926 * Returns          None
1927 *
1928 ******************************************************************************/
1929extern void BTM_RemoveEirService(uint32_t* p_eir_uuid, uint16_t uuid16);
1930
1931/*******************************************************************************
1932 *
1933 * Function         BTM_GetEirSupportedServices
1934 *
1935 * Description      This function is called to get UUID list from bit map UUID
1936 *                  list.
1937 *
1938 * Parameters       p_eir_uuid - bit mask of UUID list for EIR
1939 *                  p - reference of current pointer of EIR
1940 *                  max_num_uuid16 - max number of UUID can be written in EIR
1941 *                  num_uuid16 - number of UUID have been written in EIR
1942 *
1943 * Returns          BTM_EIR_MORE_16BITS_UUID_TYPE, if it has more than max
1944 *                  BTM_EIR_COMPLETE_16BITS_UUID_TYPE, otherwise
1945 *
1946 ******************************************************************************/
1947extern uint8_t BTM_GetEirSupportedServices(uint32_t* p_eir_uuid, uint8_t** p,
1948                                           uint8_t max_num_uuid16,
1949                                           uint8_t* p_num_uuid16);
1950
1951/*******************************************************************************
1952 *
1953 * Function         BTM_GetEirUuidList
1954 *
1955 * Description      This function parses EIR and returns UUID list.
1956 *
1957 * Parameters       p_eir - EIR
1958 *                  eirl_len - EIR len
1959 *                  uuid_size - LEN_UUID_16, LEN_UUID_32, LEN_UUID_128
1960 *                  p_num_uuid - return number of UUID in found list
1961 *                  p_uuid_list - return UUID 16-bit list
1962 *                  max_num_uuid - maximum number of UUID to be returned
1963 *
1964 * Returns          0 - if not found
1965 *                  BTM_EIR_COMPLETE_16BITS_UUID_TYPE
1966 *                  BTM_EIR_MORE_16BITS_UUID_TYPE
1967 *                  BTM_EIR_COMPLETE_32BITS_UUID_TYPE
1968 *                  BTM_EIR_MORE_32BITS_UUID_TYPE
1969 *                  BTM_EIR_COMPLETE_128BITS_UUID_TYPE
1970 *                  BTM_EIR_MORE_128BITS_UUID_TYPE
1971 *
1972 ******************************************************************************/
1973extern uint8_t BTM_GetEirUuidList(uint8_t* p_eir, size_t eir_len,
1974                                  uint8_t uuid_size, uint8_t* p_num_uuid,
1975                                  uint8_t* p_uuid_list, uint8_t max_num_uuid);
1976
1977/*****************************************************************************
1978 *  SCO OVER HCI
1979 ****************************************************************************/
1980/*******************************************************************************
1981 *
1982 * Function         BTM_ConfigScoPath
1983 *
1984 * Description      This function enable/disable SCO over HCI and registers SCO
1985 *                  data callback if SCO over HCI is enabled.
1986 *
1987 * Parameter        path: SCO or HCI
1988 *                  p_sco_data_cb: callback function or SCO data if path is set
1989 *                                 to transport.
1990 *                  p_pcm_param: pointer to the PCM interface parameter. If a
1991 *                               NULL pointer is used, the PCM parameter
1992 *                               maintained in the control block will be used;
1993 *                               otherwise update the control block value.
1994 *                  err_data_rpt: Lisbon feature to enable the erronous data
1995 *                                report or not.
1996 *
1997 * Returns          BTM_SUCCESS if the successful.
1998 *                  BTM_NO_RESOURCES: no rsource to start the command.
1999 *                  BTM_ILLEGAL_VALUE: invalid callback function pointer.
2000 *                  BTM_CMD_STARTED : Command sent. Waiting for command
2001 *                                    complete event.
2002 *
2003 *
2004 ******************************************************************************/
2005extern tBTM_STATUS BTM_ConfigScoPath(esco_data_path_t path,
2006                                     tBTM_SCO_DATA_CB* p_sco_data_cb,
2007                                     tBTM_SCO_PCM_PARAM* p_pcm_param,
2008                                     bool err_data_rpt);
2009
2010/*******************************************************************************
2011 *
2012 * Function         BTM_WriteScoData
2013 *
2014 * Description      This function write SCO data to a specified instance. The
2015 *                  data to be written p_buf needs to carry an offset of
2016 *                  HCI_SCO_PREAMBLE_SIZE bytes, and the data length can not
2017 *                  exceed BTM_SCO_DATA_SIZE_MAX bytes, whose default value is
2018 *                  set to 60 and is configurable. Data longer than the maximum
2019 *                  bytes will be truncated.
2020 *
2021 * Returns          BTM_SUCCESS: data write is successful
2022 *                  BTM_ILLEGAL_VALUE: SCO data contains illegal offset value.
2023 *                  BTM_SCO_BAD_LENGTH: SCO data length exceeds the max SCO
2024 *                                      packet size.
2025 *                  BTM_NO_RESOURCES: no resources.
2026 *                  BTM_UNKNOWN_ADDR: unknown SCO connection handle, or SCO is
2027 *                                    not routed via HCI.
2028 *
2029 *
2030 ******************************************************************************/
2031extern tBTM_STATUS BTM_WriteScoData(uint16_t sco_inx, BT_HDR* p_buf);
2032
2033/*******************************************************************************
2034 *
2035 * Function         BTM_SetARCMode
2036 *
2037 * Description      Send Audio Routing Control command.
2038 *
2039 * Returns          void
2040 *
2041 ******************************************************************************/
2042extern void BTM_SetARCMode(uint8_t iface, uint8_t arc_mode,
2043                           tBTM_VSC_CMPL_CB* p_arc_cb);
2044
2045/*******************************************************************************
2046 *
2047 * Function         BTM_PCM2Setup_Write
2048 *
2049 * Description      Send PCM2_Setup write command.
2050 *
2051 * Returns          void
2052 *
2053 ******************************************************************************/
2054extern void BTM_PCM2Setup_Write(bool clk_master, tBTM_VSC_CMPL_CB* p_arc_cb);
2055
2056/*******************************************************************************
2057 *
2058 * Function         BTM_PM_ReadControllerState
2059 *
2060 * Description      This function is called to obtain the controller state
2061 *
2062 * Returns          Controller state (BTM_CONTRL_ACTIVE, BTM_CONTRL_SCAN, and
2063 *                                    BTM_CONTRL_IDLE)
2064 *
2065 ******************************************************************************/
2066extern tBTM_CONTRL_STATE BTM_PM_ReadControllerState(void);
2067
2068#endif /* BTM_API_H */
2069