1 /*
2
3 There are two basic types of physical links that can be established
4 between a master and a slave:
5
6 Synchronous Connection Oriented ( SCO )
7 Asynchronous Connection-Less ( ACL )
8
9 An SCO link provides a symmetric link between the master and the slave,
10 ***********
11 with regular periodic exchange of data in the form of reserved slots.
12 Thus, the SCO link provides a circuit-switched connection
13 where data are regularly exchanged,
14 and as such it is intended for use with time-bounded information as audio.
15
16 A master can support up to three SCO links to the same or to different slaves.
17 A slave can support up to three SCO links from the same master.
18
19 Audio - Audio data is carried via SCO (Synchronous Connection Oriented) channels
20
21 An ACI link is a point-to-multipoint link between the master
22 ***********
23 and all the slaves on the piconet. It can use all of the remaining slots
24 on the channel not used for SCO links.
25 The ACL link provides a packet-switched connection
26 where data are exchanged sporadically,
27 as they become available from higher layers of the stack.
28
29 The traffic over the ACL link is completely scheduled by the master.
30
31 Each Bluetooth device has a 48 bit IEEE MAC address that
32 is used for the derivation of the access code.
33
34 The form of a MAC address - Copyright Spill & Bittau
35 NAP[15:0] : UAP[7:0] : LAP[23:0]
36 The NAP is only two bytes long and the First byte is generally zero
37
38 All packets have the same format, starting with an access code,
39 followed by a packet header and ending with the user payload
40
41 Access Code Header Payload
42 68 or 72 bits 54 bits 0 - 2745 bits
43
44 The access code is used to address the packet to a specific device.
45 The header contains all the control information associated with the packet and the link.
46 The payload contains the actual message information.
47
48
49 An HCI packet consisting of an HCI header and HCI data
50 shall be contained in one USB Transfer.
51
52 A USB transfer is defined by the USB specification as
53 one or more USB transactions that contain the data from one IO request
54
55 For example,
56 an ACL data packet containing 256 bytes (both HCI header and HCI data)
57 would be sent over the bulk endpoint in one IO request
58
59 That IO request will require four 64-byte full speed USB Transactions or
60 a single 256-byte Highspeed USB Transaction, and forms a Transfer
61
62 If the Maximum Packet Size for the endpoint on which the transfer is sent
63 is 64 bytes, then that IO request will require four 64-byte USB transactions.
64
65 USB Primary firmware interface and endpoint settings
66
67 Interface Alternate Endpoint Endpoint PacketSize
68 Number Setting Address Type
69 HCI Commands N/A N/A 0x00 Control 8/64
70 HCI Events 0 0 0x81 Interrupt<in> 16
71 ACL/AMP Data 0 0 0x82 Bulk<in> 64
72 ACL/AMP Data 0 0 0x02 Bulk<out> 64
73
74 *************** CONTROL ENDPOINT EXPECTATIONS **********************************
75
76 Endpoint 0 is used to configure and control the USB device.
77 Endpoint 0 will also be used to allow the host to
78 send HCI-specific commands to the host controller.
79
80 All HCI Control Packets delivered to Endpoint 0 are addressed
81 in the Setup Data structure
82
83 The bmRequestType can be used to select the Device or the Interface.
84 If Interface is selected, the wIndex parameter
85 must select the Index for the targeted Bluetooth controller
86
87 For a single function Primary Controller,
88 the Host should address HCI command packets to the Device.
89 HCI command packets should be sent with the following parameters:
90
91 *** HCI command packet addressing for single-function Primary controllers :
92
93 bmRequestType 0x20 : Host-to-device class request, device as target
94 bRequest 0x00
95 wValue 0x00
96 wIndex 0x00
97
98 Note: For historical reasons, if the Primary Controller firmware receives a
99 packet over this endpoint, it should treat the packet as an HCI command
100 packet regardless of the value of bRequest, wValue and wIndex.
101 Some Host devices set bRequest to 0xE0.
102
103 *** Primary Controller Function in a Composite Device
104
105 bmRequestType 0x21 : Host-to-interface class request, interface as target
106 bRequest 0x00
107 wValue 0x00
108 wIndex IF# : This is the actual Interface # within the composite device.
109
110 If the Host system driver addresses USB requests containing HCI command packets
111 to the Device instead of to the Interface, the device implementation shall
112 recognize these HCI command packets and correctly route them to
113 the Primary Controller function, to ensure correct operation of
114 the Primary Controller function and avoid malfunctions in other functions
115 contained in the composite device.
116
117 *** HCI command packet addressing for single-function AMP Controller
118
119 bmRequestType 0x21 : Host-to-interface class request, interface as target
120 bRequest 0x2B : Arbitrary value chosen to identify requests targeted to an AMP controller function.
121 wValue 0x00
122 wIndex IF# : This is the actual Interface # within the composite device.
123
124
125 *************** BULK ENDPOINT EXPECTATIONS *************************************
126
127 Data integrity is a critical aspect for ACL data. This,
128 in combination with bandwidth requirements,
129 is the reason for using a bulk endpoint. Multiple 64-byte packets can be shipped
130 per USB Frame (1 millisecond, full speed) or 512-byte packets per USB Microframe
131 (125 microseconds, high-speed), across the bus.
132
133 Suggested bulk max packet size is 64 bytes for full-speed,
134 or 512 bytes for high speed.
135
136 Bulk has the ability to detect errors and correct them.
137 In order to avoid starvation, a flow control model similar
138 to the shared endpoint model is recommended for the host controller.
139
140 ***************INTERRUPT ENDPOINT EXPECTATIONS *********************************
141
142 An interrupt endpoint is necessary to ensure that events are delivered
143 in a predictable and timely manner.
144 Event packets can be sent across USB with a guaranteed latency.
145
146 The interrupt endpoint should have an interval of 1 ms (full speed).
147 For a controller using USB high-speed the interrupt interval may have
148 an interval of 125 microseconds.
149
150 The USB software and firmware requires no intimate knowledge of the events
151 passed to the host controller.
152
153 ***************ISOCHRONOUS ENDPOINT EXPECTATIONS *******************************
154
155 These isochronous endpoints transfer synchronous data to and from the host
156 controller of the radio.
157
158 Time is the critical aspect for this type of data.
159 The USB firmware should transfer the contents of the data
160 to the host controllers' synchronous FIFOs.
161 If the FIFOs are full, the data should be overwritten with new data.
162 These endpoints have a one (1) ms interval, as required by Chapter 9 of the
163 USB Specification, Versions 1.0 and 1.1.
164
165 A suggested max packet size for this endpoint would be at least 64 bytes.
166
167 ********************** BLUETOOTH CODES *****************************************
168
169 The following values are defined for Bluetooth Devices:
170
171 Device/Inferface : USB Codes for Primary Controllers :
172 Class bDeviceClass 0xE0 Wireless Controller
173 Subclass bDeviceSubClass 0x01 RF Controller
174 Protocol bDeviceProtocol 0x01 Bluetooth Pri Controller < bRequest : 0x00 >
175
176 Device/Inferface : USB Codes for AMP Controllers :
177 Class bDeviceClass 0xE0 Wireless Controller
178 Subclass bDeviceSubClass 0x01 RF Controller
179 Protocol bDeviceProtocol 0x04 Bluetooth AMP Controller < bRequest : 0x2B >
180
181 These values should also be used in the interface descriptors for the interfaces
182
183 Device : USB Codes for composite devices using IAD :
184 Class bDeviceClass 0xEF Miscellaneous
185 Subclass bDeviceSubClass 0x02 Common Class
186 Protocol bDeviceProtocol 0x01 Interface Association Descriptor
187
188 Interface : USB Codes for Primary Controllers :
189 Class bDeviceClass 0xE0 Wireless Controller
190 Subclass bDeviceSubClass 0x01 RF Controller
191 Protocol bDeviceProtocol 0x01 Bluetooth Pri Controller < bRequest : 0x00 >
192
193 Interface : USB Codes for AMP Controllers :
194 Class bDeviceClass 0xE0 Wireless Controller
195 Subclass bDeviceSubClass 0x01 RF Controller
196 Protocol bDeviceProtocol 0x04 Bluetooth AMP Controller < bRequest : 0x2B >
197
198 ************* BLUETOOTH COMPOSITE DEVICE IMPLEMENTATION ************************
199
200 (IAD) : Interface Association Descriptors
201
202 Example Interface Association Descriptor used for a Primary Controller function:
203
204 Offset Field Size Value Description
205 0 bLength 1 0x08 Size of this descriptor in octets
206 1 bDescriptorType 1 0x0B INTERFACE ASSOCIATION DESCRIPTOR
207 2 bFirstInterface 1 xxxx Interface number of the first interface associated with this device
208 3 bInterfaceCount 1 0x02 Number of contiguous interfaces associated with the function
209 4 bFunctionClass 1 0xE0 Wireless Controller
210 5 bFunctionSubClass 1 0x01 RF Controller
211 6 bFunctionProtocol 1 0x01 Bluetooth Primary Controller
212 7 iFunction 1 xxxx Index Pointer to a name string for this function, if any is provide
213
214 A USB Composite contains multiple independent functions. This section
215 describes how to implement Bluetooth functions within a USB Composite
216 device. This may require the use of Interface Association Descriptors (IAD) to
217 aggregate multiple Interfaces. This also requires the host to address USB
218 requests to the specific Interface
219
220 A Primary Controller (ref) shall contain at least two interfaces:
221 HCI Events and ACL data (3 endpoints)
222 HCI SCO data (2 endpoints, multiple alternate settings)
223
224 When used in a USB Composite device, a Primary Controller function shall use
225 an IAD descriptor to associate the provided interfaces.
226
227 When used in a USB Composite device, an AMP Controller does not need IAD.
228 If the device contains the Device Firmware Upgrade option as a separate
229 Device function, an IAD is not needed. If the Device Firmware Upgrade option
230 is bundled with the AMP Controller function, then an IAD is needed to bind the
231 two interfaces.
232
233 A USB Composite device containing only a Primary Controller and an AMP Controller
234 may include a Configuration Descriptor set with the following structure:
235
236 Configuration Descriptor :
237
238 0x09, 0x02, wTotalLength,
239 0x03,
240 // bNumInterfaces
241 // IF#1 Primary events & ACL
242 // IF#2 Primary SCO or eSCO
243 // IF#3 AMP events & ACL
244 0x01, // bConfigurationValue
245 iConfiguration,
246 bmAttributes,
247 0xFA, // Max power used 500ma
248
249 Interface Association Descriptor :
250
251 0x08, 0x0B,
252 IF#1, // bFirstInterface
253 0x03, // bInterfaceCount : Number of contiguous interfaces associated with the function.
254 0xE0, 0x01, 0x01, // Wireless Controller : RF Controller : Bluetooth Primary Controller
255 iFunctionString
256
257 INTERFACE DESCRIPTOR #1
258 0x09, 0x04, IF#1, 0x00, 0x03, // bNumEndpoints : InterruptIn, BulkIn, BulkOut
259 0xE0, 0x01, 0x01, // Wireless Controller : RF Controller : Bluetooth Primary Controller
260 iInterfaceString
261
262 ENDPOINT DESCRIPTOR : Interrupt, Bulk In, Bulk Out
263
264 INTERFACE DESCRIPTOR #2
265
266 0x09, 0x04, IF#2, 0x00, 0x02, // bNumEndpoints : Isoch OUT (SCO), Isoch IN (SCO)
267 0xE0, 0x01, 0x01, // Wireless Controller : RF Controller : Bluetooth Primary Controller
268 iInterfaceString
269
270 ENDPOINT DESCRIPTOR : Iso In, Iso Out
271
272 INTERFACE DESCRIPTOR #3
273
274 0x09, 0x04, IF#3, 0x00, 0x03, // bNumEndpoints : Isoch OUT (SCO), Isoch IN (SCO)
275 0xE0, 0x01, 0x04, // Wireless Controller : RF Controller : Bluetooth AMP Controller
276 iInterfaceString
277
278 ENDPOINT DESCRIPTOR : Interrupt, Bulk In, Bulk Out
279
280 LOGICAL LINK CONTROL AND ADAPTATION PROTOCOL SPECIFICATION : L2CAP
281
282 DATA PACKET FORMAT
283 SIGNALING PACKET FORMATS
284
285 SERVICE DISCOVERY PROTOCOL SPECIFICATION : SDP
286
287 GENERIC ACCESS PROFILE
288
289 AMP MANAGER PROTOCOL SPECIFICATION
290
291 ATTRIBUTE PROTOCOL (ATT)
292
293 GENERIC ATTRIBUTE PROFILE (GATT)
294
295 SECURITY MANAGER SPECIFICATION
296
297 */