1*df25739fSMilanka Ringwald /****************************************************************************** 2*df25739fSMilanka Ringwald * 3*df25739fSMilanka Ringwald * Copyright (C) 2014 The Android Open Source Project 4*df25739fSMilanka Ringwald * Copyright 2002 - 2004 Open Interface North America, Inc. All rights reserved. 5*df25739fSMilanka Ringwald * 6*df25739fSMilanka Ringwald * Licensed under the Apache License, Version 2.0 (the "License"); 7*df25739fSMilanka Ringwald * you may not use this file except in compliance with the License. 8*df25739fSMilanka Ringwald * You may obtain a copy of the License at: 9*df25739fSMilanka Ringwald * 10*df25739fSMilanka Ringwald * http://www.apache.org/licenses/LICENSE-2.0 11*df25739fSMilanka Ringwald * 12*df25739fSMilanka Ringwald * Unless required by applicable law or agreed to in writing, software 13*df25739fSMilanka Ringwald * distributed under the License is distributed on an "AS IS" BASIS, 14*df25739fSMilanka Ringwald * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15*df25739fSMilanka Ringwald * See the License for the specific language governing permissions and 16*df25739fSMilanka Ringwald * limitations under the License. 17*df25739fSMilanka Ringwald * 18*df25739fSMilanka Ringwald ******************************************************************************/ 19*df25739fSMilanka Ringwald #ifndef _OI_BT_SPEC_H 20*df25739fSMilanka Ringwald #define _OI_BT_SPEC_H 21*df25739fSMilanka Ringwald /** 22*df25739fSMilanka Ringwald * @file 23*df25739fSMilanka Ringwald * 24*df25739fSMilanka Ringwald * This file contains common definitions from the Bluetooth specification. 25*df25739fSMilanka Ringwald * 26*df25739fSMilanka Ringwald */ 27*df25739fSMilanka Ringwald 28*df25739fSMilanka Ringwald /********************************************************************************** 29*df25739fSMilanka Ringwald $Revision: #1 $ 30*df25739fSMilanka Ringwald ***********************************************************************************/ 31*df25739fSMilanka Ringwald 32*df25739fSMilanka Ringwald #include "oi_stddefs.h" 33*df25739fSMilanka Ringwald 34*df25739fSMilanka Ringwald /** \addtogroup Misc Miscellaneous APIs */ 35*df25739fSMilanka Ringwald /**@{*/ 36*df25739fSMilanka Ringwald 37*df25739fSMilanka Ringwald #ifdef __cplusplus 38*df25739fSMilanka Ringwald extern "C" { 39*df25739fSMilanka Ringwald #endif 40*df25739fSMilanka Ringwald 41*df25739fSMilanka Ringwald /** The maximum number of active slaves in a piconet. */ 42*df25739fSMilanka Ringwald #define OI_BT_MAX_ACTIVE_SLAVES 7 43*df25739fSMilanka Ringwald 44*df25739fSMilanka Ringwald /** the number of bytes in a Bluetooth device address (BD_ADDR) */ 45*df25739fSMilanka Ringwald #define OI_BD_ADDR_BYTE_SIZE 6 46*df25739fSMilanka Ringwald 47*df25739fSMilanka Ringwald /** 48*df25739fSMilanka Ringwald * 48-bit Bluetooth device address 49*df25739fSMilanka Ringwald * 50*df25739fSMilanka Ringwald * Because 48-bit integers may not be supported on all platforms, the 51*df25739fSMilanka Ringwald * address is defined as an array of bytes. This array is big-endian, 52*df25739fSMilanka Ringwald * meaning that 53*df25739fSMilanka Ringwald * - array[0] contains bits 47-40, 54*df25739fSMilanka Ringwald * - array[1] contains bits 39-32, 55*df25739fSMilanka Ringwald * - array[2] contains bits 31-24, 56*df25739fSMilanka Ringwald * - array[3] contains bits 23-16, 57*df25739fSMilanka Ringwald * - array[4] contains bits 15-8, and 58*df25739fSMilanka Ringwald * - array[5] contains bits 7-0. 59*df25739fSMilanka Ringwald */ 60*df25739fSMilanka Ringwald typedef struct { 61*df25739fSMilanka Ringwald OI_UINT8 addr[OI_BD_ADDR_BYTE_SIZE] ; /**< Bluetooth device address represented as an array of 8-bit values */ 62*df25739fSMilanka Ringwald } OI_BD_ADDR ; 63*df25739fSMilanka Ringwald 64*df25739fSMilanka Ringwald /** 65*df25739fSMilanka Ringwald * @name Data types for working with UUIDs 66*df25739fSMilanka Ringwald * UUIDs are 16 bytes (128 bits). 67*df25739fSMilanka Ringwald * 68*df25739fSMilanka Ringwald * To avoid having to pass around 128-bit values all the time, 32-bit and 16-bit 69*df25739fSMilanka Ringwald * UUIDs are defined, along with a mapping from the shorter versions to the full 70*df25739fSMilanka Ringwald * version. 71*df25739fSMilanka Ringwald * 72*df25739fSMilanka Ringwald * @{ 73*df25739fSMilanka Ringwald */ 74*df25739fSMilanka Ringwald 75*df25739fSMilanka Ringwald /** 76*df25739fSMilanka Ringwald * 16-bit representation of a 128-bit UUID 77*df25739fSMilanka Ringwald */ 78*df25739fSMilanka Ringwald typedef OI_UINT16 OI_UUID16; 79*df25739fSMilanka Ringwald 80*df25739fSMilanka Ringwald /** 81*df25739fSMilanka Ringwald * 32-bit representation of a 128-bit UUID 82*df25739fSMilanka Ringwald */ 83*df25739fSMilanka Ringwald typedef OI_UINT32 OI_UUID32; 84*df25739fSMilanka Ringwald 85*df25739fSMilanka Ringwald /** 86*df25739fSMilanka Ringwald * number of bytes in a 128 bit UUID 87*df25739fSMilanka Ringwald */ 88*df25739fSMilanka Ringwald #define OI_BT_UUID128_SIZE 16 89*df25739fSMilanka Ringwald 90*df25739fSMilanka Ringwald /** 91*df25739fSMilanka Ringwald * number of bytes in IPv6 style addresses 92*df25739fSMilanka Ringwald */ 93*df25739fSMilanka Ringwald #define OI_BT_IPV6ADDR_SIZE 16 94*df25739fSMilanka Ringwald 95*df25739fSMilanka Ringwald /** 96*df25739fSMilanka Ringwald * type definition for a 128-bit UUID 97*df25739fSMilanka Ringwald * 98*df25739fSMilanka Ringwald * To simplify conversion between 128-bit UUIDs and 16-bit and 32-bit UUIDs, 99*df25739fSMilanka Ringwald * the most significant 32 bits are stored with the same endian-ness as is 100*df25739fSMilanka Ringwald * native on the target (local) device. The remainder of the 128-bit UUID is 101*df25739fSMilanka Ringwald * stored as bytes in big-endian order. 102*df25739fSMilanka Ringwald */ 103*df25739fSMilanka Ringwald typedef struct { 104*df25739fSMilanka Ringwald OI_UINT32 ms32bits; /**< most significant 32 bits of 128-bit UUID */ 105*df25739fSMilanka Ringwald OI_UINT8 base[OI_BT_UUID128_SIZE - sizeof(OI_UINT32)]; /**< remainder of 128-bit UUID, array of 8-bit values */ 106*df25739fSMilanka Ringwald } OI_UUID128; 107*df25739fSMilanka Ringwald 108*df25739fSMilanka Ringwald /** @} */ 109*df25739fSMilanka Ringwald 110*df25739fSMilanka Ringwald /** number of bytes in a link key */ 111*df25739fSMilanka Ringwald #define OI_BT_LINK_KEY_SIZE 16 112*df25739fSMilanka Ringwald 113*df25739fSMilanka Ringwald /** 114*df25739fSMilanka Ringwald * type definition for a baseband link key 115*df25739fSMilanka Ringwald * 116*df25739fSMilanka Ringwald * Because 128-bit integers may not be supported on all platforms, we define 117*df25739fSMilanka Ringwald * link keys as an array of bytes. Unlike the Bluetooth device address, 118*df25739fSMilanka Ringwald * the link key is stored in little-endian order, meaning that 119*df25739fSMilanka Ringwald * - array[0] contains bits 0 - 7, 120*df25739fSMilanka Ringwald * - array[1] contains bits 8 - 15, 121*df25739fSMilanka Ringwald * - array[2] contains bits 16 - 23, 122*df25739fSMilanka Ringwald * - array[3] contains bits 24 - 31, 123*df25739fSMilanka Ringwald * - array[4] contains bits 32 - 39, 124*df25739fSMilanka Ringwald * - array[5] contains bits 40 - 47, 125*df25739fSMilanka Ringwald * - array[6] contains bits 48 - 55, 126*df25739fSMilanka Ringwald * - array[7] contains bits 56 - 63, 127*df25739fSMilanka Ringwald * - array[8] contains bits 64 - 71, 128*df25739fSMilanka Ringwald * - array[9] contains bits 72 - 79, 129*df25739fSMilanka Ringwald * - array[10] contains bits 80 - 87, 130*df25739fSMilanka Ringwald * - array[11] contains bits 88 - 95, 131*df25739fSMilanka Ringwald * - array[12] contains bits 96 - 103, 132*df25739fSMilanka Ringwald * - array[13] contains bits 104- 111, 133*df25739fSMilanka Ringwald * - array[14] contains bits 112- 119, and 134*df25739fSMilanka Ringwald * - array[15] contains bits 120- 127. 135*df25739fSMilanka Ringwald */ 136*df25739fSMilanka Ringwald typedef struct { 137*df25739fSMilanka Ringwald OI_UINT8 key[OI_BT_LINK_KEY_SIZE] ; /**< link key represented as an array of 8-bit values */ 138*df25739fSMilanka Ringwald } OI_LINK_KEY ; 139*df25739fSMilanka Ringwald 140*df25739fSMilanka Ringwald 141*df25739fSMilanka Ringwald /** Out-of-band data size - C and R values are 16-bytes each */ 142*df25739fSMilanka Ringwald #define OI_BT_OOB_NUM_BYTES 16 143*df25739fSMilanka Ringwald 144*df25739fSMilanka Ringwald typedef struct { 145*df25739fSMilanka Ringwald OI_UINT8 value[OI_BT_OOB_NUM_BYTES] ; /**< same struct used for C and R values */ 146*df25739fSMilanka Ringwald } OI_OOB_DATA ; 147*df25739fSMilanka Ringwald 148*df25739fSMilanka Ringwald 149*df25739fSMilanka Ringwald /** 150*df25739fSMilanka Ringwald * link key types 151*df25739fSMilanka Ringwald */ 152*df25739fSMilanka Ringwald typedef enum { 153*df25739fSMilanka Ringwald OI_LINK_KEY_TYPE_COMBO = 0, /**< combination key */ 154*df25739fSMilanka Ringwald OI_LINK_KEY_TYPE_LOCAL_UNIT = 1, /**< local unit key */ 155*df25739fSMilanka Ringwald OI_LINK_KEY_TYPE_REMOTE_UNIT = 2, /**< remote unit key */ 156*df25739fSMilanka Ringwald OI_LINK_KEY_TYPE_DEBUG_COMBO = 3, /**< debug combination key */ 157*df25739fSMilanka Ringwald OI_LINK_KEY_TYPE_UNAUTHENTICATED = 4, /**< Unauthenticated */ 158*df25739fSMilanka Ringwald OI_LINK_KEY_TYPE_AUTHENTICATED = 5, /**< Authenticated */ 159*df25739fSMilanka Ringwald OI_LINK_KEY_TYPE_CHANGED_COMBO = 6 /**< Changed */ 160*df25739fSMilanka Ringwald 161*df25739fSMilanka Ringwald } OI_BT_LINK_KEY_TYPE ; 162*df25739fSMilanka Ringwald 163*df25739fSMilanka Ringwald 164*df25739fSMilanka Ringwald /** amount of space allocated for a PIN (personal indentification number) in bytes */ 165*df25739fSMilanka Ringwald #define OI_BT_PIN_CODE_SIZE 16 166*df25739fSMilanka Ringwald 167*df25739fSMilanka Ringwald /** data type for a PIN (PINs are treated as strings, so endianness does not apply.) */ 168*df25739fSMilanka Ringwald typedef struct { 169*df25739fSMilanka Ringwald OI_UINT8 pin[OI_BT_PIN_CODE_SIZE] ; /**< PIN represented as an array of 8-bit values */ 170*df25739fSMilanka Ringwald } OI_PIN_CODE ; 171*df25739fSMilanka Ringwald 172*df25739fSMilanka Ringwald /** maximum number of SCO connections per device, which is 3 as of version 2.0+EDR 173*df25739fSMilanka Ringwald of the Bluetooth specification (see sec 4.3 of vol 2 part B) */ 174*df25739fSMilanka Ringwald #define OI_BT_MAX_SCO_CONNECTIONS 3 175*df25739fSMilanka Ringwald 176*df25739fSMilanka Ringwald /** data type for clock offset */ 177*df25739fSMilanka Ringwald typedef OI_UINT16 OI_BT_CLOCK_OFFSET ; 178*df25739fSMilanka Ringwald 179*df25739fSMilanka Ringwald /** data type for a LM handle */ 180*df25739fSMilanka Ringwald typedef OI_UINT16 OI_HCI_LM_HANDLE; 181*df25739fSMilanka Ringwald 182*df25739fSMilanka Ringwald /** opaque data type for a SCO or ACL connection handle */ 183*df25739fSMilanka Ringwald typedef struct _OI_HCI_CONNECTION *OI_HCI_CONNECTION_HANDLE; 184*df25739fSMilanka Ringwald 185*df25739fSMilanka Ringwald /** data type for HCI Error Code, as defined in oi_hcispec.h */ 186*df25739fSMilanka Ringwald typedef OI_UINT8 OI_HCI_ERROR_CODE ; 187*df25739fSMilanka Ringwald 188*df25739fSMilanka Ringwald /** 189*df25739fSMilanka Ringwald * The Bluetooth device type is indicated by a 24-bit bitfield, represented as a 190*df25739fSMilanka Ringwald * 32-bit number in the stack. The bit layout and values for device class are specified 191*df25739fSMilanka Ringwald * in the file oi_bt_assigned_nos.h and in the Bluetooth "Assigned Numbers" specification 192*df25739fSMilanka Ringwald * at http://www.bluetooth.org/assigned-numbers/. 193*df25739fSMilanka Ringwald */ 194*df25739fSMilanka Ringwald typedef OI_UINT32 OI_BT_DEVICE_CLASS ; 195*df25739fSMilanka Ringwald 196*df25739fSMilanka Ringwald #define OI_BT_DEV_CLASS_FORMAT_MASK 0x000003 /**< Bits 0-1 contain format type. */ 197*df25739fSMilanka Ringwald #define OI_BT_DEV_CLASS_MINOR_DEVICE_MASK 0x0000FC /**< Bits 2-7 contain minor device class value. */ 198*df25739fSMilanka Ringwald #define OI_BT_DEV_CLASS_MAJOR_DEVICE_MASK 0x001F00 /**< Bits 8-12 contain major device class value. */ 199*df25739fSMilanka Ringwald #define OI_BT_DEV_CLASS_MAJOR_SERVICE_MASK 0xFFE000 /**< Bits 13-23 contain major service class value. */ 200*df25739fSMilanka Ringwald 201*df25739fSMilanka Ringwald /** There is currently only one device class format defined, type 00. */ 202*df25739fSMilanka Ringwald #define OI_BT_DEV_CLASS_FORMAT_TYPE 00 203*df25739fSMilanka Ringwald 204*df25739fSMilanka Ringwald /** Bit 13 in device class indicates limited discoverability mode (GAP v2.0+EDR, section 4.1.2.2) */ 205*df25739fSMilanka Ringwald #define OI_BT_DEV_CLASS_LIMITED_DISCO_BIT BIT13 206*df25739fSMilanka Ringwald 207*df25739fSMilanka Ringwald /** macro to test validity of the Device Class Format */ 208*df25739fSMilanka Ringwald #define OI_BT_VALID_DEVICE_CLASS_FORMAT(class) (OI_BT_DEV_CLASS_FORMAT_TYPE == ((class) & OI_BT_DEV_CLASS_FORMAT_MASK)) 209*df25739fSMilanka Ringwald 210*df25739fSMilanka Ringwald /** the time between baseband clock ticks, currently 625 microseconds (one slot) */ 211*df25739fSMilanka Ringwald #define OI_BT_TICK 625 212*df25739fSMilanka Ringwald /** some macros to convert to/from baseband clock ticks - use no floating point! */ 213*df25739fSMilanka Ringwald #define OI_SECONDS_TO_BT_TICKS(secs) ((secs)*1600) 214*df25739fSMilanka Ringwald #define OI_BT_TICKS_TO_SECONDS(ticks) ((ticks)/1600) 215*df25739fSMilanka Ringwald #define OI_MSECS_TO_BT_TICKS(msecs) (((msecs)*8)/5) 216*df25739fSMilanka Ringwald #define OI_BT_TICKS_TO_MSECS(ticks) (((ticks)*5)/8) 217*df25739fSMilanka Ringwald 218*df25739fSMilanka Ringwald /** EIR byte order */ 219*df25739fSMilanka Ringwald #define OI_EIR_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER 220*df25739fSMilanka Ringwald 221*df25739fSMilanka Ringwald 222*df25739fSMilanka Ringwald #ifdef __cplusplus 223*df25739fSMilanka Ringwald } 224*df25739fSMilanka Ringwald #endif 225*df25739fSMilanka Ringwald 226*df25739fSMilanka Ringwald /**@}*/ 227*df25739fSMilanka Ringwald 228*df25739fSMilanka Ringwald /*****************************************************************************/ 229*df25739fSMilanka Ringwald #endif /* _OI_BT_SPEC_H */ 230