00001 /* ---------------------------------------------------------------------------- 00002 * ATMEL Microcontroller Software Support 00003 * ---------------------------------------------------------------------------- 00004 * Copyright (c) 2008, Atmel Corporation 00005 * 00006 * All rights reserved. 00007 * 00008 * Redistribution and use in source and binary forms, with or without 00009 * modification, are permitted provided that the following conditions are met: 00010 * 00011 * - Redistributions of source code must retain the above copyright notice, 00012 * this list of conditions and the disclaimer below. 00013 * 00014 * Atmel's name may not be used to endorse or promote products derived from 00015 * this software without specific prior written permission. 00016 * 00017 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR 00018 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00019 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 00020 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, 00021 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00022 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 00023 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00024 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00025 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 00026 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00027 * ---------------------------------------------------------------------------- 00028 */ 00029 00030 /** 00031 * \dir usb/device/audio-speaker 00032 * 00033 * \section Purpose 00034 * 00035 * This directory provides definitions, structs and functions for a USB Audio 00036 * Class device - USB audio-speaker demo, to implement an USB desktop speaker. 00037 * 00038 * \section Contents 00039 * There are two things for the implement of the audio-speaker device driver: 00040 * - Implement the audio-speaker driver structs and functions for the device, 00041 * to initialize, to handle audio class specific requests and dispach 00042 * standard requests in USBD callbacks, to read/write through assigned USB 00043 * endpoints, 00044 * - Create the audio-speaker device's descriptors that should be passed to 00045 * the USBDDriver instance on initialization, so that the host can 00046 * recognize the device as a USB audio "desktop speaker" device. 00047 * 00048 * For more information about what a particular group contains, please refer to 00049 * \ref usbd_audio_speaker "USB Audio Speaker Library" and 00050 * \ref usbd_audio_speaker_drv "USB Audio Speaker Doc". 00051 */ 00052 00053 /** 00054 \page usbd_audio_speaker_drv USB Device Audio Speaker Driver 00055 00056 This page describes how to use the USB framework to produce a USB Audio Class 00057 Device driver. 00058 00059 \section References 00060 - \ref usbd_framework "AT91 USB device framework" 00061 - \ref usbd_enum "USB Device Enumeration" 00062 - <a href="http://www.usb.org/developers/docs/usb_20_040908.zip"> 00063 Universal Serial Bus Revision 2.0 specification 00064 </a> (.zip file format, size 9.80 MB) 00065 - <a href="http://www.usb.org/developers/devclass_docs/audio10.pdf"> 00066 Audio Device Document 1.0</a> 00067 - <a href="http://www.usb.org/developers/devclass_docs/frmts10.pdf"> 00068 Audio Data Formats 1.0</a> 00069 - <a href="http://www.usb.org/developers/devclass_docs/termt10.pdf"> 00070 Autio Terminal Types 1.0</a> 00071 00072 \section aud_sp_drv_api Audio Speaker Driver API 00073 - AUDDSpeakerDriver_Initialize() 00074 - AUDDSpeakerDriver_RequestHandler() 00075 - AUDDSpeakerDriver_Read() 00076 00077 \section aud_dsktop_sp_dsc Audio Desktop Speaker Description 00078 The device described here is a USB desktop speaker. It receives a stero 00079 audio data stream from the Host over its Audio Streaming interface. The used 00080 Audio Data Format is 16-bit 48KHz 2-channel PCM (or mono 16-bit 32KHz PCM for 00081 sam7s chips). The following is the internal topology of the speaker. 00082 00083 \image html USBAudioSpeaker.png "USB Desktop Speaker Topology" 00084 00085 The audio function contains one Onput Terminal that represents the actual 00086 speaker output element, followed by the Digital-to-Analog Converter (DAC). 00087 The digital input stream of the host enters the audio function through the 00088 single Input Pin of the Output terminal. There is a Feature Unit on the 00089 audio stream, to mute or unmute the speaker. The Input Terminal is the 00090 representation within the audio fucntion of the USB OUT endpoint that 00091 eventually receives the audio data stream from the Host. The internals of the 00092 audio function are presented to the Host through the (mandatory) AudioControl 00093 interface wheras the USB OUT endpoint resides in the AudioStreaming interface. 00094 00095 \section desc_hi Descriptor Hierarchy 00096 This USB Desktop Speaker device includes the AudioControl interface 00097 (interface 0) and a single AudioStreaming interface (interface 1). The 00098 AudioStreaming interface features two alternate settings. The first alternate 00099 setting (Alternate Setting 0) has zero bandwidth associated with it so that 00100 switching to this alternate setting effectively frees all allocated bandwidth 00101 on the USB for this device. Zero bandwidth is indicated by the lack of a 00102 streaming endpoint. Alternate Setting 1 is the operational part of the 00103 interface and it has one isochronous OUT endpoint. Figure presents the 00104 descriptor hierarchy. 00105 00106 \image html UsbAudioSpeakerDescriptors.png "USB Desktop Speaker Hierarchy" 00107 00108 \section Descriptors 00109 The following sections present all the descriptors that are used to describe 00110 the device. 00111 00112 All descriptors are combined into a list and pass to USBDDriver_Initialize 00113 invoked in AUDDSpeakerDriver_Initialize. 00114 00115 \code 00116 const USBDDriverDescriptors auddSpeakerDriverDescriptors; 00117 \endcode 00118 00119 \subsection aud_dev_desc Device Descriptor 00120 \code 00121 const USBDeviceDescriptor deviceDescriptor; 00122 \endcode 00123 00124 \if doxys_table 00125 ||Offset||Field||Size||Value||Description 00126 |0|bLength|1|0x12|Size of this descriptor, in bytes. 00127 |1|bDescriptorType|1|0x01|DEVICE descriptor (USBGenericDescriptor_DEVICE). 00128 |2|bcdUSB|2|0x0200|2.00 - current revision of USB specification. 00129 |4|bDeviceClass|1|0x00|Device defined at interface level. 00130 |5|bDeviceSubClass|1|0x00|Unused. 00131 |6|bDeviceProtocol|1|0x00|Unused. 00132 |7|bMaxPacketSize0|1|0x08|8 bytes (CHIP_USB_ENDPOINTS_MAXPACKETSIZE(0)). 00133 |8|idVendor|2|0x03EB|Atmel Vendor ID (AUDDSpeakerDriverDescriptors_VENDORID). 00134 |10|idProduct|2|0x6128|Product ID (AUDDSpeakerDriverDescriptors_PRODUCTID). 00135 |12|bcdDevice|2|0x0100|Device Release Code\n 00136 (AUDDSpeakerDriverDescriptors_RELEASE). 00137 |14|iManufacturer|1|0x01|Index to manufacture name in Unicode\n 00138 (manufacturerDescriptor). 00139 |15|iProduct|1|0x02|Index to product name in Unicode (productDescriptor). 00140 |16|iSerialNumber|1|0x03|Index to serial number in Unicode\n 00141 (serialNumberDescriptor). 00142 |17|bNumConfigurations|1|0x01|One configuration. 00143 \endif 00144 <table><tr> 00145 <td><b>Offset</b></td> 00146 <td><b>Field</b></td> 00147 <td><b>Size</b></td> 00148 <td><b>Value</b></td> 00149 <td><b>Description</b></td></tr> 00150 <tr> 00151 <td>0</td> 00152 <td>bLength</td> 00153 <td>1</td> 00154 <td>0x12</td> 00155 <td>Size of this descriptor, in bytes.</td></tr> 00156 <tr> 00157 <td>1</td> 00158 <td>bDescriptorType</td> 00159 <td>1</td> 00160 <td>0x01</td> 00161 <td>DEVICE descriptor (\ref USBGenericDescriptor_DEVICE).</td></tr> 00162 <tr> 00163 <td>2</td> 00164 <td>bcdUSB</td> 00165 <td>2</td> 00166 <td>0x0200</td> 00167 <td>2.00 - current revision of USB specification.</td></tr> 00168 <tr> 00169 <td>4</td> 00170 <td>bDeviceClass</td> 00171 <td>1</td> 00172 <td>0x00</td> 00173 <td>Device defined at interface level.</td></tr> 00174 <tr> 00175 <td>5</td> 00176 <td>bDeviceSubClass</td> 00177 <td>1</td> 00178 <td>0x00</td> 00179 <td>Unused.</td></tr> 00180 <tr> 00181 <td>6</td> 00182 <td>bDeviceProtocol</td> 00183 <td>1</td> 00184 <td>0x00</td> 00185 <td>Unused.</td></tr> 00186 <tr> 00187 <td>7</td> 00188 <td>bMaxPacketSize0</td> 00189 <td>1</td> 00190 <td>0x08</td> 00191 <td>8 bytes (\ref CHIP_USB_ENDPOINTS_MAXPACKETSIZE(0)).</td></tr> 00192 <tr> 00193 <td>8</td> 00194 <td>idVendor</td> 00195 <td>2</td> 00196 <td>0x03EB</td> 00197 <td>Atmel Vendor ID (\ref AUDDSpeakerDriverDescriptors_VENDORID).</td></tr> 00198 <tr> 00199 <td>10</td> 00200 <td>idProduct</td> 00201 <td>2</td> 00202 <td>0x6128</td> 00203 <td>Product ID (\ref AUDDSpeakerDriverDescriptors_PRODUCTID).</td></tr> 00204 <tr> 00205 <td>12</td> 00206 <td>bcdDevice</td> 00207 <td>2</td> 00208 <td>0x0100</td> 00209 <td>Device Release Code<br>(\ref AUDDSpeakerDriverDescriptors_RELEASE).</td></tr> 00210 <tr> 00211 <td>14</td> 00212 <td>iManufacturer</td> 00213 <td>1</td> 00214 <td>0x01</td> 00215 <td>Index to manufacture name in Unicode<br>(\ref manufacturerDescriptor).</td></tr> 00216 <tr> 00217 <td>15</td> 00218 <td>iProduct</td> 00219 <td>1</td> 00220 <td>0x02</td> 00221 <td>Index to product name in Unicode (\ref productDescriptor).</td></tr> 00222 <tr> 00223 <td>16</td> 00224 <td>iSerialNumber</td> 00225 <td>1</td> 00226 <td>0x03</td> 00227 <td>Index to serial number in Unicode<br>(\ref serialNumberDescriptor).</td></tr> 00228 <tr> 00229 <td>17</td> 00230 <td>bNumConfigurations</td> 00231 <td>1</td> 00232 <td>0x01</td> 00233 <td>One configuration.</td></tr> 00234 </table> 00235 00236 \subsection cfg_desc Configuration Descriptor 00237 \code 00238 const AUDDSpeakerDriverConfigurationDescriptors configurationDescriptors; 00239 \endcode 00240 00241 \if doxys_table 00242 ||Offset||Field||Size||Value||Description 00243 |0|bLength|1|0x09|Size of this descriptor, in bytes. 00244 |1|bDescriptorType|1|0x02|CONFIGURATION descriptor\n 00245 (USBGenericDescriptor_CONFIGURATION). 00246 |2|wTotalLength|2|0x????|Length of the total configuration block in bytes\n 00247 including this descriptor\n 00248 (AUDDSpeakerDriverConfigurationDescriptors) 00249 |4|bNumInterfaces|1|0x02|Two interfaces. 00250 |5|bConfigurationValue|1|0x01|ID of this configuration. 00251 |6|iConfiguration|1|0x00|Unused. 00252 |7|bmAttributes|1|0x??|BOARD_USB_BMATTRIBUTES 00253 |8|bMaxPower|1|0x32|100mA Max. %power consumption.\n 00254 USBConfigurationDescriptor_POWER(100) 00255 \endif 00256 00257 <table><tr> 00258 <td><b>Offset</b></td> 00259 <td><b>Field</b></td> 00260 <td><b>Size</b></td> 00261 <td><b>Value</b></td> 00262 <td><b>Description</b></td></tr> 00263 <tr> 00264 <td>0</td> 00265 <td>bLength</td> 00266 <td>1</td> 00267 <td>0x09</td> 00268 <td>Size of this descriptor, in bytes.</td></tr> 00269 <tr> 00270 <td>1</td> 00271 <td>bDescriptorType</td> 00272 <td>1</td> 00273 <td>0x02</td> 00274 <td>CONFIGURATION descriptor<br>(\ref USBGenericDescriptor_CONFIGURATION).</td></tr> 00275 <tr> 00276 <td>2</td> 00277 <td>wTotalLength</td> 00278 <td>2</td> 00279 <td>0x????</td> 00280 <td>Length of the total configuration block in bytes<br>including this descriptor<br>(\ref AUDDSpeakerDriverConfigurationDescriptors)</td></tr> 00281 <tr> 00282 <td>4</td> 00283 <td>bNumInterfaces</td> 00284 <td>1</td> 00285 <td>0x02</td> 00286 <td>Two interfaces.</td></tr> 00287 <tr> 00288 <td>5</td> 00289 <td>bConfigurationValue</td> 00290 <td>1</td> 00291 <td>0x01</td> 00292 <td>ID of this configuration.</td></tr> 00293 <tr> 00294 <td>6</td> 00295 <td>iConfiguration</td> 00296 <td>1</td> 00297 <td>0x00</td> 00298 <td>Unused.</td></tr> 00299 <tr> 00300 <td>7</td> 00301 <td>bmAttributes</td> 00302 <td>1</td> 00303 <td>0x??</td> 00304 <td>\ref BOARD_USB_BMATTRIBUTES</td></tr> 00305 <tr> 00306 <td>8</td> 00307 <td>bMaxPower</td> 00308 <td>1</td> 00309 <td>0x32</td> 00310 <td>100mA Max. power consumption.<br>\ref USBConfigurationDescriptor_POWER(100)</td></tr> 00311 </table> 00312 00313 \subsection ac_if_desc AudioControl Interface Descriptor 00314 The AudioControl interface describes the %device structure (audio function 00315 topology) and is used to manipulate the Audio Controls. 00316 00317 \subsubsection std_ac_if_desc Standard AC Interface Descriptor 00318 The AudioControl interface has no dedicated endpoints associated with it. It 00319 uses the default pipe (endpoint 0) for all communication purposes. Class- 00320 specific AudioControl Requests are sent using the default pipe. There is no 00321 Status Interrupt endpoint provided. 00322 00323 See \ref USBInterfaceDescriptor. 00324 00325 \if doxys_table 00326 ||Offset||Field||Size||Value||Description 00327 |0|bLength|1|0x09|Size of this descriptor, in bytes. 00328 |1|bDescriptorType|1|0x04|INTERFACE descriptor\n 00329 (USBGenericDescriptor_INTERFACE). 00330 |2|bInterfaceNumber|1|0x00|Index of this interface. 00331 |3|bAlternateSetting|1|0x00|Index of this setting. 00332 |4|bNumEndpoints|1|0x00|0 endpoints. 00333 |5|bInterfaceClass|1|0x01|AUDIO (AUDControlInterfaceDescriptor_CLASS). 00334 |6|bInterfaceSubClass|1|0x01|AUDIO_CONTROL\n 00335 (AUDControlInterfaceDescriptor_SUBCLASS). 00336 |7|bInterfaceProtocol|1|0x00|Unused. 00337 |8|iInterface|1|0x00|Unused. 00338 \endif 00339 00340 <table><tr> 00341 <td><b>Offset</b></td> 00342 <td><b>Field</b></td> 00343 <td><b>Size</b></td> 00344 <td><b>Value</b></td> 00345 <td><b>Description</b></td></tr> 00346 <tr> 00347 <td>0</td> 00348 <td>bLength</td> 00349 <td>1</td> 00350 <td>0x09</td> 00351 <td>Size of this descriptor, in bytes.</td></tr> 00352 <tr> 00353 <td>1</td> 00354 <td>bDescriptorType</td> 00355 <td>1</td> 00356 <td>0x04</td> 00357 <td>INTERFACE descriptor<br>(\ref USBGenericDescriptor_INTERFACE).</td></tr> 00358 <tr> 00359 <td>2</td> 00360 <td>bInterfaceNumber</td> 00361 <td>1</td> 00362 <td>0x00</td> 00363 <td>Index of this interface.</td></tr> 00364 <tr> 00365 <td>3</td> 00366 <td>bAlternateSetting</td> 00367 <td>1</td> 00368 <td>0x00</td> 00369 <td>Index of this setting.</td></tr> 00370 <tr> 00371 <td>4</td> 00372 <td>bNumEndpoints</td> 00373 <td>1</td> 00374 <td>0x00</td> 00375 <td>0 endpoints.</td></tr> 00376 <tr> 00377 <td>5</td> 00378 <td>bInterfaceClass</td> 00379 <td>1</td> 00380 <td>0x01</td> 00381 <td>AUDIO (\ref AUDControlInterfaceDescriptor_CLASS).</td></tr> 00382 <tr> 00383 <td>6</td> 00384 <td>bInterfaceSubClass</td> 00385 <td>1</td> 00386 <td>0x01</td> 00387 <td>AUDIO_CONTROL<br>(\ref AUDControlInterfaceDescriptor_SUBCLASS).</td></tr> 00388 <tr> 00389 <td>7</td> 00390 <td>bInterfaceProtocol</td> 00391 <td>1</td> 00392 <td>0x00</td> 00393 <td>Unused.</td></tr> 00394 <tr> 00395 <td>8</td> 00396 <td>iInterface</td> 00397 <td>1</td> 00398 <td>0x00</td> 00399 <td>Unused.</td></tr> 00400 </table> 00401 00402 \subsubsection class_ac_if_desc Class-specific AC Interface Descriptor 00403 The Class-specific AC interface descriptor is always headed by a Header 00404 descriptor that contains general information about the AudioControl interface. 00405 It contains all the pointers needed to describe the AudioInterface Collection, 00406 associated with the described audio function. 00407 00408 \if doxys_table 00409 ||Offset||Field||Size||Value||Description 00410 |0|bLength|1|0x09|Size of this descriptor, in bytes. 00411 |1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n 00412 (AUDGenericDescriptor_INTERFACE). 00413 |2|bDescriptorSubtype|1|0x01|HEADER subtype (AUDGenericDescriptor_HEADER). 00414 |3|bcdADC|2|0x0100|Revision of class specification - 1.0 00415 |5|wTotalLength|2|0x????|Total size of class specific descriptors\n 00416 (AUDDSpeakerDriverAudioControlDescriptors). 00417 |7|bInCollection|1|0x01|Number of streaming interfaces. 00418 |8|baInterfaceNr(1)|1|0x01|AudioStreaming interface 1 belongs to this AudioControl interface. 00419 \endif 00420 00421 <table><tr> 00422 <td><b>Offset</b></td> 00423 <td><b>Field</b></td> 00424 <td><b>Size</b></td> 00425 <td><b>Value</b></td> 00426 <td><b>Description</b></td></tr> 00427 <tr> 00428 <td>0</td> 00429 <td>bLength</td> 00430 <td>1</td> 00431 <td>0x09</td> 00432 <td>Size of this descriptor, in bytes.</td></tr> 00433 <tr> 00434 <td>1</td> 00435 <td>bDescriptorType</td> 00436 <td>1</td> 00437 <td>0x24</td> 00438 <td>CS_INTERFACE descriptor<br>(\ref AUDGenericDescriptor_INTERFACE).</td></tr> 00439 <tr> 00440 <td>2</td> 00441 <td>bDescriptorSubtype</td> 00442 <td>1</td> 00443 <td>0x01</td> 00444 <td>HEADER subtype (\ref AUDGenericDescriptor_HEADER).</td></tr> 00445 <tr> 00446 <td>3</td> 00447 <td>bcdADC</td> 00448 <td>2</td> 00449 <td>0x0100</td> 00450 <td>Revision of class specification - 1.0</td></tr> 00451 <tr> 00452 <td>5</td> 00453 <td>wTotalLength</td> 00454 <td>2</td> 00455 <td>0x????</td> 00456 <td>Total size of class specific descriptors<br>(\ref AUDDSpeakerDriverAudioControlDescriptors).</td></tr> 00457 <tr> 00458 <td>7</td> 00459 <td>bInCollection</td> 00460 <td>1</td> 00461 <td>0x01</td> 00462 <td>Number of streaming interfaces.</td></tr> 00463 <tr> 00464 <td>8</td> 00465 <td>baInterfaceNr(1)</td> 00466 <td>1</td> 00467 <td>0x01</td> 00468 <td>AudioStreaming interface 1 belongs to this AudioControl interface.</td></tr> 00469 </table> 00470 00471 \subsubsection it_desc_play Input Terminal Descriptor for playback 00472 This descriptor describes the Input Terminal that represents the USB pipe from 00473 the Host PC. Its Output Pin is connected to the Input Pin of the Feature Unit 00474 00475 \if doxys_table 00476 ||Offset||Field||Size||Value||Description 00477 |0|bLength|1|0x0C|Size of this descriptor, in bytes. 00478 |1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n 00479 (AUDGenericDescriptor_INTERFACE). 00480 |2|bDescriptorSubType|1|0x02|INPUT_TERMINAL subtype\n 00481 (AUDGenericDescriptor_INPUTTERMINAL). 00482 |3|bTerminalID|1|0x00|ID of this Input Terminal\n 00483 (AUDDSpeakerDriverDescriptors_INPUTTERMINAL). 00484 |4|wTerminalType|2|0x0101|Terminal is USB stream\n 00485 (AUDInputTerminalDescriptor_USBSTREAMING). 00486 |6|bAssocTerminal|1|0x01|Associated to Output Terminal\n 00487 (AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL). 00488 |7|bNrChannels|1|0x02|Two channel. 00489 |8|wChannelConfig|2|0x0003|Left plus right front channel. 00490 |10|iChannelNames|1|0x00|Unused. 00491 |11|iTerminal|1|0x00|Unused. 00492 \endif 00493 00494 <table><tr> 00495 <td><b>Offset</b></td> 00496 <td><b>Field</b></td> 00497 <td><b>Size</b></td> 00498 <td><b>Value</b></td> 00499 <td><b>Description</b></td></tr> 00500 <tr> 00501 <td>0</td> 00502 <td>bLength</td> 00503 <td>1</td> 00504 <td>0x0C</td> 00505 <td>Size of this descriptor, in bytes.</td></tr> 00506 <tr> 00507 <td>1</td> 00508 <td>bDescriptorType</td> 00509 <td>1</td> 00510 <td>0x24</td> 00511 <td>CS_INTERFACE descriptor<br>(\ref AUDGenericDescriptor_INTERFACE).</td></tr> 00512 <tr> 00513 <td>2</td> 00514 <td>bDescriptorSubType</td> 00515 <td>1</td> 00516 <td>0x02</td> 00517 <td>INPUT_TERMINAL subtype<br>(\ref AUDGenericDescriptor_INPUTTERMINAL).</td></tr> 00518 <tr> 00519 <td>3</td> 00520 <td>bTerminalID</td> 00521 <td>1</td> 00522 <td>0x00</td> 00523 <td>ID of this Input Terminal<br>(\ref AUDDSpeakerDriverDescriptors_INPUTTERMINAL).</td></tr> 00524 <tr> 00525 <td>4</td> 00526 <td>wTerminalType</td> 00527 <td>2</td> 00528 <td>0x0101</td> 00529 <td>Terminal is USB stream<br>(\ref AUDInputTerminalDescriptor_USBSTREAMING).</td></tr> 00530 <tr> 00531 <td>6</td> 00532 <td>bAssocTerminal</td> 00533 <td>1</td> 00534 <td>0x01</td> 00535 <td>Associated to Output Terminal<br>(\ref AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL).</td></tr> 00536 <tr> 00537 <td>7</td> 00538 <td>bNrChannels</td> 00539 <td>1</td> 00540 <td>0x02</td> 00541 <td>Two channel.</td></tr> 00542 <tr> 00543 <td>8</td> 00544 <td>wChannelConfig</td> 00545 <td>2</td> 00546 <td>0x0003</td> 00547 <td>Left plus right front channel.</td></tr> 00548 <tr> 00549 <td>10</td> 00550 <td>iChannelNames</td> 00551 <td>1</td> 00552 <td>0x00</td> 00553 <td>Unused.</td></tr> 00554 <tr> 00555 <td>11</td> 00556 <td>iTerminal</td> 00557 <td>1</td> 00558 <td>0x00</td> 00559 <td>Unused.</td></tr> 00560 </table> 00561 00562 \subsubsection ot_desc_play Output Terminal Descriptor for playback 00563 00564 \if doxys_table 00565 ||Offset||Field||Size||Value||Description 00566 |0|bLength|1|0x09|Size of this descriptor, in bytes. 00567 |1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n 00568 (AUDGenericDescriptor_INTERFACE). 00569 |2|bDescriptorSubType|1|0x03|OUTPUT_TERMINAL subtype\n 00570 (AUDGenericDescriptor_OUTPUTTERMINAL). 00571 |3|bTerminalID|1|0x01|ID of this Output Terminal\n 00572 (AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL). 00573 |4|wTerminalType|2|0x0301|Terminal is Desktop speaker. 00574 |6|bAssocTerminal|1|0x01|Associated to Input Terminal\n 00575 (AUDDSpeakerDriverDescriptors_INPUTTERMINAL). 00576 |7|bSourceID|1|0x02|From Feature Unit\n 00577 (AUDDSpeakerDriverDescriptors_FEATUREUNIT). 00578 |8|iTerminal|1|0x00|Unused. 00579 \endif 00580 00581 <table><tr> 00582 <td><b>Offset</b></td> 00583 <td><b>Field</b></td> 00584 <td><b>Size</b></td> 00585 <td><b>Value</b></td> 00586 <td><b>Description</b></td></tr> 00587 <tr> 00588 <td>0</td> 00589 <td>bLength</td> 00590 <td>1</td> 00591 <td>0x09</td> 00592 <td>Size of this descriptor, in bytes.</td></tr> 00593 <tr> 00594 <td>1</td> 00595 <td>bDescriptorType</td> 00596 <td>1</td> 00597 <td>0x24</td> 00598 <td>CS_INTERFACE descriptor<br>(\ref AUDGenericDescriptor_INTERFACE).</td></tr> 00599 <tr> 00600 <td>2</td> 00601 <td>bDescriptorSubType</td> 00602 <td>1</td> 00603 <td>0x03</td> 00604 <td>OUTPUT_TERMINAL subtype<br>(\ref AUDGenericDescriptor_OUTPUTTERMINAL).</td></tr> 00605 <tr> 00606 <td>3</td> 00607 <td>bTerminalID</td> 00608 <td>1</td> 00609 <td>0x01</td> 00610 <td>ID of this Output Terminal<br>(\ref AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL).</td></tr> 00611 <tr> 00612 <td>4</td> 00613 <td>wTerminalType</td> 00614 <td>2</td> 00615 <td>0x0301</td> 00616 <td>Terminal is Desktop speaker.</td></tr> 00617 <tr> 00618 <td>6</td> 00619 <td>bAssocTerminal</td> 00620 <td>1</td> 00621 <td>0x01</td> 00622 <td>Associated to Input Terminal<br>(\ref AUDDSpeakerDriverDescriptors_INPUTTERMINAL).</td></tr> 00623 <tr> 00624 <td>7</td> 00625 <td>bSourceID</td> 00626 <td>1</td> 00627 <td>0x02</td> 00628 <td>From Feature Unit<br>(\ref AUDDSpeakerDriverDescriptors_FEATUREUNIT).</td></tr> 00629 <tr> 00630 <td>8</td> 00631 <td>iTerminal</td> 00632 <td>1</td> 00633 <td>0x00</td> 00634 <td>Unused.</td></tr> 00635 </table> 00636 00637 \subsubsection fu_desc_play Feature Unit Descriptor for playback 00638 00639 \if doxys_table 00640 ||Offset||Field||Size||Value||Description 00641 |0|bLength|1|0x0A|Size of this descriptor, in bytes. 00642 |1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n 00643 (AUDGenericDescriptor_INTERFACE). 00644 |2|bDescriptorSubType|1|0x02|FEATURE_UNIT subtype\n 00645 (AUDGenericDescriptor_FEATUREUNIT). 00646 |3|bUnitID|1|0x02|ID of this Feature Unit\n 00647 (AUDDSpeakerDriverDescriptors_FEATUREUNIT). 00648 |4|bSourceID|1|0x00|From Input Terminal\n 00649 (AUDDSpeakerDriverDescriptors_INPUTTERMINAL). 00650 |5|bControlSize|1|0x01|1 byte per channel for controls 00651 |6|bmaControls|3|0x000001|Master channel mute control, no other controls. 00652 |9|iFeature|1|0x00|Unused. 00653 \endif 00654 00655 <table><tr> 00656 <td><b>Offset</b></td> 00657 <td><b>Field</b></td> 00658 <td><b>Size</b></td> 00659 <td><b>Value</b></td> 00660 <td><b>Description</b></td></tr> 00661 <tr> 00662 <td>0</td> 00663 <td>bLength</td> 00664 <td>1</td> 00665 <td>0x0A</td> 00666 <td>Size of this descriptor, in bytes.</td></tr> 00667 <tr> 00668 <td>1</td> 00669 <td>bDescriptorType</td> 00670 <td>1</td> 00671 <td>0x24</td> 00672 <td>CS_INTERFACE descriptor<br>(\ref AUDGenericDescriptor_INTERFACE).</td></tr> 00673 <tr> 00674 <td>2</td> 00675 <td>bDescriptorSubType</td> 00676 <td>1</td> 00677 <td>0x02</td> 00678 <td>FEATURE_UNIT subtype<br>(\ref AUDGenericDescriptor_FEATUREUNIT).</td></tr> 00679 <tr> 00680 <td>3</td> 00681 <td>bUnitID</td> 00682 <td>1</td> 00683 <td>0x02</td> 00684 <td>ID of this Feature Unit<br>(\ref AUDDSpeakerDriverDescriptors_FEATUREUNIT).</td></tr> 00685 <tr> 00686 <td>4</td> 00687 <td>bSourceID</td> 00688 <td>1</td> 00689 <td>0x00</td> 00690 <td>From Input Terminal<br>(\ref AUDDSpeakerDriverDescriptors_INPUTTERMINAL).</td></tr> 00691 <tr> 00692 <td>5</td> 00693 <td>bControlSize</td> 00694 <td>1</td> 00695 <td>0x01</td> 00696 <td>1 byte per channel for controls</td></tr> 00697 <tr> 00698 <td>6</td> 00699 <td>bmaControls</td> 00700 <td>3</td> 00701 <td>0x000001</td> 00702 <td>Master channel mute control, no other controls.</td></tr> 00703 <tr> 00704 <td>9</td> 00705 <td>iFeature</td> 00706 <td>1</td> 00707 <td>0x00</td> 00708 <td>Unused.</td></tr> 00709 </table> 00710 00711 \subsection aud_s_if_desc AudioStreaming Interface Descriptor 00712 The AudioStreaming interface has two possible alternate settings. 00713 00714 \subsubsection zb_alt_0 Zero-bandwidth Alternate Setting 0 00715 Alternate setting 0 is a zero-bandwidth setting, used to relinquish the 00716 claimed bandwidth on the bus when the microphone is not in use. It is the 00717 default setting after power-up. The zero bandwidth is implemented by 00718 specifying that this alternate setting of the interface has no endpoints 00719 associated with it (bNumEndpoints=0). The collection of descriptors for this 00720 alternate setting reduces to the standard interface descriptor. 00721 00722 Standard AS Interface Descriptor (\ref USBInterfaceDescriptor) 00723 00724 \if doxys_table 00725 ||Offset||Field||Size||Value||Description 00726 |0|bLength|1|0x09|Size of this descriptor, in bytes. 00727 |1|bDescriptorType|1|0x04|INTERFACE descriptor\n 00728 (USBGenericDescriptor_INTERFACE). 00729 |2|bInterfaceNumber|1|0x01|Index of this interface. 00730 |3|bAlternateSetting|1|0x00|Index of this setting. 00731 |4|bNumEndpoints|1|0x00|0 endpoint. 00732 |5|bInterfaceClass|1|0x01|AUDIO (AUDStreamingInterfaceDescriptor_CLASS). 00733 |6|bInterfaceSubClass|1|0x02|AUDIO_STREAMING\n 00734 (AUDStreamingInterfaceDescriptor_SUBCLASS). 00735 |7|bInterfaceProtocol|1|0x00|Unused (AUDStreamingInterfaceDescriptor_PROTOCOL). 00736 |8|iInterface|1|0x00|Unused. 00737 \endif 00738 00739 <table><tr> 00740 <td><b>Offset</b></td> 00741 <td><b>Field</b></td> 00742 <td><b>Size</b></td> 00743 <td><b>Value</b></td> 00744 <td><b>Description</b></td></tr> 00745 <tr> 00746 <td>0</td> 00747 <td>bLength</td> 00748 <td>1</td> 00749 <td>0x09</td> 00750 <td>Size of this descriptor, in bytes.</td></tr> 00751 <tr> 00752 <td>1</td> 00753 <td>bDescriptorType</td> 00754 <td>1</td> 00755 <td>0x04</td> 00756 <td>INTERFACE descriptor<br>(\ref USBGenericDescriptor_INTERFACE).</td></tr> 00757 <tr> 00758 <td>2</td> 00759 <td>bInterfaceNumber</td> 00760 <td>1</td> 00761 <td>0x01</td> 00762 <td>Index of this interface.</td></tr> 00763 <tr> 00764 <td>3</td> 00765 <td>bAlternateSetting</td> 00766 <td>1</td> 00767 <td>0x00</td> 00768 <td>Index of this setting.</td></tr> 00769 <tr> 00770 <td>4</td> 00771 <td>bNumEndpoints</td> 00772 <td>1</td> 00773 <td>0x00</td> 00774 <td>0 endpoint.</td></tr> 00775 <tr> 00776 <td>5</td> 00777 <td>bInterfaceClass</td> 00778 <td>1</td> 00779 <td>0x01</td> 00780 <td>AUDIO (\ref AUDStreamingInterfaceDescriptor_CLASS).</td></tr> 00781 <tr> 00782 <td>6</td> 00783 <td>bInterfaceSubClass</td> 00784 <td>1</td> 00785 <td>0x02</td> 00786 <td>AUDIO_STREAMING<br>(\ref AUDStreamingInterfaceDescriptor_SUBCLASS).</td></tr> 00787 <tr> 00788 <td>7</td> 00789 <td>bInterfaceProtocol</td> 00790 <td>1</td> 00791 <td>0x00</td> 00792 <td>Unused (\ref AUDStreamingInterfaceDescriptor_PROTOCOL).</td></tr> 00793 <tr> 00794 <td>8</td> 00795 <td>iInterface</td> 00796 <td>1</td> 00797 <td>0x00</td> 00798 <td>Unused.</td></tr> 00799 </table> 00800 00801 \subsubsection op_alt_1 Operational Alternate Setting 1 00802 Alternate setting 1 is the operational setting of the interface. It contains 00803 the standard and class-specific interface and endpoint descriptors. 00804 00805 Standard AS Interface Descriptor (\ref USBInterfaceDescriptor) 00806 00807 \if doxys_table 00808 ||Offset||Field||Size||Value||Description 00809 |0|bLength|1|0x09|Size of USBInterfaceDescriptor in bytes. 00810 |1|bDescriptorType|1|0x04|INTERFACE descriptor\n 00811 (USBGenericDescriptor_INTERFACE). 00812 |2|bInterfaceNumber|1|0x01|Index of this interface. 00813 |3|bAlternateSetting|1|0x01|Index of this setting. 00814 |4|bNumEndpoints|1|0x01|1 endpoint. 00815 |5|bInterfaceClass|1|0x01|AUDIO (AUDStreamingInterfaceDescriptor_CLASS). 00816 |6|bInterfaceSubClass|1|0x02|AUDIO_STREAMING\n 00817 (AUDStreamingInterfaceDescriptor_SUBCLASS). 00818 |7|bInterfaceProtocol|1|0x00|Unused (AUDStreamingInterfaceDescriptor_PROTOCOL). 00819 |8|iInterface|1|0x00|Unused. 00820 \endif 00821 00822 <table><tr> 00823 <td><b>Offset</b></td> 00824 <td><b>Field</b></td> 00825 <td><b>Size</b></td> 00826 <td><b>Value</b></td> 00827 <td><b>Description</b></td></tr> 00828 <tr> 00829 <td>0</td> 00830 <td>bLength</td> 00831 <td>1</td> 00832 <td>0x09</td> 00833 <td>Size of \ref USBInterfaceDescriptor in bytes.</td></tr> 00834 <tr> 00835 <td>1</td> 00836 <td>bDescriptorType</td> 00837 <td>1</td> 00838 <td>0x04</td> 00839 <td>INTERFACE descriptor<br>(\ref USBGenericDescriptor_INTERFACE).</td></tr> 00840 <tr> 00841 <td>2</td> 00842 <td>bInterfaceNumber</td> 00843 <td>1</td> 00844 <td>0x01</td> 00845 <td>Index of this interface.</td></tr> 00846 <tr> 00847 <td>3</td> 00848 <td>bAlternateSetting</td> 00849 <td>1</td> 00850 <td>0x01</td> 00851 <td>Index of this setting.</td></tr> 00852 <tr> 00853 <td>4</td> 00854 <td>bNumEndpoints</td> 00855 <td>1</td> 00856 <td>0x01</td> 00857 <td>1 endpoint.</td></tr> 00858 <tr> 00859 <td>5</td> 00860 <td>bInterfaceClass</td> 00861 <td>1</td> 00862 <td>0x01</td> 00863 <td>AUDIO (\ref AUDStreamingInterfaceDescriptor_CLASS).</td></tr> 00864 <tr> 00865 <td>6</td> 00866 <td>bInterfaceSubClass</td> 00867 <td>1</td> 00868 <td>0x02</td> 00869 <td>AUDIO_STREAMING<br>(\ref AUDStreamingInterfaceDescriptor_SUBCLASS).</td></tr> 00870 <tr> 00871 <td>7</td> 00872 <td>bInterfaceProtocol</td> 00873 <td>1</td> 00874 <td>0x00</td> 00875 <td>Unused (\ref AUDStreamingInterfaceDescriptor_PROTOCOL).</td></tr> 00876 <tr> 00877 <td>8</td> 00878 <td>iInterface</td> 00879 <td>1</td> 00880 <td>0x00</td> 00881 <td>Unused.</td></tr> 00882 </table> 00883 00884 Class-specific AS General Interface Descriptor (\ref AUDStreamingInterfaceDescriptor) 00885 00886 \if doxys_table 00887 ||Offset||Field||Size||Value||Description 00888 |0|bLength|1|0x06|Size of AUDStreamingInterfaceDescriptor in bytes. 00889 |1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n 00890 (AUDGenericDescriptor_INTERFACE). 00891 |2|bDescriptorSubType|1|0x01|GENERAL subtype\n 00892 (AUDStreamingInterfaceDescriptor_GENERAL). 00893 |3|bTerminalLink|1|0x02|Unit ID of the Input Terminal\n 00894 (AUDDSpeakerDriverDescriptors_INPUTTERMINAL). 00895 |4|bDelay|1|0x00|No interface delay. 00896 |5|wFormatTag|2|0x0001|PCM Format (AUDFormatTypeOneDescriptor_PCM). 00897 \endif 00898 00899 <table><tr> 00900 <td><b>Offset</b></td> 00901 <td><b>Field</b></td> 00902 <td><b>Size</b></td> 00903 <td><b>Value</b></td> 00904 <td><b>Description</b></td></tr> 00905 <tr> 00906 <td>0</td> 00907 <td>bLength</td> 00908 <td>1</td> 00909 <td>0x06</td> 00910 <td>Size of \ref AUDStreamingInterfaceDescriptor in bytes.</td></tr> 00911 <tr> 00912 <td>1</td> 00913 <td>bDescriptorType</td> 00914 <td>1</td> 00915 <td>0x24</td> 00916 <td>CS_INTERFACE descriptor<br>(\ref AUDGenericDescriptor_INTERFACE).</td></tr> 00917 <tr> 00918 <td>2</td> 00919 <td>bDescriptorSubType</td> 00920 <td>1</td> 00921 <td>0x01</td> 00922 <td>GENERAL subtype<br>(\ref AUDStreamingInterfaceDescriptor_GENERAL).</td></tr> 00923 <tr> 00924 <td>3</td> 00925 <td>bTerminalLink</td> 00926 <td>1</td> 00927 <td>0x02</td> 00928 <td>Unit ID of the Input Terminal<br>(\ref AUDDSpeakerDriverDescriptors_INPUTTERMINAL).</td></tr> 00929 <tr> 00930 <td>4</td> 00931 <td>bDelay</td> 00932 <td>1</td> 00933 <td>0x00</td> 00934 <td>No interface delay.</td></tr> 00935 <tr> 00936 <td>5</td> 00937 <td>wFormatTag</td> 00938 <td>2</td> 00939 <td>0x0001</td> 00940 <td>PCM Format (\ref AUDFormatTypeOneDescriptor_PCM).</td></tr> 00941 </table> 00942 00943 Type I Format Type Descriptor (\ref AUDFormatTypeOneDescriptor1) 00944 00945 \if doxys_table 00946 ||Offset||Field||Size||Value||Description 00947 |0|bLength|1|0x0B|Size of AUDFormatTypeOneDescriptor1 in bytes. 00948 |1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\ 00949 (AUDGenericDescriptor_INTERFACE). 00950 |2|bDescriptorSubType|1|0x02|FORMAT_TYPE subtype\n 00951 (AUDStreamingInterfaceDescriptor_FORMATTYPE). 00952 |3|bFormatType|1|0x01|FORMAT_TYPE_I (AUDFormatTypeOneDescriptor_FORMATTYPEONE). 00953 |4|bNrChannels|1|0x02|2 channels (AUDDSpeakerDriver_NUMCHANNELS). 00954 |5|bSubFrameSize|1|0x02|Two bytes per audio subframe\n 00955 (AUDDSpeakerDriver_BYTESPERSAMPLE). 00956 |6|bBitResolution|1|0x10|16 bits per sample\n 00957 (AUDDSpeakerDriver_BYTESPERSAMPLE * 2). 00958 |7|bSamFreqType|1|0x01|One frequency supported. 00959 |8|tSamFreq|3|4800|4800Hz (AUDDSpeakerDriver_SAMPLERATE). 00960 \endif 00961 00962 <table><tr> 00963 <td><b>Offset</b></td> 00964 <td><b>Field</b></td> 00965 <td><b>Size</b></td> 00966 <td><b>Value</b></td> 00967 <td><b>Description</b></td></tr> 00968 <tr> 00969 <td>0</td> 00970 <td>bLength</td> 00971 <td>1</td> 00972 <td>0x0B</td> 00973 <td>Size of \ref AUDFormatTypeOneDescriptor1 in bytes.</td></tr> 00974 <tr> 00975 <td>1</td> 00976 <td>bDescriptorType</td> 00977 <td>1</td> 00978 <td>0x24</td> 00979 <td>CS_INTERFACE descriptor<br>(\ref AUDGenericDescriptor_INTERFACE).</td></tr> 00980 <tr> 00981 <td>2</td> 00982 <td>bDescriptorSubType</td> 00983 <td>1</td> 00984 <td>0x02</td> 00985 <td>FORMAT_TYPE subtype<br>(\ref AUDStreamingInterfaceDescriptor_FORMATTYPE).</td></tr> 00986 <tr> 00987 <td>3</td> 00988 <td>bFormatType</td> 00989 <td>1</td> 00990 <td>0x01</td> 00991 <td>FORMAT_TYPE_I (\ref AUDFormatTypeOneDescriptor_FORMATTYPEONE).</td></tr> 00992 <tr> 00993 <td>4</td> 00994 <td>bNrChannels</td> 00995 <td>1</td> 00996 <td>0x02</td> 00997 <td>2 channels (\ref AUDDSpeakerDriver_NUMCHANNELS).</td></tr> 00998 <tr> 00999 <td>5</td> 01000 <td>bSubFrameSize</td> 01001 <td>1</td> 01002 <td>0x02</td> 01003 <td>Two bytes per audio subframe<br>(\ref AUDDSpeakerDriver_BYTESPERSAMPLE).</td></tr> 01004 <tr> 01005 <td>6</td> 01006 <td>bBitResolution</td> 01007 <td>1</td> 01008 <td>0x10</td> 01009 <td>16 bits per sample<br>(\ref AUDDSpeakerDriver_BYTESPERSAMPLE * 2).</td></tr> 01010 <tr> 01011 <td>7</td> 01012 <td>bSamFreqType</td> 01013 <td>1</td> 01014 <td>0x01</td> 01015 <td>One frequency supported.</td></tr> 01016 <tr> 01017 <td>8</td> 01018 <td>tSamFreq</td> 01019 <td>3</td> 01020 <td>4800</td> 01021 <td>4800Hz (\ref AUDDSpeakerDriver_SAMPLERATE).</td></tr> 01022 </table> 01023 01024 Standard Endpoint Descriptor (\ref AUDEndpointDescriptor) 01025 01026 \if doxys_table 01027 ||Offset||Field||Size||Value||Description 01028 |0|bLength|1|0x09|Size of AUDFormatTypeOneDescriptor1 in bytes. 01029 |1|bDescriptorType|1|0x24|ENDPOINT descriptor (USBGenericDescriptor_ENDPOINT). 01030 |2|bEndpointAddress|1|0x04\nTest|OUT endpoint 4\n 01031 See USBEndpointDescriptor_ADDRESS\n 01032 See AUDDSpeakerDriverDescriptors_DATAOUT. 01033 |3|bmAttributes|1|0x01|Isochronous, not shared\n 01034 (USBEndpointDescriptor_ISOCHRONOUS). 01035 |4|wMaxPacketSize|2|0x????|CHIP_USB_ENDPOINTS_MAXPACKETSIZE(). 01036 |6|bInterval|1|0x01|One packet per frame. 01037 |7|bRefresh|1|0x00|Unused. 01038 |8|bSynchAddress|1|0x00|Unused. 01039 \endif 01040 01041 <table><tr> 01042 <td><b>Offset</b></td> 01043 <td><b>Field</b></td> 01044 <td><b>Size</b></td> 01045 <td><b>Value</b></td> 01046 <td><b>Description</b></td></tr> 01047 <tr> 01048 <td>0</td> 01049 <td>bLength</td> 01050 <td>1</td> 01051 <td>0x09</td> 01052 <td>Size of \ref AUDFormatTypeOneDescriptor1 in bytes.</td></tr> 01053 <tr> 01054 <td>1</td> 01055 <td>bDescriptorType</td> 01056 <td>1</td> 01057 <td>0x24</td> 01058 <td>ENDPOINT descriptor (\ref USBGenericDescriptor_ENDPOINT).</td></tr> 01059 <tr> 01060 <td>2</td> 01061 <td>bEndpointAddress</td> 01062 <td>1</td> 01063 <td>0x04<br>Test</td> 01064 <td>OUT endpoint 4<br>See \ref USBEndpointDescriptor_ADDRESS<br>See \ref AUDDSpeakerDriverDescriptors_DATAOUT.</td></tr> 01065 <tr> 01066 <td>3</td> 01067 <td>bmAttributes</td> 01068 <td>1</td> 01069 <td>0x01</td> 01070 <td>Isochronous, not shared<br>(\ref USBEndpointDescriptor_ISOCHRONOUS).</td></tr> 01071 <tr> 01072 <td>4</td> 01073 <td>wMaxPacketSize</td> 01074 <td>2</td> 01075 <td>0x????</td> 01076 <td>\ref CHIP_USB_ENDPOINTS_MAXPACKETSIZE().</td></tr> 01077 <tr> 01078 <td>6</td> 01079 <td>bInterval</td> 01080 <td>1</td> 01081 <td>0x01</td> 01082 <td>One packet per frame.</td></tr> 01083 <tr> 01084 <td>7</td> 01085 <td>bRefresh</td> 01086 <td>1</td> 01087 <td>0x00</td> 01088 <td>Unused.</td></tr> 01089 <tr> 01090 <td>8</td> 01091 <td>bSynchAddress</td> 01092 <td>1</td> 01093 <td>0x00</td> 01094 <td>Unused.</td></tr> 01095 </table> 01096 01097 Class-specific Isochronous Audio Data Endpoint Descriptor 01098 (\ref AUDDataEndpointDescriptor) 01099 01100 \if doxys_table 01101 ||Offset||Field||Size||Value||Description 01102 |0|bLength|1|0x07|Size of AUDDataEndpointDescriptor in bytes. 01103 |1|bDescriptorType|1|0x25|CS_ENDPOINT descriptor\n 01104 (AUDGenericDescriptor_ENDPOINT). 01105 |2|bDescriptorSubType|1|0x01|GENERAL subtype\n 01106 (AUDDataEndpointDescriptor_SUBTYPE). 01107 |3|bmAttributes|1|0x00|No sampling frequency control\n 01108 no pitch control\n 01109 no packet padding. 01110 |4|bLockDelayUnits|1|0x00|Unused. 01111 |5|wLockDelay|2|0x0000|Unused. 01112 \endif 01113 01114 <table><tr> 01115 <td><b>Offset</b></td> 01116 <td><b>Field</b></td> 01117 <td><b>Size</b></td> 01118 <td><b>Value</b></td> 01119 <td><b>Description</b></td></tr> 01120 <tr> 01121 <td>0</td> 01122 <td>bLength</td> 01123 <td>1</td> 01124 <td>0x07</td> 01125 <td>Size of \ref AUDDataEndpointDescriptor in bytes.</td></tr> 01126 <tr> 01127 <td>1</td> 01128 <td>bDescriptorType</td> 01129 <td>1</td> 01130 <td>0x25</td> 01131 <td>CS_ENDPOINT descriptor<br>(\ref AUDGenericDescriptor_ENDPOINT).</td></tr> 01132 <tr> 01133 <td>2</td> 01134 <td>bDescriptorSubType</td> 01135 <td>1</td> 01136 <td>0x01</td> 01137 <td>GENERAL subtype<br>(\ref AUDDataEndpointDescriptor_SUBTYPE).</td></tr> 01138 <tr> 01139 <td>3</td> 01140 <td>bmAttributes</td> 01141 <td>1</td> 01142 <td>0x00</td> 01143 <td>No sampling frequency control<br>no pitch control<br>no packet padding.</td></tr> 01144 <tr> 01145 <td>4</td> 01146 <td>bLockDelayUnits</td> 01147 <td>1</td> 01148 <td>0x00</td> 01149 <td>Unused.</td></tr> 01150 <tr> 01151 <td>5</td> 01152 <td>wLockDelay</td> 01153 <td>2</td> 01154 <td>0x0000</td> 01155 <td>Unused.</td></tr> 01156 </table> 01157 01158 \subsection str_desc String Descriptors 01159 There are three string descriptors available. The Manufacturer, Product and 01160 Serial Number descriptor. 01161 01162 See \ref manufacturerDescriptor, \ref productDescriptor, \ref serialNumberDescriptor. 01163 01164 \section Requests 01165 The Audio Speaker Driver supports all necessary standard requests, and some 01166 class-specific requests. 01167 01168 USBDCallbacks_RequestReceived() is used to filter all requests, 01169 AUDDSpeakerDriver_RequestHandler() is invoked to handle Audio Class requests 01170 and forward standard request to AUDDSpeakerDriver_RequestHandler(). 01171 01172 \subsection std_req Standard requests 01173 Set Interface request should be processed to control bandwidth allocation. 01174 01175 \subsubsection set_if Set Interface 01176 USBDDriverCallbacks_InterfaceSettingChanged() is re-implemented to handle the 01177 event. 01178 01179 \if doxys_table 01180 ||Offset||Field||Size||Value||Description 01181 |0|bmRequestType|1|0x01|D7:0=Host to Device.\n 01182 D6..5:00=Standard Request.\n 01183 D4..0:00001=Recipient is interface. 01184 |1|bRequest|1|0x0B|SET_INTERFACE. 01185 |2|wValue|2|0x0000\n 01186 or\n 01187 0x0001|Zero bandwidth or normal isochronous operation. 01188 |4|wIndex|2|0x0001|Interface number of the AudioStreaming interface. 01189 |6|wLength|2|0x0000|No Parameter Block. 01190 \endif 01191 01192 <table><tr> 01193 <td><b>Offset</b></td> 01194 <td><b>Field</b></td> 01195 <td><b>Size</b></td> 01196 <td><b>Value</b></td> 01197 <td><b>Description</b></td></tr> 01198 <tr> 01199 <td>0</td> 01200 <td>bmRequestType</td> 01201 <td>1</td> 01202 <td>0x01</td> 01203 <td>D7:0=Host to Device.<br>D6..5:00=Standard Request.<br>D4..0:00001=Recipient is interface.</td></tr> 01204 <tr> 01205 <td>1</td> 01206 <td>bRequest</td> 01207 <td>1</td> 01208 <td>0x0B</td> 01209 <td>SET_INTERFACE.</td></tr> 01210 <tr> 01211 <td>2</td> 01212 <td>wValue</td> 01213 <td>2</td> 01214 <td>0x0000<br>or<br>0x0001</td> 01215 <td>Zero bandwidth or normal isochronous operation.</td></tr> 01216 <tr> 01217 <td>4</td> 01218 <td>wIndex</td> 01219 <td>2</td> 01220 <td>0x0001</td> 01221 <td>Interface number of the AudioStreaming interface.</td></tr> 01222 <tr> 01223 <td>6</td> 01224 <td>wLength</td> 01225 <td>2</td> 01226 <td>0x0000</td> 01227 <td>No Parameter Block.</td></tr> 01228 </table> 01229 01230 \subsection class_spec_req Class-specific requests 01231 The only class-specific Request supported is the Set/Get Feature Unit Control 01232 Request. For mute control of the Feature Unit. 01233 01234 \subsubsection set_fu_ctrl_req Set Feature Unit Control Request 01235 01236 \if doxys_table 01237 ||Offset||Field||Size||Value||Description 01238 |0|bmRequestType|1|0x01|D7:0=Host to Device.\n 01239 D6..5:01=Class Request.\n 01240 D4..0:00001=Recipient is interface. 01241 |1|bRequest|1|0x01|SET_CUR. 01242 |2|wValue|2|0x0100|Mute control (AUDFeatureUnitRequest_MUTE) of\n 01243 Master channel (AUDDSpeakerDriver_MASTERCHANNEL). 01244 |4|wIndex|2|0x0200|Feature Unit (AUDDSpeakerDriverDescriptors_FEATUREUNIT)\n 01245 and\n 01246 AudioControl Interface (AUDDSpeakerDriverDescriptors_CONTROL). 01247 |6|wLength|2|0x0001|Paramter Block Length 01248 \endif 01249 01250 <table><tr> 01251 <td><b>Offset</b></td> 01252 <td><b>Field</b></td> 01253 <td><b>Size</b></td> 01254 <td><b>Value</b></td> 01255 <td><b>Description</b></td></tr> 01256 <tr> 01257 <td>0</td> 01258 <td>bmRequestType</td> 01259 <td>1</td> 01260 <td>0x01</td> 01261 <td>D7:0=Host to Device.<br>D6..5:01=Class Request.<br>D4..0:00001=Recipient is interface.</td></tr> 01262 <tr> 01263 <td>1</td> 01264 <td>bRequest</td> 01265 <td>1</td> 01266 <td>0x01</td> 01267 <td>SET_CUR.</td></tr> 01268 <tr> 01269 <td>2</td> 01270 <td>wValue</td> 01271 <td>2</td> 01272 <td>0x0100</td> 01273 <td>Mute control (\ref AUDFeatureUnitRequest_MUTE) of<br>Master channel (\ref AUDDSpeakerDriver_MASTERCHANNEL).</td></tr> 01274 <tr> 01275 <td>4</td> 01276 <td>wIndex</td> 01277 <td>2</td> 01278 <td>0x0200</td> 01279 <td>Feature Unit (\ref AUDDSpeakerDriverDescriptors_FEATUREUNIT)<br>and<br>AudioControl Interface (\ref AUDDSpeakerDriverDescriptors_CONTROL).</td></tr> 01280 <tr> 01281 <td>6</td> 01282 <td>wLength</td> 01283 <td>2</td> 01284 <td>0x0001</td> 01285 <td>Paramter Block Length</td></tr> 01286 </table> 01287 01288 The one-byte Parameter Block contains the new bMuted value for Feature 01289 Control. 01290 01291 \subsubsection get_fu_ctrl_req Get Feature Unit Control Request 01292 01293 \if doxys_table 01294 ||Offset||Field||Size||Value||Description 01295 |0|bmRequestType|1|0x01|D7:0=Host to Device.\n 01296 D6..5:01=Class Request.\n 01297 D4..0:00001=Recipient is interface. 01298 |1|bRequest|1|0x81|GET_CUR. 01299 |2|wValue|2|0x0100|Mute control (AUDFeatureUnitRequest_MUTE) of\n 01300 Master channel (AUDDSpeakerDriver_MASTERCHANNEL). 01301 |4|wIndex|2|0x0200|Feature Unit (AUDDSpeakerDriverDescriptors_FEATUREUNIT)\n 01302 and\n 01303 AudioControl Interface (AUDDSpeakerDriverDescriptors_CONTROL). 01304 |6|wLength|2|0x0001|Paramter Block Length 01305 \endif 01306 01307 <table><tr> 01308 <td><b>Offset</b></td> 01309 <td><b>Field</b></td> 01310 <td><b>Size</b></td> 01311 <td><b>Value</b></td> 01312 <td><b>Description</b></td></tr> 01313 <tr> 01314 <td>0</td> 01315 <td>bmRequestType</td> 01316 <td>1</td> 01317 <td>0x01</td> 01318 <td>D7:0=Host to Device.<br>D6..5:01=Class Request.<br>D4..0:00001=Recipient is interface.</td></tr> 01319 <tr> 01320 <td>1</td> 01321 <td>bRequest</td> 01322 <td>1</td> 01323 <td>0x81</td> 01324 <td>GET_CUR.</td></tr> 01325 <tr> 01326 <td>2</td> 01327 <td>wValue</td> 01328 <td>2</td> 01329 <td>0x0100</td> 01330 <td>Mute control (\ref AUDFeatureUnitRequest_MUTE) of<br>Master channel (\ref AUDDSpeakerDriver_MASTERCHANNEL).</td></tr> 01331 <tr> 01332 <td>4</td> 01333 <td>wIndex</td> 01334 <td>2</td> 01335 <td>0x0200</td> 01336 <td>Feature Unit (\ref AUDDSpeakerDriverDescriptors_FEATUREUNIT)<br>and<br>AudioControl Interface (\ref AUDDSpeakerDriverDescriptors_CONTROL).</td></tr> 01337 <tr> 01338 <td>6</td> 01339 <td>wLength</td> 01340 <td>2</td> 01341 <td>0x0001</td> 01342 <td>Paramter Block Length</td></tr> 01343 </table> 01344 01345 The one-byte Parameter Block contains the new bMuted value for Feature 01346 Control. 01347 01348 \section modify_driver Modify the Device Driver 01349 You can modify your project from the USB Audio Demoes: 01350 - usb_audio_speaker (See \ref usb_audio_speaker). 01351 01352 \subsection change_id Change Device ID and Display 01353 All Device ID and Display Strings are in AUDDSpeakerDriverDescriptors.c. 01354 01355 \subsubsection did Device IDs 01356 You can find in \ref usbd_audio_id "Audio Speaker Device Codes": 01357 - \ref AUDDSpeakerDriverDescriptors_VENDORID 01358 - \ref AUDDSpeakerDriverDescriptors_PRODUCTID 01359 - \ref AUDDSpeakerDriverDescriptors_RELEASE 01360 01361 \subsubsection dstr Display Strings 01362 You can modify the string descriptors 01363 - \ref manufacturerDescriptor 01364 - \ref productDescriptor 01365 - \ref serialNumberDescriptor 01366 01367 \section Add Recorder Function 01368 See \ref usbd_audio_rec_drv "USB Audio Recorder". 01369 01370 */ 01371 01372 /** 01373 \page usbd_audio_rec_drv USB Device Audio Recorder 01374 This page describes how to add recorder function into the 01375 \ref usbd_audio_speaker_drv "USB Audio Speaker Device", 01376 so that you can learn how to extend your audio 01377 device driver from current Audio Speaker demo. 01378 01379 \section Description 01380 To add audio record function, new Input Terminal, Output Termnial and Feature 01381 Unit is added. 01382 01383 \image html UsbAudioSpeakerRecorder.png "USB Desktop Speaker Hierarchy" 01384 01385 \section m_cfg_desc Modify the configuration descriptor: 01386 New descriptor for the terminals and unit should be added, and according 01387 interface, too. 01388 01389 \image html UsbAudioSpeakerRecorderDescriptors.png "USB Desktop Speaker Descriptors" 01390 01391 \subsection t_u_desc Terminal Descriptors and Unit Descriptor 01392 01393 \subsubsection it_desc Input Terminal Descriptor for recording 01394 01395 \if doxys_table 01396 ||Offset||Field||Size||Value||Description 01397 |0|bLength|1|0x0C|Size of this descriptor, in bytes. 01398 |1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n 01399 (AUDGenericDescriptor_INTERFACE). 01400 |2|bDescriptorSubType|1|0x03|INPUT_TERMINAL subtype\n 01401 (AUDGenericDescriptor_INPUTTERMINAL). 01402 |3|bTerminalID|1|0x03|ID of this Input Terminal\n 01403 (AUDDSpeakerDriverDescriptors_INPUTTERMINAL_REC). 01404 |4|wTerminalType|2|0x0403|Terminal is Speaker Phone\n 01405 (AUDInputTerminalDescriptor_SPEAKERPHONE). 01406 |6|bAssocTerminal|1|0x04|Associated to Output Terminal\n 01407 (AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL_REC). 01408 |7|bNrChannels|1|0x02|Two channel. 01409 |8|wChannelConfig|2|0x0003|Left plus right front channel. 01410 |10|iChannelNames|1|0x00|Unused. 01411 |11|iTerminal|1|0x00|Unused. 01412 \endif 01413 01414 <table><tr> 01415 <td><b>Offset</b></td> 01416 <td><b>Field</b></td> 01417 <td><b>Size</b></td> 01418 <td><b>Value</b></td> 01419 <td><b>Description</b></td></tr> 01420 <tr> 01421 <td>0</td> 01422 <td>bLength</td> 01423 <td>1</td> 01424 <td>0x0C</td> 01425 <td>Size of this descriptor, in bytes.</td></tr> 01426 <tr> 01427 <td>1</td> 01428 <td>bDescriptorType</td> 01429 <td>1</td> 01430 <td>0x24</td> 01431 <td>CS_INTERFACE descriptor<br>(\ref AUDGenericDescriptor_INTERFACE).</td></tr> 01432 <tr> 01433 <td>2</td> 01434 <td>bDescriptorSubType</td> 01435 <td>1</td> 01436 <td>0x03</td> 01437 <td>INPUT_TERMINAL subtype<br>(\ref AUDGenericDescriptor_INPUTTERMINAL).</td></tr> 01438 <tr> 01439 <td>3</td> 01440 <td>bTerminalID</td> 01441 <td>1</td> 01442 <td>0x03</td> 01443 <td>ID of this Input Terminal<br>(\ref AUDDSpeakerDriverDescriptors_INPUTTERMINAL_REC).</td></tr> 01444 <tr> 01445 <td>4</td> 01446 <td>wTerminalType</td> 01447 <td>2</td> 01448 <td>0x0403</td> 01449 <td>Terminal is Speaker Phone<br>(\ref AUDInputTerminalDescriptor_SPEAKERPHONE).</td></tr> 01450 <tr> 01451 <td>6</td> 01452 <td>bAssocTerminal</td> 01453 <td>1</td> 01454 <td>0x04</td> 01455 <td>Associated to Output Terminal<br>(\ref AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL_REC).</td></tr> 01456 <tr> 01457 <td>7</td> 01458 <td>bNrChannels</td> 01459 <td>1</td> 01460 <td>0x02</td> 01461 <td>Two channel.</td></tr> 01462 <tr> 01463 <td>8</td> 01464 <td>wChannelConfig</td> 01465 <td>2</td> 01466 <td>0x0003</td> 01467 <td>Left plus right front channel.</td></tr> 01468 <tr> 01469 <td>10</td> 01470 <td>iChannelNames</td> 01471 <td>1</td> 01472 <td>0x00</td> 01473 <td>Unused.</td></tr> 01474 <tr> 01475 <td>11</td> 01476 <td>iTerminal</td> 01477 <td>1</td> 01478 <td>0x00</td> 01479 <td>Unused.</td></tr> 01480 </table> 01481 01482 \subsubsection ot_desc Output Terminal Descriptor for recording 01483 01484 \if doxys_table 01485 ||Offset||Field||Size||Value||Description 01486 |0|bLength|1|0x09|Size of this descriptor, in bytes. 01487 |1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n 01488 (AUDGenericDescriptor_INTERFACE). 01489 |2|bDescriptorSubType|1|0x04|OUTPUT_TERMINAL subtype\n 01490 (AUDGenericDescriptor_OUTPUTTERMINAL). 01491 |3|bTerminalID|1|0x04|ID of this Output Terminal\n 01492 (AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL_REC). 01493 |4|wTerminalType|2|0x0301|Terminal is USB stream\n 01494 (AUDOutputTerminalDescriptor_USBTREAMING). 01495 |6|bAssocTerminal|1|0x03|Associated to Input Terminal\n 01496 (AUDDSpeakerDriverDescriptors_INPUTTERMINAL_REC). 01497 |7|bSourceID|1|0x05|From Feature Unit\n 01498 (AUDDSpeakerDriverDescriptors_FEATUREUNIT_REC). 01499 |8|iTerminal|1|0x00|Unused. 01500 \endif 01501 01502 <table><tr> 01503 <td><b>Offset</b></td> 01504 <td><b>Field</b></td> 01505 <td><b>Size</b></td> 01506 <td><b>Value</b></td> 01507 <td><b>Description</b></td></tr> 01508 <tr> 01509 <td>0</td> 01510 <td>bLength</td> 01511 <td>1</td> 01512 <td>0x09</td> 01513 <td>Size of this descriptor, in bytes.</td></tr> 01514 <tr> 01515 <td>1</td> 01516 <td>bDescriptorType</td> 01517 <td>1</td> 01518 <td>0x24</td> 01519 <td>CS_INTERFACE descriptor<br>(\ref AUDGenericDescriptor_INTERFACE).</td></tr> 01520 <tr> 01521 <td>2</td> 01522 <td>bDescriptorSubType</td> 01523 <td>1</td> 01524 <td>0x04</td> 01525 <td>OUTPUT_TERMINAL subtype<br>(\ref AUDGenericDescriptor_OUTPUTTERMINAL).</td></tr> 01526 <tr> 01527 <td>3</td> 01528 <td>bTerminalID</td> 01529 <td>1</td> 01530 <td>0x04</td> 01531 <td>ID of this Output Terminal<br>(\ref AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL_REC).</td></tr> 01532 <tr> 01533 <td>4</td> 01534 <td>wTerminalType</td> 01535 <td>2</td> 01536 <td>0x0301</td> 01537 <td>Terminal is USB stream<br>(\ref AUDOutputTerminalDescriptor_USBTREAMING).</td></tr> 01538 <tr> 01539 <td>6</td> 01540 <td>bAssocTerminal</td> 01541 <td>1</td> 01542 <td>0x03</td> 01543 <td>Associated to Input Terminal<br>(\ref AUDDSpeakerDriverDescriptors_INPUTTERMINAL_REC).</td></tr> 01544 <tr> 01545 <td>7</td> 01546 <td>bSourceID</td> 01547 <td>1</td> 01548 <td>0x05</td> 01549 <td>From Feature Unit<br>(\ref AUDDSpeakerDriverDescriptors_FEATUREUNIT_REC).</td></tr> 01550 <tr> 01551 <td>8</td> 01552 <td>iTerminal</td> 01553 <td>1</td> 01554 <td>0x00</td> 01555 <td>Unused.</td></tr> 01556 </table> 01557 01558 \subsubsection fu_desc Feature Unit Descriptor for recording 01559 01560 \if doxys_table 01561 ||Offset||Field||Size||Value||Description 01562 |0|bLength|1|0x0A|Size of this descriptor, in bytes. 01563 |1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n 01564 (AUDGenericDescriptor_INTERFACE). 01565 |2|bDescriptorSubType|1|0x02|FEATURE_UNIT subtype\n 01566 (AUDGenericDescriptor_FEATUREUNIT). 01567 |3|bUnitID|1|0x05|ID of this Feature Unit\n 01568 (AUDDSpeakerDriverDescriptors_FEATUREUNIT_REC). 01569 |4|bSourceID|1|0x03|From Input Terminal\n 01570 (AUDDSpeakerDriverDescriptors_INPUTTERMINAL_REC). 01571 |5|bControlSize|1|0x01|1 byte per channel for controls 01572 |6|bmaControls|3|0x000001|Master channel mute control, no other controls. 01573 |9|iFeature|1|0x00|Unused. 01574 \endif 01575 01576 <table><tr> 01577 <td><b>Offset</b></td> 01578 <td><b>Field</b></td> 01579 <td><b>Size</b></td> 01580 <td><b>Value</b></td> 01581 <td><b>Description</b></td></tr> 01582 <tr> 01583 <td>0</td> 01584 <td>bLength</td> 01585 <td>1</td> 01586 <td>0x0A</td> 01587 <td>Size of this descriptor, in bytes.</td></tr> 01588 <tr> 01589 <td>1</td> 01590 <td>bDescriptorType</td> 01591 <td>1</td> 01592 <td>0x24</td> 01593 <td>CS_INTERFACE descriptor<br>(\ref AUDGenericDescriptor_INTERFACE).</td></tr> 01594 <tr> 01595 <td>2</td> 01596 <td>bDescriptorSubType</td> 01597 <td>1</td> 01598 <td>0x02</td> 01599 <td>FEATURE_UNIT subtype<br>(\ref AUDGenericDescriptor_FEATUREUNIT).</td></tr> 01600 <tr> 01601 <td>3</td> 01602 <td>bUnitID</td> 01603 <td>1</td> 01604 <td>0x05</td> 01605 <td>ID of this Feature Unit<br>(\ref AUDDSpeakerDriverDescriptors_FEATUREUNIT_REC).</td></tr> 01606 <tr> 01607 <td>4</td> 01608 <td>bSourceID</td> 01609 <td>1</td> 01610 <td>0x03</td> 01611 <td>From Input Terminal<br>(\ref AUDDSpeakerDriverDescriptors_INPUTTERMINAL_REC).</td></tr> 01612 <tr> 01613 <td>5</td> 01614 <td>bControlSize</td> 01615 <td>1</td> 01616 <td>0x01</td> 01617 <td>1 byte per channel for controls</td></tr> 01618 <tr> 01619 <td>6</td> 01620 <td>bmaControls</td> 01621 <td>3</td> 01622 <td>0x000001</td> 01623 <td>Master channel mute control, no other controls.</td></tr> 01624 <tr> 01625 <td>9</td> 01626 <td>iFeature</td> 01627 <td>1</td> 01628 <td>0x00</td> 01629 <td>Unused.</td></tr> 01630 </table> 01631 01632 \subsection if_ep_desc Interface Descriptor and Endpoint Descriptor for recording 01633 01634 \subsubsection zb_alt_0 Zero-bandwidth Alternate Setting 0 01635 01636 Standard AS Interface Descriptor (\ref USBInterfaceDescriptor) 01637 01638 \if doxys_table 01639 ||Offset||Field||Size||Value||Description 01640 |0|bLength|1|0x09|Size of this descriptor, in bytes. 01641 |1|bDescriptorType|1|0x04|INTERFACE descriptor\n 01642 (USBGenericDescriptor_INTERFACE). 01643 |2|bInterfaceNumber|1|0x02|Index of this interface. 01644 |3|bAlternateSetting|1|0x00|Index of this setting. 01645 |4|bNumEndpoints|1|0x00|0 endpoint. 01646 |5|bInterfaceClass|1|0x01|AUDIO (AUDStreamingInterfaceDescriptor_CLASS). 01647 |6|bInterfaceSubClass|1|0x02|AUDIO_STREAMING\n 01648 (AUDStreamingInterfaceDescriptor_SUBCLASS). 01649 |7|bInterfaceProtocol|1|0x00|Unused (AUDStreamingInterfaceDescriptor_PROTOCOL). 01650 |8|iInterface|1|0x00|Unused. 01651 \endif 01652 01653 <table><tr> 01654 <td><b>Offset</b></td> 01655 <td><b>Field</b></td> 01656 <td><b>Size</b></td> 01657 <td><b>Value</b></td> 01658 <td><b>Description</b></td></tr> 01659 <tr> 01660 <td>0</td> 01661 <td>bLength</td> 01662 <td>1</td> 01663 <td>0x09</td> 01664 <td>Size of this descriptor, in bytes.</td></tr> 01665 <tr> 01666 <td>1</td> 01667 <td>bDescriptorType</td> 01668 <td>1</td> 01669 <td>0x04</td> 01670 <td>INTERFACE descriptor<br>(\ref USBGenericDescriptor_INTERFACE).</td></tr> 01671 <tr> 01672 <td>2</td> 01673 <td>bInterfaceNumber</td> 01674 <td>1</td> 01675 <td>0x02</td> 01676 <td>Index of this interface.</td></tr> 01677 <tr> 01678 <td>3</td> 01679 <td>bAlternateSetting</td> 01680 <td>1</td> 01681 <td>0x00</td> 01682 <td>Index of this setting.</td></tr> 01683 <tr> 01684 <td>4</td> 01685 <td>bNumEndpoints</td> 01686 <td>1</td> 01687 <td>0x00</td> 01688 <td>0 endpoint.</td></tr> 01689 <tr> 01690 <td>5</td> 01691 <td>bInterfaceClass</td> 01692 <td>1</td> 01693 <td>0x01</td> 01694 <td>AUDIO (\ref AUDStreamingInterfaceDescriptor_CLASS).</td></tr> 01695 <tr> 01696 <td>6</td> 01697 <td>bInterfaceSubClass</td> 01698 <td>1</td> 01699 <td>0x02</td> 01700 <td>AUDIO_STREAMING<br>(\ref AUDStreamingInterfaceDescriptor_SUBCLASS).</td></tr> 01701 <tr> 01702 <td>7</td> 01703 <td>bInterfaceProtocol</td> 01704 <td>1</td> 01705 <td>0x00</td> 01706 <td>Unused (\ref AUDStreamingInterfaceDescriptor_PROTOCOL).</td></tr> 01707 <tr> 01708 <td>8</td> 01709 <td>iInterface</td> 01710 <td>1</td> 01711 <td>0x00</td> 01712 <td>Unused.</td></tr> 01713 </table> 01714 01715 \subsubsection op_alt_1 Operational Alternate Setting 1 01716 01717 Standard AS Interface Descriptor (\ref USBInterfaceDescriptor) 01718 01719 \if doxys_table 01720 ||Offset||Field||Size||Value||Description 01721 |0|bLength|1|0x09|Size of USBInterfaceDescriptor in bytes. 01722 |1|bDescriptorType|1|0x04|INTERFACE descriptor\n 01723 (USBGenericDescriptor_INTERFACE). 01724 |2|bInterfaceNumber|1|0x02|Index of this interface. 01725 |3|bAlternateSetting|1|0x01|Index of this setting. 01726 |4|bNumEndpoints|1|0x01|1 endpoint. 01727 |5|bInterfaceClass|1|0x01|AUDIO (AUDStreamingInterfaceDescriptor_CLASS). 01728 |6|bInterfaceSubClass|1|0x02|AUDIO_STREAMING\n 01729 (AUDStreamingInterfaceDescriptor_SUBCLASS). 01730 |7|bInterfaceProtocol|1|0x00|Unused (AUDStreamingInterfaceDescriptor_PROTOCOL). 01731 |8|iInterface|1|0x00|Unused. 01732 \endif 01733 01734 <table><tr> 01735 <td><b>Offset</b></td> 01736 <td><b>Field</b></td> 01737 <td><b>Size</b></td> 01738 <td><b>Value</b></td> 01739 <td><b>Description</b></td></tr> 01740 <tr> 01741 <td>0</td> 01742 <td>bLength</td> 01743 <td>1</td> 01744 <td>0x09</td> 01745 <td>Size of \ref USBInterfaceDescriptor in bytes.</td></tr> 01746 <tr> 01747 <td>1</td> 01748 <td>bDescriptorType</td> 01749 <td>1</td> 01750 <td>0x04</td> 01751 <td>INTERFACE descriptor<br>(\ref USBGenericDescriptor_INTERFACE).</td></tr> 01752 <tr> 01753 <td>2</td> 01754 <td>bInterfaceNumber</td> 01755 <td>1</td> 01756 <td>0x02</td> 01757 <td>Index of this interface.</td></tr> 01758 <tr> 01759 <td>3</td> 01760 <td>bAlternateSetting</td> 01761 <td>1</td> 01762 <td>0x01</td> 01763 <td>Index of this setting.</td></tr> 01764 <tr> 01765 <td>4</td> 01766 <td>bNumEndpoints</td> 01767 <td>1</td> 01768 <td>0x01</td> 01769 <td>1 endpoint.</td></tr> 01770 <tr> 01771 <td>5</td> 01772 <td>bInterfaceClass</td> 01773 <td>1</td> 01774 <td>0x01</td> 01775 <td>AUDIO (\ref AUDStreamingInterfaceDescriptor_CLASS).</td></tr> 01776 <tr> 01777 <td>6</td> 01778 <td>bInterfaceSubClass</td> 01779 <td>1</td> 01780 <td>0x02</td> 01781 <td>AUDIO_STREAMING<br>(\ref AUDStreamingInterfaceDescriptor_SUBCLASS).</td></tr> 01782 <tr> 01783 <td>7</td> 01784 <td>bInterfaceProtocol</td> 01785 <td>1</td> 01786 <td>0x00</td> 01787 <td>Unused (\ref AUDStreamingInterfaceDescriptor_PROTOCOL).</td></tr> 01788 <tr> 01789 <td>8</td> 01790 <td>iInterface</td> 01791 <td>1</td> 01792 <td>0x00</td> 01793 <td>Unused.</td></tr> 01794 </table> 01795 01796 Class-specific AS General Interface Descriptor (\ref AUDStreamingInterfaceDescriptor) 01797 01798 \if doxys_table 01799 ||Offset||Field||Size||Value||Description 01800 |0|bLength|1|0x06|Size of AUDStreamingInterfaceDescriptor in bytes. 01801 |1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n 01802 (AUDGenericDescriptor_INTERFACE). 01803 |2|bDescriptorSubType|1|0x01|GENERAL subtype\n 01804 (AUDStreamingInterfaceDescriptor_GENERAL). 01805 |3|bTerminalLink|1|0x02|Unit ID of the Input Terminal\n 01806 (AUDDSpeakerDriverDescriptors_INPUTTERMINAL). 01807 |4|bDelay|1|0x00|No interface delay. 01808 |5|wFormatTag|2|0x0001|PCM Format (AUDFormatTypeOneDescriptor_PCM). 01809 \endif 01810 01811 <table><tr> 01812 <td><b>Offset</b></td> 01813 <td><b>Field</b></td> 01814 <td><b>Size</b></td> 01815 <td><b>Value</b></td> 01816 <td><b>Description</b></td></tr> 01817 <tr> 01818 <td>0</td> 01819 <td>bLength</td> 01820 <td>1</td> 01821 <td>0x06</td> 01822 <td>Size of \ref AUDStreamingInterfaceDescriptor in bytes.</td></tr> 01823 <tr> 01824 <td>1</td> 01825 <td>bDescriptorType</td> 01826 <td>1</td> 01827 <td>0x24</td> 01828 <td>CS_INTERFACE descriptor<br>(\ref AUDGenericDescriptor_INTERFACE).</td></tr> 01829 <tr> 01830 <td>2</td> 01831 <td>bDescriptorSubType</td> 01832 <td>1</td> 01833 <td>0x01</td> 01834 <td>GENERAL subtype<br>(\ref AUDStreamingInterfaceDescriptor_GENERAL).</td></tr> 01835 <tr> 01836 <td>3</td> 01837 <td>bTerminalLink</td> 01838 <td>1</td> 01839 <td>0x02</td> 01840 <td>Unit ID of the Input Terminal<br>(\ref AUDDSpeakerDriverDescriptors_INPUTTERMINAL).</td></tr> 01841 <tr> 01842 <td>4</td> 01843 <td>bDelay</td> 01844 <td>1</td> 01845 <td>0x00</td> 01846 <td>No interface delay.</td></tr> 01847 <tr> 01848 <td>5</td> 01849 <td>wFormatTag</td> 01850 <td>2</td> 01851 <td>0x0001</td> 01852 <td>PCM Format (\ref AUDFormatTypeOneDescriptor_PCM).</td></tr> 01853 </table> 01854 01855 Type I Format Type Descriptor (\ref AUDFormatTypeOneDescriptor1) 01856 01857 \if doxys_table 01858 ||Offset||Field||Size||Value||Description 01859 |0|bLength|1|0x0B|Size of AUDFormatTypeOneDescriptor1 in bytes. 01860 |1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n 01861 (AUDGenericDescriptor_INTERFACE). 01862 |2|bDescriptorSubType|1|0x02|FORMAT_TYPE subtype\n 01863 (AUDStreamingInterfaceDescriptor_FORMATTYPE). 01864 |3|bFormatType|1|0x01|FORMAT_TYPE_I (AUDFormatTypeOneDescriptor_FORMATTYPEONE). 01865 |4|bNrChannels|1|0x02|2 channels (AUDDSpeakerDriver_NUMCHANNELS). 01866 |5|bSubFrameSize|1|0x02|Two bytes per audio subframe\n 01867 (AUDDSpeakerDriver_BYTESPERSAMPLE). 01868 |6|bBitResolution|1|0x10|16 bits per sample\n 01869 (AUDDSpeakerDriver_BYTESPERSAMPLE * 2). 01870 |7|bSamFreqType|1|0x01|One frequency supported. 01871 |8|tSamFreq|3|4800|4800Hz (AUDDSpeakerDriver_SAMPLERATE). 01872 \endif 01873 01874 <table><tr> 01875 <td><b>Offset</b></td> 01876 <td><b>Field</b></td> 01877 <td><b>Size</b></td> 01878 <td><b>Value</b></td> 01879 <td><b>Description</b></td></tr> 01880 <tr> 01881 <td>0</td> 01882 <td>bLength</td> 01883 <td>1</td> 01884 <td>0x0B</td> 01885 <td>Size of \ref AUDFormatTypeOneDescriptor1 in bytes.</td></tr> 01886 <tr> 01887 <td>1</td> 01888 <td>bDescriptorType</td> 01889 <td>1</td> 01890 <td>0x24</td> 01891 <td>CS_INTERFACE descriptor<br>(\ref AUDGenericDescriptor_INTERFACE).</td></tr> 01892 <tr> 01893 <td>2</td> 01894 <td>bDescriptorSubType</td> 01895 <td>1</td> 01896 <td>0x02</td> 01897 <td>FORMAT_TYPE subtype<br>(\ref AUDStreamingInterfaceDescriptor_FORMATTYPE).</td></tr> 01898 <tr> 01899 <td>3</td> 01900 <td>bFormatType</td> 01901 <td>1</td> 01902 <td>0x01</td> 01903 <td>FORMAT_TYPE_I (\ref AUDFormatTypeOneDescriptor_FORMATTYPEONE).</td></tr> 01904 <tr> 01905 <td>4</td> 01906 <td>bNrChannels</td> 01907 <td>1</td> 01908 <td>0x02</td> 01909 <td>2 channels (\ref AUDDSpeakerDriver_NUMCHANNELS).</td></tr> 01910 <tr> 01911 <td>5</td> 01912 <td>bSubFrameSize</td> 01913 <td>1</td> 01914 <td>0x02</td> 01915 <td>Two bytes per audio subframe<br>(\ref AUDDSpeakerDriver_BYTESPERSAMPLE).</td></tr> 01916 <tr> 01917 <td>6</td> 01918 <td>bBitResolution</td> 01919 <td>1</td> 01920 <td>0x10</td> 01921 <td>16 bits per sample<br>(\ref AUDDSpeakerDriver_BYTESPERSAMPLE * 2).</td></tr> 01922 <tr> 01923 <td>7</td> 01924 <td>bSamFreqType</td> 01925 <td>1</td> 01926 <td>0x01</td> 01927 <td>One frequency supported.</td></tr> 01928 <tr> 01929 <td>8</td> 01930 <td>tSamFreq</td> 01931 <td>3</td> 01932 <td>4800</td> 01933 <td>4800Hz (\ref AUDDSpeakerDriver_SAMPLERATE).</td></tr> 01934 </table> 01935 01936 Standard Endpoint Descriptor (\ref AUDEndpointDescriptor) 01937 01938 \if doxys_table 01939 ||Offset||Field||Size||Value||Description 01940 |0|bLength|1|0x09|Size of AUDFormatTypeOneDescriptor1 in bytes. 01941 |1|bDescriptorType|1|0x24|ENDPOINT descriptor (USBGenericDescriptor_ENDPOINT). 01942 |2|bEndpointAddress|1|0x85|IN endpoint 5\n 01943 USBEndpointDescriptor_ADDRESS()\n 01944 AUDDSpeakerDriverDescriptors_DATAIN 01945 |3|bmAttributes|1|0x01|Isochronous, not shared\n 01946 (USBEndpointDescriptor_ISOCHRONOUS). 01947 |4|wMaxPacketSize|2|0x????|CHIP_USB_ENDPOINTS_MAXPACKETSIZE(5). 01948 |6|bInterval|1|0x01|One packet per frame. 01949 |7|bRefresh|1|0x00|Unused. 01950 |8|bSynchAddress|1|0x00|Unused. 01951 \endif 01952 01953 <table><tr> 01954 <td><b>Offset</b></td> 01955 <td><b>Field</b></td> 01956 <td><b>Size</b></td> 01957 <td><b>Value</b></td> 01958 <td><b>Description</b></td></tr> 01959 <tr> 01960 <td>0</td> 01961 <td>bLength</td> 01962 <td>1</td> 01963 <td>0x09</td> 01964 <td>Size of \ref AUDFormatTypeOneDescriptor1 in bytes.</td></tr> 01965 <tr> 01966 <td>1</td> 01967 <td>bDescriptorType</td> 01968 <td>1</td> 01969 <td>0x24</td> 01970 <td>ENDPOINT descriptor (\ref USBGenericDescriptor_ENDPOINT).</td></tr> 01971 <tr> 01972 <td>2</td> 01973 <td>bEndpointAddress</td> 01974 <td>1</td> 01975 <td>0x85</td> 01976 <td>IN endpoint 5<br>\ref USBEndpointDescriptor_ADDRESS()<br>\ref AUDDSpeakerDriverDescriptors_DATAIN</td></tr> 01977 <tr> 01978 <td>3</td> 01979 <td>bmAttributes</td> 01980 <td>1</td> 01981 <td>0x01</td> 01982 <td>Isochronous, not shared<br>(\ref USBEndpointDescriptor_ISOCHRONOUS).</td></tr> 01983 <tr> 01984 <td>4</td> 01985 <td>wMaxPacketSize</td> 01986 <td>2</td> 01987 <td>0x????</td> 01988 <td>\ref CHIP_USB_ENDPOINTS_MAXPACKETSIZE(5).</td></tr> 01989 <tr> 01990 <td>6</td> 01991 <td>bInterval</td> 01992 <td>1</td> 01993 <td>0x01</td> 01994 <td>One packet per frame.</td></tr> 01995 <tr> 01996 <td>7</td> 01997 <td>bRefresh</td> 01998 <td>1</td> 01999 <td>0x00</td> 02000 <td>Unused.</td></tr> 02001 <tr> 02002 <td>8</td> 02003 <td>bSynchAddress</td> 02004 <td>1</td> 02005 <td>0x00</td> 02006 <td>Unused.</td></tr> 02007 </table> 02008 02009 Class-specific Isochronous Audio Data Endpoint Descriptor 02010 (\ref AUDDataEndpointDescriptor) 02011 02012 \if doxys_table 02013 ||Offset||Field||Size||Value||Description 02014 |0|bLength|1|0x07|Size of AUDDataEndpointDescriptor in bytes. 02015 |1|bDescriptorType|1|0x25|CS_ENDPOINT descriptor\n 02016 (AUDGenericDescriptor_ENDPOINT). 02017 |2|bDescriptorSubType|1|0x01|GENERAL subtype\n 02018 (AUDDataEndpointDescriptor_SUBTYPE). 02019 |3|bmAttributes|1|0x00|No sampling frequency control\n 02020 no pitch control\n 02021 no packet padding 02022 |4|bLockDelayUnits|1|0x00|Unused. 02023 |5|wLockDelay|2|0x0000|Unused. 02024 \endif 02025 02026 <table><tr> 02027 <td><b>Offset</b></td> 02028 <td><b>Field</b></td> 02029 <td><b>Size</b></td> 02030 <td><b>Value</b></td> 02031 <td><b>Description</b></td></tr> 02032 <tr> 02033 <td>0</td> 02034 <td>bLength</td> 02035 <td>1</td> 02036 <td>0x07</td> 02037 <td>Size of \ref AUDDataEndpointDescriptor in bytes.</td></tr> 02038 <tr> 02039 <td>1</td> 02040 <td>bDescriptorType</td> 02041 <td>1</td> 02042 <td>0x25</td> 02043 <td>CS_ENDPOINT descriptor<br>(\ref AUDGenericDescriptor_ENDPOINT).</td></tr> 02044 <tr> 02045 <td>2</td> 02046 <td>bDescriptorSubType</td> 02047 <td>1</td> 02048 <td>0x01</td> 02049 <td>GENERAL subtype<br>(\ref AUDDataEndpointDescriptor_SUBTYPE).</td></tr> 02050 <tr> 02051 <td>3</td> 02052 <td>bmAttributes</td> 02053 <td>1</td> 02054 <td>0x00</td> 02055 <td>No sampling frequency control<br>no pitch control<br>no packet padding</td></tr> 02056 <tr> 02057 <td>4</td> 02058 <td>bLockDelayUnits</td> 02059 <td>1</td> 02060 <td>0x00</td> 02061 <td>Unused.</td></tr> 02062 <tr> 02063 <td>5</td> 02064 <td>wLockDelay</td> 02065 <td>2</td> 02066 <td>0x0000</td> 02067 <td>Unused.</td></tr> 02068 </table> 02069 02070 \section modify_fun Modified methods for new function 02071 Several methods modified for new recorder function. 02072 02073 \subsection req_handle_cb Request handlers callbacks 02074 Add handler for new Interface, Terminal and Unit IDs. 02075 See AUDDSpeakerDriver_RequestHandler(). 02076 02077 \subsection add_fun_rec Add function for recording USB stream 02078 See AUDDSpeakerDriver_Write(). 02079 */