SAMV71 Xplained Ultra Software Package 1.3

USB Device 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.

UsbAudioSpeakerRecorder.png

USB Desktop Speaker Hierarchy

Modify the configuration descriptor:

New descriptor for the terminals and unit should be added, and according interface, too.

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
(AUDGenericDescriptor_INTERFACE).
2 bDescriptorSubType 1 0x03 INPUT_TERMINAL subtype
(AUDGenericDescriptor_INPUTTERMINAL).
3 bTerminalID 1 0x03 ID of this Input Terminal
(AUDDSpeakerDriverDescriptors_INPUTTERMINAL_REC).
4 wTerminalType 2 0x0403 Terminal is Speaker Phone
(AUDInputTerminalDescriptor_SPEAKERPHONE).
6 bAssocTerminal 1 0x04 Associated to Output Terminal
(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
(AUDGenericDescriptor_INTERFACE).
2 bDescriptorSubType 1 0x04 OUTPUT_TERMINAL subtype
(AUDGenericDescriptor_OUTPUTTERMINAL).
3 bTerminalID 1 0x04 ID of this Output Terminal
(AUDDSpeakerDriverDescriptors_OUTPUTTERMINAL_REC).
4 wTerminalType 2 0x0301 Terminal is USB stream
(AUDOutputTerminalDescriptor_USBTREAMING).
6 bAssocTerminal 1 0x03 Associated to Input Terminal
(AUDDSpeakerDriverDescriptors_INPUTTERMINAL_REC).
7 bSourceID 1 0x05 From Feature Unit
(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
(AUDGenericDescriptor_INTERFACE).
2 bDescriptorSubType 1 0x02 FEATURE_UNIT subtype
(AUDGenericDescriptor_FEATUREUNIT).
3 bUnitID 1 0x05 ID of this Feature Unit
(AUDDSpeakerDriverDescriptors_FEATUREUNIT_REC).
4 bSourceID 1 0x03 From Input Terminal
(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
(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
(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
(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
(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
(AUDGenericDescriptor_INTERFACE).
2 bDescriptorSubType 1 0x01 GENERAL subtype
(AUDStreamingInterfaceDescriptor_GENERAL).
3 bTerminalLink 1 0x02 Unit ID of the Input Terminal
(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
(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
(AUDDSpeakerDriver_BYTESPERSAMPLE).
6 bBitResolution 1 0x10 16 bits per sample
(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
USBEndpointDescriptor_ADDRESS()
AUDDSpeakerDriverDescriptors_DATAIN
3 bmAttributes 1 0x01 Isochronous, not shared
(USBEndpointDescriptor_ISOCHRONOUS).
4 wMaxPacketSize 2 0x???? CHIP_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
(AUDGenericDescriptor_ENDPOINT).
2 bDescriptorSubType 1 0x01 GENERAL subtype
(AUDDataEndpointDescriptor_SUBTYPE).
3 bmAttributes 1 0x00 No sampling frequency control
no pitch control
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().

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines