Подробное описание устройства HID (USB) - PullRequest
1 голос
/ 21 сентября 2010

Я подключил свой сканер штрих-кода к USB-порту. Мне нужно было изменить режим с HID-клавиатуры на эмуляцию последовательного порта (читатель знает, что система воспринимает это как обычное HID-устройство, а не системную HID-клавиатуру), чтобы получать данные со сканера непосредственно в мое приложение. Пока все работает отлично.

Проблема в том, что мне нужно знать номера VID и PID, чтобы найти мое устройство. Я знаю эти значения, но я хочу найти свое устройство по имени.

Я нашел программу под названием SimpleHIDWrite:

http://www.lvr.com/hidpage.htm

Когда я запускаю программу, у моего устройства есть приятное описание "Symbol Bar Code Scanner".

Я пытался достичь этого имени самостоятельно - я использовал структуры:

HIDD_ATTRIBUTES
HIDP_CAPS
SP_DEVICE_INTERFACE_DATA
SP_DEVICE_INTERFACE_DETAIL_DATA
SP_DEVINFO_DATA

Однако я не смог найти поле в структуре, которое позволило бы мне получить доступ к этому описанию.

К сожалению, я не могу найти исходный код SimpleHIDWrite, чтобы узнать, как это сделать.

Вы можете мне помочь?

Ответы [ 3 ]

2 голосов
/ 23 сентября 2010

Я нашел ответ на свой вопрос здесь на форумах lvr.com:

Подробное описание устройства HID (USB) (lvr.com/forums)

2 голосов
/ 21 сентября 2010

В том же разделе этой страницы есть программа HidTest с исходным кодом.Эта программа, очевидно, использует код контроллера HID, найденный по ссылке, называемой «Набор компонентов контроллера HID для Delphi».Возможно, это может дать вам то, что вы ищете?(По крайней мере, если вы можете выбрать соответствующие части из всего этого кода Delphi.)


Я недавно исследовал точные вещи, но у меня не было времени, чтобы на самом деле попробовать какие-либооб этом еще.То, что здесь следует, немного умозрительно.

Я считаю, что вам нужно открыть соединение с устройством как USB-устройством.Функции на уровне HID не дают нужного описания. Здесь - это другой SO вопрос о получении VendorID и ProductID с USB-устройства.Я думаю, что вы могли бы использовать очень похожую технику для чтения USB_DEVICE_DESCRIPTOR и, таким образом, получить доступ к полю iProduct, которое, я считаю, должно быть описанием, которое вы хотите.

У меня естьнаткнуться на программу под названием USBView, которая, по-видимому, осуществляет такую ​​связь (между прочим) с USB-устройствами.Я нашел скомпилированную версию этого здесь .Однако источник предположительно включен в комплект для разработки драйверов Windows.Вероятно, это источник C или C ++, но у меня еще не было времени загрузить DDK от Microsoft и подтвердить, что там на самом деле.


РЕДАКТИРОВАТЬ:

У меня было времякопаться в этом глубже.И то, что вы узнали о HidD_GetProductString, тоже было полезно.Я также нашел эту страницу примеров от Intel.Программа «Показать HID» показывает один способ использования этой функции.

На основании документации этой функции и этого примера у меня создается впечатление, что она читает то же самое iProduct с устройства, очевидно, делая это.от уровня HID вместо уровня USB.Или что-то типа того.Все, что я точно знаю, это то, что он работает в моей собственной тестовой программе.

0 голосов
/ 22 сентября 2010

Хм ... проблема с iProduct заключается в том, что сначала я должен отправить запрос на эту строку, описывающую устройство, на устройство, а затем получить данные.Сканеры штрих-кода предназначены только для чтения, поэтому я не могу отправить данные (запрос) на устройство.

Я обнаружил, что в SimpleHID есть описание моего сканера "Symbol bar ocde scanner", и это точно то же имя, которое я вижу в панели управления (устройства и принтеры).Итак, мой вопрос, как получить это имя устройства?

...