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