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

Спасибо!


person yun    schedule 17.01.2017    source источник


Ответы (2)


Да, я понял это, и поэтому награда на самом деле не имеет значения.

Для использования нескольких скоростей передачи данных: Иметь альтернативные настройки с соответствующими дескрипторами формата аудиоданных / и т. Д. Для поддержки различных скоростей передачи по порядку; например: альтернативная настройка 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-битных целых чисел, отформатированных с младшим порядком байтов.

person yun    schedule 10.02.2017

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

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

person Ganesh Thiraviam    schedule 18.09.2017
comment
Спасибо, Ганеш, я в конце концов пришел к тому, чтобы узнать / понять эту часть о UAC2 через несколько месяцев после того, как я задал этот вопрос. - person yun; 22.09.2017