Определение HID интерфейса для POS или Keyboard в C ++ - PullRequest
5 голосов
/ 18 января 2010

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

Есть ли способ определить это с помощью Win32 C ++, предпочтительно с помощью встроенной библиотеки HID для Windows (hidsdi.h)?

Ответы [ 3 ]

3 голосов
/ 18 января 2010

Вы можете использовать HidD_GetHidGuid , чтобы получить уникальный GUID для устройства. Руководства по интерфейсу устройства определяются каждым поставщиком устройства / прикладного программного обеспечения, Microsoft или третьей стороной по своему усмотрению. В некоторых случаях руководства публикуются и общедоступны и являются стандартными интерфейсами, а в некоторых случаях - нет.

Вы также можете использовать утилиту USBView от Microsoft, которая позволит вам просматривать дерево USB или просматривать реестр и посмотреть, сможете ли вы найти GUID для своего устройства. Вам все еще может потребоваться query ваше устройство, чтобы определить тип устройства, если данные конфигурации отсутствуют или оно не раскрывает себя, кроме универсального устройства, если ваше устройство поддерживает это.

Существует два типа GUID: класс устройства и интерфейс устройства. Устройство может быть только частью одного класса. К сожалению, GUID класса устройства и интерфейса устройства иногда совпадают, что сбивает с толку разработчиков. В WinXP DDK были созданы стандарты, чтобы попытаться сделать определение GUID менее запутанным.

См. Также этот предыдущий вопрос SO: Используйте RegisterDeviceNotification () для ВСЕХ USB-устройств.

1 голос
/ 14 февраля 2010

Вам понадобится использовать функции HidP_ для проверки возможностей скрытого отчета. Узнайте, какие возможности (использования) представлены устройством HIDPOS, и проверьте, присутствуют ли эти использования, используя HidD_GetPreparsedData (), HidP_GetCaps () и затем HidP_GetValueCaps (и / или ..ButtonCaps и т. Д.). Хорошее место для поиска примеров - страница Яна Аксельсона . Если присутствует использование, то у вас есть POS-устройство. Если нет, то это должна быть клавиатура (при условии, что вы подтвердили подключение устройства).

1 голос
/ 18 января 2010

Вот список возможных HID Guids: http://msdn.microsoft.com/en-us/library/ms791134.aspx и используйте HidD_GetHidGuid, как предложил Робото

...