LINUX.ORG.RU

История изменений

Исправление COKPOWEHEU, (текущая версия) :

Блин, а как твой дескриптор переписать на одно у-во, например на микрофон.

У меня архитектура аудиоустройства такая:

  • 1 USB (на динамик)

  • 2 MIC (виртуальный)

  • 3 [->1], заглушка под feature

  • 4 [->2], заглушка под feature

  • 5 [->3], Speaker (виртуальный)

  • 6 [->4], USB (на микрофон)

Соответственно если динамик не нужен, удаляете все нечетные сущности. Плюс можно в начале дескриптора изменить bNumInterfaces на 2, в заголовочном дескрипторе уменьшить количество интерфейсов до 1:

ARRLEN1(//AC interface header
        bLENGTH, //bLength
        USB_DESCR_CS_INTERFACE, //bDescriptorType
        1, //bDescriptorSubType
        USB_U16(0x0100), //bcdADC //AudioDeviceClass серийный номер
        wTOTALLENGTH, //wTotalLength
/**/   1, //bInCollection //количество интерфейсов в коллекции
        1, //bInterfaceNr(1), //массив (список) номеров интерфейсов в коллекции
/**/    //bInterfaceNr(2), ...
      )

Ну и лишний интерфейс вместе с эндпоинтом удалить. Само собой, в оставшемся эндпоинте поменять bTerminalLink.

У тебя там какая то магия в подсчете полей ))). Блин.

Ну магия, ну и что. С кем не бывает… А если серьезно, я как представил считать все это вручную, сразу стало лень, пришлось колдовать. Статьи-то мои почитайте, там ядро более-менее описано

Исходная версия COKPOWEHEU, :

Блин, а как твой дескриптор переписать на одно у-во, например на микрофон.

У меня архитектура аудиоустройства такая:

[list] [*]1. USB (на динамик) [*]2. MIC (виртуальный) [*]3. (подключено к 1), заглушка под feature [*]4. (подключено к 2), заглушка под feature [*]5. (подключено к 3), Speaker (виртуальный) [*]6. (подключено к 4), USB (на микрофон) [/list]

Соответственно если динамик не нужен, удаляете все нечетные сущности. Плюс можно в начале дескриптора изменить bNumInterfaces на 2, в заголовочном дескрипторе уменьшить количество интерфейсов до 1: [code=c] ARRLEN1(//AC interface header bLENGTH, //bLength USB_DESCR_CS_INTERFACE, //bDescriptorType 1, //bDescriptorSubType USB_U16(0x0100), //bcdADC //AudioDeviceClass серийный номер wTOTALLENGTH, //wTotalLength // 1, //bInCollection //количество интерфейсов в коллекции 1, //bInterfaceNr(1), //массив (список) номеров интерфейсов в коллекции // //bInterfaceNr(2), … ) [/code]

Ну и лишний интерфейс вместе с эндпоинтом удалить. Само собой, в оставшемся эндпоинте поменять bTerminalLink.

У тебя там какая то магия в подсчете полей ))). Блин.

Ну магия, ну и что. С кем не бывает… А если серьезно, я как представил считать все это вручную, сразу стало лень, пришлось колдовать. Статьи-то мои почитайте, там ядро более-менее описано