Как подлючить более одного устройства к USB
Расскажу вкратце историю:
Я сделал с коллегой устройство, которое подключается к USB порту компьютера, таких устройств есть несколько.
Когда подключаешь одно устройство - проблем нету, но когда подключаешь еще одно устройство ... Оба устройства перестают работать ...
Я сам написал драйвер на основе драйвера DDK - BulkUSB, драйвер получился отменный, хорошо работает и все дела, но вот при подключении более одного аппарата драйвер "падает" ...
Подскажете пожалуйста, что сделать, чтобы драйвер не падал и мог обслуживать более одного устройства.
P.S. Писал на C, компилировал на DDK 7600.
Заранее благодарен, жду ответа.
Расскажу вкратце историю:
Я сделал с коллегой устройство, которое подключается к USB порту компьютера, таких устройств есть несколько.
Когда подключаешь одно устройство - проблем нету, но когда подключаешь еще одно устройство ... Оба устройства перестают работать ...
Я сам написал драйвер на основе драйвера DDK - BulkUSB, драйвер получился отменный, хорошо работает и все дела, но вот при подключении более одного аппарата драйвер "падает" ...
Подскажете пожалуйста, что сделать, чтобы драйвер не падал и мог обслуживать более одного устройства.
P.S. Писал на C, компилировал на DDK 7600.
Заранее благодарен, жду ответа.
Свой хрустальный шар разбил давным давно, можно на бобах погадать, но продуктивнее будет разговаривать по соурсу, минидампу, ошибкам и иже с ними, а не по абстрактному коню в вакууме.
PS: Раз драйвер не работает с несколькими устройствами то он уже как минимум не "отменный".
А шара и не нужно ...
Минидампа нету !!! - BSOD не выскакивает, просто оба устройства отключаются, а в "Диспетчере устрйств" драйвер светится с "восклецательным знаком" ...
Я не претендую на "мега" драйвер ...
---
Я теперь еще кое-что расскажу про программирование устройств на базе PIC:
1. Когда программируешь устройство на базе PIC контроллера, для работы с USB - заполняешь специальную структуру, которая описывает устройство, т.е. PID/VID пару, описание устройства, буфер и т.д.
2. При написании драйвера, в функции AddDevice, когда создается устройство - мы вызываем функцию WdfDeviceCreateDeviceInterface и туда передаем GUID, который обозначает класс устройств.
3. В INI файле - тоже есть ClassGuid, который тоже означает класс устройств.
Я спрашиваю в общем - какая технология того, чтобы драйвер обрабатывал несколько устройств одновременно ...
Когда я пойму, какой принцип - может мне и помощи в коде не нужно будет - сам дойду ...
Заранее благодарен, жду ответа.
А как мне это поможет ?
Статус ошибки: STATUS_OBJECT_NAME_EXISTS.
Да, оно существует, т.к. GUID то у меня один и тот же ... Вот что в таком случае делать - я не знаю ...
Как бы читаем 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.
Как бы читаем MSDN, ванимательно, начиная с WdfDeviceCreateDeviceInterface .
Я это уже читал ...
Вопрос в том, что мне делать в таком случае ? - каждый раз генерировать новое значение GUID при подключении нового устройства ?!
А в таком случае - мой драйвер сможет обслуживать более одного устройства ?!
P.S. А как в DDK генерировать GUID программно ?
И где здесь про генерацию различных GUID'ов?
PS: Перевожу MSDN, WDK и MAN'ы. Дорого.
Вот с этой: "$WinDDK$\7600.16385.0\src\usb\usbsamp\sys\" - а в чем проблема ?
Я использую DDK 7600 ...