Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как подлючить более одного устройства к USB

6.0K
10 марта 2011 года
spyrytus
51 / / 14.07.2006
Здравствуйте.

Расскажу вкратце историю:
Я сделал с коллегой устройство, которое подключается к USB порту компьютера, таких устройств есть несколько.
Когда подключаешь одно устройство - проблем нету, но когда подключаешь еще одно устройство ... Оба устройства перестают работать ...

Я сам написал драйвер на основе драйвера DDK - BulkUSB, драйвер получился отменный, хорошо работает и все дела, но вот при подключении более одного аппарата драйвер "падает" ...

Подскажете пожалуйста, что сделать, чтобы драйвер не падал и мог обслуживать более одного устройства.

P.S. Писал на C, компилировал на DDK 7600.

Заранее благодарен, жду ответа.
260
11 марта 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: spyrytus
Здравствуйте.

Расскажу вкратце историю:
Я сделал с коллегой устройство, которое подключается к USB порту компьютера, таких устройств есть несколько.
Когда подключаешь одно устройство - проблем нету, но когда подключаешь еще одно устройство ... Оба устройства перестают работать ...

Я сам написал драйвер на основе драйвера DDK - BulkUSB, драйвер получился отменный, хорошо работает и все дела, но вот при подключении более одного аппарата драйвер "падает" ...

Подскажете пожалуйста, что сделать, чтобы драйвер не падал и мог обслуживать более одного устройства.

P.S. Писал на C, компилировал на DDK 7600.

Заранее благодарен, жду ответа.



Свой хрустальный шар разбил давным давно, можно на бобах погадать, но продуктивнее будет разговаривать по соурсу, минидампу, ошибкам и иже с ними, а не по абстрактному коню в вакууме.

PS: Раз драйвер не работает с несколькими устройствами то он уже как минимум не "отменный".

6.0K
11 марта 2011 года
spyrytus
51 / / 14.07.2006
Цитата:
Свой хрустальный шар разбил давным давно, можно на бобах погадать, но продуктивнее будет разговаривать по соурсу, минидампу, ошибкам и иже с ними, а не по абстрактному коню в вакууме.


А шара и не нужно ...
Минидампа нету !!! - BSOD не выскакивает, просто оба устройства отключаются, а в "Диспетчере устрйств" драйвер светится с "восклецательным знаком" ...

Цитата:
PS: Раз драйвер не работает с несколькими устройствами то он уже как минимум не "отменный".


Я не претендую на "мега" драйвер ...
---
Я теперь еще кое-что расскажу про программирование устройств на базе PIC:
1. Когда программируешь устройство на базе PIC контроллера, для работы с USB - заполняешь специальную структуру, которая описывает устройство, т.е. PID/VID пару, описание устройства, буфер и т.д.
2. При написании драйвера, в функции AddDevice, когда создается устройство - мы вызываем функцию WdfDeviceCreateDeviceInterface и туда передаем GUID, который обозначает класс устройств.
3. В INI файле - тоже есть ClassGuid, который тоже означает класс устройств.

Я спрашиваю в общем - какая технология того, чтобы драйвер обрабатывал несколько устройств одновременно ...
Когда я пойму, какой принцип - может мне и помощи в коде не нужно будет - сам дойду ...

Заранее благодарен, жду ответа.

260
11 марта 2011 года
Ramon
1.1K / / 16.08.2003
В добавление к вашему рассказу, USB девайс должен иметь серийный номер который начинает фигурировать в реестре с целью идентификации конкретного устройства наряду с VID/PID и номером порта на котором сидит устройство. Однако это вам не поможет. Как и информация о том, как идет процесс эннумерации устройств с участием драйвера шины, созданием PDO, FDO и иже с ними. Расставляйте ассёрты на все свои NTSTATUS'ы получайте место возникновения ошибки, а дальше, либо сами постигните причину, либо начнем предметный разговор, либо и то и другое.
6.0K
11 марта 2011 года
spyrytus
51 / / 14.07.2006
Я и так знаю, где падает - WdfDeviceCreateDeviceInterface ...
А как мне это поможет ?
Статус ошибки: STATUS_OBJECT_NAME_EXISTS.
Да, оно существует, т.к. GUID то у меня один и тот же ... Вот что в таком случае делать - я не знаю ...
260
11 марта 2011 года
Ramon
1.1K / / 16.08.2003
Вот с этого и нужно было начинать.

Как бы читаем MSDN, внимательно, начиная с WdfDeviceCreateDeviceInterface .

Цитата:

Remarks
Drivers can use the ReferenceString parameter to differentiate different instances of a single interface. In other words, if a driver calls WdfDeviceCreateDeviceInterface twice for the same device interface class, the driver can specify a different ReferenceString parameter each time. When an instance of an interface is opened, the I/O manager passes the instance's reference string to the driver. The reference string is appended to the path component of the interface instance's name. The driver can then use the reference string to determine which instance of the device interface class is being opened.

For more information about device interfaces and the WdfDeviceCreateDeviceInterface method, see Using Device Interfaces.

6.0K
13 марта 2011 года
spyrytus
51 / / 14.07.2006
Цитата: Ramon
Вот с этого и нужно было начинать.
Как бы читаем MSDN, ванимательно, начиная с WdfDeviceCreateDeviceInterface .


Я это уже читал ...
Вопрос в том, что мне делать в таком случае ? - каждый раз генерировать новое значение GUID при подключении нового устройства ?!
А в таком случае - мой драйвер сможет обслуживать более одного устройства ?!

P.S. А как в DDK генерировать GUID программно ?

260
13 марта 2011 года
Ramon
1.1K / / 16.08.2003
Не читали ни разу, вам даже цитата была приведена:

Цитата:
Drivers can use the ReferenceString parameter to differentiate different instances of a single interface....



Цитата:
Драйвера могут использовать параметр ReferenceString, для того, чтобы различать экземпляры одного интерфейса....



И где здесь про генерацию различных GUID'ов?

PS: Перевожу MSDN, WDK и MAN'ы. Дорого.

260
13 марта 2011 года
Ramon
1.1K / / 16.08.2003
А теперь вопрос на засыпку, так из какой, вы говорите, папки WDK был взят соурс за основу?
6.0K
13 марта 2011 года
spyrytus
51 / / 14.07.2006
Цитата: Ramon
А теперь вопрос на засыпку, так из какой, вы говорите, папки WDK был взят соурс за основу?


Вот с этой: "$WinDDK$\7600.16385.0\src\usb\usbsamp\sys\" - а в чем проблема ?
Я использую DDK 7600 ...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог