From 044ad7c3987460ede48ff27afd6bdb0ca05a0432 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 4 Jul 2011 20:52:54 +0200 Subject: import at91lib from at91lib_20100901_softpack_1_9_v_1_0_svn_v15011 it's sad to see that atmel doesn't publish their svn repo or has a centralized location or even puts proper version/release info into the library itself --- usb/device/audio-speaker/audio-speaker.dir | 617 +++++++++++++++++++++++++++++ 1 file changed, 617 insertions(+) create mode 100644 usb/device/audio-speaker/audio-speaker.dir (limited to 'usb/device/audio-speaker/audio-speaker.dir') diff --git a/usb/device/audio-speaker/audio-speaker.dir b/usb/device/audio-speaker/audio-speaker.dir new file mode 100644 index 0000000..be90df0 --- /dev/null +++ b/usb/device/audio-speaker/audio-speaker.dir @@ -0,0 +1,617 @@ +/* ---------------------------------------------------------------------------- + * ATMEL Microcontroller Software Support + * ---------------------------------------------------------------------------- + * Copyright (c) 2008, Atmel Corporation + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the disclaimer below. + * + * Atmel's name may not be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * ---------------------------------------------------------------------------- + */ + +//------------------------------------------------------------------------------ +/// \dir +/// +/// !!!Purpose +/// +/// This directory provides definitions, structs and functions for a USB Audio +/// Class device - USB audio-speaker demo, to implement an USB desktop speaker. +/// +/// !!!Contents +/// There are two things for the implement of the audio-speaker device driver: +/// - Implement the audio-speaker driver structs and functions for the device, +/// to initialize, to handle audio class specific requests and dispach +/// standard requests in USBD callbacks, to read/write through assigned USB +/// endpoints, +/// - Create the audio-speaker device's descriptors that should be passed to +/// the USBDDriver instance on initialization, so that the host can +/// recognize the device as a USB audio "desktop speaker" device. +/// +/// For more information about what a particular group contains, please refer to +/// "USB Audio Speaker Device". +//------------------------------------------------------------------------------ + +/** + \page "USB Audio Speaker Device" + This page describes how to use the USB framework to produce a USB Audio Class + Device driver. + + !!!References + - "AT91 USB device framework" + - "USB Device Enumeration" + - + Universal Serial Bus Revision 2.0 specification + (.zip file format, size 9.80 MB) + - + Audio Device Document 1.0 + - + Audio Data Formats 1.0 + - + Autio Terminal Types 1.0 + + !!!Audio Speaker Driver API + - AUDDSpeakerDriver_Initialize + - AUDDSpeakerDriver_RequestHandler + - AUDDSpeakerDriver_Read + + !!!Audio Desktop Speaker Description + The %device described here is a USB desktop speaker. It receives a stero + %audio data stream from the Host over its Audio Streaming interface. The used + Audio Data Format is 16-bit 48KHz 2-channel PCM (or mono 16-bit 32KHz PCM for + sam7s chips). The following is the internal topology of the speaker. + + \image USBAudioSpeaker.png "USB Desktop Speaker Topology" + + The %audio function contains one Onput Terminal that represents the actual + speaker output element, followed by the Digital-to-Analog Converter (DAC). + The digital input stream of the host enters the %audio function through the + single Input %Pin of the Output terminal. There is a Feature Unit on the + %audio stream, to mute or unmute the speaker. The Input Terminal is the + representation within the %audio fucntion of the USB OUT endpoint that + eventually receives the %audio data stream from the Host. The internals of the + %audio function are presented to the Host through the (mandatory) AudioControl + interface wheras the USB OUT endpoint resides in the AudioStreaming interface. + + !!!Descriptor Hierarchy + This USB Desktop Speaker %device includes the AudioControl interface + (interface 0) and a single AudioStreaming interface (interface 1). The + AudioStreaming interface features two alternate settings. The first alternate + setting (Alternate Setting 0) has zero bandwidth associated with it so that + switching to this alternate setting effectively frees all allocated bandwidth + on the USB for this device. Zero bandwidth is indicated by the lack of a + streaming endpoint. Alternate Setting 1 is the operational part of the + interface and it has one isochronous OUT endpoint. Figure presents the + descriptor hierarchy. + + \image UsbAudioSpeakerDescriptors.png "USB Desktop Speaker Hierarchy" + + !!!Descriptors + The following sections present all the descriptors that are used to describe + the %device. + + All descriptors are combined into a list and pass to USBDDriver_Initialize + invoked in AUDDSpeakerDriver_Initialize. + +\code +const USBDDriverDescriptors auddSpeakerDriverDescriptors; +\endcode + + !!Device Descriptor +\code +const USBDeviceDescriptor deviceDescriptor; +\endcode +||Offset||Field||Size||Value||Description +|0|bLength|1|0x12|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x01|DEVICE descriptor (USBGenericDescriptor_DEVICE). +|2|bcdUSB|2|0x0200|2.00 - current revision of USB specification. +|4|bDeviceClass|1|0x00|Device defined at interface level. +|5|bDeviceSubClass|1|0x00|Unused. +|6|bDeviceProtocol|1|0x00|Unused. +|7|bMaxPacketSize0|1|0x08|8 bytes (BOARD_USB_ENDPOINTS_MAXPACKETSIZE(0)). +|8|idVendor|2|0x03EB|Atmel Vendor ID (AUDDSpeakerDriverDescriptors_VENDORID). +|10|idProduct|2|0x6128|Product ID (AUDDSpeakerDriverDescriptors_PRODUCTID). +|12|bcdDevice|2|0x0100|Device Release Code\n + (AUDDSpeakerDriverDescriptors_RELEASE). +|14|iManufacturer|1|0x01|Index to manufacture name in Unicode\n + (manufacturerDescriptor). +|15|iProduct|1|0x02|Index to product name in Unicode (productDescriptor). +|16|iSerialNumber|1|0x03|Index to serial number in Unicode\n + (serialNumberDescriptor). +|17|bNumConfigurations|1|0x01|One configuration. + + !!Configuration Descriptor +\code +const AUDDSpeakerDriverConfigurationDescriptors configurationDescriptors; +\endcode +||Offset||Field||Size||Value||Description +|0|bLength|1|0x09|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x02|CONFIGURATION descriptor\n + (USBGenericDescriptor_CONFIGURATION). +|2|wTotalLength|2|0x????|Length of the total configuration block in bytes\n + including this descriptor\n + (AUDDSpeakerDriverConfigurationDescriptors) +|4|bNumInterfaces|1|0x02|Two interfaces. +|5|bConfigurationValue|1|0x01|ID of this configuration. +|6|iConfiguration|1|0x00|Unused. +|7|bmAttributes|1|0x??|BOARD_USB_BMATTRIBUTES +|8|bMaxPower|1|0x32|100mA Max. %power consumption.\n + USBConfigurationDescriptor_POWER(100) + + !!AudioControl Interface Descriptor + The AudioControl interface describes the %device structure (%audio function + topology) and is used to manipulate the Audio Controls. + + !Standard AC Interface Descriptor + The AudioControl interface has no dedicated endpoints associated with it. It + uses the default pipe (endpoint 0) for all communication purposes. Class- + specific AudioControl Requests are sent using the default pipe. There is no + Status Interrupt endpoint provided. + + See USBInterfaceDescriptor. +||Offset||Field||Size||Value||Description +|0|bLength|1|0x09|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x04|INTERFACE descriptor\n + (USBGenericDescriptor_INTERFACE). +|2|bInterfaceNumber|1|0x00|Index of this interface. +|3|bAlternateSetting|1|0x00|Index of this setting. +|4|bNumEndpoints|1|0x00|0 endpoints. +|5|bInterfaceClass|1|0x01|AUDIO (AUDControlInterfaceDescriptor_CLASS). +|6|bInterfaceSubClass|1|0x01|AUDIO_CONTROL\n + (AUDControlInterfaceDescriptor_SUBCLASS). +|7|bInterfaceProtocol|1|0x00|Unused. +|8|iInterface|1|0x00|Unused. + + !Class-specific AC Interface Descriptor + The Class-specific AC interface descriptor is always headed by a Header + descriptor that contains general information about the AudioControl interface. + It contains all the pointers needed to describe the AudioInterface Collection, + associated with the described %audio function. +||Offset||Field||Size||Value||Description +|0|bLength|1|0x09|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n + (AUDGenericDescriptor_INTERFACE). +|2|bDescriptorSubtype|1|0x01|HEADER subtype (AUDGenericDescriptor_HEADER). +|3|bcdADC|2|0x0100|Revision of class specification - 1.0 +|5|wTotalLength|2|0x????|Total size of class specific descriptors\n + (AUDDSpeakerDriverAudioControlDescriptors). +|7|bInCollection|1|0x01|Number of streaming interfaces. +|8|baInterfaceNr(1)|1|0x01|AudioStreaming interface 1 belongs to this AudioControl interface. + + !Input Terminal Descriptor for playback + This descriptor describes the Input Terminal that represents the USB pipe from + the Host PC. Its Output Pin is connected to the Input Pin of the Feature Unit + ... +||Offset||Field||Size||Value||Description +|0|bLength|1|0x0C|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n + (AUDGenericDescriptor_INTERFACE). +|2|bDescriptorSubType|1|0x02|INPUT_TERMINAL subtype\n + (AUDGenericDescriptor_INPUTTERMINAL). +|3|bTerminalID|1|0x00|ID of this Input Terminal\n + (AUDDSpeakerDriverDescriptors_INPUTTERMINAL). +|4|wTerminalType|2|0x0101|Terminal is USB stream\n + (AUDInputTerminalDescriptor_USBSTREAMING). +|6|bAssocTerminal|1|0x01|Associated to Output Terminal\n + (AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL). +|7|bNrChannels|1|0x02|Two channel. +|8|wChannelConfig|2|0x0003|Left plus right front channel. +|10|iChannelNames|1|0x00|Unused. +|11|iTerminal|1|0x00|Unused. + + !Output Terminal Descriptor for playback + ... +||Offset||Field||Size||Value||Description +|0|bLength|1|0x09|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n + (AUDGenericDescriptor_INTERFACE). +|2|bDescriptorSubType|1|0x03|OUTPUT_TERMINAL subtype\n + (AUDGenericDescriptor_OUTPUTTERMINAL). +|3|bTerminalID|1|0x01|ID of this Output Terminal\n + (AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL). +|4|wTerminalType|2|0x0301|Terminal is Desktop speaker. +|6|bAssocTerminal|1|0x01|Associated to Input Terminal\n + (AUDDSpeakerDriverDescriptors_INPUTTERMINAL). +|7|bSourceID|1|0x02|From Feature Unit\n + (AUDDSpeakerDriverDescriptors_FEATUREUNIT). +|8|iTerminal|1|0x00|Unused. + + !Feature Unit Descriptor for playback + ... +||Offset||Field||Size||Value||Description +|0|bLength|1|0x0A|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n + (AUDGenericDescriptor_INTERFACE). +|2|bDescriptorSubType|1|0x02|FEATURE_UNIT subtype\n + (AUDGenericDescriptor_FEATUREUNIT). +|3|bUnitID|1|0x02|ID of this Feature Unit\n + (AUDDSpeakerDriverDescriptors_FEATUREUNIT). +|4|bSourceID|1|0x00|From Input Terminal\n + (AUDDSpeakerDriverDescriptors_INPUTTERMINAL). +|5|bControlSize|1|0x01|1 byte per channel for controls +|6|bmaControls|3|0x000001|Master channel mute control, no other controls. +|9|iFeature|1|0x00|Unused. + + !!AudioStreaming Interface Descriptor + The AudioStreaming interface has two possible alternate settings. + + !Zero-bandwidth Alternate Setting 0 + Alternate setting 0 is a zero-bandwidth setting, used to relinquish the + claimed bandwidth on the bus when the microphone is not in use. It is the + default setting after power-up. The zero bandwidth is implemented by + specifying that this alternate setting of the interface has no endpoints + associated with it (bNumEndpoints=0). The collection of descriptors for this + alternate setting reduces to the standard interface descriptor. + + Standard AS Interface Descriptor (USBInterfaceDescriptor) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x09|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x04|INTERFACE descriptor\n + (USBGenericDescriptor_INTERFACE). +|2|bInterfaceNumber|1|0x01|Index of this interface. +|3|bAlternateSetting|1|0x00|Index of this setting. +|4|bNumEndpoints|1|0x00|0 endpoint. +|5|bInterfaceClass|1|0x01|AUDIO (AUDStreamingInterfaceDescriptor_CLASS). +|6|bInterfaceSubClass|1|0x02|AUDIO_STREAMING\n + (AUDStreamingInterfaceDescriptor_SUBCLASS). +|7|bInterfaceProtocol|1|0x00|Unused (AUDStreamingInterfaceDescriptor_PROTOCOL). +|8|iInterface|1|0x00|Unused. + + !Operational Alternate Setting 1 + Alternate setting 1 is the operational setting of the interface. It contains + the standard and class-specific interface and endpoint descriptors. + + Standard AS Interface Descriptor (USBInterfaceDescriptor) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x09|Size of USBInterfaceDescriptor in bytes. +|1|bDescriptorType|1|0x04|INTERFACE descriptor\n + (USBGenericDescriptor_INTERFACE). +|2|bInterfaceNumber|1|0x01|Index of this interface. +|3|bAlternateSetting|1|0x01|Index of this setting. +|4|bNumEndpoints|1|0x01|1 endpoint. +|5|bInterfaceClass|1|0x01|AUDIO (AUDStreamingInterfaceDescriptor_CLASS). +|6|bInterfaceSubClass|1|0x02|AUDIO_STREAMING\n + (AUDStreamingInterfaceDescriptor_SUBCLASS). +|7|bInterfaceProtocol|1|0x00|Unused (AUDStreamingInterfaceDescriptor_PROTOCOL). +|8|iInterface|1|0x00|Unused. + + Class-specific AS General Interface Descriptor (AUDStreamingInterfaceDescriptor) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x06|Size of AUDStreamingInterfaceDescriptor in bytes. +|1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n + (AUDGenericDescriptor_INTERFACE). +|2|bDescriptorSubType|1|0x01|GENERAL subtype\n + (AUDStreamingInterfaceDescriptor_GENERAL). +|3|bTerminalLink|1|0x02|Unit ID of the Input Terminal\n + (AUDDSpeakerDriverDescriptors_INPUTTERMINAL). +|4|bDelay|1|0x00|No interface delay. +|5|wFormatTag|2|0x0001|PCM Format (AUDFormatTypeOneDescriptor_PCM). + + Type I Format Type Descriptor (AUDFormatTypeOneDescriptor1) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x0B|Size of AUDFormatTypeOneDescriptor1 in bytes. +|1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\ + (AUDGenericDescriptor_INTERFACE). +|2|bDescriptorSubType|1|0x02|FORMAT_TYPE subtype\n + (AUDStreamingInterfaceDescriptor_FORMATTYPE). +|3|bFormatType|1|0x01|FORMAT_TYPE_I (AUDFormatTypeOneDescriptor_FORMATTYPEONE). +|4|bNrChannels|1|0x02|2 channels (AUDDSpeakerDriver_NUMCHANNELS). +|5|bSubFrameSize|1|0x02|Two bytes per audio subframe\n + (AUDDSpeakerDriver_BYTESPERSAMPLE). +|6|bBitResolution|1|0x10|16 bits per sample\n + (AUDDSpeakerDriver_BYTESPERSAMPLE * 2). +|7|bSamFreqType|1|0x01|One frequency supported. +|8|tSamFreq|3|4800|4800Hz (AUDDSpeakerDriver_SAMPLERATE). + + Standard %Endpoint Descriptor (AUDEndpointDescriptor) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x09|Size of AUDFormatTypeOneDescriptor1 in bytes. +|1|bDescriptorType|1|0x24|ENDPOINT descriptor (USBGenericDescriptor_ENDPOINT). +|2|bEndpointAddress|1|0x04\nTest|OUT endpoint 4\n + See USBEndpointDescriptor_ADDRESS\n + See AUDDSpeakerDriverDescriptors_DATAOUT. +|3|bmAttributes|1|0x01|Isochronous, not shared\n + (USBEndpointDescriptor_ISOCHRONOUS). +|4|wMaxPacketSize|2|0x????|BOARD_USB_ENDPOINTS_MAXPACKETSIZE(). +|6|bInterval|1|0x01|One packet per frame. +|7|bRefresh|1|0x00|Unused. +|8|bSynchAddress|1|0x00|Unused. + + Class-specific Isochronous Audio Data Endpoint Descriptor + (AUDDataEndpointDescriptor) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x07|Size of AUDDataEndpointDescriptor in bytes. +|1|bDescriptorType|1|0x25|CS_ENDPOINT descriptor\n + (AUDGenericDescriptor_ENDPOINT). +|2|bDescriptorSubType|1|0x01|GENERAL subtype\n + (AUDDataEndpointDescriptor_SUBTYPE). +|3|bmAttributes|1|0x00|No sampling frequency control\n + no pitch control\n + no packet padding. +|4|bLockDelayUnits|1|0x00|Unused. +|5|wLockDelay|2|0x0000|Unused. + + !!String Descriptors + There are three string descriptors available. The Manufacturer, Product and + Serial Number descriptor. + + See manufacturerDescriptor, productDescriptor, serialNumberDescriptor. + + !!!Requests + The Audio Speaker Driver supports all necessary standard requests, and some + class-specific requests. + + USBDCallbacks_RequestReceived is used to filter all requests, + AUDDSpeakerDriver_RequestHandler is invoked to handle Audio Class requests + and forward standard request to AUDDSpeakerDriver_RequestHandler. + + !!Standard requests + Set Interface request should be processed to control bandwidth allocation. + + !Set Interface + USBDDriverCallbacks_InterfaceSettingChanged is re-implemented to handle the + event. +||Offset||Field||Size||Value||Description +|0|bmRequestType|1|0x01|D7:0=Host to Device.\n + D6..5:00=Standard Request.\n + D4..0:00001=Recipient is interface. +|1|bRequest|1|0x0B|SET_INTERFACE. +|2|wValue|2|0x0000\n + or\n + 0x0001|Zero bandwidth or normal isochronous operation. +|4|wIndex|2|0x0001|Interface number of the AudioStreaming interface. +|6|wLength|2|0x0000|No Parameter Block. + + !!Class-specific requests + The only class-specific Request supported is the Set/Get Feature Unit Control + Request. For mute control of the Feature Unit. + + !Set Feature Unit Control Request +||Offset||Field||Size||Value||Description +|0|bmRequestType|1|0x01|D7:0=Host to Device.\n + D6..5:01=Class Request.\n + D4..0:00001=Recipient is interface. +|1|bRequest|1|0x01|SET_CUR. +|2|wValue|2|0x0100|Mute control (AUDFeatureUnitRequest_MUTE) of\n + Master channel (AUDDSpeakerDriver_MASTERCHANNEL). +|4|wIndex|2|0x0200|Feature Unit (AUDDSpeakerDriverDescriptors_FEATUREUNIT)\n + and\n + AudioControl Interface (AUDDSpeakerDriverDescriptors_CONTROL). +|6|wLength|2|0x0001|Paramter Block Length + + The one-byte Parameter Block contains the new bMuted value for Feature + Control. + + !Get Feature Unit Control Request +||Offset||Field||Size||Value||Description +|0|bmRequestType|1|0x01|D7:0=Host to Device.\n + D6..5:01=Class Request.\n + D4..0:00001=Recipient is interface. +|1|bRequest|1|0x81|GET_CUR. +|2|wValue|2|0x0100|Mute control (AUDFeatureUnitRequest_MUTE) of\n + Master channel (AUDDSpeakerDriver_MASTERCHANNEL). +|4|wIndex|2|0x0200|Feature Unit (AUDDSpeakerDriverDescriptors_FEATUREUNIT)\n + and\n + AudioControl Interface (AUDDSpeakerDriverDescriptors_CONTROL). +|6|wLength|2|0x0001|Paramter Block Length + + The one-byte Parameter Block contains the new bMuted value for Feature + Control. + + !!!Modify the Device Driver + You can modify your project from the USB Audio Demoes: + - usb-device-audio-speaker-ac97-project + - usb-device-audio-speaker-project + + !!Change Device ID and Display + All Device ID and Display Strings are in AUDDSpeakerDriverDescriptors.c. + + !Device IDs + You can find "Audio Speaker Device Codes" + - AUDDSpeakerDriverDescriptors_VENDORID + - AUDDSpeakerDriverDescriptors_PRODUCTID + - AUDDSpeakerDriverDescriptors_RELEASE + + !Display Strings + You can modify the string descriptors + - manufacturerDescriptor + - productDescriptor + - serialNumberDescriptor + + !!!Add Recorder Function + See "USB Audio Recorder". + +*/ + +/** + \page "USB Audio Recorder" + This page describes how to add recorder function into the + "USB Audio Speaker Device", So that you can learn how to extend your audio + device driver from current Audio Speaker demo. + + !!!Description + To add %audio record function, new Input Terminal, Output Termnial and Feature + Unit is added. + + \image UsbAudioSpeakerRecorder.png "USB Desktop Speaker Hierarchy" + + + !!!Modify the configuration descriptor: + New descriptor for the terminals and unit should be added, and according + interface, too. + + \image UsbAudioSpeakerRecorderDescriptors.png "USB Desktop Speaker Descriptors" + + + + !!Terminal Descriptors and Unit Descriptor + ... + !Input Terminal Descriptor for recording + ... +||Offset||Field||Size||Value||Description +|0|bLength|1|0x0C|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n + (AUDGenericDescriptor_INTERFACE). +|2|bDescriptorSubType|1|0x03|INPUT_TERMINAL subtype\n + (AUDGenericDescriptor_INPUTTERMINAL). +|3|bTerminalID|1|0x03|ID of this Input Terminal\n + (AUDDSpeakerDriverDescriptors_INPUTTERMINAL_REC). +|4|wTerminalType|2|0x0403|Terminal is Speaker Phone\n + (AUDInputTerminalDescriptor_SPEAKERPHONE). +|6|bAssocTerminal|1|0x04|Associated to Output Terminal\n + (AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL_REC). +|7|bNrChannels|1|0x02|Two channel. +|8|wChannelConfig|2|0x0003|Left plus right front channel. +|10|iChannelNames|1|0x00|Unused. +|11|iTerminal|1|0x00|Unused. + + !Output Terminal Descriptor for recording + ... +||Offset||Field||Size||Value||Description +|0|bLength|1|0x09|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n + (AUDGenericDescriptor_INTERFACE). +|2|bDescriptorSubType|1|0x04|OUTPUT_TERMINAL subtype\n + (AUDGenericDescriptor_OUTPUTTERMINAL). +|3|bTerminalID|1|0x04|ID of this Output Terminal\n + (AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL_REC). +|4|wTerminalType|2|0x0301|Terminal is USB stream\n + (AUDOutputTerminalDescriptor_USBTREAMING). +|6|bAssocTerminal|1|0x03|Associated to Input Terminal\n + (AUDDSpeakerDriverDescriptors_INPUTTERMINAL_REC). +|7|bSourceID|1|0x05|From Feature Unit\n + (AUDDSpeakerDriverDescriptors_FEATUREUNIT_REC). +|8|iTerminal|1|0x00|Unused. + + !Feature Unit Descriptor for recording + ... +||Offset||Field||Size||Value||Description +|0|bLength|1|0x0A|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n + (AUDGenericDescriptor_INTERFACE). +|2|bDescriptorSubType|1|0x02|FEATURE_UNIT subtype\n + (AUDGenericDescriptor_FEATUREUNIT). +|3|bUnitID|1|0x05|ID of this Feature Unit\n + (AUDDSpeakerDriverDescriptors_FEATUREUNIT_REC). +|4|bSourceID|1|0x03|From Input Terminal\n + (AUDDSpeakerDriverDescriptors_INPUTTERMINAL_REC). +|5|bControlSize|1|0x01|1 byte per channel for controls +|6|bmaControls|3|0x000001|Master channel mute control, no other controls. +|9|iFeature|1|0x00|Unused. + + !!Interface Descriptor and Endpoint Descriptor for recording + ... + + !Zero-bandwidth Alternate Setting 0 + Standard AS Interface Descriptor (USBInterfaceDescriptor) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x09|Size of this descriptor, in bytes. +|1|bDescriptorType|1|0x04|INTERFACE descriptor\n + (USBGenericDescriptor_INTERFACE). +|2|bInterfaceNumber|1|0x02|Index of this interface. +|3|bAlternateSetting|1|0x00|Index of this setting. +|4|bNumEndpoints|1|0x00|0 endpoint. +|5|bInterfaceClass|1|0x01|AUDIO (AUDStreamingInterfaceDescriptor_CLASS). +|6|bInterfaceSubClass|1|0x02|AUDIO_STREAMING\n + (AUDStreamingInterfaceDescriptor_SUBCLASS). +|7|bInterfaceProtocol|1|0x00|Unused (AUDStreamingInterfaceDescriptor_PROTOCOL). +|8|iInterface|1|0x00|Unused. + + !Operational Alternate Setting 1 + Standard AS Interface Descriptor (USBInterfaceDescriptor) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x09|Size of USBInterfaceDescriptor in bytes. +|1|bDescriptorType|1|0x04|INTERFACE descriptor\n + (USBGenericDescriptor_INTERFACE). +|2|bInterfaceNumber|1|0x02|Index of this interface. +|3|bAlternateSetting|1|0x01|Index of this setting. +|4|bNumEndpoints|1|0x01|1 endpoint. +|5|bInterfaceClass|1|0x01|AUDIO (AUDStreamingInterfaceDescriptor_CLASS). +|6|bInterfaceSubClass|1|0x02|AUDIO_STREAMING\n + (AUDStreamingInterfaceDescriptor_SUBCLASS). +|7|bInterfaceProtocol|1|0x00|Unused (AUDStreamingInterfaceDescriptor_PROTOCOL). +|8|iInterface|1|0x00|Unused. + + Class-specific AS General Interface Descriptor (AUDStreamingInterfaceDescriptor) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x06|Size of AUDStreamingInterfaceDescriptor in bytes. +|1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n + (AUDGenericDescriptor_INTERFACE). +|2|bDescriptorSubType|1|0x01|GENERAL subtype\n + (AUDStreamingInterfaceDescriptor_GENERAL). +|3|bTerminalLink|1|0x02|Unit ID of the Input Terminal\n + (AUDDSpeakerDriverDescriptors_INPUTTERMINAL). +|4|bDelay|1|0x00|No interface delay. +|5|wFormatTag|2|0x0001|PCM Format (AUDFormatTypeOneDescriptor_PCM). + + Type I Format Type Descriptor (AUDFormatTypeOneDescriptor1) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x0B|Size of AUDFormatTypeOneDescriptor1 in bytes. +|1|bDescriptorType|1|0x24|CS_INTERFACE descriptor\n + (AUDGenericDescriptor_INTERFACE). +|2|bDescriptorSubType|1|0x02|FORMAT_TYPE subtype\n + (AUDStreamingInterfaceDescriptor_FORMATTYPE). +|3|bFormatType|1|0x01|FORMAT_TYPE_I (AUDFormatTypeOneDescriptor_FORMATTYPEONE). +|4|bNrChannels|1|0x02|2 channels (AUDDSpeakerDriver_NUMCHANNELS). +|5|bSubFrameSize|1|0x02|Two bytes per audio subframe\n + (AUDDSpeakerDriver_BYTESPERSAMPLE). +|6|bBitResolution|1|0x10|16 bits per sample\n + (AUDDSpeakerDriver_BYTESPERSAMPLE * 2). +|7|bSamFreqType|1|0x01|One frequency supported. +|8|tSamFreq|3|4800|4800Hz (AUDDSpeakerDriver_SAMPLERATE). + + Standard %Endpoint Descriptor (AUDEndpointDescriptor) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x09|Size of AUDFormatTypeOneDescriptor1 in bytes. +|1|bDescriptorType|1|0x24|ENDPOINT descriptor (USBGenericDescriptor_ENDPOINT). +|2|bEndpointAddress|1|0x85|IN endpoint 5\n + USBEndpointDescriptor_ADDRESS()\n + AUDDSpeakerDriverDescriptors_DATAIN +|3|bmAttributes|1|0x01|Isochronous, not shared\n + (USBEndpointDescriptor_ISOCHRONOUS). +|4|wMaxPacketSize|2|0x????|BOARD_USB_ENDPOINTS_MAXPACKETSIZE(5). +|6|bInterval|1|0x01|One packet per frame. +|7|bRefresh|1|0x00|Unused. +|8|bSynchAddress|1|0x00|Unused. + + Class-specific Isochronous Audio Data Endpoint Descriptor + (AUDDataEndpointDescriptor) +||Offset||Field||Size||Value||Description +|0|bLength|1|0x07|Size of AUDDataEndpointDescriptor in bytes. +|1|bDescriptorType|1|0x25|CS_ENDPOINT descriptor\n + (AUDGenericDescriptor_ENDPOINT). +|2|bDescriptorSubType|1|0x01|GENERAL subtype\n + (AUDDataEndpointDescriptor_SUBTYPE). +|3|bmAttributes|1|0x00|No sampling frequency control\n + no pitch control\n + no packet padding +|4|bLockDelayUnits|1|0x00|Unused. +|5|wLockDelay|2|0x0000|Unused. + + !!!Modified methods for new function + Several methods modified for new recorder function. + + !!Request handlers callbacks + Add handler for new Interface, Terminal and Unit IDs. + See AUDDSpeakerDriver_RequestHandler. + + !!Add function for recording USB stream + See AUDDSpeakerDriver_Write. +*/ -- cgit v1.2.3