USB Audio Class 2.0 - Как поддерживать несколько битрейтов / частот дискретизации

Я немного запутался, как добавить поддержку нескольких битрейтов / частот дискретизации в USB Audio Class 2.0. По сравнению с USB Audio Class 1.0 (который дает вам возможность добавлять несколько скоростей и т. Д.), USB Audio Class 2.0 не дает такой возможности. Как бы я изменил свои дескрипторы для этого? Я где-то читал, что вы используете больше альтернативных настроек, но я не знаю, как это могло бы помочь...

Вот мой дескриптор аудиоформата:

audioformat.bLength                 = sizeof(usb_audio_format_type_1_desc_t)
audioformat.bDescriptorType         = 0x01
audioformat.bDescriptorSubtype      = 0x02
audioformat.bFormatType             = 0x01
audioformat.bSubSlotSize            = 3
audioformat.bBitResolution          = 24

Спасибо!

2 ответа

Решение

Да, так что я понял это, и, таким образом, награда не имеет большого значения.

Чтобы сделать несколько битрейтов: иметь альтернативные настройки с соответствующими дескрипторами формата аудиоданных /etc для поддержки разных битрейтов в порядке; например: альтернативная настройка 0 (без конечных точек), альтернативная настройка 1 (со всеми дескрипторами потока / класса, дескриптор формата поддерживает 16 бит), альтернативная настройка 2 (со всеми дескрипторами потока / класса дескриптор формата поддерживает 24 бита).

Для выполнения нескольких частот дискретизации: Вы должны следовать документу USB Audio Class 2.0 в формате CUR, MIN, MAX и передать управление хосту.

Например:

#define USB_AUDIO_SAMP_RATE_RANGE           { CPU16_TO_LE8_ARRAY(2), \
                                              CPU32_TO_LE8_ARRAY(SAMPLE_RATE_44_1), \
                                              CPU32_TO_LE8_ARRAY(SAMPLE_RATE_44_1), \
                                              CPU32_TO_LE8_ARRAY(0), \
                                              CPU32_TO_LE8_ARRAY(SAMPLE_RATE_48_0), \
                                              CPU32_TO_LE8_ARRAY(SAMPLE_RATE_48_0), \
                                              CPU32_TO_LE8_ARRAY(0)}

В качестве ссылки, LE8 - это младший 8-разрядный бит, и определения преобразуют 16- или 32-разрядное целое число в массив из 8-разрядных целых чисел, отформатированных в младшем порядке.

В USB Audio 2.0 (UAC2) есть несколько объектов синхронизации. Но USB Audio 1.0 (UAC1) не имеет его. UAC1 напрямую предоставляет различные образцы частоты, по которым мы можем запросить.

Но в UAC2 мы должны использовать Clock Entities. Есть какой-то конкретный дескриптор, дающий информацию о часах сущностей.

Другие вопросы по тегам