SAMV71 Xplained Ultra Software Package 1.5

audio-speaker.dir

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 */
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines