Перейти к содержанию
    

USB Composite Device

Добрый день!

Есть у меня на руках USB железка использующая Сustom Сlass и подписанный драйвер. Решил я к ней прикрутить еще и CDC. Собрал Composite Device содержащий Сustom Class и CDC. Так вот... Если VID/PID поставить неизвестные ОС, то появляется составное устройство состоящее из виртуального ком-порта (что и требуется) и неизвестного устройства (драйвер устройства Custom Class не видит своих VID/PID). А если VID/PID поставить знакомые драйверу, то в системе появляется устройство Custom Class, и никакого составного устройства... Изменения в inf файл драйвера Custom Class мне Windows 10(64) не позволяет внести. 
Отсюда вопрос:
Как мне рассказать Windows о том, что для CDC необходимо установить стандартный драйвер ком-порта, а для Custom Class свой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет ли ошибок в нумерации интерфейсов? Interface Association descriptor есть у каждой функции в данном составном устройстве?

Ещё... попробуйте сменить vid pid у устройства и проверить- любой ли вариант порядка функций будет опознаваться одинаково? Каждый теаст делайте на новом pid или удаляйте устройства 

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 часа назад, GenaSPB сказал:

Нет ли ошибок в нумерации интерфейсов? ...

Нет, там все в порядке. Все происходит согласно спецификации Microsoft.

Если для вид/пид нет зарегистрированного драйвер - грузится универсальный. Ставится CDC и неизвестное устройство т.к. в дескрипторе интерфейса указано vendor specific.

Если вид/пид совпадают с каким нибудь драйвером грузится он. 

Но в моем драйвере Custom Class нет ни слова про интерфейсы. Только вид/пид. Соответственно в систему ставится только Custom Class. 

Но... Если в inf файле драйвера Custom Class добавить строчку с указанием вид/пид/интерфейс то все работает как надо! Воткнешь только Custom Class ставится только он, воткнешь в составе Composite Device ставится весь композит девайс с Custom Class.

Проблема в том, что Window (x64) не позволяет устанавливать  неподписанные драйверы. Решений для своего компа более, чем одно. Но как быть с распространениям своего девайса? Microsoft не предлагает решения. Т.е. они полагают, что производить USB устройства могут только большие производители, которые могут отдавать 300-400$ в месяц за сертификат?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас vendor specific это что-то отличающиеся от winusb? Для него есть штатный способ автоинсталляции драйвера

 

Про смену порядка устройств вы е ответили...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 часов назад, GenaSPB сказал:

У вас vendor specific это что-то отличающиеся от winusb? Для него есть штатный способ автоинсталляции драйвера

Да, отличающийся немного, да есть штатный способ инсталляции. НО дело не в инсталляции драйвера. Он (драйвер) установлен нормально. Дело в том, как винда его применяет.

 

Мой способ с добавлением строчки тоже не взлетел. Работает только если винда запускается в защищенном режиме. Если в обычном тоже применяет драйвер Custom Class и не устанавливает Composite Device. Остается только вовсе убирать из драйвера строчку без указания интерфейса. 

Цитата

Про смену порядка устройств вы е ответили...

Смена порядка интерфейсов тоже ни к чему не приводит, да и не должна была...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 hours ago, sobr said:

Смена порядка интерфейсов тоже ни к чему не приводит

Правильно ли я понял, что подписанный драйвер перестает ставится если добавляется интерфейс CDC в любом месте?
Или CDC сам не ставится?

зы: давно бы дамп дескриптора скинули. Частая ошиька например - что в IAD не те номера интерфейсов пишут

IAD и перед тем дескриптором что принадлжит оригинальному устройству есть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, GenaSPB сказал:

Правильно ли я понял, что подписанный драйвер перестает ставится если добавляется интерфейс CDC в любом месте?
Или CDC сам не ставится?

зы: давно бы дамп дескриптора скинули. Частая ошиька например - что в IAD не те номера интерфейсов пишут

IAD и перед тем дескриптором что принадлжит оригинальному устройству есть?

Вы меня конечно извините...
Но Вы либо плохо читаете, либо плохо понимаете прочитанное.

Нет никаких ошибок! Все происходит согласно тому как Микрософт декларирует! 

Композитное устройство как устройство имеет вид/пид подписанного драйвера. Виндовс находит подписанный драйвер на это вид/пид и не найдя ни слова про номера интересов в драйвере ставит весь девайс как устройство прописанное в подписанном драйвере! Только его! Никакого композитора!

Если вид/пид сменить на неизвестный, то не найдя вид/пид в своих записях виндовс начинает читать дескрипторы и найдя там композитное устройство ставит драйвер стандартного класса CDC  и неизвестное устройство, т.к. там в дескрипторе указанно вендор специфик.

Но если в подписанном драйвере добавить к вид/пид номер интерфейса то все начинает работать! Но как скормить виндовс измененный драйвер, не локально а массово?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странности рассказываете...

Знаю что ходит по рукам одна конструкция, в которой USB композитное устройство - и у нему подходит драйвр VCP от ST, подписанный.
На остальных интерфейсах там живёт аудио карта.
Я сам не держал в руках, но слышал...



 

Может на время решит?

 

"c:\Program Files (x86)\Windows Kits\10\bin\x86\Inf2Cat.exe" /v /driver:. /os:6_3_X86,6_3_X64,8_X64,8_X86,Server8_X64,Server2008R2_X64,7_X64,7_X86,Server2008_X64,Server2008_X86,Vista_X64,Vista_X86,Server2003_X64,Server2003_X86,XP_X64,XP_X86,2000,10_X86,10_X64,Server10_X64
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\signtool" sign /v /n "yoyr_name" /a /tr http://timestamp.globalsign.com/?signature=sha2 /td sha256 *.cat
pause

 

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 часов назад, GenaSPB сказал:

Странности рассказываете...

Знаю что ходит по рукам одна конструкция, в которой USB композитное устройство - и у нему подходит драйвр VCP от ST, подписанный.
На остальных интерфейсах там живёт аудио карта.
Я сам не держал в руках, но слышал...



 

Может на время решит?

 

"c:\Program Files (x86)\Windows Kits\10\bin\x86\Inf2Cat.exe" /v /driver:. /os:6_3_X86,6_3_X64,8_X64,8_X86,Server8_X64,Server2008R2_X64,7_X64,7_X86,Server2008_X64,Server2008_X86,Vista_X64,Vista_X86,Server2003_X64,Server2003_X86,XP_X64,XP_X86,2000,10_X86,10_X64,Server10_X64
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\signtool" sign /v /n "yoyr_name" /a /tr http://timestamp.globalsign.com/?signature=sha2 /td sha256 *.cat
pause

 

 

И всё-таки не хотите вы вникать в написанное...

Первое - Как подписать драйвер самоподписанным сертификатом я знаю.

Второе -По поводу конструкции, которая ходить по рукам... В драйвере для VCP от ST прописан номер интерфейса (все как меня, когда я доработал драйвер для custom class) а аудиокарта - стандартный класс «Audio Device Class»  (у меня CDC).

Третье - В моем случае да и другие начиная с windows 10 для VCP драйвер от ST уже не нужен, в винде уже прописан класс CDC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Про то что в inf не был прописан номер интерфейса я упустил ...

Про встроенные в десятую винду драйверыся,в курсе и этим пользуюсь 

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

История продолжается.

Предыдущую проблему удалось решить покупкой сертификата от GlobalSign. Появилась новая:

Берем две одинаковые на первый взгляд ОС (номер сборки, разрядность и т.д.), при отсутствии драйвера на одной мой девайс определяется нормально, композитное устройство состоящее из компорта и неизвестного устройства (драйвер пока не установлен). На другой - композитное устройство с восклицательным знаком, при попытке указать ему на нужный драйвер появляется сообщение "Возникли проблемы с установкой драйвера" и появляется мое устройство с восклицательным знаком. компорт вообще не показывается.

Программа USBLyzer  показывает, что на обоих системах девайс корректно передает все дескрипторы. 

Эта ситуация наблюдалась на одинаковых Windows 7 и одинаковых Windows 10.

Вопрос: Как узнать что вторую систему не устраивает? Почему она нормально не идентифицирует композитное устройство и не определяет хотя бы стандартный компорт? Есть ли какие нибудь способы (средства) диагностики?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Логи инсталлятора посмотрите, иногда помогает понять, что не нравится системе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...