xref: /btstack/3rd-party/bluedroid/decoder/include/oi_bt_spec.h (revision df25739fc3ea5a0a90f0f5925e6461d653697d2e)
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