1dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/******************************************************************************
2dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *
3dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *  Copyright (C) 1999-2012 Broadcom Corporation
4dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *
5dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *  Licensed under the Apache License, Version 2.0 (the "License");
6dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *  you may not use this file except in compliance with the License.
7dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *  You may obtain a copy of the License at:
8dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *
9dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *  http://www.apache.org/licenses/LICENSE-2.0
10dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *
11dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *  Unless required by applicable law or agreed to in writing, software
12dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *  distributed under the License is distributed on an "AS IS" BASIS,
13dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *  See the License for the specific language governing permissions and
15dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *  limitations under the License.
16dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *
17dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski ******************************************************************************/
18dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
19dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#ifndef BTM_API_TYPES_H
20dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_API_TYPES_H
21dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
22dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#include "bt_target.h"
2357f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth#include "device/include/esco_parameters.h"
24fe695a557a92053d4c44428ba08c0b8e945d4711Jack He#include "hcidefs.h"
25911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#include "smp_api_types.h"
26dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
27dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Maximum number of bytes allowed for vendor specific command parameters */
28911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_MAX_VENDOR_SPECIFIC_LEN HCI_COMMAND_SIZE
29dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
30dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* BTM application return status codes */
31911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonenum {
32911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SUCCESS = 0,         /* 0  Command succeeded                 */
33911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_CMD_STARTED,         /* 1  Command started OK.               */
34911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_BUSY,                /* 2  Device busy with another command  */
35911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_NO_RESOURCES,        /* 3  No resources to issue command     */
36911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_MODE_UNSUPPORTED,    /* 4  Request for 1 or more unsupported modes */
37911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_ILLEGAL_VALUE,       /* 5  Illegal parameter value           */
38911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_WRONG_MODE,          /* 6  Device in wrong mode for request  */
39911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_UNKNOWN_ADDR,        /* 7  Unknown remote BD address         */
40911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_DEVICE_TIMEOUT,      /* 8  Device timeout                    */
41911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_BAD_VALUE_RET,       /* 9  A bad value was received from HCI */
42911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_ERR_PROCESSING,      /* 10 Generic error                     */
43911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_NOT_AUTHORIZED,      /* 11 Authorization failed              */
44911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_DEV_RESET,           /* 12 Device has been reset             */
45911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_CMD_STORED,          /* 13 request is stored in control block */
46911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_ILLEGAL_ACTION,      /* 14 state machine gets illegal command */
47911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_DELAY_CHECK,         /* 15 delay the check on encryption */
48911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SCO_BAD_LENGTH,      /* 16 Bad SCO over HCI data length */
49911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SUCCESS_NO_SECURITY, /* 17 security passed, no security set  */
50911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_FAILED_ON_SECURITY,  /* 18 security failed                   */
51911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_REPEATED_ATTEMPTS,   /* 19 repeated attempts for LE security requests */
52942648ef5a4b25508cc9ffe7073ddab5e04a9ab4Srinu Jella  BTM_MODE4_LEVEL4_NOT_SUPPORTED, /* 20 Secure Connections Only Mode can't be
53942648ef5a4b25508cc9ffe7073ddab5e04a9ab4Srinu Jella                                     supported */
54942648ef5a4b25508cc9ffe7073ddab5e04a9ab4Srinu Jella  BTM_DEV_BLACKLISTED             /* 21 The device is Blacklisted */
55dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski};
56dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
57dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_STATUS;
58dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
59dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#if (BTA_HOST_INTERLEAVE_SEARCH == TRUE)
60911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef enum {
61911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_BR_ONE,         /*0 First state or BR/EDR scan 1*/
62911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_BLE_ONE,        /*1BLE scan 1*/
63911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_BR_TWO,         /*2 BR/EDR scan 2*/
64911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_BLE_TWO,        /*3 BLE scan 2*/
65911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_FINISH,         /*4 End of Interleave Scan, or normal scan*/
66911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_NO_INTERLEAVING /*5 No Interleaving*/
67911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} btm_inq_state;
68dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#endif
69dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
70dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*************************
71ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Device Control Types
72ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *************************/
73911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_DEVICE_ROLE_BR 0x01
74911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_DEVICE_ROLE_DUAL 0x02
75911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_MAX_DEVICE_ROLE BTM_DEVICE_ROLE_DUAL
76dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_DEVICE_ROLE;
77dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
78dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Device name of peer (may be truncated to save space in BTM database) */
79dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_BD_NAME[BTM_MAX_REM_BD_NAME_LEN + 1];
80dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
81dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Structure returned with local version information */
82911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
83911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t hci_version;
84911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t hci_revision;
85911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t lmp_version;
86911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t manufacturer;
87911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t lmp_subversion;
88dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_VERSION_INFO;
89dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
90dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Structure returned with Vendor Specific Command complete callback */
91911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
92911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t opcode;
93911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t param_len;
94911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t* p_param_buf;
95dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_VSC_CMPL;
96dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
97911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_VSC_CMPL_DATA_SIZE \
98911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (BTM_MAX_VENDOR_SPECIFIC_LEN + sizeof(tBTM_VSC_CMPL))
99dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/**************************************************
100ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Device Control and General Callback Functions
101ee96a3c60fca590d38025925c072d264e06493c4Myles Watson **************************************************/
102dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Callback function for when device status changes. Appl must poll for
103ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * what the new state is (BTM_IsDeviceUp). The event occurs whenever the stack
104ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * has detected that the controller status has changed. This asynchronous event
105ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * is enabled/disabled by calling BTM_RegisterForDeviceStatusNotif().
106dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
107911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonenum { BTM_DEV_STATUS_UP, BTM_DEV_STATUS_DOWN, BTM_DEV_STATUS_CMD_TOUT };
108dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
109dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_DEV_STATUS;
110dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
111911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_DEV_STATUS_CB)(tBTM_DEV_STATUS status);
112dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
113dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Callback function for when a vendor specific event occurs. The length and
114ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * array of returned parameter bytes are included. This asynchronous event
115ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * is enabled/disabled by calling BTM_RegisterForVSEvents().
116dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
117911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_VS_EVT_CB)(uint8_t len, uint8_t* p);
118dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
119dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* General callback function for notifying an application that a synchronous
1209ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * BTM function is complete. The pointer contains the address of any returned
1219ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * data.
1229ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson */
123911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_CMPL_CB)(void* p1);
124dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
125dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* VSC callback function for notifying an application that a synchronous
1269ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * BTM function is complete. The pointer contains the address of any returned
1279ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * data.
1289ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson */
129911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_VSC_CMPL_CB)(tBTM_VSC_CMPL* p1);
130dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
131dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Callback for apps to check connection and inquiry filters.
1329ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Parameters are the BD Address of remote and the Dev Class of remote. If the
1339ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * app returns none zero, the connection or inquiry result will be dropped.
134dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
135a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef uint8_t(tBTM_FILTER_CB)(const RawAddress& bd_addr, DEV_CLASS dc);
136dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
137dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*****************************************************************************
138ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  DEVICE DISCOVERY - Inquiry, Remote Name, Discovery, Class of Device
139ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/
140dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*******************************
141ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Device Discovery Constants
142ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *******************************/
143dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Discoverable modes */
144911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_NON_DISCOVERABLE 0
145911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LIMITED_DISCOVERABLE 1
146911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_GENERAL_DISCOVERABLE 2
147911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_DISCOVERABLE_MASK \
148911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (BTM_LIMITED_DISCOVERABLE | BTM_GENERAL_DISCOVERABLE)
149911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_MAX_DISCOVERABLE BTM_GENERAL_DISCOVERABLE
150dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* high byte for BLE Discoverable modes */
151911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_NON_DISCOVERABLE 0x0000
152911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_LIMITED_DISCOVERABLE 0x0100
153911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_GENERAL_DISCOVERABLE 0x0200
154911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_MAX_DISCOVERABLE BTM_BLE_GENERAL_DISCOVERABLE
155911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_DISCOVERABLE_MASK                            \
156911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (BTM_BLE_NON_DISCOVERABLE | BTM_BLE_LIMITED_DISCOVERABLE | \
157911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson   BTM_BLE_GENERAL_DISCOVERABLE)
158dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
159dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Connectable modes */
160911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_NON_CONNECTABLE 0
161911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_CONNECTABLE 1
162911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_CONNECTABLE_MASK (BTM_NON_CONNECTABLE | BTM_CONNECTABLE)
163dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* high byte for BLE Connectable modes */
164911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_NON_CONNECTABLE 0x0000
165911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_CONNECTABLE 0x0100
166911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_MAX_CONNECTABLE BTM_BLE_CONNECTABLE
167911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_CONNECTABLE_MASK (BTM_BLE_NON_CONNECTABLE | BTM_BLE_CONNECTABLE)
168dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
169dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Inquiry modes
1709ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Note: These modes are associated with the inquiry active values (BTM_*ACTIVE)
1719ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson */
172911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQUIRY_NONE 0
173911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_GENERAL_INQUIRY 0x01
174911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LIMITED_INQUIRY 0x02
175911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BR_INQUIRY_MASK (BTM_GENERAL_INQUIRY | BTM_LIMITED_INQUIRY)
176dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
177dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* high byte of inquiry mode for BLE inquiry mode */
178911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_INQUIRY_NONE 0x00
179911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_GENERAL_INQUIRY 0x10
180911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_LIMITED_INQUIRY 0x20
181911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_INQUIRY_MASK (BTM_BLE_GENERAL_INQUIRY | BTM_BLE_LIMITED_INQUIRY)
182dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
183dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* BTM_IsInquiryActive return values (Bit Mask)
1849ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Note: These bit masks are associated with the inquiry modes (BTM_*_INQUIRY)
1859ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson */
1869ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* no inquiry in progress */
187911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQUIRY_INACTIVE 0x0
1889ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* a general inquiry is in progress */
189911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_GENERAL_INQUIRY_ACTIVE BTM_GENERAL_INQUIRY
1909ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* a limited inquiry is in progress */
191911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LIMITED_INQUIRY_ACTIVE BTM_LIMITED_INQUIRY
1929ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* a periodic inquiry is active */
1939ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson#define BTM_PERIODIC_INQUIRY_ACTIVE 0x8
1949ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* SSP is active, so inquiry is disallowed (work around for FW bug) */
195911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SSP_INQUIRY_ACTIVE 0x4
1969ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* a general inquiry is in progress */
197911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_GENERAL_INQUIRY_ACTIVE BTM_BLE_GENERAL_INQUIRY
1989ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* a limited inquiry is in progress */
199911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_LIMITED_INQUIRY_ACTIVE BTM_BLE_LIMITED_INQUIRY
200dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
201dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* inquiry activity mask */
2029ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* BR/EDR inquiry activity mask */
203911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BR_INQ_ACTIVE_MASK                               \
204911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (BTM_GENERAL_INQUIRY_ACTIVE | BTM_LIMITED_INQUIRY_ACTIVE | \
205911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson   BTM_PERIODIC_INQUIRY_ACTIVE)
2069ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* LE scan activity mask */
207911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_SCAN_ACTIVE_MASK 0xF0
2089ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* LE inquiry activity mask*/
209911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_INQ_ACTIVE_MASK \
210911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (BTM_LE_GENERAL_INQUIRY_ACTIVE | BTM_LE_LIMITED_INQUIRY_ACTIVE)
2119ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* inquiry activity mask */
212911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQUIRY_ACTIVE_MASK \
213911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (BTM_BR_INQ_ACTIVE_MASK | BTM_BLE_INQ_ACTIVE_MASK)
214dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
215dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Define scan types */
216911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SCAN_TYPE_STANDARD 0
217911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SCAN_TYPE_INTERLACED 1 /* 1.2 devices only */
218dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
219dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Define inquiry results mode */
220911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQ_RESULT_STANDARD 0
221911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQ_RESULT_WITH_RSSI 1
222911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQ_RESULT_EXTENDED 2
2239ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* RSSI value not supplied (ignore it) */
224911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQ_RES_IGNORE_RSSI 0x7f
225dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
226dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Inquiry Filter Condition types (see tBTM_INQ_PARMS) */
2279ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Inquiry Filtering is turned off */
228911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_CLR_INQUIRY_FILTER 0
2299ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Filter on device class */
230911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_FILTER_COND_DEVICE_CLASS HCI_FILTER_COND_DEVICE_CLASS
2319ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Filter on device addr */
232911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_FILTER_COND_BD_ADDR HCI_FILTER_COND_BD_ADDR
233dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
234dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* State of the remote name retrieval during inquiry operations.
235ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Used in the tBTM_INQ_INFO structure, and returned in the
236ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * BTM_InqDbRead, BTM_InqDbFirst, and BTM_InqDbNext functions.
237ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * The name field is valid when the state returned is
238ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * BTM_INQ_RMT_NAME_DONE */
239911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQ_RMT_NAME_EMPTY 0
240911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQ_RMT_NAME_PENDING 1
241911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQ_RMT_NAME_DONE 2
242911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQ_RMT_NAME_FAILED 3
243dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
244dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*********************************
245dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *** Class of Device constants ***
246dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski *********************************/
247911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_FORMAT_TYPE_1 0x00
248dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
249dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/****************************
250ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * minor device class field
251ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************/
252dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
253dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* 0x00 is used as unclassified for all minor device classes */
254911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_UNCLASSIFIED 0x00
255dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
256dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* minor device class field for Computer Major Class */
257dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* #define BTM_COD_MINOR_UNCLASSIFIED       0x00    */
258911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_DESKTOP_WORKSTATION 0x04
259911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_SERVER_COMPUTER 0x08
260911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_LAPTOP 0x0C
261911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_HANDHELD_PC_PDA 0x10 /* clam shell */
262911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_PALM_SIZE_PC_PDA 0x14
263911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_WEARABLE_COMPUTER 0x18 /* watch sized */
264dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
265dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* minor device class field for Phone Major Class */
266dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* #define BTM_COD_MINOR_UNCLASSIFIED       0x00    */
267911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_CELLULAR 0x04
268911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_CORDLESS 0x08
269911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_SMART_PHONE 0x0C
2709ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* wired modem or voice gatway */
271911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_WIRED_MDM_V_GTWY 0x10
272911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_ISDN_ACCESS 0x14
273dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
274dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* minor device class field for LAN Access Point Major Class */
275dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Load Factor Field bit 5-7 */
276911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_FULLY_AVAILABLE 0x00
277911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_1_17_UTILIZED 0x20
278911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_17_33_UTILIZED 0x40
279911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_33_50_UTILIZED 0x60
280911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_50_67_UTILIZED 0x80
281911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_67_83_UTILIZED 0xA0
282911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_83_99_UTILIZED 0xC0
283911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_NO_SERVICE_AVAILABLE 0xE0
284dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* sub-Field bit 2-4 */
285dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* #define BTM_COD_MINOR_UNCLASSIFIED       0x00    */
286dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
287dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* minor device class field for Audio/Video Major Class */
288dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* #define BTM_COD_MINOR_UNCLASSIFIED       0x00    */
289911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_CONFM_HEADSET 0x04
290911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_CONFM_HANDSFREE 0x08
291911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_MICROPHONE 0x10
292911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_LOUDSPEAKER 0x14
293911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_HEADPHONES 0x18
294911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_PORTABLE_AUDIO 0x1C
295911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_CAR_AUDIO 0x20
296911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_SET_TOP_BOX 0x24
297911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_HIFI_AUDIO 0x28
298911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_VCR 0x2C
299911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_VIDEO_CAMERA 0x30
300911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_CAMCORDER 0x34
301911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_VIDEO_MONITOR 0x38
302911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_VIDDISP_LDSPKR 0x3C
303911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_VIDEO_CONFERENCING 0x40
304911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_GAMING_TOY 0x48
305dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
306dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* minor device class field for Peripheral Major Class */
307dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Bits 6-7 independently specify mouse, keyboard, or combo mouse/keyboard */
308911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_KEYBOARD 0x40
309911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_POINTING 0x80
310911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_COMBO 0xC0
311dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Bits 2-5 OR'd with selection from bits 6-7 */
312dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* #define BTM_COD_MINOR_UNCLASSIFIED       0x00    */
313911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_JOYSTICK 0x04
314911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_GAMEPAD 0x08
315911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_REMOTE_CONTROL 0x0C
316911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_SENSING_DEVICE 0x10
317911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_DIGITIZING_TABLET 0x14
318911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_CARD_READER 0x18 /* e.g. SIM card reader */
319911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_DIGITAL_PAN 0x1C
320911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_HAND_SCANNER 0x20
321911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_HAND_GESTURAL_INPUT 0x24
322dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
323dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* minor device class field for Imaging Major Class */
324dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Bits 5-7 independently specify display, camera, scanner, or printer */
325911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_DISPLAY 0x10
326911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_CAMERA 0x20
327911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_SCANNER 0x40
328911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_PRINTER 0x80
329dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Bits 2-3 Reserved */
330dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* #define BTM_COD_MINOR_UNCLASSIFIED       0x00    */
331dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
332dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* minor device class field for Wearable Major Class */
333dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Bits 2-7 meaningful    */
334911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_WRIST_WATCH 0x04
335911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_PAGER 0x08
336911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_JACKET 0x0C
337911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_HELMET 0x10
338911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_GLASSES 0x14
339dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
340dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* minor device class field for Toy Major Class */
341dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Bits 2-7 meaningful    */
342911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_ROBOT 0x04
343911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_VEHICLE 0x08
344911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_DOLL_ACTION_FIGURE 0x0C
345911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_CONTROLLER 0x10
346911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_GAME 0x14
347dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
348dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* minor device class field for Health Major Class */
349dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Bits 2-7 meaningful    */
350911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_BLOOD_MONITOR 0x04
351911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_THERMOMETER 0x08
352911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_WEIGHING_SCALE 0x0C
353911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_GLUCOSE_METER 0x10
354911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_PULSE_OXIMETER 0x14
355911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_HEART_PULSE_MONITOR 0x18
356911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_HEALTH_DATA_DISPLAY 0x1C
357911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_STEP_COUNTER 0x20
358911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_BODY_COM_ANALYZER 0x24
359911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_PEAK_FLOW_MONITOR 0x28
360911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_MEDICATION_MONITOR 0x2C
361911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_KNEE_PROSTHESIS 0x30
362911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_ANKLE_PROSTHESIS 0x34
363dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
364dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/***************************
365ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * major device class field
366ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ***************************/
367911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_MISCELLANEOUS 0x00
368911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_COMPUTER 0x01
369911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_PHONE 0x02
370911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_LAN_ACCESS_PT 0x03
371911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_AUDIO 0x04
372911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_PERIPHERAL 0x05
373911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_IMAGING 0x06
374911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_WEARABLE 0x07
375911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_TOY 0x08
376911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_HEALTH 0x09
377911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_UNCLASSIFIED 0x1F
378dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
379dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/***************************
380ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * service class fields
381ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ***************************/
382911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_LMTD_DISCOVER 0x0020
383911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_POSITIONING 0x0100
384911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_NETWORKING 0x0200
385911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_RENDERING 0x0400
386911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_CAPTURING 0x0800
387911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_OBJ_TRANSFER 0x1000
388911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_AUDIO 0x2000
389911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_TELEPHONY 0x4000
390911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_INFORMATION 0x8000
391dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
392dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* class of device field macros */
393911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_FORMAT_TYPE(u8, pd) \
394911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  { (u8) = (pd)[2] & 0x03; }
395911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_CLASS(u8, pd) \
396911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  { (u8) = (pd)[2] & 0xFC; }
397911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_CLASS(u8, pd) \
398911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  { (u8) = (pd)[1] & 0x1F; }
399911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_CLASS(u16, pd) \
400911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  {                                    \
401911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    (u16) = (pd)[0];                   \
402911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    (u16) <<= 8;                       \
403911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    (u16) += (pd)[1] & 0xE0;           \
404911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
405dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
406dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* to set the fields (assumes that format type is always 0) */
407911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define FIELDS_TO_COD(pd, mn, mj, sv)                   \
408911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  {                                                     \
409911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    (pd)[2] = mn;                                       \
410911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    (pd)[1] = (mj) + ((sv)&BTM_COD_SERVICE_CLASS_LO_B); \
411911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    (pd)[0] = (sv) >> 8;                                \
412911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
413dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
414dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* the COD masks */
415911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_FORMAT_TYPE_MASK 0x03
416911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MINOR_CLASS_MASK 0xFC
417911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_MAJOR_CLASS_MASK 0x1F
418911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_CLASS_LO_B 0x00E0
419911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_COD_SERVICE_CLASS_MASK 0xFFE0
420dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
421dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* BTM service definitions
422ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Used for storing EIR data to bit mask
423dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
424911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonenum {
425911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_SERVICE_DISCOVERY_SERVER,
426911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_BROWSE_GROUP_DESCRIPTOR,   */
427911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_PUBLIC_BROWSE_GROUP,       */
428911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_SERIAL_PORT,
429911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_LAN_ACCESS_USING_PPP,
430911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_DIALUP_NETWORKING,
431911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_IRMC_SYNC,
432911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_OBEX_OBJECT_PUSH,
433911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_OBEX_FILE_TRANSFER,
434911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_IRMC_SYNC_COMMAND,
435911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_HEADSET,
436911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_CORDLESS_TELEPHONY,
437911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_AUDIO_SOURCE,
438911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_AUDIO_SINK,
439911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_AV_REM_CTRL_TARGET,
440911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_ADV_AUDIO_DISTRIBUTION,    */
441911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_AV_REMOTE_CONTROL,
442911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_VIDEO_CONFERENCING,        */
443911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_INTERCOM,
444911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_FAX,
445911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_HEADSET_AUDIO_GATEWAY,
446911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_WAP,                       */
447911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_WAP_CLIENT,                */
448911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_PANU,
449911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_NAP,
450911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_GN,
451911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_DIRECT_PRINTING,
452911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_REFERENCE_PRINTING,        */
453911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_IMAGING,
454911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_IMAGING_RESPONDER,
455911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_IMAGING_AUTO_ARCHIVE,
456911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_IMAGING_REF_OBJECTS,
457911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_HF_HANDSFREE,
458911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_AG_HANDSFREE,
459911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_DIR_PRT_REF_OBJ_SERVICE,
460911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_REFLECTED_UI,              */
461911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_BASIC_PRINTING,
462911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_PRINTING_STATUS,
463911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_HUMAN_INTERFACE,
464911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_CABLE_REPLACEMENT,
465911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_HCRP_PRINT,
466911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_HCRP_SCAN,
467911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_COMMON_ISDN_ACCESS,        */
468911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_VIDEO_CONFERENCING_GW,     */
469911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_UDI_MT,                    */
470911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_UDI_TA,                    */
471911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_VCP,                       */
472911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_SAP,
473911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_PBAP_PCE,
474911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_PBAP_PSE,
475911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_TE_PHONE_ACCESS,           */
476911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_ME_PHONE_ACCESS,           */
477911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_PHONE_ACCESS,
478911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_HEADSET_HS,
479911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_PNP_INFORMATION,
480911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_GENERIC_NETWORKING,        */
481911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_GENERIC_FILETRANSFER,      */
482911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_GENERIC_AUDIO,             */
483911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_GENERIC_TELEPHONY,         */
484911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_UPNP_SERVICE,              */
485911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_UPNP_IP_SERVICE,           */
486911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_ESDP_UPNP_IP_PAN,          */
487911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_ESDP_UPNP_IP_LAP,          */
488911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_ESDP_UPNP_IP_L2CAP,        */
489911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_VIDEO_SOURCE,
490911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_VIDEO_SINK,
491911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_VIDEO_DISTRIBUTION         */
492911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /*    BTM_EIR_UUID_SERVCLASS_HDP_PROFILE                */
493911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_MESSAGE_ACCESS,
494911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_MESSAGE_NOTIFICATION,
495911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_HDP_SOURCE,
496911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_UUID_SERVCLASS_HDP_SINK,
497911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_EIR_MAX_SERVICES
498dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski};
499dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
500dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* search result in EIR of inquiry database */
501911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_FOUND 0
502911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_NOT_FOUND 1
503911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_UNKNOWN 2
504dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
505dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_EIR_SEARCH_RESULT;
506dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
5079ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 0x01 */
508911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_FLAGS_TYPE HCI_EIR_FLAGS_TYPE
5099ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 0x02 */
510911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_MORE_16BITS_UUID_TYPE HCI_EIR_MORE_16BITS_UUID_TYPE
5119ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 0x03 */
512911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_COMPLETE_16BITS_UUID_TYPE HCI_EIR_COMPLETE_16BITS_UUID_TYPE
5139ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 0x04 */
514911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_MORE_32BITS_UUID_TYPE HCI_EIR_MORE_32BITS_UUID_TYPE
5159ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 0x05 */
516911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_COMPLETE_32BITS_UUID_TYPE HCI_EIR_COMPLETE_32BITS_UUID_TYPE
5179ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 0x06 */
518911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_MORE_128BITS_UUID_TYPE HCI_EIR_MORE_128BITS_UUID_TYPE
5199ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 0x07 */
520911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_COMPLETE_128BITS_UUID_TYPE HCI_EIR_COMPLETE_128BITS_UUID_TYPE
5219ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 0x08 */
522911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_SHORTENED_LOCAL_NAME_TYPE HCI_EIR_SHORTENED_LOCAL_NAME_TYPE
5239ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 0x09 */
524911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_COMPLETE_LOCAL_NAME_TYPE HCI_EIR_COMPLETE_LOCAL_NAME_TYPE
5259ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 0x0A */
526911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_TX_POWER_LEVEL_TYPE HCI_EIR_TX_POWER_LEVEL_TYPE
5279ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 0xFF */
528911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_MANUFACTURER_SPECIFIC_TYPE HCI_EIR_MANUFACTURER_SPECIFIC_TYPE
529dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
530dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* the following EIR tags are defined to OOB, not regular EIR data */
5319ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 6 bytes */
532911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_OOB_BD_ADDR_TYPE HCI_EIR_OOB_BD_ADDR_TYPE
5339ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 3 bytes */
534911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_OOB_COD_TYPE HCI_EIR_OOB_COD_TYPE
5359ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 16 bytes */
536911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_OOB_SSP_HASH_C_TYPE HCI_EIR_OOB_SSP_HASH_C_TYPE
5379ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* 16 bytes */
538911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_OOB_SSP_RAND_R_TYPE HCI_EIR_OOB_SSP_RAND_R_TYPE
5399ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson
5409ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* include 2 bytes length & 6 bytes bd_addr */
541911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_OOB_MANDATORY_SIZE 8
542911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_OOB_DATA_LEN_SIZE 2
543911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_OOB_BD_ADDR_SIZE 6
544911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_OOB_COD_SIZE BT_OOB_COD_SIZE
545911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_OOB_HASH_C_SIZE BT_OOB_HASH_C_SIZE
546911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_OOB_RAND_R_SIZE BT_OOB_RAND_R_SIZE
547911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
548911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_SEC_NONE 0
5499ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* encrypt the link using current key */
550911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_SEC_ENCRYPT 1
551911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_SEC_ENCRYPT_NO_MITM 2
552911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_SEC_ENCRYPT_MITM 3
553dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_BLE_SEC_ACT;
554dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
555ee96a3c60fca590d38025925c072d264e06493c4Myles Watson/*******************************************************************************
556ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * BTM Services MACROS handle array of uint32_t bits for more than 32 services
557ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
558dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Determine the number of uint32_t's necessary for services */
559911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_ARRAY_BITS 32 /* Number of bits in each array element */
560911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_SERVICE_ARRAY_SIZE                         \
561911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (((uint32_t)BTM_EIR_MAX_SERVICES / BTM_EIR_ARRAY_BITS) + \
562911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson   (((uint32_t)BTM_EIR_MAX_SERVICES % BTM_EIR_ARRAY_BITS) ? 1 : 0))
563dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
564dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* MACRO to set the service bit mask in a bit stream */
565911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_SET_SERVICE(p, service)                              \
566911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (((uint32_t*)(p))[(((uint32_t)(service)) / BTM_EIR_ARRAY_BITS)] |= \
567911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson   ((uint32_t)1 << (((uint32_t)(service)) % BTM_EIR_ARRAY_BITS)))
568dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
569dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* MACRO to clear the service bit mask in a bit stream */
570911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_CLR_SERVICE(p, service)                              \
571911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (((uint32_t*)(p))[(((uint32_t)(service)) / BTM_EIR_ARRAY_BITS)] &= \
572911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson   ~((uint32_t)1 << (((uint32_t)(service)) % BTM_EIR_ARRAY_BITS)))
573dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
574dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* MACRO to check the service bit mask in a bit stream */
575911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EIR_HAS_SERVICE(p, service)                               \
576911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  ((((uint32_t*)(p))[(((uint32_t)(service)) / BTM_EIR_ARRAY_BITS)] &  \
577911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    ((uint32_t)1 << (((uint32_t)(service)) % BTM_EIR_ARRAY_BITS))) >> \
578911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson   (((uint32_t)(service)) % BTM_EIR_ARRAY_BITS))
579dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
5809ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* start of EIR in HCI buffer, 4 bytes = HCI Command(2) + Length(1) + FEC_Req(1)
5819ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson */
582911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_HCI_EIR_OFFSET (BT_HDR_SIZE + 4)
583dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
584dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/***************************
585ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Device Discovery Types
586ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ***************************/
587dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Definitions of the parameters passed to BTM_StartInquiry and
588ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * BTM_SetPeriodicInquiryMode.
589dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
590911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct /* contains the two device class condition fields */
591dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski{
592911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  DEV_CLASS dev_class;
593911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  DEV_CLASS dev_class_mask;
594dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_COD_COND;
595dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
596911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef union /* contains the inquiry filter condition */
597dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski{
598a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bdaddr_cond;
599911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_COD_COND cod_cond;
600dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_INQ_FILT_COND;
601dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
602911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct /* contains the parameters passed to the inquiry functions */
603dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski{
604911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t mode;      /* general or limited */
605911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t duration;  /* duration of the inquiry (1.28 sec increments) */
606911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t max_resps; /* maximum number of responses to return */
607911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool report_dup; /* report duplicated inquiry response with higher RSSI value
608911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                      */
609911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t filter_cond_type; /* new devices, BD ADDR, COD, or No filtering */
610911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_INQ_FILT_COND filter_cond; /* filter value based on filter cond type */
611dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#if (BTA_HOST_INTERLEAVE_SEARCH == TRUE)
612911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t intl_duration
613911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      [4]; /*duration array storing the interleave scan's time portions*/
614dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#endif
615dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_INQ_PARMS;
616dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
617911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQ_RESULT_BR 0x01
618911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INQ_RESULT_BLE 0x02
619dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
620d64bf4f6f8b34471b120330bf3be2b8b7aab0274Jakub Pawlowskiconstexpr uint8_t BLE_EVT_CONNECTABLE_BIT = 0;
621d64bf4f6f8b34471b120330bf3be2b8b7aab0274Jakub Pawlowskiconstexpr uint8_t BLE_EVT_SCANNABLE_BIT = 1;
622d64bf4f6f8b34471b120330bf3be2b8b7aab0274Jakub Pawlowskiconstexpr uint8_t BLE_EVT_DIRECTED_BIT = 2;
623d64bf4f6f8b34471b120330bf3be2b8b7aab0274Jakub Pawlowskiconstexpr uint8_t BLE_EVT_SCAN_RESPONSE_BIT = 3;
624d64bf4f6f8b34471b120330bf3be2b8b7aab0274Jakub Pawlowskiconstexpr uint8_t BLE_EVT_LEGACY_BIT = 4;
625dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
6267de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowskiconstexpr uint8_t PHY_LE_NO_PACKET = 0x00;
6277de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowskiconstexpr uint8_t PHY_LE_1M = 0x01;
6287de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowskiconstexpr uint8_t PHY_LE_2M = 0x02;
6297de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowskiconstexpr uint8_t PHY_LE_CODED = 0x03;
6307de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowski
6317de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowskiconstexpr uint8_t NO_ADI_PRESENT = 0xFF;
6327de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowskiconstexpr uint8_t TX_POWER_NOT_PRESENT = 0x7F;
6337de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowski
634dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* These are the fields returned in each device's response to the inquiry.  It
635ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * is returned in the results callback if registered.
636dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
637911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
638911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t clock_offset;
639a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress remote_bd_addr;
640911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  DEV_CLASS dev_class;
641911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t page_scan_rep_mode;
642911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t page_scan_per_mode;
643911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t page_scan_mode;
644911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  int8_t rssi; /* Set to BTM_INQ_RES_IGNORE_RSSI if  not valid */
645911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint32_t eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE];
646911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool eir_complete_list;
647911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBT_DEVICE_TYPE device_type;
648911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t inq_result_type;
649911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t ble_addr_type;
650d64bf4f6f8b34471b120330bf3be2b8b7aab0274Jakub Pawlowski  uint16_t ble_evt_type;
6517de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowski  uint8_t ble_primary_phy;
6527de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowski  uint8_t ble_secondary_phy;
6537de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowski  uint8_t ble_advertising_sid;
6547de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowski  int8_t ble_tx_power;
6557de0f9b78fb38fcb02cbcd3c1c7c005947b9e291Jakub Pawlowski  uint16_t ble_periodic_adv_int;
656911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t flag;
657dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_INQ_RESULTS;
658dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
6599ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* This is the inquiry response information held in its database by BTM, and
6609ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * available to applications via BTM_InqDbRead, BTM_InqDbFirst, and
6619ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * BTM_InqDbNext.
662dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
663911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
664911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_INQ_RESULTS results;
665911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
666911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool appl_knows_rem_name; /* set by application if it knows the remote name of
667911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                               the peer device.
668911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                               This is later used by application to determine if
669911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                               remote name request is
670911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                               required to be done. Having the flag here avoid
671911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                               duplicate store of inquiry results */
672911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t remote_name_len;
673911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BD_NAME remote_name;
674911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t remote_name_state;
675911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t remote_name_type;
676dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
677dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_INQ_INFO;
678dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
679dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Structure returned with inquiry complete callback */
680911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
681911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_STATUS status;
682911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t num_resp; /* Number of results from the current inquiry */
683dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_INQUIRY_CMPL;
684dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
685dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Structure returned with remote name  request */
686911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
687911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t status;
688a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;
689911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t length;
690911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BD_NAME remote_bd_name;
691dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_REMOTE_DEV_NAME;
692dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
693911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
694911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t pcm_intf_rate; /* PCM interface rate: 0: 128kbps, 1: 256 kbps;
695911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                             2:512 bps; 3: 1024kbps; 4: 2048kbps */
696911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t frame_type;    /* frame type: 0: short; 1: long */
697911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t sync_mode;     /* sync mode: 0: slave; 1: master */
698911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t clock_mode;    /* clock mode: 0: slave; 1: master */
699dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
700911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBTM_SCO_PCM_PARAM;
701dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
702dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/****************************************
703ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Device Discovery Callback Functions
704ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************/
705dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Callback function for asynchronous notifications when the BTM inquiry DB
706ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * changes. First param is inquiry database, second is if added to or removed
707ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * from the inquiry database.
708dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
709911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_INQ_DB_CHANGE_CB)(void* p1, bool is_new);
710dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
711dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Callback function for notifications when the BTM gets inquiry response.
712ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * First param is inquiry results database, second is pointer of EIR.
713dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
714911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_INQ_RESULTS_CB)(tBTM_INQ_RESULTS* p_inq_results,
715f7100bb0e57ed289833c353ba06028345f9f39b6Jakub Pawlowski                                  uint8_t* p_eir, uint16_t eir_len);
716dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
717dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*****************************************************************************
718ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  ACL CHANNEL MANAGEMENT
719ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/
720dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/******************
721ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  ACL Constants
722ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************/
723dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
724dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* ACL modes */
725911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ACL_MODE_NORMAL HCI_MODE_ACTIVE
726911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ACL_MODE_HOLD HCI_MODE_HOLD
727911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ACL_MODE_SNIFF HCI_MODE_SNIFF
728911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ACL_MODE_PARK HCI_MODE_PARK
729dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
730dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Returned with structure in role switch callback (tBTM_ROLE_SWITCH_CMPL) */
731911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ROLE_MASTER HCI_ROLE_MASTER
732911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ROLE_SLAVE HCI_ROLE_SLAVE
733911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ROLE_UNDEFINED 0xff /* undefined value (error status) */
734dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
735dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* ACL Packet Types */
736911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ACL_PKT_TYPES_MASK_DM1 HCI_PKT_TYPES_MASK_DM1
737911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ACL_PKT_TYPES_MASK_DH1 HCI_PKT_TYPES_MASK_DH1
738911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ACL_PKT_TYPES_MASK_DM3 HCI_PKT_TYPES_MASK_DM3
739911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ACL_PKT_TYPES_MASK_DH3 HCI_PKT_TYPES_MASK_DH3
740911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ACL_PKT_TYPES_MASK_DM5 HCI_PKT_TYPES_MASK_DM5
741911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ACL_PKT_TYPES_MASK_DH5 HCI_PKT_TYPES_MASK_DH5
742dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_ACL_PKT_TYPES_MASK_NO_2_DH1 HCI_PKT_TYPES_MASK_NO_2_DH1
743dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_ACL_PKT_TYPES_MASK_NO_3_DH1 HCI_PKT_TYPES_MASK_NO_3_DH1
744dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_ACL_PKT_TYPES_MASK_NO_2_DH3 HCI_PKT_TYPES_MASK_NO_2_DH3
745dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_ACL_PKT_TYPES_MASK_NO_3_DH3 HCI_PKT_TYPES_MASK_NO_3_DH3
746dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_ACL_PKT_TYPES_MASK_NO_2_DH5 HCI_PKT_TYPES_MASK_NO_2_DH5
747dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_ACL_PKT_TYPES_MASK_NO_3_DH5 HCI_PKT_TYPES_MASK_NO_3_DH5
748dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
749dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/***************
750ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  ACL Types
751ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ***************/
752dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
7539ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Structure returned with Role Switch information (in tBTM_CMPL_CB callback
7549ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * function) in response to BTM_SwitchRole call.
755dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
756911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
757911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t hci_status;     /* HCI status returned with the event */
758911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t role;           /* BTM_ROLE_MASTER or BTM_ROLE_SLAVE */
759a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress remote_bd_addr; /* Remote BD addr involved with the switch */
760dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_ROLE_SWITCH_CMPL;
761dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
762dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Structure returned with QoS information (in tBTM_CMPL_CB callback function)
763ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * in response to BTM_SetQoS call.
764dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
765911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
766911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  FLOW_SPEC flow;
767911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t handle;
768911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t status;
769dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_QOS_SETUP_CMPL;
770dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
771dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Structure returned with read RSSI event (in tBTM_CMPL_CB callback function)
772ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * in response to BTM_ReadRSSI call.
773dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
774911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
775911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_STATUS status;
776911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t hci_status;
777911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  int8_t rssi;
778a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress rem_bda;
779aa4322821bc8cca05e7810451971ccc6a17acbf3Pavlin Radoslavov} tBTM_RSSI_RESULT;
780dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
7814820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov/* Structure returned with read failed contact counter event
7824820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov * (in tBTM_CMPL_CB callback function) in response to
7834820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov * BTM_ReadFailedContactCounter call.
7844820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov */
7854820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavovtypedef struct {
7864820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov  tBTM_STATUS status;
7874820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov  uint8_t hci_status;
7884820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov  uint16_t failed_contact_counter;
7894820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov  RawAddress rem_bda;
7904820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov} tBTM_FAILED_CONTACT_COUNTER_RESULT;
7914820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov
792ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov/* Structure returned with read automatic flush timeout event
793ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov * (in tBTM_CMPL_CB callback function) in response to
794ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov * BTM_ReadAutomaticFlushTimeout call.
795ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov */
796ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavovtypedef struct {
797ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov  tBTM_STATUS status;
798ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov  uint8_t hci_status;
799ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov  uint16_t automatic_flush_timeout;
800ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov  RawAddress rem_bda;
801ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov} tBTM_AUTOMATIC_FLUSH_TIMEOUT_RESULT;
802ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov
8039ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Structure returned with read current TX power event (in tBTM_CMPL_CB callback
8049ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * function) in response to BTM_ReadTxPower call.
805dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
806911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
807911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_STATUS status;
808911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t hci_status;
809911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  int8_t tx_power;
810a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress rem_bda;
811aa4322821bc8cca05e7810451971ccc6a17acbf3Pavlin Radoslavov} tBTM_TX_POWER_RESULT;
812dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
8139ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Structure returned with read link quality event (in tBTM_CMPL_CB callback
8149ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * function) in response to BTM_ReadLinkQuality call.
815dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
816911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
817911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_STATUS status;
818911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t hci_status;
819911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t link_quality;
820a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress rem_bda;
821aa4322821bc8cca05e7810451971ccc6a17acbf3Pavlin Radoslavov} tBTM_LINK_QUALITY_RESULT;
822dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
8239ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Structure returned with read inq tx power quality event (in tBTM_CMPL_CB
8249ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * callback function) in response to BTM_ReadInquiryRspTxPower call.
825dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
826911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
827911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_STATUS status;
828911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t hci_status;
829911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  int8_t tx_power;
830aa4322821bc8cca05e7810451971ccc6a17acbf3Pavlin Radoslavov} tBTM_INQ_TXPWR_RESULT;
831dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
832911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonenum {
833911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_BL_CONN_EVT,
834911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_BL_DISCN_EVT,
835911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_BL_UPDATE_EVT,
836911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_BL_ROLE_CHG_EVT,
837911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_BL_COLLISION_EVT
838dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski};
839dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_BL_EVENT;
840dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint16_t tBTM_BL_EVENT_MASK;
841dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
842911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BL_CONN_MASK 0x0001
843911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BL_DISCN_MASK 0x0002
844911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BL_UPDATE_MASK 0x0004
845911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BL_ROLE_CHG_MASK 0x0008
846dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
847dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Device features mask definitions */
848911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_FEATURE_BYTES_PER_PAGE HCI_FEATURE_BYTES_PER_PAGE
849911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_EXT_FEATURES_PAGE_MAX HCI_EXT_FEATURES_PAGE_MAX
850dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
851dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* the data type associated with BTM_BL_CONN_EVT */
852911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
853911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BL_EVENT event;     /* The event reported. */
854a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  const RawAddress* p_bda; /* The address of the newly connected device */
855911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  DEV_CLASS_PTR p_dc;      /* The device class */
856911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BD_NAME_PTR p_bdn;       /* The device name */
857911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t* p_features;     /* pointer to the remote device's features page[0]
858911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                              (supported features page) */
859911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t handle;         /* connection handle */
860911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBT_TRANSPORT transport; /* link is LE or not */
861dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_BL_CONN_DATA;
862dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
863dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* the data type associated with BTM_BL_DISCN_EVT */
864911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
865911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BL_EVENT event;     /* The event reported. */
866a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  const RawAddress* p_bda; /* The address of the disconnected device */
867911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t handle;         /* disconnected connection handle */
868911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBT_TRANSPORT transport; /* link is LE link or not */
869dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_BL_DISCN_DATA;
870dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
871dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Busy-Level shall have the inquiry_paging mask set when
872dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski * inquiry/paging is in progress, Else the number of ACL links */
873dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_BL_INQUIRY_PAGING_MASK 0x10
874911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BL_INQUIRY_STARTED (BTM_BL_INQUIRY_PAGING_MASK | 0x1)
875dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_BL_INQUIRY_CANCELLED (BTM_BL_INQUIRY_PAGING_MASK | 0x2)
876911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BL_INQUIRY_COMPLETE (BTM_BL_INQUIRY_PAGING_MASK | 0x3)
877911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BL_PAGING_STARTED (BTM_BL_INQUIRY_PAGING_MASK | 0x4)
878911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BL_PAGING_COMPLETE (BTM_BL_INQUIRY_PAGING_MASK | 0x5)
879dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* the data type associated with BTM_BL_UPDATE_EVT */
880911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
881911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BL_EVENT event;      /* The event reported. */
882911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t busy_level;       /* when paging or inquiring, level is 10.
883911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                             * Otherwise, the number of ACL links. */
884911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t busy_level_flags; /* Notifies actual inquiry/page activities */
885dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_BL_UPDATE_DATA;
886dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
887dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* the data type associated with BTM_BL_ROLE_CHG_EVT */
888911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
889911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BL_EVENT event; /* The event reported. */
890a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  const RawAddress* p_bda; /* The address of the peer connected device */
891911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t new_role;
892911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t hci_status; /* HCI status returned with the event */
893dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_BL_ROLE_CHG_DATA;
894dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
895911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef union {
896911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BL_EVENT event;        /* The event reported. */
897911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BL_CONN_DATA conn;     /* The data associated with BTM_BL_CONN_EVT */
898911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BL_DISCN_DATA discn;   /* The data associated with BTM_BL_DISCN_EVT */
899911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BL_UPDATE_DATA update; /* The data associated with BTM_BL_UPDATE_EVT */
900911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BL_ROLE_CHG_DATA
901911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      role_chg; /*The data associated with BTM_BL_ROLE_CHG_EVT */
902dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_BL_EVENT_DATA;
903dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
904dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Callback function for notifications when the BTM busy level
905ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * changes.
906dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
907911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_BL_CHANGE_CB)(tBTM_BL_EVENT_DATA* p_data);
908dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
909dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/***************************
910ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  ACL Callback Functions
911ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ***************************/
912dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Callback function for notifications when the BTM ACL connection DB
913ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * changes. First param is BD address, second is if added or removed.
914ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Registered through BTM_AclRegisterForChanges call.
915dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
916a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef void(tBTM_ACL_DB_CHANGE_CB)(const RawAddress& p_bda, DEV_CLASS p_dc,
917911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                    BD_NAME p_bdn, uint8_t* features,
918911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                    bool is_new, uint16_t handle,
919911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                    tBT_TRANSPORT transport);
920dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*****************************************************************************
921ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  SCO CHANNEL MANAGEMENT
922ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/
923dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/******************
924ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  SCO Constants
925ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************/
926dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
927dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Define an invalid SCO index and an invalid HCI handle */
928911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INVALID_SCO_INDEX 0xFFFF
929911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_INVALID_HCI_HANDLE 0xFFFF
930dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
931dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Define an invalid SCO disconnect reason */
932dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_INVALID_SCO_DISC_REASON 0xFFFF
933dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
934dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Define first active SCO index */
935911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_FIRST_ACTIVE_SCO_INDEX BTM_MAX_SCO_LINKS
936dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
93757f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth#define BTM_SCO_LINK_ONLY_MASK \
93857f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth  (ESCO_PKT_TYPES_MASK_HV1 | ESCO_PKT_TYPES_MASK_HV2 | ESCO_PKT_TYPES_MASK_HV3)
93957f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth
94057f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth#define BTM_ESCO_LINK_ONLY_MASK \
94157f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth  (ESCO_PKT_TYPES_MASK_EV3 | ESCO_PKT_TYPES_MASK_EV4 | ESCO_PKT_TYPES_MASK_EV5)
942911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
943911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SCO_LINK_ALL_PKT_MASK \
944911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (BTM_SCO_LINK_ONLY_MASK | BTM_ESCO_LINK_ONLY_MASK)
945dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
946dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_VALID_SCO_ALL_PKT_TYPE HCI_VALID_SCO_ALL_PKT_TYPE
947dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
948dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/***************
949ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  SCO Types
950ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ***************/
951911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LINK_TYPE_SCO HCI_LINK_TYPE_SCO
952911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LINK_TYPE_ESCO HCI_LINK_TYPE_ESCO
953dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_SCO_TYPE;
954dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
955dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*******************
956ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * SCO Codec Types
957ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *******************/
958dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski// TODO(google) This should use common definitions
959911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SCO_CODEC_NONE 0x0000
960911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SCO_CODEC_CVSD 0x0001
961911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SCO_CODEC_MSBC 0x0002
962dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint16_t tBTM_SCO_CODEC_TYPE;
963dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
964dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*******************
965ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * SCO Voice Settings
966ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *******************/
967911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_VOICE_SETTING_CVSD                                         \
968911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  ((uint16_t)(HCI_INP_CODING_LINEAR | HCI_INP_DATA_FMT_2S_COMPLEMENT | \
969911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson              HCI_INP_SAMPLE_SIZE_16BIT | HCI_AIR_CODING_FORMAT_CVSD))
970dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
971911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_VOICE_SETTING_TRANS                                        \
972911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  ((uint16_t)(HCI_INP_CODING_LINEAR | HCI_INP_DATA_FMT_2S_COMPLEMENT | \
973911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson              HCI_INP_SAMPLE_SIZE_16BIT | HCI_AIR_CODING_FORMAT_TRANSPNT))
974dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
975dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*******************
976ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * SCO Data Status
977ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *******************/
978911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonenum {
979911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SCO_DATA_CORRECT,
980911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SCO_DATA_PAR_ERR,
981911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SCO_DATA_NONE,
982911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SCO_DATA_PAR_LOST
983dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski};
984dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_SCO_DATA_FLAG;
985dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
986dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/***************************
987ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  SCO Callback Functions
988ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ***************************/
989911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_SCO_CB)(uint16_t sco_inx);
990911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_SCO_DATA_CB)(uint16_t sco_inx, BT_HDR* p_data,
991911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                               tBTM_SCO_DATA_FLAG status);
992dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
993dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/***************
994ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  eSCO Types
995ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ***************/
996dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* tBTM_ESCO_CBACK event types */
997911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ESCO_CHG_EVT 1
998911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_ESCO_CONN_REQ_EVT 2
999dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_ESCO_EVT;
1000dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
100157f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth/* Structure passed with SCO change command and events.
100257f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth * Used by both Sync and Enhanced sync messaging
100357f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth */
1004911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
100557f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth  uint16_t max_latency_ms;
1006911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t packet_types;
100757f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth  uint8_t retransmission_effort;
1008dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_CHG_ESCO_PARAMS;
1009dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1010dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Returned by BTM_ReadEScoLinkParms() */
1011911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1012911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t rx_pkt_len;
1013911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t tx_pkt_len;
1014a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;
1015911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t link_type; /* BTM_LINK_TYPE_SCO or BTM_LINK_TYPE_ESCO */
1016911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t tx_interval;
1017911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t retrans_window;
1018911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t air_mode;
1019dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_ESCO_DATA;
1020dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1021911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1022911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t sco_inx;
1023911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t rx_pkt_len;
1024911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t tx_pkt_len;
1025a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;
1026911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t hci_status;
1027911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t tx_interval;
1028911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t retrans_window;
1029dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_CHG_ESCO_EVT_DATA;
1030dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1031911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1032911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t sco_inx;
1033a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;
1034911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  DEV_CLASS dev_class;
1035911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SCO_TYPE link_type;
1036dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_ESCO_CONN_REQ_EVT_DATA;
1037dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1038911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef union {
1039911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_CHG_ESCO_EVT_DATA chg_evt;
1040911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_ESCO_CONN_REQ_EVT_DATA conn_evt;
1041dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_ESCO_EVT_DATA;
1042dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1043dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/***************************
1044ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  eSCO Callback Functions
1045ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ***************************/
1046911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_ESCO_CBACK)(tBTM_ESCO_EVT event, tBTM_ESCO_EVT_DATA* p_data);
1047dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1048dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*****************************************************************************
1049ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  SECURITY MANAGEMENT
1050ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/
1051dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*******************************
1052ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Security Manager Constants
1053ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *******************************/
1054dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1055dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Security Mode (BTM_SetSecurityMode) */
1056911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_MODE_UNDEFINED 0
1057911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_MODE_NONE 1
1058911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_MODE_SERVICE 2
1059911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_MODE_LINK 3
1060911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_MODE_SP 4
1061911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_MODE_SP_DEBUG 5
1062911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_MODE_SC 6
1063dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1064dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Maximum Number of BTM Security Modes */
1065911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_MODES_MAX 7
1066dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1067dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Security Service Levels [bit mask] (BTM_SetSecurityLevel)
1068ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Encryption should not be used without authentication
1069dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
10709ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Nothing required */
1071911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_NONE 0x0000
10729ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Inbound call requires authorization */
1073911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_IN_AUTHORIZE 0x0001
10749ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Inbound call requires authentication */
1075911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_IN_AUTHENTICATE 0x0002
10769ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Inbound call requires encryption */
1077911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_IN_ENCRYPT 0x0004
10789ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Outbound call requires authorization */
1079911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_OUT_AUTHORIZE 0x0008
10809ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Outbound call requires authentication */
1081911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_OUT_AUTHENTICATE 0x0010
10829ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Outbound call requires encryption */
1083911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_OUT_ENCRYPT 0x0020
10849ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Secure Connections Only Mode */
1085911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_MODE4_LEVEL4 0x0040
10869ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Need to switch connection to be master */
1087911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_FORCE_MASTER 0x0100
10889ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Try to switch connection to be master */
1089911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_ATTEMPT_MASTER 0x0200
10909ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Need to switch connection to be master */
1091911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_FORCE_SLAVE 0x0400
10929ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Try to switch connection to be slave */
1093911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_ATTEMPT_SLAVE 0x0800
10949ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* inbound Do man in the middle protection */
1095911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_IN_MITM 0x1000
10969ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* outbound Do man in the middle protection */
1097911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_OUT_MITM 0x2000
10989ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* enforce a minimum of 16 digit for sec mode 2 */
10999ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson#define BTM_SEC_IN_MIN_16_DIGIT_PIN 0x4000
1100dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1101dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Security Flags [bit mask] (BTM_GetSecurityFlags)
1102dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1103911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_FLAG_AUTHORIZED 0x01
1104911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_FLAG_AUTHENTICATED 0x02
1105911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_FLAG_ENCRYPTED 0x04
1106911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_FLAG_LKEY_KNOWN 0x10
1107911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_FLAG_LKEY_AUTHED 0x20
1108dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1109dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* PIN types */
1110911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_PIN_TYPE_VARIABLE HCI_PIN_TYPE_VARIABLE
1111911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_PIN_TYPE_FIXED HCI_PIN_TYPE_FIXED
1112dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1113dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Link Key types used to generate the new link key.
1114ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * returned in link key notification callback function
1115dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1116911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LKEY_TYPE_COMBINATION HCI_LKEY_TYPE_COMBINATION
1117911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LKEY_TYPE_LOCAL_UNIT HCI_LKEY_TYPE_LOCAL_UNIT
1118911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LKEY_TYPE_REMOTE_UNIT HCI_LKEY_TYPE_REMOTE_UNIT
1119911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LKEY_TYPE_DEBUG_COMB HCI_LKEY_TYPE_DEBUG_COMB
1120911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LKEY_TYPE_UNAUTH_COMB HCI_LKEY_TYPE_UNAUTH_COMB
1121911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LKEY_TYPE_AUTH_COMB HCI_LKEY_TYPE_AUTH_COMB
1122911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LKEY_TYPE_CHANGED_COMB HCI_LKEY_TYPE_CHANGED_COMB
1123dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1124dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_LKEY_TYPE_UNAUTH_COMB_P_256 HCI_LKEY_TYPE_UNAUTH_COMB_P_256
1125911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LKEY_TYPE_AUTH_COMB_P_256 HCI_LKEY_TYPE_AUTH_COMB_P_256
1126dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
11279ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* "easy" requirements for LK derived from LTK */
11289ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson#define BTM_LTK_DERIVED_LKEY_OFFSET 0x20
1129911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LKEY_TYPE_IGNORE               \
1130911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  0xff /* used when event is response from \
1131911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson          hci return link keys request */
1132dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1133dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_LINK_KEY_TYPE;
1134dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1135dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Protocol level security (BTM_SetSecurityLevel) */
1136911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_PROTO_L2CAP 0
1137911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_PROTO_SDP 1
1138911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_PROTO_TCS 2
1139911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_PROTO_RFCOMM 3
1140911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_PROTO_OBEX 4
1141911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_PROTO_BNEP 5
1142911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_PROTO_HID 6 /* HID      */
1143911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_PROTO_AVDT 7
1144911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_PROTO_MCA 8
1145dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1146dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Determine the number of uint32_t's necessary for security services */
1147911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_ARRAY_BITS 32 /* Number of bits in each array element */
1148911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_ARRAY_SIZE                         \
1149911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (((uint32_t)BTM_SEC_MAX_SERVICES / BTM_SEC_ARRAY_BITS) + \
1150911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson   (((uint32_t)BTM_SEC_MAX_SERVICES % BTM_SEC_ARRAY_BITS) ? 1 : 0))
1151dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1152dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Security service definitions (BTM_SetSecurityLevel)
1153ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Used for Authorization APIs
1154dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1155911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_SDP_SERVER 0
1156911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_SERIAL_PORT 1
1157911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_LAN_ACCESS 2
1158911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_DUN 3
1159911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_IRMC_SYNC 4
1160911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_IRMC_SYNC_CMD 5
1161911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_OBEX 6
1162911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_OBEX_FTP 7
1163911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_HEADSET 8
1164911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_CORDLESS 9
1165911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_INTERCOM 10
1166911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_FAX 11
1167911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_HEADSET_AG 12
1168911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_PNP_INFO 13
1169911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_GEN_NET 14
1170911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_GEN_FILE 15
1171911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_GEN_AUDIO 16
1172911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_GEN_TEL 17
1173911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_CTP_DATA 18
1174911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_HCRP_CTRL 19
1175911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_HCRP_DATA 20
1176911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_HCRP_NOTIF 21
1177911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_BPP_JOB 22
1178911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_BPP_STATUS 23
1179911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_BPP_REF 24
1180911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_BNEP_PANU 25
1181911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_BNEP_GN 26
1182911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_BNEP_NAP 27
1183911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_HF_HANDSFREE 28
1184911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_AG_HANDSFREE 29
1185dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_SEC_SERVICE_TE_PHONE_ACCESS 30
1186dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_SEC_SERVICE_ME_PHONE_ACCESS 31
1187dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1188911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_HIDH_SEC_CTRL 32
1189dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_SEC_SERVICE_HIDH_NOSEC_CTRL 33
1190911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_HIDH_INTR 34
1191911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_BIP 35
1192911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_BIP_REF 36
1193911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_AVDTP 37
1194911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_AVDTP_NOSEC 38
1195911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_AVCTP 39
1196911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_SAP 40
1197911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_PBAP 41
1198911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_RFC_MUX 42
1199911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_AVCTP_BROWSE 43
1200911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_MAP 44
1201911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_MAP_NOTIF 45
1202911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_MCAP_CTRL 46
1203911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_MCAP_DATA 47
1204911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_HDP_SNK 48
1205911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_HDP_SRC 49
1206911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SERVICE_ATT 50
12078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#define BTM_SEC_SERVICE_HIDD_SEC_CTRL 51
12088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#define BTM_SEC_SERVICE_HIDD_NOSEC_CTRL 52
12098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#define BTM_SEC_SERVICE_HIDD_INTR 53
1210dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1211dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Update these as services are added */
12128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#define BTM_SEC_SERVICE_FIRST_EMPTY 54
1213dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1214dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#ifndef BTM_SEC_MAX_SERVICES
1215911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_MAX_SERVICES 75
1216dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#endif
1217dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1218ee96a3c60fca590d38025925c072d264e06493c4Myles Watson/*******************************************************************************
12199ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Security Services MACROS handle array of uint32_t bits for more than 32
12209ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * trusted services
1221ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
1222dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* MACRO to set the security service bit mask in a bit stream */
1223911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_SET_SERVICE(p, service)                              \
1224911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (((uint32_t*)(p))[(((uint32_t)(service)) / BTM_SEC_ARRAY_BITS)] |= \
1225911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson   ((uint32_t)1 << (((uint32_t)(service)) % BTM_SEC_ARRAY_BITS)))
1226dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1227dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* MACRO to clear the security service bit mask in a bit stream */
1228911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_CLR_SERVICE(p, service)                              \
1229911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (((uint32_t*)(p))[(((uint32_t)(service)) / BTM_SEC_ARRAY_BITS)] &= \
1230911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson   ~((uint32_t)1 << (((uint32_t)(service)) % BTM_SEC_ARRAY_BITS)))
1231dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
12329ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* MACRO to check the security service bit mask in a bit stream (Returns true or
12339ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * false) */
1234911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_IS_SERVICE_TRUSTED(p, service)                                 \
1235911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (((((uint32_t*)(p))[(((uint32_t)(service)) / BTM_SEC_ARRAY_BITS)]) &         \
1236911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    (uint32_t)(((uint32_t)1 << (((uint32_t)(service)) % BTM_SEC_ARRAY_BITS)))) \
1237911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson       ? true                                                                  \
1238911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson       : false)
1239dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1240dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* MACRO to copy two trusted device bitmask */
1241911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_COPY_TRUSTED_DEVICE(p_src, p_dst)              \
1242911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  {                                                            \
1243911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    uint32_t trst;                                             \
1244911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    for (trst = 0; trst < BTM_SEC_SERVICE_ARRAY_SIZE; trst++)  \
1245911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      ((uint32_t*)(p_dst))[trst] = ((uint32_t*)(p_src))[trst]; \
1246911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
1247dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1248dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* MACRO to clear two trusted device bitmask */
1249911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_CLR_TRUSTED_DEVICE(p_dst)                     \
1250911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  {                                                           \
1251911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    uint32_t trst;                                            \
1252911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    for (trst = 0; trst < BTM_SEC_SERVICE_ARRAY_SIZE; trst++) \
1253911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      ((uint32_t*)(p_dst))[trst] = 0;                         \
1254911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
1255dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1256dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Following bits can be provided by host in the trusted_mask array */
1257dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* 0..31 bits of mask[0] (Least Significant Word) */
1258911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_SDP_SERVER (1 << BTM_SEC_SERVICE_SDP_SERVER)
1259911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_SERIAL_PORT (1 << BTM_SEC_SERVICE_SERIAL_PORT)
1260911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_LAN_ACCESS (1 << BTM_SEC_SERVICE_LAN_ACCESS)
1261911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_DUN (1 << BTM_SEC_SERVICE_DUN)
1262911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_IRMC_SYNC (1 << BTM_SEC_SERVICE_IRMC_SYNC)
1263911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_IRMC_SYNC_CMD (1 << BTM_SEC_SERVICE_IRMC_SYNC_CMD)
1264911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_OBEX (1 << BTM_SEC_SERVICE_OBEX)
1265911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_OBEX_FTP (1 << BTM_SEC_SERVICE_OBEX_FTP)
1266911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HEADSET (1 << BTM_SEC_SERVICE_HEADSET)
1267911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_CORDLESS (1 << BTM_SEC_SERVICE_CORDLESS)
1268911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_INTERCOM (1 << BTM_SEC_SERVICE_INTERCOM)
1269911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_FAX (1 << BTM_SEC_SERVICE_FAX)
1270911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HEADSET_AG (1 << BTM_SEC_SERVICE_HEADSET_AG)
1271911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_PNP_INFO (1 << BTM_SEC_SERVICE_PNP_INFO)
1272911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_GEN_NET (1 << BTM_SEC_SERVICE_GEN_NET)
1273911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_GEN_FILE (1 << BTM_SEC_SERVICE_GEN_FILE)
1274911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_GEN_AUDIO (1 << BTM_SEC_SERVICE_GEN_AUDIO)
1275911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_GEN_TEL (1 << BTM_SEC_SERVICE_GEN_TEL)
1276911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_CTP_DATA (1 << BTM_SEC_SERVICE_CTP_DATA)
1277911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HCRP_CTRL (1 << BTM_SEC_SERVICE_HCRP_CTRL)
1278911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HCRP_DATA (1 << BTM_SEC_SERVICE_HCRP_DATA)
1279911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HCRP_NOTIF (1 << BTM_SEC_SERVICE_HCRP_NOTIF)
1280911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_BPP_JOB (1 << BTM_SEC_SERVICE_JOB)
1281911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_BPP_STATUS (1 << BTM_SEC_SERVICE_STATUS)
1282911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_BPP_REF (1 << BTM_SEC_SERVICE_REF)
1283911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_BNEP_PANU (1 << BTM_SEC_SERVICE_BNEP_PANU)
1284911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_BNEP_GN (1 << BTM_SEC_SERVICE_BNEP_GN)
1285911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_BNEP_NAP (1 << BTM_SEC_SERVICE_BNEP_NAP)
1286911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HFP_HF (1 << BTM_SEC_SERVICE_HF_HANDSFREE)
1287911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HFP_AG (1 << BTM_SEC_SERVICE_AG_HANDSFREE)
1288911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_TE_PHONE_ACCESS (1 << BTM_SEC_SERVICE_TE_PHONE_ACCESS)
1289911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_ME_PHONE_ACCESS (1 << BTM_SEC_SERVICE_ME_PHONE_ACCESS)
1290dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1291dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* 0..31 bits of mask[1] (Most Significant Word) */
1292911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HIDH_CTRL (1 << (BTM_SEC_SERVICE_HIDH_SEC_CTRL - 32))
1293911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HIDH_NOSEC_CTRL \
1294911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  (1 << (BTM_SEC_SERVICE_HIDH_NOSEC_CTRL - 32))
1295911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HIDH_INTR (1 << (BTM_SEC_SERVICE_HIDH_INTR - 32))
1296911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_BIP (1 << (BTM_SEC_SERVICE_BIP - 32))
1297911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_BIP_REF (1 << (BTM_SEC_SERVICE_BIP_REF - 32))
1298911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_AVDTP (1 << (BTM_SEC_SERVICE_AVDTP - 32))
1299911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_AVDTP_NOSEC (1 << (BTM_SEC_SERVICE_AVDTP_NOSEC - 32))
1300911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_AVCTP (1 << (BTM_SEC_SERVICE_AVCTP - 32))
1301911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_SAP (1 << (BTM_SEC_SERVICE_SAP - 32))
1302911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_PBAP (1 << (BTM_SEC_SERVICE_PBAP - 32))
1303911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_RFC_MUX (1 << (BTM_SEC_SERVICE_RFC_MUX - 32))
1304911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_AVCTP_BROWSE (1 << (BTM_SEC_SERVICE_AVCTP_BROWSE - 32))
1305911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_MAP (1 << (BTM_SEC_SERVICE_MAP - 32))
1306911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_MAP_NOTIF (1 << (BTM_SEC_SERVICE_MAP_NOTIF - 32))
1307911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_MCAP_CTRL (1 << (BTM_SEC_SERVICE_MCAP_CTRL - 32))
1308911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_MCAP_DATA (1 << (BTM_SEC_SERVICE_MCAP_DATA - 32))
1309911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HDP_SNK (1 << (BTM_SEC_SERVICE_HDP_SNK - 32))
1310911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_HDP_SRC (1 << (BTM_SEC_SERVICE_HDP_SRC - 32))
1311911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
1312911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_SEC_TRUST_ALL 0xFFFFFFFF /* for each array element */
1313dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1314dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/****************************************
1315ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Security Manager Callback Functions
1316ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************/
1317dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Authorize device for service.  Parameters are
1318ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              BD Address of remote
1319ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              Device Class of remote
1320ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              BD Name of remote
1321ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              Service name
1322ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              Service Id (NULL - unknown service or unused
1323ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *                                 [BTM_SEC_SERVICE_NAME_LEN set to 0])
1324ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              Is originator of the connection
1325ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              Result of the operation
1326dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1327c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowskitypedef uint8_t(tBTM_AUTHORIZE_CALLBACK)(
1328a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski    const RawAddress& bd_addr, DEV_CLASS dev_class, tBTM_BD_NAME bd_name,
1329c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski    uint8_t* service_name, uint8_t service_id, bool is_originator);
1330dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1331dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Get PIN for the connection.  Parameters are
1332ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              BD Address of remote
1333ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              Device Class of remote
1334ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              BD Name of remote
1335ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              Flag indicating the minimum pin code length to be 16 digits
1336dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1337a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef uint8_t(tBTM_PIN_CALLBACK)(const RawAddress& bd_addr,
1338c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski                                   DEV_CLASS dev_class, tBTM_BD_NAME bd_name,
1339c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski                                   bool min_16_digit);
1340dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1341dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* New Link Key for the connection.  Parameters are
1342ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              BD Address of remote
1343ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              Link Key
1344ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              Key Type: Combination, Local Unit, or Remote Unit
1345dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1346a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef uint8_t(tBTM_LINK_KEY_CALLBACK)(const RawAddress& bd_addr,
1347c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski                                        DEV_CLASS dev_class,
1348911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                        tBTM_BD_NAME bd_name, uint8_t* key,
1349dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski                                        uint8_t key_type);
1350dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1351dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Remote Name Resolved.  Parameters are
1352ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              BD Address of remote
1353ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              BD Name of remote
1354dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1355a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef void(tBTM_RMT_NAME_CALLBACK)(const RawAddress& bd_addr, DEV_CLASS dc,
1356911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                     tBTM_BD_NAME bd_name);
1357dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1358dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Authentication complete for the connection.  Parameters are
1359ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              BD Address of remote
1360ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              Device Class of remote
1361ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              BD Name of remote
1362ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
1363dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1364a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef uint8_t(tBTM_AUTH_COMPLETE_CALLBACK)(const RawAddress& bd_addr,
1365911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                             DEV_CLASS dev_class,
1366dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski                                             tBTM_BD_NAME bd_name, int result);
1367dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1368911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonenum {
1369911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_IO_REQ_EVT,    /* received IO_CAPABILITY_REQUEST event */
1370911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_IO_RSP_EVT,    /* received IO_CAPABILITY_RESPONSE event */
1371911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_CFM_REQ_EVT,   /* received USER_CONFIRMATION_REQUEST event */
1372911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_KEY_NOTIF_EVT, /* received USER_PASSKEY_NOTIFY event */
1373911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_KEY_REQ_EVT,   /* received USER_PASSKEY_REQUEST event */
1374911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_KEYPRESS_EVT,  /* received KEYPRESS_NOTIFY event */
1375911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_LOC_OOB_EVT,   /* received result for READ_LOCAL_OOB_DATA command */
1376911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_RMT_OOB_EVT,   /* received REMOTE_OOB_DATA_REQUEST event */
1377911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_COMPLT_EVT,    /* received SIMPLE_PAIRING_COMPLETE event */
1378911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_UPGRADE_EVT /* check if the application wants to upgrade the link key
1379911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                        */
1380dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski};
1381dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_SP_EVT;
1382dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1383911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_IO_CAP_OUT 0    /* DisplayOnly */
1384911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_IO_CAP_IO 1     /* DisplayYesNo */
1385911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_IO_CAP_IN 2     /* KeyboardOnly */
1386911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_IO_CAP_NONE 3   /* NoInputNoOutput */
1387911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_IO_CAP_KBDISP 4 /* Keyboard display */
1388911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_IO_CAP_MAX 5
1389f618f83f094fd0ba1af7cf960077e7edae881e69Jack He#define BTM_IO_CAP_UNKNOWN 0xFF /* Unknown value */
1390dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1391dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_IO_CAP;
1392dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1393dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_MAX_PASSKEY_VAL (999999)
1394dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_MIN_PASSKEY_VAL (0)
1395dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
13969ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* MITM Protection Not Required - Single Profile/non-bonding Numeric comparison
13979ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * with automatic accept allowed */
1398911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_AUTH_SP_NO 0
13999ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* MITM Protection Required - Single Profile/non-bonding. Use IO Capabilities to
14009ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * determine authentication procedure */
1401911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_AUTH_SP_YES 1
14029ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* MITM Protection Not Required - All Profiles/dedicated bonding Numeric
14039ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * comparison with automatic accept allowed */
1404911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_AUTH_AP_NO 2
14059ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* MITM Protection Required - All Profiles/dedicated bonding Use IO Capabilities
14069ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * to determine authentication procedure */
1407911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_AUTH_AP_YES 3
14089ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* MITM Protection Not Required - Single Profiles/general bonding Numeric
14099ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * comparison with automatic accept allowed */
1410911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_AUTH_SPGB_NO 4
14119ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* MITM Protection Required - Single Profiles/general bonding Use IO
14129ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Capabilities to determine authentication procedure */
1413911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_AUTH_SPGB_YES 5
14149ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson
14159ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* this bit is ORed with BTM_AUTH_SP_* when IO exchange for dedicated bonding */
1416911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_AUTH_DD_BOND 2
1417911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_AUTH_GB_BIT 4 /* the genernal bonding bit */
1418911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_AUTH_BONDS 6  /* the general/dedicated bonding bits  */
1419911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_AUTH_YN_BIT 1 /* this is the Yes or No bit  */
1420dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1421dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_BLE_INITIATOR_KEY_SIZE 15
1422dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski#define BTM_BLE_RESPONDER_KEY_SIZE 15
1423911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_MAX_KEY_SIZE 16
1424dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1425dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_AUTH_REQ;
1426dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1427911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonenum { BTM_OOB_NONE, BTM_OOB_PRESENT, BTM_OOB_UNKNOWN };
1428dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_OOB_DATA;
1429dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1430dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* data type for BTM_SP_IO_REQ_EVT */
1431911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1432a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;     /* peer address */
1433911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_IO_CAP io_cap;     /* local IO capabilities */
1434911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_OOB_DATA oob_data; /* OOB data present (locally) for the peer device */
1435911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_AUTH_REQ auth_req; /* Authentication required (for local device) */
1436911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool is_orig;           /* true, if local device initiated the SP process */
1437dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_SP_IO_REQ;
1438dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1439dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* data type for BTM_SP_IO_RSP_EVT */
1440911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1441a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr; /* peer address */
1442911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_IO_CAP io_cap; /* peer IO capabilities */
1443911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_OOB_DATA
1444911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      oob_data; /* OOB data present at peer device for the local device */
1445911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_AUTH_REQ auth_req; /* Authentication required for peer device */
1446dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_SP_IO_RSP;
1447dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1448dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* data type for BTM_SP_CFM_REQ_EVT */
1449911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1450a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;   /* peer address */
1451911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  DEV_CLASS dev_class;  /* peer CoD */
1452911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BD_NAME bd_name; /* peer device name */
1453911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint32_t num_val; /* the numeric value for comparison. If just_works, do not
1454911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                       show this number to UI */
1455911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool just_works;  /* true, if "Just Works" association model */
1456911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_AUTH_REQ loc_auth_req; /* Authentication required for local device */
1457911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_AUTH_REQ rmt_auth_req; /* Authentication required for peer device */
1458911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_IO_CAP loc_io_caps;    /* IO Capabilities of the local device */
1459911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_IO_CAP rmt_io_caps;    /* IO Capabilities of the remot device */
1460dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_SP_CFM_REQ;
1461dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1462dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* data type for BTM_SP_KEY_REQ_EVT */
1463911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1464a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;   /* peer address */
1465911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  DEV_CLASS dev_class;  /* peer CoD */
1466911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BD_NAME bd_name; /* peer device name */
1467dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_SP_KEY_REQ;
1468dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1469dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* data type for BTM_SP_KEY_NOTIF_EVT */
1470911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1471a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;   /* peer address */
1472911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  DEV_CLASS dev_class;  /* peer CoD */
1473911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BD_NAME bd_name; /* peer device name */
1474911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint32_t passkey;     /* passkey */
1475dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_SP_KEY_NOTIF;
1476dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1477911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonenum {
1478911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_KEY_STARTED,     /* 0 - passkey entry started */
1479911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_KEY_ENTERED,     /* 1 - passkey digit entered */
1480911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_KEY_ERASED,      /* 2 - passkey digit erased */
1481911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_KEY_CLEARED,     /* 3 - passkey cleared */
1482911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_KEY_COMPLT,      /* 4 - passkey entry completed */
1483911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_SP_KEY_OUT_OF_RANGE /* 5 - out of range */
1484dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski};
1485dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_SP_KEY_TYPE;
1486dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1487dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* data type for BTM_SP_KEYPRESS_EVT */
1488911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1489a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr; /* peer address */
1490911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_KEY_TYPE notif_type;
1491dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_SP_KEYPRESS;
1492dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1493dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* data type for BTM_SP_LOC_OOB_EVT */
1494911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1495911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_STATUS status; /* */
1496911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET16 c;       /* Simple Pairing Hash C */
1497911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET16 r;       /* Simple Pairing Randomnizer R */
1498dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_SP_LOC_OOB;
1499dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1500dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* data type for BTM_SP_RMT_OOB_EVT */
1501911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1502a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;   /* peer address */
1503911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  DEV_CLASS dev_class;  /* peer CoD */
1504911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BD_NAME bd_name; /* peer device name */
1505dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_SP_RMT_OOB;
1506dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1507dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* data type for BTM_SP_COMPLT_EVT */
1508911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1509a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;   /* peer address */
1510911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  DEV_CLASS dev_class;  /* peer CoD */
1511911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BD_NAME bd_name; /* peer device name */
1512911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_STATUS status;   /* status of the simple pairing process */
1513dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_SP_COMPLT;
1514dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1515dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* data type for BTM_SP_UPGRADE_EVT */
1516911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1517a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr; /* peer address */
1518911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool upgrade;    /* true, to upgrade the link key */
1519dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_SP_UPGRADE;
1520dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1521911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef union {
1522911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_IO_REQ io_req;       /* BTM_SP_IO_REQ_EVT      */
1523911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_IO_RSP io_rsp;       /* BTM_SP_IO_RSP_EVT      */
1524911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_CFM_REQ cfm_req;     /* BTM_SP_CFM_REQ_EVT     */
1525911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_KEY_NOTIF key_notif; /* BTM_SP_KEY_NOTIF_EVT   */
1526911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_KEY_REQ key_req;     /* BTM_SP_KEY_REQ_EVT     */
1527911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_KEYPRESS key_press;  /* BTM_SP_KEYPRESS_EVT    */
1528911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_LOC_OOB loc_oob;     /* BTM_SP_LOC_OOB_EVT     */
1529911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_RMT_OOB rmt_oob;     /* BTM_SP_RMT_OOB_EVT     */
1530911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_COMPLT complt;       /* BTM_SP_COMPLT_EVT      */
1531911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_UPGRADE upgrade;     /* BTM_SP_UPGRADE_EVT      */
1532dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_SP_EVT_DATA;
1533dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1534dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Simple Pairing Events.  Called by the stack when Simple Pairing related
1535ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * events occur.
1536dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1537911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef uint8_t(tBTM_SP_CALLBACK)(tBTM_SP_EVT event, tBTM_SP_EVT_DATA* p_data);
1538dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1539a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef void(tBTM_MKEY_CALLBACK)(const RawAddress& bd_addr, uint8_t status,
1540911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                 uint8_t key_flag);
1541dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
15429ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Encryption enabled/disabled complete: Optionally passed with
15439ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * BTM_SetEncryption.
1544ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Parameters are
1545ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              BD Address of remote
1546ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              optional data passed in by BTM_SetEncryption
1547ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              tBTM_STATUS - result of the operation
1548dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1549a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef void(tBTM_SEC_CBACK)(const RawAddress* bd_addr, tBT_TRANSPORT trasnport,
1550a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski                             void* p_ref_data, tBTM_STATUS result);
1551dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1552dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Bond Cancel complete. Parameters are
1553ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *              Result of the cancel operation
1554ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
1555dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1556911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_BOND_CANCEL_CMPL_CALLBACK)(tBTM_STATUS result);
1557dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
15589ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* LE related event and data structure */
15599ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* received IO_CAPABILITY_REQUEST event */
1560911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_IO_REQ_EVT SMP_IO_CAP_REQ_EVT
15619ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* security request event */
1562911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_SEC_REQUEST_EVT SMP_SEC_REQUEST_EVT
15639ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* received USER_PASSKEY_NOTIFY event */
1564911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_NOTIF_EVT SMP_PASSKEY_NOTIF_EVT
15659ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* received USER_PASSKEY_REQUEST event */
1566911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_REQ_EVT SMP_PASSKEY_REQ_EVT
15679ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* OOB data request event */
1568911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_OOB_REQ_EVT SMP_OOB_REQ_EVT
15699ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Numeric Comparison request event */
1570911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_NC_REQ_EVT SMP_NC_REQ_EVT
15719ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Peer keypress notification recd event */
15729ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson#define BTM_LE_PR_KEYPR_NOT_EVT SMP_PEER_KEYPR_NOT_EVT
15739ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* SC OOB request event (both local and peer OOB data) can be expected in
15749ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * response */
1575911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_SC_OOB_REQ_EVT SMP_SC_OOB_REQ_EVT
1576dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* SC OOB local data set is created (as result of SMP_CrLocScOobData(...)) */
1577911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_SC_LOC_OOB_EVT SMP_SC_LOC_OOB_DATA_UP_EVT
15789ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* SMP over BR keys request event */
1579911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_BR_KEYS_REQ_EVT SMP_BR_KEYS_REQ_EVT
15809ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* SMP complete event */
1581911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_COMPLT_EVT SMP_COMPLT_EVT
1582911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_LAST_FROM_SMP BTM_LE_BR_KEYS_REQ_EVT
15839ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* KEY update event */
1584911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_EVT (BTM_LE_LAST_FROM_SMP + 1)
1585dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_LE_EVT;
1586dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1587911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_NONE 0
15889ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* encryption information of peer device */
1589911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_PENC SMP_SEC_KEY_TYPE_ENC
15909ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* identity key of the peer device */
1591911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_PID SMP_SEC_KEY_TYPE_ID
15929ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* peer SRK */
1593911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_PCSRK SMP_SEC_KEY_TYPE_CSRK
1594911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_PLK SMP_SEC_KEY_TYPE_LK
1595911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_LLK (SMP_SEC_KEY_TYPE_LK << 4)
15969ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* master role security information:div */
1597911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_LENC (SMP_SEC_KEY_TYPE_ENC << 4)
15989ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* master device ID key */
1599911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_LID (SMP_SEC_KEY_TYPE_ID << 4)
16009ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* local CSRK has been deliver to peer */
1601911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KEY_LCSRK (SMP_SEC_KEY_TYPE_CSRK << 4)
1602dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_LE_KEY_TYPE;
1603dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1604911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_AUTH_REQ_NO_BOND SMP_AUTH_NO_BOND /* 0 */
1605911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_AUTH_REQ_BOND SMP_AUTH_GEN_BOND   /* 1 << 0 */
1606911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_AUTH_REQ_MITM SMP_AUTH_YN_BIT     /* 1 << 2 */
1607dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_LE_AUTH_REQ;
1608911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_SC_SUPPORT_BIT SMP_SC_SUPPORT_BIT /* (1 << 3) */
1609911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_KP_SUPPORT_BIT SMP_KP_SUPPORT_BIT /* (1 << 4) */
1610e7f14a682d57811d9df0d64372f222bcc143ec86Jakub Pawlowski#define BTM_LE_H7_SUPPORT_BIT SMP_H7_SUPPORT_BIT /* (1 << 5) */
1611dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1612e7f14a682d57811d9df0d64372f222bcc143ec86Jakub Pawlowski#define BTM_LE_AUTH_REQ_SC_ONLY SMP_AUTH_SC_ENC_ONLY     /* 00101000 */
1613e7f14a682d57811d9df0d64372f222bcc143ec86Jakub Pawlowski#define BTM_LE_AUTH_REQ_SC_BOND SMP_AUTH_SC_GB           /* 00101001 */
1614e7f14a682d57811d9df0d64372f222bcc143ec86Jakub Pawlowski#define BTM_LE_AUTH_REQ_SC_MITM SMP_AUTH_SC_MITM_NB      /* 00101100 */
1615e7f14a682d57811d9df0d64372f222bcc143ec86Jakub Pawlowski#define BTM_LE_AUTH_REQ_SC_MITM_BOND SMP_AUTH_SC_MITM_GB /* 00101101 */
1616e7f14a682d57811d9df0d64372f222bcc143ec86Jakub Pawlowski#define BTM_LE_AUTH_REQ_MASK SMP_AUTH_MASK               /* 0x3D */
1617dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1618dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* LE security level */
1619911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_SEC_NONE SMP_SEC_NONE
1620911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_SEC_UNAUTHENTICATE SMP_SEC_UNAUTHENTICATE /* 1 */
1621911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_LE_SEC_AUTHENTICATED SMP_SEC_AUTHENTICATED   /* 4 */
1622dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_LE_SEC;
1623dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1624911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1625911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /* local IO capabilities */
1626911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_IO_CAP io_cap;
1627911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /* OOB data present (locally) for the peer device */
1628911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t oob_data;
1629911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  /* Authentication request (for local device) containing bonding and MITM
1630911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson   * info */
1631911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_AUTH_REQ auth_req;
1632911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t max_key_size;       /* max encryption key size */
1633911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_KEY_TYPE init_keys; /* keys to be distributed, bit mask */
1634911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_KEY_TYPE resp_keys; /* keys to be distributed, bit mask */
1635dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_LE_IO_REQ;
1636dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1637dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* data type for tBTM_LE_COMPLT */
1638911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1639911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t reason;
1640911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t sec_level;
1641911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool is_pair_cancel;
1642911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool smp_over_br;
1643911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBTM_LE_COMPLT;
1644dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1645dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* BLE encryption keys */
1646911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1647911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET16 ltk;
1648911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET8 rand;
1649911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t ediv;
1650911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t sec_level;
1651911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t key_size;
1652911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBTM_LE_PENC_KEYS;
1653dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1654dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* BLE CSRK keys */
1655911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1656911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint32_t counter;
1657911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET16 csrk;
1658911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t sec_level;
1659911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBTM_LE_PCSRK_KEYS;
1660dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1661dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* BLE Encryption reproduction keys */
1662911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1663911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET16 ltk;
1664911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t div;
1665911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t key_size;
1666911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t sec_level;
1667911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBTM_LE_LENC_KEYS;
1668dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1669dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* BLE SRK keys */
1670911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1671911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint32_t counter;
1672911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t div;
1673911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t sec_level;
1674911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET16 csrk;
1675911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBTM_LE_LCSRK_KEYS;
1676911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
1677911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1678911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET16 irk;
1679911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBLE_ADDR_TYPE addr_type;
1680a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress static_addr;
1681911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBTM_LE_PID_KEYS;
1682911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
1683911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef union {
1684911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_PENC_KEYS penc_key;   /* received peer encryption key */
1685911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_PCSRK_KEYS pcsrk_key; /* received peer device SRK */
1686911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_PID_KEYS pid_key;     /* peer device ID key */
1687911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_LENC_KEYS lenc_key;   /* local encryption reproduction keys
1688911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                 * LTK = = d1(ER,DIV,0) */
1689911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_LCSRK_KEYS lcsrk_key; /* local device CSRK = d1(ER,DIV,1)*/
1690911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBTM_LE_KEY_VALUE;
1691911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
1692911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1693911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_KEY_TYPE key_type;
1694911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_KEY_VALUE* p_key_value;
1695911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBTM_LE_KEY;
1696911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
1697911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef union {
1698911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_IO_REQ io_req; /* BTM_LE_IO_REQ_EVT      */
1699911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint32_t key_notif;    /* BTM_LE_KEY_NOTIF_EVT   */
1700911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                         /* BTM_LE_NC_REQ_EVT */
1701911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                         /* no callback data for
1702911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                          * BTM_LE_KEY_REQ_EVT
1703911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                          * and BTM_LE_OOB_REQ_EVT  */
1704911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_COMPLT complt; /* BTM_LE_COMPLT_EVT      */
1705911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tSMP_OOB_DATA_TYPE req_oob_type;
1706911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_KEY key;
1707dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_LE_EVT_DATA;
1708dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1709dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Simple Pairing Events.  Called by the stack when Simple Pairing related
1710ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * events occur.
1711dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1712a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef uint8_t(tBTM_LE_CALLBACK)(tBTM_LE_EVT event, const RawAddress& bda,
1713911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                  tBTM_LE_EVT_DATA* p_data);
1714dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1715911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_KEY_TYPE_ID 1
1716911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_KEY_TYPE_ER 2
1717911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_BLE_KEY_TYPE_COUNTER 3  // tobe obsolete
1718dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1719911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1720911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET16 ir;
1721911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET16 irk;
1722911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET16 dhk;
1723dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1724911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBTM_BLE_LOCAL_ID_KEYS;
1725dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1726911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef union {
1727911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BLE_LOCAL_ID_KEYS id_keys;
1728911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BT_OCTET16 er;
1729911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBTM_BLE_LOCAL_KEYS;
1730dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1731dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* New LE identity key for local device.
1732dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1733911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_LE_KEY_CALLBACK)(uint8_t key_type,
1734911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                   tBTM_BLE_LOCAL_KEYS* p_key);
1735dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1736dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/***************************
1737ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Security Manager Types
1738ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ***************************/
1739dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Structure that applications use to register with BTM_SecRegister */
1740911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1741911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_AUTHORIZE_CALLBACK* p_authorize_callback;
1742911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_PIN_CALLBACK* p_pin_callback;
1743911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LINK_KEY_CALLBACK* p_link_key_callback;
1744911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_AUTH_COMPLETE_CALLBACK* p_auth_complete_callback;
1745911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_BOND_CANCEL_CMPL_CALLBACK* p_bond_cancel_cmpl_callback;
1746911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_SP_CALLBACK* p_sp_callback;
1747911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_CALLBACK* p_le_callback;
1748911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_LE_KEY_CALLBACK* p_le_key_callback;
1749dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_APPL_INFO;
1750dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1751dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Callback function for when a link supervision timeout event occurs.
1752ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * This asynchronous event is enabled/disabled by calling BTM_RegForLstoEvt().
1753dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski*/
1754a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef void(tBTM_LSTO_CBACK)(const RawAddress& remote_bda, uint16_t timeout);
1755dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1756dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*****************************************************************************
1757ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  POWER MANAGEMENT
1758ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/
1759dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/****************************
1760ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Power Manager Constants
1761ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************/
1762dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* BTM Power manager status codes */
1763911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonenum {
1764911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_STS_ACTIVE = HCI_MODE_ACTIVE,
1765911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_STS_HOLD = HCI_MODE_HOLD,
1766911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_STS_SNIFF = HCI_MODE_SNIFF,
1767911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_STS_PARK = HCI_MODE_PARK,
1768911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_STS_SSR,     /* report the SSR parameters in HCI_SNIFF_SUB_RATE_EVT */
1769911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_STS_PENDING, /* when waiting for status from controller */
1770911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_STS_ERROR    /* when HCI command status returns error */
1771dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski};
1772dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_PM_STATUS;
1773dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1774dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* BTM Power manager modes */
1775911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonenum {
1776911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_MD_ACTIVE = BTM_PM_STS_ACTIVE,
1777911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_MD_HOLD = BTM_PM_STS_HOLD,
1778911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_MD_SNIFF = BTM_PM_STS_SNIFF,
1779911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_MD_PARK = BTM_PM_STS_PARK,
1780911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_PM_MD_FORCE = 0x10 /* OR this to force ACL link to a certain mode */
1781dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski};
1782dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_PM_MODE;
1783dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1784911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_PM_SET_ONLY_ID 0x80
1785dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1786dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* Operation codes */
17879ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* The module wants to set the desired power mode */
1788911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_PM_REG_SET 1
17899ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* The module wants to receive mode change event */
1790911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_PM_REG_NOTIF 2
17919ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* The module does not want to involve with PM anymore */
1792911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_PM_DEREG 4
1793dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1794dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/************************
1795ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Power Manager Types
1796ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ************************/
1797911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1798911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t max;
1799911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t min;
1800911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t attempt;
1801911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t timeout;
1802911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_PM_MODE mode;
1803dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_PM_PWR_MD;
1804dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1805dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/*************************************
1806ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Power Manager Callback Functions
1807ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *************************************/
1808a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef void(tBTM_PM_STATUS_CBACK)(const RawAddress& p_bda,
1809c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski                                   tBTM_PM_STATUS status, uint16_t value,
1810c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski                                   uint8_t hci_status);
1811dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1812dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/************************
1813ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Stored Linkkey Types
1814ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ************************/
1815911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_CB_EVT_DELETE_STORED_LINK_KEYS 4
1816dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1817911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1818911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t event;
1819911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t status;
1820911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t num_keys;
1821dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1822dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_DELETE_STORED_LINK_KEY_COMPLETE;
1823dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1824dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* MIP evnets, callbacks    */
1825911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonenum {
1826911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_MIP_MODE_CHG_EVT,
1827911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_MIP_DISCONNECT_EVT,
1828911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_MIP_PKTS_COMPL_EVT,
1829911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  BTM_MIP_RXDATA_EVT
1830dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski};
1831dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_MIP_EVT;
1832dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1833911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1834911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_MIP_EVT event;
1835a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;
1836911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t mip_id;
1837dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_MIP_MODE_CHANGE;
1838dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1839911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1840911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_MIP_EVT event;
1841911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t mip_id;
1842911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t disc_reason;
1843dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_MIP_CONN_TIMEOUT;
1844dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1845911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_MIP_MAX_RX_LEN 17
1846dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1847911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1848911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_MIP_EVT event;
1849911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t mip_id;
1850911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t rx_len;
1851911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t rx_data[BTM_MIP_MAX_RX_LEN];
1852dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_MIP_RXDATA;
1853dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1854911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1855911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_MIP_EVT event;
1856a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress bd_addr;
1857911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t data[11]; /* data[0] shows Vender-specific device type */
1858dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_MIP_EIR_HANDSHAKE;
1859dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1860911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
1861911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_MIP_EVT event;
1862911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t num_sent; /* Completed packet count at the controller */
1863dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_MIP_PKTS_COMPL;
1864dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1865911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef union {
1866911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_MIP_EVT event;
1867911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_MIP_MODE_CHANGE mod_chg;
1868911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_MIP_CONN_TIMEOUT conn_tmo;
1869911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_MIP_EIR_HANDSHAKE eir;
1870911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_MIP_PKTS_COMPL completed;
1871911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBTM_MIP_RXDATA rxdata;
1872dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski} tBTM_MIP_EVENT_DATA;
1873dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1874dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* MIP event callback function  */
1875911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBTM_MIP_EVENTS_CB)(tBTM_MIP_EVT event, tBTM_MIP_EVENT_DATA data);
1876dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1877dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski/* MIP Device query callback function  */
1878a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef bool(tBTM_MIP_QUERY_CB)(const RawAddress& dev_addr, uint8_t* p_mode,
1879911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                LINK_KEY link_key);
1880dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
18819ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* ACL link on, SCO link ongoing, sniff mode */
1882911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_CONTRL_ACTIVE 1
18839ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Scan state - paging/inquiry/trying to connect*/
1884911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_CONTRL_SCAN 2
18859ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* Idle state - page scan, LE advt, inquiry scan */
1886911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTM_CONTRL_IDLE 3
1887dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1888dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowskitypedef uint8_t tBTM_CONTRL_STATE;
1889dc3c1f2afa2d5f311c3ea42bda432089a7f303a4Jakub Pawlowski
1890911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#endif  // BTM_API_TYPES_H
1891